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