1 /******************************************************************************
3 * Module Name: dmtbdump - Dump ACPI data tables that contain no AML code
6 *****************************************************************************/
8 /******************************************************************************
12 * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp.
13 * All rights reserved.
17 * 2.1. This is your license from Intel Corp. under its intellectual property
18 * rights. You may have additional license terms from the party that provided
19 * you this software, covering your right to use that party's intellectual
22 * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
23 * copy of the source code appearing in this file ("Covered Code") an
24 * irrevocable, perpetual, worldwide license under Intel's copyrights in the
25 * base code distributed originally by Intel ("Original Intel Code") to copy,
26 * make derivatives, distribute, use and display any portion of the Covered
27 * Code in any form, with the right to sublicense such rights; and
29 * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
30 * license (with the right to sublicense), under only those claims of Intel
31 * patents that are infringed by the Original Intel Code, to make, use, sell,
32 * offer to sell, and import the Covered Code and derivative works thereof
33 * solely to the minimum extent necessary to exercise the above copyright
34 * license, and in no event shall the patent license extend to any additions
35 * to or modifications of the Original Intel Code. No other license or right
36 * is granted directly or by implication, estoppel or otherwise;
38 * The above copyright and patent license is granted only if the following
43 * 3.1. Redistribution of Source with Rights to Further Distribute Source.
44 * Redistribution of source code of any substantial portion of the Covered
45 * Code or modification with rights to further distribute source must include
46 * the above Copyright Notice, the above License, this list of Conditions,
47 * and the following Disclaimer and Export Compliance provision. In addition,
48 * Licensee must cause all Covered Code to which Licensee contributes to
49 * contain a file documenting the changes Licensee made to create that Covered
50 * Code and the date of any change. Licensee must include in that file the
51 * documentation of any changes made by any predecessor Licensee. Licensee
52 * must include a prominent statement that the modification is derived,
53 * directly or indirectly, from Original Intel Code.
55 * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
56 * Redistribution of source code of any substantial portion of the Covered
57 * Code or modification without rights to further distribute source must
58 * include the following Disclaimer and Export Compliance provision in the
59 * documentation and/or other materials provided with distribution. In
60 * addition, Licensee may not authorize further sublicense of source of any
61 * portion of the Covered Code, and must include terms to the effect that the
62 * license from Licensee to its licensee is limited to the intellectual
63 * property embodied in the software Licensee provides to its licensee, and
64 * not to intellectual property embodied in modifications its licensee may
67 * 3.3. Redistribution of Executable. Redistribution in executable form of any
68 * substantial portion of the Covered Code or modification must reproduce the
69 * above Copyright Notice, and the following Disclaimer and Export Compliance
70 * provision in the documentation and/or other materials provided with the
73 * 3.4. Intel retains all right, title, and interest in and to the Original
76 * 3.5. Neither the name Intel nor any other trademark owned or controlled by
77 * Intel shall be used in advertising or otherwise to promote the sale, use or
78 * other dealings in products derived from or relating to the Covered Code
79 * without prior written authorization from Intel.
81 * 4. Disclaimer and Export Compliance
83 * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
84 * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
85 * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
86 * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
87 * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
88 * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
91 * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
92 * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
93 * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
94 * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
95 * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
96 * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
97 * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
100 * 4.3. Licensee shall not export, either directly or indirectly, any of this
101 * software or system incorporating such software without first obtaining any
102 * required license or other approval from the U. S. Department of Commerce or
103 * any other agency or department of the United States Government. In the
104 * event Licensee exports any such software from the United States or
105 * re-exports any such software from a foreign destination, Licensee shall
106 * ensure that the distribution and export/re-export of the software is in
107 * compliance with all laws, regulations, orders, or other restrictions of the
108 * U.S. Export Administration Regulations. Licensee agrees that neither it nor
109 * any of its subsidiaries will export/re-export any technical data, process,
110 * software, or service, directly or indirectly, to any country for which the
111 * United States government or any agency thereof requires an export license,
112 * other governmental approval, or letter of assurance, without first obtaining
113 * such license, approval or letter.
115 *****************************************************************************/
117 #include <contrib/dev/acpica/acpi.h>
118 #include <contrib/dev/acpica/acdisasm.h>
119 #include <contrib/dev/acpica/actables.h>
121 /* This module used for application-level code only */
123 #define _COMPONENT ACPI_CA_DISASSEMBLER
124 ACPI_MODULE_NAME ("dmtbdump")
127 /*******************************************************************************
129 * FUNCTION: AcpiDmDumpRsdp
131 * PARAMETERS: Table - A RSDP
133 * RETURN: Length of the table (there is no length field, use revision)
135 * DESCRIPTION: Format the contents of a RSDP
137 ******************************************************************************/
141 ACPI_TABLE_HEADER *Table)
143 UINT32 Length = ACPI_RSDP_REV0_SIZE;
146 /* Dump the common ACPI 1.0 portion */
148 AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp1);
150 /* ACPI 2.0+ contains more data and has a Length field */
152 if (ACPI_CAST_PTR (ACPI_TABLE_RSDP, Table)->Revision > 0)
154 Length = ACPI_CAST_PTR (ACPI_TABLE_RSDP, Table)->Length;
155 AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp2);
162 /*******************************************************************************
164 * FUNCTION: AcpiDmDumpRsdt
166 * PARAMETERS: Table - A RSDT
170 * DESCRIPTION: Format the contents of a RSDT
172 ******************************************************************************/
176 ACPI_TABLE_HEADER *Table)
184 /* Point to start of table pointer array */
186 Array = ACPI_CAST_PTR (ACPI_TABLE_RSDT, Table)->TableOffsetEntry;
187 Offset = sizeof (ACPI_TABLE_HEADER);
189 /* RSDT uses 32-bit pointers */
191 Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32);
193 for (i = 0; i < Entries; i++)
195 AcpiDmLineHeader2 (Offset, sizeof (UINT32), "ACPI Table Address", i);
196 AcpiOsPrintf ("%8.8X\n", Array[i]);
197 Offset += sizeof (UINT32);
202 /*******************************************************************************
204 * FUNCTION: AcpiDmDumpXsdt
206 * PARAMETERS: Table - A XSDT
210 * DESCRIPTION: Format the contents of a XSDT
212 ******************************************************************************/
216 ACPI_TABLE_HEADER *Table)
224 /* Point to start of table pointer array */
226 Array = ACPI_CAST_PTR (ACPI_TABLE_XSDT, Table)->TableOffsetEntry;
227 Offset = sizeof (ACPI_TABLE_HEADER);
229 /* XSDT uses 64-bit pointers */
231 Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64);
233 for (i = 0; i < Entries; i++)
235 AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i);
236 AcpiOsPrintf ("%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Array[i]));
237 Offset += sizeof (UINT64);
242 /*******************************************************************************
244 * FUNCTION: AcpiDmDumpFadt
246 * PARAMETERS: Table - A FADT
250 * DESCRIPTION: Format the contents of a FADT
252 ******************************************************************************/
256 ACPI_TABLE_HEADER *Table)
259 /* Common ACPI 1.0 portion of FADT */
261 AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt1);
263 /* Check for ACPI 2.0+ extended data (cannot depend on Revision field) */
265 if (Table->Length >= sizeof (ACPI_TABLE_FADT))
267 AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt2);
270 /* Validate various fields in the FADT, including length */
272 AcpiTbCreateLocalFadt (Table, Table->Length);
276 /*******************************************************************************
278 * FUNCTION: AcpiDmDumpAsf
280 * PARAMETERS: Table - A ASF table
284 * DESCRIPTION: Format the contents of a ASF table
286 ******************************************************************************/
290 ACPI_TABLE_HEADER *Table)
292 UINT32 Offset = sizeof (ACPI_TABLE_HEADER);
293 ACPI_ASF_INFO *SubTable;
294 ACPI_DMTABLE_INFO *InfoTable;
295 ACPI_DMTABLE_INFO *DataInfoTable = NULL;
296 UINT8 *DataTable = NULL;
297 ACPI_NATIVE_UINT DataCount = 0;
298 ACPI_NATIVE_UINT DataLength = 0;
299 ACPI_NATIVE_UINT DataOffset = 0;
303 /* No main table, only sub-tables */
305 SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset);
306 while (Offset < Table->Length)
308 /* Common sub-table header */
310 AcpiDmDumpTable (Table->Length, Offset, SubTable, 0, AcpiDmTableInfoAsfHdr);
312 switch (SubTable->Header.Type & 0x7F) /* Mask off top bit */
314 case ACPI_ASF_TYPE_INFO:
315 InfoTable = AcpiDmTableInfoAsf0;
318 case ACPI_ASF_TYPE_ALERT:
319 InfoTable = AcpiDmTableInfoAsf1;
320 DataInfoTable = AcpiDmTableInfoAsf1a;
321 DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_ALERT));
322 DataCount = ((ACPI_ASF_ALERT *) SubTable)->Alerts;
323 DataLength = ((ACPI_ASF_ALERT *) SubTable)->DataLength;
324 DataOffset = Offset + sizeof (ACPI_ASF_ALERT);
327 case ACPI_ASF_TYPE_CONTROL:
328 InfoTable = AcpiDmTableInfoAsf2;
329 DataInfoTable = AcpiDmTableInfoAsf2a;
330 DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_REMOTE));
331 DataCount = ((ACPI_ASF_REMOTE *) SubTable)->Controls;
332 DataLength = ((ACPI_ASF_REMOTE *) SubTable)->DataLength;
333 DataOffset = Offset + sizeof (ACPI_ASF_REMOTE);
336 case ACPI_ASF_TYPE_BOOT:
337 InfoTable = AcpiDmTableInfoAsf3;
340 case ACPI_ASF_TYPE_ADDRESS:
341 InfoTable = AcpiDmTableInfoAsf4;
342 DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_ADDRESS));
343 DataLength = ((ACPI_ASF_ADDRESS *) SubTable)->Devices;
344 DataOffset = Offset + sizeof (ACPI_ASF_ADDRESS);
348 AcpiOsPrintf ("\n**** Unknown ASF sub-table type %X\n", SubTable->Header.Type);
352 AcpiDmDumpTable (Table->Length, Offset, SubTable, SubTable->Header.Length, InfoTable);
355 /* Dump variable-length extra data */
357 switch (SubTable->Header.Type & 0x7F) /* Mask off top bit */
359 case ACPI_ASF_TYPE_ALERT:
360 case ACPI_ASF_TYPE_CONTROL:
362 for (i = 0; i < DataCount; i++)
365 AcpiDmDumpTable (Table->Length, DataOffset, DataTable, DataLength, DataInfoTable);
367 DataTable = ACPI_ADD_PTR (UINT8, DataTable, DataLength);
368 DataOffset += DataLength;
372 case ACPI_ASF_TYPE_ADDRESS:
374 for (i = 0; i < DataLength; i++)
378 AcpiDmLineHeader (DataOffset, 1, "Addresses");
381 AcpiOsPrintf ("%2.2X ", *DataTable);
392 /* Point to next sub-table */
394 Offset += SubTable->Header.Length;
395 SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, SubTable, SubTable->Header.Length);
400 /*******************************************************************************
402 * FUNCTION: AcpiDmDumpCpep
404 * PARAMETERS: Table - A CPEP table
408 * DESCRIPTION: Format the contents of a CPEP. This table type consists
409 * of an open-ended number of subtables.
411 ******************************************************************************/
415 ACPI_TABLE_HEADER *Table)
417 ACPI_CPEP_POLLING *SubTable;
418 UINT32 Length = Table->Length;
419 UINT32 Offset = sizeof (ACPI_TABLE_CPEP);
424 AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoCpep);
428 SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset);
429 while (Offset < Table->Length)
432 AcpiDmDumpTable (Length, Offset, SubTable, SubTable->Length, AcpiDmTableInfoCpep0);
434 /* Point to next sub-table */
436 Offset += SubTable->Length;
437 SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, SubTable, SubTable->Length);
442 /*******************************************************************************
444 * FUNCTION: AcpiDmDumpDmar
446 * PARAMETERS: Table - A DMAR table
450 * DESCRIPTION: Format the contents of a DMAR. This table type consists
451 * of an open-ended number of subtables.
453 ******************************************************************************/
457 ACPI_TABLE_HEADER *Table)
459 ACPI_DMAR_HEADER *SubTable;
460 UINT32 Length = Table->Length;
461 UINT32 Offset = sizeof (ACPI_TABLE_DMAR);
462 ACPI_DMTABLE_INFO *InfoTable;
463 ACPI_DMAR_DEVICE_SCOPE *ScopeTable;
471 AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDmar);
475 SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset);
476 while (Offset < Table->Length)
478 /* Common sub-table header */
481 AcpiDmDumpTable (Length, Offset, SubTable, 0, AcpiDmTableInfoDmarHdr);
483 switch (SubTable->Type)
485 case ACPI_DMAR_TYPE_HARDWARE_UNIT:
486 InfoTable = AcpiDmTableInfoDmar0;
487 ScopeOffset = sizeof (ACPI_DMAR_HARDWARE_UNIT);
489 case ACPI_DMAR_TYPE_RESERVED_MEMORY:
490 InfoTable = AcpiDmTableInfoDmar1;
491 ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY);
494 AcpiOsPrintf ("\n**** Unknown DMAR sub-table type %X\n\n", SubTable->Type);
498 AcpiDmDumpTable (Length, Offset, SubTable, SubTable->Length, InfoTable);
501 * Currently, a common flag indicates whether there are any
502 * device scope entries present at the end of the subtable.
504 if ((SubTable->Flags & ACPI_DMAR_INCLUDE_ALL) == 0)
506 /* Dump the device scope entries */
508 ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, SubTable, ScopeOffset);
509 while (ScopeOffset < SubTable->Length)
512 AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable,
513 ScopeTable->Length, AcpiDmTableInfoDmarScope);
515 /* Dump the PCI Path entries for this device scope */
517 PathOffset = sizeof (ACPI_DMAR_DEVICE_SCOPE); /* Path entries start at this offset */
519 PciPath = ACPI_ADD_PTR (UINT8, ScopeTable,
520 sizeof (ACPI_DMAR_DEVICE_SCOPE));
522 while (PathOffset < ScopeTable->Length)
524 AcpiDmLineHeader ((PathOffset + ScopeOffset + Offset), 2, "PCI Path");
525 AcpiOsPrintf ("[%2.2X, %2.2X]\n", PciPath[0], PciPath[1]);
527 /* Point to next PCI Path entry */
533 /* Point to next device scope entry */
535 ScopeOffset += ScopeTable->Length;
536 ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE,
537 ScopeTable, ScopeTable->Length);
541 /* Point to next sub-table */
543 Offset += SubTable->Length;
544 SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, SubTable, SubTable->Length);
549 /*******************************************************************************
551 * FUNCTION: AcpiDmDumpMadt
553 * PARAMETERS: Table - A MADT table
557 * DESCRIPTION: Format the contents of a MADT. This table type consists
558 * of an open-ended number of subtables.
560 ******************************************************************************/
564 ACPI_TABLE_HEADER *Table)
566 ACPI_SUBTABLE_HEADER *SubTable;
567 UINT32 Length = Table->Length;
568 UINT32 Offset = sizeof (ACPI_TABLE_MADT);
569 ACPI_DMTABLE_INFO *InfoTable;
574 AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMadt);
578 SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
579 while (Offset < Table->Length)
581 /* Common sub-table header */
584 AcpiDmDumpTable (Length, Offset, SubTable, 0, AcpiDmTableInfoMadtHdr);
586 switch (SubTable->Type)
588 case ACPI_MADT_TYPE_LOCAL_APIC:
589 InfoTable = AcpiDmTableInfoMadt0;
591 case ACPI_MADT_TYPE_IO_APIC:
592 InfoTable = AcpiDmTableInfoMadt1;
594 case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE:
595 InfoTable = AcpiDmTableInfoMadt2;
597 case ACPI_MADT_TYPE_NMI_SOURCE:
598 InfoTable = AcpiDmTableInfoMadt3;
600 case ACPI_MADT_TYPE_LOCAL_APIC_NMI:
601 InfoTable = AcpiDmTableInfoMadt4;
603 case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE:
604 InfoTable = AcpiDmTableInfoMadt5;
606 case ACPI_MADT_TYPE_IO_SAPIC:
607 InfoTable = AcpiDmTableInfoMadt6;
609 case ACPI_MADT_TYPE_LOCAL_SAPIC:
610 InfoTable = AcpiDmTableInfoMadt7;
612 case ACPI_MADT_TYPE_INTERRUPT_SOURCE:
613 InfoTable = AcpiDmTableInfoMadt8;
616 AcpiOsPrintf ("\n**** Unknown MADT sub-table type %X\n\n", SubTable->Type);
620 AcpiDmDumpTable (Length, Offset, SubTable, SubTable->Length, InfoTable);
622 /* Point to next sub-table */
624 Offset += SubTable->Length;
625 SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, SubTable->Length);
630 /*******************************************************************************
632 * FUNCTION: AcpiDmDumpMcfg
634 * PARAMETERS: Table - A MCFG Table
638 * DESCRIPTION: Format the contents of a MCFG table
640 ******************************************************************************/
644 ACPI_TABLE_HEADER *Table)
646 UINT32 Offset = sizeof (ACPI_TABLE_MCFG);
647 ACPI_MCFG_ALLOCATION *SubTable;
652 AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg);
656 SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset);
657 while (Offset < Table->Length)
659 if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length)
661 AcpiOsPrintf ("Warning: there are %d invalid trailing bytes\n",
662 sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length));
667 AcpiDmDumpTable (Table->Length, Offset, SubTable, 0, AcpiDmTableInfoMcfg0);
669 /* Point to next sub-table (each subtable is of fixed length) */
671 Offset += sizeof (ACPI_MCFG_ALLOCATION);
672 SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, SubTable,
673 sizeof (ACPI_MCFG_ALLOCATION));
678 /*******************************************************************************
680 * FUNCTION: AcpiDmDumpSlit
682 * PARAMETERS: Table - An SLIT
686 * DESCRIPTION: Format the contents of a SLIT
688 ******************************************************************************/
692 ACPI_TABLE_HEADER *Table)
703 AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit);
705 /* Display the Locality NxN Matrix */
707 Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount;
708 Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]);
709 Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry;
711 for (i = 0; i < Localities; i++)
713 /* Display one row of the matrix */
715 AcpiDmLineHeader2 (Offset, Localities, "Locality", i);
716 for (j = 0; j < Localities; j++)
718 /* Check for beyond EOT */
720 if (Offset >= Table->Length)
722 AcpiOsPrintf ("\n**** Not enough room in table for all localities\n");
726 AcpiOsPrintf ("%2.2X ", Row[j]);
729 /* Display up to 16 bytes per output row */
731 if (j && (((j+1) % 16) == 0) && ((j+1) < Localities))
734 AcpiDmLineHeader (Offset, 0, "");
738 /* Point to next row */
746 /*******************************************************************************
748 * FUNCTION: AcpiDmDumpSrat
750 * PARAMETERS: Table - A SRAT table
754 * DESCRIPTION: Format the contents of a SRAT
756 ******************************************************************************/
760 ACPI_TABLE_HEADER *Table)
762 UINT32 Offset = sizeof (ACPI_TABLE_SRAT);
763 ACPI_SUBTABLE_HEADER *SubTable;
764 ACPI_DMTABLE_INFO *InfoTable;
769 AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat);
773 SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
774 while (Offset < Table->Length)
776 switch (SubTable->Type)
778 case ACPI_SRAT_TYPE_CPU_AFFINITY:
779 InfoTable = AcpiDmTableInfoSrat0;
781 case ACPI_SRAT_TYPE_MEMORY_AFFINITY:
782 InfoTable = AcpiDmTableInfoSrat1;
785 AcpiOsPrintf ("\n**** Unknown SRAT sub-table type %X\n", SubTable->Type);
790 AcpiDmDumpTable (Table->Length, Offset, SubTable, SubTable->Length, InfoTable);
792 /* Point to next sub-table */
794 Offset += SubTable->Length;
795 SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, SubTable->Length);