17bcb6cafSSascha Wildner /******************************************************************************
27bcb6cafSSascha Wildner *
37bcb6cafSSascha Wildner * Module Name: dmtbdump1 - Dump ACPI data tables that contain no AML code
47bcb6cafSSascha Wildner *
57bcb6cafSSascha Wildner *****************************************************************************/
67bcb6cafSSascha Wildner
77bcb6cafSSascha Wildner /******************************************************************************
87bcb6cafSSascha Wildner *
97bcb6cafSSascha Wildner * 1. Copyright Notice
107bcb6cafSSascha Wildner *
11383048acSSascha Wildner * Some or all of this work - Copyright (c) 1999 - 2021, Intel Corp.
127bcb6cafSSascha Wildner * All rights reserved.
137bcb6cafSSascha Wildner *
147bcb6cafSSascha Wildner * 2. License
157bcb6cafSSascha Wildner *
167bcb6cafSSascha Wildner * 2.1. This is your license from Intel Corp. under its intellectual property
177bcb6cafSSascha Wildner * rights. You may have additional license terms from the party that provided
187bcb6cafSSascha Wildner * you this software, covering your right to use that party's intellectual
197bcb6cafSSascha Wildner * property rights.
207bcb6cafSSascha Wildner *
217bcb6cafSSascha Wildner * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
227bcb6cafSSascha Wildner * copy of the source code appearing in this file ("Covered Code") an
237bcb6cafSSascha Wildner * irrevocable, perpetual, worldwide license under Intel's copyrights in the
247bcb6cafSSascha Wildner * base code distributed originally by Intel ("Original Intel Code") to copy,
257bcb6cafSSascha Wildner * make derivatives, distribute, use and display any portion of the Covered
267bcb6cafSSascha Wildner * Code in any form, with the right to sublicense such rights; and
277bcb6cafSSascha Wildner *
287bcb6cafSSascha Wildner * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
297bcb6cafSSascha Wildner * license (with the right to sublicense), under only those claims of Intel
307bcb6cafSSascha Wildner * patents that are infringed by the Original Intel Code, to make, use, sell,
317bcb6cafSSascha Wildner * offer to sell, and import the Covered Code and derivative works thereof
327bcb6cafSSascha Wildner * solely to the minimum extent necessary to exercise the above copyright
337bcb6cafSSascha Wildner * license, and in no event shall the patent license extend to any additions
347bcb6cafSSascha Wildner * to or modifications of the Original Intel Code. No other license or right
357bcb6cafSSascha Wildner * is granted directly or by implication, estoppel or otherwise;
367bcb6cafSSascha Wildner *
377bcb6cafSSascha Wildner * The above copyright and patent license is granted only if the following
387bcb6cafSSascha Wildner * conditions are met:
397bcb6cafSSascha Wildner *
407bcb6cafSSascha Wildner * 3. Conditions
417bcb6cafSSascha Wildner *
427bcb6cafSSascha Wildner * 3.1. Redistribution of Source with Rights to Further Distribute Source.
437bcb6cafSSascha Wildner * Redistribution of source code of any substantial portion of the Covered
447bcb6cafSSascha Wildner * Code or modification with rights to further distribute source must include
457bcb6cafSSascha Wildner * the above Copyright Notice, the above License, this list of Conditions,
467bcb6cafSSascha Wildner * and the following Disclaimer and Export Compliance provision. In addition,
477bcb6cafSSascha Wildner * Licensee must cause all Covered Code to which Licensee contributes to
487bcb6cafSSascha Wildner * contain a file documenting the changes Licensee made to create that Covered
497bcb6cafSSascha Wildner * Code and the date of any change. Licensee must include in that file the
507bcb6cafSSascha Wildner * documentation of any changes made by any predecessor Licensee. Licensee
517bcb6cafSSascha Wildner * must include a prominent statement that the modification is derived,
527bcb6cafSSascha Wildner * directly or indirectly, from Original Intel Code.
537bcb6cafSSascha Wildner *
547bcb6cafSSascha Wildner * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
557bcb6cafSSascha Wildner * Redistribution of source code of any substantial portion of the Covered
567bcb6cafSSascha Wildner * Code or modification without rights to further distribute source must
577bcb6cafSSascha Wildner * include the following Disclaimer and Export Compliance provision in the
587bcb6cafSSascha Wildner * documentation and/or other materials provided with distribution. In
597bcb6cafSSascha Wildner * addition, Licensee may not authorize further sublicense of source of any
607bcb6cafSSascha Wildner * portion of the Covered Code, and must include terms to the effect that the
617bcb6cafSSascha Wildner * license from Licensee to its licensee is limited to the intellectual
627bcb6cafSSascha Wildner * property embodied in the software Licensee provides to its licensee, and
637bcb6cafSSascha Wildner * not to intellectual property embodied in modifications its licensee may
647bcb6cafSSascha Wildner * make.
657bcb6cafSSascha Wildner *
667bcb6cafSSascha Wildner * 3.3. Redistribution of Executable. Redistribution in executable form of any
677bcb6cafSSascha Wildner * substantial portion of the Covered Code or modification must reproduce the
687bcb6cafSSascha Wildner * above Copyright Notice, and the following Disclaimer and Export Compliance
697bcb6cafSSascha Wildner * provision in the documentation and/or other materials provided with the
707bcb6cafSSascha Wildner * distribution.
717bcb6cafSSascha Wildner *
727bcb6cafSSascha Wildner * 3.4. Intel retains all right, title, and interest in and to the Original
737bcb6cafSSascha Wildner * Intel Code.
747bcb6cafSSascha Wildner *
757bcb6cafSSascha Wildner * 3.5. Neither the name Intel nor any other trademark owned or controlled by
767bcb6cafSSascha Wildner * Intel shall be used in advertising or otherwise to promote the sale, use or
777bcb6cafSSascha Wildner * other dealings in products derived from or relating to the Covered Code
787bcb6cafSSascha Wildner * without prior written authorization from Intel.
797bcb6cafSSascha Wildner *
807bcb6cafSSascha Wildner * 4. Disclaimer and Export Compliance
817bcb6cafSSascha Wildner *
827bcb6cafSSascha Wildner * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
837bcb6cafSSascha Wildner * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
847bcb6cafSSascha Wildner * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
857bcb6cafSSascha Wildner * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
867bcb6cafSSascha Wildner * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
877bcb6cafSSascha Wildner * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
887bcb6cafSSascha Wildner * PARTICULAR PURPOSE.
897bcb6cafSSascha Wildner *
907bcb6cafSSascha Wildner * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
917bcb6cafSSascha Wildner * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
927bcb6cafSSascha Wildner * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
937bcb6cafSSascha Wildner * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
947bcb6cafSSascha Wildner * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
957bcb6cafSSascha Wildner * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
967bcb6cafSSascha Wildner * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
977bcb6cafSSascha Wildner * LIMITED REMEDY.
987bcb6cafSSascha Wildner *
997bcb6cafSSascha Wildner * 4.3. Licensee shall not export, either directly or indirectly, any of this
1007bcb6cafSSascha Wildner * software or system incorporating such software without first obtaining any
1017bcb6cafSSascha Wildner * required license or other approval from the U. S. Department of Commerce or
1027bcb6cafSSascha Wildner * any other agency or department of the United States Government. In the
1037bcb6cafSSascha Wildner * event Licensee exports any such software from the United States or
1047bcb6cafSSascha Wildner * re-exports any such software from a foreign destination, Licensee shall
1057bcb6cafSSascha Wildner * ensure that the distribution and export/re-export of the software is in
1067bcb6cafSSascha Wildner * compliance with all laws, regulations, orders, or other restrictions of the
1077bcb6cafSSascha Wildner * U.S. Export Administration Regulations. Licensee agrees that neither it nor
1087bcb6cafSSascha Wildner * any of its subsidiaries will export/re-export any technical data, process,
1097bcb6cafSSascha Wildner * software, or service, directly or indirectly, to any country for which the
1107bcb6cafSSascha Wildner * United States government or any agency thereof requires an export license,
1117bcb6cafSSascha Wildner * other governmental approval, or letter of assurance, without first obtaining
1127bcb6cafSSascha Wildner * such license, approval or letter.
1137bcb6cafSSascha Wildner *
1147bcb6cafSSascha Wildner *****************************************************************************
1157bcb6cafSSascha Wildner *
1167bcb6cafSSascha Wildner * Alternatively, you may choose to be licensed under the terms of the
1177bcb6cafSSascha Wildner * following license:
1187bcb6cafSSascha Wildner *
1197bcb6cafSSascha Wildner * Redistribution and use in source and binary forms, with or without
1207bcb6cafSSascha Wildner * modification, are permitted provided that the following conditions
1217bcb6cafSSascha Wildner * are met:
1227bcb6cafSSascha Wildner * 1. Redistributions of source code must retain the above copyright
1237bcb6cafSSascha Wildner * notice, this list of conditions, and the following disclaimer,
1247bcb6cafSSascha Wildner * without modification.
1257bcb6cafSSascha Wildner * 2. Redistributions in binary form must reproduce at minimum a disclaimer
1267bcb6cafSSascha Wildner * substantially similar to the "NO WARRANTY" disclaimer below
1277bcb6cafSSascha Wildner * ("Disclaimer") and any redistribution must be conditioned upon
1287bcb6cafSSascha Wildner * including a substantially similar Disclaimer requirement for further
1297bcb6cafSSascha Wildner * binary redistribution.
1307bcb6cafSSascha Wildner * 3. Neither the names of the above-listed copyright holders nor the names
1317bcb6cafSSascha Wildner * of any contributors may be used to endorse or promote products derived
1327bcb6cafSSascha Wildner * from this software without specific prior written permission.
1337bcb6cafSSascha Wildner *
1347bcb6cafSSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1357bcb6cafSSascha Wildner * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1367bcb6cafSSascha Wildner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1377bcb6cafSSascha Wildner * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
1387bcb6cafSSascha Wildner * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1397bcb6cafSSascha Wildner * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
1407bcb6cafSSascha Wildner * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
1417bcb6cafSSascha Wildner * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
1427bcb6cafSSascha Wildner * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
1437bcb6cafSSascha Wildner * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
1447bcb6cafSSascha Wildner * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1457bcb6cafSSascha Wildner *
1467bcb6cafSSascha Wildner * Alternatively, you may choose to be licensed under the terms of the
1477bcb6cafSSascha Wildner * GNU General Public License ("GPL") version 2 as published by the Free
1487bcb6cafSSascha Wildner * Software Foundation.
1497bcb6cafSSascha Wildner *
1507bcb6cafSSascha Wildner *****************************************************************************/
1517bcb6cafSSascha Wildner
1527bcb6cafSSascha Wildner #include "acpi.h"
1537bcb6cafSSascha Wildner #include "accommon.h"
1547bcb6cafSSascha Wildner #include "acdisasm.h"
1557bcb6cafSSascha Wildner #include "actables.h"
1567bcb6cafSSascha Wildner
1577bcb6cafSSascha Wildner /* This module used for application-level code only */
1587bcb6cafSSascha Wildner
1597bcb6cafSSascha Wildner #define _COMPONENT ACPI_CA_DISASSEMBLER
1607bcb6cafSSascha Wildner ACPI_MODULE_NAME ("dmtbdump1")
1617bcb6cafSSascha Wildner
1627bcb6cafSSascha Wildner
1637bcb6cafSSascha Wildner /*******************************************************************************
1647bcb6cafSSascha Wildner *
165*0672a19bSSascha Wildner * FUNCTION: AcpiDmDumpAest
166*0672a19bSSascha Wildner *
167*0672a19bSSascha Wildner * PARAMETERS: Table - A AEST table
168*0672a19bSSascha Wildner *
169*0672a19bSSascha Wildner * RETURN: None
170*0672a19bSSascha Wildner *
171*0672a19bSSascha Wildner * DESCRIPTION: Format the contents of a AEST table
172*0672a19bSSascha Wildner *
173*0672a19bSSascha Wildner * NOTE: Assumes the following table structure:
174*0672a19bSSascha Wildner * For all AEST Error Nodes:
175*0672a19bSSascha Wildner * 1) An AEST Error Node, followed immediately by:
176*0672a19bSSascha Wildner * 2) Any node-specific data
177*0672a19bSSascha Wildner * 3) An Interface Structure (one)
178*0672a19bSSascha Wildner * 4) A list (array) of Interrupt Structures
179*0672a19bSSascha Wildner *
180*0672a19bSSascha Wildner * AEST - ARM Error Source table. Conforms to:
181*0672a19bSSascha Wildner * ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document Sep 2020
182*0672a19bSSascha Wildner *
183*0672a19bSSascha Wildner ******************************************************************************/
184*0672a19bSSascha Wildner
185*0672a19bSSascha Wildner void
AcpiDmDumpAest(ACPI_TABLE_HEADER * Table)186*0672a19bSSascha Wildner AcpiDmDumpAest (
187*0672a19bSSascha Wildner ACPI_TABLE_HEADER *Table)
188*0672a19bSSascha Wildner {
189*0672a19bSSascha Wildner ACPI_STATUS Status;
190*0672a19bSSascha Wildner UINT32 Offset = sizeof (ACPI_TABLE_HEADER);
191*0672a19bSSascha Wildner ACPI_AEST_HEADER *Subtable;
192*0672a19bSSascha Wildner ACPI_AEST_HEADER *NodeHeader;
193*0672a19bSSascha Wildner ACPI_AEST_PROCESSOR *ProcessorSubtable;
194*0672a19bSSascha Wildner ACPI_DMTABLE_INFO *InfoTable;
195*0672a19bSSascha Wildner ACPI_SIZE Length;
196*0672a19bSSascha Wildner UINT8 Type;
197*0672a19bSSascha Wildner
198*0672a19bSSascha Wildner
199*0672a19bSSascha Wildner /* Very small, generic main table. AEST consists of mostly subtables */
200*0672a19bSSascha Wildner
201*0672a19bSSascha Wildner while (Offset < Table->Length)
202*0672a19bSSascha Wildner {
203*0672a19bSSascha Wildner NodeHeader = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
204*0672a19bSSascha Wildner
205*0672a19bSSascha Wildner /* Dump the common error node (subtable) header */
206*0672a19bSSascha Wildner
207*0672a19bSSascha Wildner Status = AcpiDmDumpTable (Table->Length, Offset, NodeHeader,
208*0672a19bSSascha Wildner NodeHeader->Length, AcpiDmTableInfoAestHdr);
209*0672a19bSSascha Wildner if (ACPI_FAILURE (Status))
210*0672a19bSSascha Wildner {
211*0672a19bSSascha Wildner return;
212*0672a19bSSascha Wildner }
213*0672a19bSSascha Wildner
214*0672a19bSSascha Wildner Type = NodeHeader->Type;
215*0672a19bSSascha Wildner
216*0672a19bSSascha Wildner /* Setup the node-specific subtable based on the header Type field */
217*0672a19bSSascha Wildner
218*0672a19bSSascha Wildner switch (Type)
219*0672a19bSSascha Wildner {
220*0672a19bSSascha Wildner case ACPI_AEST_PROCESSOR_ERROR_NODE:
221*0672a19bSSascha Wildner InfoTable = AcpiDmTableInfoAestProcError;
222*0672a19bSSascha Wildner Length = sizeof (ACPI_AEST_PROCESSOR);
223*0672a19bSSascha Wildner break;
224*0672a19bSSascha Wildner
225*0672a19bSSascha Wildner case ACPI_AEST_MEMORY_ERROR_NODE:
226*0672a19bSSascha Wildner InfoTable = AcpiDmTableInfoAestMemError;
227*0672a19bSSascha Wildner Length = sizeof (ACPI_AEST_MEMORY);
228*0672a19bSSascha Wildner break;
229*0672a19bSSascha Wildner
230*0672a19bSSascha Wildner case ACPI_AEST_SMMU_ERROR_NODE:
231*0672a19bSSascha Wildner InfoTable = AcpiDmTableInfoAestSmmuError;
232*0672a19bSSascha Wildner Length = sizeof (ACPI_AEST_SMMU);
233*0672a19bSSascha Wildner break;
234*0672a19bSSascha Wildner
235*0672a19bSSascha Wildner case ACPI_AEST_VENDOR_ERROR_NODE:
236*0672a19bSSascha Wildner InfoTable = AcpiDmTableInfoAestVendorError;
237*0672a19bSSascha Wildner Length = sizeof (ACPI_AEST_VENDOR);
238*0672a19bSSascha Wildner break;
239*0672a19bSSascha Wildner
240*0672a19bSSascha Wildner case ACPI_AEST_GIC_ERROR_NODE:
241*0672a19bSSascha Wildner InfoTable = AcpiDmTableInfoAestGicError;
242*0672a19bSSascha Wildner Length = sizeof (ACPI_AEST_GIC);
243*0672a19bSSascha Wildner break;
244*0672a19bSSascha Wildner
245*0672a19bSSascha Wildner /* Error case below */
246*0672a19bSSascha Wildner default:
247*0672a19bSSascha Wildner
248*0672a19bSSascha Wildner AcpiOsPrintf ("\n**** Unknown AEST Error Subtable type 0x%X\n",
249*0672a19bSSascha Wildner Type);
250*0672a19bSSascha Wildner return;
251*0672a19bSSascha Wildner }
252*0672a19bSSascha Wildner
253*0672a19bSSascha Wildner /* Point past the common header (to the node-specific data) */
254*0672a19bSSascha Wildner
255*0672a19bSSascha Wildner Offset += sizeof (ACPI_AEST_HEADER);
256*0672a19bSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
257*0672a19bSSascha Wildner AcpiOsPrintf ("\n");
258*0672a19bSSascha Wildner
259*0672a19bSSascha Wildner /* Dump the node-specific subtable */
260*0672a19bSSascha Wildner
261*0672a19bSSascha Wildner Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Length,
262*0672a19bSSascha Wildner InfoTable);
263*0672a19bSSascha Wildner if (ACPI_FAILURE (Status))
264*0672a19bSSascha Wildner {
265*0672a19bSSascha Wildner return;
266*0672a19bSSascha Wildner }
267*0672a19bSSascha Wildner AcpiOsPrintf ("\n");
268*0672a19bSSascha Wildner
269*0672a19bSSascha Wildner if (Type == ACPI_AEST_PROCESSOR_ERROR_NODE)
270*0672a19bSSascha Wildner {
271*0672a19bSSascha Wildner /*
272*0672a19bSSascha Wildner * Special handling for PROCESSOR_ERROR_NODE subtables
273*0672a19bSSascha Wildner * (to handle the Resource Substructure via the ResourceType
274*0672a19bSSascha Wildner * field).
275*0672a19bSSascha Wildner */
276*0672a19bSSascha Wildner
277*0672a19bSSascha Wildner /* Point past the node-specific data */
278*0672a19bSSascha Wildner
279*0672a19bSSascha Wildner Offset += Length;
280*0672a19bSSascha Wildner ProcessorSubtable = ACPI_CAST_PTR (ACPI_AEST_PROCESSOR, Subtable);
281*0672a19bSSascha Wildner
282*0672a19bSSascha Wildner switch (ProcessorSubtable->ResourceType)
283*0672a19bSSascha Wildner {
284*0672a19bSSascha Wildner /* Setup the Resource Substructure subtable */
285*0672a19bSSascha Wildner
286*0672a19bSSascha Wildner case ACPI_AEST_CACHE_RESOURCE:
287*0672a19bSSascha Wildner InfoTable = AcpiDmTableInfoAestCacheRsrc;
288*0672a19bSSascha Wildner Length = sizeof (ACPI_AEST_PROCESSOR_CACHE);
289*0672a19bSSascha Wildner break;
290*0672a19bSSascha Wildner
291*0672a19bSSascha Wildner case ACPI_AEST_TLB_RESOURCE:
292*0672a19bSSascha Wildner InfoTable = AcpiDmTableInfoAestTlbRsrc;
293*0672a19bSSascha Wildner Length = sizeof (ACPI_AEST_PROCESSOR_TLB);
294*0672a19bSSascha Wildner break;
295*0672a19bSSascha Wildner
296*0672a19bSSascha Wildner case ACPI_AEST_GENERIC_RESOURCE:
297*0672a19bSSascha Wildner InfoTable = AcpiDmTableInfoAestGenRsrc;
298*0672a19bSSascha Wildner Length = sizeof (ACPI_AEST_PROCESSOR_GENERIC);
299*0672a19bSSascha Wildner break;
300*0672a19bSSascha Wildner
301*0672a19bSSascha Wildner /* Error case below */
302*0672a19bSSascha Wildner default:
303*0672a19bSSascha Wildner AcpiOsPrintf ("\n**** Unknown AEST Processor Resource type 0x%X\n",
304*0672a19bSSascha Wildner ProcessorSubtable->ResourceType);
305*0672a19bSSascha Wildner return;
306*0672a19bSSascha Wildner }
307*0672a19bSSascha Wildner
308*0672a19bSSascha Wildner ProcessorSubtable = ACPI_ADD_PTR (ACPI_AEST_PROCESSOR, Table,
309*0672a19bSSascha Wildner Offset);
310*0672a19bSSascha Wildner
311*0672a19bSSascha Wildner /* Dump the resource substructure subtable */
312*0672a19bSSascha Wildner
313*0672a19bSSascha Wildner Status = AcpiDmDumpTable (Table->Length, Offset, ProcessorSubtable,
314*0672a19bSSascha Wildner Length, InfoTable);
315*0672a19bSSascha Wildner if (ACPI_FAILURE (Status))
316*0672a19bSSascha Wildner {
317*0672a19bSSascha Wildner return;
318*0672a19bSSascha Wildner }
319*0672a19bSSascha Wildner
320*0672a19bSSascha Wildner AcpiOsPrintf ("\n");
321*0672a19bSSascha Wildner }
322*0672a19bSSascha Wildner
323*0672a19bSSascha Wildner /* Point past the resource substructure or the node-specific data */
324*0672a19bSSascha Wildner
325*0672a19bSSascha Wildner Offset += Length;
326*0672a19bSSascha Wildner
327*0672a19bSSascha Wildner /* Dump the interface structure, required to be present */
328*0672a19bSSascha Wildner
329*0672a19bSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
330*0672a19bSSascha Wildner if (Subtable->Type >= ACPI_AEST_XFACE_RESERVED)
331*0672a19bSSascha Wildner {
332*0672a19bSSascha Wildner AcpiOsPrintf ("\n**** Unknown AEST Node Interface type 0x%X\n",
333*0672a19bSSascha Wildner Subtable->Type);
334*0672a19bSSascha Wildner return;
335*0672a19bSSascha Wildner }
336*0672a19bSSascha Wildner
337*0672a19bSSascha Wildner Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
338*0672a19bSSascha Wildner sizeof (ACPI_AEST_NODE_INTERFACE), AcpiDmTableInfoAestXface);
339*0672a19bSSascha Wildner if (ACPI_FAILURE (Status))
340*0672a19bSSascha Wildner {
341*0672a19bSSascha Wildner return;
342*0672a19bSSascha Wildner }
343*0672a19bSSascha Wildner
344*0672a19bSSascha Wildner /* Point past the interface structure */
345*0672a19bSSascha Wildner
346*0672a19bSSascha Wildner AcpiOsPrintf ("\n");
347*0672a19bSSascha Wildner Offset += sizeof (ACPI_AEST_NODE_INTERFACE);
348*0672a19bSSascha Wildner
349*0672a19bSSascha Wildner /* Dump the entire interrupt structure array, if present */
350*0672a19bSSascha Wildner
351*0672a19bSSascha Wildner if (NodeHeader->NodeInterruptOffset)
352*0672a19bSSascha Wildner {
353*0672a19bSSascha Wildner Length = NodeHeader->NodeInterruptCount;
354*0672a19bSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
355*0672a19bSSascha Wildner
356*0672a19bSSascha Wildner while (Length)
357*0672a19bSSascha Wildner {
358*0672a19bSSascha Wildner /* Dump the interrupt structure */
359*0672a19bSSascha Wildner
360*0672a19bSSascha Wildner Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
361*0672a19bSSascha Wildner sizeof (ACPI_AEST_NODE_INTERRUPT),
362*0672a19bSSascha Wildner AcpiDmTableInfoAestXrupt);
363*0672a19bSSascha Wildner if (ACPI_FAILURE (Status))
364*0672a19bSSascha Wildner {
365*0672a19bSSascha Wildner return;
366*0672a19bSSascha Wildner }
367*0672a19bSSascha Wildner
368*0672a19bSSascha Wildner /* Point to the next interrupt structure */
369*0672a19bSSascha Wildner
370*0672a19bSSascha Wildner Offset += sizeof (ACPI_AEST_NODE_INTERRUPT);
371*0672a19bSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
372*0672a19bSSascha Wildner Length--;
373*0672a19bSSascha Wildner AcpiOsPrintf ("\n");
374*0672a19bSSascha Wildner }
375*0672a19bSSascha Wildner }
376*0672a19bSSascha Wildner }
377*0672a19bSSascha Wildner }
378*0672a19bSSascha Wildner
379*0672a19bSSascha Wildner
380*0672a19bSSascha Wildner /*******************************************************************************
381*0672a19bSSascha Wildner *
3827bcb6cafSSascha Wildner * FUNCTION: AcpiDmDumpAsf
3837bcb6cafSSascha Wildner *
3847bcb6cafSSascha Wildner * PARAMETERS: Table - A ASF table
3857bcb6cafSSascha Wildner *
3867bcb6cafSSascha Wildner * RETURN: None
3877bcb6cafSSascha Wildner *
3887bcb6cafSSascha Wildner * DESCRIPTION: Format the contents of a ASF table
3897bcb6cafSSascha Wildner *
3907bcb6cafSSascha Wildner ******************************************************************************/
3917bcb6cafSSascha Wildner
3927bcb6cafSSascha Wildner void
AcpiDmDumpAsf(ACPI_TABLE_HEADER * Table)3937bcb6cafSSascha Wildner AcpiDmDumpAsf (
3947bcb6cafSSascha Wildner ACPI_TABLE_HEADER *Table)
3957bcb6cafSSascha Wildner {
3967bcb6cafSSascha Wildner ACPI_STATUS Status;
3977bcb6cafSSascha Wildner UINT32 Offset = sizeof (ACPI_TABLE_HEADER);
3987bcb6cafSSascha Wildner ACPI_ASF_INFO *Subtable;
3997bcb6cafSSascha Wildner ACPI_DMTABLE_INFO *InfoTable;
4007bcb6cafSSascha Wildner ACPI_DMTABLE_INFO *DataInfoTable = NULL;
4017bcb6cafSSascha Wildner UINT8 *DataTable = NULL;
4027bcb6cafSSascha Wildner UINT32 DataCount = 0;
4037bcb6cafSSascha Wildner UINT32 DataLength = 0;
4047bcb6cafSSascha Wildner UINT32 DataOffset = 0;
4057bcb6cafSSascha Wildner UINT32 i;
4067bcb6cafSSascha Wildner UINT8 Type;
4077bcb6cafSSascha Wildner
4087bcb6cafSSascha Wildner
4097bcb6cafSSascha Wildner /* No main table, only subtables */
4107bcb6cafSSascha Wildner
4117bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset);
4127bcb6cafSSascha Wildner while (Offset < Table->Length)
4137bcb6cafSSascha Wildner {
4147bcb6cafSSascha Wildner /* Common subtable header */
4157bcb6cafSSascha Wildner
4167bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
4177bcb6cafSSascha Wildner Subtable->Header.Length, AcpiDmTableInfoAsfHdr);
4187bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
4197bcb6cafSSascha Wildner {
4207bcb6cafSSascha Wildner return;
4217bcb6cafSSascha Wildner }
4227bcb6cafSSascha Wildner
4237bcb6cafSSascha Wildner /* The actual type is the lower 7 bits of Type */
4247bcb6cafSSascha Wildner
4257bcb6cafSSascha Wildner Type = (UINT8) (Subtable->Header.Type & 0x7F);
4267bcb6cafSSascha Wildner
4277bcb6cafSSascha Wildner switch (Type)
4287bcb6cafSSascha Wildner {
4297bcb6cafSSascha Wildner case ACPI_ASF_TYPE_INFO:
4307bcb6cafSSascha Wildner
4317bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoAsf0;
4327bcb6cafSSascha Wildner break;
4337bcb6cafSSascha Wildner
4347bcb6cafSSascha Wildner case ACPI_ASF_TYPE_ALERT:
4357bcb6cafSSascha Wildner
4367bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoAsf1;
4377bcb6cafSSascha Wildner DataInfoTable = AcpiDmTableInfoAsf1a;
4387bcb6cafSSascha Wildner DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ALERT));
4397bcb6cafSSascha Wildner DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->Alerts;
4407bcb6cafSSascha Wildner DataLength = ACPI_CAST_PTR (ACPI_ASF_ALERT, Subtable)->DataLength;
4417bcb6cafSSascha Wildner DataOffset = Offset + sizeof (ACPI_ASF_ALERT);
4427bcb6cafSSascha Wildner break;
4437bcb6cafSSascha Wildner
4447bcb6cafSSascha Wildner case ACPI_ASF_TYPE_CONTROL:
4457bcb6cafSSascha Wildner
4467bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoAsf2;
4477bcb6cafSSascha Wildner DataInfoTable = AcpiDmTableInfoAsf2a;
4487bcb6cafSSascha Wildner DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_REMOTE));
4497bcb6cafSSascha Wildner DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->Controls;
4507bcb6cafSSascha Wildner DataLength = ACPI_CAST_PTR (ACPI_ASF_REMOTE, Subtable)->DataLength;
4517bcb6cafSSascha Wildner DataOffset = Offset + sizeof (ACPI_ASF_REMOTE);
4527bcb6cafSSascha Wildner break;
4537bcb6cafSSascha Wildner
4547bcb6cafSSascha Wildner case ACPI_ASF_TYPE_BOOT:
4557bcb6cafSSascha Wildner
4567bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoAsf3;
4577bcb6cafSSascha Wildner break;
4587bcb6cafSSascha Wildner
4597bcb6cafSSascha Wildner case ACPI_ASF_TYPE_ADDRESS:
4607bcb6cafSSascha Wildner
4617bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoAsf4;
4627bcb6cafSSascha Wildner DataTable = ACPI_ADD_PTR (UINT8, Subtable, sizeof (ACPI_ASF_ADDRESS));
4637bcb6cafSSascha Wildner DataLength = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, Subtable)->Devices;
4647bcb6cafSSascha Wildner DataOffset = Offset + sizeof (ACPI_ASF_ADDRESS);
4657bcb6cafSSascha Wildner break;
4667bcb6cafSSascha Wildner
4677bcb6cafSSascha Wildner default:
4687bcb6cafSSascha Wildner
4697bcb6cafSSascha Wildner AcpiOsPrintf ("\n**** Unknown ASF subtable type 0x%X\n",
4707bcb6cafSSascha Wildner Subtable->Header.Type);
4717bcb6cafSSascha Wildner return;
4727bcb6cafSSascha Wildner }
4737bcb6cafSSascha Wildner
4747bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
4757bcb6cafSSascha Wildner Subtable->Header.Length, InfoTable);
4767bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
4777bcb6cafSSascha Wildner {
4787bcb6cafSSascha Wildner return;
4797bcb6cafSSascha Wildner }
4807bcb6cafSSascha Wildner
4817bcb6cafSSascha Wildner /* Dump variable-length extra data */
4827bcb6cafSSascha Wildner
4837bcb6cafSSascha Wildner switch (Type)
4847bcb6cafSSascha Wildner {
4857bcb6cafSSascha Wildner case ACPI_ASF_TYPE_ALERT:
4867bcb6cafSSascha Wildner case ACPI_ASF_TYPE_CONTROL:
4877bcb6cafSSascha Wildner
4887bcb6cafSSascha Wildner for (i = 0; i < DataCount; i++)
4897bcb6cafSSascha Wildner {
4907bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
4917bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Table->Length, DataOffset,
4927bcb6cafSSascha Wildner DataTable, DataLength, DataInfoTable);
4937bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
4947bcb6cafSSascha Wildner {
4957bcb6cafSSascha Wildner return;
4967bcb6cafSSascha Wildner }
4977bcb6cafSSascha Wildner
4987bcb6cafSSascha Wildner DataTable = ACPI_ADD_PTR (UINT8, DataTable, DataLength);
4997bcb6cafSSascha Wildner DataOffset += DataLength;
5007bcb6cafSSascha Wildner }
5017bcb6cafSSascha Wildner break;
5027bcb6cafSSascha Wildner
5037bcb6cafSSascha Wildner case ACPI_ASF_TYPE_ADDRESS:
5047bcb6cafSSascha Wildner
5057bcb6cafSSascha Wildner for (i = 0; i < DataLength; i++)
5067bcb6cafSSascha Wildner {
5077bcb6cafSSascha Wildner if (!(i % 16))
5087bcb6cafSSascha Wildner {
5097bcb6cafSSascha Wildner AcpiDmLineHeader (DataOffset, 1, "Addresses");
5107bcb6cafSSascha Wildner }
5117bcb6cafSSascha Wildner
5127bcb6cafSSascha Wildner AcpiOsPrintf ("%2.2X ", *DataTable);
5137bcb6cafSSascha Wildner DataTable++;
5147bcb6cafSSascha Wildner DataOffset++;
5157bcb6cafSSascha Wildner
5167bcb6cafSSascha Wildner if (DataOffset > Table->Length)
5177bcb6cafSSascha Wildner {
5187bcb6cafSSascha Wildner AcpiOsPrintf (
5197bcb6cafSSascha Wildner "**** ACPI table terminates in the middle of a "
5207bcb6cafSSascha Wildner "data structure! (ASF! table)\n");
5217bcb6cafSSascha Wildner return;
5227bcb6cafSSascha Wildner }
5237bcb6cafSSascha Wildner }
5247bcb6cafSSascha Wildner
5257bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
5267bcb6cafSSascha Wildner break;
5277bcb6cafSSascha Wildner
5287bcb6cafSSascha Wildner default:
5297bcb6cafSSascha Wildner
5307bcb6cafSSascha Wildner break;
5317bcb6cafSSascha Wildner }
5327bcb6cafSSascha Wildner
5337bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
5347bcb6cafSSascha Wildner
5357bcb6cafSSascha Wildner /* Point to next subtable */
5367bcb6cafSSascha Wildner
5377bcb6cafSSascha Wildner if (!Subtable->Header.Length)
5387bcb6cafSSascha Wildner {
5397bcb6cafSSascha Wildner AcpiOsPrintf ("Invalid zero subtable header length\n");
5407bcb6cafSSascha Wildner return;
5417bcb6cafSSascha Wildner }
5427bcb6cafSSascha Wildner
5437bcb6cafSSascha Wildner Offset += Subtable->Header.Length;
5447bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Subtable,
5457bcb6cafSSascha Wildner Subtable->Header.Length);
5467bcb6cafSSascha Wildner }
5477bcb6cafSSascha Wildner }
5487bcb6cafSSascha Wildner
54901d5d5dfSSascha Wildner /*******************************************************************************
55001d5d5dfSSascha Wildner *
55101d5d5dfSSascha Wildner * FUNCTION: AcpiDmDumpCedt
55201d5d5dfSSascha Wildner *
55301d5d5dfSSascha Wildner * PARAMETERS: Table - A CEDT table
55401d5d5dfSSascha Wildner *
55501d5d5dfSSascha Wildner * RETURN: None
55601d5d5dfSSascha Wildner *
55701d5d5dfSSascha Wildner * DESCRIPTION: Format the contents of a CEDT. This table type consists
55801d5d5dfSSascha Wildner * of an open-ended number of subtables.
55901d5d5dfSSascha Wildner *
56001d5d5dfSSascha Wildner ******************************************************************************/
56101d5d5dfSSascha Wildner
56201d5d5dfSSascha Wildner void
AcpiDmDumpCedt(ACPI_TABLE_HEADER * Table)56301d5d5dfSSascha Wildner AcpiDmDumpCedt (
56401d5d5dfSSascha Wildner ACPI_TABLE_HEADER *Table)
56501d5d5dfSSascha Wildner {
56601d5d5dfSSascha Wildner ACPI_STATUS Status;
56701d5d5dfSSascha Wildner ACPI_CEDT_HEADER *Subtable;
56801d5d5dfSSascha Wildner UINT32 Length = Table->Length;
56901d5d5dfSSascha Wildner UINT32 Offset = sizeof (ACPI_TABLE_CEDT);
57001d5d5dfSSascha Wildner ACPI_DMTABLE_INFO *InfoTable;
57101d5d5dfSSascha Wildner
57201d5d5dfSSascha Wildner
57301d5d5dfSSascha Wildner /* There is no main table (other than the standard ACPI header) */
57401d5d5dfSSascha Wildner
57501d5d5dfSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_CEDT_HEADER, Table, Offset);
57601d5d5dfSSascha Wildner while (Offset < Table->Length)
57701d5d5dfSSascha Wildner {
57801d5d5dfSSascha Wildner /* Common subtable header */
57901d5d5dfSSascha Wildner
58001d5d5dfSSascha Wildner AcpiOsPrintf ("\n");
58101d5d5dfSSascha Wildner Status = AcpiDmDumpTable (Length, Offset, Subtable,
58201d5d5dfSSascha Wildner Subtable->Length, AcpiDmTableInfoCedtHdr);
58301d5d5dfSSascha Wildner if (ACPI_FAILURE (Status))
58401d5d5dfSSascha Wildner {
58501d5d5dfSSascha Wildner return;
58601d5d5dfSSascha Wildner }
58701d5d5dfSSascha Wildner
58801d5d5dfSSascha Wildner switch (Subtable->Type)
58901d5d5dfSSascha Wildner {
59001d5d5dfSSascha Wildner case ACPI_CEDT_TYPE_CHBS:
59101d5d5dfSSascha Wildner
59201d5d5dfSSascha Wildner InfoTable = AcpiDmTableInfoCedt0;
59301d5d5dfSSascha Wildner break;
59401d5d5dfSSascha Wildner
59501d5d5dfSSascha Wildner default:
59601d5d5dfSSascha Wildner
59701d5d5dfSSascha Wildner AcpiOsPrintf ("\n**** Unknown CEDT subtable type 0x%X\n\n",
59801d5d5dfSSascha Wildner Subtable->Type);
59901d5d5dfSSascha Wildner
60001d5d5dfSSascha Wildner /* Attempt to continue */
60101d5d5dfSSascha Wildner
60201d5d5dfSSascha Wildner if (!Subtable->Length)
60301d5d5dfSSascha Wildner {
60401d5d5dfSSascha Wildner AcpiOsPrintf ("Invalid zero length subtable\n");
60501d5d5dfSSascha Wildner return;
60601d5d5dfSSascha Wildner }
60701d5d5dfSSascha Wildner goto NextSubtable;
60801d5d5dfSSascha Wildner }
60901d5d5dfSSascha Wildner
61001d5d5dfSSascha Wildner Status = AcpiDmDumpTable (Length, Offset, Subtable,
61101d5d5dfSSascha Wildner Subtable->Length, InfoTable);
61201d5d5dfSSascha Wildner if (ACPI_FAILURE (Status))
61301d5d5dfSSascha Wildner {
61401d5d5dfSSascha Wildner return;
61501d5d5dfSSascha Wildner }
61601d5d5dfSSascha Wildner
61701d5d5dfSSascha Wildner NextSubtable:
61801d5d5dfSSascha Wildner /* Point to next subtable */
61901d5d5dfSSascha Wildner
62001d5d5dfSSascha Wildner Offset += Subtable->Length;
62101d5d5dfSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_CEDT_HEADER, Subtable,
62201d5d5dfSSascha Wildner Subtable->Length);
62301d5d5dfSSascha Wildner }
62401d5d5dfSSascha Wildner }
6257bcb6cafSSascha Wildner
6267bcb6cafSSascha Wildner /*******************************************************************************
6277bcb6cafSSascha Wildner *
6287bcb6cafSSascha Wildner * FUNCTION: AcpiDmDumpCpep
6297bcb6cafSSascha Wildner *
6307bcb6cafSSascha Wildner * PARAMETERS: Table - A CPEP table
6317bcb6cafSSascha Wildner *
6327bcb6cafSSascha Wildner * RETURN: None
6337bcb6cafSSascha Wildner *
6347bcb6cafSSascha Wildner * DESCRIPTION: Format the contents of a CPEP. This table type consists
6357bcb6cafSSascha Wildner * of an open-ended number of subtables.
6367bcb6cafSSascha Wildner *
6377bcb6cafSSascha Wildner ******************************************************************************/
6387bcb6cafSSascha Wildner
6397bcb6cafSSascha Wildner void
AcpiDmDumpCpep(ACPI_TABLE_HEADER * Table)6407bcb6cafSSascha Wildner AcpiDmDumpCpep (
6417bcb6cafSSascha Wildner ACPI_TABLE_HEADER *Table)
6427bcb6cafSSascha Wildner {
6437bcb6cafSSascha Wildner ACPI_STATUS Status;
6447bcb6cafSSascha Wildner ACPI_CPEP_POLLING *Subtable;
6457bcb6cafSSascha Wildner UINT32 Length = Table->Length;
6467bcb6cafSSascha Wildner UINT32 Offset = sizeof (ACPI_TABLE_CPEP);
6477bcb6cafSSascha Wildner
6487bcb6cafSSascha Wildner
6497bcb6cafSSascha Wildner /* Main table */
6507bcb6cafSSascha Wildner
6517bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoCpep);
6527bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
6537bcb6cafSSascha Wildner {
6547bcb6cafSSascha Wildner return;
6557bcb6cafSSascha Wildner }
6567bcb6cafSSascha Wildner
6577bcb6cafSSascha Wildner /* Subtables */
6587bcb6cafSSascha Wildner
6597bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset);
6607bcb6cafSSascha Wildner while (Offset < Table->Length)
6617bcb6cafSSascha Wildner {
6627bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
6637bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset, Subtable,
6647bcb6cafSSascha Wildner Subtable->Header.Length, AcpiDmTableInfoCpep0);
6657bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
6667bcb6cafSSascha Wildner {
6677bcb6cafSSascha Wildner return;
6687bcb6cafSSascha Wildner }
6697bcb6cafSSascha Wildner
6707bcb6cafSSascha Wildner /* Point to next subtable */
6717bcb6cafSSascha Wildner
6727bcb6cafSSascha Wildner Offset += Subtable->Header.Length;
6737bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Subtable,
6747bcb6cafSSascha Wildner Subtable->Header.Length);
6757bcb6cafSSascha Wildner }
6767bcb6cafSSascha Wildner }
6777bcb6cafSSascha Wildner
6787bcb6cafSSascha Wildner
6797bcb6cafSSascha Wildner /*******************************************************************************
6807bcb6cafSSascha Wildner *
6817bcb6cafSSascha Wildner * FUNCTION: AcpiDmDumpCsrt
6827bcb6cafSSascha Wildner *
6837bcb6cafSSascha Wildner * PARAMETERS: Table - A CSRT table
6847bcb6cafSSascha Wildner *
6857bcb6cafSSascha Wildner * RETURN: None
6867bcb6cafSSascha Wildner *
6877bcb6cafSSascha Wildner * DESCRIPTION: Format the contents of a CSRT. This table type consists
6887bcb6cafSSascha Wildner * of an open-ended number of subtables.
6897bcb6cafSSascha Wildner *
6907bcb6cafSSascha Wildner ******************************************************************************/
6917bcb6cafSSascha Wildner
6927bcb6cafSSascha Wildner void
AcpiDmDumpCsrt(ACPI_TABLE_HEADER * Table)6937bcb6cafSSascha Wildner AcpiDmDumpCsrt (
6947bcb6cafSSascha Wildner ACPI_TABLE_HEADER *Table)
6957bcb6cafSSascha Wildner {
6967bcb6cafSSascha Wildner ACPI_STATUS Status;
6977bcb6cafSSascha Wildner ACPI_CSRT_GROUP *Subtable;
6987bcb6cafSSascha Wildner ACPI_CSRT_SHARED_INFO *SharedInfoTable;
6997bcb6cafSSascha Wildner ACPI_CSRT_DESCRIPTOR *SubSubtable;
7007bcb6cafSSascha Wildner UINT32 Length = Table->Length;
7017bcb6cafSSascha Wildner UINT32 Offset = sizeof (ACPI_TABLE_CSRT);
7027bcb6cafSSascha Wildner UINT32 SubOffset;
7037bcb6cafSSascha Wildner UINT32 SubSubOffset;
7047bcb6cafSSascha Wildner UINT32 InfoLength;
7057bcb6cafSSascha Wildner
7067bcb6cafSSascha Wildner
7077bcb6cafSSascha Wildner /* The main table only contains the ACPI header, thus already handled */
7087bcb6cafSSascha Wildner
7097bcb6cafSSascha Wildner /* Subtables (Resource Groups) */
7107bcb6cafSSascha Wildner
7117bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset);
7127bcb6cafSSascha Wildner while (Offset < Table->Length)
7137bcb6cafSSascha Wildner {
7147bcb6cafSSascha Wildner /* Resource group subtable */
7157bcb6cafSSascha Wildner
7167bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
7177bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset, Subtable,
7187bcb6cafSSascha Wildner Subtable->Length, AcpiDmTableInfoCsrt0);
7197bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
7207bcb6cafSSascha Wildner {
7217bcb6cafSSascha Wildner return;
7227bcb6cafSSascha Wildner }
7237bcb6cafSSascha Wildner
7247bcb6cafSSascha Wildner /* Shared info subtable (One per resource group) */
7257bcb6cafSSascha Wildner
7267bcb6cafSSascha Wildner SubOffset = sizeof (ACPI_CSRT_GROUP);
7277bcb6cafSSascha Wildner SharedInfoTable = ACPI_ADD_PTR (ACPI_CSRT_SHARED_INFO, Table,
7287bcb6cafSSascha Wildner Offset + SubOffset);
7297bcb6cafSSascha Wildner
7307bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
7317bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset + SubOffset, SharedInfoTable,
7327bcb6cafSSascha Wildner sizeof (ACPI_CSRT_SHARED_INFO), AcpiDmTableInfoCsrt1);
7337bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
7347bcb6cafSSascha Wildner {
7357bcb6cafSSascha Wildner return;
7367bcb6cafSSascha Wildner }
7377bcb6cafSSascha Wildner
7387bcb6cafSSascha Wildner SubOffset += Subtable->SharedInfoLength;
7397bcb6cafSSascha Wildner
7407bcb6cafSSascha Wildner /* Sub-Subtables (Resource Descriptors) */
7417bcb6cafSSascha Wildner
7427bcb6cafSSascha Wildner SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table,
7437bcb6cafSSascha Wildner Offset + SubOffset);
7447bcb6cafSSascha Wildner
7457bcb6cafSSascha Wildner while ((SubOffset < Subtable->Length) &&
7467bcb6cafSSascha Wildner ((Offset + SubOffset) < Table->Length))
7477bcb6cafSSascha Wildner {
7487bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
7497bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable,
7507bcb6cafSSascha Wildner SubSubtable->Length, AcpiDmTableInfoCsrt2);
7517bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
7527bcb6cafSSascha Wildner {
7537bcb6cafSSascha Wildner return;
7547bcb6cafSSascha Wildner }
7557bcb6cafSSascha Wildner
7567bcb6cafSSascha Wildner SubSubOffset = sizeof (ACPI_CSRT_DESCRIPTOR);
7577bcb6cafSSascha Wildner
7587bcb6cafSSascha Wildner /* Resource-specific info buffer */
7597bcb6cafSSascha Wildner
7607bcb6cafSSascha Wildner InfoLength = SubSubtable->Length - SubSubOffset;
7617bcb6cafSSascha Wildner if (InfoLength)
7627bcb6cafSSascha Wildner {
7637bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length,
7647bcb6cafSSascha Wildner Offset + SubOffset + SubSubOffset, Table,
7657bcb6cafSSascha Wildner InfoLength, AcpiDmTableInfoCsrt2a);
7667bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
7677bcb6cafSSascha Wildner {
7687bcb6cafSSascha Wildner return;
7697bcb6cafSSascha Wildner }
7707bcb6cafSSascha Wildner }
7717bcb6cafSSascha Wildner
7727bcb6cafSSascha Wildner /* Point to next sub-subtable */
7737bcb6cafSSascha Wildner
7747bcb6cafSSascha Wildner SubOffset += SubSubtable->Length;
7757bcb6cafSSascha Wildner SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubtable,
7767bcb6cafSSascha Wildner SubSubtable->Length);
7777bcb6cafSSascha Wildner }
7787bcb6cafSSascha Wildner
7797bcb6cafSSascha Wildner /* Point to next subtable */
7807bcb6cafSSascha Wildner
7817bcb6cafSSascha Wildner Offset += Subtable->Length;
7827bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable,
7837bcb6cafSSascha Wildner Subtable->Length);
7847bcb6cafSSascha Wildner }
7857bcb6cafSSascha Wildner }
7867bcb6cafSSascha Wildner
7877bcb6cafSSascha Wildner
7887bcb6cafSSascha Wildner /*******************************************************************************
7897bcb6cafSSascha Wildner *
7907bcb6cafSSascha Wildner * FUNCTION: AcpiDmDumpDbg2
7917bcb6cafSSascha Wildner *
7927bcb6cafSSascha Wildner * PARAMETERS: Table - A DBG2 table
7937bcb6cafSSascha Wildner *
7947bcb6cafSSascha Wildner * RETURN: None
7957bcb6cafSSascha Wildner *
7967bcb6cafSSascha Wildner * DESCRIPTION: Format the contents of a DBG2. This table type consists
7977bcb6cafSSascha Wildner * of an open-ended number of subtables.
7987bcb6cafSSascha Wildner *
7997bcb6cafSSascha Wildner ******************************************************************************/
8007bcb6cafSSascha Wildner
8017bcb6cafSSascha Wildner void
AcpiDmDumpDbg2(ACPI_TABLE_HEADER * Table)8027bcb6cafSSascha Wildner AcpiDmDumpDbg2 (
8037bcb6cafSSascha Wildner ACPI_TABLE_HEADER *Table)
8047bcb6cafSSascha Wildner {
8057bcb6cafSSascha Wildner ACPI_STATUS Status;
8067bcb6cafSSascha Wildner ACPI_DBG2_DEVICE *Subtable;
8077bcb6cafSSascha Wildner UINT32 Length = Table->Length;
8087bcb6cafSSascha Wildner UINT32 Offset = sizeof (ACPI_TABLE_DBG2);
8097bcb6cafSSascha Wildner UINT32 i;
8107bcb6cafSSascha Wildner UINT32 ArrayOffset;
8117bcb6cafSSascha Wildner UINT32 AbsoluteOffset;
8127bcb6cafSSascha Wildner UINT8 *Array;
8137bcb6cafSSascha Wildner
8147bcb6cafSSascha Wildner
8157bcb6cafSSascha Wildner /* Main table */
8167bcb6cafSSascha Wildner
8177bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDbg2);
8187bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
8197bcb6cafSSascha Wildner {
8207bcb6cafSSascha Wildner return;
8217bcb6cafSSascha Wildner }
8227bcb6cafSSascha Wildner
8237bcb6cafSSascha Wildner /* Subtables */
8247bcb6cafSSascha Wildner
8257bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset);
8267bcb6cafSSascha Wildner while (Offset < Table->Length)
8277bcb6cafSSascha Wildner {
8287bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
8297bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset, Subtable,
8307bcb6cafSSascha Wildner Subtable->Length, AcpiDmTableInfoDbg2Device);
8317bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
8327bcb6cafSSascha Wildner {
8337bcb6cafSSascha Wildner return;
8347bcb6cafSSascha Wildner }
8357bcb6cafSSascha Wildner
8367bcb6cafSSascha Wildner /* Dump the BaseAddress array */
8377bcb6cafSSascha Wildner
8387bcb6cafSSascha Wildner for (i = 0; i < Subtable->RegisterCount; i++)
8397bcb6cafSSascha Wildner {
8407bcb6cafSSascha Wildner ArrayOffset = Subtable->BaseAddressOffset +
8417bcb6cafSSascha Wildner (sizeof (ACPI_GENERIC_ADDRESS) * i);
8427bcb6cafSSascha Wildner AbsoluteOffset = Offset + ArrayOffset;
8437bcb6cafSSascha Wildner Array = (UINT8 *) Subtable + ArrayOffset;
8447bcb6cafSSascha Wildner
8457bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
8467bcb6cafSSascha Wildner Subtable->Length, AcpiDmTableInfoDbg2Addr);
8477bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
8487bcb6cafSSascha Wildner {
8497bcb6cafSSascha Wildner return;
8507bcb6cafSSascha Wildner }
8517bcb6cafSSascha Wildner }
8527bcb6cafSSascha Wildner
8537bcb6cafSSascha Wildner /* Dump the AddressSize array */
8547bcb6cafSSascha Wildner
8557bcb6cafSSascha Wildner for (i = 0; i < Subtable->RegisterCount; i++)
8567bcb6cafSSascha Wildner {
8577bcb6cafSSascha Wildner ArrayOffset = Subtable->AddressSizeOffset +
8587bcb6cafSSascha Wildner (sizeof (UINT32) * i);
8597bcb6cafSSascha Wildner AbsoluteOffset = Offset + ArrayOffset;
8607bcb6cafSSascha Wildner Array = (UINT8 *) Subtable + ArrayOffset;
8617bcb6cafSSascha Wildner
8627bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
8637bcb6cafSSascha Wildner Subtable->Length, AcpiDmTableInfoDbg2Size);
8647bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
8657bcb6cafSSascha Wildner {
8667bcb6cafSSascha Wildner return;
8677bcb6cafSSascha Wildner }
8687bcb6cafSSascha Wildner }
8697bcb6cafSSascha Wildner
8707bcb6cafSSascha Wildner /* Dump the Namestring (required) */
8717bcb6cafSSascha Wildner
8727bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
8737bcb6cafSSascha Wildner ArrayOffset = Subtable->NamepathOffset;
8747bcb6cafSSascha Wildner AbsoluteOffset = Offset + ArrayOffset;
8757bcb6cafSSascha Wildner Array = (UINT8 *) Subtable + ArrayOffset;
8767bcb6cafSSascha Wildner
8777bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
8787bcb6cafSSascha Wildner Subtable->Length, AcpiDmTableInfoDbg2Name);
8797bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
8807bcb6cafSSascha Wildner {
8817bcb6cafSSascha Wildner return;
8827bcb6cafSSascha Wildner }
8837bcb6cafSSascha Wildner
8847bcb6cafSSascha Wildner /* Dump the OemData (optional) */
8857bcb6cafSSascha Wildner
8867bcb6cafSSascha Wildner if (Subtable->OemDataOffset)
8877bcb6cafSSascha Wildner {
8887bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset,
8897bcb6cafSSascha Wildner Table, Subtable->OemDataLength,
8907bcb6cafSSascha Wildner AcpiDmTableInfoDbg2OemData);
8917bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
8927bcb6cafSSascha Wildner {
8937bcb6cafSSascha Wildner return;
8947bcb6cafSSascha Wildner }
8957bcb6cafSSascha Wildner }
8967bcb6cafSSascha Wildner
8977bcb6cafSSascha Wildner /* Point to next subtable */
8987bcb6cafSSascha Wildner
8997bcb6cafSSascha Wildner Offset += Subtable->Length;
9007bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Subtable,
9017bcb6cafSSascha Wildner Subtable->Length);
9027bcb6cafSSascha Wildner }
9037bcb6cafSSascha Wildner }
9047bcb6cafSSascha Wildner
9057bcb6cafSSascha Wildner
9067bcb6cafSSascha Wildner /*******************************************************************************
9077bcb6cafSSascha Wildner *
9087bcb6cafSSascha Wildner * FUNCTION: AcpiDmDumpDmar
9097bcb6cafSSascha Wildner *
9107bcb6cafSSascha Wildner * PARAMETERS: Table - A DMAR table
9117bcb6cafSSascha Wildner *
9127bcb6cafSSascha Wildner * RETURN: None
9137bcb6cafSSascha Wildner *
9147bcb6cafSSascha Wildner * DESCRIPTION: Format the contents of a DMAR. This table type consists
9157bcb6cafSSascha Wildner * of an open-ended number of subtables.
9167bcb6cafSSascha Wildner *
9177bcb6cafSSascha Wildner ******************************************************************************/
9187bcb6cafSSascha Wildner
9197bcb6cafSSascha Wildner void
AcpiDmDumpDmar(ACPI_TABLE_HEADER * Table)9207bcb6cafSSascha Wildner AcpiDmDumpDmar (
9217bcb6cafSSascha Wildner ACPI_TABLE_HEADER *Table)
9227bcb6cafSSascha Wildner {
9237bcb6cafSSascha Wildner ACPI_STATUS Status;
9247bcb6cafSSascha Wildner ACPI_DMAR_HEADER *Subtable;
9257bcb6cafSSascha Wildner UINT32 Length = Table->Length;
9267bcb6cafSSascha Wildner UINT32 Offset = sizeof (ACPI_TABLE_DMAR);
9277bcb6cafSSascha Wildner ACPI_DMTABLE_INFO *InfoTable;
9287bcb6cafSSascha Wildner ACPI_DMAR_DEVICE_SCOPE *ScopeTable;
9297bcb6cafSSascha Wildner UINT32 ScopeOffset;
9307bcb6cafSSascha Wildner UINT8 *PciPath;
9317bcb6cafSSascha Wildner UINT32 PathOffset;
9327bcb6cafSSascha Wildner
9337bcb6cafSSascha Wildner
9347bcb6cafSSascha Wildner /* Main table */
9357bcb6cafSSascha Wildner
9367bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDmar);
9377bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
9387bcb6cafSSascha Wildner {
9397bcb6cafSSascha Wildner return;
9407bcb6cafSSascha Wildner }
9417bcb6cafSSascha Wildner
9427bcb6cafSSascha Wildner /* Subtables */
9437bcb6cafSSascha Wildner
9447bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset);
9457bcb6cafSSascha Wildner while (Offset < Table->Length)
9467bcb6cafSSascha Wildner {
9477bcb6cafSSascha Wildner /* Common subtable header */
9487bcb6cafSSascha Wildner
9497bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
9507bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset, Subtable,
9517bcb6cafSSascha Wildner Subtable->Length, AcpiDmTableInfoDmarHdr);
9527bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
9537bcb6cafSSascha Wildner {
9547bcb6cafSSascha Wildner return;
9557bcb6cafSSascha Wildner }
9567bcb6cafSSascha Wildner
9577bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
9587bcb6cafSSascha Wildner
9597bcb6cafSSascha Wildner switch (Subtable->Type)
9607bcb6cafSSascha Wildner {
9617bcb6cafSSascha Wildner case ACPI_DMAR_TYPE_HARDWARE_UNIT:
9627bcb6cafSSascha Wildner
9637bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoDmar0;
9647bcb6cafSSascha Wildner ScopeOffset = sizeof (ACPI_DMAR_HARDWARE_UNIT);
9657bcb6cafSSascha Wildner break;
9667bcb6cafSSascha Wildner
9677bcb6cafSSascha Wildner case ACPI_DMAR_TYPE_RESERVED_MEMORY:
9687bcb6cafSSascha Wildner
9697bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoDmar1;
9707bcb6cafSSascha Wildner ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY);
9717bcb6cafSSascha Wildner break;
9727bcb6cafSSascha Wildner
9737bcb6cafSSascha Wildner case ACPI_DMAR_TYPE_ROOT_ATS:
9747bcb6cafSSascha Wildner
9757bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoDmar2;
9767bcb6cafSSascha Wildner ScopeOffset = sizeof (ACPI_DMAR_ATSR);
9777bcb6cafSSascha Wildner break;
9787bcb6cafSSascha Wildner
9797bcb6cafSSascha Wildner case ACPI_DMAR_TYPE_HARDWARE_AFFINITY:
9807bcb6cafSSascha Wildner
9817bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoDmar3;
9827bcb6cafSSascha Wildner ScopeOffset = sizeof (ACPI_DMAR_RHSA);
9837bcb6cafSSascha Wildner break;
9847bcb6cafSSascha Wildner
9857bcb6cafSSascha Wildner case ACPI_DMAR_TYPE_NAMESPACE:
9867bcb6cafSSascha Wildner
9877bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoDmar4;
9887bcb6cafSSascha Wildner ScopeOffset = sizeof (ACPI_DMAR_ANDD);
9897bcb6cafSSascha Wildner break;
9907bcb6cafSSascha Wildner
9917bcb6cafSSascha Wildner default:
9927bcb6cafSSascha Wildner
9937bcb6cafSSascha Wildner AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n",
9947bcb6cafSSascha Wildner Subtable->Type);
9957bcb6cafSSascha Wildner return;
9967bcb6cafSSascha Wildner }
9977bcb6cafSSascha Wildner
9987bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset, Subtable,
9997bcb6cafSSascha Wildner Subtable->Length, InfoTable);
10007bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
10017bcb6cafSSascha Wildner {
10027bcb6cafSSascha Wildner return;
10037bcb6cafSSascha Wildner }
10047bcb6cafSSascha Wildner
10057bcb6cafSSascha Wildner /*
10067bcb6cafSSascha Wildner * Dump the optional device scope entries
10077bcb6cafSSascha Wildner */
10087bcb6cafSSascha Wildner if ((Subtable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
10097bcb6cafSSascha Wildner (Subtable->Type == ACPI_DMAR_TYPE_NAMESPACE))
10107bcb6cafSSascha Wildner {
10117bcb6cafSSascha Wildner /* These types do not support device scopes */
10127bcb6cafSSascha Wildner
10137bcb6cafSSascha Wildner goto NextSubtable;
10147bcb6cafSSascha Wildner }
10157bcb6cafSSascha Wildner
10167bcb6cafSSascha Wildner ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, Subtable, ScopeOffset);
10177bcb6cafSSascha Wildner while (ScopeOffset < Subtable->Length)
10187bcb6cafSSascha Wildner {
10197bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
10207bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable,
10217bcb6cafSSascha Wildner ScopeTable->Length, AcpiDmTableInfoDmarScope);
10227bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
10237bcb6cafSSascha Wildner {
10247bcb6cafSSascha Wildner return;
10257bcb6cafSSascha Wildner }
10267bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
10277bcb6cafSSascha Wildner
10287bcb6cafSSascha Wildner /* Dump the PCI Path entries for this device scope */
10297bcb6cafSSascha Wildner
10307bcb6cafSSascha Wildner PathOffset = sizeof (ACPI_DMAR_DEVICE_SCOPE); /* Path entries start at this offset */
10317bcb6cafSSascha Wildner
10327bcb6cafSSascha Wildner PciPath = ACPI_ADD_PTR (UINT8, ScopeTable,
10337bcb6cafSSascha Wildner sizeof (ACPI_DMAR_DEVICE_SCOPE));
10347bcb6cafSSascha Wildner
10357bcb6cafSSascha Wildner while (PathOffset < ScopeTable->Length)
10367bcb6cafSSascha Wildner {
10377bcb6cafSSascha Wildner AcpiDmLineHeader ((PathOffset + ScopeOffset + Offset), 2,
10387bcb6cafSSascha Wildner "PCI Path");
10397bcb6cafSSascha Wildner AcpiOsPrintf ("%2.2X,%2.2X\n", PciPath[0], PciPath[1]);
10407bcb6cafSSascha Wildner
10417bcb6cafSSascha Wildner /* Point to next PCI Path entry */
10427bcb6cafSSascha Wildner
10437bcb6cafSSascha Wildner PathOffset += 2;
10447bcb6cafSSascha Wildner PciPath += 2;
10457bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
10467bcb6cafSSascha Wildner }
10477bcb6cafSSascha Wildner
10487bcb6cafSSascha Wildner /* Point to next device scope entry */
10497bcb6cafSSascha Wildner
10507bcb6cafSSascha Wildner ScopeOffset += ScopeTable->Length;
10517bcb6cafSSascha Wildner ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE,
10527bcb6cafSSascha Wildner ScopeTable, ScopeTable->Length);
10537bcb6cafSSascha Wildner }
10547bcb6cafSSascha Wildner
10557bcb6cafSSascha Wildner NextSubtable:
10567bcb6cafSSascha Wildner /* Point to next subtable */
10577bcb6cafSSascha Wildner
10587bcb6cafSSascha Wildner Offset += Subtable->Length;
10597bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Subtable,
10607bcb6cafSSascha Wildner Subtable->Length);
10617bcb6cafSSascha Wildner }
10627bcb6cafSSascha Wildner }
10637bcb6cafSSascha Wildner
10647bcb6cafSSascha Wildner
10657bcb6cafSSascha Wildner /*******************************************************************************
10667bcb6cafSSascha Wildner *
10677bcb6cafSSascha Wildner * FUNCTION: AcpiDmDumpDrtm
10687bcb6cafSSascha Wildner *
10697bcb6cafSSascha Wildner * PARAMETERS: Table - A DRTM table
10707bcb6cafSSascha Wildner *
10717bcb6cafSSascha Wildner * RETURN: None
10727bcb6cafSSascha Wildner *
10737bcb6cafSSascha Wildner * DESCRIPTION: Format the contents of a DRTM.
10747bcb6cafSSascha Wildner *
10757bcb6cafSSascha Wildner ******************************************************************************/
10767bcb6cafSSascha Wildner
10777bcb6cafSSascha Wildner void
AcpiDmDumpDrtm(ACPI_TABLE_HEADER * Table)10787bcb6cafSSascha Wildner AcpiDmDumpDrtm (
10797bcb6cafSSascha Wildner ACPI_TABLE_HEADER *Table)
10807bcb6cafSSascha Wildner {
10817bcb6cafSSascha Wildner ACPI_STATUS Status;
10827bcb6cafSSascha Wildner UINT32 Offset;
10837bcb6cafSSascha Wildner ACPI_DRTM_VTABLE_LIST *DrtmVtl;
10847bcb6cafSSascha Wildner ACPI_DRTM_RESOURCE_LIST *DrtmRl;
10857bcb6cafSSascha Wildner ACPI_DRTM_DPS_ID *DrtmDps;
10867bcb6cafSSascha Wildner UINT32 Count;
10877bcb6cafSSascha Wildner
10887bcb6cafSSascha Wildner
10897bcb6cafSSascha Wildner /* Main table */
10907bcb6cafSSascha Wildner
10917bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
10927bcb6cafSSascha Wildner AcpiDmTableInfoDrtm);
10937bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
10947bcb6cafSSascha Wildner {
10957bcb6cafSSascha Wildner return;
10967bcb6cafSSascha Wildner }
10977bcb6cafSSascha Wildner
10987bcb6cafSSascha Wildner Offset = sizeof (ACPI_TABLE_DRTM);
10997bcb6cafSSascha Wildner
11007bcb6cafSSascha Wildner /* Sub-tables */
11017bcb6cafSSascha Wildner
11027bcb6cafSSascha Wildner /* Dump ValidatedTable length */
11037bcb6cafSSascha Wildner
11047bcb6cafSSascha Wildner DrtmVtl = ACPI_ADD_PTR (ACPI_DRTM_VTABLE_LIST, Table, Offset);
11057bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
11067bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Table->Length, Offset,
11077bcb6cafSSascha Wildner DrtmVtl, ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables),
11087bcb6cafSSascha Wildner AcpiDmTableInfoDrtm0);
11097bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
11107bcb6cafSSascha Wildner {
11117bcb6cafSSascha Wildner return;
11127bcb6cafSSascha Wildner }
11137bcb6cafSSascha Wildner
11147bcb6cafSSascha Wildner Offset += ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables);
11157bcb6cafSSascha Wildner
11167bcb6cafSSascha Wildner /* Dump Validated table addresses */
11177bcb6cafSSascha Wildner
11187bcb6cafSSascha Wildner Count = 0;
11197bcb6cafSSascha Wildner while ((Offset < Table->Length) &&
11207bcb6cafSSascha Wildner (DrtmVtl->ValidatedTableCount > Count))
11217bcb6cafSSascha Wildner {
11227bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Table->Length, Offset,
11237bcb6cafSSascha Wildner ACPI_ADD_PTR (void, Table, Offset), sizeof (UINT64),
11247bcb6cafSSascha Wildner AcpiDmTableInfoDrtm0a);
11257bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
11267bcb6cafSSascha Wildner {
11277bcb6cafSSascha Wildner return;
11287bcb6cafSSascha Wildner }
11297bcb6cafSSascha Wildner
11307bcb6cafSSascha Wildner Offset += sizeof (UINT64);
11317bcb6cafSSascha Wildner Count++;
11327bcb6cafSSascha Wildner }
11337bcb6cafSSascha Wildner
11347bcb6cafSSascha Wildner /* Dump ResourceList length */
11357bcb6cafSSascha Wildner
11367bcb6cafSSascha Wildner DrtmRl = ACPI_ADD_PTR (ACPI_DRTM_RESOURCE_LIST, Table, Offset);
11377bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
11387bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Table->Length, Offset,
11397bcb6cafSSascha Wildner DrtmRl, ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources),
11407bcb6cafSSascha Wildner AcpiDmTableInfoDrtm1);
11417bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
11427bcb6cafSSascha Wildner {
11437bcb6cafSSascha Wildner return;
11447bcb6cafSSascha Wildner }
11457bcb6cafSSascha Wildner
11467bcb6cafSSascha Wildner Offset += ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources);
11477bcb6cafSSascha Wildner
11487bcb6cafSSascha Wildner /* Dump the Resource List */
11497bcb6cafSSascha Wildner
11507bcb6cafSSascha Wildner Count = 0;
11517bcb6cafSSascha Wildner while ((Offset < Table->Length) &&
11527bcb6cafSSascha Wildner (DrtmRl->ResourceCount > Count))
11537bcb6cafSSascha Wildner {
11547bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Table->Length, Offset,
11557bcb6cafSSascha Wildner ACPI_ADD_PTR (void, Table, Offset),
11567bcb6cafSSascha Wildner sizeof (ACPI_DRTM_RESOURCE), AcpiDmTableInfoDrtm1a);
11577bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
11587bcb6cafSSascha Wildner {
11597bcb6cafSSascha Wildner return;
11607bcb6cafSSascha Wildner }
11617bcb6cafSSascha Wildner
11627bcb6cafSSascha Wildner Offset += sizeof (ACPI_DRTM_RESOURCE);
11637bcb6cafSSascha Wildner Count++;
11647bcb6cafSSascha Wildner }
11657bcb6cafSSascha Wildner
11667bcb6cafSSascha Wildner /* Dump DPS */
11677bcb6cafSSascha Wildner
11687bcb6cafSSascha Wildner DrtmDps = ACPI_ADD_PTR (ACPI_DRTM_DPS_ID, Table, Offset);
11697bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
11707bcb6cafSSascha Wildner (void) AcpiDmDumpTable (Table->Length, Offset,
11717bcb6cafSSascha Wildner DrtmDps, sizeof (ACPI_DRTM_DPS_ID), AcpiDmTableInfoDrtm2);
11727bcb6cafSSascha Wildner }
11737bcb6cafSSascha Wildner
11747bcb6cafSSascha Wildner
11757bcb6cafSSascha Wildner /*******************************************************************************
11767bcb6cafSSascha Wildner *
11777bcb6cafSSascha Wildner * FUNCTION: AcpiDmDumpEinj
11787bcb6cafSSascha Wildner *
11797bcb6cafSSascha Wildner * PARAMETERS: Table - A EINJ table
11807bcb6cafSSascha Wildner *
11817bcb6cafSSascha Wildner * RETURN: None
11827bcb6cafSSascha Wildner *
11837bcb6cafSSascha Wildner * DESCRIPTION: Format the contents of a EINJ. This table type consists
11847bcb6cafSSascha Wildner * of an open-ended number of subtables.
11857bcb6cafSSascha Wildner *
11867bcb6cafSSascha Wildner ******************************************************************************/
11877bcb6cafSSascha Wildner
11887bcb6cafSSascha Wildner void
AcpiDmDumpEinj(ACPI_TABLE_HEADER * Table)11897bcb6cafSSascha Wildner AcpiDmDumpEinj (
11907bcb6cafSSascha Wildner ACPI_TABLE_HEADER *Table)
11917bcb6cafSSascha Wildner {
11927bcb6cafSSascha Wildner ACPI_STATUS Status;
11937bcb6cafSSascha Wildner ACPI_WHEA_HEADER *Subtable;
11947bcb6cafSSascha Wildner UINT32 Length = Table->Length;
11957bcb6cafSSascha Wildner UINT32 Offset = sizeof (ACPI_TABLE_EINJ);
11967bcb6cafSSascha Wildner
11977bcb6cafSSascha Wildner
11987bcb6cafSSascha Wildner /* Main table */
11997bcb6cafSSascha Wildner
12007bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoEinj);
12017bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
12027bcb6cafSSascha Wildner {
12037bcb6cafSSascha Wildner return;
12047bcb6cafSSascha Wildner }
12057bcb6cafSSascha Wildner
12067bcb6cafSSascha Wildner /* Subtables */
12077bcb6cafSSascha Wildner
12087bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
12097bcb6cafSSascha Wildner while (Offset < Table->Length)
12107bcb6cafSSascha Wildner {
12117bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
12127bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset, Subtable,
12137bcb6cafSSascha Wildner sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoEinj0);
12147bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
12157bcb6cafSSascha Wildner {
12167bcb6cafSSascha Wildner return;
12177bcb6cafSSascha Wildner }
12187bcb6cafSSascha Wildner
12197bcb6cafSSascha Wildner /* Point to next subtable (each subtable is of fixed length) */
12207bcb6cafSSascha Wildner
12217bcb6cafSSascha Wildner Offset += sizeof (ACPI_WHEA_HEADER);
12227bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable,
12237bcb6cafSSascha Wildner sizeof (ACPI_WHEA_HEADER));
12247bcb6cafSSascha Wildner }
12257bcb6cafSSascha Wildner }
12267bcb6cafSSascha Wildner
12277bcb6cafSSascha Wildner
12287bcb6cafSSascha Wildner /*******************************************************************************
12297bcb6cafSSascha Wildner *
12307bcb6cafSSascha Wildner * FUNCTION: AcpiDmDumpErst
12317bcb6cafSSascha Wildner *
12327bcb6cafSSascha Wildner * PARAMETERS: Table - A ERST table
12337bcb6cafSSascha Wildner *
12347bcb6cafSSascha Wildner * RETURN: None
12357bcb6cafSSascha Wildner *
12367bcb6cafSSascha Wildner * DESCRIPTION: Format the contents of a ERST. This table type consists
12377bcb6cafSSascha Wildner * of an open-ended number of subtables.
12387bcb6cafSSascha Wildner *
12397bcb6cafSSascha Wildner ******************************************************************************/
12407bcb6cafSSascha Wildner
12417bcb6cafSSascha Wildner void
AcpiDmDumpErst(ACPI_TABLE_HEADER * Table)12427bcb6cafSSascha Wildner AcpiDmDumpErst (
12437bcb6cafSSascha Wildner ACPI_TABLE_HEADER *Table)
12447bcb6cafSSascha Wildner {
12457bcb6cafSSascha Wildner ACPI_STATUS Status;
12467bcb6cafSSascha Wildner ACPI_WHEA_HEADER *Subtable;
12477bcb6cafSSascha Wildner UINT32 Length = Table->Length;
12487bcb6cafSSascha Wildner UINT32 Offset = sizeof (ACPI_TABLE_ERST);
12497bcb6cafSSascha Wildner
12507bcb6cafSSascha Wildner
12517bcb6cafSSascha Wildner /* Main table */
12527bcb6cafSSascha Wildner
12537bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoErst);
12547bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
12557bcb6cafSSascha Wildner {
12567bcb6cafSSascha Wildner return;
12577bcb6cafSSascha Wildner }
12587bcb6cafSSascha Wildner
12597bcb6cafSSascha Wildner /* Subtables */
12607bcb6cafSSascha Wildner
12617bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
12627bcb6cafSSascha Wildner while (Offset < Table->Length)
12637bcb6cafSSascha Wildner {
12647bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
12657bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset, Subtable,
12667bcb6cafSSascha Wildner sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoErst0);
12677bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
12687bcb6cafSSascha Wildner {
12697bcb6cafSSascha Wildner return;
12707bcb6cafSSascha Wildner }
12717bcb6cafSSascha Wildner
12727bcb6cafSSascha Wildner /* Point to next subtable (each subtable is of fixed length) */
12737bcb6cafSSascha Wildner
12747bcb6cafSSascha Wildner Offset += sizeof (ACPI_WHEA_HEADER);
12757bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Subtable,
12767bcb6cafSSascha Wildner sizeof (ACPI_WHEA_HEADER));
12777bcb6cafSSascha Wildner }
12787bcb6cafSSascha Wildner }
12797bcb6cafSSascha Wildner
12807bcb6cafSSascha Wildner
12817bcb6cafSSascha Wildner /*******************************************************************************
12827bcb6cafSSascha Wildner *
12837bcb6cafSSascha Wildner * FUNCTION: AcpiDmDumpFpdt
12847bcb6cafSSascha Wildner *
12857bcb6cafSSascha Wildner * PARAMETERS: Table - A FPDT table
12867bcb6cafSSascha Wildner *
12877bcb6cafSSascha Wildner * RETURN: None
12887bcb6cafSSascha Wildner *
12897bcb6cafSSascha Wildner * DESCRIPTION: Format the contents of a FPDT. This table type consists
12907bcb6cafSSascha Wildner * of an open-ended number of subtables.
12917bcb6cafSSascha Wildner *
12927bcb6cafSSascha Wildner ******************************************************************************/
12937bcb6cafSSascha Wildner
12947bcb6cafSSascha Wildner void
AcpiDmDumpFpdt(ACPI_TABLE_HEADER * Table)12957bcb6cafSSascha Wildner AcpiDmDumpFpdt (
12967bcb6cafSSascha Wildner ACPI_TABLE_HEADER *Table)
12977bcb6cafSSascha Wildner {
12987bcb6cafSSascha Wildner ACPI_STATUS Status;
12997bcb6cafSSascha Wildner ACPI_FPDT_HEADER *Subtable;
13007bcb6cafSSascha Wildner UINT32 Length = Table->Length;
13017bcb6cafSSascha Wildner UINT32 Offset = sizeof (ACPI_TABLE_FPDT);
13027bcb6cafSSascha Wildner ACPI_DMTABLE_INFO *InfoTable;
13037bcb6cafSSascha Wildner
13047bcb6cafSSascha Wildner
13057bcb6cafSSascha Wildner /* There is no main table (other than the standard ACPI header) */
13067bcb6cafSSascha Wildner
13077bcb6cafSSascha Wildner /* Subtables */
13087bcb6cafSSascha Wildner
13097bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset);
13107bcb6cafSSascha Wildner while (Offset < Table->Length)
13117bcb6cafSSascha Wildner {
13127bcb6cafSSascha Wildner /* Common subtable header */
13137bcb6cafSSascha Wildner
13147bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
13157bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset, Subtable,
13167bcb6cafSSascha Wildner Subtable->Length, AcpiDmTableInfoFpdtHdr);
13177bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
13187bcb6cafSSascha Wildner {
13197bcb6cafSSascha Wildner return;
13207bcb6cafSSascha Wildner }
13217bcb6cafSSascha Wildner
13227bcb6cafSSascha Wildner switch (Subtable->Type)
13237bcb6cafSSascha Wildner {
13247bcb6cafSSascha Wildner case ACPI_FPDT_TYPE_BOOT:
13257bcb6cafSSascha Wildner
13267bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoFpdt0;
13277bcb6cafSSascha Wildner break;
13287bcb6cafSSascha Wildner
13297bcb6cafSSascha Wildner case ACPI_FPDT_TYPE_S3PERF:
13307bcb6cafSSascha Wildner
13317bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoFpdt1;
13327bcb6cafSSascha Wildner break;
13337bcb6cafSSascha Wildner
13347bcb6cafSSascha Wildner default:
13357bcb6cafSSascha Wildner
13367bcb6cafSSascha Wildner AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n",
13377bcb6cafSSascha Wildner Subtable->Type);
13387bcb6cafSSascha Wildner
13397bcb6cafSSascha Wildner /* Attempt to continue */
13407bcb6cafSSascha Wildner
13417bcb6cafSSascha Wildner if (!Subtable->Length)
13427bcb6cafSSascha Wildner {
13437bcb6cafSSascha Wildner AcpiOsPrintf ("Invalid zero length subtable\n");
13447bcb6cafSSascha Wildner return;
13457bcb6cafSSascha Wildner }
13467bcb6cafSSascha Wildner goto NextSubtable;
13477bcb6cafSSascha Wildner }
13487bcb6cafSSascha Wildner
13497bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset, Subtable,
13507bcb6cafSSascha Wildner Subtable->Length, InfoTable);
13517bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
13527bcb6cafSSascha Wildner {
13537bcb6cafSSascha Wildner return;
13547bcb6cafSSascha Wildner }
13557bcb6cafSSascha Wildner
13567bcb6cafSSascha Wildner NextSubtable:
13577bcb6cafSSascha Wildner /* Point to next subtable */
13587bcb6cafSSascha Wildner
13597bcb6cafSSascha Wildner Offset += Subtable->Length;
13607bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable,
13617bcb6cafSSascha Wildner Subtable->Length);
13627bcb6cafSSascha Wildner }
13637bcb6cafSSascha Wildner }
13647bcb6cafSSascha Wildner
13657bcb6cafSSascha Wildner
13667bcb6cafSSascha Wildner /*******************************************************************************
13677bcb6cafSSascha Wildner *
13687bcb6cafSSascha Wildner * FUNCTION: AcpiDmDumpGtdt
13697bcb6cafSSascha Wildner *
13707bcb6cafSSascha Wildner * PARAMETERS: Table - A GTDT table
13717bcb6cafSSascha Wildner *
13727bcb6cafSSascha Wildner * RETURN: None
13737bcb6cafSSascha Wildner *
13747bcb6cafSSascha Wildner * DESCRIPTION: Format the contents of a GTDT. This table type consists
13757bcb6cafSSascha Wildner * of an open-ended number of subtables.
13767bcb6cafSSascha Wildner *
13777bcb6cafSSascha Wildner ******************************************************************************/
13787bcb6cafSSascha Wildner
13797bcb6cafSSascha Wildner void
AcpiDmDumpGtdt(ACPI_TABLE_HEADER * Table)13807bcb6cafSSascha Wildner AcpiDmDumpGtdt (
13817bcb6cafSSascha Wildner ACPI_TABLE_HEADER *Table)
13827bcb6cafSSascha Wildner {
13837bcb6cafSSascha Wildner ACPI_STATUS Status;
13847bcb6cafSSascha Wildner ACPI_GTDT_HEADER *Subtable;
13857bcb6cafSSascha Wildner UINT32 Length = Table->Length;
13867bcb6cafSSascha Wildner UINT32 Offset = sizeof (ACPI_TABLE_GTDT);
13877bcb6cafSSascha Wildner ACPI_DMTABLE_INFO *InfoTable;
13887bcb6cafSSascha Wildner UINT32 SubtableLength;
13897bcb6cafSSascha Wildner UINT32 GtCount;
13907bcb6cafSSascha Wildner ACPI_GTDT_TIMER_ENTRY *GtxTable;
13917bcb6cafSSascha Wildner
13927bcb6cafSSascha Wildner
13937bcb6cafSSascha Wildner /* Main table */
13947bcb6cafSSascha Wildner
13957bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt);
13967bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
13977bcb6cafSSascha Wildner {
13987bcb6cafSSascha Wildner return;
13997bcb6cafSSascha Wildner }
14007bcb6cafSSascha Wildner
140100ffa116SSascha Wildner /* Rev 3 fields */
14027bcb6cafSSascha Wildner
14037bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset);
140400ffa116SSascha Wildner
140500ffa116SSascha Wildner if (Table->Revision > 2)
140600ffa116SSascha Wildner {
140700ffa116SSascha Wildner SubtableLength = sizeof (ACPI_GTDT_EL2);
140800ffa116SSascha Wildner Status = AcpiDmDumpTable (Length, Offset, Subtable,
140900ffa116SSascha Wildner SubtableLength, AcpiDmTableInfoGtdtEl2);
141000ffa116SSascha Wildner if (ACPI_FAILURE (Status))
141100ffa116SSascha Wildner {
141200ffa116SSascha Wildner return;
141300ffa116SSascha Wildner }
141400ffa116SSascha Wildner Offset += SubtableLength;
141500ffa116SSascha Wildner }
141600ffa116SSascha Wildner
141700ffa116SSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset);
141800ffa116SSascha Wildner
141900ffa116SSascha Wildner /* Subtables */
142000ffa116SSascha Wildner
14217bcb6cafSSascha Wildner while (Offset < Table->Length)
14227bcb6cafSSascha Wildner {
14237bcb6cafSSascha Wildner /* Common subtable header */
14247bcb6cafSSascha Wildner
14257bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
14267bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset, Subtable,
14277bcb6cafSSascha Wildner Subtable->Length, AcpiDmTableInfoGtdtHdr);
14287bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
14297bcb6cafSSascha Wildner {
14307bcb6cafSSascha Wildner return;
14317bcb6cafSSascha Wildner }
14327bcb6cafSSascha Wildner
14337bcb6cafSSascha Wildner GtCount = 0;
14347bcb6cafSSascha Wildner switch (Subtable->Type)
14357bcb6cafSSascha Wildner {
14367bcb6cafSSascha Wildner case ACPI_GTDT_TYPE_TIMER_BLOCK:
14377bcb6cafSSascha Wildner
14387bcb6cafSSascha Wildner SubtableLength = sizeof (ACPI_GTDT_TIMER_BLOCK);
14397bcb6cafSSascha Wildner GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
14407bcb6cafSSascha Wildner Subtable))->TimerCount;
14417bcb6cafSSascha Wildner
14427bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoGtdt0;
14437bcb6cafSSascha Wildner break;
14447bcb6cafSSascha Wildner
14457bcb6cafSSascha Wildner case ACPI_GTDT_TYPE_WATCHDOG:
14467bcb6cafSSascha Wildner
14477bcb6cafSSascha Wildner SubtableLength = sizeof (ACPI_GTDT_WATCHDOG);
14487bcb6cafSSascha Wildner
14497bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoGtdt1;
14507bcb6cafSSascha Wildner break;
14517bcb6cafSSascha Wildner
14527bcb6cafSSascha Wildner default:
14537bcb6cafSSascha Wildner
14547bcb6cafSSascha Wildner /* Cannot continue on unknown type - no length */
14557bcb6cafSSascha Wildner
14567bcb6cafSSascha Wildner AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n",
14577bcb6cafSSascha Wildner Subtable->Type);
14587bcb6cafSSascha Wildner return;
14597bcb6cafSSascha Wildner }
14607bcb6cafSSascha Wildner
14617bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset, Subtable,
14627bcb6cafSSascha Wildner Subtable->Length, InfoTable);
14637bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
14647bcb6cafSSascha Wildner {
14657bcb6cafSSascha Wildner return;
14667bcb6cafSSascha Wildner }
14677bcb6cafSSascha Wildner
14687bcb6cafSSascha Wildner /* Point to end of current subtable (each subtable above is of fixed length) */
14697bcb6cafSSascha Wildner
14707bcb6cafSSascha Wildner Offset += SubtableLength;
14717bcb6cafSSascha Wildner
14727bcb6cafSSascha Wildner /* If there are any Gt Timer Blocks from above, dump them now */
14737bcb6cafSSascha Wildner
14747bcb6cafSSascha Wildner if (GtCount)
14757bcb6cafSSascha Wildner {
14767bcb6cafSSascha Wildner GtxTable = ACPI_ADD_PTR (
14777bcb6cafSSascha Wildner ACPI_GTDT_TIMER_ENTRY, Subtable, SubtableLength);
14787bcb6cafSSascha Wildner SubtableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY);
14797bcb6cafSSascha Wildner
14807bcb6cafSSascha Wildner while (GtCount)
14817bcb6cafSSascha Wildner {
14827bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
14837bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset, GtxTable,
14847bcb6cafSSascha Wildner sizeof (ACPI_GTDT_TIMER_ENTRY), AcpiDmTableInfoGtdt0a);
14857bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
14867bcb6cafSSascha Wildner {
14877bcb6cafSSascha Wildner return;
14887bcb6cafSSascha Wildner }
14897bcb6cafSSascha Wildner Offset += sizeof (ACPI_GTDT_TIMER_ENTRY);
14907bcb6cafSSascha Wildner GtxTable++;
14917bcb6cafSSascha Wildner GtCount--;
14927bcb6cafSSascha Wildner }
14937bcb6cafSSascha Wildner }
14947bcb6cafSSascha Wildner
14957bcb6cafSSascha Wildner /* Point to next subtable */
14967bcb6cafSSascha Wildner
14977bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Subtable, SubtableLength);
14987bcb6cafSSascha Wildner }
14997bcb6cafSSascha Wildner }
15007bcb6cafSSascha Wildner
15017bcb6cafSSascha Wildner
15027bcb6cafSSascha Wildner /*******************************************************************************
15037bcb6cafSSascha Wildner *
15047bcb6cafSSascha Wildner * FUNCTION: AcpiDmDumpHest
15057bcb6cafSSascha Wildner *
15067bcb6cafSSascha Wildner * PARAMETERS: Table - A HEST table
15077bcb6cafSSascha Wildner *
15087bcb6cafSSascha Wildner * RETURN: None
15097bcb6cafSSascha Wildner *
15107bcb6cafSSascha Wildner * DESCRIPTION: Format the contents of a HEST. This table type consists
15117bcb6cafSSascha Wildner * of an open-ended number of subtables.
15127bcb6cafSSascha Wildner *
15137bcb6cafSSascha Wildner ******************************************************************************/
15147bcb6cafSSascha Wildner
15157bcb6cafSSascha Wildner void
AcpiDmDumpHest(ACPI_TABLE_HEADER * Table)15167bcb6cafSSascha Wildner AcpiDmDumpHest (
15177bcb6cafSSascha Wildner ACPI_TABLE_HEADER *Table)
15187bcb6cafSSascha Wildner {
15197bcb6cafSSascha Wildner ACPI_STATUS Status;
15207bcb6cafSSascha Wildner ACPI_HEST_HEADER *Subtable;
15217bcb6cafSSascha Wildner UINT32 Length = Table->Length;
15227bcb6cafSSascha Wildner UINT32 Offset = sizeof (ACPI_TABLE_HEST);
15237bcb6cafSSascha Wildner ACPI_DMTABLE_INFO *InfoTable;
15247bcb6cafSSascha Wildner UINT32 SubtableLength;
15257bcb6cafSSascha Wildner UINT32 BankCount;
15267bcb6cafSSascha Wildner ACPI_HEST_IA_ERROR_BANK *BankTable;
15277bcb6cafSSascha Wildner
15287bcb6cafSSascha Wildner
15297bcb6cafSSascha Wildner /* Main table */
15307bcb6cafSSascha Wildner
15317bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHest);
15327bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
15337bcb6cafSSascha Wildner {
15347bcb6cafSSascha Wildner return;
15357bcb6cafSSascha Wildner }
15367bcb6cafSSascha Wildner
15377bcb6cafSSascha Wildner /* Subtables */
15387bcb6cafSSascha Wildner
15397bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset);
15407bcb6cafSSascha Wildner while (Offset < Table->Length)
15417bcb6cafSSascha Wildner {
15427bcb6cafSSascha Wildner BankCount = 0;
15437bcb6cafSSascha Wildner switch (Subtable->Type)
15447bcb6cafSSascha Wildner {
15457bcb6cafSSascha Wildner case ACPI_HEST_TYPE_IA32_CHECK:
15467bcb6cafSSascha Wildner
15477bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoHest0;
15487bcb6cafSSascha Wildner SubtableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK);
15497bcb6cafSSascha Wildner BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK,
15507bcb6cafSSascha Wildner Subtable))->NumHardwareBanks;
15517bcb6cafSSascha Wildner break;
15527bcb6cafSSascha Wildner
15537bcb6cafSSascha Wildner case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK:
15547bcb6cafSSascha Wildner
15557bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoHest1;
15567bcb6cafSSascha Wildner SubtableLength = sizeof (ACPI_HEST_IA_CORRECTED);
15577bcb6cafSSascha Wildner BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED,
15587bcb6cafSSascha Wildner Subtable))->NumHardwareBanks;
15597bcb6cafSSascha Wildner break;
15607bcb6cafSSascha Wildner
15617bcb6cafSSascha Wildner case ACPI_HEST_TYPE_IA32_NMI:
15627bcb6cafSSascha Wildner
15637bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoHest2;
15647bcb6cafSSascha Wildner SubtableLength = sizeof (ACPI_HEST_IA_NMI);
15657bcb6cafSSascha Wildner break;
15667bcb6cafSSascha Wildner
15677bcb6cafSSascha Wildner case ACPI_HEST_TYPE_AER_ROOT_PORT:
15687bcb6cafSSascha Wildner
15697bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoHest6;
15707bcb6cafSSascha Wildner SubtableLength = sizeof (ACPI_HEST_AER_ROOT);
15717bcb6cafSSascha Wildner break;
15727bcb6cafSSascha Wildner
15737bcb6cafSSascha Wildner case ACPI_HEST_TYPE_AER_ENDPOINT:
15747bcb6cafSSascha Wildner
15757bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoHest7;
15767bcb6cafSSascha Wildner SubtableLength = sizeof (ACPI_HEST_AER);
15777bcb6cafSSascha Wildner break;
15787bcb6cafSSascha Wildner
15797bcb6cafSSascha Wildner case ACPI_HEST_TYPE_AER_BRIDGE:
15807bcb6cafSSascha Wildner
15817bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoHest8;
15827bcb6cafSSascha Wildner SubtableLength = sizeof (ACPI_HEST_AER_BRIDGE);
15837bcb6cafSSascha Wildner break;
15847bcb6cafSSascha Wildner
15857bcb6cafSSascha Wildner case ACPI_HEST_TYPE_GENERIC_ERROR:
15867bcb6cafSSascha Wildner
15877bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoHest9;
15887bcb6cafSSascha Wildner SubtableLength = sizeof (ACPI_HEST_GENERIC);
15897bcb6cafSSascha Wildner break;
15907bcb6cafSSascha Wildner
15917bcb6cafSSascha Wildner case ACPI_HEST_TYPE_GENERIC_ERROR_V2:
15927bcb6cafSSascha Wildner
15937bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoHest10;
15947bcb6cafSSascha Wildner SubtableLength = sizeof (ACPI_HEST_GENERIC_V2);
15957bcb6cafSSascha Wildner break;
15967bcb6cafSSascha Wildner
15977bcb6cafSSascha Wildner case ACPI_HEST_TYPE_IA32_DEFERRED_CHECK:
15987bcb6cafSSascha Wildner
15997bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoHest11;
16007bcb6cafSSascha Wildner SubtableLength = sizeof (ACPI_HEST_IA_DEFERRED_CHECK);
16017bcb6cafSSascha Wildner BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_DEFERRED_CHECK,
16027bcb6cafSSascha Wildner Subtable))->NumHardwareBanks;
16037bcb6cafSSascha Wildner break;
16047bcb6cafSSascha Wildner
16057bcb6cafSSascha Wildner default:
16067bcb6cafSSascha Wildner
16077bcb6cafSSascha Wildner /* Cannot continue on unknown type - no length */
16087bcb6cafSSascha Wildner
16097bcb6cafSSascha Wildner AcpiOsPrintf ("\n**** Unknown HEST subtable type 0x%X\n",
16107bcb6cafSSascha Wildner Subtable->Type);
16117bcb6cafSSascha Wildner return;
16127bcb6cafSSascha Wildner }
16137bcb6cafSSascha Wildner
16147bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
16157bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset, Subtable,
16167bcb6cafSSascha Wildner SubtableLength, InfoTable);
16177bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
16187bcb6cafSSascha Wildner {
16197bcb6cafSSascha Wildner return;
16207bcb6cafSSascha Wildner }
16217bcb6cafSSascha Wildner
16227bcb6cafSSascha Wildner /* Point to end of current subtable (each subtable above is of fixed length) */
16237bcb6cafSSascha Wildner
16247bcb6cafSSascha Wildner Offset += SubtableLength;
16257bcb6cafSSascha Wildner
16267bcb6cafSSascha Wildner /* If there are any (fixed-length) Error Banks from above, dump them now */
16277bcb6cafSSascha Wildner
16287bcb6cafSSascha Wildner if (BankCount)
16297bcb6cafSSascha Wildner {
16307bcb6cafSSascha Wildner BankTable = ACPI_ADD_PTR (ACPI_HEST_IA_ERROR_BANK, Subtable,
16317bcb6cafSSascha Wildner SubtableLength);
16327bcb6cafSSascha Wildner SubtableLength += BankCount * sizeof (ACPI_HEST_IA_ERROR_BANK);
16337bcb6cafSSascha Wildner
16347bcb6cafSSascha Wildner while (BankCount)
16357bcb6cafSSascha Wildner {
16367bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
16377bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Length, Offset, BankTable,
16387bcb6cafSSascha Wildner sizeof (ACPI_HEST_IA_ERROR_BANK), AcpiDmTableInfoHestBank);
16397bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
16407bcb6cafSSascha Wildner {
16417bcb6cafSSascha Wildner return;
16427bcb6cafSSascha Wildner }
16437bcb6cafSSascha Wildner
16447bcb6cafSSascha Wildner Offset += sizeof (ACPI_HEST_IA_ERROR_BANK);
16457bcb6cafSSascha Wildner BankTable++;
16467bcb6cafSSascha Wildner BankCount--;
16477bcb6cafSSascha Wildner }
16487bcb6cafSSascha Wildner }
16497bcb6cafSSascha Wildner
16507bcb6cafSSascha Wildner /* Point to next subtable */
16517bcb6cafSSascha Wildner
16527bcb6cafSSascha Wildner Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Subtable, SubtableLength);
16537bcb6cafSSascha Wildner }
16547bcb6cafSSascha Wildner }
16557bcb6cafSSascha Wildner
16567bcb6cafSSascha Wildner
16577bcb6cafSSascha Wildner /*******************************************************************************
16587bcb6cafSSascha Wildner *
16597bcb6cafSSascha Wildner * FUNCTION: AcpiDmDumpHmat
16607bcb6cafSSascha Wildner *
16617bcb6cafSSascha Wildner * PARAMETERS: Table - A HMAT table
16627bcb6cafSSascha Wildner *
16637bcb6cafSSascha Wildner * RETURN: None
16647bcb6cafSSascha Wildner *
16657bcb6cafSSascha Wildner * DESCRIPTION: Format the contents of a HMAT.
16667bcb6cafSSascha Wildner *
16677bcb6cafSSascha Wildner ******************************************************************************/
16687bcb6cafSSascha Wildner
16697bcb6cafSSascha Wildner void
AcpiDmDumpHmat(ACPI_TABLE_HEADER * Table)16707bcb6cafSSascha Wildner AcpiDmDumpHmat (
16717bcb6cafSSascha Wildner ACPI_TABLE_HEADER *Table)
16727bcb6cafSSascha Wildner {
16737bcb6cafSSascha Wildner ACPI_STATUS Status;
16747bcb6cafSSascha Wildner ACPI_HMAT_STRUCTURE *HmatStruct;
16757bcb6cafSSascha Wildner ACPI_HMAT_LOCALITY *HmatLocality;
16767bcb6cafSSascha Wildner ACPI_HMAT_CACHE *HmatCache;
16777bcb6cafSSascha Wildner UINT32 Offset;
16787bcb6cafSSascha Wildner UINT32 SubtableOffset;
16797bcb6cafSSascha Wildner UINT32 Length;
16807bcb6cafSSascha Wildner ACPI_DMTABLE_INFO *InfoTable;
16817bcb6cafSSascha Wildner UINT32 i, j;
16827bcb6cafSSascha Wildner
16837bcb6cafSSascha Wildner
16847bcb6cafSSascha Wildner /* Main table */
16857bcb6cafSSascha Wildner
16867bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoHmat);
16877bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
16887bcb6cafSSascha Wildner {
16897bcb6cafSSascha Wildner return;
16907bcb6cafSSascha Wildner }
16917bcb6cafSSascha Wildner Offset = sizeof (ACPI_TABLE_HMAT);
16927bcb6cafSSascha Wildner
16937bcb6cafSSascha Wildner while (Offset < Table->Length)
16947bcb6cafSSascha Wildner {
16957bcb6cafSSascha Wildner AcpiOsPrintf ("\n");
16967bcb6cafSSascha Wildner
16977bcb6cafSSascha Wildner /* Dump HMAT structure header */
16987bcb6cafSSascha Wildner
16997bcb6cafSSascha Wildner HmatStruct = ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, Table, Offset);
17007bcb6cafSSascha Wildner if (HmatStruct->Length < sizeof (ACPI_HMAT_STRUCTURE))
17017bcb6cafSSascha Wildner {
17027bcb6cafSSascha Wildner AcpiOsPrintf ("Invalid HMAT structure length\n");
17037bcb6cafSSascha Wildner return;
17047bcb6cafSSascha Wildner }
17057bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct,
17067bcb6cafSSascha Wildner HmatStruct->Length, AcpiDmTableInfoHmatHdr);
17077bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
17087bcb6cafSSascha Wildner {
17097bcb6cafSSascha Wildner return;
17107bcb6cafSSascha Wildner }
17117bcb6cafSSascha Wildner
17127bcb6cafSSascha Wildner switch (HmatStruct->Type)
17137bcb6cafSSascha Wildner {
17147bcb6cafSSascha Wildner case ACPI_HMAT_TYPE_ADDRESS_RANGE:
17157bcb6cafSSascha Wildner
17167bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoHmat0;
171700ffa116SSascha Wildner Length = sizeof (ACPI_HMAT_PROXIMITY_DOMAIN);
17187bcb6cafSSascha Wildner break;
17197bcb6cafSSascha Wildner
17207bcb6cafSSascha Wildner case ACPI_HMAT_TYPE_LOCALITY:
17217bcb6cafSSascha Wildner
17227bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoHmat1;
17237bcb6cafSSascha Wildner Length = sizeof (ACPI_HMAT_LOCALITY);
17247bcb6cafSSascha Wildner break;
17257bcb6cafSSascha Wildner
17267bcb6cafSSascha Wildner case ACPI_HMAT_TYPE_CACHE:
17277bcb6cafSSascha Wildner
17287bcb6cafSSascha Wildner InfoTable = AcpiDmTableInfoHmat2;
17297bcb6cafSSascha Wildner Length = sizeof (ACPI_HMAT_CACHE);
17307bcb6cafSSascha Wildner break;
17317bcb6cafSSascha Wildner
17327bcb6cafSSascha Wildner default:
17337bcb6cafSSascha Wildner
17347bcb6cafSSascha Wildner AcpiOsPrintf ("\n**** Unknown HMAT structure type 0x%X\n",
17357bcb6cafSSascha Wildner HmatStruct->Type);
17367bcb6cafSSascha Wildner
17377bcb6cafSSascha Wildner /* Attempt to continue */
17387bcb6cafSSascha Wildner
17397bcb6cafSSascha Wildner goto NextSubtable;
17407bcb6cafSSascha Wildner }
17417bcb6cafSSascha Wildner
17427bcb6cafSSascha Wildner /* Dump HMAT structure body */
17437bcb6cafSSascha Wildner
17447bcb6cafSSascha Wildner if (HmatStruct->Length < Length)
17457bcb6cafSSascha Wildner {
17467bcb6cafSSascha Wildner AcpiOsPrintf ("Invalid HMAT structure length\n");
17477bcb6cafSSascha Wildner return;
17487bcb6cafSSascha Wildner }
17497bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct,
17507bcb6cafSSascha Wildner HmatStruct->Length, InfoTable);
17517bcb6cafSSascha Wildner if (ACPI_FAILURE (Status))
17527bcb6cafSSascha Wildner {
17537bcb6cafSSascha Wildner return;
17547bcb6cafSSascha Wildner }
17557bcb6cafSSascha Wildner
17567bcb6cafSSascha Wildner /* Dump HMAT structure additionals */
17577bcb6cafSSascha Wildner
17587bcb6cafSSascha Wildner switch (HmatStruct->Type)
17597bcb6cafSSascha Wildner {
17607bcb6cafSSascha Wildner case ACPI_HMAT_TYPE_LOCALITY:
17617bcb6cafSSascha Wildner
17627bcb6cafSSascha Wildner HmatLocality = ACPI_CAST_PTR (ACPI_HMAT_LOCALITY, HmatStruct);
17637bcb6cafSSascha Wildner SubtableOffset = sizeof (ACPI_HMAT_LOCALITY);
17647bcb6cafSSascha Wildner
17657bcb6cafSSascha Wildner /* Dump initiator proximity domains */
17667bcb6cafSSascha Wildner
17677bcb6cafSSascha Wildner if ((UINT32)(HmatStruct->Length - SubtableOffset) <
17687bcb6cafSSascha Wildner (UINT32)(HmatLocality->NumberOfInitiatorPDs * 4))
17697bcb6cafSSascha Wildner {
17707bcb6cafSSascha Wildner AcpiOsPrintf ("Invalid initiator proximity domain number\n");
17717bcb6cafSSascha Wildner return;
17727bcb6cafSSascha Wildner }
17737bcb6cafSSascha Wildner for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++)
17747bcb6cafSSascha Wildner {
17757bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
17767bcb6cafSSascha Wildner ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
17777bcb6cafSSascha Wildner 4, AcpiDmTableInfoHmat1a);
1778e5412f1eSSascha Wildner if (ACPI_FAILURE (Status))
1779e5412f1eSSascha Wildner {
1780e5412f1eSSascha Wildner return;
1781e5412f1eSSascha Wildner }
1782e5412f1eSSascha Wildner
17837bcb6cafSSascha Wildner SubtableOffset += 4;
17847bcb6cafSSascha Wildner }
17857bcb6cafSSascha Wildner
17867bcb6cafSSascha Wildner /* Dump target proximity domains */
17877bcb6cafSSascha Wildner
17887bcb6cafSSascha Wildner if ((UINT32)(HmatStruct->Length - SubtableOffset) <
17897bcb6cafSSascha Wildner (UINT32)(HmatLocality->NumberOfTargetPDs * 4))
17907bcb6cafSSascha Wildner {
17917bcb6cafSSascha Wildner AcpiOsPrintf ("Invalid target proximity domain number\n");
17927bcb6cafSSascha Wildner return;
17937bcb6cafSSascha Wildner }
17947bcb6cafSSascha Wildner for (i = 0; i < HmatLocality->NumberOfTargetPDs; i++)
17957bcb6cafSSascha Wildner {
17967bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
17977bcb6cafSSascha Wildner ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
17987bcb6cafSSascha Wildner 4, AcpiDmTableInfoHmat1b);
1799e5412f1eSSascha Wildner if (ACPI_FAILURE (Status))
1800e5412f1eSSascha Wildner {
1801e5412f1eSSascha Wildner return;
1802e5412f1eSSascha Wildner }
1803e5412f1eSSascha Wildner
18047bcb6cafSSascha Wildner SubtableOffset += 4;
18057bcb6cafSSascha Wildner }
18067bcb6cafSSascha Wildner
18077bcb6cafSSascha Wildner /* Dump latency/bandwidth entris */
18087bcb6cafSSascha Wildner
18097bcb6cafSSascha Wildner if ((UINT32)(HmatStruct->Length - SubtableOffset) <
18107bcb6cafSSascha Wildner (UINT32)(HmatLocality->NumberOfInitiatorPDs *
18117bcb6cafSSascha Wildner HmatLocality->NumberOfTargetPDs * 2))
18127bcb6cafSSascha Wildner {
18137bcb6cafSSascha Wildner AcpiOsPrintf ("Invalid latency/bandwidth entry number\n");
18147bcb6cafSSascha Wildner return;
18157bcb6cafSSascha Wildner }
18167bcb6cafSSascha Wildner for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++)
18177bcb6cafSSascha Wildner {
18187bcb6cafSSascha Wildner for (j = 0; j < HmatLocality->NumberOfTargetPDs; j++)
18197bcb6cafSSascha Wildner {
18207bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
18217bcb6cafSSascha Wildner ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
18227bcb6cafSSascha Wildner 2, AcpiDmTableInfoHmat1c);
1823e5412f1eSSascha Wildner if (ACPI_FAILURE(Status))
1824e5412f1eSSascha Wildner {
1825e5412f1eSSascha Wildner return;
1826e5412f1eSSascha Wildner }
1827e5412f1eSSascha Wildner
18287bcb6cafSSascha Wildner SubtableOffset += 2;
18297bcb6cafSSascha Wildner }
18307bcb6cafSSascha Wildner }
18317bcb6cafSSascha Wildner break;
18327bcb6cafSSascha Wildner
18337bcb6cafSSascha Wildner case ACPI_HMAT_TYPE_CACHE:
18347bcb6cafSSascha Wildner
18357bcb6cafSSascha Wildner HmatCache = ACPI_CAST_PTR (ACPI_HMAT_CACHE, HmatStruct);
18367bcb6cafSSascha Wildner SubtableOffset = sizeof (ACPI_HMAT_CACHE);
18377bcb6cafSSascha Wildner
18387bcb6cafSSascha Wildner /* Dump SMBIOS handles */
18397bcb6cafSSascha Wildner
18407bcb6cafSSascha Wildner if ((UINT32)(HmatStruct->Length - SubtableOffset) <
18417bcb6cafSSascha Wildner (UINT32)(HmatCache->NumberOfSMBIOSHandles * 2))
18427bcb6cafSSascha Wildner {
18437bcb6cafSSascha Wildner AcpiOsPrintf ("Invalid SMBIOS handle number\n");
18447bcb6cafSSascha Wildner return;
18457bcb6cafSSascha Wildner }
18467bcb6cafSSascha Wildner for (i = 0; i < HmatCache->NumberOfSMBIOSHandles; i++)
18477bcb6cafSSascha Wildner {
18487bcb6cafSSascha Wildner Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
18497bcb6cafSSascha Wildner ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
18507bcb6cafSSascha Wildner 2, AcpiDmTableInfoHmat2a);
1851e5412f1eSSascha Wildner if (ACPI_FAILURE (Status))
1852e5412f1eSSascha Wildner {
1853e5412f1eSSascha Wildner return;
1854e5412f1eSSascha Wildner }
1855e5412f1eSSascha Wildner
18567bcb6cafSSascha Wildner SubtableOffset += 2;
18577bcb6cafSSascha Wildner }
18587bcb6cafSSascha Wildner break;
18597bcb6cafSSascha Wildner
18607bcb6cafSSascha Wildner default:
18617bcb6cafSSascha Wildner
18627bcb6cafSSascha Wildner break;
18637bcb6cafSSascha Wildner }
18647bcb6cafSSascha Wildner
18657bcb6cafSSascha Wildner NextSubtable:
18667bcb6cafSSascha Wildner /* Point to next HMAT structure subtable */
18677bcb6cafSSascha Wildner
18687bcb6cafSSascha Wildner Offset += (HmatStruct->Length);
18697bcb6cafSSascha Wildner }
18707bcb6cafSSascha Wildner }
1871