xref: /freebsd/sys/contrib/dev/acpica/common/dmtbdump1.c (revision 58308fadece25ae4c12bd2f4dce3d73d9c23be43)
1ff879b07SJung-uk Kim /******************************************************************************
2ff879b07SJung-uk Kim  *
3ff879b07SJung-uk Kim  * Module Name: dmtbdump1 - Dump ACPI data tables that contain no AML code
4ff879b07SJung-uk Kim  *
5ff879b07SJung-uk Kim  *****************************************************************************/
6ff879b07SJung-uk Kim 
7ff879b07SJung-uk Kim /******************************************************************************
8ff879b07SJung-uk Kim  *
9ff879b07SJung-uk Kim  * 1. Copyright Notice
10ff879b07SJung-uk Kim  *
11*58308fadSJung-uk Kim  * Some or all of this work - Copyright (c) 1999 - 2025, Intel Corp.
12ff879b07SJung-uk Kim  * All rights reserved.
13ff879b07SJung-uk Kim  *
14ff879b07SJung-uk Kim  * 2. License
15ff879b07SJung-uk Kim  *
16ff879b07SJung-uk Kim  * 2.1. This is your license from Intel Corp. under its intellectual property
17ff879b07SJung-uk Kim  * rights. You may have additional license terms from the party that provided
18ff879b07SJung-uk Kim  * you this software, covering your right to use that party's intellectual
19ff879b07SJung-uk Kim  * property rights.
20ff879b07SJung-uk Kim  *
21ff879b07SJung-uk Kim  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22ff879b07SJung-uk Kim  * copy of the source code appearing in this file ("Covered Code") an
23ff879b07SJung-uk Kim  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24ff879b07SJung-uk Kim  * base code distributed originally by Intel ("Original Intel Code") to copy,
25ff879b07SJung-uk Kim  * make derivatives, distribute, use and display any portion of the Covered
26ff879b07SJung-uk Kim  * Code in any form, with the right to sublicense such rights; and
27ff879b07SJung-uk Kim  *
28ff879b07SJung-uk Kim  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29ff879b07SJung-uk Kim  * license (with the right to sublicense), under only those claims of Intel
30ff879b07SJung-uk Kim  * patents that are infringed by the Original Intel Code, to make, use, sell,
31ff879b07SJung-uk Kim  * offer to sell, and import the Covered Code and derivative works thereof
32ff879b07SJung-uk Kim  * solely to the minimum extent necessary to exercise the above copyright
33ff879b07SJung-uk Kim  * license, and in no event shall the patent license extend to any additions
34ff879b07SJung-uk Kim  * to or modifications of the Original Intel Code. No other license or right
35ff879b07SJung-uk Kim  * is granted directly or by implication, estoppel or otherwise;
36ff879b07SJung-uk Kim  *
37ff879b07SJung-uk Kim  * The above copyright and patent license is granted only if the following
38ff879b07SJung-uk Kim  * conditions are met:
39ff879b07SJung-uk Kim  *
40ff879b07SJung-uk Kim  * 3. Conditions
41ff879b07SJung-uk Kim  *
42ff879b07SJung-uk Kim  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43ff879b07SJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
44ff879b07SJung-uk Kim  * Code or modification with rights to further distribute source must include
45ff879b07SJung-uk Kim  * the above Copyright Notice, the above License, this list of Conditions,
46ff879b07SJung-uk Kim  * and the following Disclaimer and Export Compliance provision. In addition,
47ff879b07SJung-uk Kim  * Licensee must cause all Covered Code to which Licensee contributes to
48ff879b07SJung-uk Kim  * contain a file documenting the changes Licensee made to create that Covered
49ff879b07SJung-uk Kim  * Code and the date of any change. Licensee must include in that file the
50ff879b07SJung-uk Kim  * documentation of any changes made by any predecessor Licensee. Licensee
51ff879b07SJung-uk Kim  * must include a prominent statement that the modification is derived,
52ff879b07SJung-uk Kim  * directly or indirectly, from Original Intel Code.
53ff879b07SJung-uk Kim  *
54ff879b07SJung-uk Kim  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55ff879b07SJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
56ff879b07SJung-uk Kim  * Code or modification without rights to further distribute source must
57ff879b07SJung-uk Kim  * include the following Disclaimer and Export Compliance provision in the
58ff879b07SJung-uk Kim  * documentation and/or other materials provided with distribution. In
59ff879b07SJung-uk Kim  * addition, Licensee may not authorize further sublicense of source of any
60ff879b07SJung-uk Kim  * portion of the Covered Code, and must include terms to the effect that the
61ff879b07SJung-uk Kim  * license from Licensee to its licensee is limited to the intellectual
62ff879b07SJung-uk Kim  * property embodied in the software Licensee provides to its licensee, and
63ff879b07SJung-uk Kim  * not to intellectual property embodied in modifications its licensee may
64ff879b07SJung-uk Kim  * make.
65ff879b07SJung-uk Kim  *
66ff879b07SJung-uk Kim  * 3.3. Redistribution of Executable. Redistribution in executable form of any
67ff879b07SJung-uk Kim  * substantial portion of the Covered Code or modification must reproduce the
68ff879b07SJung-uk Kim  * above Copyright Notice, and the following Disclaimer and Export Compliance
69ff879b07SJung-uk Kim  * provision in the documentation and/or other materials provided with the
70ff879b07SJung-uk Kim  * distribution.
71ff879b07SJung-uk Kim  *
72ff879b07SJung-uk Kim  * 3.4. Intel retains all right, title, and interest in and to the Original
73ff879b07SJung-uk Kim  * Intel Code.
74ff879b07SJung-uk Kim  *
75ff879b07SJung-uk Kim  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76ff879b07SJung-uk Kim  * Intel shall be used in advertising or otherwise to promote the sale, use or
77ff879b07SJung-uk Kim  * other dealings in products derived from or relating to the Covered Code
78ff879b07SJung-uk Kim  * without prior written authorization from Intel.
79ff879b07SJung-uk Kim  *
80ff879b07SJung-uk Kim  * 4. Disclaimer and Export Compliance
81ff879b07SJung-uk Kim  *
82ff879b07SJung-uk Kim  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83ff879b07SJung-uk Kim  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84ff879b07SJung-uk Kim  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85ff879b07SJung-uk Kim  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86ff879b07SJung-uk Kim  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87ff879b07SJung-uk Kim  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88ff879b07SJung-uk Kim  * PARTICULAR PURPOSE.
89ff879b07SJung-uk Kim  *
90ff879b07SJung-uk Kim  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91ff879b07SJung-uk Kim  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92ff879b07SJung-uk Kim  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93ff879b07SJung-uk Kim  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94ff879b07SJung-uk Kim  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95ff879b07SJung-uk Kim  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96ff879b07SJung-uk Kim  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97ff879b07SJung-uk Kim  * LIMITED REMEDY.
98ff879b07SJung-uk Kim  *
99ff879b07SJung-uk Kim  * 4.3. Licensee shall not export, either directly or indirectly, any of this
100ff879b07SJung-uk Kim  * software or system incorporating such software without first obtaining any
101ff879b07SJung-uk Kim  * required license or other approval from the U. S. Department of Commerce or
102ff879b07SJung-uk Kim  * any other agency or department of the United States Government. In the
103ff879b07SJung-uk Kim  * event Licensee exports any such software from the United States or
104ff879b07SJung-uk Kim  * re-exports any such software from a foreign destination, Licensee shall
105ff879b07SJung-uk Kim  * ensure that the distribution and export/re-export of the software is in
106ff879b07SJung-uk Kim  * compliance with all laws, regulations, orders, or other restrictions of the
107ff879b07SJung-uk Kim  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108ff879b07SJung-uk Kim  * any of its subsidiaries will export/re-export any technical data, process,
109ff879b07SJung-uk Kim  * software, or service, directly or indirectly, to any country for which the
110ff879b07SJung-uk Kim  * United States government or any agency thereof requires an export license,
111ff879b07SJung-uk Kim  * other governmental approval, or letter of assurance, without first obtaining
112ff879b07SJung-uk Kim  * such license, approval or letter.
113ff879b07SJung-uk Kim  *
114ff879b07SJung-uk Kim  *****************************************************************************
115ff879b07SJung-uk Kim  *
116ff879b07SJung-uk Kim  * Alternatively, you may choose to be licensed under the terms of the
117ff879b07SJung-uk Kim  * following license:
118ff879b07SJung-uk Kim  *
119ff879b07SJung-uk Kim  * Redistribution and use in source and binary forms, with or without
120ff879b07SJung-uk Kim  * modification, are permitted provided that the following conditions
121ff879b07SJung-uk Kim  * are met:
122ff879b07SJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
123ff879b07SJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
124ff879b07SJung-uk Kim  *    without modification.
125ff879b07SJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126ff879b07SJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
127ff879b07SJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
128ff879b07SJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
129ff879b07SJung-uk Kim  *    binary redistribution.
130ff879b07SJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
131ff879b07SJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
132ff879b07SJung-uk Kim  *    from this software without specific prior written permission.
133ff879b07SJung-uk Kim  *
134ff879b07SJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135ff879b07SJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136ff879b07SJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137ff879b07SJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138ff879b07SJung-uk Kim  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139ff879b07SJung-uk Kim  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140ff879b07SJung-uk Kim  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141ff879b07SJung-uk Kim  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142ff879b07SJung-uk Kim  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143ff879b07SJung-uk Kim  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144ff879b07SJung-uk Kim  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145ff879b07SJung-uk Kim  *
146ff879b07SJung-uk Kim  * Alternatively, you may choose to be licensed under the terms of the
147ff879b07SJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
148ff879b07SJung-uk Kim  * Software Foundation.
149ff879b07SJung-uk Kim  *
150ff879b07SJung-uk Kim  *****************************************************************************/
151ff879b07SJung-uk Kim 
152ff879b07SJung-uk Kim #include <contrib/dev/acpica/include/acpi.h>
153ff879b07SJung-uk Kim #include <contrib/dev/acpica/include/accommon.h>
154ff879b07SJung-uk Kim #include <contrib/dev/acpica/include/acdisasm.h>
155ff879b07SJung-uk Kim #include <contrib/dev/acpica/include/actables.h>
1569a4bc520SJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h>
157ff879b07SJung-uk Kim 
158ff879b07SJung-uk Kim /* This module used for application-level code only */
159ff879b07SJung-uk Kim 
160ff879b07SJung-uk Kim #define _COMPONENT          ACPI_CA_DISASSEMBLER
161ff879b07SJung-uk Kim         ACPI_MODULE_NAME    ("dmtbdump1")
162ff879b07SJung-uk Kim 
163ff879b07SJung-uk Kim 
164ff879b07SJung-uk Kim /*******************************************************************************
165ff879b07SJung-uk Kim  *
16697c0b5abSJung-uk Kim  * FUNCTION:    AcpiDmDumpAest
16797c0b5abSJung-uk Kim  *
16897c0b5abSJung-uk Kim  * PARAMETERS:  Table               - A AEST table
16997c0b5abSJung-uk Kim  *
17097c0b5abSJung-uk Kim  * RETURN:      None
17197c0b5abSJung-uk Kim  *
17297c0b5abSJung-uk Kim  * DESCRIPTION: Format the contents of a AEST table
17397c0b5abSJung-uk Kim  *
17497c0b5abSJung-uk Kim  * NOTE: Assumes the following table structure:
17597c0b5abSJung-uk Kim  *      For all AEST Error Nodes:
17697c0b5abSJung-uk Kim  *          1) An AEST Error Node, followed immediately by:
17797c0b5abSJung-uk Kim  *          2) Any node-specific data
17897c0b5abSJung-uk Kim  *          3) An Interface Structure (one)
17997c0b5abSJung-uk Kim  *          4) A list (array) of Interrupt Structures
18097c0b5abSJung-uk Kim  *
18197c0b5abSJung-uk Kim  * AEST - ARM Error Source table. Conforms to:
18297c0b5abSJung-uk Kim  * ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document Sep 2020
18397c0b5abSJung-uk Kim  *
18497c0b5abSJung-uk Kim  ******************************************************************************/
18597c0b5abSJung-uk Kim 
18697c0b5abSJung-uk Kim void
AcpiDmDumpAest(ACPI_TABLE_HEADER * Table)18797c0b5abSJung-uk Kim AcpiDmDumpAest (
18897c0b5abSJung-uk Kim     ACPI_TABLE_HEADER       *Table)
18997c0b5abSJung-uk Kim {
19097c0b5abSJung-uk Kim     ACPI_STATUS             Status;
19197c0b5abSJung-uk Kim     UINT32                  Offset = sizeof (ACPI_TABLE_HEADER);
19297c0b5abSJung-uk Kim     ACPI_AEST_HEADER        *Subtable;
19397c0b5abSJung-uk Kim     ACPI_AEST_HEADER        *NodeHeader;
19497c0b5abSJung-uk Kim     ACPI_AEST_PROCESSOR     *ProcessorSubtable;
19597c0b5abSJung-uk Kim     ACPI_DMTABLE_INFO       *InfoTable;
19697c0b5abSJung-uk Kim     ACPI_SIZE               Length;
19797c0b5abSJung-uk Kim     UINT8                   Type;
19892f570c3SJung-uk Kim     UINT8                   Revision = Table->Revision;
19992f570c3SJung-uk Kim     UINT32                  Count;
20092f570c3SJung-uk Kim     ACPI_AEST_NODE_INTERFACE_HEADER *InterfaceHeader;
20197c0b5abSJung-uk Kim 
20297c0b5abSJung-uk Kim 
20397c0b5abSJung-uk Kim     /* Very small, generic main table. AEST consists of mostly subtables */
20497c0b5abSJung-uk Kim 
20597c0b5abSJung-uk Kim     while (Offset < Table->Length)
20697c0b5abSJung-uk Kim     {
20797c0b5abSJung-uk Kim         NodeHeader = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
20897c0b5abSJung-uk Kim 
20997c0b5abSJung-uk Kim         /* Dump the common error node (subtable) header */
21097c0b5abSJung-uk Kim 
21197c0b5abSJung-uk Kim         Status = AcpiDmDumpTable (Table->Length, Offset, NodeHeader,
21297c0b5abSJung-uk Kim             NodeHeader->Length, AcpiDmTableInfoAestHdr);
21397c0b5abSJung-uk Kim         if (ACPI_FAILURE (Status))
21497c0b5abSJung-uk Kim         {
21597c0b5abSJung-uk Kim             return;
21697c0b5abSJung-uk Kim         }
21797c0b5abSJung-uk Kim 
21897c0b5abSJung-uk Kim         Type = NodeHeader->Type;
21997c0b5abSJung-uk Kim 
22097c0b5abSJung-uk Kim         /* Setup the node-specific subtable based on the header Type field */
22197c0b5abSJung-uk Kim 
22297c0b5abSJung-uk Kim         switch (Type)
22397c0b5abSJung-uk Kim         {
22497c0b5abSJung-uk Kim         case ACPI_AEST_PROCESSOR_ERROR_NODE:
22597c0b5abSJung-uk Kim             InfoTable = AcpiDmTableInfoAestProcError;
22697c0b5abSJung-uk Kim             Length = sizeof (ACPI_AEST_PROCESSOR);
22797c0b5abSJung-uk Kim             break;
22897c0b5abSJung-uk Kim 
22997c0b5abSJung-uk Kim         case ACPI_AEST_MEMORY_ERROR_NODE:
23097c0b5abSJung-uk Kim             InfoTable = AcpiDmTableInfoAestMemError;
23197c0b5abSJung-uk Kim             Length = sizeof (ACPI_AEST_MEMORY);
23297c0b5abSJung-uk Kim             break;
23397c0b5abSJung-uk Kim 
23497c0b5abSJung-uk Kim         case ACPI_AEST_SMMU_ERROR_NODE:
23597c0b5abSJung-uk Kim             InfoTable = AcpiDmTableInfoAestSmmuError;
23697c0b5abSJung-uk Kim             Length = sizeof (ACPI_AEST_SMMU);
23797c0b5abSJung-uk Kim             break;
23897c0b5abSJung-uk Kim 
23997c0b5abSJung-uk Kim         case ACPI_AEST_VENDOR_ERROR_NODE:
24092f570c3SJung-uk Kim             switch (Revision)
24192f570c3SJung-uk Kim             {
24292f570c3SJung-uk Kim             case 1:
24397c0b5abSJung-uk Kim                 InfoTable = AcpiDmTableInfoAestVendorError;
24497c0b5abSJung-uk Kim                 Length = sizeof (ACPI_AEST_VENDOR);
24597c0b5abSJung-uk Kim                 break;
24697c0b5abSJung-uk Kim 
24792f570c3SJung-uk Kim             case 2:
24892f570c3SJung-uk Kim                 InfoTable = AcpiDmTableInfoAestVendorV2Error;
24992f570c3SJung-uk Kim                 Length = sizeof (ACPI_AEST_VENDOR_V2);
25092f570c3SJung-uk Kim                 break;
25192f570c3SJung-uk Kim 
25292f570c3SJung-uk Kim             default:
25392f570c3SJung-uk Kim                 AcpiOsPrintf ("\n**** Unknown AEST revision 0x%X\n", Revision);
25492f570c3SJung-uk Kim                 return;
25592f570c3SJung-uk Kim             }
25692f570c3SJung-uk Kim             break;
25792f570c3SJung-uk Kim 
25897c0b5abSJung-uk Kim         case ACPI_AEST_GIC_ERROR_NODE:
25997c0b5abSJung-uk Kim             InfoTable = AcpiDmTableInfoAestGicError;
26097c0b5abSJung-uk Kim             Length = sizeof (ACPI_AEST_GIC);
26197c0b5abSJung-uk Kim             break;
26297c0b5abSJung-uk Kim 
26392f570c3SJung-uk Kim         case ACPI_AEST_PCIE_ERROR_NODE:
26492f570c3SJung-uk Kim             InfoTable = AcpiDmTableInfoAestPCIeError;
26592f570c3SJung-uk Kim             Length = sizeof (ACPI_AEST_PCIE);
26692f570c3SJung-uk Kim             break;
26792f570c3SJung-uk Kim 
26892f570c3SJung-uk Kim         case ACPI_AEST_PROXY_ERROR_NODE:
26992f570c3SJung-uk Kim             InfoTable = AcpiDmTableInfoAestProxyError;
27092f570c3SJung-uk Kim             Length = sizeof (ACPI_AEST_PROXY);
27192f570c3SJung-uk Kim             break;
27292f570c3SJung-uk Kim 
27397c0b5abSJung-uk Kim         /* Error case below */
27497c0b5abSJung-uk Kim         default:
27597c0b5abSJung-uk Kim 
27697c0b5abSJung-uk Kim             AcpiOsPrintf ("\n**** Unknown AEST Error Subtable type 0x%X\n",
27797c0b5abSJung-uk Kim                 Type);
27897c0b5abSJung-uk Kim             return;
27997c0b5abSJung-uk Kim         }
28097c0b5abSJung-uk Kim 
28197c0b5abSJung-uk Kim         /* Point past the common header (to the node-specific data) */
28297c0b5abSJung-uk Kim 
28397c0b5abSJung-uk Kim         Offset += sizeof (ACPI_AEST_HEADER);
28497c0b5abSJung-uk Kim         Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
28597c0b5abSJung-uk Kim         AcpiOsPrintf ("\n");
28697c0b5abSJung-uk Kim 
28797c0b5abSJung-uk Kim         /* Dump the node-specific subtable */
28897c0b5abSJung-uk Kim 
28997c0b5abSJung-uk Kim         Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Length,
29097c0b5abSJung-uk Kim             InfoTable);
29197c0b5abSJung-uk Kim         if (ACPI_FAILURE (Status))
29297c0b5abSJung-uk Kim         {
29397c0b5abSJung-uk Kim             return;
29497c0b5abSJung-uk Kim         }
29597c0b5abSJung-uk Kim         AcpiOsPrintf ("\n");
29697c0b5abSJung-uk Kim 
29797c0b5abSJung-uk Kim         if (Type == ACPI_AEST_PROCESSOR_ERROR_NODE)
29897c0b5abSJung-uk Kim         {
29997c0b5abSJung-uk Kim             /*
30097c0b5abSJung-uk Kim              * Special handling for PROCESSOR_ERROR_NODE subtables
30197c0b5abSJung-uk Kim              * (to handle the Resource Substructure via the ResourceType
30297c0b5abSJung-uk Kim              * field).
30397c0b5abSJung-uk Kim              */
30497c0b5abSJung-uk Kim 
30597c0b5abSJung-uk Kim             /* Point past the node-specific data */
30697c0b5abSJung-uk Kim 
30797c0b5abSJung-uk Kim             Offset += Length;
30897c0b5abSJung-uk Kim             ProcessorSubtable = ACPI_CAST_PTR (ACPI_AEST_PROCESSOR, Subtable);
30997c0b5abSJung-uk Kim 
31097c0b5abSJung-uk Kim             switch (ProcessorSubtable->ResourceType)
31197c0b5abSJung-uk Kim             {
31297c0b5abSJung-uk Kim             /* Setup the Resource Substructure subtable */
31397c0b5abSJung-uk Kim 
31497c0b5abSJung-uk Kim             case ACPI_AEST_CACHE_RESOURCE:
31597c0b5abSJung-uk Kim                 InfoTable = AcpiDmTableInfoAestCacheRsrc;
31697c0b5abSJung-uk Kim                 Length = sizeof (ACPI_AEST_PROCESSOR_CACHE);
31797c0b5abSJung-uk Kim                 break;
31897c0b5abSJung-uk Kim 
31997c0b5abSJung-uk Kim             case ACPI_AEST_TLB_RESOURCE:
32097c0b5abSJung-uk Kim                 InfoTable = AcpiDmTableInfoAestTlbRsrc;
32197c0b5abSJung-uk Kim                 Length = sizeof (ACPI_AEST_PROCESSOR_TLB);
32297c0b5abSJung-uk Kim                 break;
32397c0b5abSJung-uk Kim 
32497c0b5abSJung-uk Kim             case ACPI_AEST_GENERIC_RESOURCE:
32597c0b5abSJung-uk Kim                 InfoTable = AcpiDmTableInfoAestGenRsrc;
32697c0b5abSJung-uk Kim                 Length = sizeof (ACPI_AEST_PROCESSOR_GENERIC);
32797c0b5abSJung-uk Kim                 break;
32897c0b5abSJung-uk Kim 
32997c0b5abSJung-uk Kim             /* Error case below */
33097c0b5abSJung-uk Kim             default:
33197c0b5abSJung-uk Kim                 AcpiOsPrintf ("\n**** Unknown AEST Processor Resource type 0x%X\n",
33297c0b5abSJung-uk Kim                     ProcessorSubtable->ResourceType);
33397c0b5abSJung-uk Kim                 return;
33497c0b5abSJung-uk Kim             }
33597c0b5abSJung-uk Kim 
33697c0b5abSJung-uk Kim             ProcessorSubtable = ACPI_ADD_PTR (ACPI_AEST_PROCESSOR, Table,
33797c0b5abSJung-uk Kim                 Offset);
33897c0b5abSJung-uk Kim 
33997c0b5abSJung-uk Kim             /* Dump the resource substructure subtable */
34097c0b5abSJung-uk Kim 
34197c0b5abSJung-uk Kim             Status = AcpiDmDumpTable (Table->Length, Offset, ProcessorSubtable,
34297c0b5abSJung-uk Kim                 Length, InfoTable);
34397c0b5abSJung-uk Kim             if (ACPI_FAILURE (Status))
34497c0b5abSJung-uk Kim             {
34597c0b5abSJung-uk Kim                 return;
34697c0b5abSJung-uk Kim             }
34797c0b5abSJung-uk Kim 
34897c0b5abSJung-uk Kim             AcpiOsPrintf ("\n");
34997c0b5abSJung-uk Kim         }
35097c0b5abSJung-uk Kim 
35197c0b5abSJung-uk Kim         /* Point past the resource substructure or the node-specific data */
35297c0b5abSJung-uk Kim 
35397c0b5abSJung-uk Kim         Offset += Length;
35497c0b5abSJung-uk Kim 
35597c0b5abSJung-uk Kim         /* Dump the interface structure, required to be present */
35697c0b5abSJung-uk Kim 
35797c0b5abSJung-uk Kim         Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
35897c0b5abSJung-uk Kim         if (Subtable->Type >= ACPI_AEST_XFACE_RESERVED)
35997c0b5abSJung-uk Kim         {
36097c0b5abSJung-uk Kim             AcpiOsPrintf ("\n**** Unknown AEST Node Interface type 0x%X\n",
36197c0b5abSJung-uk Kim                 Subtable->Type);
36297c0b5abSJung-uk Kim             return;
36397c0b5abSJung-uk Kim         }
36497c0b5abSJung-uk Kim 
36592f570c3SJung-uk Kim         if (Revision == 1)
36692f570c3SJung-uk Kim         {
36792f570c3SJung-uk Kim             InfoTable = AcpiDmTableInfoAestXface;
36892f570c3SJung-uk Kim             Length = sizeof (ACPI_AEST_NODE_INTERFACE);
36992f570c3SJung-uk Kim         }
37092f570c3SJung-uk Kim         else if (Revision == 2)
37192f570c3SJung-uk Kim         {
37292f570c3SJung-uk Kim             InfoTable = AcpiDmTableInfoAestXfaceHeader;
37392f570c3SJung-uk Kim             Length = sizeof (ACPI_AEST_NODE_INTERFACE_HEADER);
37492f570c3SJung-uk Kim 
37592f570c3SJung-uk Kim             Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Length, InfoTable);
37692f570c3SJung-uk Kim             if (ACPI_FAILURE (Status))
37792f570c3SJung-uk Kim             {
37892f570c3SJung-uk Kim                 return;
37992f570c3SJung-uk Kim             }
38092f570c3SJung-uk Kim 
38192f570c3SJung-uk Kim             Offset += Length;
38292f570c3SJung-uk Kim 
38392f570c3SJung-uk Kim             InterfaceHeader = ACPI_CAST_PTR (ACPI_AEST_NODE_INTERFACE_HEADER, Subtable);
38492f570c3SJung-uk Kim             switch (InterfaceHeader->GroupFormat)
38592f570c3SJung-uk Kim 	        {
38692f570c3SJung-uk Kim             case ACPI_AEST_NODE_GROUP_FORMAT_4K:
38792f570c3SJung-uk Kim                 InfoTable = AcpiDmTableInfoAestXface4k;
38892f570c3SJung-uk Kim                 Length = sizeof (ACPI_AEST_NODE_INTERFACE_4K);
38992f570c3SJung-uk Kim                 break;
39092f570c3SJung-uk Kim 
39192f570c3SJung-uk Kim             case ACPI_AEST_NODE_GROUP_FORMAT_16K:
39292f570c3SJung-uk Kim                 InfoTable = AcpiDmTableInfoAestXface16k;
39392f570c3SJung-uk Kim                 Length = sizeof (ACPI_AEST_NODE_INTERFACE_16K);
39492f570c3SJung-uk Kim                 break;
39592f570c3SJung-uk Kim 
39692f570c3SJung-uk Kim             case ACPI_AEST_NODE_GROUP_FORMAT_64K:
39792f570c3SJung-uk Kim                 InfoTable = AcpiDmTableInfoAestXface64k;
39892f570c3SJung-uk Kim                 Length = sizeof (ACPI_AEST_NODE_INTERFACE_64K);
39992f570c3SJung-uk Kim                 break;
40092f570c3SJung-uk Kim 
40192f570c3SJung-uk Kim             default:
40292f570c3SJung-uk Kim                 AcpiOsPrintf ("\n**** Unknown AEST Interface Group Format 0x%X\n",
40392f570c3SJung-uk Kim                     InterfaceHeader->GroupFormat);
40492f570c3SJung-uk Kim                 return;
40592f570c3SJung-uk Kim             }
40692f570c3SJung-uk Kim 
40792f570c3SJung-uk Kim             Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
40892f570c3SJung-uk Kim         }
40992f570c3SJung-uk Kim         else
41092f570c3SJung-uk Kim         {
41192f570c3SJung-uk Kim             AcpiOsPrintf ("\n**** Unknown AEST revision 0x%X\n", Revision);
41292f570c3SJung-uk Kim             return;
41392f570c3SJung-uk Kim         }
41492f570c3SJung-uk Kim 
41592f570c3SJung-uk Kim         Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Length, InfoTable);
41697c0b5abSJung-uk Kim         if (ACPI_FAILURE (Status))
41797c0b5abSJung-uk Kim         {
41897c0b5abSJung-uk Kim             return;
41997c0b5abSJung-uk Kim         }
42097c0b5abSJung-uk Kim 
42197c0b5abSJung-uk Kim         /* Point past the interface structure */
42297c0b5abSJung-uk Kim 
42397c0b5abSJung-uk Kim         AcpiOsPrintf ("\n");
42492f570c3SJung-uk Kim         Offset += Length;
42597c0b5abSJung-uk Kim 
42697c0b5abSJung-uk Kim         /* Dump the entire interrupt structure array, if present */
42797c0b5abSJung-uk Kim 
42897c0b5abSJung-uk Kim         if (NodeHeader->NodeInterruptOffset)
42997c0b5abSJung-uk Kim         {
43092f570c3SJung-uk Kim             Count = NodeHeader->NodeInterruptCount;
43197c0b5abSJung-uk Kim             Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
43297c0b5abSJung-uk Kim 
43392f570c3SJung-uk Kim             while (Count)
43497c0b5abSJung-uk Kim             {
43597c0b5abSJung-uk Kim                 /* Dump the interrupt structure */
43697c0b5abSJung-uk Kim 
43792f570c3SJung-uk Kim                 switch (Revision) {
43892f570c3SJung-uk Kim                 case 1:
43992f570c3SJung-uk Kim                     InfoTable = AcpiDmTableInfoAestXrupt;
44092f570c3SJung-uk Kim                     Length = sizeof (ACPI_AEST_NODE_INTERRUPT);
44192f570c3SJung-uk Kim                     break;
44292f570c3SJung-uk Kim 
44392f570c3SJung-uk Kim                 case 2:
44492f570c3SJung-uk Kim                     InfoTable = AcpiDmTableInfoAestXruptV2;
44592f570c3SJung-uk Kim                     Length = sizeof (ACPI_AEST_NODE_INTERRUPT_V2);
44692f570c3SJung-uk Kim                     break;
44792f570c3SJung-uk Kim                 default:
44892f570c3SJung-uk Kim                     AcpiOsPrintf ("\n**** Unknown AEST revision 0x%X\n",
44992f570c3SJung-uk Kim                         Revision);
45092f570c3SJung-uk Kim                     return;
45192f570c3SJung-uk Kim                 }
45297c0b5abSJung-uk Kim                 Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
45392f570c3SJung-uk Kim                     Length, InfoTable);
45497c0b5abSJung-uk Kim                 if (ACPI_FAILURE (Status))
45597c0b5abSJung-uk Kim                 {
45697c0b5abSJung-uk Kim                     return;
45797c0b5abSJung-uk Kim                 }
45897c0b5abSJung-uk Kim 
45997c0b5abSJung-uk Kim                 /* Point to the next interrupt structure */
46097c0b5abSJung-uk Kim 
46192f570c3SJung-uk Kim                 Offset += Length;
46297c0b5abSJung-uk Kim                 Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
46392f570c3SJung-uk Kim                 Count--;
46497c0b5abSJung-uk Kim                 AcpiOsPrintf ("\n");
46597c0b5abSJung-uk Kim             }
46697c0b5abSJung-uk Kim         }
46797c0b5abSJung-uk Kim     }
46897c0b5abSJung-uk Kim }
46997c0b5abSJung-uk Kim 
470ab71bbb7SJung-uk Kim /*******************************************************************************
471ab71bbb7SJung-uk Kim  *
472ab71bbb7SJung-uk Kim  * FUNCTION:    AcpiDmDumpApmt
473ab71bbb7SJung-uk Kim  *
474ab71bbb7SJung-uk Kim  * PARAMETERS:  Table               - A APMT table
475ab71bbb7SJung-uk Kim  *
476ab71bbb7SJung-uk Kim  * RETURN:      None
477ab71bbb7SJung-uk Kim  *
478ab71bbb7SJung-uk Kim  * DESCRIPTION: Format the contents of a APMT. This table type consists
479ab71bbb7SJung-uk Kim  *              of an open-ended number of subtables.
480ab71bbb7SJung-uk Kim  *
481ab71bbb7SJung-uk Kim  *
482ab71bbb7SJung-uk Kim  * APMT - ARM Performance Monitoring Unit table. Conforms to:
483ab71bbb7SJung-uk Kim  * ARM Performance Monitoring Unit Architecture 1.0 Platform Design Document
484ab71bbb7SJung-uk Kim  * ARM DEN0117 v1.0 November 25, 2021
485ab71bbb7SJung-uk Kim  *
486ab71bbb7SJung-uk Kim  ******************************************************************************/
487ab71bbb7SJung-uk Kim 
488ab71bbb7SJung-uk Kim void
AcpiDmDumpApmt(ACPI_TABLE_HEADER * Table)489ab71bbb7SJung-uk Kim AcpiDmDumpApmt (
490ab71bbb7SJung-uk Kim     ACPI_TABLE_HEADER       *Table)
491ab71bbb7SJung-uk Kim {
492ab71bbb7SJung-uk Kim     ACPI_STATUS              Status;
493ab71bbb7SJung-uk Kim     ACPI_APMT_NODE           *Subtable;
494ab71bbb7SJung-uk Kim     UINT32                   Length = Table->Length;
495ab71bbb7SJung-uk Kim     UINT32                   Offset = sizeof (ACPI_TABLE_APMT);
496ab71bbb7SJung-uk Kim     UINT32                   NodeNum = 0;
497ab71bbb7SJung-uk Kim 
498ab71bbb7SJung-uk Kim     /* There is no main table (other than the standard ACPI header) */
499ab71bbb7SJung-uk Kim 
500ab71bbb7SJung-uk Kim     /* Subtables */
501ab71bbb7SJung-uk Kim 
502ab71bbb7SJung-uk Kim     Subtable = ACPI_ADD_PTR (ACPI_APMT_NODE, Table, Offset);
503ab71bbb7SJung-uk Kim     while (Offset < Table->Length)
504ab71bbb7SJung-uk Kim     {
505ab71bbb7SJung-uk Kim         AcpiOsPrintf ("\n");
506ab71bbb7SJung-uk Kim 
507ab71bbb7SJung-uk Kim         if (Subtable->Type >= ACPI_APMT_NODE_TYPE_COUNT)
508ab71bbb7SJung-uk Kim         {
509ab71bbb7SJung-uk Kim             AcpiOsPrintf ("\n**** Unknown APMT subtable type 0x%X\n",
510ab71bbb7SJung-uk Kim                 Subtable->Type);
511ab71bbb7SJung-uk Kim             return;
512ab71bbb7SJung-uk Kim         }
513ab71bbb7SJung-uk Kim 
514ab71bbb7SJung-uk Kim         AcpiOsPrintf ("/* APMT Node-%u */\n", NodeNum++);
515ab71bbb7SJung-uk Kim 
516ab71bbb7SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset, Subtable,
517ab71bbb7SJung-uk Kim             Subtable->Length, AcpiDmTableInfoApmtNode);
518ab71bbb7SJung-uk Kim         if (ACPI_FAILURE (Status))
519ab71bbb7SJung-uk Kim         {
520ab71bbb7SJung-uk Kim             return;
521ab71bbb7SJung-uk Kim         }
522ab71bbb7SJung-uk Kim 
523ab71bbb7SJung-uk Kim         /* Point to next subtable */
524ab71bbb7SJung-uk Kim 
525ab71bbb7SJung-uk Kim         Offset += Subtable->Length;
526ab71bbb7SJung-uk Kim         Subtable = ACPI_ADD_PTR (ACPI_APMT_NODE, Subtable,
527ab71bbb7SJung-uk Kim             Subtable->Length);
528ab71bbb7SJung-uk Kim         AcpiOsPrintf ("\n");
529ab71bbb7SJung-uk Kim     }
530ab71bbb7SJung-uk Kim }
531ab71bbb7SJung-uk Kim 
53297c0b5abSJung-uk Kim 
53397c0b5abSJung-uk Kim /*******************************************************************************
53497c0b5abSJung-uk Kim  *
535ff879b07SJung-uk Kim  * FUNCTION:    AcpiDmDumpAsf
536ff879b07SJung-uk Kim  *
537ff879b07SJung-uk Kim  * PARAMETERS:  Table               - A ASF table
538ff879b07SJung-uk Kim  *
539ff879b07SJung-uk Kim  * RETURN:      None
540ff879b07SJung-uk Kim  *
541ff879b07SJung-uk Kim  * DESCRIPTION: Format the contents of a ASF table
542ff879b07SJung-uk Kim  *
543ff879b07SJung-uk Kim  ******************************************************************************/
544ff879b07SJung-uk Kim 
545ff879b07SJung-uk Kim void
AcpiDmDumpAsf(ACPI_TABLE_HEADER * Table)546ff879b07SJung-uk Kim AcpiDmDumpAsf (
547ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       *Table)
548ff879b07SJung-uk Kim {
549ff879b07SJung-uk Kim     ACPI_STATUS             Status;
550ff879b07SJung-uk Kim     UINT32                  Offset = sizeof (ACPI_TABLE_HEADER);
551ff879b07SJung-uk Kim     ACPI_ASF_INFO           *Subtable;
552ff879b07SJung-uk Kim     ACPI_DMTABLE_INFO       *InfoTable;
553ff879b07SJung-uk Kim     ACPI_DMTABLE_INFO       *DataInfoTable = NULL;
554ff879b07SJung-uk Kim     UINT8                   *DataTable = NULL;
555ff879b07SJung-uk Kim     UINT32                  DataCount = 0;
556ff879b07SJung-uk Kim     UINT32                  DataLength = 0;
557ff879b07SJung-uk Kim     UINT32                  DataOffset = 0;
558ff879b07SJung-uk Kim     UINT32                  i;
559ff879b07SJung-uk Kim     UINT8                   Type;
560ff879b07SJung-uk Kim 
561ff879b07SJung-uk Kim 
562ff879b07SJung-uk Kim     /* No main table, only subtables */
563ff879b07SJung-uk Kim 
564ff879b07SJung-uk Kim     Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset);
565ff879b07SJung-uk Kim     while (Offset < Table->Length)
566ff879b07SJung-uk Kim     {
567ff879b07SJung-uk Kim         /* Common subtable header */
568ff879b07SJung-uk Kim 
569ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
570ff879b07SJung-uk Kim             Subtable->Header.Length, AcpiDmTableInfoAsfHdr);
571ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
572ff879b07SJung-uk Kim         {
573ff879b07SJung-uk Kim             return;
574ff879b07SJung-uk Kim         }
575ff879b07SJung-uk Kim 
576ff879b07SJung-uk Kim         /* The actual type is the lower 7 bits of Type */
577ff879b07SJung-uk Kim 
578ff879b07SJung-uk Kim         Type = (UINT8) (Subtable->Header.Type & 0x7F);
579ff879b07SJung-uk Kim 
580ff879b07SJung-uk Kim         switch (Type)
581ff879b07SJung-uk Kim         {
582ff879b07SJung-uk Kim         case ACPI_ASF_TYPE_INFO:
583ff879b07SJung-uk Kim 
584ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoAsf0;
585ff879b07SJung-uk Kim             break;
586ff879b07SJung-uk Kim 
587ff879b07SJung-uk Kim         case ACPI_ASF_TYPE_ALERT:
588ff879b07SJung-uk Kim 
589ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoAsf1;
590ff879b07SJung-uk Kim             DataInfoTable = AcpiDmTableInfoAsf1a;
591ff879b07SJung-uk Kim             DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ALERT));
592ff879b07SJung-uk Kim             DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->Alerts;
593ff879b07SJung-uk Kim             DataLength = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->DataLength;
594ff879b07SJung-uk Kim             DataOffset = Offset + sizeof (ACPI_ASF_ALERT);
595ff879b07SJung-uk Kim             break;
596ff879b07SJung-uk Kim 
597ff879b07SJung-uk Kim         case ACPI_ASF_TYPE_CONTROL:
598ff879b07SJung-uk Kim 
599ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoAsf2;
600ff879b07SJung-uk Kim             DataInfoTable = AcpiDmTableInfoAsf2a;
601ff879b07SJung-uk Kim             DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_REMOTE));
602ff879b07SJung-uk Kim             DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->Controls;
603ff879b07SJung-uk Kim             DataLength = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->DataLength;
604ff879b07SJung-uk Kim             DataOffset = Offset + sizeof (ACPI_ASF_REMOTE);
605ff879b07SJung-uk Kim             break;
606ff879b07SJung-uk Kim 
607ff879b07SJung-uk Kim         case ACPI_ASF_TYPE_BOOT:
608ff879b07SJung-uk Kim 
609ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoAsf3;
610ff879b07SJung-uk Kim             break;
611ff879b07SJung-uk Kim 
612ff879b07SJung-uk Kim         case ACPI_ASF_TYPE_ADDRESS:
613ff879b07SJung-uk Kim 
614ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoAsf4;
615ff879b07SJung-uk Kim             DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ADDRESS));
616ff879b07SJung-uk Kim             DataLength = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, Subtable)->Devices;
617ff879b07SJung-uk Kim             DataOffset = Offset + sizeof (ACPI_ASF_ADDRESS);
618ff879b07SJung-uk Kim             break;
619ff879b07SJung-uk Kim 
620ff879b07SJung-uk Kim         default:
621ff879b07SJung-uk Kim 
622ff879b07SJung-uk Kim             AcpiOsPrintf ("\n**** Unknown ASF subtable type 0x%X\n",
623ff879b07SJung-uk Kim                 Subtable->Header.Type);
624ff879b07SJung-uk Kim             return;
625ff879b07SJung-uk Kim         }
626ff879b07SJung-uk Kim 
627ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
628ff879b07SJung-uk Kim             Subtable->Header.Length, InfoTable);
629ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
630ff879b07SJung-uk Kim         {
631ff879b07SJung-uk Kim             return;
632ff879b07SJung-uk Kim         }
633ff879b07SJung-uk Kim 
634ff879b07SJung-uk Kim         /* Dump variable-length extra data */
635ff879b07SJung-uk Kim 
636ff879b07SJung-uk Kim         switch (Type)
637ff879b07SJung-uk Kim         {
638ff879b07SJung-uk Kim         case ACPI_ASF_TYPE_ALERT:
639ff879b07SJung-uk Kim         case ACPI_ASF_TYPE_CONTROL:
640ff879b07SJung-uk Kim 
641ff879b07SJung-uk Kim             for (i = 0; i < DataCount; i++)
642ff879b07SJung-uk Kim             {
643ff879b07SJung-uk Kim                 AcpiOsPrintf ("\n");
644ff879b07SJung-uk Kim                 Status = AcpiDmDumpTable (Table->Length, DataOffset,
645ff879b07SJung-uk Kim                     DataTable, DataLength, DataInfoTable);
646ff879b07SJung-uk Kim                 if (ACPI_FAILURE (Status))
647ff879b07SJung-uk Kim                 {
648ff879b07SJung-uk Kim                     return;
649ff879b07SJung-uk Kim                 }
650ff879b07SJung-uk Kim 
651ff879b07SJung-uk Kim                 DataTable = ACPI_ADD_PTR (UINT8, DataTable, DataLength);
652ff879b07SJung-uk Kim                 DataOffset += DataLength;
653ff879b07SJung-uk Kim             }
654ff879b07SJung-uk Kim             break;
655ff879b07SJung-uk Kim 
656ff879b07SJung-uk Kim         case ACPI_ASF_TYPE_ADDRESS:
657ff879b07SJung-uk Kim 
658ff879b07SJung-uk Kim             for (i = 0; i < DataLength; i++)
659ff879b07SJung-uk Kim             {
660ff879b07SJung-uk Kim                 if (!(i % 16))
661ff879b07SJung-uk Kim                 {
662ff879b07SJung-uk Kim                     AcpiDmLineHeader (DataOffset, 1, "Addresses");
663ff879b07SJung-uk Kim                 }
664ff879b07SJung-uk Kim 
665ff879b07SJung-uk Kim                 AcpiOsPrintf ("%2.2X ", *DataTable);
666ff879b07SJung-uk Kim                 DataTable++;
667ff879b07SJung-uk Kim                 DataOffset++;
668ff879b07SJung-uk Kim 
669ff879b07SJung-uk Kim                 if (DataOffset > Table->Length)
670ff879b07SJung-uk Kim                 {
671ff879b07SJung-uk Kim                     AcpiOsPrintf (
672ff879b07SJung-uk Kim                         "**** ACPI table terminates in the middle of a "
673ff879b07SJung-uk Kim                         "data structure! (ASF! table)\n");
674ff879b07SJung-uk Kim                     return;
675ff879b07SJung-uk Kim                 }
676ff879b07SJung-uk Kim             }
677ff879b07SJung-uk Kim 
678ff879b07SJung-uk Kim             AcpiOsPrintf ("\n");
679ff879b07SJung-uk Kim             break;
680ff879b07SJung-uk Kim 
681ff879b07SJung-uk Kim         default:
682ff879b07SJung-uk Kim 
683ff879b07SJung-uk Kim             break;
684ff879b07SJung-uk Kim         }
685ff879b07SJung-uk Kim 
686ff879b07SJung-uk Kim         AcpiOsPrintf ("\n");
687ff879b07SJung-uk Kim 
688ff879b07SJung-uk Kim         /* Point to next subtable */
689ff879b07SJung-uk Kim 
690ff879b07SJung-uk Kim         if (!Subtable->Header.Length)
691ff879b07SJung-uk Kim         {
692ff879b07SJung-uk Kim             AcpiOsPrintf ("Invalid zero subtable header length\n");
693ff879b07SJung-uk Kim             return;
694ff879b07SJung-uk Kim         }
695ff879b07SJung-uk Kim 
696ff879b07SJung-uk Kim         Offset += Subtable->Header.Length;
697ff879b07SJung-uk Kim         Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Subtable,
698ff879b07SJung-uk Kim             Subtable->Header.Length);
699ff879b07SJung-uk Kim     }
700ff879b07SJung-uk Kim }
701ff879b07SJung-uk Kim 
702722b1667SJung-uk Kim /*******************************************************************************
703722b1667SJung-uk Kim  *
704722b1667SJung-uk Kim  * FUNCTION:    AcpiDmDumpAspt
705722b1667SJung-uk Kim  *
706722b1667SJung-uk Kim  * PARAMETERS:  Table               - A ASPT table
707722b1667SJung-uk Kim  *
708722b1667SJung-uk Kim  * RETURN:      None
709722b1667SJung-uk Kim  *
710722b1667SJung-uk Kim  * DESCRIPTION: Format the contents of a ASPT table
711722b1667SJung-uk Kim  *
712722b1667SJung-uk Kim  ******************************************************************************/
713722b1667SJung-uk Kim 
714722b1667SJung-uk Kim void
AcpiDmDumpAspt(ACPI_TABLE_HEADER * Table)715722b1667SJung-uk Kim AcpiDmDumpAspt (
716722b1667SJung-uk Kim     ACPI_TABLE_HEADER       *Table)
717722b1667SJung-uk Kim {
718722b1667SJung-uk Kim     ACPI_STATUS             Status;
719722b1667SJung-uk Kim     UINT32                  Offset = sizeof (ACPI_TABLE_ASPT);
720722b1667SJung-uk Kim     UINT32                  Length = Table->Length;
721722b1667SJung-uk Kim     ACPI_ASPT_HEADER        *Subtable;
722722b1667SJung-uk Kim     ACPI_DMTABLE_INFO       *InfoTable;
723722b1667SJung-uk Kim     UINT16                   Type;
724722b1667SJung-uk Kim 
725722b1667SJung-uk Kim     /* Main table */
726722b1667SJung-uk Kim     Status = AcpiDmDumpTable(Length, 0, Table, 0, AcpiDmTableInfoAspt);
727722b1667SJung-uk Kim 
728722b1667SJung-uk Kim     /* Subtables */
729722b1667SJung-uk Kim 
730722b1667SJung-uk Kim     Subtable = ACPI_ADD_PTR (ACPI_ASPT_HEADER, Table, Offset);
731722b1667SJung-uk Kim     while (Offset < Table->Length)
732722b1667SJung-uk Kim     {
733722b1667SJung-uk Kim         AcpiOsPrintf ("\n");
734722b1667SJung-uk Kim 
735722b1667SJung-uk Kim         /* Common subtable header */
736722b1667SJung-uk Kim         Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
737722b1667SJung-uk Kim             Subtable->Length, AcpiDmTableInfoAsptHdr);
738722b1667SJung-uk Kim         if (ACPI_FAILURE (Status))
739722b1667SJung-uk Kim         {
740722b1667SJung-uk Kim             return;
741722b1667SJung-uk Kim         }
742722b1667SJung-uk Kim 
743722b1667SJung-uk Kim         Type = Subtable->Type;
744722b1667SJung-uk Kim 
745722b1667SJung-uk Kim         switch (Type)
746722b1667SJung-uk Kim         {
747722b1667SJung-uk Kim         case ACPI_ASPT_TYPE_GLOBAL_REGS:
748722b1667SJung-uk Kim 
749722b1667SJung-uk Kim             InfoTable = AcpiDmTableInfoAspt0;
750722b1667SJung-uk Kim             break;
751722b1667SJung-uk Kim 
752722b1667SJung-uk Kim         case ACPI_ASPT_TYPE_SEV_MBOX_REGS:
753722b1667SJung-uk Kim 
754722b1667SJung-uk Kim             InfoTable = AcpiDmTableInfoAspt1;
755722b1667SJung-uk Kim             break;
756722b1667SJung-uk Kim 
757722b1667SJung-uk Kim         case ACPI_ASPT_TYPE_ACPI_MBOX_REGS:
758722b1667SJung-uk Kim 
759722b1667SJung-uk Kim             InfoTable = AcpiDmTableInfoAspt2;
760722b1667SJung-uk Kim             break;
761722b1667SJung-uk Kim 
762722b1667SJung-uk Kim         default:
763722b1667SJung-uk Kim 
764722b1667SJung-uk Kim             AcpiOsPrintf ("\n**** Unknown ASPT subtable type 0x%X\n",
765722b1667SJung-uk Kim                 Subtable->Type);
766722b1667SJung-uk Kim             return;
767722b1667SJung-uk Kim         }
768722b1667SJung-uk Kim 
769722b1667SJung-uk Kim         Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
770722b1667SJung-uk Kim             Subtable->Length, InfoTable);
771722b1667SJung-uk Kim         if (ACPI_FAILURE (Status))
772722b1667SJung-uk Kim         {
773722b1667SJung-uk Kim             return;
774722b1667SJung-uk Kim         }
775722b1667SJung-uk Kim 
776722b1667SJung-uk Kim         AcpiOsPrintf ("\n");
777722b1667SJung-uk Kim 
778722b1667SJung-uk Kim         /* Point to next subtable */
779722b1667SJung-uk Kim         if (!Subtable->Length)
780722b1667SJung-uk Kim         {
781722b1667SJung-uk Kim             AcpiOsPrintf ("Invalid zero subtable header length\n");
782722b1667SJung-uk Kim             return;
783722b1667SJung-uk Kim         }
784722b1667SJung-uk Kim 
785722b1667SJung-uk Kim         Offset += Subtable->Length;
786722b1667SJung-uk Kim         Subtable = ACPI_ADD_PTR (ACPI_ASPT_HEADER, Subtable,
787722b1667SJung-uk Kim             Subtable->Length);
788722b1667SJung-uk Kim     }
789722b1667SJung-uk Kim }
790722b1667SJung-uk Kim 
7919a4bc520SJung-uk Kim 
7929a4bc520SJung-uk Kim /*******************************************************************************
7939a4bc520SJung-uk Kim  *
7949a4bc520SJung-uk Kim  * FUNCTION:    AcpiDmDumpCdat
7959a4bc520SJung-uk Kim  *
7969a4bc520SJung-uk Kim  * PARAMETERS:  InTable             - A CDAT table
7979a4bc520SJung-uk Kim  *
7989a4bc520SJung-uk Kim  * RETURN:      None
7999a4bc520SJung-uk Kim  *
8009a4bc520SJung-uk Kim  * DESCRIPTION: Format the contents of a CDAT. This table type consists
8019a4bc520SJung-uk Kim  *              of an open-ended number of subtables.
8029a4bc520SJung-uk Kim  *
8039a4bc520SJung-uk Kim  ******************************************************************************/
8049a4bc520SJung-uk Kim 
8059a4bc520SJung-uk Kim void
AcpiDmDumpCdat(ACPI_TABLE_HEADER * InTable)8069a4bc520SJung-uk Kim AcpiDmDumpCdat (
8079a4bc520SJung-uk Kim     ACPI_TABLE_HEADER       *InTable)
8089a4bc520SJung-uk Kim {
8099a4bc520SJung-uk Kim     ACPI_TABLE_CDAT         *Table = ACPI_CAST_PTR (ACPI_TABLE_CDAT, InTable);
8109a4bc520SJung-uk Kim     ACPI_STATUS             Status;
8119a4bc520SJung-uk Kim     ACPI_CDAT_HEADER        *Subtable;
8129a4bc520SJung-uk Kim     ACPI_TABLE_CDAT         *CdatTable = ACPI_CAST_PTR (ACPI_TABLE_CDAT, Table);
8139a4bc520SJung-uk Kim     ACPI_DMTABLE_INFO       *InfoTable;
8149a4bc520SJung-uk Kim     UINT32                  Length = CdatTable->Length;
8159a4bc520SJung-uk Kim     UINT32                  Offset = sizeof (ACPI_TABLE_CDAT);
8169a4bc520SJung-uk Kim     UINT32                  SubtableLength;
8179a4bc520SJung-uk Kim     UINT32                  SubtableType;
8189a4bc520SJung-uk Kim     INT32                   EntriesLength;
8199a4bc520SJung-uk Kim 
8209a4bc520SJung-uk Kim 
8219a4bc520SJung-uk Kim     /* Main table */
8229a4bc520SJung-uk Kim 
8239a4bc520SJung-uk Kim     Status = AcpiDmDumpTable (Offset, 0, CdatTable, 0,
8249a4bc520SJung-uk Kim         AcpiDmTableInfoCdatTableHdr);
8259a4bc520SJung-uk Kim     if (ACPI_FAILURE (Status))
8269a4bc520SJung-uk Kim     {
8279a4bc520SJung-uk Kim         return;
8289a4bc520SJung-uk Kim     }
8299a4bc520SJung-uk Kim 
8309a4bc520SJung-uk Kim     Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, sizeof (ACPI_TABLE_CDAT));
8319a4bc520SJung-uk Kim     while (Offset < Table->Length)
8329a4bc520SJung-uk Kim     {
8339a4bc520SJung-uk Kim         /* Dump the common subtable header */
8349a4bc520SJung-uk Kim 
8359a4bc520SJung-uk Kim         DbgPrint (ASL_DEBUG_OUTPUT, "0) HeaderOffset: %X\n", Offset);
8369a4bc520SJung-uk Kim         AcpiOsPrintf ("\n");
8379a4bc520SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset, Subtable,
8389a4bc520SJung-uk Kim             sizeof (ACPI_CDAT_HEADER), AcpiDmTableInfoCdatHeader);
8399a4bc520SJung-uk Kim         if (ACPI_FAILURE (Status))
8409a4bc520SJung-uk Kim         {
8419a4bc520SJung-uk Kim             return;
8429a4bc520SJung-uk Kim         }
8439a4bc520SJung-uk Kim 
8449a4bc520SJung-uk Kim         /* Point past the common subtable header, decode the subtable type */
8459a4bc520SJung-uk Kim 
8469a4bc520SJung-uk Kim         Offset += sizeof (ACPI_CDAT_HEADER);
8479a4bc520SJung-uk Kim         SubtableType = Subtable->Type;
8489a4bc520SJung-uk Kim 
8499a4bc520SJung-uk Kim         switch (Subtable->Type)
8509a4bc520SJung-uk Kim         {
8519a4bc520SJung-uk Kim         case ACPI_CDAT_TYPE_DSMAS:
8529a4bc520SJung-uk Kim             Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, Offset);
8539a4bc520SJung-uk Kim             SubtableLength = sizeof (ACPI_CDAT_DSMAS);
8549a4bc520SJung-uk Kim 
8559a4bc520SJung-uk Kim             InfoTable = AcpiDmTableInfoCdat0;
8569a4bc520SJung-uk Kim             break;
8579a4bc520SJung-uk Kim 
8589a4bc520SJung-uk Kim         case ACPI_CDAT_TYPE_DSLBIS:
8599a4bc520SJung-uk Kim             Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, Offset);
8609a4bc520SJung-uk Kim             SubtableLength = sizeof (ACPI_CDAT_DSLBIS);
8619a4bc520SJung-uk Kim             DbgPrint (ASL_DEBUG_OUTPUT, "1) Offset: %X\n", Offset);
8629a4bc520SJung-uk Kim 
8639a4bc520SJung-uk Kim             InfoTable = AcpiDmTableInfoCdat1;
8649a4bc520SJung-uk Kim             break;
8659a4bc520SJung-uk Kim 
8669a4bc520SJung-uk Kim         case ACPI_CDAT_TYPE_DSMSCIS:
8679a4bc520SJung-uk Kim             Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, Offset);
8689a4bc520SJung-uk Kim             SubtableLength = sizeof (ACPI_CDAT_DSMSCIS);
8699a4bc520SJung-uk Kim 
8709a4bc520SJung-uk Kim             InfoTable = AcpiDmTableInfoCdat2;
8719a4bc520SJung-uk Kim             break;
8729a4bc520SJung-uk Kim 
8739a4bc520SJung-uk Kim         case ACPI_CDAT_TYPE_DSIS:
8749a4bc520SJung-uk Kim             DbgPrint (ASL_DEBUG_OUTPUT, "2) Offset: %X ", Offset);
8759a4bc520SJung-uk Kim             SubtableLength = sizeof (ACPI_CDAT_DSIS);
8769a4bc520SJung-uk Kim             DbgPrint (ASL_DEBUG_OUTPUT, "1) input pointer: %p\n", Table);
8779a4bc520SJung-uk Kim             Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, Offset);
8789a4bc520SJung-uk Kim             DbgPrint (ASL_DEBUG_OUTPUT, "1) output pointers: %p, %p, Offset: %X\n",
8799a4bc520SJung-uk Kim                 Table, Subtable, Offset);
8809a4bc520SJung-uk Kim             DbgPrint (ASL_DEBUG_OUTPUT, "3) Offset: %X\n", Offset);
8819a4bc520SJung-uk Kim 
8829a4bc520SJung-uk Kim             InfoTable = AcpiDmTableInfoCdat3;
8839a4bc520SJung-uk Kim             break;
8849a4bc520SJung-uk Kim 
8859a4bc520SJung-uk Kim         case ACPI_CDAT_TYPE_DSEMTS:
8869a4bc520SJung-uk Kim             Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, Offset);
8879a4bc520SJung-uk Kim             SubtableLength = sizeof (ACPI_CDAT_DSEMTS);
8889a4bc520SJung-uk Kim 
8899a4bc520SJung-uk Kim             InfoTable = AcpiDmTableInfoCdat4;
8909a4bc520SJung-uk Kim             break;
8919a4bc520SJung-uk Kim 
8929a4bc520SJung-uk Kim         case ACPI_CDAT_TYPE_SSLBIS:
8939a4bc520SJung-uk Kim             SubtableLength = Subtable->Length;
8949a4bc520SJung-uk Kim 
8959a4bc520SJung-uk Kim             InfoTable = AcpiDmTableInfoCdat5;
8969a4bc520SJung-uk Kim             Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, Offset);
8979a4bc520SJung-uk Kim             break;
8989a4bc520SJung-uk Kim 
8999a4bc520SJung-uk Kim         default:
9009a4bc520SJung-uk Kim             fprintf (stderr, "ERROR: Unknown SubtableType: %X\n", Subtable->Type);
9019a4bc520SJung-uk Kim             return;
9029a4bc520SJung-uk Kim         }
9039a4bc520SJung-uk Kim 
9049a4bc520SJung-uk Kim         DbgPrint (ASL_DEBUG_OUTPUT, "SubtableType: %X, Length: %X Actual "
9059a4bc520SJung-uk Kim             "Length: %X Offset: %X tableptr: %p\n", SubtableType,
9069a4bc520SJung-uk Kim             Subtable->Length, SubtableLength, Offset, Table);
9079a4bc520SJung-uk Kim 
9089a4bc520SJung-uk Kim         /*
9099a4bc520SJung-uk Kim          * Do the subtable-specific fields
9109a4bc520SJung-uk Kim          */
9119a4bc520SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset, Subtable, Offset, InfoTable);
9129a4bc520SJung-uk Kim         if (ACPI_FAILURE (Status))
9139a4bc520SJung-uk Kim         {
9149a4bc520SJung-uk Kim             return;
9159a4bc520SJung-uk Kim         }
9169a4bc520SJung-uk Kim 
9179a4bc520SJung-uk Kim         DbgPrint (ASL_DEBUG_OUTPUT, "Subtable Type: %X, Offset: %X, SubtableLength: %X\n",
9189a4bc520SJung-uk Kim             SubtableType, Offset, SubtableLength);
9199a4bc520SJung-uk Kim 
9209a4bc520SJung-uk Kim         /* Additional sub-subtables, dependent on the main subtable type */
9219a4bc520SJung-uk Kim 
9229a4bc520SJung-uk Kim         switch (SubtableType)
9239a4bc520SJung-uk Kim         {
9249a4bc520SJung-uk Kim         case ACPI_CDAT_TYPE_SSLBIS:
9259a4bc520SJung-uk Kim             Offset += sizeof (ACPI_CDAT_SSLBIS);
9269a4bc520SJung-uk Kim             Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table,
9279a4bc520SJung-uk Kim                 Offset);
9289a4bc520SJung-uk Kim 
9299a4bc520SJung-uk Kim             DbgPrint (ASL_DEBUG_OUTPUT, "Case SSLBIS, Offset: %X, SubtableLength: %X "
9309a4bc520SJung-uk Kim                 "Subtable->Length %X\n", Offset, SubtableLength, Subtable->Length);
9319a4bc520SJung-uk Kim 
9329a4bc520SJung-uk Kim             /* Generate the total length of all the SSLBE entries */
9339a4bc520SJung-uk Kim 
9349a4bc520SJung-uk Kim             EntriesLength = SubtableLength - sizeof (ACPI_CDAT_HEADER) -
9359a4bc520SJung-uk Kim                 sizeof (ACPI_CDAT_SSLBIS);
9369a4bc520SJung-uk Kim             DbgPrint (ASL_DEBUG_OUTPUT, "EntriesLength: %X, Offset: %X, Table->Length: %X\n",
9379a4bc520SJung-uk Kim                 EntriesLength, Offset, Table->Length);
9389a4bc520SJung-uk Kim 
9399a4bc520SJung-uk Kim             /* Do each of the SSLBE Entries */
9409a4bc520SJung-uk Kim 
9419a4bc520SJung-uk Kim             while ((EntriesLength > 0) && (Offset < Table->Length))
9429a4bc520SJung-uk Kim             {
9439a4bc520SJung-uk Kim                 AcpiOsPrintf ("\n");
9449a4bc520SJung-uk Kim 
9459a4bc520SJung-uk Kim                 Status = AcpiDmDumpTable (Length, Offset, Subtable, Offset,
9469a4bc520SJung-uk Kim                     AcpiDmTableInfoCdatEntries);
9479a4bc520SJung-uk Kim                 if (ACPI_FAILURE (Status))
9489a4bc520SJung-uk Kim                 {
9499a4bc520SJung-uk Kim                     return;
9509a4bc520SJung-uk Kim                 }
9519a4bc520SJung-uk Kim 
9529a4bc520SJung-uk Kim                 EntriesLength -= sizeof (ACPI_CDAT_SSLBE);
9539a4bc520SJung-uk Kim                 Offset += sizeof (ACPI_CDAT_SSLBE);
9549a4bc520SJung-uk Kim                 Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, Offset);
9559a4bc520SJung-uk Kim             }
9569a4bc520SJung-uk Kim 
9579a4bc520SJung-uk Kim             SubtableLength = 0;
9589a4bc520SJung-uk Kim             break;
9599a4bc520SJung-uk Kim 
9609a4bc520SJung-uk Kim         default:
9619a4bc520SJung-uk Kim             break;
9629a4bc520SJung-uk Kim         }
9639a4bc520SJung-uk Kim 
9649a4bc520SJung-uk Kim         DbgPrint (ASL_DEBUG_OUTPUT, "Offset: %X, Subtable Length: %X\n",
9659a4bc520SJung-uk Kim             Offset, SubtableLength);
9669a4bc520SJung-uk Kim 
9679a4bc520SJung-uk Kim         /* Point to next subtable */
9689a4bc520SJung-uk Kim 
9699a4bc520SJung-uk Kim         Offset += SubtableLength;
9709a4bc520SJung-uk Kim         Subtable = ACPI_ADD_PTR (ACPI_CDAT_HEADER, Table, Offset);
9719a4bc520SJung-uk Kim     }
9729a4bc520SJung-uk Kim 
9739a4bc520SJung-uk Kim     return;
9749a4bc520SJung-uk Kim }
9759a4bc520SJung-uk Kim 
9769a4bc520SJung-uk Kim 
977cfd1ed46SJung-uk Kim /*******************************************************************************
978cfd1ed46SJung-uk Kim  *
979cfd1ed46SJung-uk Kim  * FUNCTION:    AcpiDmDumpCedt
980cfd1ed46SJung-uk Kim  *
981cfd1ed46SJung-uk Kim  * PARAMETERS:  Table               - A CEDT table
982cfd1ed46SJung-uk Kim  *
983cfd1ed46SJung-uk Kim  * RETURN:      None
984cfd1ed46SJung-uk Kim  *
985cfd1ed46SJung-uk Kim  * DESCRIPTION: Format the contents of a CEDT. This table type consists
986cfd1ed46SJung-uk Kim  *              of an open-ended number of subtables.
987cfd1ed46SJung-uk Kim  *
988cfd1ed46SJung-uk Kim  ******************************************************************************/
989cfd1ed46SJung-uk Kim 
990cfd1ed46SJung-uk Kim void
AcpiDmDumpCedt(ACPI_TABLE_HEADER * Table)991cfd1ed46SJung-uk Kim AcpiDmDumpCedt (
992cfd1ed46SJung-uk Kim     ACPI_TABLE_HEADER       *Table)
993cfd1ed46SJung-uk Kim {
994cfd1ed46SJung-uk Kim     ACPI_STATUS             Status;
995cfd1ed46SJung-uk Kim     ACPI_CEDT_HEADER        *Subtable;
996cfd1ed46SJung-uk Kim     UINT32                  Length = Table->Length;
997cfd1ed46SJung-uk Kim     UINT32                  Offset = sizeof (ACPI_TABLE_CEDT);
998cfd1ed46SJung-uk Kim 
999cfd1ed46SJung-uk Kim 
1000cfd1ed46SJung-uk Kim     /* There is no main table (other than the standard ACPI header) */
1001cfd1ed46SJung-uk Kim 
1002cfd1ed46SJung-uk Kim     Subtable = ACPI_ADD_PTR (ACPI_CEDT_HEADER, Table, Offset);
1003cfd1ed46SJung-uk Kim     while (Offset < Table->Length)
1004cfd1ed46SJung-uk Kim     {
1005cfd1ed46SJung-uk Kim         /* Common subtable header */
1006cfd1ed46SJung-uk Kim 
1007cfd1ed46SJung-uk Kim         AcpiOsPrintf ("\n");
1008cfd1ed46SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset, Subtable,
1009cfd1ed46SJung-uk Kim             Subtable->Length, AcpiDmTableInfoCedtHdr);
1010cfd1ed46SJung-uk Kim         if (ACPI_FAILURE (Status))
1011cfd1ed46SJung-uk Kim         {
1012cfd1ed46SJung-uk Kim             return;
1013cfd1ed46SJung-uk Kim         }
1014cfd1ed46SJung-uk Kim 
1015cfd1ed46SJung-uk Kim         switch (Subtable->Type)
1016cfd1ed46SJung-uk Kim         {
1017cfd1ed46SJung-uk Kim         case ACPI_CEDT_TYPE_CHBS:
1018ab71bbb7SJung-uk Kim             Status = AcpiDmDumpTable (Length, Offset, Subtable,
1019ab71bbb7SJung-uk Kim                 Subtable->Length, AcpiDmTableInfoCedt0);
10209a4bc520SJung-uk Kim             if (ACPI_FAILURE (Status))
10219a4bc520SJung-uk Kim             {
1022ab71bbb7SJung-uk Kim                 return;
1023ab71bbb7SJung-uk Kim             }
1024cfd1ed46SJung-uk Kim             break;
1025cfd1ed46SJung-uk Kim 
10269a4bc520SJung-uk Kim         case ACPI_CEDT_TYPE_CFMWS:
10279a4bc520SJung-uk Kim         {
1028ab71bbb7SJung-uk Kim             ACPI_CEDT_CFMWS *ptr = (ACPI_CEDT_CFMWS *) Subtable;
102992f570c3SJung-uk Kim             unsigned int i, max;
103092f570c3SJung-uk Kim 
103192f570c3SJung-uk Kim             if (ptr->InterleaveWays < 8)
103292f570c3SJung-uk Kim                 max = 1 << (ptr->InterleaveWays);
103392f570c3SJung-uk Kim             else
103492f570c3SJung-uk Kim                 max = 3 << (ptr->InterleaveWays - 8);
1035cfd1ed46SJung-uk Kim 
1036ab71bbb7SJung-uk Kim 	    /* print out table with first "Interleave target" */
1037ab71bbb7SJung-uk Kim 
1038ab71bbb7SJung-uk Kim             Status = AcpiDmDumpTable (Length, Offset, Subtable,
1039ab71bbb7SJung-uk Kim                 Subtable->Length, AcpiDmTableInfoCedt1);
10409a4bc520SJung-uk Kim             if (ACPI_FAILURE (Status))
10419a4bc520SJung-uk Kim             {
1042ab71bbb7SJung-uk Kim                 return;
1043ab71bbb7SJung-uk Kim             }
1044ab71bbb7SJung-uk Kim 
1045ab71bbb7SJung-uk Kim             /* Now, print out any interleave targets beyond the first. */
1046ab71bbb7SJung-uk Kim 
10479a4bc520SJung-uk Kim             for (i = 1; i < max; i++)
10489a4bc520SJung-uk Kim             {
1049ab71bbb7SJung-uk Kim                 unsigned int loc_offset = Offset + (i * 4) + ACPI_OFFSET (ACPI_CEDT_CFMWS, InterleaveTargets);
1050ab71bbb7SJung-uk Kim                 unsigned int *trg = &(ptr->InterleaveTargets[i]);
10519a4bc520SJung-uk Kim 
1052ab71bbb7SJung-uk Kim                 Status = AcpiDmDumpTable (Length, loc_offset, trg,
1053ab71bbb7SJung-uk Kim                         Subtable->Length, AcpiDmTableInfoCedt1_te);
10549a4bc520SJung-uk Kim                 if (ACPI_FAILURE (Status))
10559a4bc520SJung-uk Kim                 {
1056ab71bbb7SJung-uk Kim                     return;
1057ab71bbb7SJung-uk Kim                 }
1058ab71bbb7SJung-uk Kim             }
1059ab71bbb7SJung-uk Kim             break;
1060ab71bbb7SJung-uk Kim         }
1061ab71bbb7SJung-uk Kim 
106292f570c3SJung-uk Kim         case ACPI_CEDT_TYPE_CXIMS:
106392f570c3SJung-uk Kim         {
106492f570c3SJung-uk Kim             ACPI_CEDT_CXIMS *ptr = (ACPI_CEDT_CXIMS *) Subtable;
106592f570c3SJung-uk Kim             unsigned int i, max = ptr->NrXormaps;
106692f570c3SJung-uk Kim 
106792f570c3SJung-uk Kim             /* print out table with first "XOR Map" */
106892f570c3SJung-uk Kim 
106992f570c3SJung-uk Kim             Status = AcpiDmDumpTable (Length, Offset, Subtable,
107092f570c3SJung-uk Kim                 Subtable->Length, AcpiDmTableInfoCedt2);
107192f570c3SJung-uk Kim             if (ACPI_FAILURE (Status))
107292f570c3SJung-uk Kim             {
107392f570c3SJung-uk Kim                 return;
107492f570c3SJung-uk Kim             }
107592f570c3SJung-uk Kim 
107692f570c3SJung-uk Kim             /* Now, print out any XOR Map beyond the first. */
107792f570c3SJung-uk Kim 
107892f570c3SJung-uk Kim             for (i = 1; i < max; i++)
107992f570c3SJung-uk Kim             {
108092f570c3SJung-uk Kim                 unsigned int loc_offset = Offset + (i * 1) + ACPI_OFFSET (ACPI_CEDT_CXIMS, XormapList);
108192f570c3SJung-uk Kim                 UINT64 *trg = &(ptr->XormapList[i]);
108292f570c3SJung-uk Kim 
108392f570c3SJung-uk Kim                 Status = AcpiDmDumpTable (Length, loc_offset, trg,
108492f570c3SJung-uk Kim                         Subtable->Length, AcpiDmTableInfoCedt2_te);
108592f570c3SJung-uk Kim                 if (ACPI_FAILURE (Status))
108692f570c3SJung-uk Kim                 {
108792f570c3SJung-uk Kim                     return;
108892f570c3SJung-uk Kim                 }
108992f570c3SJung-uk Kim             }
109092f570c3SJung-uk Kim             break;
109192f570c3SJung-uk Kim         }
109292f570c3SJung-uk Kim 
1093ab71bbb7SJung-uk Kim         default:
1094cfd1ed46SJung-uk Kim             AcpiOsPrintf ("\n**** Unknown CEDT subtable type 0x%X\n\n",
1095cfd1ed46SJung-uk Kim                 Subtable->Type);
1096cfd1ed46SJung-uk Kim 
1097cfd1ed46SJung-uk Kim             /* Attempt to continue */
1098cfd1ed46SJung-uk Kim             if (!Subtable->Length)
1099cfd1ed46SJung-uk Kim             {
1100cfd1ed46SJung-uk Kim                 AcpiOsPrintf ("Invalid zero length subtable\n");
1101cfd1ed46SJung-uk Kim                 return;
1102cfd1ed46SJung-uk Kim             }
1103cfd1ed46SJung-uk Kim         }
1104cfd1ed46SJung-uk Kim 
1105cfd1ed46SJung-uk Kim         /* Point to next subtable */
1106cfd1ed46SJung-uk Kim         Offset += Subtable->Length;
1107cfd1ed46SJung-uk Kim         Subtable = ACPI_ADD_PTR (ACPI_CEDT_HEADER, Subtable,
1108cfd1ed46SJung-uk Kim             Subtable->Length);
1109cfd1ed46SJung-uk Kim     }
1110cfd1ed46SJung-uk Kim }
1111ff879b07SJung-uk Kim 
1112ff879b07SJung-uk Kim /*******************************************************************************
1113ff879b07SJung-uk Kim  *
1114ff879b07SJung-uk Kim  * FUNCTION:    AcpiDmDumpCpep
1115ff879b07SJung-uk Kim  *
1116ff879b07SJung-uk Kim  * PARAMETERS:  Table               - A CPEP table
1117ff879b07SJung-uk Kim  *
1118ff879b07SJung-uk Kim  * RETURN:      None
1119ff879b07SJung-uk Kim  *
1120ff879b07SJung-uk Kim  * DESCRIPTION: Format the contents of a CPEP. This table type consists
1121ff879b07SJung-uk Kim  *              of an open-ended number of subtables.
1122ff879b07SJung-uk Kim  *
1123ff879b07SJung-uk Kim  ******************************************************************************/
1124ff879b07SJung-uk Kim 
1125ff879b07SJung-uk Kim void
AcpiDmDumpCpep(ACPI_TABLE_HEADER * Table)1126ff879b07SJung-uk Kim AcpiDmDumpCpep (
1127ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       *Table)
1128ff879b07SJung-uk Kim {
1129ff879b07SJung-uk Kim     ACPI_STATUS             Status;
1130ff879b07SJung-uk Kim     ACPI_CPEP_POLLING       *Subtable;
1131ff879b07SJung-uk Kim     UINT32                  Length = Table->Length;
1132ff879b07SJung-uk Kim     UINT32                  Offset = sizeof (ACPI_TABLE_CPEP);
1133ff879b07SJung-uk Kim 
1134ff879b07SJung-uk Kim 
1135ff879b07SJung-uk Kim     /* Main table */
1136ff879b07SJung-uk Kim 
1137ff879b07SJung-uk Kim     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoCpep);
1138ff879b07SJung-uk Kim     if (ACPI_FAILURE (Status))
1139ff879b07SJung-uk Kim     {
1140ff879b07SJung-uk Kim         return;
1141ff879b07SJung-uk Kim     }
1142ff879b07SJung-uk Kim 
1143ff879b07SJung-uk Kim     /* Subtables */
1144ff879b07SJung-uk Kim 
1145ff879b07SJung-uk Kim     Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset);
1146ff879b07SJung-uk Kim     while (Offset < Table->Length)
1147ff879b07SJung-uk Kim     {
1148ff879b07SJung-uk Kim         AcpiOsPrintf ("\n");
1149ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset, Subtable,
1150ff879b07SJung-uk Kim             Subtable->Header.Length, AcpiDmTableInfoCpep0);
1151ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
1152ff879b07SJung-uk Kim         {
1153ff879b07SJung-uk Kim             return;
1154ff879b07SJung-uk Kim         }
1155ff879b07SJung-uk Kim 
1156ff879b07SJung-uk Kim         /* Point to next subtable */
1157ff879b07SJung-uk Kim 
1158ff879b07SJung-uk Kim         Offset += Subtable->Header.Length;
1159ff879b07SJung-uk Kim         Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Subtable,
1160ff879b07SJung-uk Kim             Subtable->Header.Length);
1161ff879b07SJung-uk Kim     }
1162ff879b07SJung-uk Kim }
1163ff879b07SJung-uk Kim 
1164ff879b07SJung-uk Kim 
1165ff879b07SJung-uk Kim /*******************************************************************************
1166ff879b07SJung-uk Kim  *
1167ff879b07SJung-uk Kim  * FUNCTION:    AcpiDmDumpCsrt
1168ff879b07SJung-uk Kim  *
1169ff879b07SJung-uk Kim  * PARAMETERS:  Table               - A CSRT table
1170ff879b07SJung-uk Kim  *
1171ff879b07SJung-uk Kim  * RETURN:      None
1172ff879b07SJung-uk Kim  *
1173ff879b07SJung-uk Kim  * DESCRIPTION: Format the contents of a CSRT. This table type consists
1174ff879b07SJung-uk Kim  *              of an open-ended number of subtables.
1175ff879b07SJung-uk Kim  *
1176ff879b07SJung-uk Kim  ******************************************************************************/
1177ff879b07SJung-uk Kim 
1178ff879b07SJung-uk Kim void
AcpiDmDumpCsrt(ACPI_TABLE_HEADER * Table)1179ff879b07SJung-uk Kim AcpiDmDumpCsrt (
1180ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       *Table)
1181ff879b07SJung-uk Kim {
1182ff879b07SJung-uk Kim     ACPI_STATUS             Status;
1183ff879b07SJung-uk Kim     ACPI_CSRT_GROUP         *Subtable;
1184ff879b07SJung-uk Kim     ACPI_CSRT_SHARED_INFO   *SharedInfoTable;
1185ff879b07SJung-uk Kim     ACPI_CSRT_DESCRIPTOR    *SubSubtable;
1186ff879b07SJung-uk Kim     UINT32                  Length = Table->Length;
1187ff879b07SJung-uk Kim     UINT32                  Offset = sizeof (ACPI_TABLE_CSRT);
1188ff879b07SJung-uk Kim     UINT32                  SubOffset;
1189ff879b07SJung-uk Kim     UINT32                  SubSubOffset;
1190ff879b07SJung-uk Kim     UINT32                  InfoLength;
1191ff879b07SJung-uk Kim 
1192ff879b07SJung-uk Kim 
1193ff879b07SJung-uk Kim     /* The main table only contains the ACPI header, thus already handled */
1194ff879b07SJung-uk Kim 
1195ff879b07SJung-uk Kim     /* Subtables (Resource Groups) */
1196ff879b07SJung-uk Kim 
1197ff879b07SJung-uk Kim     Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset);
1198ff879b07SJung-uk Kim     while (Offset < Table->Length)
1199ff879b07SJung-uk Kim     {
1200ff879b07SJung-uk Kim         /* Resource group subtable */
1201ff879b07SJung-uk Kim 
1202ff879b07SJung-uk Kim         AcpiOsPrintf ("\n");
1203ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset, Subtable,
1204ff879b07SJung-uk Kim             Subtable->Length, AcpiDmTableInfoCsrt0);
1205ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
1206ff879b07SJung-uk Kim         {
1207ff879b07SJung-uk Kim             return;
1208ff879b07SJung-uk Kim         }
1209ff879b07SJung-uk Kim 
1210ff879b07SJung-uk Kim         /* Shared info subtable (One per resource group) */
1211ff879b07SJung-uk Kim 
1212ff879b07SJung-uk Kim         SubOffset = sizeof (ACPI_CSRT_GROUP);
1213ff879b07SJung-uk Kim         SharedInfoTable = ACPI_ADD_PTR (ACPI_CSRT_SHARED_INFO, Table,
1214ff879b07SJung-uk Kim             Offset + SubOffset);
1215ff879b07SJung-uk Kim 
1216ff879b07SJung-uk Kim         AcpiOsPrintf ("\n");
1217ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset + SubOffset, SharedInfoTable,
1218ff879b07SJung-uk Kim             sizeof (ACPI_CSRT_SHARED_INFO), AcpiDmTableInfoCsrt1);
1219ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
1220ff879b07SJung-uk Kim         {
1221ff879b07SJung-uk Kim             return;
1222ff879b07SJung-uk Kim         }
1223ff879b07SJung-uk Kim 
1224ff879b07SJung-uk Kim         SubOffset += Subtable->SharedInfoLength;
1225ff879b07SJung-uk Kim 
1226ff879b07SJung-uk Kim         /* Sub-Subtables (Resource Descriptors) */
1227ff879b07SJung-uk Kim 
1228ff879b07SJung-uk Kim         SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table,
1229ff879b07SJung-uk Kim             Offset + SubOffset);
1230ff879b07SJung-uk Kim 
1231ff879b07SJung-uk Kim         while ((SubOffset < Subtable->Length) &&
1232ff879b07SJung-uk Kim               ((Offset + SubOffset) < Table->Length))
1233ff879b07SJung-uk Kim         {
1234ff879b07SJung-uk Kim             AcpiOsPrintf ("\n");
1235ff879b07SJung-uk Kim             Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable,
1236ff879b07SJung-uk Kim                 SubSubtable->Length, AcpiDmTableInfoCsrt2);
1237ff879b07SJung-uk Kim             if (ACPI_FAILURE (Status))
1238ff879b07SJung-uk Kim             {
1239ff879b07SJung-uk Kim                 return;
1240ff879b07SJung-uk Kim             }
1241ff879b07SJung-uk Kim 
1242ff879b07SJung-uk Kim             SubSubOffset = sizeof (ACPI_CSRT_DESCRIPTOR);
1243ff879b07SJung-uk Kim 
1244ff879b07SJung-uk Kim             /* Resource-specific info buffer */
1245ff879b07SJung-uk Kim 
1246ff879b07SJung-uk Kim             InfoLength = SubSubtable->Length - SubSubOffset;
1247ff879b07SJung-uk Kim             if (InfoLength)
1248ff879b07SJung-uk Kim             {
1249ff879b07SJung-uk Kim                 Status = AcpiDmDumpTable (Length,
1250ff879b07SJung-uk Kim                     Offset + SubOffset + SubSubOffset, Table,
1251ff879b07SJung-uk Kim                     InfoLength, AcpiDmTableInfoCsrt2a);
1252ff879b07SJung-uk Kim                 if (ACPI_FAILURE (Status))
1253ff879b07SJung-uk Kim                 {
1254ff879b07SJung-uk Kim                     return;
1255ff879b07SJung-uk Kim                 }
1256ff879b07SJung-uk Kim             }
1257ff879b07SJung-uk Kim 
1258ff879b07SJung-uk Kim             /* Point to next sub-subtable */
1259ff879b07SJung-uk Kim 
1260ff879b07SJung-uk Kim             SubOffset += SubSubtable->Length;
1261ff879b07SJung-uk Kim             SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubtable,
1262ff879b07SJung-uk Kim                 SubSubtable->Length);
1263ff879b07SJung-uk Kim         }
1264ff879b07SJung-uk Kim 
1265ff879b07SJung-uk Kim         /* Point to next subtable */
1266ff879b07SJung-uk Kim 
1267ff879b07SJung-uk Kim         Offset += Subtable->Length;
1268ff879b07SJung-uk Kim         Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable,
1269ff879b07SJung-uk Kim             Subtable->Length);
1270ff879b07SJung-uk Kim     }
1271ff879b07SJung-uk Kim }
1272ff879b07SJung-uk Kim 
1273ff879b07SJung-uk Kim 
1274ff879b07SJung-uk Kim /*******************************************************************************
1275ff879b07SJung-uk Kim  *
1276ff879b07SJung-uk Kim  * FUNCTION:    AcpiDmDumpDbg2
1277ff879b07SJung-uk Kim  *
1278ff879b07SJung-uk Kim  * PARAMETERS:  Table               - A DBG2 table
1279ff879b07SJung-uk Kim  *
1280ff879b07SJung-uk Kim  * RETURN:      None
1281ff879b07SJung-uk Kim  *
1282ff879b07SJung-uk Kim  * DESCRIPTION: Format the contents of a DBG2. This table type consists
1283ff879b07SJung-uk Kim  *              of an open-ended number of subtables.
1284ff879b07SJung-uk Kim  *
1285ff879b07SJung-uk Kim  ******************************************************************************/
1286ff879b07SJung-uk Kim 
1287ff879b07SJung-uk Kim void
AcpiDmDumpDbg2(ACPI_TABLE_HEADER * Table)1288ff879b07SJung-uk Kim AcpiDmDumpDbg2 (
1289ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       *Table)
1290ff879b07SJung-uk Kim {
1291ff879b07SJung-uk Kim     ACPI_STATUS             Status;
1292ff879b07SJung-uk Kim     ACPI_DBG2_DEVICE        *Subtable;
1293ff879b07SJung-uk Kim     UINT32                  Length = Table->Length;
1294ff879b07SJung-uk Kim     UINT32                  Offset = sizeof (ACPI_TABLE_DBG2);
1295ff879b07SJung-uk Kim     UINT32                  i;
1296ff879b07SJung-uk Kim     UINT32                  ArrayOffset;
1297ff879b07SJung-uk Kim     UINT32                  AbsoluteOffset;
1298ff879b07SJung-uk Kim     UINT8                   *Array;
1299ff879b07SJung-uk Kim 
1300ff879b07SJung-uk Kim 
1301ff879b07SJung-uk Kim     /* Main table */
1302ff879b07SJung-uk Kim 
1303ff879b07SJung-uk Kim     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDbg2);
1304ff879b07SJung-uk Kim     if (ACPI_FAILURE (Status))
1305ff879b07SJung-uk Kim     {
1306ff879b07SJung-uk Kim         return;
1307ff879b07SJung-uk Kim     }
1308ff879b07SJung-uk Kim 
1309ff879b07SJung-uk Kim     /* Subtables */
1310ff879b07SJung-uk Kim 
1311ff879b07SJung-uk Kim     Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset);
1312ff879b07SJung-uk Kim     while (Offset < Table->Length)
1313ff879b07SJung-uk Kim     {
1314ff879b07SJung-uk Kim         AcpiOsPrintf ("\n");
1315ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset, Subtable,
1316ff879b07SJung-uk Kim             Subtable->Length, AcpiDmTableInfoDbg2Device);
1317ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
1318ff879b07SJung-uk Kim         {
1319ff879b07SJung-uk Kim             return;
1320ff879b07SJung-uk Kim         }
1321ff879b07SJung-uk Kim 
1322ff879b07SJung-uk Kim         /* Dump the BaseAddress array */
1323ff879b07SJung-uk Kim 
1324ff879b07SJung-uk Kim         for (i = 0; i < Subtable->RegisterCount; i++)
1325ff879b07SJung-uk Kim         {
1326ff879b07SJung-uk Kim             ArrayOffset = Subtable->BaseAddressOffset +
1327ff879b07SJung-uk Kim                 (sizeof (ACPI_GENERIC_ADDRESS) * i);
1328ff879b07SJung-uk Kim             AbsoluteOffset = Offset + ArrayOffset;
1329ff879b07SJung-uk Kim             Array = (UINT8 *) Subtable + ArrayOffset;
1330ff879b07SJung-uk Kim 
1331ff879b07SJung-uk Kim             Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
1332ff879b07SJung-uk Kim                 Subtable->Length, AcpiDmTableInfoDbg2Addr);
1333ff879b07SJung-uk Kim             if (ACPI_FAILURE (Status))
1334ff879b07SJung-uk Kim             {
1335ff879b07SJung-uk Kim                 return;
1336ff879b07SJung-uk Kim             }
1337ff879b07SJung-uk Kim         }
1338ff879b07SJung-uk Kim 
1339ff879b07SJung-uk Kim         /* Dump the AddressSize array */
1340ff879b07SJung-uk Kim 
1341ff879b07SJung-uk Kim         for (i = 0; i < Subtable->RegisterCount; i++)
1342ff879b07SJung-uk Kim         {
1343ff879b07SJung-uk Kim             ArrayOffset = Subtable->AddressSizeOffset +
1344ff879b07SJung-uk Kim                 (sizeof (UINT32) * i);
1345ff879b07SJung-uk Kim             AbsoluteOffset = Offset + ArrayOffset;
1346ff879b07SJung-uk Kim             Array = (UINT8 *) Subtable + ArrayOffset;
1347ff879b07SJung-uk Kim 
1348ff879b07SJung-uk Kim             Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
1349ff879b07SJung-uk Kim                 Subtable->Length, AcpiDmTableInfoDbg2Size);
1350ff879b07SJung-uk Kim             if (ACPI_FAILURE (Status))
1351ff879b07SJung-uk Kim             {
1352ff879b07SJung-uk Kim                 return;
1353ff879b07SJung-uk Kim             }
1354ff879b07SJung-uk Kim         }
1355ff879b07SJung-uk Kim 
1356ff879b07SJung-uk Kim         /* Dump the Namestring (required) */
1357ff879b07SJung-uk Kim 
1358ff879b07SJung-uk Kim         AcpiOsPrintf ("\n");
1359ff879b07SJung-uk Kim         ArrayOffset = Subtable->NamepathOffset;
1360ff879b07SJung-uk Kim         AbsoluteOffset = Offset + ArrayOffset;
1361ff879b07SJung-uk Kim         Array = (UINT8 *) Subtable + ArrayOffset;
1362ff879b07SJung-uk Kim 
1363ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
1364ff879b07SJung-uk Kim             Subtable->Length, AcpiDmTableInfoDbg2Name);
1365ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
1366ff879b07SJung-uk Kim         {
1367ff879b07SJung-uk Kim             return;
1368ff879b07SJung-uk Kim         }
1369ff879b07SJung-uk Kim 
1370ff879b07SJung-uk Kim         /* Dump the OemData (optional) */
1371ff879b07SJung-uk Kim 
1372ff879b07SJung-uk Kim         if (Subtable->OemDataOffset)
1373ff879b07SJung-uk Kim         {
137492f570c3SJung-uk Kim             Status = AcpiDmDumpTable (Length, Subtable->OemDataOffset,
137592f570c3SJung-uk Kim                 Subtable, Subtable->OemDataLength,
1376ff879b07SJung-uk Kim                 AcpiDmTableInfoDbg2OemData);
1377ff879b07SJung-uk Kim             if (ACPI_FAILURE (Status))
1378ff879b07SJung-uk Kim             {
1379ff879b07SJung-uk Kim                 return;
1380ff879b07SJung-uk Kim             }
1381ff879b07SJung-uk Kim         }
1382ff879b07SJung-uk Kim 
1383ff879b07SJung-uk Kim         /* Point to next subtable */
1384ff879b07SJung-uk Kim 
1385ff879b07SJung-uk Kim         Offset += Subtable->Length;
1386ff879b07SJung-uk Kim         Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Subtable,
1387ff879b07SJung-uk Kim             Subtable->Length);
1388ff879b07SJung-uk Kim     }
1389ff879b07SJung-uk Kim }
1390ff879b07SJung-uk Kim 
1391ff879b07SJung-uk Kim 
1392ff879b07SJung-uk Kim /*******************************************************************************
1393ff879b07SJung-uk Kim  *
1394ff879b07SJung-uk Kim  * FUNCTION:    AcpiDmDumpDmar
1395ff879b07SJung-uk Kim  *
1396ff879b07SJung-uk Kim  * PARAMETERS:  Table               - A DMAR table
1397ff879b07SJung-uk Kim  *
1398ff879b07SJung-uk Kim  * RETURN:      None
1399ff879b07SJung-uk Kim  *
1400ff879b07SJung-uk Kim  * DESCRIPTION: Format the contents of a DMAR. This table type consists
1401ff879b07SJung-uk Kim  *              of an open-ended number of subtables.
1402ff879b07SJung-uk Kim  *
1403ff879b07SJung-uk Kim  ******************************************************************************/
1404ff879b07SJung-uk Kim 
1405ff879b07SJung-uk Kim void
AcpiDmDumpDmar(ACPI_TABLE_HEADER * Table)1406ff879b07SJung-uk Kim AcpiDmDumpDmar (
1407ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       *Table)
1408ff879b07SJung-uk Kim {
1409ff879b07SJung-uk Kim     ACPI_STATUS             Status;
1410ff879b07SJung-uk Kim     ACPI_DMAR_HEADER        *Subtable;
1411ff879b07SJung-uk Kim     UINT32                  Length = Table->Length;
1412ff879b07SJung-uk Kim     UINT32                  Offset = sizeof (ACPI_TABLE_DMAR);
1413ff879b07SJung-uk Kim     ACPI_DMTABLE_INFO       *InfoTable;
1414ff879b07SJung-uk Kim     ACPI_DMAR_DEVICE_SCOPE  *ScopeTable;
1415ff879b07SJung-uk Kim     UINT32                  ScopeOffset;
1416ff879b07SJung-uk Kim     UINT8                   *PciPath;
1417ff879b07SJung-uk Kim     UINT32                  PathOffset;
1418ff879b07SJung-uk Kim 
1419ff879b07SJung-uk Kim 
1420ff879b07SJung-uk Kim     /* Main table */
1421ff879b07SJung-uk Kim 
1422ff879b07SJung-uk Kim     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDmar);
1423ff879b07SJung-uk Kim     if (ACPI_FAILURE (Status))
1424ff879b07SJung-uk Kim     {
1425ff879b07SJung-uk Kim         return;
1426ff879b07SJung-uk Kim     }
1427ff879b07SJung-uk Kim 
1428ff879b07SJung-uk Kim     /* Subtables */
1429ff879b07SJung-uk Kim 
1430ff879b07SJung-uk Kim     Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset);
1431ff879b07SJung-uk Kim     while (Offset < Table->Length)
1432ff879b07SJung-uk Kim     {
1433ff879b07SJung-uk Kim         /* Common subtable header */
1434ff879b07SJung-uk Kim 
1435ff879b07SJung-uk Kim         AcpiOsPrintf ("\n");
1436ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset, Subtable,
1437ff879b07SJung-uk Kim             Subtable->Length, AcpiDmTableInfoDmarHdr);
1438ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
1439ff879b07SJung-uk Kim         {
1440ff879b07SJung-uk Kim             return;
1441ff879b07SJung-uk Kim         }
1442ff879b07SJung-uk Kim 
1443ff879b07SJung-uk Kim         AcpiOsPrintf ("\n");
1444ff879b07SJung-uk Kim 
1445ff879b07SJung-uk Kim         switch (Subtable->Type)
1446ff879b07SJung-uk Kim         {
1447ff879b07SJung-uk Kim         case ACPI_DMAR_TYPE_HARDWARE_UNIT:
1448ff879b07SJung-uk Kim 
1449ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoDmar0;
1450ff879b07SJung-uk Kim             ScopeOffset = sizeof (ACPI_DMAR_HARDWARE_UNIT);
1451ff879b07SJung-uk Kim             break;
1452ff879b07SJung-uk Kim 
1453ff879b07SJung-uk Kim         case ACPI_DMAR_TYPE_RESERVED_MEMORY:
1454ff879b07SJung-uk Kim 
1455ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoDmar1;
1456ff879b07SJung-uk Kim             ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY);
1457ff879b07SJung-uk Kim             break;
1458ff879b07SJung-uk Kim 
1459ff879b07SJung-uk Kim         case ACPI_DMAR_TYPE_ROOT_ATS:
1460ff879b07SJung-uk Kim 
1461ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoDmar2;
1462ff879b07SJung-uk Kim             ScopeOffset = sizeof (ACPI_DMAR_ATSR);
1463ff879b07SJung-uk Kim             break;
1464ff879b07SJung-uk Kim 
1465ff879b07SJung-uk Kim         case ACPI_DMAR_TYPE_HARDWARE_AFFINITY:
1466ff879b07SJung-uk Kim 
1467ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoDmar3;
1468ff879b07SJung-uk Kim             ScopeOffset = sizeof (ACPI_DMAR_RHSA);
1469ff879b07SJung-uk Kim             break;
1470ff879b07SJung-uk Kim 
1471ff879b07SJung-uk Kim         case ACPI_DMAR_TYPE_NAMESPACE:
1472ff879b07SJung-uk Kim 
1473ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoDmar4;
1474ff879b07SJung-uk Kim             ScopeOffset = sizeof (ACPI_DMAR_ANDD);
1475ff879b07SJung-uk Kim             break;
1476ff879b07SJung-uk Kim 
1477ab71bbb7SJung-uk Kim         case ACPI_DMAR_TYPE_SATC:
1478ab71bbb7SJung-uk Kim 
1479ab71bbb7SJung-uk Kim             InfoTable = AcpiDmTableInfoDmar5;
1480ab71bbb7SJung-uk Kim             ScopeOffset = sizeof (ACPI_DMAR_SATC);
1481ab71bbb7SJung-uk Kim             break;
1482ab71bbb7SJung-uk Kim 
1483*58308fadSJung-uk Kim         case ACPI_DMAR_TYPE_SIDP:
1484*58308fadSJung-uk Kim 
1485*58308fadSJung-uk Kim             InfoTable = AcpiDmTableInfoDmar6;
1486*58308fadSJung-uk Kim             ScopeOffset = sizeof (ACPI_DMAR_SIDP);
1487*58308fadSJung-uk Kim             break;
1488*58308fadSJung-uk Kim 
1489ff879b07SJung-uk Kim         default:
1490ff879b07SJung-uk Kim 
1491ff879b07SJung-uk Kim             AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n",
1492ff879b07SJung-uk Kim                 Subtable->Type);
1493ff879b07SJung-uk Kim             return;
1494ff879b07SJung-uk Kim         }
1495ff879b07SJung-uk Kim 
1496ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset, Subtable,
1497ff879b07SJung-uk Kim             Subtable->Length, InfoTable);
1498ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
1499ff879b07SJung-uk Kim         {
1500ff879b07SJung-uk Kim             return;
1501ff879b07SJung-uk Kim         }
1502ff879b07SJung-uk Kim 
1503ff879b07SJung-uk Kim         /*
1504ff879b07SJung-uk Kim          * Dump the optional device scope entries
1505ff879b07SJung-uk Kim          */
1506ff879b07SJung-uk Kim         if ((Subtable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
1507ff879b07SJung-uk Kim             (Subtable->Type == ACPI_DMAR_TYPE_NAMESPACE))
1508ff879b07SJung-uk Kim         {
1509ff879b07SJung-uk Kim             /* These types do not support device scopes */
1510ff879b07SJung-uk Kim 
1511ff879b07SJung-uk Kim             goto NextSubtable;
1512ff879b07SJung-uk Kim         }
1513ff879b07SJung-uk Kim 
1514ff879b07SJung-uk Kim         ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, Subtable, ScopeOffset);
1515ff879b07SJung-uk Kim         while (ScopeOffset < Subtable->Length)
1516ff879b07SJung-uk Kim         {
1517ff879b07SJung-uk Kim             AcpiOsPrintf ("\n");
1518ff879b07SJung-uk Kim             Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable,
1519ff879b07SJung-uk Kim                 ScopeTable->Length, AcpiDmTableInfoDmarScope);
1520ff879b07SJung-uk Kim             if (ACPI_FAILURE (Status))
1521ff879b07SJung-uk Kim             {
1522ff879b07SJung-uk Kim                 return;
1523ff879b07SJung-uk Kim             }
1524ff879b07SJung-uk Kim             AcpiOsPrintf ("\n");
1525ff879b07SJung-uk Kim 
1526ff879b07SJung-uk Kim             /* Dump the PCI Path entries for this device scope */
1527ff879b07SJung-uk Kim 
1528ff879b07SJung-uk Kim             PathOffset = sizeof (ACPI_DMAR_DEVICE_SCOPE); /* Path entries start at this offset */
1529ff879b07SJung-uk Kim 
1530ff879b07SJung-uk Kim             PciPath = ACPI_ADD_PTR (UINT8, ScopeTable,
1531ff879b07SJung-uk Kim                 sizeof (ACPI_DMAR_DEVICE_SCOPE));
1532ff879b07SJung-uk Kim 
1533ff879b07SJung-uk Kim             while (PathOffset < ScopeTable->Length)
1534ff879b07SJung-uk Kim             {
1535ff879b07SJung-uk Kim                 AcpiDmLineHeader ((PathOffset + ScopeOffset + Offset), 2,
1536ff879b07SJung-uk Kim                     "PCI Path");
1537ff879b07SJung-uk Kim                 AcpiOsPrintf ("%2.2X,%2.2X\n", PciPath[0], PciPath[1]);
1538ff879b07SJung-uk Kim 
1539ff879b07SJung-uk Kim                 /* Point to next PCI Path entry */
1540ff879b07SJung-uk Kim 
1541ff879b07SJung-uk Kim                 PathOffset += 2;
1542ff879b07SJung-uk Kim                 PciPath += 2;
1543ff879b07SJung-uk Kim                 AcpiOsPrintf ("\n");
1544ff879b07SJung-uk Kim             }
1545ff879b07SJung-uk Kim 
1546ff879b07SJung-uk Kim             /* Point to next device scope entry */
1547ff879b07SJung-uk Kim 
1548ff879b07SJung-uk Kim             ScopeOffset += ScopeTable->Length;
1549ff879b07SJung-uk Kim             ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE,
1550ff879b07SJung-uk Kim                 ScopeTable, ScopeTable->Length);
1551ff879b07SJung-uk Kim         }
1552ff879b07SJung-uk Kim 
1553ff879b07SJung-uk Kim NextSubtable:
1554ff879b07SJung-uk Kim         /* Point to next subtable */
1555ff879b07SJung-uk Kim 
1556ff879b07SJung-uk Kim         Offset += Subtable->Length;
1557ff879b07SJung-uk Kim         Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Subtable,
1558ff879b07SJung-uk Kim             Subtable->Length);
1559ff879b07SJung-uk Kim     }
1560ff879b07SJung-uk Kim }
1561ff879b07SJung-uk Kim 
1562ff879b07SJung-uk Kim 
1563ff879b07SJung-uk Kim /*******************************************************************************
1564ff879b07SJung-uk Kim  *
1565ff879b07SJung-uk Kim  * FUNCTION:    AcpiDmDumpDrtm
1566ff879b07SJung-uk Kim  *
1567ff879b07SJung-uk Kim  * PARAMETERS:  Table               - A DRTM table
1568ff879b07SJung-uk Kim  *
1569ff879b07SJung-uk Kim  * RETURN:      None
1570ff879b07SJung-uk Kim  *
1571ff879b07SJung-uk Kim  * DESCRIPTION: Format the contents of a DRTM.
1572ff879b07SJung-uk Kim  *
1573ff879b07SJung-uk Kim  ******************************************************************************/
1574ff879b07SJung-uk Kim 
1575ff879b07SJung-uk Kim void
AcpiDmDumpDrtm(ACPI_TABLE_HEADER * Table)1576ff879b07SJung-uk Kim AcpiDmDumpDrtm (
1577ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       *Table)
1578ff879b07SJung-uk Kim {
1579ff879b07SJung-uk Kim     ACPI_STATUS             Status;
1580ff879b07SJung-uk Kim     UINT32                  Offset;
1581ff879b07SJung-uk Kim     ACPI_DRTM_VTABLE_LIST   *DrtmVtl;
1582ff879b07SJung-uk Kim     ACPI_DRTM_RESOURCE_LIST *DrtmRl;
1583ff879b07SJung-uk Kim     ACPI_DRTM_DPS_ID        *DrtmDps;
1584ff879b07SJung-uk Kim     UINT32                  Count;
1585ff879b07SJung-uk Kim 
1586ff879b07SJung-uk Kim 
1587ff879b07SJung-uk Kim     /* Main table */
1588ff879b07SJung-uk Kim 
1589ff879b07SJung-uk Kim     Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
1590ff879b07SJung-uk Kim         AcpiDmTableInfoDrtm);
1591ff879b07SJung-uk Kim     if (ACPI_FAILURE (Status))
1592ff879b07SJung-uk Kim     {
1593ff879b07SJung-uk Kim         return;
1594ff879b07SJung-uk Kim     }
1595ff879b07SJung-uk Kim 
1596ff879b07SJung-uk Kim     Offset = sizeof (ACPI_TABLE_DRTM);
1597ff879b07SJung-uk Kim 
1598ff879b07SJung-uk Kim     /* Sub-tables */
1599ff879b07SJung-uk Kim 
1600ff879b07SJung-uk Kim     /* Dump ValidatedTable length */
1601ff879b07SJung-uk Kim 
1602ff879b07SJung-uk Kim     DrtmVtl = ACPI_ADD_PTR (ACPI_DRTM_VTABLE_LIST, Table, Offset);
1603ff879b07SJung-uk Kim     AcpiOsPrintf ("\n");
1604ff879b07SJung-uk Kim     Status = AcpiDmDumpTable (Table->Length, Offset,
1605ff879b07SJung-uk Kim         DrtmVtl, ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables),
1606ff879b07SJung-uk Kim         AcpiDmTableInfoDrtm0);
1607ff879b07SJung-uk Kim     if (ACPI_FAILURE (Status))
1608ff879b07SJung-uk Kim     {
1609ff879b07SJung-uk Kim             return;
1610ff879b07SJung-uk Kim     }
1611ff879b07SJung-uk Kim 
1612ff879b07SJung-uk Kim     Offset += ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables);
1613ff879b07SJung-uk Kim 
1614ff879b07SJung-uk Kim     /* Dump Validated table addresses */
1615ff879b07SJung-uk Kim 
1616ff879b07SJung-uk Kim     Count = 0;
1617ff879b07SJung-uk Kim     while ((Offset < Table->Length) &&
1618ff879b07SJung-uk Kim             (DrtmVtl->ValidatedTableCount > Count))
1619ff879b07SJung-uk Kim     {
1620ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Table->Length, Offset,
1621ff879b07SJung-uk Kim             ACPI_ADD_PTR (void, Table, Offset), sizeof (UINT64),
1622ff879b07SJung-uk Kim             AcpiDmTableInfoDrtm0a);
1623ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
1624ff879b07SJung-uk Kim         {
1625ff879b07SJung-uk Kim             return;
1626ff879b07SJung-uk Kim         }
1627ff879b07SJung-uk Kim 
1628ff879b07SJung-uk Kim         Offset += sizeof (UINT64);
1629ff879b07SJung-uk Kim         Count++;
1630ff879b07SJung-uk Kim     }
1631ff879b07SJung-uk Kim 
1632ff879b07SJung-uk Kim     /* Dump ResourceList length */
1633ff879b07SJung-uk Kim 
1634ff879b07SJung-uk Kim     DrtmRl = ACPI_ADD_PTR (ACPI_DRTM_RESOURCE_LIST, Table, Offset);
1635ff879b07SJung-uk Kim     AcpiOsPrintf ("\n");
1636ff879b07SJung-uk Kim     Status = AcpiDmDumpTable (Table->Length, Offset,
1637ff879b07SJung-uk Kim         DrtmRl, ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources),
1638ff879b07SJung-uk Kim         AcpiDmTableInfoDrtm1);
1639ff879b07SJung-uk Kim     if (ACPI_FAILURE (Status))
1640ff879b07SJung-uk Kim     {
1641ff879b07SJung-uk Kim         return;
1642ff879b07SJung-uk Kim     }
1643ff879b07SJung-uk Kim 
1644ff879b07SJung-uk Kim     Offset += ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources);
1645ff879b07SJung-uk Kim 
1646ff879b07SJung-uk Kim     /* Dump the Resource List */
1647ff879b07SJung-uk Kim 
1648ff879b07SJung-uk Kim     Count = 0;
1649ff879b07SJung-uk Kim     while ((Offset < Table->Length) &&
1650ff879b07SJung-uk Kim            (DrtmRl->ResourceCount > Count))
1651ff879b07SJung-uk Kim     {
1652ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Table->Length, Offset,
1653ff879b07SJung-uk Kim             ACPI_ADD_PTR (void, Table, Offset),
1654ff879b07SJung-uk Kim             sizeof (ACPI_DRTM_RESOURCE), AcpiDmTableInfoDrtm1a);
1655ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
1656ff879b07SJung-uk Kim         {
1657ff879b07SJung-uk Kim             return;
1658ff879b07SJung-uk Kim         }
1659ff879b07SJung-uk Kim 
1660ff879b07SJung-uk Kim         Offset += sizeof (ACPI_DRTM_RESOURCE);
1661ff879b07SJung-uk Kim         Count++;
1662ff879b07SJung-uk Kim     }
1663ff879b07SJung-uk Kim 
1664ff879b07SJung-uk Kim     /* Dump DPS */
1665ff879b07SJung-uk Kim 
1666ff879b07SJung-uk Kim     DrtmDps = ACPI_ADD_PTR (ACPI_DRTM_DPS_ID, Table, Offset);
1667ff879b07SJung-uk Kim     AcpiOsPrintf ("\n");
1668ff879b07SJung-uk Kim     (void) AcpiDmDumpTable (Table->Length, Offset,
1669ff879b07SJung-uk Kim         DrtmDps, sizeof (ACPI_DRTM_DPS_ID), AcpiDmTableInfoDrtm2);
1670ff879b07SJung-uk Kim }
1671ff879b07SJung-uk Kim 
1672ff879b07SJung-uk Kim 
1673ff879b07SJung-uk Kim /*******************************************************************************
1674ff879b07SJung-uk Kim  *
1675ff879b07SJung-uk Kim  * FUNCTION:    AcpiDmDumpEinj
1676ff879b07SJung-uk Kim  *
1677ff879b07SJung-uk Kim  * PARAMETERS:  Table               - A EINJ table
1678ff879b07SJung-uk Kim  *
1679ff879b07SJung-uk Kim  * RETURN:      None
1680ff879b07SJung-uk Kim  *
1681ff879b07SJung-uk Kim  * DESCRIPTION: Format the contents of a EINJ. This table type consists
1682ff879b07SJung-uk Kim  *              of an open-ended number of subtables.
1683ff879b07SJung-uk Kim  *
1684ff879b07SJung-uk Kim  ******************************************************************************/
1685ff879b07SJung-uk Kim 
1686ff879b07SJung-uk Kim void
AcpiDmDumpEinj(ACPI_TABLE_HEADER * Table)1687ff879b07SJung-uk Kim AcpiDmDumpEinj (
1688ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       *Table)
1689ff879b07SJung-uk Kim {
1690ff879b07SJung-uk Kim     ACPI_STATUS             Status;
1691ff879b07SJung-uk Kim     ACPI_WHEA_HEADER        *Subtable;
1692ff879b07SJung-uk Kim     UINT32                  Length = Table->Length;
1693ff879b07SJung-uk Kim     UINT32                  Offset = sizeof (ACPI_TABLE_EINJ);
1694ff879b07SJung-uk Kim 
1695ff879b07SJung-uk Kim 
1696ff879b07SJung-uk Kim     /* Main table */
1697ff879b07SJung-uk Kim 
1698ff879b07SJung-uk Kim     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoEinj);
1699ff879b07SJung-uk Kim     if (ACPI_FAILURE (Status))
1700ff879b07SJung-uk Kim     {
1701ff879b07SJung-uk Kim         return;
1702ff879b07SJung-uk Kim     }
1703ff879b07SJung-uk Kim 
1704ff879b07SJung-uk Kim     /* Subtables */
1705ff879b07SJung-uk Kim 
1706ff879b07SJung-uk Kim     Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
1707ff879b07SJung-uk Kim     while (Offset < Table->Length)
1708ff879b07SJung-uk Kim     {
1709ff879b07SJung-uk Kim         AcpiOsPrintf ("\n");
1710ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset, Subtable,
1711ff879b07SJung-uk Kim             sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoEinj0);
1712ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
1713ff879b07SJung-uk Kim         {
1714ff879b07SJung-uk Kim             return;
1715ff879b07SJung-uk Kim         }
1716ff879b07SJung-uk Kim 
1717ff879b07SJung-uk Kim         /* Point to next subtable (each subtable is of fixed length) */
1718ff879b07SJung-uk Kim 
1719ff879b07SJung-uk Kim         Offset += sizeof (ACPI_WHEA_HEADER);
1720ff879b07SJung-uk Kim         Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable,
1721ff879b07SJung-uk Kim             sizeof (ACPI_WHEA_HEADER));
1722ff879b07SJung-uk Kim     }
1723ff879b07SJung-uk Kim }
1724ff879b07SJung-uk Kim 
1725ff879b07SJung-uk Kim 
1726ff879b07SJung-uk Kim /*******************************************************************************
1727ff879b07SJung-uk Kim  *
1728*58308fadSJung-uk Kim  * FUNCTION:    AcpiDmDumpErdt
1729*58308fadSJung-uk Kim  *
1730*58308fadSJung-uk Kim  * PARAMETERS:  Table               - A ERDT table
1731*58308fadSJung-uk Kim  *
1732*58308fadSJung-uk Kim  * RETURN:      None
1733*58308fadSJung-uk Kim  *
1734*58308fadSJung-uk Kim  * DESCRIPTION: Format the contents of a ERDT. This table type consists
1735*58308fadSJung-uk Kim  *              of an open-ended number of subtables.
1736*58308fadSJung-uk Kim  *
1737*58308fadSJung-uk Kim  ******************************************************************************/
1738*58308fadSJung-uk Kim 
1739*58308fadSJung-uk Kim void
AcpiDmDumpErdt(ACPI_TABLE_HEADER * Table)1740*58308fadSJung-uk Kim AcpiDmDumpErdt (
1741*58308fadSJung-uk Kim     ACPI_TABLE_HEADER       *Table)
1742*58308fadSJung-uk Kim {
1743*58308fadSJung-uk Kim     ACPI_STATUS             Status;
1744*58308fadSJung-uk Kim     ACPI_SUBTBL_HDR_16      *Subtable, *Subsubtable;
1745*58308fadSJung-uk Kim     ACPI_ERDT_DACD_PATHS    *ScopeTable;
1746*58308fadSJung-uk Kim     UINT32                  Offset = sizeof (ACPI_TABLE_ERDT);
1747*58308fadSJung-uk Kim     UINT32                  Suboffset;
1748*58308fadSJung-uk Kim     UINT32                  ScopeOffset;
1749*58308fadSJung-uk Kim     UINT32                  SubsubtableLength = 0;
1750*58308fadSJung-uk Kim     ACPI_DMTABLE_INFO       *InfoTable, *TrailEntries, *DacdEntries;
1751*58308fadSJung-uk Kim     UINT32                  NumTrailers = 0;
1752*58308fadSJung-uk Kim 
1753*58308fadSJung-uk Kim     /* Main table */
1754*58308fadSJung-uk Kim 
1755*58308fadSJung-uk Kim     Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoErdt);
1756*58308fadSJung-uk Kim     if (ACPI_FAILURE (Status))
1757*58308fadSJung-uk Kim     {
1758*58308fadSJung-uk Kim         return;
1759*58308fadSJung-uk Kim     }
1760*58308fadSJung-uk Kim 
1761*58308fadSJung-uk Kim     /* Subtables */
1762*58308fadSJung-uk Kim     Subtable = ACPI_ADD_PTR (ACPI_SUBTBL_HDR_16, Table, Offset);
1763*58308fadSJung-uk Kim     while (Offset < Table->Length)
1764*58308fadSJung-uk Kim     {
1765*58308fadSJung-uk Kim 
1766*58308fadSJung-uk Kim         /* Dump common header */
1767*58308fadSJung-uk Kim 
1768*58308fadSJung-uk Kim         AcpiOsPrintf ("\n");
1769*58308fadSJung-uk Kim         Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
1770*58308fadSJung-uk Kim             Subtable->Length, AcpiDmTableInfoErdtHdr);
1771*58308fadSJung-uk Kim         if (ACPI_FAILURE (Status))
1772*58308fadSJung-uk Kim         {
1773*58308fadSJung-uk Kim             return;
1774*58308fadSJung-uk Kim         }
1775*58308fadSJung-uk Kim 
1776*58308fadSJung-uk Kim         AcpiOsPrintf ("\n");
1777*58308fadSJung-uk Kim         Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
1778*58308fadSJung-uk Kim             Subtable->Length, AcpiDmTableInfoErdtRmdd);
1779*58308fadSJung-uk Kim         if (ACPI_FAILURE (Status))
1780*58308fadSJung-uk Kim         {
1781*58308fadSJung-uk Kim             return;
1782*58308fadSJung-uk Kim         }
1783*58308fadSJung-uk Kim 
1784*58308fadSJung-uk Kim         /* Subtables of this RMDD table */
1785*58308fadSJung-uk Kim 
1786*58308fadSJung-uk Kim         Suboffset = Offset + sizeof(ACPI_ERDT_RMDD);
1787*58308fadSJung-uk Kim         Subsubtable = ACPI_ADD_PTR (ACPI_SUBTBL_HDR_16, Table, Suboffset);
1788*58308fadSJung-uk Kim         while (Suboffset < Offset + Subtable->Length)
1789*58308fadSJung-uk Kim         {
1790*58308fadSJung-uk Kim             AcpiOsPrintf ("\n");
1791*58308fadSJung-uk Kim 
1792*58308fadSJung-uk Kim             TrailEntries = NULL;
1793*58308fadSJung-uk Kim             DacdEntries = NULL;
1794*58308fadSJung-uk Kim             switch (Subsubtable->Type)
1795*58308fadSJung-uk Kim             {
1796*58308fadSJung-uk Kim             case ACPI_ERDT_TYPE_CACD:
1797*58308fadSJung-uk Kim                  InfoTable = AcpiDmTableInfoErdtCacd;
1798*58308fadSJung-uk Kim                  TrailEntries = AcpiDmTableInfoErdtCacdX2apic;
1799*58308fadSJung-uk Kim                  SubsubtableLength = sizeof(ACPI_ERDT_CACD);
1800*58308fadSJung-uk Kim                  break;
1801*58308fadSJung-uk Kim 
1802*58308fadSJung-uk Kim             case ACPI_ERDT_TYPE_DACD:
1803*58308fadSJung-uk Kim                  InfoTable = AcpiDmTableInfoErdtDacd;
1804*58308fadSJung-uk Kim                  DacdEntries = AcpiDmTableInfoErdtDacdScope;
1805*58308fadSJung-uk Kim                  SubsubtableLength = sizeof(ACPI_ERDT_DACD);
1806*58308fadSJung-uk Kim                  break;
1807*58308fadSJung-uk Kim 
1808*58308fadSJung-uk Kim             case ACPI_ERDT_TYPE_CMRC:
1809*58308fadSJung-uk Kim                  InfoTable = AcpiDmTableInfoErdtCmrc;
1810*58308fadSJung-uk Kim                  break;
1811*58308fadSJung-uk Kim 
1812*58308fadSJung-uk Kim             case ACPI_ERDT_TYPE_MMRC:
1813*58308fadSJung-uk Kim                  InfoTable = AcpiDmTableInfoErdtMmrc;
1814*58308fadSJung-uk Kim                  TrailEntries = AcpiDmTableInfoErdtMmrcCorrFactor;
1815*58308fadSJung-uk Kim                  SubsubtableLength = sizeof(ACPI_ERDT_MMRC);
1816*58308fadSJung-uk Kim                  break;
1817*58308fadSJung-uk Kim 
1818*58308fadSJung-uk Kim             case ACPI_ERDT_TYPE_MARC:
1819*58308fadSJung-uk Kim                  InfoTable = AcpiDmTableInfoErdtMarc;
1820*58308fadSJung-uk Kim                  break;
1821*58308fadSJung-uk Kim 
1822*58308fadSJung-uk Kim             case ACPI_ERDT_TYPE_CARC:
1823*58308fadSJung-uk Kim                  InfoTable = AcpiDmTableInfoErdtCarc;
1824*58308fadSJung-uk Kim                  break;
1825*58308fadSJung-uk Kim 
1826*58308fadSJung-uk Kim             case ACPI_ERDT_TYPE_CMRD:
1827*58308fadSJung-uk Kim                  InfoTable = AcpiDmTableInfoErdtCmrd;
1828*58308fadSJung-uk Kim                  break;
1829*58308fadSJung-uk Kim 
1830*58308fadSJung-uk Kim             case ACPI_ERDT_TYPE_IBRD:
1831*58308fadSJung-uk Kim                  InfoTable = AcpiDmTableInfoErdtIbrd;
1832*58308fadSJung-uk Kim                  TrailEntries = AcpiDmTableInfoErdtIbrdCorrFactor;
1833*58308fadSJung-uk Kim                  SubsubtableLength = sizeof(ACPI_ERDT_IBRD);
1834*58308fadSJung-uk Kim                  break;
1835*58308fadSJung-uk Kim 
1836*58308fadSJung-uk Kim             case ACPI_ERDT_TYPE_IBAD:
1837*58308fadSJung-uk Kim                  InfoTable = AcpiDmTableInfoErdtIbad;
1838*58308fadSJung-uk Kim                  break;
1839*58308fadSJung-uk Kim 
1840*58308fadSJung-uk Kim             case ACPI_ERDT_TYPE_CARD:
1841*58308fadSJung-uk Kim                  InfoTable = AcpiDmTableInfoErdtCard;
1842*58308fadSJung-uk Kim                  break;
1843*58308fadSJung-uk Kim 
1844*58308fadSJung-uk Kim             default:
1845*58308fadSJung-uk Kim                 AcpiOsPrintf ("\n**** Unknown RMDD subtable type 0x%X\n",
1846*58308fadSJung-uk Kim                     Subsubtable->Type);
1847*58308fadSJung-uk Kim 
1848*58308fadSJung-uk Kim                 /* Attempt to continue */
1849*58308fadSJung-uk Kim 
1850*58308fadSJung-uk Kim                 if (!Subsubtable->Length)
1851*58308fadSJung-uk Kim                 {
1852*58308fadSJung-uk Kim                     AcpiOsPrintf ("Invalid zero length subtable\n");
1853*58308fadSJung-uk Kim                     return;
1854*58308fadSJung-uk Kim                 }
1855*58308fadSJung-uk Kim                 goto NextSubsubtable;
1856*58308fadSJung-uk Kim             }
1857*58308fadSJung-uk Kim 
1858*58308fadSJung-uk Kim             /* Dump subtable header */
1859*58308fadSJung-uk Kim 
1860*58308fadSJung-uk Kim             Status = AcpiDmDumpTable (Table->Length, Suboffset, Subsubtable,
1861*58308fadSJung-uk Kim                 Subsubtable->Length, AcpiDmTableInfoErdtHdr);
1862*58308fadSJung-uk Kim             if (ACPI_FAILURE (Status))
1863*58308fadSJung-uk Kim             {
1864*58308fadSJung-uk Kim                 return;
1865*58308fadSJung-uk Kim             }
1866*58308fadSJung-uk Kim 
1867*58308fadSJung-uk Kim             /* Dump subtable body */
1868*58308fadSJung-uk Kim 
1869*58308fadSJung-uk Kim             Status = AcpiDmDumpTable (Table->Length, Suboffset, Subsubtable,
1870*58308fadSJung-uk Kim                 Subsubtable->Length, InfoTable);
1871*58308fadSJung-uk Kim             if (ACPI_FAILURE (Status))
1872*58308fadSJung-uk Kim             {
1873*58308fadSJung-uk Kim                 return;
1874*58308fadSJung-uk Kim             }
1875*58308fadSJung-uk Kim 
1876*58308fadSJung-uk Kim             /* CACD, MMRC, and IBRD subtables have simple flex array at end */
1877*58308fadSJung-uk Kim 
1878*58308fadSJung-uk Kim             if (TrailEntries)
1879*58308fadSJung-uk Kim             {
1880*58308fadSJung-uk Kim                 NumTrailers = 0;
1881*58308fadSJung-uk Kim                 while (NumTrailers < Subsubtable->Length - SubsubtableLength)
1882*58308fadSJung-uk Kim                 {
1883*58308fadSJung-uk Kim 
1884*58308fadSJung-uk Kim                     /* Dump one flex array element */
1885*58308fadSJung-uk Kim 
1886*58308fadSJung-uk Kim                     Status = AcpiDmDumpTable (Table->Length, Suboffset +
1887*58308fadSJung-uk Kim                         SubsubtableLength + NumTrailers,
1888*58308fadSJung-uk Kim                         ACPI_ADD_PTR (ACPI_SUBTBL_HDR_16, Subsubtable,
1889*58308fadSJung-uk Kim                             SubsubtableLength + NumTrailers),
1890*58308fadSJung-uk Kim                         sizeof(UINT32), TrailEntries);
1891*58308fadSJung-uk Kim                     if (ACPI_FAILURE (Status))
1892*58308fadSJung-uk Kim                     {
1893*58308fadSJung-uk Kim                         return;
1894*58308fadSJung-uk Kim                     }
1895*58308fadSJung-uk Kim                     NumTrailers += sizeof(UINT32);
1896*58308fadSJung-uk Kim                 }
1897*58308fadSJung-uk Kim             }
1898*58308fadSJung-uk Kim 
1899*58308fadSJung-uk Kim             /* DACD subtable has flex array of device agent structures */
1900*58308fadSJung-uk Kim 
1901*58308fadSJung-uk Kim             if (DacdEntries) {
1902*58308fadSJung-uk Kim                  ScopeOffset = Suboffset + SubsubtableLength;
1903*58308fadSJung-uk Kim                  ScopeTable = ACPI_ADD_PTR (ACPI_ERDT_DACD_PATHS,
1904*58308fadSJung-uk Kim                      Subsubtable, SubsubtableLength);
1905*58308fadSJung-uk Kim                  while (ScopeOffset < Suboffset + Subsubtable->Length)
1906*58308fadSJung-uk Kim                  {
1907*58308fadSJung-uk Kim                      /* Dump one device agent structure */
1908*58308fadSJung-uk Kim 
1909*58308fadSJung-uk Kim                      AcpiOsPrintf ("\n");
1910*58308fadSJung-uk Kim                      Status = AcpiDmDumpTable (Table->Length, ScopeOffset,
1911*58308fadSJung-uk Kim                          ScopeTable, ScopeTable->Header.Length, DacdEntries);
1912*58308fadSJung-uk Kim                      if (ACPI_FAILURE (Status))
1913*58308fadSJung-uk Kim                      {
1914*58308fadSJung-uk Kim                          return;
1915*58308fadSJung-uk Kim                      }
1916*58308fadSJung-uk Kim 
1917*58308fadSJung-uk Kim                      /* Flex array of UINT8 for device path */
1918*58308fadSJung-uk Kim 
1919*58308fadSJung-uk Kim                      NumTrailers = 0;
1920*58308fadSJung-uk Kim                      while (NumTrailers < ScopeTable->Header.Length - sizeof(ACPI_ERDT_DACD_PATHS))
1921*58308fadSJung-uk Kim                      {
1922*58308fadSJung-uk Kim                          /* Dump one UINT8 of the device path */
1923*58308fadSJung-uk Kim 
1924*58308fadSJung-uk Kim                          Status = AcpiDmDumpTable (Table->Length, ScopeOffset +
1925*58308fadSJung-uk Kim                              sizeof(ACPI_ERDT_DACD_PATHS) + NumTrailers,
1926*58308fadSJung-uk Kim                              ACPI_ADD_PTR (ACPI_SUBTBL_HDR_16, ScopeTable,
1927*58308fadSJung-uk Kim                                  sizeof(*ScopeTable) + NumTrailers),
1928*58308fadSJung-uk Kim                              sizeof(UINT32), AcpiDmTableInfoErdtDacdPath);
1929*58308fadSJung-uk Kim                          if (ACPI_FAILURE (Status))
1930*58308fadSJung-uk Kim                          {
1931*58308fadSJung-uk Kim                              return;
1932*58308fadSJung-uk Kim                          }
1933*58308fadSJung-uk Kim                          NumTrailers++;
1934*58308fadSJung-uk Kim                      }
1935*58308fadSJung-uk Kim 
1936*58308fadSJung-uk Kim                      ScopeOffset += ScopeTable->Header.Length;
1937*58308fadSJung-uk Kim                      ScopeTable = ACPI_ADD_PTR (ACPI_ERDT_DACD_PATHS,
1938*58308fadSJung-uk Kim                          ScopeTable, ScopeTable->Header.Length);
1939*58308fadSJung-uk Kim                  }
1940*58308fadSJung-uk Kim             }
1941*58308fadSJung-uk Kim NextSubsubtable:
1942*58308fadSJung-uk Kim             Suboffset += Subsubtable->Length;
1943*58308fadSJung-uk Kim             Subsubtable = ACPI_ADD_PTR (ACPI_SUBTBL_HDR_16, Table, Suboffset);
1944*58308fadSJung-uk Kim         }
1945*58308fadSJung-uk Kim 
1946*58308fadSJung-uk Kim         Offset += Subtable->Length;
1947*58308fadSJung-uk Kim         Subtable = ACPI_ADD_PTR (ACPI_SUBTBL_HDR_16, Subtable,
1948*58308fadSJung-uk Kim             Subtable->Length);
1949*58308fadSJung-uk Kim     }
1950*58308fadSJung-uk Kim }
1951*58308fadSJung-uk Kim 
1952*58308fadSJung-uk Kim 
1953*58308fadSJung-uk Kim /*******************************************************************************
1954*58308fadSJung-uk Kim  *
1955ff879b07SJung-uk Kim  * FUNCTION:    AcpiDmDumpErst
1956ff879b07SJung-uk Kim  *
1957ff879b07SJung-uk Kim  * PARAMETERS:  Table               - A ERST table
1958ff879b07SJung-uk Kim  *
1959ff879b07SJung-uk Kim  * RETURN:      None
1960ff879b07SJung-uk Kim  *
1961ff879b07SJung-uk Kim  * DESCRIPTION: Format the contents of a ERST. This table type consists
1962ff879b07SJung-uk Kim  *              of an open-ended number of subtables.
1963ff879b07SJung-uk Kim  *
1964ff879b07SJung-uk Kim  ******************************************************************************/
1965ff879b07SJung-uk Kim 
1966ff879b07SJung-uk Kim void
AcpiDmDumpErst(ACPI_TABLE_HEADER * Table)1967ff879b07SJung-uk Kim AcpiDmDumpErst (
1968ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       *Table)
1969ff879b07SJung-uk Kim {
1970ff879b07SJung-uk Kim     ACPI_STATUS             Status;
1971ff879b07SJung-uk Kim     ACPI_WHEA_HEADER        *Subtable;
1972ff879b07SJung-uk Kim     UINT32                  Length = Table->Length;
1973ff879b07SJung-uk Kim     UINT32                  Offset = sizeof (ACPI_TABLE_ERST);
1974ff879b07SJung-uk Kim 
1975ff879b07SJung-uk Kim 
1976ff879b07SJung-uk Kim     /* Main table */
1977ff879b07SJung-uk Kim 
1978ff879b07SJung-uk Kim     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoErst);
1979ff879b07SJung-uk Kim     if (ACPI_FAILURE (Status))
1980ff879b07SJung-uk Kim     {
1981ff879b07SJung-uk Kim         return;
1982ff879b07SJung-uk Kim     }
1983ff879b07SJung-uk Kim 
1984ff879b07SJung-uk Kim     /* Subtables */
1985ff879b07SJung-uk Kim 
1986ff879b07SJung-uk Kim     Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
1987ff879b07SJung-uk Kim     while (Offset < Table->Length)
1988ff879b07SJung-uk Kim     {
1989ff879b07SJung-uk Kim         AcpiOsPrintf ("\n");
1990ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset, Subtable,
1991ff879b07SJung-uk Kim             sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoErst0);
1992ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
1993ff879b07SJung-uk Kim         {
1994ff879b07SJung-uk Kim             return;
1995ff879b07SJung-uk Kim         }
1996ff879b07SJung-uk Kim 
1997ff879b07SJung-uk Kim         /* Point to next subtable (each subtable is of fixed length) */
1998ff879b07SJung-uk Kim 
1999ff879b07SJung-uk Kim         Offset += sizeof (ACPI_WHEA_HEADER);
2000ff879b07SJung-uk Kim         Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable,
2001ff879b07SJung-uk Kim             sizeof (ACPI_WHEA_HEADER));
2002ff879b07SJung-uk Kim     }
2003ff879b07SJung-uk Kim }
2004ff879b07SJung-uk Kim 
2005ff879b07SJung-uk Kim 
2006ff879b07SJung-uk Kim /*******************************************************************************
2007ff879b07SJung-uk Kim  *
2008ff879b07SJung-uk Kim  * FUNCTION:    AcpiDmDumpFpdt
2009ff879b07SJung-uk Kim  *
2010ff879b07SJung-uk Kim  * PARAMETERS:  Table               - A FPDT table
2011ff879b07SJung-uk Kim  *
2012ff879b07SJung-uk Kim  * RETURN:      None
2013ff879b07SJung-uk Kim  *
2014ff879b07SJung-uk Kim  * DESCRIPTION: Format the contents of a FPDT. This table type consists
2015ff879b07SJung-uk Kim  *              of an open-ended number of subtables.
2016ff879b07SJung-uk Kim  *
2017ff879b07SJung-uk Kim  ******************************************************************************/
2018ff879b07SJung-uk Kim 
2019ff879b07SJung-uk Kim void
AcpiDmDumpFpdt(ACPI_TABLE_HEADER * Table)2020ff879b07SJung-uk Kim AcpiDmDumpFpdt (
2021ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       *Table)
2022ff879b07SJung-uk Kim {
2023ff879b07SJung-uk Kim     ACPI_STATUS             Status;
2024ff879b07SJung-uk Kim     ACPI_FPDT_HEADER        *Subtable;
2025ff879b07SJung-uk Kim     UINT32                  Length = Table->Length;
2026ff879b07SJung-uk Kim     UINT32                  Offset = sizeof (ACPI_TABLE_FPDT);
2027ff879b07SJung-uk Kim     ACPI_DMTABLE_INFO       *InfoTable;
2028ff879b07SJung-uk Kim 
2029ff879b07SJung-uk Kim 
2030ff879b07SJung-uk Kim     /* There is no main table (other than the standard ACPI header) */
2031ff879b07SJung-uk Kim 
2032ff879b07SJung-uk Kim     /* Subtables */
2033ff879b07SJung-uk Kim 
2034ff879b07SJung-uk Kim     Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset);
2035ff879b07SJung-uk Kim     while (Offset < Table->Length)
2036ff879b07SJung-uk Kim     {
2037ff879b07SJung-uk Kim         /* Common subtable header */
2038ff879b07SJung-uk Kim 
2039ff879b07SJung-uk Kim         AcpiOsPrintf ("\n");
2040ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset, Subtable,
2041ff879b07SJung-uk Kim             Subtable->Length, AcpiDmTableInfoFpdtHdr);
2042ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
2043ff879b07SJung-uk Kim         {
2044ff879b07SJung-uk Kim             return;
2045ff879b07SJung-uk Kim         }
2046ff879b07SJung-uk Kim 
2047ff879b07SJung-uk Kim         switch (Subtable->Type)
2048ff879b07SJung-uk Kim         {
2049ff879b07SJung-uk Kim         case ACPI_FPDT_TYPE_BOOT:
2050ff879b07SJung-uk Kim 
2051ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoFpdt0;
2052ff879b07SJung-uk Kim             break;
2053ff879b07SJung-uk Kim 
2054ff879b07SJung-uk Kim         case ACPI_FPDT_TYPE_S3PERF:
2055ff879b07SJung-uk Kim 
2056ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoFpdt1;
2057ff879b07SJung-uk Kim             break;
2058ff879b07SJung-uk Kim 
2059ff879b07SJung-uk Kim         default:
2060ff879b07SJung-uk Kim 
2061ff879b07SJung-uk Kim             AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n",
2062ff879b07SJung-uk Kim                 Subtable->Type);
2063ff879b07SJung-uk Kim 
2064ff879b07SJung-uk Kim             /* Attempt to continue */
2065ff879b07SJung-uk Kim 
2066ff879b07SJung-uk Kim             if (!Subtable->Length)
2067ff879b07SJung-uk Kim             {
2068ff879b07SJung-uk Kim                 AcpiOsPrintf ("Invalid zero length subtable\n");
2069ff879b07SJung-uk Kim                 return;
2070ff879b07SJung-uk Kim             }
2071ff879b07SJung-uk Kim             goto NextSubtable;
2072ff879b07SJung-uk Kim         }
2073ff879b07SJung-uk Kim 
2074ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset, Subtable,
2075ff879b07SJung-uk Kim             Subtable->Length, InfoTable);
2076ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
2077ff879b07SJung-uk Kim         {
2078ff879b07SJung-uk Kim             return;
2079ff879b07SJung-uk Kim         }
2080ff879b07SJung-uk Kim 
2081ff879b07SJung-uk Kim NextSubtable:
2082ff879b07SJung-uk Kim         /* Point to next subtable */
2083ff879b07SJung-uk Kim 
2084ff879b07SJung-uk Kim         Offset += Subtable->Length;
2085ff879b07SJung-uk Kim         Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable,
2086ff879b07SJung-uk Kim             Subtable->Length);
2087ff879b07SJung-uk Kim     }
2088ff879b07SJung-uk Kim }
2089ff879b07SJung-uk Kim 
2090ff879b07SJung-uk Kim 
2091ff879b07SJung-uk Kim /*******************************************************************************
2092ff879b07SJung-uk Kim  *
2093ff879b07SJung-uk Kim  * FUNCTION:    AcpiDmDumpGtdt
2094ff879b07SJung-uk Kim  *
2095ff879b07SJung-uk Kim  * PARAMETERS:  Table               - A GTDT table
2096ff879b07SJung-uk Kim  *
2097ff879b07SJung-uk Kim  * RETURN:      None
2098ff879b07SJung-uk Kim  *
2099ff879b07SJung-uk Kim  * DESCRIPTION: Format the contents of a GTDT. This table type consists
2100ff879b07SJung-uk Kim  *              of an open-ended number of subtables.
2101ff879b07SJung-uk Kim  *
2102ff879b07SJung-uk Kim  ******************************************************************************/
2103ff879b07SJung-uk Kim 
2104ff879b07SJung-uk Kim void
AcpiDmDumpGtdt(ACPI_TABLE_HEADER * Table)2105ff879b07SJung-uk Kim AcpiDmDumpGtdt (
2106ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       *Table)
2107ff879b07SJung-uk Kim {
2108ff879b07SJung-uk Kim     ACPI_STATUS             Status;
2109ff879b07SJung-uk Kim     ACPI_GTDT_HEADER        *Subtable;
2110ff879b07SJung-uk Kim     UINT32                  Length = Table->Length;
2111ff879b07SJung-uk Kim     UINT32                  Offset = sizeof (ACPI_TABLE_GTDT);
2112ff879b07SJung-uk Kim     ACPI_DMTABLE_INFO       *InfoTable;
2113ff879b07SJung-uk Kim     UINT32                  SubtableLength;
2114ff879b07SJung-uk Kim     UINT32                  GtCount;
2115ff879b07SJung-uk Kim     ACPI_GTDT_TIMER_ENTRY   *GtxTable;
2116ff879b07SJung-uk Kim 
2117ff879b07SJung-uk Kim 
2118ff879b07SJung-uk Kim     /* Main table */
2119ff879b07SJung-uk Kim 
2120ff879b07SJung-uk Kim     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt);
2121ff879b07SJung-uk Kim     if (ACPI_FAILURE (Status))
2122ff879b07SJung-uk Kim     {
2123ff879b07SJung-uk Kim         return;
2124ff879b07SJung-uk Kim     }
2125ff879b07SJung-uk Kim 
2126cd6518c7SJung-uk Kim     /* Rev 3 fields */
2127ff879b07SJung-uk Kim 
2128ff879b07SJung-uk Kim     Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset);
2129cd6518c7SJung-uk Kim 
2130cd6518c7SJung-uk Kim     if (Table->Revision > 2)
2131cd6518c7SJung-uk Kim     {
2132cd6518c7SJung-uk Kim         SubtableLength = sizeof (ACPI_GTDT_EL2);
2133cd6518c7SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset, Subtable,
2134cd6518c7SJung-uk Kim             SubtableLength, AcpiDmTableInfoGtdtEl2);
2135cd6518c7SJung-uk Kim         if (ACPI_FAILURE (Status))
2136cd6518c7SJung-uk Kim         {
2137cd6518c7SJung-uk Kim             return;
2138cd6518c7SJung-uk Kim         }
2139cd6518c7SJung-uk Kim         Offset += SubtableLength;
2140cd6518c7SJung-uk Kim     }
2141cd6518c7SJung-uk Kim 
2142cd6518c7SJung-uk Kim     Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset);
2143cd6518c7SJung-uk Kim 
2144cd6518c7SJung-uk Kim     /* Subtables */
2145cd6518c7SJung-uk Kim 
2146ff879b07SJung-uk Kim     while (Offset < Table->Length)
2147ff879b07SJung-uk Kim     {
2148ff879b07SJung-uk Kim         /* Common subtable header */
2149ff879b07SJung-uk Kim 
2150ff879b07SJung-uk Kim         AcpiOsPrintf ("\n");
2151ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset, Subtable,
2152ff879b07SJung-uk Kim             Subtable->Length, AcpiDmTableInfoGtdtHdr);
2153ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
2154ff879b07SJung-uk Kim         {
2155ff879b07SJung-uk Kim             return;
2156ff879b07SJung-uk Kim         }
2157ff879b07SJung-uk Kim 
2158ff879b07SJung-uk Kim         GtCount = 0;
2159ff879b07SJung-uk Kim         switch (Subtable->Type)
2160ff879b07SJung-uk Kim         {
2161ff879b07SJung-uk Kim         case ACPI_GTDT_TYPE_TIMER_BLOCK:
2162ff879b07SJung-uk Kim 
2163ff879b07SJung-uk Kim             SubtableLength = sizeof (ACPI_GTDT_TIMER_BLOCK);
2164ff879b07SJung-uk Kim             GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
2165ff879b07SJung-uk Kim                 Subtable))->TimerCount;
2166ff879b07SJung-uk Kim 
2167ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoGtdt0;
2168ff879b07SJung-uk Kim             break;
2169ff879b07SJung-uk Kim 
2170ff879b07SJung-uk Kim         case ACPI_GTDT_TYPE_WATCHDOG:
2171ff879b07SJung-uk Kim 
2172ff879b07SJung-uk Kim             SubtableLength = sizeof (ACPI_GTDT_WATCHDOG);
2173ff879b07SJung-uk Kim 
2174ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoGtdt1;
2175ff879b07SJung-uk Kim             break;
2176ff879b07SJung-uk Kim 
2177ff879b07SJung-uk Kim         default:
2178ff879b07SJung-uk Kim 
2179ff879b07SJung-uk Kim             /* Cannot continue on unknown type - no length */
2180ff879b07SJung-uk Kim 
2181ff879b07SJung-uk Kim             AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n",
2182ff879b07SJung-uk Kim                 Subtable->Type);
2183ff879b07SJung-uk Kim             return;
2184ff879b07SJung-uk Kim         }
2185ff879b07SJung-uk Kim 
2186ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset, Subtable,
2187ff879b07SJung-uk Kim             Subtable->Length, InfoTable);
2188ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
2189ff879b07SJung-uk Kim         {
2190ff879b07SJung-uk Kim             return;
2191ff879b07SJung-uk Kim         }
2192ff879b07SJung-uk Kim 
2193ff879b07SJung-uk Kim         /* Point to end of current subtable (each subtable above is of fixed length) */
2194ff879b07SJung-uk Kim 
2195ff879b07SJung-uk Kim         Offset += SubtableLength;
2196ff879b07SJung-uk Kim 
2197ff879b07SJung-uk Kim         /* If there are any Gt Timer Blocks from above, dump them now */
2198ff879b07SJung-uk Kim 
2199ff879b07SJung-uk Kim         if (GtCount)
2200ff879b07SJung-uk Kim         {
2201ff879b07SJung-uk Kim             GtxTable = ACPI_ADD_PTR (
2202ff879b07SJung-uk Kim                 ACPI_GTDT_TIMER_ENTRY, Subtable, SubtableLength);
2203ff879b07SJung-uk Kim             SubtableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY);
2204ff879b07SJung-uk Kim 
2205ff879b07SJung-uk Kim             while (GtCount)
2206ff879b07SJung-uk Kim             {
2207ff879b07SJung-uk Kim                 AcpiOsPrintf ("\n");
2208ff879b07SJung-uk Kim                 Status = AcpiDmDumpTable (Length, Offset, GtxTable,
2209ff879b07SJung-uk Kim                     sizeof (ACPI_GTDT_TIMER_ENTRY), AcpiDmTableInfoGtdt0a);
2210ff879b07SJung-uk Kim                 if (ACPI_FAILURE (Status))
2211ff879b07SJung-uk Kim                 {
2212ff879b07SJung-uk Kim                     return;
2213ff879b07SJung-uk Kim                 }
2214ff879b07SJung-uk Kim                 Offset += sizeof (ACPI_GTDT_TIMER_ENTRY);
2215ff879b07SJung-uk Kim                 GtxTable++;
2216ff879b07SJung-uk Kim                 GtCount--;
2217ff879b07SJung-uk Kim             }
2218ff879b07SJung-uk Kim         }
2219ff879b07SJung-uk Kim 
2220ff879b07SJung-uk Kim         /* Point to next subtable */
2221ff879b07SJung-uk Kim 
2222ff879b07SJung-uk Kim         Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Subtable, SubtableLength);
2223ff879b07SJung-uk Kim     }
2224ff879b07SJung-uk Kim }
2225ff879b07SJung-uk Kim 
2226ff879b07SJung-uk Kim 
2227ff879b07SJung-uk Kim /*******************************************************************************
2228ff879b07SJung-uk Kim  *
2229ff879b07SJung-uk Kim  * FUNCTION:    AcpiDmDumpHest
2230ff879b07SJung-uk Kim  *
2231ff879b07SJung-uk Kim  * PARAMETERS:  Table               - A HEST table
2232ff879b07SJung-uk Kim  *
2233ff879b07SJung-uk Kim  * RETURN:      None
2234ff879b07SJung-uk Kim  *
2235ff879b07SJung-uk Kim  * DESCRIPTION: Format the contents of a HEST. This table type consists
2236ff879b07SJung-uk Kim  *              of an open-ended number of subtables.
2237ff879b07SJung-uk Kim  *
2238ff879b07SJung-uk Kim  ******************************************************************************/
2239ff879b07SJung-uk Kim 
2240ff879b07SJung-uk Kim void
AcpiDmDumpHest(ACPI_TABLE_HEADER * Table)2241ff879b07SJung-uk Kim AcpiDmDumpHest (
2242ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       *Table)
2243ff879b07SJung-uk Kim {
2244ff879b07SJung-uk Kim     ACPI_STATUS             Status;
2245ff879b07SJung-uk Kim     ACPI_HEST_HEADER        *Subtable;
2246ff879b07SJung-uk Kim     UINT32                  Length = Table->Length;
2247ff879b07SJung-uk Kim     UINT32                  Offset = sizeof (ACPI_TABLE_HEST);
2248ff879b07SJung-uk Kim     ACPI_DMTABLE_INFO       *InfoTable;
2249ff879b07SJung-uk Kim     UINT32                  SubtableLength;
2250ff879b07SJung-uk Kim     UINT32                  BankCount;
2251ff879b07SJung-uk Kim     ACPI_HEST_IA_ERROR_BANK *BankTable;
2252ff879b07SJung-uk Kim 
2253ff879b07SJung-uk Kim 
2254ff879b07SJung-uk Kim     /* Main table */
2255ff879b07SJung-uk Kim 
2256ff879b07SJung-uk Kim     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHest);
2257ff879b07SJung-uk Kim     if (ACPI_FAILURE (Status))
2258ff879b07SJung-uk Kim     {
2259ff879b07SJung-uk Kim         return;
2260ff879b07SJung-uk Kim     }
2261ff879b07SJung-uk Kim 
2262ff879b07SJung-uk Kim     /* Subtables */
2263ff879b07SJung-uk Kim 
2264ff879b07SJung-uk Kim     Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset);
2265ff879b07SJung-uk Kim     while (Offset < Table->Length)
2266ff879b07SJung-uk Kim     {
2267ff879b07SJung-uk Kim         BankCount = 0;
2268ff879b07SJung-uk Kim         switch (Subtable->Type)
2269ff879b07SJung-uk Kim         {
2270ff879b07SJung-uk Kim         case ACPI_HEST_TYPE_IA32_CHECK:
2271ff879b07SJung-uk Kim 
2272ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoHest0;
2273ff879b07SJung-uk Kim             SubtableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK);
2274ff879b07SJung-uk Kim             BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK,
2275ff879b07SJung-uk Kim                 Subtable))->NumHardwareBanks;
2276ff879b07SJung-uk Kim             break;
2277ff879b07SJung-uk Kim 
2278ff879b07SJung-uk Kim         case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK:
2279ff879b07SJung-uk Kim 
2280ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoHest1;
2281ff879b07SJung-uk Kim             SubtableLength = sizeof (ACPI_HEST_IA_CORRECTED);
2282ff879b07SJung-uk Kim             BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED,
2283ff879b07SJung-uk Kim                 Subtable))->NumHardwareBanks;
2284ff879b07SJung-uk Kim             break;
2285ff879b07SJung-uk Kim 
2286ff879b07SJung-uk Kim         case ACPI_HEST_TYPE_IA32_NMI:
2287ff879b07SJung-uk Kim 
2288ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoHest2;
2289ff879b07SJung-uk Kim             SubtableLength = sizeof (ACPI_HEST_IA_NMI);
2290ff879b07SJung-uk Kim             break;
2291ff879b07SJung-uk Kim 
2292ff879b07SJung-uk Kim         case ACPI_HEST_TYPE_AER_ROOT_PORT:
2293ff879b07SJung-uk Kim 
2294ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoHest6;
2295ff879b07SJung-uk Kim             SubtableLength = sizeof (ACPI_HEST_AER_ROOT);
2296ff879b07SJung-uk Kim             break;
2297ff879b07SJung-uk Kim 
2298ff879b07SJung-uk Kim         case ACPI_HEST_TYPE_AER_ENDPOINT:
2299ff879b07SJung-uk Kim 
2300ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoHest7;
2301ff879b07SJung-uk Kim             SubtableLength = sizeof (ACPI_HEST_AER);
2302ff879b07SJung-uk Kim             break;
2303ff879b07SJung-uk Kim 
2304ff879b07SJung-uk Kim         case ACPI_HEST_TYPE_AER_BRIDGE:
2305ff879b07SJung-uk Kim 
2306ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoHest8;
2307ff879b07SJung-uk Kim             SubtableLength = sizeof (ACPI_HEST_AER_BRIDGE);
2308ff879b07SJung-uk Kim             break;
2309ff879b07SJung-uk Kim 
2310ff879b07SJung-uk Kim         case ACPI_HEST_TYPE_GENERIC_ERROR:
2311ff879b07SJung-uk Kim 
2312ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoHest9;
2313ff879b07SJung-uk Kim             SubtableLength = sizeof (ACPI_HEST_GENERIC);
2314ff879b07SJung-uk Kim             break;
2315ff879b07SJung-uk Kim 
2316ff879b07SJung-uk Kim         case ACPI_HEST_TYPE_GENERIC_ERROR_V2:
2317ff879b07SJung-uk Kim 
2318ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoHest10;
2319ff879b07SJung-uk Kim             SubtableLength = sizeof (ACPI_HEST_GENERIC_V2);
2320ff879b07SJung-uk Kim             break;
2321ff879b07SJung-uk Kim 
2322ff879b07SJung-uk Kim         case ACPI_HEST_TYPE_IA32_DEFERRED_CHECK:
2323ff879b07SJung-uk Kim 
2324ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoHest11;
2325ff879b07SJung-uk Kim             SubtableLength = sizeof (ACPI_HEST_IA_DEFERRED_CHECK);
2326ff879b07SJung-uk Kim             BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_DEFERRED_CHECK,
2327ff879b07SJung-uk Kim                 Subtable))->NumHardwareBanks;
2328ff879b07SJung-uk Kim             break;
2329ff879b07SJung-uk Kim 
2330ff879b07SJung-uk Kim         default:
2331ff879b07SJung-uk Kim 
2332ff879b07SJung-uk Kim             /* Cannot continue on unknown type - no length */
2333ff879b07SJung-uk Kim 
2334ff879b07SJung-uk Kim             AcpiOsPrintf ("\n**** Unknown HEST subtable type 0x%X\n",
2335ff879b07SJung-uk Kim                 Subtable->Type);
2336ff879b07SJung-uk Kim             return;
2337ff879b07SJung-uk Kim         }
2338ff879b07SJung-uk Kim 
2339ff879b07SJung-uk Kim         AcpiOsPrintf ("\n");
2340ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Length, Offset, Subtable,
2341ff879b07SJung-uk Kim             SubtableLength, InfoTable);
2342ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
2343ff879b07SJung-uk Kim         {
2344ff879b07SJung-uk Kim             return;
2345ff879b07SJung-uk Kim         }
2346ff879b07SJung-uk Kim 
2347ff879b07SJung-uk Kim         /* Point to end of current subtable (each subtable above is of fixed length) */
2348ff879b07SJung-uk Kim 
2349ff879b07SJung-uk Kim         Offset += SubtableLength;
2350ff879b07SJung-uk Kim 
2351ff879b07SJung-uk Kim         /* If there are any (fixed-length) Error Banks from above, dump them now */
2352ff879b07SJung-uk Kim 
2353ff879b07SJung-uk Kim         if (BankCount)
2354ff879b07SJung-uk Kim         {
2355ff879b07SJung-uk Kim             BankTable = ACPI_ADD_PTR (ACPI_HEST_IA_ERROR_BANK, Subtable,
2356ff879b07SJung-uk Kim                 SubtableLength);
2357ff879b07SJung-uk Kim             SubtableLength += BankCount * sizeof (ACPI_HEST_IA_ERROR_BANK);
2358ff879b07SJung-uk Kim 
2359ff879b07SJung-uk Kim             while (BankCount)
2360ff879b07SJung-uk Kim             {
2361ff879b07SJung-uk Kim                 AcpiOsPrintf ("\n");
2362ff879b07SJung-uk Kim                 Status = AcpiDmDumpTable (Length, Offset, BankTable,
2363ff879b07SJung-uk Kim                     sizeof (ACPI_HEST_IA_ERROR_BANK), AcpiDmTableInfoHestBank);
2364ff879b07SJung-uk Kim                 if (ACPI_FAILURE (Status))
2365ff879b07SJung-uk Kim                 {
2366ff879b07SJung-uk Kim                     return;
2367ff879b07SJung-uk Kim                 }
2368ff879b07SJung-uk Kim 
2369ff879b07SJung-uk Kim                 Offset += sizeof (ACPI_HEST_IA_ERROR_BANK);
2370ff879b07SJung-uk Kim                 BankTable++;
2371ff879b07SJung-uk Kim                 BankCount--;
2372ff879b07SJung-uk Kim             }
2373ff879b07SJung-uk Kim         }
2374ff879b07SJung-uk Kim 
2375ff879b07SJung-uk Kim         /* Point to next subtable */
2376ff879b07SJung-uk Kim 
2377ff879b07SJung-uk Kim         Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Subtable, SubtableLength);
2378ff879b07SJung-uk Kim     }
2379ff879b07SJung-uk Kim }
2380ff879b07SJung-uk Kim 
2381ff879b07SJung-uk Kim 
2382ff879b07SJung-uk Kim /*******************************************************************************
2383ff879b07SJung-uk Kim  *
2384ff879b07SJung-uk Kim  * FUNCTION:    AcpiDmDumpHmat
2385ff879b07SJung-uk Kim  *
2386ff879b07SJung-uk Kim  * PARAMETERS:  Table               - A HMAT table
2387ff879b07SJung-uk Kim  *
2388ff879b07SJung-uk Kim  * RETURN:      None
2389ff879b07SJung-uk Kim  *
2390ff879b07SJung-uk Kim  * DESCRIPTION: Format the contents of a HMAT.
2391ff879b07SJung-uk Kim  *
2392ff879b07SJung-uk Kim  ******************************************************************************/
2393ff879b07SJung-uk Kim 
2394ff879b07SJung-uk Kim void
AcpiDmDumpHmat(ACPI_TABLE_HEADER * Table)2395ff879b07SJung-uk Kim AcpiDmDumpHmat (
2396ff879b07SJung-uk Kim     ACPI_TABLE_HEADER       *Table)
2397ff879b07SJung-uk Kim {
2398ff879b07SJung-uk Kim     ACPI_STATUS             Status;
2399ff879b07SJung-uk Kim     ACPI_HMAT_STRUCTURE     *HmatStruct;
2400ff879b07SJung-uk Kim     ACPI_HMAT_LOCALITY      *HmatLocality;
2401ff879b07SJung-uk Kim     ACPI_HMAT_CACHE         *HmatCache;
2402ff879b07SJung-uk Kim     UINT32                  Offset;
2403ff879b07SJung-uk Kim     UINT32                  SubtableOffset;
2404ff879b07SJung-uk Kim     UINT32                  Length;
2405ff879b07SJung-uk Kim     ACPI_DMTABLE_INFO       *InfoTable;
2406ff879b07SJung-uk Kim     UINT32                  i, j;
2407ff879b07SJung-uk Kim 
2408ff879b07SJung-uk Kim 
2409ff879b07SJung-uk Kim     /* Main table */
2410ff879b07SJung-uk Kim 
2411ff879b07SJung-uk Kim     Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoHmat);
2412ff879b07SJung-uk Kim     if (ACPI_FAILURE (Status))
2413ff879b07SJung-uk Kim     {
2414ff879b07SJung-uk Kim         return;
2415ff879b07SJung-uk Kim     }
2416ff879b07SJung-uk Kim     Offset = sizeof (ACPI_TABLE_HMAT);
2417ff879b07SJung-uk Kim 
2418ff879b07SJung-uk Kim     while (Offset < Table->Length)
2419ff879b07SJung-uk Kim     {
2420ff879b07SJung-uk Kim         AcpiOsPrintf ("\n");
2421ff879b07SJung-uk Kim 
2422ff879b07SJung-uk Kim         /* Dump HMAT structure header */
2423ff879b07SJung-uk Kim 
2424ff879b07SJung-uk Kim         HmatStruct = ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, Table, Offset);
2425ff879b07SJung-uk Kim         if (HmatStruct->Length < sizeof (ACPI_HMAT_STRUCTURE))
2426ff879b07SJung-uk Kim         {
2427ff879b07SJung-uk Kim             AcpiOsPrintf ("Invalid HMAT structure length\n");
2428ff879b07SJung-uk Kim             return;
2429ff879b07SJung-uk Kim         }
2430ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct,
2431ff879b07SJung-uk Kim             HmatStruct->Length, AcpiDmTableInfoHmatHdr);
2432ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
2433ff879b07SJung-uk Kim         {
2434ff879b07SJung-uk Kim             return;
2435ff879b07SJung-uk Kim         }
2436ff879b07SJung-uk Kim 
2437ff879b07SJung-uk Kim         switch (HmatStruct->Type)
2438ff879b07SJung-uk Kim         {
2439ff879b07SJung-uk Kim         case ACPI_HMAT_TYPE_ADDRESS_RANGE:
2440ff879b07SJung-uk Kim 
2441ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoHmat0;
2442cd6518c7SJung-uk Kim             Length = sizeof (ACPI_HMAT_PROXIMITY_DOMAIN);
2443ff879b07SJung-uk Kim             break;
2444ff879b07SJung-uk Kim 
2445ff879b07SJung-uk Kim         case ACPI_HMAT_TYPE_LOCALITY:
2446ff879b07SJung-uk Kim 
2447ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoHmat1;
2448ff879b07SJung-uk Kim             Length = sizeof (ACPI_HMAT_LOCALITY);
2449ff879b07SJung-uk Kim             break;
2450ff879b07SJung-uk Kim 
2451ff879b07SJung-uk Kim         case ACPI_HMAT_TYPE_CACHE:
2452ff879b07SJung-uk Kim 
2453ff879b07SJung-uk Kim             InfoTable = AcpiDmTableInfoHmat2;
2454ff879b07SJung-uk Kim             Length = sizeof (ACPI_HMAT_CACHE);
2455ff879b07SJung-uk Kim             break;
2456ff879b07SJung-uk Kim 
2457ff879b07SJung-uk Kim         default:
2458ff879b07SJung-uk Kim 
2459ff879b07SJung-uk Kim             AcpiOsPrintf ("\n**** Unknown HMAT structure type 0x%X\n",
2460ff879b07SJung-uk Kim                 HmatStruct->Type);
2461ff879b07SJung-uk Kim 
2462ff879b07SJung-uk Kim             /* Attempt to continue */
2463ff879b07SJung-uk Kim 
2464ff879b07SJung-uk Kim             goto NextSubtable;
2465ff879b07SJung-uk Kim         }
2466ff879b07SJung-uk Kim 
2467ff879b07SJung-uk Kim         /* Dump HMAT structure body */
2468ff879b07SJung-uk Kim 
2469ff879b07SJung-uk Kim         if (HmatStruct->Length < Length)
2470ff879b07SJung-uk Kim         {
2471ff879b07SJung-uk Kim             AcpiOsPrintf ("Invalid HMAT structure length\n");
2472ff879b07SJung-uk Kim             return;
2473ff879b07SJung-uk Kim         }
2474ff879b07SJung-uk Kim         Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct,
2475ff879b07SJung-uk Kim             HmatStruct->Length, InfoTable);
2476ff879b07SJung-uk Kim         if (ACPI_FAILURE (Status))
2477ff879b07SJung-uk Kim         {
2478ff879b07SJung-uk Kim             return;
2479ff879b07SJung-uk Kim         }
2480ff879b07SJung-uk Kim 
2481722b1667SJung-uk Kim         /* Dump HMAT structure additional */
2482ff879b07SJung-uk Kim 
2483ff879b07SJung-uk Kim         switch (HmatStruct->Type)
2484ff879b07SJung-uk Kim         {
2485ff879b07SJung-uk Kim         case ACPI_HMAT_TYPE_LOCALITY:
2486ff879b07SJung-uk Kim 
2487ff879b07SJung-uk Kim             HmatLocality = ACPI_CAST_PTR (ACPI_HMAT_LOCALITY, HmatStruct);
2488ff879b07SJung-uk Kim             SubtableOffset = sizeof (ACPI_HMAT_LOCALITY);
2489ff879b07SJung-uk Kim 
2490ff879b07SJung-uk Kim             /* Dump initiator proximity domains */
2491ff879b07SJung-uk Kim 
2492ff879b07SJung-uk Kim             if ((UINT32)(HmatStruct->Length - SubtableOffset) <
2493ff879b07SJung-uk Kim                 (UINT32)(HmatLocality->NumberOfInitiatorPDs * 4))
2494ff879b07SJung-uk Kim             {
2495ff879b07SJung-uk Kim                 AcpiOsPrintf ("Invalid initiator proximity domain number\n");
2496ff879b07SJung-uk Kim                 return;
2497ff879b07SJung-uk Kim             }
2498ff879b07SJung-uk Kim             for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++)
2499ff879b07SJung-uk Kim             {
2500ff879b07SJung-uk Kim                 Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
2501ff879b07SJung-uk Kim                     ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
2502ff879b07SJung-uk Kim                     4, AcpiDmTableInfoHmat1a);
2503a009b7dcSJung-uk Kim                 if (ACPI_FAILURE (Status))
2504a009b7dcSJung-uk Kim                 {
2505a009b7dcSJung-uk Kim                     return;
2506a009b7dcSJung-uk Kim                 }
2507a009b7dcSJung-uk Kim 
2508ff879b07SJung-uk Kim                 SubtableOffset += 4;
2509ff879b07SJung-uk Kim             }
2510ff879b07SJung-uk Kim 
2511ff879b07SJung-uk Kim             /* Dump target proximity domains */
2512ff879b07SJung-uk Kim 
2513ff879b07SJung-uk Kim             if ((UINT32)(HmatStruct->Length - SubtableOffset) <
2514ff879b07SJung-uk Kim                 (UINT32)(HmatLocality->NumberOfTargetPDs * 4))
2515ff879b07SJung-uk Kim             {
2516ff879b07SJung-uk Kim                 AcpiOsPrintf ("Invalid target proximity domain number\n");
2517ff879b07SJung-uk Kim                 return;
2518ff879b07SJung-uk Kim             }
2519ff879b07SJung-uk Kim             for (i = 0; i < HmatLocality->NumberOfTargetPDs; i++)
2520ff879b07SJung-uk Kim             {
2521ff879b07SJung-uk Kim                 Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
2522ff879b07SJung-uk Kim                     ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
2523ff879b07SJung-uk Kim                     4, AcpiDmTableInfoHmat1b);
2524a009b7dcSJung-uk Kim                 if (ACPI_FAILURE (Status))
2525a009b7dcSJung-uk Kim                 {
2526a009b7dcSJung-uk Kim                     return;
2527a009b7dcSJung-uk Kim                 }
2528a009b7dcSJung-uk Kim 
2529ff879b07SJung-uk Kim                 SubtableOffset += 4;
2530ff879b07SJung-uk Kim             }
2531ff879b07SJung-uk Kim 
2532ff879b07SJung-uk Kim             /* Dump latency/bandwidth entris */
2533ff879b07SJung-uk Kim 
2534ff879b07SJung-uk Kim             if ((UINT32)(HmatStruct->Length - SubtableOffset) <
2535ff879b07SJung-uk Kim                 (UINT32)(HmatLocality->NumberOfInitiatorPDs *
2536ff879b07SJung-uk Kim                          HmatLocality->NumberOfTargetPDs * 2))
2537ff879b07SJung-uk Kim             {
2538ff879b07SJung-uk Kim                 AcpiOsPrintf ("Invalid latency/bandwidth entry number\n");
2539ff879b07SJung-uk Kim                 return;
2540ff879b07SJung-uk Kim             }
2541ff879b07SJung-uk Kim             for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++)
2542ff879b07SJung-uk Kim             {
2543ff879b07SJung-uk Kim                 for (j = 0; j < HmatLocality->NumberOfTargetPDs; j++)
2544ff879b07SJung-uk Kim                 {
2545ff879b07SJung-uk Kim                     Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
2546ff879b07SJung-uk Kim                         ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
2547ff879b07SJung-uk Kim                         2, AcpiDmTableInfoHmat1c);
2548a009b7dcSJung-uk Kim                     if (ACPI_FAILURE(Status))
2549a009b7dcSJung-uk Kim                     {
2550a009b7dcSJung-uk Kim                         return;
2551a009b7dcSJung-uk Kim                     }
2552a009b7dcSJung-uk Kim 
2553ff879b07SJung-uk Kim                     SubtableOffset += 2;
2554ff879b07SJung-uk Kim                 }
2555ff879b07SJung-uk Kim             }
2556ff879b07SJung-uk Kim             break;
2557ff879b07SJung-uk Kim 
2558ff879b07SJung-uk Kim         case ACPI_HMAT_TYPE_CACHE:
2559ff879b07SJung-uk Kim 
2560ff879b07SJung-uk Kim             HmatCache = ACPI_CAST_PTR (ACPI_HMAT_CACHE, HmatStruct);
2561ff879b07SJung-uk Kim             SubtableOffset = sizeof (ACPI_HMAT_CACHE);
2562ff879b07SJung-uk Kim 
2563ff879b07SJung-uk Kim             /* Dump SMBIOS handles */
2564ff879b07SJung-uk Kim 
2565ff879b07SJung-uk Kim             if ((UINT32)(HmatStruct->Length - SubtableOffset) <
2566ff879b07SJung-uk Kim                 (UINT32)(HmatCache->NumberOfSMBIOSHandles * 2))
2567ff879b07SJung-uk Kim             {
2568ff879b07SJung-uk Kim                 AcpiOsPrintf ("Invalid SMBIOS handle number\n");
2569ff879b07SJung-uk Kim                 return;
2570ff879b07SJung-uk Kim             }
2571ff879b07SJung-uk Kim             for (i = 0; i < HmatCache->NumberOfSMBIOSHandles; i++)
2572ff879b07SJung-uk Kim             {
2573ff879b07SJung-uk Kim                 Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
2574ff879b07SJung-uk Kim                     ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
2575ff879b07SJung-uk Kim                     2, AcpiDmTableInfoHmat2a);
2576a009b7dcSJung-uk Kim                 if (ACPI_FAILURE (Status))
2577a009b7dcSJung-uk Kim                 {
2578a009b7dcSJung-uk Kim                     return;
2579a009b7dcSJung-uk Kim                 }
2580a009b7dcSJung-uk Kim 
2581ff879b07SJung-uk Kim                 SubtableOffset += 2;
2582ff879b07SJung-uk Kim             }
2583ff879b07SJung-uk Kim             break;
2584ff879b07SJung-uk Kim 
2585ff879b07SJung-uk Kim         default:
2586ff879b07SJung-uk Kim 
2587ff879b07SJung-uk Kim             break;
2588ff879b07SJung-uk Kim         }
2589ff879b07SJung-uk Kim 
2590ff879b07SJung-uk Kim NextSubtable:
2591ff879b07SJung-uk Kim         /* Point to next HMAT structure subtable */
2592ff879b07SJung-uk Kim 
2593ff879b07SJung-uk Kim         Offset += (HmatStruct->Length);
2594ff879b07SJung-uk Kim     }
2595ff879b07SJung-uk Kim }
2596