1 /******************************************************************************
3 * Module Name: dmtbdump - Dump ACPI data tables that contain no AML code
5 *****************************************************************************/
8 * Copyright (C) 2000 - 2014, Intel Corp.
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
49 /* This module used for application-level code only */
51 #define _COMPONENT ACPI_CA_DISASSEMBLER
52 ACPI_MODULE_NAME ("dmtbdump")
55 /* Local prototypes */
58 AcpiDmValidateFadtLength (
67 UINT32 AbsoluteOffset,
71 /*******************************************************************************
73 * FUNCTION: AcpiDmDumpBuffer
75 * PARAMETERS: Table - ACPI Table or subtable
76 * BufferOffset - Offset of buffer from Table above
77 * Length - Length of the buffer
78 * AbsoluteOffset - Offset of buffer in the main ACPI table
79 * Header - Name of the buffer field (printed on the
84 * DESCRIPTION: Format the contents of an arbitrary length data buffer (in the
85 * disassembler output format.)
87 ******************************************************************************/
94 UINT32 AbsoluteOffset,
106 Buffer = ACPI_CAST_PTR (UINT8, Table) + BufferOffset;
114 AcpiDmLineHeader (AbsoluteOffset,
115 ((Length - i) > 16) ? 16 : (Length - i), Header);
119 AcpiOsPrintf ("%.02X ", *Buffer);
129 /*******************************************************************************
131 * FUNCTION: AcpiDmDumpRsdp
133 * PARAMETERS: Table - A RSDP
135 * RETURN: Length of the table (there is not always a length field,
136 * use revision or length if available (ACPI 2.0+))
138 * DESCRIPTION: Format the contents of a RSDP
140 ******************************************************************************/
144 ACPI_TABLE_HEADER *Table)
146 ACPI_TABLE_RSDP *Rsdp = ACPI_CAST_PTR (ACPI_TABLE_RSDP, Table);
147 UINT32 Length = sizeof (ACPI_RSDP_COMMON);
151 /* Dump the common ACPI 1.0 portion */
153 AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp1);
155 /* Validate the first checksum */
157 Checksum = AcpiDmGenerateChecksum (Rsdp, sizeof (ACPI_RSDP_COMMON),
159 if (Checksum != Rsdp->Checksum)
161 AcpiOsPrintf ("/* Incorrect Checksum above, should be 0x%2.2X */\n",
165 /* The RSDP for ACPI 2.0+ contains more data and has a Length field */
167 if (Rsdp->Revision > 0)
169 Length = Rsdp->Length;
170 AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp2);
172 /* Validate the extended checksum over entire RSDP */
174 Checksum = AcpiDmGenerateChecksum (Rsdp, sizeof (ACPI_TABLE_RSDP),
175 Rsdp->ExtendedChecksum);
176 if (Checksum != Rsdp->ExtendedChecksum)
179 "/* Incorrect Extended Checksum above, should be 0x%2.2X */\n",
188 /*******************************************************************************
190 * FUNCTION: AcpiDmDumpRsdt
192 * PARAMETERS: Table - A RSDT
196 * DESCRIPTION: Format the contents of a RSDT
198 ******************************************************************************/
202 ACPI_TABLE_HEADER *Table)
210 /* Point to start of table pointer array */
212 Array = ACPI_CAST_PTR (ACPI_TABLE_RSDT, Table)->TableOffsetEntry;
213 Offset = sizeof (ACPI_TABLE_HEADER);
215 /* RSDT uses 32-bit pointers */
217 Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32);
219 for (i = 0; i < Entries; i++)
221 AcpiDmLineHeader2 (Offset, sizeof (UINT32), "ACPI Table Address", i);
222 AcpiOsPrintf ("%8.8X\n", Array[i]);
223 Offset += sizeof (UINT32);
228 /*******************************************************************************
230 * FUNCTION: AcpiDmDumpXsdt
232 * PARAMETERS: Table - A XSDT
236 * DESCRIPTION: Format the contents of a XSDT
238 ******************************************************************************/
242 ACPI_TABLE_HEADER *Table)
250 /* Point to start of table pointer array */
252 Array = ACPI_CAST_PTR (ACPI_TABLE_XSDT, Table)->TableOffsetEntry;
253 Offset = sizeof (ACPI_TABLE_HEADER);
255 /* XSDT uses 64-bit pointers */
257 Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64);
259 for (i = 0; i < Entries; i++)
261 AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i);
262 AcpiOsPrintf ("%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Array[i]));
263 Offset += sizeof (UINT64);
268 /*******************************************************************************
270 * FUNCTION: AcpiDmDumpFadt
272 * PARAMETERS: Table - A FADT
276 * DESCRIPTION: Format the contents of a FADT
278 * NOTE: We cannot depend on the FADT version to indicate the actual
279 * contents of the FADT because of BIOS bugs. The table length
280 * is the only reliable indicator.
282 ******************************************************************************/
286 ACPI_TABLE_HEADER *Table)
289 /* Always dump the minimum FADT revision 1 fields (ACPI 1.0) */
291 AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt1);
293 /* Check for FADT revision 2 fields (ACPI 1.0B MS extensions) */
295 if ((Table->Length > ACPI_FADT_V1_SIZE) &&
296 (Table->Length <= ACPI_FADT_V2_SIZE))
298 AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt2);
301 /* Check for FADT revision 3/4 fields and up (ACPI 2.0+ extended data) */
303 else if (Table->Length > ACPI_FADT_V2_SIZE)
305 AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt3);
307 /* Check for FADT revision 5 fields and up (ACPI 5.0+) */
309 if (Table->Length > ACPI_FADT_V3_SIZE)
311 AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt5);
315 /* Validate various fields in the FADT, including length */
317 AcpiTbCreateLocalFadt (Table, Table->Length);
319 /* Validate FADT length against the revision */
321 AcpiDmValidateFadtLength (Table->Revision, Table->Length);
325 /*******************************************************************************
327 * FUNCTION: AcpiDmValidateFadtLength
329 * PARAMETERS: Revision - FADT revision (Header->Revision)
330 * Length - FADT length (Header->Length
334 * DESCRIPTION: Check the FADT revision against the expected table length for
335 * that revision. Issue a warning if the length is not what was
336 * expected. This seems to be such a common BIOS bug that the
337 * FADT revision has been rendered virtually meaningless.
339 ******************************************************************************/
342 AcpiDmValidateFadtLength (
346 UINT32 ExpectedLength;
353 AcpiOsPrintf ("// ACPI Warning: Invalid FADT revision: 0\n");
358 ExpectedLength = ACPI_FADT_V1_SIZE;
363 ExpectedLength = ACPI_FADT_V2_SIZE;
369 ExpectedLength = ACPI_FADT_V3_SIZE;
374 ExpectedLength = ACPI_FADT_V5_SIZE;
382 if (Length == ExpectedLength)
388 "\n// ACPI Warning: FADT revision %X does not match length: found %X expected %X\n",
389 Revision, Length, ExpectedLength);
393 /*******************************************************************************
395 * FUNCTION: AcpiDmDumpAsf
397 * PARAMETERS: Table - A ASF table
401 * DESCRIPTION: Format the contents of a ASF table
403 ******************************************************************************/
407 ACPI_TABLE_HEADER *Table)
410 UINT32 Offset = sizeof (ACPI_TABLE_HEADER);
411 ACPI_ASF_INFO *SubTable;
412 ACPI_DMTABLE_INFO *InfoTable;
413 ACPI_DMTABLE_INFO *DataInfoTable = NULL;
414 UINT8 *DataTable = NULL;
415 UINT32 DataCount = 0;
416 UINT32 DataLength = 0;
417 UINT32 DataOffset = 0;
422 /* No main table, only subtables */
424 SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset);
425 while (Offset < Table->Length)
427 /* Common subtable header */
429 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
430 SubTable->Header.Length, AcpiDmTableInfoAsfHdr);
431 if (ACPI_FAILURE (Status))
436 /* The actual type is the lower 7 bits of Type */
438 Type = (UINT8) (SubTable->Header.Type & 0x7F);
442 case ACPI_ASF_TYPE_INFO:
444 InfoTable = AcpiDmTableInfoAsf0;
447 case ACPI_ASF_TYPE_ALERT:
449 InfoTable = AcpiDmTableInfoAsf1;
450 DataInfoTable = AcpiDmTableInfoAsf1a;
451 DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_ALERT));
452 DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT, SubTable)->Alerts;
453 DataLength = ACPI_CAST_PTR (ACPI_ASF_ALERT, SubTable)->DataLength;
454 DataOffset = Offset + sizeof (ACPI_ASF_ALERT);
457 case ACPI_ASF_TYPE_CONTROL:
459 InfoTable = AcpiDmTableInfoAsf2;
460 DataInfoTable = AcpiDmTableInfoAsf2a;
461 DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_REMOTE));
462 DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE, SubTable)->Controls;
463 DataLength = ACPI_CAST_PTR (ACPI_ASF_REMOTE, SubTable)->DataLength;
464 DataOffset = Offset + sizeof (ACPI_ASF_REMOTE);
467 case ACPI_ASF_TYPE_BOOT:
469 InfoTable = AcpiDmTableInfoAsf3;
472 case ACPI_ASF_TYPE_ADDRESS:
474 InfoTable = AcpiDmTableInfoAsf4;
475 DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_ADDRESS));
476 DataLength = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, SubTable)->Devices;
477 DataOffset = Offset + sizeof (ACPI_ASF_ADDRESS);
482 AcpiOsPrintf ("\n**** Unknown ASF subtable type 0x%X\n", SubTable->Header.Type);
486 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
487 SubTable->Header.Length, InfoTable);
488 if (ACPI_FAILURE (Status))
493 /* Dump variable-length extra data */
497 case ACPI_ASF_TYPE_ALERT:
498 case ACPI_ASF_TYPE_CONTROL:
500 for (i = 0; i < DataCount; i++)
503 Status = AcpiDmDumpTable (Table->Length, DataOffset,
504 DataTable, DataLength, DataInfoTable);
505 if (ACPI_FAILURE (Status))
510 DataTable = ACPI_ADD_PTR (UINT8, DataTable, DataLength);
511 DataOffset += DataLength;
515 case ACPI_ASF_TYPE_ADDRESS:
517 for (i = 0; i < DataLength; i++)
521 AcpiDmLineHeader (DataOffset, 1, "Addresses");
524 AcpiOsPrintf ("%2.2X ", *DataTable);
527 if (DataOffset > Table->Length)
529 AcpiOsPrintf ("**** ACPI table terminates in the middle of a data structure!\n");
544 /* Point to next subtable */
546 if (!SubTable->Header.Length)
548 AcpiOsPrintf ("Invalid zero subtable header length\n");
552 Offset += SubTable->Header.Length;
553 SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, SubTable, SubTable->Header.Length);
558 /*******************************************************************************
560 * FUNCTION: AcpiDmDumpCpep
562 * PARAMETERS: Table - A CPEP table
566 * DESCRIPTION: Format the contents of a CPEP. This table type consists
567 * of an open-ended number of subtables.
569 ******************************************************************************/
573 ACPI_TABLE_HEADER *Table)
576 ACPI_CPEP_POLLING *SubTable;
577 UINT32 Length = Table->Length;
578 UINT32 Offset = sizeof (ACPI_TABLE_CPEP);
583 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoCpep);
584 if (ACPI_FAILURE (Status))
591 SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset);
592 while (Offset < Table->Length)
595 Status = AcpiDmDumpTable (Length, Offset, SubTable,
596 SubTable->Header.Length, AcpiDmTableInfoCpep0);
597 if (ACPI_FAILURE (Status))
602 /* Point to next subtable */
604 Offset += SubTable->Header.Length;
605 SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, SubTable,
606 SubTable->Header.Length);
611 /*******************************************************************************
613 * FUNCTION: AcpiDmDumpCsrt
615 * PARAMETERS: Table - A CSRT table
619 * DESCRIPTION: Format the contents of a CSRT. This table type consists
620 * of an open-ended number of subtables.
622 ******************************************************************************/
626 ACPI_TABLE_HEADER *Table)
629 ACPI_CSRT_GROUP *SubTable;
630 ACPI_CSRT_SHARED_INFO *SharedInfoTable;
631 ACPI_CSRT_DESCRIPTOR *SubSubTable;
632 UINT32 Length = Table->Length;
633 UINT32 Offset = sizeof (ACPI_TABLE_CSRT);
639 /* The main table only contains the ACPI header, thus already handled */
641 /* Subtables (Resource Groups) */
643 SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset);
644 while (Offset < Table->Length)
646 /* Resource group subtable */
649 Status = AcpiDmDumpTable (Length, Offset, SubTable,
650 SubTable->Length, AcpiDmTableInfoCsrt0);
651 if (ACPI_FAILURE (Status))
656 /* Shared info subtable (One per resource group) */
658 SubOffset = sizeof (ACPI_CSRT_GROUP);
659 SharedInfoTable = ACPI_ADD_PTR (ACPI_CSRT_SHARED_INFO, Table,
663 Status = AcpiDmDumpTable (Length, Offset + SubOffset, SharedInfoTable,
664 sizeof (ACPI_CSRT_SHARED_INFO), AcpiDmTableInfoCsrt1);
665 if (ACPI_FAILURE (Status))
670 SubOffset += SubTable->SharedInfoLength;
672 /* Sub-Subtables (Resource Descriptors) */
674 SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table,
677 while ((SubOffset < SubTable->Length) &&
678 ((Offset + SubOffset) < Table->Length))
681 Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubTable,
682 SubSubTable->Length, AcpiDmTableInfoCsrt2);
683 if (ACPI_FAILURE (Status))
688 SubSubOffset = sizeof (ACPI_CSRT_DESCRIPTOR);
690 /* Resource-specific info buffer */
692 InfoLength = SubSubTable->Length - SubSubOffset;
694 AcpiDmDumpBuffer (SubSubTable, SubSubOffset, InfoLength,
695 Offset + SubOffset + SubSubOffset, "ResourceInfo");
696 SubSubOffset += InfoLength;
698 /* Point to next sub-subtable */
700 SubOffset += SubSubTable->Length;
701 SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubTable,
702 SubSubTable->Length);
705 /* Point to next subtable */
707 Offset += SubTable->Length;
708 SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, SubTable,
714 /*******************************************************************************
716 * FUNCTION: AcpiDmDumpDbg2
718 * PARAMETERS: Table - A DBG2 table
722 * DESCRIPTION: Format the contents of a DBG2. This table type consists
723 * of an open-ended number of subtables.
725 ******************************************************************************/
729 ACPI_TABLE_HEADER *Table)
732 ACPI_DBG2_DEVICE *SubTable;
733 UINT32 Length = Table->Length;
734 UINT32 Offset = sizeof (ACPI_TABLE_DBG2);
737 UINT32 AbsoluteOffset;
743 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDbg2);
744 if (ACPI_FAILURE (Status))
751 SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset);
752 while (Offset < Table->Length)
755 Status = AcpiDmDumpTable (Length, Offset, SubTable,
756 SubTable->Length, AcpiDmTableInfoDbg2Device);
757 if (ACPI_FAILURE (Status))
762 /* Dump the BaseAddress array */
764 for (i = 0; i < SubTable->RegisterCount; i++)
766 ArrayOffset = SubTable->BaseAddressOffset +
767 (sizeof (ACPI_GENERIC_ADDRESS) * i);
768 AbsoluteOffset = Offset + ArrayOffset;
769 Array = (UINT8 *) SubTable + ArrayOffset;
771 Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
772 SubTable->Length, AcpiDmTableInfoDbg2Addr);
773 if (ACPI_FAILURE (Status))
779 /* Dump the AddressSize array */
781 for (i = 0; i < SubTable->RegisterCount; i++)
783 ArrayOffset = SubTable->AddressSizeOffset +
784 (sizeof (UINT32) * i);
785 AbsoluteOffset = Offset + ArrayOffset;
786 Array = (UINT8 *) SubTable + ArrayOffset;
788 Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
789 SubTable->Length, AcpiDmTableInfoDbg2Size);
790 if (ACPI_FAILURE (Status))
796 /* Dump the Namestring (required) */
799 ArrayOffset = SubTable->NamepathOffset;
800 AbsoluteOffset = Offset + ArrayOffset;
801 Array = (UINT8 *) SubTable + ArrayOffset;
803 Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
804 SubTable->Length, AcpiDmTableInfoDbg2Name);
805 if (ACPI_FAILURE (Status))
810 /* Dump the OemData (optional) */
812 if (SubTable->OemDataOffset)
814 AcpiDmDumpBuffer (SubTable, SubTable->OemDataOffset, SubTable->OemDataLength,
815 Offset + SubTable->OemDataOffset, "OEM Data");
818 /* Point to next subtable */
820 Offset += SubTable->Length;
821 SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, SubTable,
827 /*******************************************************************************
829 * FUNCTION: AcpiDmDumpDmar
831 * PARAMETERS: Table - A DMAR table
835 * DESCRIPTION: Format the contents of a DMAR. This table type consists
836 * of an open-ended number of subtables.
838 ******************************************************************************/
843 ACPI_TABLE_HEADER *Table)
846 ACPI_DMAR_HEADER *SubTable;
847 UINT32 Length = Table->Length;
848 UINT32 Offset = sizeof (ACPI_TABLE_DMAR);
849 ACPI_DMTABLE_INFO *InfoTable;
850 ACPI_DMAR_DEVICE_SCOPE *ScopeTable;
858 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDmar);
859 if (ACPI_FAILURE (Status))
866 SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset);
867 while (Offset < Table->Length)
869 /* Common subtable header */
872 Status = AcpiDmDumpTable (Length, Offset, SubTable,
873 SubTable->Length, AcpiDmTableInfoDmarHdr);
874 if (ACPI_FAILURE (Status))
880 switch (SubTable->Type)
882 case ACPI_DMAR_TYPE_HARDWARE_UNIT:
884 InfoTable = AcpiDmTableInfoDmar0;
885 ScopeOffset = sizeof (ACPI_DMAR_HARDWARE_UNIT);
888 case ACPI_DMAR_TYPE_RESERVED_MEMORY:
890 InfoTable = AcpiDmTableInfoDmar1;
891 ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY);
894 case ACPI_DMAR_TYPE_ROOT_ATS:
896 InfoTable = AcpiDmTableInfoDmar2;
897 ScopeOffset = sizeof (ACPI_DMAR_ATSR);
900 case ACPI_DMAR_TYPE_HARDWARE_AFFINITY:
902 InfoTable = AcpiDmTableInfoDmar3;
903 ScopeOffset = sizeof (ACPI_DMAR_RHSA);
906 case ACPI_DMAR_TYPE_NAMESPACE:
908 InfoTable = AcpiDmTableInfoDmar4;
909 ScopeOffset = sizeof (ACPI_DMAR_ANDD);
914 AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n", SubTable->Type);
918 Status = AcpiDmDumpTable (Length, Offset, SubTable,
919 SubTable->Length, InfoTable);
920 if (ACPI_FAILURE (Status))
926 * Dump the optional device scope entries
928 if ((SubTable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
929 (SubTable->Type == ACPI_DMAR_TYPE_NAMESPACE))
931 /* These types do not support device scopes */
936 ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, SubTable, ScopeOffset);
937 while (ScopeOffset < SubTable->Length)
940 Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable,
941 ScopeTable->Length, AcpiDmTableInfoDmarScope);
942 if (ACPI_FAILURE (Status))
948 /* Dump the PCI Path entries for this device scope */
950 PathOffset = sizeof (ACPI_DMAR_DEVICE_SCOPE); /* Path entries start at this offset */
952 PciPath = ACPI_ADD_PTR (UINT8, ScopeTable,
953 sizeof (ACPI_DMAR_DEVICE_SCOPE));
955 while (PathOffset < ScopeTable->Length)
957 AcpiDmLineHeader ((PathOffset + ScopeOffset + Offset), 2, "PCI Path");
958 AcpiOsPrintf ("%2.2X,%2.2X\n", PciPath[0], PciPath[1]);
960 /* Point to next PCI Path entry */
967 /* Point to next device scope entry */
969 ScopeOffset += ScopeTable->Length;
970 ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE,
971 ScopeTable, ScopeTable->Length);
975 /* Point to next subtable */
977 Offset += SubTable->Length;
978 SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, SubTable, SubTable->Length);
983 /*******************************************************************************
985 * FUNCTION: AcpiDmDumpEinj
987 * PARAMETERS: Table - A EINJ table
991 * DESCRIPTION: Format the contents of a EINJ. This table type consists
992 * of an open-ended number of subtables.
994 ******************************************************************************/
998 ACPI_TABLE_HEADER *Table)
1001 ACPI_WHEA_HEADER *SubTable;
1002 UINT32 Length = Table->Length;
1003 UINT32 Offset = sizeof (ACPI_TABLE_EINJ);
1008 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoEinj);
1009 if (ACPI_FAILURE (Status))
1016 SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
1017 while (Offset < Table->Length)
1019 AcpiOsPrintf ("\n");
1020 Status = AcpiDmDumpTable (Length, Offset, SubTable,
1021 sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoEinj0);
1022 if (ACPI_FAILURE (Status))
1027 /* Point to next subtable (each subtable is of fixed length) */
1029 Offset += sizeof (ACPI_WHEA_HEADER);
1030 SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable,
1031 sizeof (ACPI_WHEA_HEADER));
1036 /*******************************************************************************
1038 * FUNCTION: AcpiDmDumpErst
1040 * PARAMETERS: Table - A ERST table
1044 * DESCRIPTION: Format the contents of a ERST. This table type consists
1045 * of an open-ended number of subtables.
1047 ******************************************************************************/
1051 ACPI_TABLE_HEADER *Table)
1054 ACPI_WHEA_HEADER *SubTable;
1055 UINT32 Length = Table->Length;
1056 UINT32 Offset = sizeof (ACPI_TABLE_ERST);
1061 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoErst);
1062 if (ACPI_FAILURE (Status))
1069 SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
1070 while (Offset < Table->Length)
1072 AcpiOsPrintf ("\n");
1073 Status = AcpiDmDumpTable (Length, Offset, SubTable,
1074 sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoErst0);
1075 if (ACPI_FAILURE (Status))
1080 /* Point to next subtable (each subtable is of fixed length) */
1082 Offset += sizeof (ACPI_WHEA_HEADER);
1083 SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable,
1084 sizeof (ACPI_WHEA_HEADER));
1089 /*******************************************************************************
1091 * FUNCTION: AcpiDmDumpFpdt
1093 * PARAMETERS: Table - A FPDT table
1097 * DESCRIPTION: Format the contents of a FPDT. This table type consists
1098 * of an open-ended number of subtables.
1100 ******************************************************************************/
1104 ACPI_TABLE_HEADER *Table)
1107 ACPI_FPDT_HEADER *SubTable;
1108 UINT32 Length = Table->Length;
1109 UINT32 Offset = sizeof (ACPI_TABLE_FPDT);
1110 ACPI_DMTABLE_INFO *InfoTable;
1113 /* There is no main table (other than the standard ACPI header) */
1117 SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset);
1118 while (Offset < Table->Length)
1120 /* Common subtable header */
1122 AcpiOsPrintf ("\n");
1123 Status = AcpiDmDumpTable (Length, Offset, SubTable,
1124 SubTable->Length, AcpiDmTableInfoFpdtHdr);
1125 if (ACPI_FAILURE (Status))
1130 switch (SubTable->Type)
1132 case ACPI_FPDT_TYPE_BOOT:
1134 InfoTable = AcpiDmTableInfoFpdt0;
1137 case ACPI_FPDT_TYPE_S3PERF:
1139 InfoTable = AcpiDmTableInfoFpdt1;
1144 AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n", SubTable->Type);
1146 /* Attempt to continue */
1148 if (!SubTable->Length)
1150 AcpiOsPrintf ("Invalid zero length subtable\n");
1156 Status = AcpiDmDumpTable (Length, Offset, SubTable,
1157 SubTable->Length, InfoTable);
1158 if (ACPI_FAILURE (Status))
1164 /* Point to next subtable */
1166 Offset += SubTable->Length;
1167 SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, SubTable, SubTable->Length);
1172 /*******************************************************************************
1174 * FUNCTION: AcpiDmDumpGtdt
1176 * PARAMETERS: Table - A GTDT table
1180 * DESCRIPTION: Format the contents of a GTDT. This table type consists
1181 * of an open-ended number of subtables.
1183 ******************************************************************************/
1187 ACPI_TABLE_HEADER *Table)
1190 ACPI_GTDT_HEADER *SubTable;
1191 UINT32 Length = Table->Length;
1192 UINT32 Offset = sizeof (ACPI_TABLE_GTDT);
1193 ACPI_DMTABLE_INFO *InfoTable;
1194 UINT32 SubTableLength;
1196 ACPI_GTDT_TIMER_ENTRY *GtxTable;
1201 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt);
1202 if (ACPI_FAILURE (Status))
1209 SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset);
1210 while (Offset < Table->Length)
1212 /* Common subtable header */
1214 AcpiOsPrintf ("\n");
1215 Status = AcpiDmDumpTable (Length, Offset, SubTable,
1216 SubTable->Length, AcpiDmTableInfoGtdtHdr);
1217 if (ACPI_FAILURE (Status))
1223 switch (SubTable->Type)
1225 case ACPI_GTDT_TYPE_TIMER_BLOCK:
1227 SubTableLength = sizeof (ACPI_GTDT_TIMER_BLOCK);
1228 GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
1229 SubTable))->TimerCount;
1231 InfoTable = AcpiDmTableInfoGtdt0;
1234 case ACPI_GTDT_TYPE_WATCHDOG:
1236 SubTableLength = sizeof (ACPI_GTDT_WATCHDOG);
1238 InfoTable = AcpiDmTableInfoGtdt1;
1243 /* Cannot continue on unknown type - no length */
1245 AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n", SubTable->Type);
1249 Status = AcpiDmDumpTable (Length, Offset, SubTable,
1250 SubTable->Length, InfoTable);
1251 if (ACPI_FAILURE (Status))
1256 /* Point to end of current subtable (each subtable above is of fixed length) */
1258 Offset += SubTableLength;
1260 /* If there are any Gt Timer Blocks from above, dump them now */
1264 GtxTable = ACPI_ADD_PTR (ACPI_GTDT_TIMER_ENTRY, SubTable, SubTableLength);
1265 SubTableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY);
1269 AcpiOsPrintf ("\n");
1270 Status = AcpiDmDumpTable (Length, Offset, GtxTable,
1271 sizeof (ACPI_GTDT_TIMER_ENTRY), AcpiDmTableInfoGtdt0a);
1272 if (ACPI_FAILURE (Status))
1276 Offset += sizeof (ACPI_GTDT_TIMER_ENTRY);
1282 /* Point to next subtable */
1284 SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, SubTable, SubTableLength);
1289 /*******************************************************************************
1291 * FUNCTION: AcpiDmDumpHest
1293 * PARAMETERS: Table - A HEST table
1297 * DESCRIPTION: Format the contents of a HEST. This table type consists
1298 * of an open-ended number of subtables.
1300 ******************************************************************************/
1304 ACPI_TABLE_HEADER *Table)
1307 ACPI_HEST_HEADER *SubTable;
1308 UINT32 Length = Table->Length;
1309 UINT32 Offset = sizeof (ACPI_TABLE_HEST);
1310 ACPI_DMTABLE_INFO *InfoTable;
1311 UINT32 SubTableLength;
1313 ACPI_HEST_IA_ERROR_BANK *BankTable;
1318 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHest);
1319 if (ACPI_FAILURE (Status))
1326 SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset);
1327 while (Offset < Table->Length)
1330 switch (SubTable->Type)
1332 case ACPI_HEST_TYPE_IA32_CHECK:
1334 InfoTable = AcpiDmTableInfoHest0;
1335 SubTableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK);
1336 BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK,
1337 SubTable))->NumHardwareBanks;
1340 case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK:
1342 InfoTable = AcpiDmTableInfoHest1;
1343 SubTableLength = sizeof (ACPI_HEST_IA_CORRECTED);
1344 BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED,
1345 SubTable))->NumHardwareBanks;
1348 case ACPI_HEST_TYPE_IA32_NMI:
1350 InfoTable = AcpiDmTableInfoHest2;
1351 SubTableLength = sizeof (ACPI_HEST_IA_NMI);
1354 case ACPI_HEST_TYPE_AER_ROOT_PORT:
1356 InfoTable = AcpiDmTableInfoHest6;
1357 SubTableLength = sizeof (ACPI_HEST_AER_ROOT);
1360 case ACPI_HEST_TYPE_AER_ENDPOINT:
1362 InfoTable = AcpiDmTableInfoHest7;
1363 SubTableLength = sizeof (ACPI_HEST_AER);
1366 case ACPI_HEST_TYPE_AER_BRIDGE:
1368 InfoTable = AcpiDmTableInfoHest8;
1369 SubTableLength = sizeof (ACPI_HEST_AER_BRIDGE);
1372 case ACPI_HEST_TYPE_GENERIC_ERROR:
1374 InfoTable = AcpiDmTableInfoHest9;
1375 SubTableLength = sizeof (ACPI_HEST_GENERIC);
1380 /* Cannot continue on unknown type - no length */
1382 AcpiOsPrintf ("\n**** Unknown HEST subtable type 0x%X\n", SubTable->Type);
1386 AcpiOsPrintf ("\n");
1387 Status = AcpiDmDumpTable (Length, Offset, SubTable,
1388 SubTableLength, InfoTable);
1389 if (ACPI_FAILURE (Status))
1394 /* Point to end of current subtable (each subtable above is of fixed length) */
1396 Offset += SubTableLength;
1398 /* If there are any (fixed-length) Error Banks from above, dump them now */
1402 BankTable = ACPI_ADD_PTR (ACPI_HEST_IA_ERROR_BANK, SubTable, SubTableLength);
1403 SubTableLength += BankCount * sizeof (ACPI_HEST_IA_ERROR_BANK);
1407 AcpiOsPrintf ("\n");
1408 Status = AcpiDmDumpTable (Length, Offset, BankTable,
1409 sizeof (ACPI_HEST_IA_ERROR_BANK), AcpiDmTableInfoHestBank);
1410 if (ACPI_FAILURE (Status))
1414 Offset += sizeof (ACPI_HEST_IA_ERROR_BANK);
1420 /* Point to next subtable */
1422 SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, SubTable, SubTableLength);
1427 /*******************************************************************************
1429 * FUNCTION: AcpiDmDumpIvrs
1431 * PARAMETERS: Table - A IVRS table
1435 * DESCRIPTION: Format the contents of a IVRS
1437 ******************************************************************************/
1439 static UINT8 EntrySizes[] = {4,8,16,32};
1443 ACPI_TABLE_HEADER *Table)
1446 UINT32 Offset = sizeof (ACPI_TABLE_IVRS);
1450 ACPI_IVRS_DE_HEADER *DeviceEntry;
1451 ACPI_IVRS_HEADER *SubTable;
1452 ACPI_DMTABLE_INFO *InfoTable;
1457 Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs);
1458 if (ACPI_FAILURE (Status))
1465 SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
1466 while (Offset < Table->Length)
1468 /* Common subtable header */
1470 AcpiOsPrintf ("\n");
1471 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
1472 SubTable->Length, AcpiDmTableInfoIvrsHdr);
1473 if (ACPI_FAILURE (Status))
1478 switch (SubTable->Type)
1480 case ACPI_IVRS_TYPE_HARDWARE:
1482 InfoTable = AcpiDmTableInfoIvrs0;
1485 case ACPI_IVRS_TYPE_MEMORY1:
1486 case ACPI_IVRS_TYPE_MEMORY2:
1487 case ACPI_IVRS_TYPE_MEMORY3:
1489 InfoTable = AcpiDmTableInfoIvrs1;
1494 AcpiOsPrintf ("\n**** Unknown IVRS subtable type 0x%X\n",
1497 /* Attempt to continue */
1499 if (!SubTable->Length)
1501 AcpiOsPrintf ("Invalid zero length subtable\n");
1507 /* Dump the subtable */
1509 AcpiOsPrintf ("\n");
1510 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
1511 SubTable->Length, InfoTable);
1512 if (ACPI_FAILURE (Status))
1517 /* The hardware subtable can contain multiple device entries */
1519 if (SubTable->Type == ACPI_IVRS_TYPE_HARDWARE)
1521 EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE);
1522 DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, SubTable,
1523 sizeof (ACPI_IVRS_HARDWARE));
1525 while (EntryOffset < (Offset + SubTable->Length))
1527 AcpiOsPrintf ("\n");
1529 * Upper 2 bits of Type encode the length of the device entry
1533 * 10 = 16 byte - currently no entries defined
1534 * 11 = 32 byte - currently no entries defined
1536 EntryType = DeviceEntry->Type;
1537 EntryLength = EntrySizes [EntryType >> 6];
1541 /* 4-byte device entries */
1543 case ACPI_IVRS_TYPE_PAD4:
1544 case ACPI_IVRS_TYPE_ALL:
1545 case ACPI_IVRS_TYPE_SELECT:
1546 case ACPI_IVRS_TYPE_START:
1547 case ACPI_IVRS_TYPE_END:
1549 InfoTable = AcpiDmTableInfoIvrs4;
1552 /* 8-byte entries, type A */
1554 case ACPI_IVRS_TYPE_ALIAS_SELECT:
1555 case ACPI_IVRS_TYPE_ALIAS_START:
1557 InfoTable = AcpiDmTableInfoIvrs8a;
1560 /* 8-byte entries, type B */
1562 case ACPI_IVRS_TYPE_PAD8:
1563 case ACPI_IVRS_TYPE_EXT_SELECT:
1564 case ACPI_IVRS_TYPE_EXT_START:
1566 InfoTable = AcpiDmTableInfoIvrs8b;
1569 /* 8-byte entries, type C */
1571 case ACPI_IVRS_TYPE_SPECIAL:
1573 InfoTable = AcpiDmTableInfoIvrs8c;
1577 InfoTable = AcpiDmTableInfoIvrs4;
1579 "\n**** Unknown IVRS device entry type/length: "
1580 "0x%.2X/0x%X at offset 0x%.4X: (header below)\n",
1581 EntryType, EntryLength, EntryOffset);
1585 /* Dump the Device Entry */
1587 Status = AcpiDmDumpTable (Table->Length, EntryOffset,
1588 DeviceEntry, EntryLength, InfoTable);
1590 EntryOffset += EntryLength;
1591 DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry,
1597 /* Point to next subtable */
1599 Offset += SubTable->Length;
1600 SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, SubTable, SubTable->Length);
1605 /*******************************************************************************
1607 * FUNCTION: AcpiDmDumpLpit
1609 * PARAMETERS: Table - A LPIT table
1613 * DESCRIPTION: Format the contents of a LPIT. This table type consists
1614 * of an open-ended number of subtables. Note: There are no
1615 * entries in the main table. An LPIT consists of the table
1616 * header and then subtables only.
1618 ******************************************************************************/
1622 ACPI_TABLE_HEADER *Table)
1625 ACPI_LPIT_HEADER *SubTable;
1626 UINT32 Length = Table->Length;
1627 UINT32 Offset = sizeof (ACPI_TABLE_LPIT);
1628 ACPI_DMTABLE_INFO *InfoTable;
1629 UINT32 SubTableLength;
1634 SubTable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset);
1635 while (Offset < Table->Length)
1637 /* Common subtable header */
1639 Status = AcpiDmDumpTable (Length, Offset, SubTable,
1640 sizeof (ACPI_LPIT_HEADER), AcpiDmTableInfoLpitHdr);
1641 if (ACPI_FAILURE (Status))
1646 switch (SubTable->Type)
1648 case ACPI_LPIT_TYPE_NATIVE_CSTATE:
1650 InfoTable = AcpiDmTableInfoLpit0;
1651 SubTableLength = sizeof (ACPI_LPIT_NATIVE);
1654 case ACPI_LPIT_TYPE_SIMPLE_IO:
1656 InfoTable = AcpiDmTableInfoLpit1;
1657 SubTableLength = sizeof (ACPI_LPIT_IO);
1662 /* Cannot continue on unknown type - no length */
1664 AcpiOsPrintf ("\n**** Unknown LPIT subtable type 0x%X\n", SubTable->Type);
1668 Status = AcpiDmDumpTable (Length, Offset, SubTable,
1669 SubTableLength, InfoTable);
1670 if (ACPI_FAILURE (Status))
1674 AcpiOsPrintf ("\n");
1676 /* Point to next subtable */
1678 Offset += SubTableLength;
1679 SubTable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, SubTable, SubTableLength);
1684 /*******************************************************************************
1686 * FUNCTION: AcpiDmDumpMadt
1688 * PARAMETERS: Table - A MADT table
1692 * DESCRIPTION: Format the contents of a MADT. This table type consists
1693 * of an open-ended number of subtables.
1695 ******************************************************************************/
1699 ACPI_TABLE_HEADER *Table)
1702 ACPI_SUBTABLE_HEADER *SubTable;
1703 UINT32 Length = Table->Length;
1704 UINT32 Offset = sizeof (ACPI_TABLE_MADT);
1705 ACPI_DMTABLE_INFO *InfoTable;
1710 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMadt);
1711 if (ACPI_FAILURE (Status))
1718 SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
1719 while (Offset < Table->Length)
1721 /* Common subtable header */
1723 AcpiOsPrintf ("\n");
1724 Status = AcpiDmDumpTable (Length, Offset, SubTable,
1725 SubTable->Length, AcpiDmTableInfoMadtHdr);
1726 if (ACPI_FAILURE (Status))
1731 switch (SubTable->Type)
1733 case ACPI_MADT_TYPE_LOCAL_APIC:
1735 InfoTable = AcpiDmTableInfoMadt0;
1738 case ACPI_MADT_TYPE_IO_APIC:
1740 InfoTable = AcpiDmTableInfoMadt1;
1743 case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE:
1745 InfoTable = AcpiDmTableInfoMadt2;
1748 case ACPI_MADT_TYPE_NMI_SOURCE:
1750 InfoTable = AcpiDmTableInfoMadt3;
1753 case ACPI_MADT_TYPE_LOCAL_APIC_NMI:
1755 InfoTable = AcpiDmTableInfoMadt4;
1758 case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE:
1760 InfoTable = AcpiDmTableInfoMadt5;
1763 case ACPI_MADT_TYPE_IO_SAPIC:
1765 InfoTable = AcpiDmTableInfoMadt6;
1768 case ACPI_MADT_TYPE_LOCAL_SAPIC:
1770 InfoTable = AcpiDmTableInfoMadt7;
1773 case ACPI_MADT_TYPE_INTERRUPT_SOURCE:
1775 InfoTable = AcpiDmTableInfoMadt8;
1778 case ACPI_MADT_TYPE_LOCAL_X2APIC:
1780 InfoTable = AcpiDmTableInfoMadt9;
1783 case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI:
1785 InfoTable = AcpiDmTableInfoMadt10;
1788 case ACPI_MADT_TYPE_GENERIC_INTERRUPT:
1790 InfoTable = AcpiDmTableInfoMadt11;
1793 case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR:
1795 InfoTable = AcpiDmTableInfoMadt12;
1798 case ACPI_MADT_TYPE_GENERIC_MSI_FRAME:
1800 InfoTable = AcpiDmTableInfoMadt13;
1803 case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR:
1805 InfoTable = AcpiDmTableInfoMadt14;
1810 AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n", SubTable->Type);
1812 /* Attempt to continue */
1814 if (!SubTable->Length)
1816 AcpiOsPrintf ("Invalid zero length subtable\n");
1822 Status = AcpiDmDumpTable (Length, Offset, SubTable,
1823 SubTable->Length, InfoTable);
1824 if (ACPI_FAILURE (Status))
1830 /* Point to next subtable */
1832 Offset += SubTable->Length;
1833 SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, SubTable->Length);
1838 /*******************************************************************************
1840 * FUNCTION: AcpiDmDumpMcfg
1842 * PARAMETERS: Table - A MCFG Table
1846 * DESCRIPTION: Format the contents of a MCFG table
1848 ******************************************************************************/
1852 ACPI_TABLE_HEADER *Table)
1855 UINT32 Offset = sizeof (ACPI_TABLE_MCFG);
1856 ACPI_MCFG_ALLOCATION *SubTable;
1861 Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg);
1862 if (ACPI_FAILURE (Status))
1869 SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset);
1870 while (Offset < Table->Length)
1872 if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length)
1874 AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n",
1875 sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length));
1879 AcpiOsPrintf ("\n");
1880 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
1881 sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0);
1882 if (ACPI_FAILURE (Status))
1887 /* Point to next subtable (each subtable is of fixed length) */
1889 Offset += sizeof (ACPI_MCFG_ALLOCATION);
1890 SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, SubTable,
1891 sizeof (ACPI_MCFG_ALLOCATION));
1896 /*******************************************************************************
1898 * FUNCTION: AcpiDmDumpMpst
1900 * PARAMETERS: Table - A MPST Table
1904 * DESCRIPTION: Format the contents of a MPST table
1906 ******************************************************************************/
1910 ACPI_TABLE_HEADER *Table)
1913 UINT32 Offset = sizeof (ACPI_TABLE_MPST);
1914 ACPI_MPST_POWER_NODE *SubTable0;
1915 ACPI_MPST_POWER_STATE *SubTable0A;
1916 ACPI_MPST_COMPONENT *SubTable0B;
1917 ACPI_MPST_DATA_HDR *SubTable1;
1918 ACPI_MPST_POWER_DATA *SubTable2;
1919 UINT16 SubtableCount;
1920 UINT32 PowerStateCount;
1921 UINT32 ComponentCount;
1926 Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMpst);
1927 if (ACPI_FAILURE (Status))
1932 /* Subtable: Memory Power Node(s) */
1934 SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount;
1935 SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset);
1937 while ((Offset < Table->Length) && SubtableCount)
1939 AcpiOsPrintf ("\n");
1940 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0,
1941 sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0);
1942 if (ACPI_FAILURE (Status))
1947 /* Extract the sub-subtable counts */
1949 PowerStateCount = SubTable0->NumPowerStates;
1950 ComponentCount = SubTable0->NumPhysicalComponents;
1951 Offset += sizeof (ACPI_MPST_POWER_NODE);
1953 /* Sub-subtables - Memory Power State Structure(s) */
1955 SubTable0A = ACPI_ADD_PTR (ACPI_MPST_POWER_STATE, SubTable0,
1956 sizeof (ACPI_MPST_POWER_NODE));
1958 while (PowerStateCount)
1960 AcpiOsPrintf ("\n");
1961 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0A,
1962 sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A);
1963 if (ACPI_FAILURE (Status))
1970 Offset += sizeof (ACPI_MPST_POWER_STATE);
1973 /* Sub-subtables - Physical Component ID Structure(s) */
1975 SubTable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, SubTable0A);
1979 AcpiOsPrintf ("\n");
1982 while (ComponentCount)
1984 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0B,
1985 sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B);
1986 if (ACPI_FAILURE (Status))
1993 Offset += sizeof (ACPI_MPST_COMPONENT);
1996 /* Point to next Memory Power Node subtable */
1999 SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, SubTable0,
2000 sizeof (ACPI_MPST_POWER_NODE) +
2001 (sizeof (ACPI_MPST_POWER_STATE) * SubTable0->NumPowerStates) +
2002 (sizeof (ACPI_MPST_COMPONENT) * SubTable0->NumPhysicalComponents));
2005 /* Subtable: Count of Memory Power State Characteristic structures */
2007 AcpiOsPrintf ("\n");
2008 SubTable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, SubTable0);
2009 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable1,
2010 sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1);
2011 if (ACPI_FAILURE (Status))
2016 SubtableCount = SubTable1->CharacteristicsCount;
2017 Offset += sizeof (ACPI_MPST_DATA_HDR);
2019 /* Subtable: Memory Power State Characteristics structure(s) */
2021 SubTable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, SubTable1, sizeof (ACPI_MPST_DATA_HDR));
2023 while ((Offset < Table->Length) && SubtableCount)
2025 AcpiOsPrintf ("\n");
2026 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable2,
2027 sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2);
2028 if (ACPI_FAILURE (Status))
2035 Offset += sizeof (ACPI_MPST_POWER_DATA);
2040 /*******************************************************************************
2042 * FUNCTION: AcpiDmDumpMsct
2044 * PARAMETERS: Table - A MSCT table
2048 * DESCRIPTION: Format the contents of a MSCT
2050 ******************************************************************************/
2054 ACPI_TABLE_HEADER *Table)
2057 UINT32 Offset = sizeof (ACPI_TABLE_MSCT);
2058 ACPI_MSCT_PROXIMITY *SubTable;
2063 Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct);
2064 if (ACPI_FAILURE (Status))
2071 SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset);
2072 while (Offset < Table->Length)
2074 /* Common subtable header */
2076 AcpiOsPrintf ("\n");
2077 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
2078 sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0);
2079 if (ACPI_FAILURE (Status))
2084 /* Point to next subtable */
2086 Offset += sizeof (ACPI_MSCT_PROXIMITY);
2087 SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, SubTable, sizeof (ACPI_MSCT_PROXIMITY));
2092 /*******************************************************************************
2094 * FUNCTION: AcpiDmDumpMtmr
2096 * PARAMETERS: Table - A MTMR table
2100 * DESCRIPTION: Format the contents of a MTMR
2102 ******************************************************************************/
2106 ACPI_TABLE_HEADER *Table)
2109 UINT32 Offset = sizeof (ACPI_TABLE_MTMR);
2110 ACPI_MTMR_ENTRY *SubTable;
2115 Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMtmr);
2116 if (ACPI_FAILURE (Status))
2123 SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset);
2124 while (Offset < Table->Length)
2126 /* Common subtable header */
2128 AcpiOsPrintf ("\n");
2129 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
2130 sizeof (ACPI_MTMR_ENTRY), AcpiDmTableInfoMtmr0);
2131 if (ACPI_FAILURE (Status))
2136 /* Point to next subtable */
2138 Offset += sizeof (ACPI_MTMR_ENTRY);
2139 SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, SubTable, sizeof (ACPI_MTMR_ENTRY));
2144 /*******************************************************************************
2146 * FUNCTION: AcpiDmDumpPcct
2148 * PARAMETERS: Table - A PCCT table
2152 * DESCRIPTION: Format the contents of a PCCT. This table type consists
2153 * of an open-ended number of subtables.
2155 ******************************************************************************/
2159 ACPI_TABLE_HEADER *Table)
2162 ACPI_PCCT_SUBSPACE *SubTable;
2163 ACPI_DMTABLE_INFO *InfoTable;
2164 UINT32 Length = Table->Length;
2165 UINT32 Offset = sizeof (ACPI_TABLE_PCCT);
2170 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct);
2171 if (ACPI_FAILURE (Status))
2178 SubTable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset);
2179 while (Offset < Table->Length)
2181 /* Common subtable header */
2183 AcpiOsPrintf ("\n");
2184 Status = AcpiDmDumpTable (Length, Offset, SubTable,
2185 SubTable->Header.Length, AcpiDmTableInfoPcctHdr);
2186 if (ACPI_FAILURE (Status))
2191 switch (SubTable->Header.Type)
2193 case ACPI_PCCT_TYPE_GENERIC_SUBSPACE:
2195 InfoTable = AcpiDmTableInfoPcct0;
2198 case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE:
2200 InfoTable = AcpiDmTableInfoPcct1;
2206 "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n",
2207 SubTable->Header.Type);
2211 AcpiOsPrintf ("\n");
2212 Status = AcpiDmDumpTable (Length, Offset, SubTable,
2213 SubTable->Header.Length, InfoTable);
2214 if (ACPI_FAILURE (Status))
2219 /* Point to next subtable */
2221 Offset += SubTable->Header.Length;
2222 SubTable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, SubTable,
2223 SubTable->Header.Length);
2228 /*******************************************************************************
2230 * FUNCTION: AcpiDmDumpPmtt
2232 * PARAMETERS: Table - A PMTT table
2236 * DESCRIPTION: Format the contents of a PMTT. This table type consists
2237 * of an open-ended number of subtables.
2239 ******************************************************************************/
2243 ACPI_TABLE_HEADER *Table)
2246 ACPI_PMTT_HEADER *SubTable;
2247 ACPI_PMTT_HEADER *MemSubTable;
2248 ACPI_PMTT_HEADER *DimmSubTable;
2249 ACPI_PMTT_DOMAIN *DomainArray;
2250 UINT32 Length = Table->Length;
2251 UINT32 Offset = sizeof (ACPI_TABLE_PMTT);
2254 UINT32 DomainOffset;
2260 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt);
2261 if (ACPI_FAILURE (Status))
2268 SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset);
2269 while (Offset < Table->Length)
2271 /* Common subtable header */
2273 AcpiOsPrintf ("\n");
2274 Status = AcpiDmDumpTable (Length, Offset, SubTable,
2275 SubTable->Length, AcpiDmTableInfoPmttHdr);
2276 if (ACPI_FAILURE (Status))
2281 /* Only Socket subtables are expected at this level */
2283 if (SubTable->Type != ACPI_PMTT_TYPE_SOCKET)
2286 "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
2291 /* Dump the fixed-length portion of the subtable */
2293 Status = AcpiDmDumpTable (Length, Offset, SubTable,
2294 SubTable->Length, AcpiDmTableInfoPmtt0);
2295 if (ACPI_FAILURE (Status))
2300 /* Walk the memory controller subtables */
2302 MemOffset = sizeof (ACPI_PMTT_SOCKET);
2303 MemSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, SubTable,
2304 sizeof (ACPI_PMTT_SOCKET));
2306 while (((Offset + MemOffset) < Table->Length) &&
2307 (MemOffset < SubTable->Length))
2309 /* Common subtable header */
2311 AcpiOsPrintf ("\n");
2312 Status = AcpiDmDumpTable (Length,
2313 Offset + MemOffset, MemSubTable,
2314 MemSubTable->Length, AcpiDmTableInfoPmttHdr);
2315 if (ACPI_FAILURE (Status))
2320 /* Only memory controller subtables are expected at this level */
2322 if (MemSubTable->Type != ACPI_PMTT_TYPE_CONTROLLER)
2325 "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
2330 /* Dump the fixed-length portion of the controller subtable */
2332 Status = AcpiDmDumpTable (Length,
2333 Offset + MemOffset, MemSubTable,
2334 MemSubTable->Length, AcpiDmTableInfoPmtt1);
2335 if (ACPI_FAILURE (Status))
2340 /* Walk the variable count of proximity domains */
2342 DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubTable)->DomainCount;
2343 DomainOffset = sizeof (ACPI_PMTT_CONTROLLER);
2344 DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubTable,
2345 sizeof (ACPI_PMTT_CONTROLLER));
2347 while (((Offset + MemOffset + DomainOffset) < Table->Length) &&
2348 ((MemOffset + DomainOffset) < SubTable->Length) &&
2351 Status = AcpiDmDumpTable (Length,
2352 Offset + MemOffset + DomainOffset, DomainArray,
2353 sizeof (ACPI_PMTT_DOMAIN), AcpiDmTableInfoPmtt1a);
2354 if (ACPI_FAILURE (Status))
2359 DomainOffset += sizeof (ACPI_PMTT_DOMAIN);
2367 "\n**** DomainCount exceeds subtable length\n\n");
2370 /* Walk the physical component (DIMM) subtables */
2372 DimmOffset = DomainOffset;
2373 DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubTable,
2376 while (((Offset + MemOffset + DimmOffset) < Table->Length) &&
2377 (DimmOffset < MemSubTable->Length))
2379 /* Common subtable header */
2381 AcpiOsPrintf ("\n");
2382 Status = AcpiDmDumpTable (Length,
2383 Offset + MemOffset + DimmOffset, DimmSubTable,
2384 DimmSubTable->Length, AcpiDmTableInfoPmttHdr);
2385 if (ACPI_FAILURE (Status))
2390 /* Only DIMM subtables are expected at this level */
2392 if (DimmSubTable->Type != ACPI_PMTT_TYPE_DIMM)
2395 "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
2396 DimmSubTable->Type);
2400 /* Dump the fixed-length DIMM subtable */
2402 Status = AcpiDmDumpTable (Length,
2403 Offset + MemOffset + DimmOffset, DimmSubTable,
2404 DimmSubTable->Length, AcpiDmTableInfoPmtt2);
2405 if (ACPI_FAILURE (Status))
2410 /* Point to next DIMM subtable */
2412 DimmOffset += DimmSubTable->Length;
2413 DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
2414 DimmSubTable, DimmSubTable->Length);
2417 /* Point to next Controller subtable */
2419 MemOffset += MemSubTable->Length;
2420 MemSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
2421 MemSubTable, MemSubTable->Length);
2424 /* Point to next Socket subtable */
2426 Offset += SubTable->Length;
2427 SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
2428 SubTable, SubTable->Length);
2433 /*******************************************************************************
2435 * FUNCTION: AcpiDmDumpS3pt
2437 * PARAMETERS: Table - A S3PT table
2439 * RETURN: Length of the table
2441 * DESCRIPTION: Format the contents of a S3PT
2443 ******************************************************************************/
2447 ACPI_TABLE_HEADER *Tables)
2450 UINT32 Offset = sizeof (ACPI_TABLE_S3PT);
2451 ACPI_S3PT_HEADER *SubTable;
2452 ACPI_DMTABLE_INFO *InfoTable;
2453 ACPI_TABLE_S3PT *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables);
2458 Status = AcpiDmDumpTable (Offset, 0, S3ptTable, 0, AcpiDmTableInfoS3pt);
2459 if (ACPI_FAILURE (Status))
2464 SubTable = ACPI_ADD_PTR (ACPI_S3PT_HEADER, S3ptTable, Offset);
2465 while (Offset < S3ptTable->Length)
2467 /* Common subtable header */
2469 AcpiOsPrintf ("\n");
2470 Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable,
2471 SubTable->Length, AcpiDmTableInfoS3ptHdr);
2472 if (ACPI_FAILURE (Status))
2477 switch (SubTable->Type)
2479 case ACPI_S3PT_TYPE_RESUME:
2481 InfoTable = AcpiDmTableInfoS3pt0;
2484 case ACPI_S3PT_TYPE_SUSPEND:
2486 InfoTable = AcpiDmTableInfoS3pt1;
2491 AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n", SubTable->Type);
2493 /* Attempt to continue */
2495 if (!SubTable->Length)
2497 AcpiOsPrintf ("Invalid zero length subtable\n");
2503 AcpiOsPrintf ("\n");
2504 Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable,
2505 SubTable->Length, InfoTable);
2506 if (ACPI_FAILURE (Status))
2512 /* Point to next subtable */
2514 Offset += SubTable->Length;
2515 SubTable = ACPI_ADD_PTR (ACPI_S3PT_HEADER, SubTable, SubTable->Length);
2518 return (S3ptTable->Length);
2522 /*******************************************************************************
2524 * FUNCTION: AcpiDmDumpSlic
2526 * PARAMETERS: Table - A SLIC table
2530 * DESCRIPTION: Format the contents of a SLIC
2532 ******************************************************************************/
2536 ACPI_TABLE_HEADER *Table)
2539 UINT32 Offset = sizeof (ACPI_TABLE_SLIC);
2540 ACPI_SLIC_HEADER *SubTable;
2541 ACPI_DMTABLE_INFO *InfoTable;
2544 /* There is no main SLIC table, only subtables */
2546 SubTable = ACPI_ADD_PTR (ACPI_SLIC_HEADER, Table, Offset);
2547 while (Offset < Table->Length)
2549 /* Common subtable header */
2551 AcpiOsPrintf ("\n");
2552 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
2553 SubTable->Length, AcpiDmTableInfoSlicHdr);
2554 if (ACPI_FAILURE (Status))
2559 switch (SubTable->Type)
2561 case ACPI_SLIC_TYPE_PUBLIC_KEY:
2563 InfoTable = AcpiDmTableInfoSlic0;
2566 case ACPI_SLIC_TYPE_WINDOWS_MARKER:
2568 InfoTable = AcpiDmTableInfoSlic1;
2573 AcpiOsPrintf ("\n**** Unknown SLIC subtable type 0x%X\n", SubTable->Type);
2575 /* Attempt to continue */
2577 if (!SubTable->Length)
2579 AcpiOsPrintf ("Invalid zero length subtable\n");
2585 AcpiOsPrintf ("\n");
2586 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
2587 SubTable->Length, InfoTable);
2588 if (ACPI_FAILURE (Status))
2594 /* Point to next subtable */
2596 Offset += SubTable->Length;
2597 SubTable = ACPI_ADD_PTR (ACPI_SLIC_HEADER, SubTable, SubTable->Length);
2602 /*******************************************************************************
2604 * FUNCTION: AcpiDmDumpSlit
2606 * PARAMETERS: Table - An SLIT
2610 * DESCRIPTION: Format the contents of a SLIT
2612 ******************************************************************************/
2616 ACPI_TABLE_HEADER *Table)
2628 Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit);
2629 if (ACPI_FAILURE (Status))
2634 /* Display the Locality NxN Matrix */
2636 Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount;
2637 Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]);
2638 Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry;
2640 for (i = 0; i < Localities; i++)
2642 /* Display one row of the matrix */
2644 AcpiDmLineHeader2 (Offset, Localities, "Locality", i);
2645 for (j = 0; j < Localities; j++)
2647 /* Check for beyond EOT */
2649 if (Offset >= Table->Length)
2651 AcpiOsPrintf ("\n**** Not enough room in table for all localities\n");
2655 AcpiOsPrintf ("%2.2X", Row[j]);
2658 /* Display up to 16 bytes per output row */
2660 if ((j+1) < Localities)
2664 if (j && (((j+1) % 16) == 0))
2666 AcpiOsPrintf ("\\\n"); /* With line continuation char */
2667 AcpiDmLineHeader (Offset, 0, NULL);
2672 /* Point to next row */
2674 AcpiOsPrintf ("\n");
2680 /*******************************************************************************
2682 * FUNCTION: AcpiDmDumpSrat
2684 * PARAMETERS: Table - A SRAT table
2688 * DESCRIPTION: Format the contents of a SRAT
2690 ******************************************************************************/
2694 ACPI_TABLE_HEADER *Table)
2697 UINT32 Offset = sizeof (ACPI_TABLE_SRAT);
2698 ACPI_SUBTABLE_HEADER *SubTable;
2699 ACPI_DMTABLE_INFO *InfoTable;
2704 Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat);
2705 if (ACPI_FAILURE (Status))
2712 SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
2713 while (Offset < Table->Length)
2715 /* Common subtable header */
2717 AcpiOsPrintf ("\n");
2718 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
2719 SubTable->Length, AcpiDmTableInfoSratHdr);
2720 if (ACPI_FAILURE (Status))
2725 switch (SubTable->Type)
2727 case ACPI_SRAT_TYPE_CPU_AFFINITY:
2729 InfoTable = AcpiDmTableInfoSrat0;
2732 case ACPI_SRAT_TYPE_MEMORY_AFFINITY:
2734 InfoTable = AcpiDmTableInfoSrat1;
2737 case ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY:
2739 InfoTable = AcpiDmTableInfoSrat2;
2742 case ACPI_SRAT_TYPE_GICC_AFFINITY:
2744 InfoTable = AcpiDmTableInfoSrat3;
2748 AcpiOsPrintf ("\n**** Unknown SRAT subtable type 0x%X\n", SubTable->Type);
2750 /* Attempt to continue */
2752 if (!SubTable->Length)
2754 AcpiOsPrintf ("Invalid zero length subtable\n");
2760 AcpiOsPrintf ("\n");
2761 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
2762 SubTable->Length, InfoTable);
2763 if (ACPI_FAILURE (Status))
2769 /* Point to next subtable */
2771 Offset += SubTable->Length;
2772 SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, SubTable->Length);
2777 /*******************************************************************************
2779 * FUNCTION: AcpiDmDumpVrtc
2781 * PARAMETERS: Table - A VRTC table
2785 * DESCRIPTION: Format the contents of a VRTC
2787 ******************************************************************************/
2791 ACPI_TABLE_HEADER *Table)
2794 UINT32 Offset = sizeof (ACPI_TABLE_VRTC);
2795 ACPI_VRTC_ENTRY *SubTable;
2800 Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoVrtc);
2801 if (ACPI_FAILURE (Status))
2808 SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset);
2809 while (Offset < Table->Length)
2811 /* Common subtable header */
2813 AcpiOsPrintf ("\n");
2814 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
2815 sizeof (ACPI_VRTC_ENTRY), AcpiDmTableInfoVrtc0);
2816 if (ACPI_FAILURE (Status))
2821 /* Point to next subtable */
2823 Offset += sizeof (ACPI_VRTC_ENTRY);
2824 SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, SubTable, sizeof (ACPI_VRTC_ENTRY));
2829 /*******************************************************************************
2831 * FUNCTION: AcpiDmDumpWdat
2833 * PARAMETERS: Table - A WDAT table
2837 * DESCRIPTION: Format the contents of a WDAT
2839 ******************************************************************************/
2843 ACPI_TABLE_HEADER *Table)
2846 UINT32 Offset = sizeof (ACPI_TABLE_WDAT);
2847 ACPI_WDAT_ENTRY *SubTable;
2852 Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat);
2853 if (ACPI_FAILURE (Status))
2860 SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset);
2861 while (Offset < Table->Length)
2863 /* Common subtable header */
2865 AcpiOsPrintf ("\n");
2866 Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
2867 sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0);
2868 if (ACPI_FAILURE (Status))
2873 /* Point to next subtable */
2875 Offset += sizeof (ACPI_WDAT_ENTRY);
2876 SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, SubTable, sizeof (ACPI_WDAT_ENTRY));