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