Home | History | Annotate | Line # | Download | only in common
dmtbdump.c revision 1.1.1.3.2.1
      1          1.1  jruoho /******************************************************************************
      2          1.1  jruoho  *
      3          1.1  jruoho  * Module Name: dmtbdump - Dump ACPI data tables that contain no AML code
      4          1.1  jruoho  *
      5          1.1  jruoho  *****************************************************************************/
      6          1.1  jruoho 
      7      1.1.1.2  jruoho /*
      8  1.1.1.3.2.1    yamt  * Copyright (C) 2000 - 2013, Intel Corp.
      9          1.1  jruoho  * All rights reserved.
     10          1.1  jruoho  *
     11      1.1.1.2  jruoho  * Redistribution and use in source and binary forms, with or without
     12      1.1.1.2  jruoho  * modification, are permitted provided that the following conditions
     13      1.1.1.2  jruoho  * are met:
     14      1.1.1.2  jruoho  * 1. Redistributions of source code must retain the above copyright
     15      1.1.1.2  jruoho  *    notice, this list of conditions, and the following disclaimer,
     16      1.1.1.2  jruoho  *    without modification.
     17      1.1.1.2  jruoho  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     18      1.1.1.2  jruoho  *    substantially similar to the "NO WARRANTY" disclaimer below
     19      1.1.1.2  jruoho  *    ("Disclaimer") and any redistribution must be conditioned upon
     20      1.1.1.2  jruoho  *    including a substantially similar Disclaimer requirement for further
     21      1.1.1.2  jruoho  *    binary redistribution.
     22      1.1.1.2  jruoho  * 3. Neither the names of the above-listed copyright holders nor the names
     23      1.1.1.2  jruoho  *    of any contributors may be used to endorse or promote products derived
     24      1.1.1.2  jruoho  *    from this software without specific prior written permission.
     25      1.1.1.2  jruoho  *
     26      1.1.1.2  jruoho  * Alternatively, this software may be distributed under the terms of the
     27      1.1.1.2  jruoho  * GNU General Public License ("GPL") version 2 as published by the Free
     28      1.1.1.2  jruoho  * Software Foundation.
     29      1.1.1.2  jruoho  *
     30      1.1.1.2  jruoho  * NO WARRANTY
     31      1.1.1.2  jruoho  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     32      1.1.1.2  jruoho  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     33      1.1.1.2  jruoho  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     34      1.1.1.2  jruoho  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     35      1.1.1.2  jruoho  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     36      1.1.1.2  jruoho  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     37      1.1.1.2  jruoho  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     38      1.1.1.2  jruoho  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     39      1.1.1.2  jruoho  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     40      1.1.1.2  jruoho  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     41      1.1.1.2  jruoho  * POSSIBILITY OF SUCH DAMAGES.
     42      1.1.1.2  jruoho  */
     43          1.1  jruoho 
     44          1.1  jruoho #include "acpi.h"
     45          1.1  jruoho #include "accommon.h"
     46          1.1  jruoho #include "acdisasm.h"
     47          1.1  jruoho #include "actables.h"
     48          1.1  jruoho 
     49          1.1  jruoho /* This module used for application-level code only */
     50          1.1  jruoho 
     51          1.1  jruoho #define _COMPONENT          ACPI_CA_DISASSEMBLER
     52          1.1  jruoho         ACPI_MODULE_NAME    ("dmtbdump")
     53          1.1  jruoho 
     54          1.1  jruoho 
     55  1.1.1.3.2.1    yamt /* Local prototypes */
     56  1.1.1.3.2.1    yamt 
     57      1.1.1.2  jruoho static void
     58      1.1.1.2  jruoho AcpiDmValidateFadtLength (
     59      1.1.1.2  jruoho     UINT32                  Revision,
     60      1.1.1.2  jruoho     UINT32                  Length);
     61      1.1.1.2  jruoho 
     62  1.1.1.3.2.1    yamt static void
     63  1.1.1.3.2.1    yamt AcpiDmDumpBuffer (
     64  1.1.1.3.2.1    yamt     void                    *Table,
     65  1.1.1.3.2.1    yamt     UINT32                  BufferOffset,
     66  1.1.1.3.2.1    yamt     UINT32                  Length,
     67  1.1.1.3.2.1    yamt     UINT32                  AbsoluteOffset,
     68  1.1.1.3.2.1    yamt     char                    *Header);
     69  1.1.1.3.2.1    yamt 
     70  1.1.1.3.2.1    yamt 
     71  1.1.1.3.2.1    yamt /*******************************************************************************
     72  1.1.1.3.2.1    yamt  *
     73  1.1.1.3.2.1    yamt  * FUNCTION:    AcpiDmDumpBuffer
     74  1.1.1.3.2.1    yamt  *
     75  1.1.1.3.2.1    yamt  * PARAMETERS:  Table               - ACPI Table or subtable
     76  1.1.1.3.2.1    yamt  *              BufferOffset        - Offset of buffer from Table above
     77  1.1.1.3.2.1    yamt  *              Length              - Length of the buffer
     78  1.1.1.3.2.1    yamt  *              AbsoluteOffset      - Offset of buffer in the main ACPI table
     79  1.1.1.3.2.1    yamt  *              Header              - Name of the buffer field (printed on the
     80  1.1.1.3.2.1    yamt  *                                    first line only.)
     81  1.1.1.3.2.1    yamt  *
     82  1.1.1.3.2.1    yamt  * RETURN:      None
     83  1.1.1.3.2.1    yamt  *
     84  1.1.1.3.2.1    yamt  * DESCRIPTION: Format the contents of an arbitrary length data buffer (in the
     85  1.1.1.3.2.1    yamt  *              disassembler output format.)
     86  1.1.1.3.2.1    yamt  *
     87  1.1.1.3.2.1    yamt  ******************************************************************************/
     88  1.1.1.3.2.1    yamt 
     89  1.1.1.3.2.1    yamt static void
     90  1.1.1.3.2.1    yamt AcpiDmDumpBuffer (
     91  1.1.1.3.2.1    yamt     void                    *Table,
     92  1.1.1.3.2.1    yamt     UINT32                  BufferOffset,
     93  1.1.1.3.2.1    yamt     UINT32                  Length,
     94  1.1.1.3.2.1    yamt     UINT32                  AbsoluteOffset,
     95  1.1.1.3.2.1    yamt     char                    *Header)
     96  1.1.1.3.2.1    yamt {
     97  1.1.1.3.2.1    yamt     UINT8                   *Buffer;
     98  1.1.1.3.2.1    yamt     UINT32                  i;
     99  1.1.1.3.2.1    yamt 
    100  1.1.1.3.2.1    yamt 
    101  1.1.1.3.2.1    yamt     if (!Length)
    102  1.1.1.3.2.1    yamt     {
    103  1.1.1.3.2.1    yamt         return;
    104  1.1.1.3.2.1    yamt     }
    105  1.1.1.3.2.1    yamt 
    106  1.1.1.3.2.1    yamt     Buffer = ACPI_CAST_PTR (UINT8, Table) + BufferOffset;
    107  1.1.1.3.2.1    yamt     i = 0;
    108  1.1.1.3.2.1    yamt 
    109  1.1.1.3.2.1    yamt     while (i < Length)
    110  1.1.1.3.2.1    yamt     {
    111  1.1.1.3.2.1    yamt         if (!(i % 16))
    112  1.1.1.3.2.1    yamt         {
    113  1.1.1.3.2.1    yamt             AcpiOsPrintf ("\n");
    114  1.1.1.3.2.1    yamt             AcpiDmLineHeader (AbsoluteOffset,
    115  1.1.1.3.2.1    yamt                 ((Length - i) > 16) ? 16 : (Length - i), Header);
    116  1.1.1.3.2.1    yamt             Header = NULL;
    117  1.1.1.3.2.1    yamt         }
    118  1.1.1.3.2.1    yamt 
    119  1.1.1.3.2.1    yamt         AcpiOsPrintf ("%.02X ", *Buffer);
    120  1.1.1.3.2.1    yamt         i++;
    121  1.1.1.3.2.1    yamt         Buffer++;
    122  1.1.1.3.2.1    yamt         AbsoluteOffset++;
    123  1.1.1.3.2.1    yamt     }
    124  1.1.1.3.2.1    yamt 
    125  1.1.1.3.2.1    yamt     AcpiOsPrintf ("\n");
    126  1.1.1.3.2.1    yamt }
    127  1.1.1.3.2.1    yamt 
    128      1.1.1.2  jruoho 
    129          1.1  jruoho /*******************************************************************************
    130          1.1  jruoho  *
    131          1.1  jruoho  * FUNCTION:    AcpiDmDumpRsdp
    132          1.1  jruoho  *
    133          1.1  jruoho  * PARAMETERS:  Table               - A RSDP
    134          1.1  jruoho  *
    135      1.1.1.2  jruoho  * RETURN:      Length of the table (there is not always a length field,
    136      1.1.1.2  jruoho  *              use revision or length if available (ACPI 2.0+))
    137          1.1  jruoho  *
    138          1.1  jruoho  * DESCRIPTION: Format the contents of a RSDP
    139          1.1  jruoho  *
    140          1.1  jruoho  ******************************************************************************/
    141          1.1  jruoho 
    142          1.1  jruoho UINT32
    143          1.1  jruoho AcpiDmDumpRsdp (
    144          1.1  jruoho     ACPI_TABLE_HEADER       *Table)
    145          1.1  jruoho {
    146      1.1.1.2  jruoho     ACPI_TABLE_RSDP         *Rsdp = ACPI_CAST_PTR (ACPI_TABLE_RSDP, Table);
    147      1.1.1.2  jruoho     UINT32                  Length = sizeof (ACPI_RSDP_COMMON);
    148      1.1.1.2  jruoho     UINT8                   Checksum;
    149          1.1  jruoho 
    150          1.1  jruoho 
    151          1.1  jruoho     /* Dump the common ACPI 1.0 portion */
    152          1.1  jruoho 
    153          1.1  jruoho     AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp1);
    154          1.1  jruoho 
    155      1.1.1.2  jruoho     /* Validate the first checksum */
    156          1.1  jruoho 
    157      1.1.1.2  jruoho     Checksum = AcpiDmGenerateChecksum (Rsdp, sizeof (ACPI_RSDP_COMMON),
    158      1.1.1.2  jruoho                 Rsdp->Checksum);
    159      1.1.1.2  jruoho     if (Checksum != Rsdp->Checksum)
    160          1.1  jruoho     {
    161      1.1.1.2  jruoho         AcpiOsPrintf ("/* Incorrect Checksum above, should be 0x%2.2X */\n",
    162      1.1.1.2  jruoho             Checksum);
    163      1.1.1.2  jruoho     }
    164      1.1.1.2  jruoho 
    165      1.1.1.2  jruoho     /* The RSDP for ACPI 2.0+ contains more data and has a Length field */
    166      1.1.1.2  jruoho 
    167      1.1.1.2  jruoho     if (Rsdp->Revision > 0)
    168      1.1.1.2  jruoho     {
    169      1.1.1.2  jruoho         Length = Rsdp->Length;
    170          1.1  jruoho         AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp2);
    171      1.1.1.2  jruoho 
    172      1.1.1.2  jruoho         /* Validate the extended checksum over entire RSDP */
    173      1.1.1.2  jruoho 
    174      1.1.1.2  jruoho         Checksum = AcpiDmGenerateChecksum (Rsdp, sizeof (ACPI_TABLE_RSDP),
    175      1.1.1.2  jruoho                     Rsdp->ExtendedChecksum);
    176      1.1.1.2  jruoho         if (Checksum != Rsdp->ExtendedChecksum)
    177      1.1.1.2  jruoho         {
    178      1.1.1.2  jruoho             AcpiOsPrintf (
    179      1.1.1.2  jruoho                 "/* Incorrect Extended Checksum above, should be 0x%2.2X */\n",
    180      1.1.1.2  jruoho                 Checksum);
    181      1.1.1.2  jruoho         }
    182          1.1  jruoho     }
    183          1.1  jruoho 
    184          1.1  jruoho     return (Length);
    185          1.1  jruoho }
    186          1.1  jruoho 
    187          1.1  jruoho 
    188          1.1  jruoho /*******************************************************************************
    189          1.1  jruoho  *
    190          1.1  jruoho  * FUNCTION:    AcpiDmDumpRsdt
    191          1.1  jruoho  *
    192          1.1  jruoho  * PARAMETERS:  Table               - A RSDT
    193          1.1  jruoho  *
    194          1.1  jruoho  * RETURN:      None
    195          1.1  jruoho  *
    196          1.1  jruoho  * DESCRIPTION: Format the contents of a RSDT
    197          1.1  jruoho  *
    198          1.1  jruoho  ******************************************************************************/
    199          1.1  jruoho 
    200          1.1  jruoho void
    201          1.1  jruoho AcpiDmDumpRsdt (
    202          1.1  jruoho     ACPI_TABLE_HEADER       *Table)
    203          1.1  jruoho {
    204          1.1  jruoho     UINT32                  *Array;
    205          1.1  jruoho     UINT32                  Entries;
    206          1.1  jruoho     UINT32                  Offset;
    207          1.1  jruoho     UINT32                  i;
    208          1.1  jruoho 
    209          1.1  jruoho 
    210          1.1  jruoho     /* Point to start of table pointer array */
    211          1.1  jruoho 
    212          1.1  jruoho     Array = ACPI_CAST_PTR (ACPI_TABLE_RSDT, Table)->TableOffsetEntry;
    213          1.1  jruoho     Offset = sizeof (ACPI_TABLE_HEADER);
    214          1.1  jruoho 
    215          1.1  jruoho     /* RSDT uses 32-bit pointers */
    216          1.1  jruoho 
    217          1.1  jruoho     Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32);
    218          1.1  jruoho 
    219          1.1  jruoho     for (i = 0; i < Entries; i++)
    220          1.1  jruoho     {
    221          1.1  jruoho         AcpiDmLineHeader2 (Offset, sizeof (UINT32), "ACPI Table Address", i);
    222          1.1  jruoho         AcpiOsPrintf ("%8.8X\n", Array[i]);
    223          1.1  jruoho         Offset += sizeof (UINT32);
    224          1.1  jruoho     }
    225          1.1  jruoho }
    226          1.1  jruoho 
    227          1.1  jruoho 
    228          1.1  jruoho /*******************************************************************************
    229          1.1  jruoho  *
    230          1.1  jruoho  * FUNCTION:    AcpiDmDumpXsdt
    231          1.1  jruoho  *
    232          1.1  jruoho  * PARAMETERS:  Table               - A XSDT
    233          1.1  jruoho  *
    234          1.1  jruoho  * RETURN:      None
    235          1.1  jruoho  *
    236          1.1  jruoho  * DESCRIPTION: Format the contents of a XSDT
    237          1.1  jruoho  *
    238          1.1  jruoho  ******************************************************************************/
    239          1.1  jruoho 
    240          1.1  jruoho void
    241          1.1  jruoho AcpiDmDumpXsdt (
    242          1.1  jruoho     ACPI_TABLE_HEADER       *Table)
    243          1.1  jruoho {
    244          1.1  jruoho     UINT64                  *Array;
    245          1.1  jruoho     UINT32                  Entries;
    246          1.1  jruoho     UINT32                  Offset;
    247          1.1  jruoho     UINT32                  i;
    248          1.1  jruoho 
    249          1.1  jruoho 
    250          1.1  jruoho     /* Point to start of table pointer array */
    251          1.1  jruoho 
    252          1.1  jruoho     Array = ACPI_CAST_PTR (ACPI_TABLE_XSDT, Table)->TableOffsetEntry;
    253          1.1  jruoho     Offset = sizeof (ACPI_TABLE_HEADER);
    254          1.1  jruoho 
    255          1.1  jruoho     /* XSDT uses 64-bit pointers */
    256          1.1  jruoho 
    257          1.1  jruoho     Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64);
    258          1.1  jruoho 
    259          1.1  jruoho     for (i = 0; i < Entries; i++)
    260          1.1  jruoho     {
    261          1.1  jruoho         AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i);
    262          1.1  jruoho         AcpiOsPrintf ("%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Array[i]));
    263          1.1  jruoho         Offset += sizeof (UINT64);
    264          1.1  jruoho     }
    265          1.1  jruoho }
    266          1.1  jruoho 
    267          1.1  jruoho 
    268          1.1  jruoho /*******************************************************************************
    269          1.1  jruoho  *
    270          1.1  jruoho  * FUNCTION:    AcpiDmDumpFadt
    271          1.1  jruoho  *
    272          1.1  jruoho  * PARAMETERS:  Table               - A FADT
    273          1.1  jruoho  *
    274          1.1  jruoho  * RETURN:      None
    275          1.1  jruoho  *
    276          1.1  jruoho  * DESCRIPTION: Format the contents of a FADT
    277          1.1  jruoho  *
    278      1.1.1.2  jruoho  * NOTE:        We cannot depend on the FADT version to indicate the actual
    279      1.1.1.2  jruoho  *              contents of the FADT because of BIOS bugs. The table length
    280      1.1.1.2  jruoho  *              is the only reliable indicator.
    281      1.1.1.2  jruoho  *
    282          1.1  jruoho  ******************************************************************************/
    283          1.1  jruoho 
    284          1.1  jruoho void
    285          1.1  jruoho AcpiDmDumpFadt (
    286          1.1  jruoho     ACPI_TABLE_HEADER       *Table)
    287          1.1  jruoho {
    288          1.1  jruoho 
    289      1.1.1.2  jruoho     /* Always dump the minimum FADT revision 1 fields (ACPI 1.0) */
    290          1.1  jruoho 
    291          1.1  jruoho     AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt1);
    292          1.1  jruoho 
    293      1.1.1.2  jruoho     /* Check for FADT revision 2 fields (ACPI 1.0B MS extensions) */
    294          1.1  jruoho 
    295      1.1.1.2  jruoho     if ((Table->Length > ACPI_FADT_V1_SIZE) &&
    296      1.1.1.2  jruoho         (Table->Length <= ACPI_FADT_V2_SIZE))
    297          1.1  jruoho     {
    298          1.1  jruoho         AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt2);
    299          1.1  jruoho     }
    300          1.1  jruoho 
    301  1.1.1.3.2.1    yamt     /* Check for FADT revision 3/4 fields and up (ACPI 2.0+ extended data) */
    302          1.1  jruoho 
    303      1.1.1.2  jruoho     else if (Table->Length > ACPI_FADT_V2_SIZE)
    304          1.1  jruoho     {
    305          1.1  jruoho         AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt3);
    306  1.1.1.3.2.1    yamt 
    307  1.1.1.3.2.1    yamt         /* Check for FADT revision 5 fields and up (ACPI 5.0+) */
    308  1.1.1.3.2.1    yamt 
    309  1.1.1.3.2.1    yamt         if (Table->Length > ACPI_FADT_V3_SIZE)
    310  1.1.1.3.2.1    yamt         {
    311  1.1.1.3.2.1    yamt             AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt5);
    312  1.1.1.3.2.1    yamt         }
    313          1.1  jruoho     }
    314          1.1  jruoho 
    315          1.1  jruoho     /* Validate various fields in the FADT, including length */
    316          1.1  jruoho 
    317          1.1  jruoho     AcpiTbCreateLocalFadt (Table, Table->Length);
    318      1.1.1.2  jruoho 
    319      1.1.1.2  jruoho     /* Validate FADT length against the revision */
    320      1.1.1.2  jruoho 
    321      1.1.1.2  jruoho     AcpiDmValidateFadtLength (Table->Revision, Table->Length);
    322      1.1.1.2  jruoho }
    323      1.1.1.2  jruoho 
    324      1.1.1.2  jruoho 
    325      1.1.1.2  jruoho /*******************************************************************************
    326      1.1.1.2  jruoho  *
    327      1.1.1.2  jruoho  * FUNCTION:    AcpiDmValidateFadtLength
    328      1.1.1.2  jruoho  *
    329      1.1.1.2  jruoho  * PARAMETERS:  Revision            - FADT revision (Header->Revision)
    330      1.1.1.2  jruoho  *              Length              - FADT length (Header->Length
    331      1.1.1.2  jruoho  *
    332      1.1.1.2  jruoho  * RETURN:      None
    333      1.1.1.2  jruoho  *
    334      1.1.1.2  jruoho  * DESCRIPTION: Check the FADT revision against the expected table length for
    335      1.1.1.2  jruoho  *              that revision. Issue a warning if the length is not what was
    336      1.1.1.2  jruoho  *              expected. This seems to be such a common BIOS bug that the
    337      1.1.1.2  jruoho  *              FADT revision has been rendered virtually meaningless.
    338      1.1.1.2  jruoho  *
    339      1.1.1.2  jruoho  ******************************************************************************/
    340      1.1.1.2  jruoho 
    341      1.1.1.2  jruoho static void
    342      1.1.1.2  jruoho AcpiDmValidateFadtLength (
    343      1.1.1.2  jruoho     UINT32                  Revision,
    344      1.1.1.2  jruoho     UINT32                  Length)
    345      1.1.1.2  jruoho {
    346      1.1.1.2  jruoho     UINT32                  ExpectedLength;
    347      1.1.1.2  jruoho 
    348      1.1.1.2  jruoho 
    349      1.1.1.2  jruoho     switch (Revision)
    350      1.1.1.2  jruoho     {
    351      1.1.1.2  jruoho     case 0:
    352  1.1.1.3.2.1    yamt 
    353      1.1.1.2  jruoho         AcpiOsPrintf ("// ACPI Warning: Invalid FADT revision: 0\n");
    354      1.1.1.2  jruoho         return;
    355      1.1.1.2  jruoho 
    356      1.1.1.2  jruoho     case 1:
    357  1.1.1.3.2.1    yamt 
    358      1.1.1.2  jruoho         ExpectedLength = ACPI_FADT_V1_SIZE;
    359      1.1.1.2  jruoho         break;
    360      1.1.1.2  jruoho 
    361      1.1.1.2  jruoho     case 2:
    362  1.1.1.3.2.1    yamt 
    363      1.1.1.2  jruoho         ExpectedLength = ACPI_FADT_V2_SIZE;
    364      1.1.1.2  jruoho         break;
    365      1.1.1.2  jruoho 
    366      1.1.1.2  jruoho     case 3:
    367      1.1.1.2  jruoho     case 4:
    368  1.1.1.3.2.1    yamt 
    369      1.1.1.2  jruoho         ExpectedLength = ACPI_FADT_V3_SIZE;
    370      1.1.1.2  jruoho         break;
    371      1.1.1.2  jruoho 
    372  1.1.1.3.2.1    yamt     case 5:
    373  1.1.1.3.2.1    yamt 
    374  1.1.1.3.2.1    yamt         ExpectedLength = ACPI_FADT_V5_SIZE;
    375  1.1.1.3.2.1    yamt         break;
    376  1.1.1.3.2.1    yamt 
    377      1.1.1.2  jruoho     default:
    378  1.1.1.3.2.1    yamt 
    379      1.1.1.2  jruoho         return;
    380      1.1.1.2  jruoho     }
    381      1.1.1.2  jruoho 
    382      1.1.1.2  jruoho     if (Length == ExpectedLength)
    383      1.1.1.2  jruoho     {
    384      1.1.1.2  jruoho         return;
    385      1.1.1.2  jruoho     }
    386      1.1.1.2  jruoho 
    387      1.1.1.2  jruoho     AcpiOsPrintf (
    388      1.1.1.2  jruoho         "\n// ACPI Warning: FADT revision %X does not match length: found %X expected %X\n",
    389      1.1.1.2  jruoho         Revision, Length, ExpectedLength);
    390          1.1  jruoho }
    391          1.1  jruoho 
    392          1.1  jruoho 
    393          1.1  jruoho /*******************************************************************************
    394          1.1  jruoho  *
    395          1.1  jruoho  * FUNCTION:    AcpiDmDumpAsf
    396          1.1  jruoho  *
    397          1.1  jruoho  * PARAMETERS:  Table               - A ASF table
    398          1.1  jruoho  *
    399          1.1  jruoho  * RETURN:      None
    400          1.1  jruoho  *
    401          1.1  jruoho  * DESCRIPTION: Format the contents of a ASF table
    402          1.1  jruoho  *
    403          1.1  jruoho  ******************************************************************************/
    404          1.1  jruoho 
    405          1.1  jruoho void
    406          1.1  jruoho AcpiDmDumpAsf (
    407          1.1  jruoho     ACPI_TABLE_HEADER       *Table)
    408          1.1  jruoho {
    409          1.1  jruoho     ACPI_STATUS             Status;
    410          1.1  jruoho     UINT32                  Offset = sizeof (ACPI_TABLE_HEADER);
    411          1.1  jruoho     ACPI_ASF_INFO           *SubTable;
    412          1.1  jruoho     ACPI_DMTABLE_INFO       *InfoTable;
    413          1.1  jruoho     ACPI_DMTABLE_INFO       *DataInfoTable = NULL;
    414          1.1  jruoho     UINT8                   *DataTable = NULL;
    415          1.1  jruoho     UINT32                  DataCount = 0;
    416          1.1  jruoho     UINT32                  DataLength = 0;
    417          1.1  jruoho     UINT32                  DataOffset = 0;
    418          1.1  jruoho     UINT32                  i;
    419          1.1  jruoho     UINT8                   Type;
    420          1.1  jruoho 
    421          1.1  jruoho 
    422          1.1  jruoho     /* No main table, only sub-tables */
    423          1.1  jruoho 
    424          1.1  jruoho     SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset);
    425          1.1  jruoho     while (Offset < Table->Length)
    426          1.1  jruoho     {
    427          1.1  jruoho         /* Common sub-table header */
    428          1.1  jruoho 
    429          1.1  jruoho         Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
    430          1.1  jruoho                     SubTable->Header.Length, AcpiDmTableInfoAsfHdr);
    431          1.1  jruoho         if (ACPI_FAILURE (Status))
    432          1.1  jruoho         {
    433          1.1  jruoho             return;
    434          1.1  jruoho         }
    435          1.1  jruoho 
    436          1.1  jruoho         /* The actual type is the lower 7 bits of Type */
    437          1.1  jruoho 
    438          1.1  jruoho         Type = (UINT8) (SubTable->Header.Type & 0x7F);
    439          1.1  jruoho 
    440          1.1  jruoho         switch (Type)
    441          1.1  jruoho         {
    442          1.1  jruoho         case ACPI_ASF_TYPE_INFO:
    443  1.1.1.3.2.1    yamt 
    444          1.1  jruoho             InfoTable = AcpiDmTableInfoAsf0;
    445          1.1  jruoho             break;
    446          1.1  jruoho 
    447          1.1  jruoho         case ACPI_ASF_TYPE_ALERT:
    448  1.1.1.3.2.1    yamt 
    449          1.1  jruoho             InfoTable = AcpiDmTableInfoAsf1;
    450          1.1  jruoho             DataInfoTable = AcpiDmTableInfoAsf1a;
    451          1.1  jruoho             DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_ALERT));
    452          1.1  jruoho             DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT, SubTable)->Alerts;
    453          1.1  jruoho             DataLength = ACPI_CAST_PTR (ACPI_ASF_ALERT, SubTable)->DataLength;
    454          1.1  jruoho             DataOffset = Offset + sizeof (ACPI_ASF_ALERT);
    455          1.1  jruoho             break;
    456          1.1  jruoho 
    457          1.1  jruoho         case ACPI_ASF_TYPE_CONTROL:
    458  1.1.1.3.2.1    yamt 
    459          1.1  jruoho             InfoTable = AcpiDmTableInfoAsf2;
    460          1.1  jruoho             DataInfoTable = AcpiDmTableInfoAsf2a;
    461          1.1  jruoho             DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_REMOTE));
    462          1.1  jruoho             DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE, SubTable)->Controls;
    463          1.1  jruoho             DataLength = ACPI_CAST_PTR (ACPI_ASF_REMOTE, SubTable)->DataLength;
    464          1.1  jruoho             DataOffset = Offset + sizeof (ACPI_ASF_REMOTE);
    465          1.1  jruoho             break;
    466          1.1  jruoho 
    467          1.1  jruoho         case ACPI_ASF_TYPE_BOOT:
    468  1.1.1.3.2.1    yamt 
    469          1.1  jruoho             InfoTable = AcpiDmTableInfoAsf3;
    470          1.1  jruoho             break;
    471          1.1  jruoho 
    472          1.1  jruoho         case ACPI_ASF_TYPE_ADDRESS:
    473  1.1.1.3.2.1    yamt 
    474          1.1  jruoho             InfoTable = AcpiDmTableInfoAsf4;
    475          1.1  jruoho             DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_ADDRESS));
    476          1.1  jruoho             DataLength = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, SubTable)->Devices;
    477          1.1  jruoho             DataOffset = Offset + sizeof (ACPI_ASF_ADDRESS);
    478          1.1  jruoho             break;
    479          1.1  jruoho 
    480          1.1  jruoho         default:
    481  1.1.1.3.2.1    yamt 
    482          1.1  jruoho             AcpiOsPrintf ("\n**** Unknown ASF sub-table type 0x%X\n", SubTable->Header.Type);
    483          1.1  jruoho             return;
    484          1.1  jruoho         }
    485          1.1  jruoho 
    486          1.1  jruoho         Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
    487          1.1  jruoho                     SubTable->Header.Length, InfoTable);
    488          1.1  jruoho         if (ACPI_FAILURE (Status))
    489          1.1  jruoho         {
    490          1.1  jruoho             return;
    491          1.1  jruoho         }
    492          1.1  jruoho 
    493          1.1  jruoho         /* Dump variable-length extra data */
    494          1.1  jruoho 
    495          1.1  jruoho         switch (Type)
    496          1.1  jruoho         {
    497          1.1  jruoho         case ACPI_ASF_TYPE_ALERT:
    498          1.1  jruoho         case ACPI_ASF_TYPE_CONTROL:
    499          1.1  jruoho 
    500          1.1  jruoho             for (i = 0; i < DataCount; i++)
    501          1.1  jruoho             {
    502          1.1  jruoho                 AcpiOsPrintf ("\n");
    503          1.1  jruoho                 Status = AcpiDmDumpTable (Table->Length, DataOffset,
    504          1.1  jruoho                             DataTable, DataLength, DataInfoTable);
    505          1.1  jruoho                 if (ACPI_FAILURE (Status))
    506          1.1  jruoho                 {
    507          1.1  jruoho                     return;
    508          1.1  jruoho                 }
    509          1.1  jruoho 
    510          1.1  jruoho                 DataTable = ACPI_ADD_PTR (UINT8, DataTable, DataLength);
    511          1.1  jruoho                 DataOffset += DataLength;
    512          1.1  jruoho             }
    513          1.1  jruoho             break;
    514          1.1  jruoho 
    515          1.1  jruoho         case ACPI_ASF_TYPE_ADDRESS:
    516          1.1  jruoho 
    517          1.1  jruoho             for (i = 0; i < DataLength; i++)
    518          1.1  jruoho             {
    519          1.1  jruoho                 if (!(i % 16))
    520          1.1  jruoho                 {
    521          1.1  jruoho                     AcpiDmLineHeader (DataOffset, 1, "Addresses");
    522          1.1  jruoho                 }
    523          1.1  jruoho 
    524          1.1  jruoho                 AcpiOsPrintf ("%2.2X ", *DataTable);
    525          1.1  jruoho                 DataTable++;
    526          1.1  jruoho                 DataOffset++;
    527          1.1  jruoho                 if (DataOffset > Table->Length)
    528          1.1  jruoho                 {
    529          1.1  jruoho                     AcpiOsPrintf ("**** ACPI table terminates in the middle of a data structure!\n");
    530          1.1  jruoho                     return;
    531          1.1  jruoho                 }
    532          1.1  jruoho             }
    533          1.1  jruoho 
    534          1.1  jruoho             AcpiOsPrintf ("\n");
    535          1.1  jruoho             break;
    536          1.1  jruoho 
    537          1.1  jruoho         default:
    538  1.1.1.3.2.1    yamt 
    539          1.1  jruoho             break;
    540          1.1  jruoho         }
    541          1.1  jruoho 
    542          1.1  jruoho         AcpiOsPrintf ("\n");
    543          1.1  jruoho 
    544          1.1  jruoho         /* Point to next sub-table */
    545          1.1  jruoho 
    546          1.1  jruoho         if (!SubTable->Header.Length)
    547          1.1  jruoho         {
    548          1.1  jruoho             AcpiOsPrintf ("Invalid zero subtable header length\n");
    549          1.1  jruoho             return;
    550          1.1  jruoho         }
    551          1.1  jruoho 
    552          1.1  jruoho         Offset += SubTable->Header.Length;
    553          1.1  jruoho         SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, SubTable, SubTable->Header.Length);
    554          1.1  jruoho     }
    555          1.1  jruoho }
    556          1.1  jruoho 
    557          1.1  jruoho 
    558          1.1  jruoho /*******************************************************************************
    559          1.1  jruoho  *
    560          1.1  jruoho  * FUNCTION:    AcpiDmDumpCpep
    561          1.1  jruoho  *
    562          1.1  jruoho  * PARAMETERS:  Table               - A CPEP table
    563          1.1  jruoho  *
    564          1.1  jruoho  * RETURN:      None
    565          1.1  jruoho  *
    566          1.1  jruoho  * DESCRIPTION: Format the contents of a CPEP. This table type consists
    567          1.1  jruoho  *              of an open-ended number of subtables.
    568          1.1  jruoho  *
    569          1.1  jruoho  ******************************************************************************/
    570          1.1  jruoho 
    571          1.1  jruoho void
    572          1.1  jruoho AcpiDmDumpCpep (
    573          1.1  jruoho     ACPI_TABLE_HEADER       *Table)
    574          1.1  jruoho {
    575          1.1  jruoho     ACPI_STATUS             Status;
    576          1.1  jruoho     ACPI_CPEP_POLLING       *SubTable;
    577          1.1  jruoho     UINT32                  Length = Table->Length;
    578          1.1  jruoho     UINT32                  Offset = sizeof (ACPI_TABLE_CPEP);
    579          1.1  jruoho 
    580          1.1  jruoho 
    581          1.1  jruoho     /* Main table */
    582          1.1  jruoho 
    583          1.1  jruoho     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoCpep);
    584          1.1  jruoho     if (ACPI_FAILURE (Status))
    585          1.1  jruoho     {
    586          1.1  jruoho         return;
    587          1.1  jruoho     }
    588          1.1  jruoho 
    589          1.1  jruoho     /* Sub-tables */
    590          1.1  jruoho 
    591          1.1  jruoho     SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset);
    592          1.1  jruoho     while (Offset < Table->Length)
    593          1.1  jruoho     {
    594          1.1  jruoho         AcpiOsPrintf ("\n");
    595          1.1  jruoho         Status = AcpiDmDumpTable (Length, Offset, SubTable,
    596          1.1  jruoho                     SubTable->Header.Length, AcpiDmTableInfoCpep0);
    597          1.1  jruoho         if (ACPI_FAILURE (Status))
    598          1.1  jruoho         {
    599          1.1  jruoho             return;
    600          1.1  jruoho         }
    601          1.1  jruoho 
    602          1.1  jruoho         /* Point to next sub-table */
    603          1.1  jruoho 
    604          1.1  jruoho         Offset += SubTable->Header.Length;
    605          1.1  jruoho         SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, SubTable,
    606          1.1  jruoho                     SubTable->Header.Length);
    607          1.1  jruoho     }
    608          1.1  jruoho }
    609          1.1  jruoho 
    610          1.1  jruoho 
    611          1.1  jruoho /*******************************************************************************
    612          1.1  jruoho  *
    613  1.1.1.3.2.1    yamt  * FUNCTION:    AcpiDmDumpCsrt
    614  1.1.1.3.2.1    yamt  *
    615  1.1.1.3.2.1    yamt  * PARAMETERS:  Table               - A CSRT table
    616  1.1.1.3.2.1    yamt  *
    617  1.1.1.3.2.1    yamt  * RETURN:      None
    618  1.1.1.3.2.1    yamt  *
    619  1.1.1.3.2.1    yamt  * DESCRIPTION: Format the contents of a CSRT. This table type consists
    620  1.1.1.3.2.1    yamt  *              of an open-ended number of subtables.
    621  1.1.1.3.2.1    yamt  *
    622  1.1.1.3.2.1    yamt  ******************************************************************************/
    623  1.1.1.3.2.1    yamt 
    624  1.1.1.3.2.1    yamt void
    625  1.1.1.3.2.1    yamt AcpiDmDumpCsrt (
    626  1.1.1.3.2.1    yamt     ACPI_TABLE_HEADER       *Table)
    627  1.1.1.3.2.1    yamt {
    628  1.1.1.3.2.1    yamt     ACPI_STATUS             Status;
    629  1.1.1.3.2.1    yamt     ACPI_CSRT_GROUP         *SubTable;
    630  1.1.1.3.2.1    yamt     ACPI_CSRT_SHARED_INFO   *SharedInfoTable;
    631  1.1.1.3.2.1    yamt     ACPI_CSRT_DESCRIPTOR    *SubSubTable;
    632  1.1.1.3.2.1    yamt     UINT32                  Length = Table->Length;
    633  1.1.1.3.2.1    yamt     UINT32                  Offset = sizeof (ACPI_TABLE_CSRT);
    634  1.1.1.3.2.1    yamt     UINT32                  SubOffset;
    635  1.1.1.3.2.1    yamt     UINT32                  SubSubOffset;
    636  1.1.1.3.2.1    yamt     UINT32                  InfoLength;
    637  1.1.1.3.2.1    yamt 
    638  1.1.1.3.2.1    yamt 
    639  1.1.1.3.2.1    yamt     /* The main table only contains the ACPI header, thus already handled */
    640  1.1.1.3.2.1    yamt 
    641  1.1.1.3.2.1    yamt     /* Sub-tables (Resource Groups) */
    642  1.1.1.3.2.1    yamt 
    643  1.1.1.3.2.1    yamt     SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset);
    644  1.1.1.3.2.1    yamt     while (Offset < Table->Length)
    645  1.1.1.3.2.1    yamt     {
    646  1.1.1.3.2.1    yamt         /* Resource group subtable */
    647  1.1.1.3.2.1    yamt 
    648  1.1.1.3.2.1    yamt         AcpiOsPrintf ("\n");
    649  1.1.1.3.2.1    yamt         Status = AcpiDmDumpTable (Length, Offset, SubTable,
    650  1.1.1.3.2.1    yamt                     SubTable->Length, AcpiDmTableInfoCsrt0);
    651  1.1.1.3.2.1    yamt         if (ACPI_FAILURE (Status))
    652  1.1.1.3.2.1    yamt         {
    653  1.1.1.3.2.1    yamt             return;
    654  1.1.1.3.2.1    yamt         }
    655  1.1.1.3.2.1    yamt 
    656  1.1.1.3.2.1    yamt         /* Shared info subtable (One per resource group) */
    657  1.1.1.3.2.1    yamt 
    658  1.1.1.3.2.1    yamt         SubOffset = sizeof (ACPI_CSRT_GROUP);
    659  1.1.1.3.2.1    yamt         SharedInfoTable = ACPI_ADD_PTR (ACPI_CSRT_SHARED_INFO, Table,
    660  1.1.1.3.2.1    yamt             Offset + SubOffset);
    661  1.1.1.3.2.1    yamt 
    662  1.1.1.3.2.1    yamt         AcpiOsPrintf ("\n");
    663  1.1.1.3.2.1    yamt         Status = AcpiDmDumpTable (Length, Offset + SubOffset, SharedInfoTable,
    664  1.1.1.3.2.1    yamt                     sizeof (ACPI_CSRT_SHARED_INFO), AcpiDmTableInfoCsrt1);
    665  1.1.1.3.2.1    yamt         if (ACPI_FAILURE (Status))
    666  1.1.1.3.2.1    yamt         {
    667  1.1.1.3.2.1    yamt             return;
    668  1.1.1.3.2.1    yamt         }
    669  1.1.1.3.2.1    yamt 
    670  1.1.1.3.2.1    yamt         SubOffset += SubTable->SharedInfoLength;
    671  1.1.1.3.2.1    yamt 
    672  1.1.1.3.2.1    yamt         /* Sub-Subtables (Resource Descriptors) */
    673  1.1.1.3.2.1    yamt 
    674  1.1.1.3.2.1    yamt         SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table,
    675  1.1.1.3.2.1    yamt             Offset + SubOffset);
    676  1.1.1.3.2.1    yamt 
    677  1.1.1.3.2.1    yamt         while ((SubOffset < SubTable->Length) &&
    678  1.1.1.3.2.1    yamt               ((Offset + SubOffset) < Table->Length))
    679  1.1.1.3.2.1    yamt         {
    680  1.1.1.3.2.1    yamt             AcpiOsPrintf ("\n");
    681  1.1.1.3.2.1    yamt             Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubTable,
    682  1.1.1.3.2.1    yamt                         SubSubTable->Length, AcpiDmTableInfoCsrt2);
    683  1.1.1.3.2.1    yamt             if (ACPI_FAILURE (Status))
    684  1.1.1.3.2.1    yamt             {
    685  1.1.1.3.2.1    yamt                 return;
    686  1.1.1.3.2.1    yamt             }
    687  1.1.1.3.2.1    yamt 
    688  1.1.1.3.2.1    yamt             SubSubOffset = sizeof (ACPI_CSRT_DESCRIPTOR);
    689  1.1.1.3.2.1    yamt 
    690  1.1.1.3.2.1    yamt             /* Resource-specific info buffer */
    691  1.1.1.3.2.1    yamt 
    692  1.1.1.3.2.1    yamt             InfoLength = SubSubTable->Length - SubSubOffset;
    693  1.1.1.3.2.1    yamt 
    694  1.1.1.3.2.1    yamt             AcpiDmDumpBuffer (SubSubTable, SubSubOffset, InfoLength,
    695  1.1.1.3.2.1    yamt                 Offset + SubOffset + SubSubOffset, "ResourceInfo");
    696  1.1.1.3.2.1    yamt             SubSubOffset += InfoLength;
    697  1.1.1.3.2.1    yamt 
    698  1.1.1.3.2.1    yamt             /* Point to next sub-subtable */
    699  1.1.1.3.2.1    yamt 
    700  1.1.1.3.2.1    yamt             SubOffset += SubSubTable->Length;
    701  1.1.1.3.2.1    yamt             SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubTable,
    702  1.1.1.3.2.1    yamt                         SubSubTable->Length);
    703  1.1.1.3.2.1    yamt         }
    704  1.1.1.3.2.1    yamt 
    705  1.1.1.3.2.1    yamt         /* Point to next sub-table */
    706  1.1.1.3.2.1    yamt 
    707  1.1.1.3.2.1    yamt         Offset += SubTable->Length;
    708  1.1.1.3.2.1    yamt         SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, SubTable,
    709  1.1.1.3.2.1    yamt                     SubTable->Length);
    710  1.1.1.3.2.1    yamt     }
    711  1.1.1.3.2.1    yamt }
    712  1.1.1.3.2.1    yamt 
    713  1.1.1.3.2.1    yamt 
    714  1.1.1.3.2.1    yamt /*******************************************************************************
    715  1.1.1.3.2.1    yamt  *
    716  1.1.1.3.2.1    yamt  * FUNCTION:    AcpiDmDumpDbg2
    717  1.1.1.3.2.1    yamt  *
    718  1.1.1.3.2.1    yamt  * PARAMETERS:  Table               - A DBG2 table
    719  1.1.1.3.2.1    yamt  *
    720  1.1.1.3.2.1    yamt  * RETURN:      None
    721  1.1.1.3.2.1    yamt  *
    722  1.1.1.3.2.1    yamt  * DESCRIPTION: Format the contents of a DBG2. This table type consists
    723  1.1.1.3.2.1    yamt  *              of an open-ended number of subtables.
    724  1.1.1.3.2.1    yamt  *
    725  1.1.1.3.2.1    yamt  ******************************************************************************/
    726  1.1.1.3.2.1    yamt 
    727  1.1.1.3.2.1    yamt void
    728  1.1.1.3.2.1    yamt AcpiDmDumpDbg2 (
    729  1.1.1.3.2.1    yamt     ACPI_TABLE_HEADER       *Table)
    730  1.1.1.3.2.1    yamt {
    731  1.1.1.3.2.1    yamt     ACPI_STATUS             Status;
    732  1.1.1.3.2.1    yamt     ACPI_DBG2_DEVICE        *SubTable;
    733  1.1.1.3.2.1    yamt     UINT32                  Length = Table->Length;
    734  1.1.1.3.2.1    yamt     UINT32                  Offset = sizeof (ACPI_TABLE_DBG2);
    735  1.1.1.3.2.1    yamt     UINT32                  i;
    736  1.1.1.3.2.1    yamt     UINT32                  ArrayOffset;
    737  1.1.1.3.2.1    yamt     UINT32                  AbsoluteOffset;
    738  1.1.1.3.2.1    yamt     UINT8                   *Array;
    739  1.1.1.3.2.1    yamt 
    740  1.1.1.3.2.1    yamt 
    741  1.1.1.3.2.1    yamt     /* Main table */
    742  1.1.1.3.2.1    yamt 
    743  1.1.1.3.2.1    yamt     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDbg2);
    744  1.1.1.3.2.1    yamt     if (ACPI_FAILURE (Status))
    745  1.1.1.3.2.1    yamt     {
    746  1.1.1.3.2.1    yamt         return;
    747  1.1.1.3.2.1    yamt     }
    748  1.1.1.3.2.1    yamt 
    749  1.1.1.3.2.1    yamt     /* Sub-tables */
    750  1.1.1.3.2.1    yamt 
    751  1.1.1.3.2.1    yamt     SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset);
    752  1.1.1.3.2.1    yamt     while (Offset < Table->Length)
    753  1.1.1.3.2.1    yamt     {
    754  1.1.1.3.2.1    yamt         AcpiOsPrintf ("\n");
    755  1.1.1.3.2.1    yamt         Status = AcpiDmDumpTable (Length, Offset, SubTable,
    756  1.1.1.3.2.1    yamt                     SubTable->Length, AcpiDmTableInfoDbg2Device);
    757  1.1.1.3.2.1    yamt         if (ACPI_FAILURE (Status))
    758  1.1.1.3.2.1    yamt         {
    759  1.1.1.3.2.1    yamt             return;
    760  1.1.1.3.2.1    yamt         }
    761  1.1.1.3.2.1    yamt 
    762  1.1.1.3.2.1    yamt         /* Dump the BaseAddress array */
    763  1.1.1.3.2.1    yamt 
    764  1.1.1.3.2.1    yamt         for (i = 0; i < SubTable->RegisterCount; i++)
    765  1.1.1.3.2.1    yamt         {
    766  1.1.1.3.2.1    yamt             ArrayOffset = SubTable->BaseAddressOffset +
    767  1.1.1.3.2.1    yamt                 (sizeof (ACPI_GENERIC_ADDRESS) * i);
    768  1.1.1.3.2.1    yamt             AbsoluteOffset = Offset + ArrayOffset;
    769  1.1.1.3.2.1    yamt             Array = (UINT8 *) SubTable + ArrayOffset;
    770  1.1.1.3.2.1    yamt 
    771  1.1.1.3.2.1    yamt             Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
    772  1.1.1.3.2.1    yamt                         SubTable->Length, AcpiDmTableInfoDbg2Addr);
    773  1.1.1.3.2.1    yamt             if (ACPI_FAILURE (Status))
    774  1.1.1.3.2.1    yamt             {
    775  1.1.1.3.2.1    yamt                 return;
    776  1.1.1.3.2.1    yamt             }
    777  1.1.1.3.2.1    yamt         }
    778  1.1.1.3.2.1    yamt 
    779  1.1.1.3.2.1    yamt         /* Dump the AddressSize array */
    780  1.1.1.3.2.1    yamt 
    781  1.1.1.3.2.1    yamt         for (i = 0; i < SubTable->RegisterCount; i++)
    782  1.1.1.3.2.1    yamt         {
    783  1.1.1.3.2.1    yamt             ArrayOffset = SubTable->AddressSizeOffset +
    784  1.1.1.3.2.1    yamt                 (sizeof (UINT32) * i);
    785  1.1.1.3.2.1    yamt             AbsoluteOffset = Offset + ArrayOffset;
    786  1.1.1.3.2.1    yamt             Array = (UINT8 *) SubTable + ArrayOffset;
    787  1.1.1.3.2.1    yamt 
    788  1.1.1.3.2.1    yamt             Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
    789  1.1.1.3.2.1    yamt                         SubTable->Length, AcpiDmTableInfoDbg2Size);
    790  1.1.1.3.2.1    yamt             if (ACPI_FAILURE (Status))
    791  1.1.1.3.2.1    yamt             {
    792  1.1.1.3.2.1    yamt                 return;
    793  1.1.1.3.2.1    yamt             }
    794  1.1.1.3.2.1    yamt         }
    795  1.1.1.3.2.1    yamt 
    796  1.1.1.3.2.1    yamt         /* Dump the Namestring (required) */
    797  1.1.1.3.2.1    yamt 
    798  1.1.1.3.2.1    yamt         AcpiOsPrintf ("\n");
    799  1.1.1.3.2.1    yamt         ArrayOffset = SubTable->NamepathOffset;
    800  1.1.1.3.2.1    yamt         AbsoluteOffset = Offset + ArrayOffset;
    801  1.1.1.3.2.1    yamt         Array = (UINT8 *) SubTable + ArrayOffset;
    802  1.1.1.3.2.1    yamt 
    803  1.1.1.3.2.1    yamt         Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
    804  1.1.1.3.2.1    yamt                     SubTable->Length, AcpiDmTableInfoDbg2Name);
    805  1.1.1.3.2.1    yamt         if (ACPI_FAILURE (Status))
    806  1.1.1.3.2.1    yamt         {
    807  1.1.1.3.2.1    yamt             return;
    808  1.1.1.3.2.1    yamt         }
    809  1.1.1.3.2.1    yamt 
    810  1.1.1.3.2.1    yamt         /* Dump the OemData (optional) */
    811  1.1.1.3.2.1    yamt 
    812  1.1.1.3.2.1    yamt         if (SubTable->OemDataOffset)
    813  1.1.1.3.2.1    yamt         {
    814  1.1.1.3.2.1    yamt             AcpiDmDumpBuffer (SubTable, SubTable->OemDataOffset, SubTable->OemDataLength,
    815  1.1.1.3.2.1    yamt                 Offset + SubTable->OemDataOffset, "OEM Data");
    816  1.1.1.3.2.1    yamt         }
    817  1.1.1.3.2.1    yamt 
    818  1.1.1.3.2.1    yamt         /* Point to next sub-table */
    819  1.1.1.3.2.1    yamt 
    820  1.1.1.3.2.1    yamt         Offset += SubTable->Length;
    821  1.1.1.3.2.1    yamt         SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, SubTable,
    822  1.1.1.3.2.1    yamt                     SubTable->Length);
    823  1.1.1.3.2.1    yamt     }
    824  1.1.1.3.2.1    yamt }
    825  1.1.1.3.2.1    yamt 
    826  1.1.1.3.2.1    yamt 
    827  1.1.1.3.2.1    yamt /*******************************************************************************
    828  1.1.1.3.2.1    yamt  *
    829          1.1  jruoho  * FUNCTION:    AcpiDmDumpDmar
    830          1.1  jruoho  *
    831          1.1  jruoho  * PARAMETERS:  Table               - A DMAR table
    832          1.1  jruoho  *
    833          1.1  jruoho  * RETURN:      None
    834          1.1  jruoho  *
    835          1.1  jruoho  * DESCRIPTION: Format the contents of a DMAR. This table type consists
    836          1.1  jruoho  *              of an open-ended number of subtables.
    837          1.1  jruoho  *
    838          1.1  jruoho  ******************************************************************************/
    839          1.1  jruoho 
    840  1.1.1.3.2.1    yamt 
    841          1.1  jruoho void
    842          1.1  jruoho AcpiDmDumpDmar (
    843          1.1  jruoho     ACPI_TABLE_HEADER       *Table)
    844          1.1  jruoho {
    845          1.1  jruoho     ACPI_STATUS             Status;
    846          1.1  jruoho     ACPI_DMAR_HEADER        *SubTable;
    847          1.1  jruoho     UINT32                  Length = Table->Length;
    848          1.1  jruoho     UINT32                  Offset = sizeof (ACPI_TABLE_DMAR);
    849          1.1  jruoho     ACPI_DMTABLE_INFO       *InfoTable;
    850          1.1  jruoho     ACPI_DMAR_DEVICE_SCOPE  *ScopeTable;
    851          1.1  jruoho     UINT32                  ScopeOffset;
    852          1.1  jruoho     UINT8                   *PciPath;
    853          1.1  jruoho     UINT32                  PathOffset;
    854          1.1  jruoho 
    855          1.1  jruoho 
    856          1.1  jruoho     /* Main table */
    857          1.1  jruoho 
    858          1.1  jruoho     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDmar);
    859          1.1  jruoho     if (ACPI_FAILURE (Status))
    860          1.1  jruoho     {
    861          1.1  jruoho         return;
    862          1.1  jruoho     }
    863          1.1  jruoho 
    864          1.1  jruoho     /* Sub-tables */
    865          1.1  jruoho 
    866          1.1  jruoho     SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset);
    867          1.1  jruoho     while (Offset < Table->Length)
    868          1.1  jruoho     {
    869          1.1  jruoho         /* Common sub-table header */
    870          1.1  jruoho 
    871          1.1  jruoho         AcpiOsPrintf ("\n");
    872          1.1  jruoho         Status = AcpiDmDumpTable (Length, Offset, SubTable,
    873          1.1  jruoho                     SubTable->Length, AcpiDmTableInfoDmarHdr);
    874          1.1  jruoho         if (ACPI_FAILURE (Status))
    875          1.1  jruoho         {
    876          1.1  jruoho             return;
    877          1.1  jruoho         }
    878  1.1.1.3.2.1    yamt         AcpiOsPrintf ("\n");
    879          1.1  jruoho 
    880          1.1  jruoho         switch (SubTable->Type)
    881          1.1  jruoho         {
    882          1.1  jruoho         case ACPI_DMAR_TYPE_HARDWARE_UNIT:
    883  1.1.1.3.2.1    yamt 
    884          1.1  jruoho             InfoTable = AcpiDmTableInfoDmar0;
    885          1.1  jruoho             ScopeOffset = sizeof (ACPI_DMAR_HARDWARE_UNIT);
    886          1.1  jruoho             break;
    887  1.1.1.3.2.1    yamt 
    888          1.1  jruoho         case ACPI_DMAR_TYPE_RESERVED_MEMORY:
    889  1.1.1.3.2.1    yamt 
    890          1.1  jruoho             InfoTable = AcpiDmTableInfoDmar1;
    891          1.1  jruoho             ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY);
    892          1.1  jruoho             break;
    893  1.1.1.3.2.1    yamt 
    894          1.1  jruoho         case ACPI_DMAR_TYPE_ATSR:
    895  1.1.1.3.2.1    yamt 
    896          1.1  jruoho             InfoTable = AcpiDmTableInfoDmar2;
    897          1.1  jruoho             ScopeOffset = sizeof (ACPI_DMAR_ATSR);
    898          1.1  jruoho             break;
    899  1.1.1.3.2.1    yamt 
    900          1.1  jruoho         case ACPI_DMAR_HARDWARE_AFFINITY:
    901  1.1.1.3.2.1    yamt 
    902          1.1  jruoho             InfoTable = AcpiDmTableInfoDmar3;
    903          1.1  jruoho             ScopeOffset = sizeof (ACPI_DMAR_RHSA);
    904          1.1  jruoho             break;
    905  1.1.1.3.2.1    yamt 
    906          1.1  jruoho         default:
    907  1.1.1.3.2.1    yamt 
    908          1.1  jruoho             AcpiOsPrintf ("\n**** Unknown DMAR sub-table type 0x%X\n\n", SubTable->Type);
    909          1.1  jruoho             return;
    910          1.1  jruoho         }
    911          1.1  jruoho 
    912          1.1  jruoho         Status = AcpiDmDumpTable (Length, Offset, SubTable,
    913          1.1  jruoho                     SubTable->Length, InfoTable);
    914          1.1  jruoho         if (ACPI_FAILURE (Status))
    915          1.1  jruoho         {
    916          1.1  jruoho             return;
    917          1.1  jruoho         }
    918          1.1  jruoho 
    919          1.1  jruoho         /* Dump the device scope entries (if any) */
    920          1.1  jruoho 
    921          1.1  jruoho         ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, SubTable, ScopeOffset);
    922          1.1  jruoho         while (ScopeOffset < SubTable->Length)
    923          1.1  jruoho         {
    924          1.1  jruoho             AcpiOsPrintf ("\n");
    925          1.1  jruoho             Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable,
    926          1.1  jruoho                         ScopeTable->Length, AcpiDmTableInfoDmarScope);
    927          1.1  jruoho             if (ACPI_FAILURE (Status))
    928          1.1  jruoho             {
    929          1.1  jruoho                 return;
    930          1.1  jruoho             }
    931  1.1.1.3.2.1    yamt             AcpiOsPrintf ("\n");
    932          1.1  jruoho 
    933          1.1  jruoho             /* Dump the PCI Path entries for this device scope */
    934          1.1  jruoho 
    935          1.1  jruoho             PathOffset = sizeof (ACPI_DMAR_DEVICE_SCOPE); /* Path entries start at this offset */
    936          1.1  jruoho 
    937          1.1  jruoho             PciPath = ACPI_ADD_PTR (UINT8, ScopeTable,
    938          1.1  jruoho                 sizeof (ACPI_DMAR_DEVICE_SCOPE));
    939          1.1  jruoho 
    940          1.1  jruoho             while (PathOffset < ScopeTable->Length)
    941          1.1  jruoho             {
    942          1.1  jruoho                 AcpiDmLineHeader ((PathOffset + ScopeOffset + Offset), 2, "PCI Path");
    943      1.1.1.2  jruoho                 AcpiOsPrintf ("%2.2X,%2.2X\n", PciPath[0], PciPath[1]);
    944          1.1  jruoho 
    945          1.1  jruoho                 /* Point to next PCI Path entry */
    946          1.1  jruoho 
    947          1.1  jruoho                 PathOffset += 2;
    948          1.1  jruoho                 PciPath += 2;
    949  1.1.1.3.2.1    yamt                 AcpiOsPrintf ("\n");
    950          1.1  jruoho             }
    951          1.1  jruoho 
    952          1.1  jruoho             /* Point to next device scope entry */
    953          1.1  jruoho 
    954          1.1  jruoho             ScopeOffset += ScopeTable->Length;
    955          1.1  jruoho             ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE,
    956          1.1  jruoho                 ScopeTable, ScopeTable->Length);
    957          1.1  jruoho         }
    958          1.1  jruoho 
    959          1.1  jruoho         /* Point to next sub-table */
    960          1.1  jruoho 
    961          1.1  jruoho         Offset += SubTable->Length;
    962          1.1  jruoho         SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, SubTable, SubTable->Length);
    963          1.1  jruoho     }
    964          1.1  jruoho }
    965          1.1  jruoho 
    966          1.1  jruoho 
    967          1.1  jruoho /*******************************************************************************
    968          1.1  jruoho  *
    969          1.1  jruoho  * FUNCTION:    AcpiDmDumpEinj
    970          1.1  jruoho  *
    971          1.1  jruoho  * PARAMETERS:  Table               - A EINJ table
    972          1.1  jruoho  *
    973          1.1  jruoho  * RETURN:      None
    974          1.1  jruoho  *
    975          1.1  jruoho  * DESCRIPTION: Format the contents of a EINJ. This table type consists
    976          1.1  jruoho  *              of an open-ended number of subtables.
    977          1.1  jruoho  *
    978          1.1  jruoho  ******************************************************************************/
    979          1.1  jruoho 
    980          1.1  jruoho void
    981          1.1  jruoho AcpiDmDumpEinj (
    982          1.1  jruoho     ACPI_TABLE_HEADER       *Table)
    983          1.1  jruoho {
    984          1.1  jruoho     ACPI_STATUS             Status;
    985          1.1  jruoho     ACPI_WHEA_HEADER        *SubTable;
    986          1.1  jruoho     UINT32                  Length = Table->Length;
    987          1.1  jruoho     UINT32                  Offset = sizeof (ACPI_TABLE_EINJ);
    988          1.1  jruoho 
    989          1.1  jruoho 
    990          1.1  jruoho     /* Main table */
    991          1.1  jruoho 
    992          1.1  jruoho     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoEinj);
    993          1.1  jruoho     if (ACPI_FAILURE (Status))
    994          1.1  jruoho     {
    995          1.1  jruoho         return;
    996          1.1  jruoho     }
    997          1.1  jruoho 
    998          1.1  jruoho     /* Sub-tables */
    999          1.1  jruoho 
   1000          1.1  jruoho     SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
   1001          1.1  jruoho     while (Offset < Table->Length)
   1002          1.1  jruoho     {
   1003          1.1  jruoho         AcpiOsPrintf ("\n");
   1004          1.1  jruoho         Status = AcpiDmDumpTable (Length, Offset, SubTable,
   1005          1.1  jruoho                     sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoEinj0);
   1006          1.1  jruoho         if (ACPI_FAILURE (Status))
   1007          1.1  jruoho         {
   1008          1.1  jruoho             return;
   1009          1.1  jruoho         }
   1010          1.1  jruoho 
   1011          1.1  jruoho         /* Point to next sub-table (each subtable is of fixed length) */
   1012          1.1  jruoho 
   1013          1.1  jruoho         Offset += sizeof (ACPI_WHEA_HEADER);
   1014          1.1  jruoho         SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable,
   1015          1.1  jruoho                         sizeof (ACPI_WHEA_HEADER));
   1016          1.1  jruoho     }
   1017          1.1  jruoho }
   1018          1.1  jruoho 
   1019          1.1  jruoho 
   1020          1.1  jruoho /*******************************************************************************
   1021          1.1  jruoho  *
   1022          1.1  jruoho  * FUNCTION:    AcpiDmDumpErst
   1023          1.1  jruoho  *
   1024          1.1  jruoho  * PARAMETERS:  Table               - A ERST table
   1025          1.1  jruoho  *
   1026          1.1  jruoho  * RETURN:      None
   1027          1.1  jruoho  *
   1028          1.1  jruoho  * DESCRIPTION: Format the contents of a ERST. This table type consists
   1029          1.1  jruoho  *              of an open-ended number of subtables.
   1030          1.1  jruoho  *
   1031          1.1  jruoho  ******************************************************************************/
   1032          1.1  jruoho 
   1033          1.1  jruoho void
   1034          1.1  jruoho AcpiDmDumpErst (
   1035          1.1  jruoho     ACPI_TABLE_HEADER       *Table)
   1036          1.1  jruoho {
   1037          1.1  jruoho     ACPI_STATUS             Status;
   1038          1.1  jruoho     ACPI_WHEA_HEADER        *SubTable;
   1039          1.1  jruoho     UINT32                  Length = Table->Length;
   1040          1.1  jruoho     UINT32                  Offset = sizeof (ACPI_TABLE_ERST);
   1041          1.1  jruoho 
   1042          1.1  jruoho 
   1043          1.1  jruoho     /* Main table */
   1044          1.1  jruoho 
   1045          1.1  jruoho     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoErst);
   1046          1.1  jruoho     if (ACPI_FAILURE (Status))
   1047          1.1  jruoho     {
   1048          1.1  jruoho         return;
   1049          1.1  jruoho     }
   1050          1.1  jruoho 
   1051          1.1  jruoho     /* Sub-tables */
   1052          1.1  jruoho 
   1053          1.1  jruoho     SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
   1054          1.1  jruoho     while (Offset < Table->Length)
   1055          1.1  jruoho     {
   1056          1.1  jruoho         AcpiOsPrintf ("\n");
   1057          1.1  jruoho         Status = AcpiDmDumpTable (Length, Offset, SubTable,
   1058      1.1.1.2  jruoho                     sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoErst0);
   1059          1.1  jruoho         if (ACPI_FAILURE (Status))
   1060          1.1  jruoho         {
   1061          1.1  jruoho             return;
   1062          1.1  jruoho         }
   1063          1.1  jruoho 
   1064          1.1  jruoho         /* Point to next sub-table (each subtable is of fixed length) */
   1065          1.1  jruoho 
   1066          1.1  jruoho         Offset += sizeof (ACPI_WHEA_HEADER);
   1067          1.1  jruoho         SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable,
   1068          1.1  jruoho                         sizeof (ACPI_WHEA_HEADER));
   1069          1.1  jruoho     }
   1070          1.1  jruoho }
   1071          1.1  jruoho 
   1072          1.1  jruoho 
   1073          1.1  jruoho /*******************************************************************************
   1074          1.1  jruoho  *
   1075  1.1.1.3.2.1    yamt  * FUNCTION:    AcpiDmDumpFpdt
   1076          1.1  jruoho  *
   1077  1.1.1.3.2.1    yamt  * PARAMETERS:  Table               - A FPDT table
   1078          1.1  jruoho  *
   1079          1.1  jruoho  * RETURN:      None
   1080          1.1  jruoho  *
   1081  1.1.1.3.2.1    yamt  * DESCRIPTION: Format the contents of a FPDT. This table type consists
   1082          1.1  jruoho  *              of an open-ended number of subtables.
   1083          1.1  jruoho  *
   1084          1.1  jruoho  ******************************************************************************/
   1085          1.1  jruoho 
   1086          1.1  jruoho void
   1087  1.1.1.3.2.1    yamt AcpiDmDumpFpdt (
   1088          1.1  jruoho     ACPI_TABLE_HEADER       *Table)
   1089          1.1  jruoho {
   1090          1.1  jruoho     ACPI_STATUS             Status;
   1091  1.1.1.3.2.1    yamt     ACPI_FPDT_HEADER        *SubTable;
   1092          1.1  jruoho     UINT32                  Length = Table->Length;
   1093  1.1.1.3.2.1    yamt     UINT32                  Offset = sizeof (ACPI_TABLE_FPDT);
   1094          1.1  jruoho     ACPI_DMTABLE_INFO       *InfoTable;
   1095          1.1  jruoho 
   1096          1.1  jruoho 
   1097  1.1.1.3.2.1    yamt     /* There is no main table (other than the standard ACPI header) */
   1098          1.1  jruoho 
   1099          1.1  jruoho     /* Sub-tables */
   1100          1.1  jruoho 
   1101  1.1.1.3.2.1    yamt     SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset);
   1102          1.1  jruoho     while (Offset < Table->Length)
   1103          1.1  jruoho     {
   1104  1.1.1.3.2.1    yamt         /* Common sub-table header */
   1105  1.1.1.3.2.1    yamt 
   1106  1.1.1.3.2.1    yamt         AcpiOsPrintf ("\n");
   1107  1.1.1.3.2.1    yamt         Status = AcpiDmDumpTable (Length, Offset, SubTable,
   1108  1.1.1.3.2.1    yamt                     SubTable->Length, AcpiDmTableInfoFpdtHdr);
   1109  1.1.1.3.2.1    yamt         if (ACPI_FAILURE (Status))
   1110  1.1.1.3.2.1    yamt         {
   1111  1.1.1.3.2.1    yamt             return;
   1112  1.1.1.3.2.1    yamt         }
   1113  1.1.1.3.2.1    yamt 
   1114          1.1  jruoho         switch (SubTable->Type)
   1115          1.1  jruoho         {
   1116  1.1.1.3.2.1    yamt         case ACPI_FPDT_TYPE_BOOT:
   1117          1.1  jruoho 
   1118  1.1.1.3.2.1    yamt             InfoTable = AcpiDmTableInfoFpdt0;
   1119          1.1  jruoho             break;
   1120          1.1  jruoho 
   1121  1.1.1.3.2.1    yamt         case ACPI_FPDT_TYPE_S3PERF:
   1122          1.1  jruoho 
   1123  1.1.1.3.2.1    yamt             InfoTable = AcpiDmTableInfoFpdt1;
   1124          1.1  jruoho             break;
   1125          1.1  jruoho 
   1126  1.1.1.3.2.1    yamt         default:
   1127          1.1  jruoho 
   1128  1.1.1.3.2.1    yamt             AcpiOsPrintf ("\n**** Unknown FPDT sub-table type 0x%X\n\n", SubTable->Type);
   1129          1.1  jruoho 
   1130  1.1.1.3.2.1    yamt             /* Attempt to continue */
   1131  1.1.1.3.2.1    yamt 
   1132  1.1.1.3.2.1    yamt             if (!SubTable->Length)
   1133  1.1.1.3.2.1    yamt             {
   1134  1.1.1.3.2.1    yamt                 AcpiOsPrintf ("Invalid zero length subtable\n");
   1135  1.1.1.3.2.1    yamt                 return;
   1136  1.1.1.3.2.1    yamt             }
   1137  1.1.1.3.2.1    yamt             goto NextSubTable;
   1138  1.1.1.3.2.1    yamt         }
   1139  1.1.1.3.2.1    yamt 
   1140  1.1.1.3.2.1    yamt         Status = AcpiDmDumpTable (Length, Offset, SubTable,
   1141  1.1.1.3.2.1    yamt                     SubTable->Length, InfoTable);
   1142  1.1.1.3.2.1    yamt         if (ACPI_FAILURE (Status))
   1143  1.1.1.3.2.1    yamt         {
   1144  1.1.1.3.2.1    yamt             return;
   1145  1.1.1.3.2.1    yamt         }
   1146  1.1.1.3.2.1    yamt 
   1147  1.1.1.3.2.1    yamt NextSubTable:
   1148  1.1.1.3.2.1    yamt         /* Point to next sub-table */
   1149  1.1.1.3.2.1    yamt 
   1150  1.1.1.3.2.1    yamt         Offset += SubTable->Length;
   1151  1.1.1.3.2.1    yamt         SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, SubTable, SubTable->Length);
   1152  1.1.1.3.2.1    yamt     }
   1153  1.1.1.3.2.1    yamt }
   1154  1.1.1.3.2.1    yamt 
   1155  1.1.1.3.2.1    yamt 
   1156  1.1.1.3.2.1    yamt /*******************************************************************************
   1157  1.1.1.3.2.1    yamt  *
   1158  1.1.1.3.2.1    yamt  * FUNCTION:    AcpiDmDumpHest
   1159  1.1.1.3.2.1    yamt  *
   1160  1.1.1.3.2.1    yamt  * PARAMETERS:  Table               - A HEST table
   1161  1.1.1.3.2.1    yamt  *
   1162  1.1.1.3.2.1    yamt  * RETURN:      None
   1163  1.1.1.3.2.1    yamt  *
   1164  1.1.1.3.2.1    yamt  * DESCRIPTION: Format the contents of a HEST. This table type consists
   1165  1.1.1.3.2.1    yamt  *              of an open-ended number of subtables.
   1166  1.1.1.3.2.1    yamt  *
   1167  1.1.1.3.2.1    yamt  ******************************************************************************/
   1168  1.1.1.3.2.1    yamt 
   1169  1.1.1.3.2.1    yamt void
   1170  1.1.1.3.2.1    yamt AcpiDmDumpHest (
   1171  1.1.1.3.2.1    yamt     ACPI_TABLE_HEADER       *Table)
   1172  1.1.1.3.2.1    yamt {
   1173  1.1.1.3.2.1    yamt     ACPI_STATUS             Status;
   1174  1.1.1.3.2.1    yamt     ACPI_HEST_HEADER        *SubTable;
   1175  1.1.1.3.2.1    yamt     UINT32                  Length = Table->Length;
   1176  1.1.1.3.2.1    yamt     UINT32                  Offset = sizeof (ACPI_TABLE_HEST);
   1177  1.1.1.3.2.1    yamt     ACPI_DMTABLE_INFO       *InfoTable;
   1178  1.1.1.3.2.1    yamt     UINT32                  SubTableLength;
   1179  1.1.1.3.2.1    yamt     UINT32                  BankCount;
   1180  1.1.1.3.2.1    yamt     ACPI_HEST_IA_ERROR_BANK *BankTable;
   1181  1.1.1.3.2.1    yamt 
   1182  1.1.1.3.2.1    yamt 
   1183  1.1.1.3.2.1    yamt     /* Main table */
   1184  1.1.1.3.2.1    yamt 
   1185  1.1.1.3.2.1    yamt     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHest);
   1186  1.1.1.3.2.1    yamt     if (ACPI_FAILURE (Status))
   1187  1.1.1.3.2.1    yamt     {
   1188  1.1.1.3.2.1    yamt         return;
   1189  1.1.1.3.2.1    yamt     }
   1190  1.1.1.3.2.1    yamt 
   1191  1.1.1.3.2.1    yamt     /* Sub-tables */
   1192  1.1.1.3.2.1    yamt 
   1193  1.1.1.3.2.1    yamt     SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset);
   1194  1.1.1.3.2.1    yamt     while (Offset < Table->Length)
   1195  1.1.1.3.2.1    yamt     {
   1196  1.1.1.3.2.1    yamt         BankCount = 0;
   1197  1.1.1.3.2.1    yamt         switch (SubTable->Type)
   1198  1.1.1.3.2.1    yamt         {
   1199  1.1.1.3.2.1    yamt         case ACPI_HEST_TYPE_IA32_CHECK:
   1200  1.1.1.3.2.1    yamt 
   1201  1.1.1.3.2.1    yamt             InfoTable = AcpiDmTableInfoHest0;
   1202  1.1.1.3.2.1    yamt             SubTableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK);
   1203  1.1.1.3.2.1    yamt             BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK,
   1204  1.1.1.3.2.1    yamt                             SubTable))->NumHardwareBanks;
   1205  1.1.1.3.2.1    yamt             break;
   1206  1.1.1.3.2.1    yamt 
   1207  1.1.1.3.2.1    yamt         case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK:
   1208  1.1.1.3.2.1    yamt 
   1209  1.1.1.3.2.1    yamt             InfoTable = AcpiDmTableInfoHest1;
   1210  1.1.1.3.2.1    yamt             SubTableLength = sizeof (ACPI_HEST_IA_CORRECTED);
   1211  1.1.1.3.2.1    yamt             BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED,
   1212  1.1.1.3.2.1    yamt                             SubTable))->NumHardwareBanks;
   1213  1.1.1.3.2.1    yamt             break;
   1214  1.1.1.3.2.1    yamt 
   1215  1.1.1.3.2.1    yamt         case ACPI_HEST_TYPE_IA32_NMI:
   1216  1.1.1.3.2.1    yamt 
   1217  1.1.1.3.2.1    yamt             InfoTable = AcpiDmTableInfoHest2;
   1218  1.1.1.3.2.1    yamt             SubTableLength = sizeof (ACPI_HEST_IA_NMI);
   1219  1.1.1.3.2.1    yamt             break;
   1220  1.1.1.3.2.1    yamt 
   1221  1.1.1.3.2.1    yamt         case ACPI_HEST_TYPE_AER_ROOT_PORT:
   1222  1.1.1.3.2.1    yamt 
   1223  1.1.1.3.2.1    yamt             InfoTable = AcpiDmTableInfoHest6;
   1224  1.1.1.3.2.1    yamt             SubTableLength = sizeof (ACPI_HEST_AER_ROOT);
   1225  1.1.1.3.2.1    yamt             break;
   1226  1.1.1.3.2.1    yamt 
   1227  1.1.1.3.2.1    yamt         case ACPI_HEST_TYPE_AER_ENDPOINT:
   1228  1.1.1.3.2.1    yamt 
   1229  1.1.1.3.2.1    yamt             InfoTable = AcpiDmTableInfoHest7;
   1230  1.1.1.3.2.1    yamt             SubTableLength = sizeof (ACPI_HEST_AER);
   1231  1.1.1.3.2.1    yamt             break;
   1232  1.1.1.3.2.1    yamt 
   1233  1.1.1.3.2.1    yamt         case ACPI_HEST_TYPE_AER_BRIDGE:
   1234  1.1.1.3.2.1    yamt 
   1235  1.1.1.3.2.1    yamt             InfoTable = AcpiDmTableInfoHest8;
   1236  1.1.1.3.2.1    yamt             SubTableLength = sizeof (ACPI_HEST_AER_BRIDGE);
   1237  1.1.1.3.2.1    yamt             break;
   1238  1.1.1.3.2.1    yamt 
   1239  1.1.1.3.2.1    yamt         case ACPI_HEST_TYPE_GENERIC_ERROR:
   1240  1.1.1.3.2.1    yamt 
   1241  1.1.1.3.2.1    yamt             InfoTable = AcpiDmTableInfoHest9;
   1242  1.1.1.3.2.1    yamt             SubTableLength = sizeof (ACPI_HEST_GENERIC);
   1243  1.1.1.3.2.1    yamt             break;
   1244          1.1  jruoho 
   1245          1.1  jruoho         default:
   1246  1.1.1.3.2.1    yamt 
   1247          1.1  jruoho             /* Cannot continue on unknown type - no length */
   1248          1.1  jruoho 
   1249          1.1  jruoho             AcpiOsPrintf ("\n**** Unknown HEST sub-table type 0x%X\n", SubTable->Type);
   1250          1.1  jruoho             return;
   1251          1.1  jruoho         }
   1252          1.1  jruoho 
   1253          1.1  jruoho         AcpiOsPrintf ("\n");
   1254          1.1  jruoho         Status = AcpiDmDumpTable (Length, Offset, SubTable,
   1255          1.1  jruoho                     SubTableLength, InfoTable);
   1256          1.1  jruoho         if (ACPI_FAILURE (Status))
   1257          1.1  jruoho         {
   1258          1.1  jruoho             return;
   1259          1.1  jruoho         }
   1260          1.1  jruoho 
   1261          1.1  jruoho         /* Point to end of current subtable (each subtable above is of fixed length) */
   1262          1.1  jruoho 
   1263          1.1  jruoho         Offset += SubTableLength;
   1264          1.1  jruoho 
   1265          1.1  jruoho         /* If there are any (fixed-length) Error Banks from above, dump them now */
   1266          1.1  jruoho 
   1267          1.1  jruoho         if (BankCount)
   1268          1.1  jruoho         {
   1269          1.1  jruoho             BankTable = ACPI_ADD_PTR (ACPI_HEST_IA_ERROR_BANK, SubTable, SubTableLength);
   1270          1.1  jruoho             SubTableLength += BankCount * sizeof (ACPI_HEST_IA_ERROR_BANK);
   1271          1.1  jruoho 
   1272          1.1  jruoho             while (BankCount)
   1273          1.1  jruoho             {
   1274          1.1  jruoho                 AcpiOsPrintf ("\n");
   1275          1.1  jruoho                 Status = AcpiDmDumpTable (Length, Offset, BankTable,
   1276          1.1  jruoho                             sizeof (ACPI_HEST_IA_ERROR_BANK), AcpiDmTableInfoHestBank);
   1277          1.1  jruoho                 if (ACPI_FAILURE (Status))
   1278          1.1  jruoho                 {
   1279          1.1  jruoho                     return;
   1280          1.1  jruoho                 }
   1281          1.1  jruoho                 Offset += sizeof (ACPI_HEST_IA_ERROR_BANK);
   1282          1.1  jruoho                 BankTable++;
   1283          1.1  jruoho                 BankCount--;
   1284          1.1  jruoho             }
   1285          1.1  jruoho         }
   1286          1.1  jruoho 
   1287          1.1  jruoho         /* Point to next sub-table */
   1288          1.1  jruoho 
   1289          1.1  jruoho         SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, SubTable, SubTableLength);
   1290          1.1  jruoho     }
   1291          1.1  jruoho }
   1292          1.1  jruoho 
   1293          1.1  jruoho 
   1294          1.1  jruoho /*******************************************************************************
   1295          1.1  jruoho  *
   1296          1.1  jruoho  * FUNCTION:    AcpiDmDumpIvrs
   1297          1.1  jruoho  *
   1298          1.1  jruoho  * PARAMETERS:  Table               - A IVRS table
   1299          1.1  jruoho  *
   1300          1.1  jruoho  * RETURN:      None
   1301          1.1  jruoho  *
   1302          1.1  jruoho  * DESCRIPTION: Format the contents of a IVRS
   1303          1.1  jruoho  *
   1304          1.1  jruoho  ******************************************************************************/
   1305          1.1  jruoho 
   1306          1.1  jruoho static UINT8 EntrySizes[] = {4,8,16,32};
   1307          1.1  jruoho 
   1308          1.1  jruoho void
   1309          1.1  jruoho AcpiDmDumpIvrs (
   1310          1.1  jruoho     ACPI_TABLE_HEADER       *Table)
   1311          1.1  jruoho {
   1312          1.1  jruoho     ACPI_STATUS             Status;
   1313          1.1  jruoho     UINT32                  Offset = sizeof (ACPI_TABLE_IVRS);
   1314          1.1  jruoho     UINT32                  EntryOffset;
   1315          1.1  jruoho     UINT32                  EntryLength;
   1316          1.1  jruoho     UINT32                  EntryType;
   1317          1.1  jruoho     ACPI_IVRS_DE_HEADER     *DeviceEntry;
   1318          1.1  jruoho     ACPI_IVRS_HEADER        *SubTable;
   1319          1.1  jruoho     ACPI_DMTABLE_INFO       *InfoTable;
   1320          1.1  jruoho 
   1321          1.1  jruoho 
   1322          1.1  jruoho     /* Main table */
   1323          1.1  jruoho 
   1324          1.1  jruoho     Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs);
   1325          1.1  jruoho     if (ACPI_FAILURE (Status))
   1326          1.1  jruoho     {
   1327          1.1  jruoho         return;
   1328          1.1  jruoho     }
   1329          1.1  jruoho 
   1330          1.1  jruoho     /* Sub-tables */
   1331          1.1  jruoho 
   1332          1.1  jruoho     SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
   1333          1.1  jruoho     while (Offset < Table->Length)
   1334          1.1  jruoho     {
   1335          1.1  jruoho         /* Common sub-table header */
   1336          1.1  jruoho 
   1337          1.1  jruoho         AcpiOsPrintf ("\n");
   1338          1.1  jruoho         Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
   1339          1.1  jruoho                     SubTable->Length, AcpiDmTableInfoIvrsHdr);
   1340          1.1  jruoho         if (ACPI_FAILURE (Status))
   1341          1.1  jruoho         {
   1342          1.1  jruoho             return;
   1343          1.1  jruoho         }
   1344          1.1  jruoho 
   1345          1.1  jruoho         switch (SubTable->Type)
   1346          1.1  jruoho         {
   1347          1.1  jruoho         case ACPI_IVRS_TYPE_HARDWARE:
   1348  1.1.1.3.2.1    yamt 
   1349          1.1  jruoho             InfoTable = AcpiDmTableInfoIvrs0;
   1350          1.1  jruoho             break;
   1351  1.1.1.3.2.1    yamt 
   1352          1.1  jruoho         case ACPI_IVRS_TYPE_MEMORY1:
   1353          1.1  jruoho         case ACPI_IVRS_TYPE_MEMORY2:
   1354          1.1  jruoho         case ACPI_IVRS_TYPE_MEMORY3:
   1355  1.1.1.3.2.1    yamt 
   1356          1.1  jruoho             InfoTable = AcpiDmTableInfoIvrs1;
   1357          1.1  jruoho             break;
   1358  1.1.1.3.2.1    yamt 
   1359          1.1  jruoho         default:
   1360  1.1.1.3.2.1    yamt 
   1361          1.1  jruoho             AcpiOsPrintf ("\n**** Unknown IVRS sub-table type 0x%X\n",
   1362          1.1  jruoho                 SubTable->Type);
   1363          1.1  jruoho 
   1364          1.1  jruoho             /* Attempt to continue */
   1365          1.1  jruoho 
   1366          1.1  jruoho             if (!SubTable->Length)
   1367          1.1  jruoho             {
   1368          1.1  jruoho                 AcpiOsPrintf ("Invalid zero length subtable\n");
   1369          1.1  jruoho                 return;
   1370          1.1  jruoho             }
   1371          1.1  jruoho             goto NextSubTable;
   1372          1.1  jruoho         }
   1373          1.1  jruoho 
   1374          1.1  jruoho         /* Dump the subtable */
   1375          1.1  jruoho 
   1376          1.1  jruoho         AcpiOsPrintf ("\n");
   1377          1.1  jruoho         Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
   1378          1.1  jruoho                     SubTable->Length, InfoTable);
   1379          1.1  jruoho         if (ACPI_FAILURE (Status))
   1380          1.1  jruoho         {
   1381          1.1  jruoho             return;
   1382          1.1  jruoho         }
   1383          1.1  jruoho 
   1384          1.1  jruoho         /* The hardware subtable can contain multiple device entries */
   1385          1.1  jruoho 
   1386          1.1  jruoho         if (SubTable->Type == ACPI_IVRS_TYPE_HARDWARE)
   1387          1.1  jruoho         {
   1388          1.1  jruoho             EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE);
   1389          1.1  jruoho             DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, SubTable,
   1390          1.1  jruoho                             sizeof (ACPI_IVRS_HARDWARE));
   1391          1.1  jruoho 
   1392          1.1  jruoho             while (EntryOffset < (Offset + SubTable->Length))
   1393          1.1  jruoho             {
   1394          1.1  jruoho                 AcpiOsPrintf ("\n");
   1395          1.1  jruoho                 /*
   1396          1.1  jruoho                  * Upper 2 bits of Type encode the length of the device entry
   1397          1.1  jruoho                  *
   1398          1.1  jruoho                  * 00 = 4 byte
   1399          1.1  jruoho                  * 01 = 8 byte
   1400          1.1  jruoho                  * 10 = 16 byte - currently no entries defined
   1401          1.1  jruoho                  * 11 = 32 byte - currently no entries defined
   1402          1.1  jruoho                  */
   1403          1.1  jruoho                 EntryType = DeviceEntry->Type;
   1404          1.1  jruoho                 EntryLength = EntrySizes [EntryType >> 6];
   1405          1.1  jruoho 
   1406          1.1  jruoho                 switch (EntryType)
   1407          1.1  jruoho                 {
   1408          1.1  jruoho                 /* 4-byte device entries */
   1409          1.1  jruoho 
   1410          1.1  jruoho                 case ACPI_IVRS_TYPE_PAD4:
   1411          1.1  jruoho                 case ACPI_IVRS_TYPE_ALL:
   1412          1.1  jruoho                 case ACPI_IVRS_TYPE_SELECT:
   1413          1.1  jruoho                 case ACPI_IVRS_TYPE_START:
   1414          1.1  jruoho                 case ACPI_IVRS_TYPE_END:
   1415          1.1  jruoho 
   1416          1.1  jruoho                     InfoTable = AcpiDmTableInfoIvrs4;
   1417          1.1  jruoho                     break;
   1418          1.1  jruoho 
   1419          1.1  jruoho                 /* 8-byte entries, type A */
   1420          1.1  jruoho 
   1421          1.1  jruoho                 case ACPI_IVRS_TYPE_ALIAS_SELECT:
   1422          1.1  jruoho                 case ACPI_IVRS_TYPE_ALIAS_START:
   1423          1.1  jruoho 
   1424          1.1  jruoho                     InfoTable = AcpiDmTableInfoIvrs8a;
   1425          1.1  jruoho                     break;
   1426          1.1  jruoho 
   1427          1.1  jruoho                 /* 8-byte entries, type B */
   1428          1.1  jruoho 
   1429          1.1  jruoho                 case ACPI_IVRS_TYPE_PAD8:
   1430          1.1  jruoho                 case ACPI_IVRS_TYPE_EXT_SELECT:
   1431          1.1  jruoho                 case ACPI_IVRS_TYPE_EXT_START:
   1432          1.1  jruoho 
   1433          1.1  jruoho                     InfoTable = AcpiDmTableInfoIvrs8b;
   1434          1.1  jruoho                     break;
   1435          1.1  jruoho 
   1436          1.1  jruoho                 /* 8-byte entries, type C */
   1437          1.1  jruoho 
   1438          1.1  jruoho                 case ACPI_IVRS_TYPE_SPECIAL:
   1439          1.1  jruoho 
   1440          1.1  jruoho                     InfoTable = AcpiDmTableInfoIvrs8c;
   1441          1.1  jruoho                     break;
   1442          1.1  jruoho 
   1443          1.1  jruoho                 default:
   1444          1.1  jruoho                     InfoTable = AcpiDmTableInfoIvrs4;
   1445          1.1  jruoho                     AcpiOsPrintf (
   1446          1.1  jruoho                         "\n**** Unknown IVRS device entry type/length: "
   1447          1.1  jruoho                         "0x%.2X/0x%X at offset 0x%.4X: (header below)\n",
   1448          1.1  jruoho                         EntryType, EntryLength, EntryOffset);
   1449          1.1  jruoho                     break;
   1450          1.1  jruoho                 }
   1451          1.1  jruoho 
   1452          1.1  jruoho                 /* Dump the Device Entry */
   1453          1.1  jruoho 
   1454          1.1  jruoho                 Status = AcpiDmDumpTable (Table->Length, EntryOffset,
   1455          1.1  jruoho                             DeviceEntry, EntryLength, InfoTable);
   1456          1.1  jruoho 
   1457          1.1  jruoho                 EntryOffset += EntryLength;
   1458          1.1  jruoho                 DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry,
   1459          1.1  jruoho                                 EntryLength);
   1460          1.1  jruoho             }
   1461          1.1  jruoho         }
   1462          1.1  jruoho 
   1463          1.1  jruoho NextSubTable:
   1464          1.1  jruoho         /* Point to next sub-table */
   1465          1.1  jruoho 
   1466          1.1  jruoho         Offset += SubTable->Length;
   1467          1.1  jruoho         SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, SubTable, SubTable->Length);
   1468          1.1  jruoho     }
   1469          1.1  jruoho }
   1470          1.1  jruoho 
   1471          1.1  jruoho 
   1472          1.1  jruoho /*******************************************************************************
   1473          1.1  jruoho  *
   1474          1.1  jruoho  * FUNCTION:    AcpiDmDumpMadt
   1475          1.1  jruoho  *
   1476          1.1  jruoho  * PARAMETERS:  Table               - A MADT table
   1477          1.1  jruoho  *
   1478          1.1  jruoho  * RETURN:      None
   1479          1.1  jruoho  *
   1480          1.1  jruoho  * DESCRIPTION: Format the contents of a MADT. This table type consists
   1481          1.1  jruoho  *              of an open-ended number of subtables.
   1482          1.1  jruoho  *
   1483          1.1  jruoho  ******************************************************************************/
   1484          1.1  jruoho 
   1485          1.1  jruoho void
   1486          1.1  jruoho AcpiDmDumpMadt (
   1487          1.1  jruoho     ACPI_TABLE_HEADER       *Table)
   1488          1.1  jruoho {
   1489          1.1  jruoho     ACPI_STATUS             Status;
   1490          1.1  jruoho     ACPI_SUBTABLE_HEADER    *SubTable;
   1491          1.1  jruoho     UINT32                  Length = Table->Length;
   1492          1.1  jruoho     UINT32                  Offset = sizeof (ACPI_TABLE_MADT);
   1493          1.1  jruoho     ACPI_DMTABLE_INFO       *InfoTable;
   1494          1.1  jruoho 
   1495          1.1  jruoho 
   1496          1.1  jruoho     /* Main table */
   1497          1.1  jruoho 
   1498          1.1  jruoho     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMadt);
   1499          1.1  jruoho     if (ACPI_FAILURE (Status))
   1500          1.1  jruoho     {
   1501          1.1  jruoho         return;
   1502          1.1  jruoho     }
   1503          1.1  jruoho 
   1504          1.1  jruoho     /* Sub-tables */
   1505          1.1  jruoho 
   1506          1.1  jruoho     SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
   1507          1.1  jruoho     while (Offset < Table->Length)
   1508          1.1  jruoho     {
   1509          1.1  jruoho         /* Common sub-table header */
   1510          1.1  jruoho 
   1511          1.1  jruoho         AcpiOsPrintf ("\n");
   1512          1.1  jruoho         Status = AcpiDmDumpTable (Length, Offset, SubTable,
   1513          1.1  jruoho                     SubTable->Length, AcpiDmTableInfoMadtHdr);
   1514          1.1  jruoho         if (ACPI_FAILURE (Status))
   1515          1.1  jruoho         {
   1516          1.1  jruoho             return;
   1517          1.1  jruoho         }
   1518          1.1  jruoho 
   1519          1.1  jruoho         switch (SubTable->Type)
   1520          1.1  jruoho         {
   1521          1.1  jruoho         case ACPI_MADT_TYPE_LOCAL_APIC:
   1522  1.1.1.3.2.1    yamt 
   1523          1.1  jruoho             InfoTable = AcpiDmTableInfoMadt0;
   1524          1.1  jruoho             break;
   1525  1.1.1.3.2.1    yamt 
   1526          1.1  jruoho         case ACPI_MADT_TYPE_IO_APIC:
   1527  1.1.1.3.2.1    yamt 
   1528          1.1  jruoho             InfoTable = AcpiDmTableInfoMadt1;
   1529          1.1  jruoho             break;
   1530  1.1.1.3.2.1    yamt 
   1531          1.1  jruoho         case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE:
   1532  1.1.1.3.2.1    yamt 
   1533          1.1  jruoho             InfoTable = AcpiDmTableInfoMadt2;
   1534          1.1  jruoho             break;
   1535  1.1.1.3.2.1    yamt 
   1536          1.1  jruoho         case ACPI_MADT_TYPE_NMI_SOURCE:
   1537  1.1.1.3.2.1    yamt 
   1538          1.1  jruoho             InfoTable = AcpiDmTableInfoMadt3;
   1539          1.1  jruoho             break;
   1540  1.1.1.3.2.1    yamt 
   1541          1.1  jruoho         case ACPI_MADT_TYPE_LOCAL_APIC_NMI:
   1542  1.1.1.3.2.1    yamt 
   1543          1.1  jruoho             InfoTable = AcpiDmTableInfoMadt4;
   1544          1.1  jruoho             break;
   1545  1.1.1.3.2.1    yamt 
   1546          1.1  jruoho         case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE:
   1547  1.1.1.3.2.1    yamt 
   1548          1.1  jruoho             InfoTable = AcpiDmTableInfoMadt5;
   1549          1.1  jruoho             break;
   1550  1.1.1.3.2.1    yamt 
   1551          1.1  jruoho         case ACPI_MADT_TYPE_IO_SAPIC:
   1552  1.1.1.3.2.1    yamt 
   1553          1.1  jruoho             InfoTable = AcpiDmTableInfoMadt6;
   1554          1.1  jruoho             break;
   1555  1.1.1.3.2.1    yamt 
   1556          1.1  jruoho         case ACPI_MADT_TYPE_LOCAL_SAPIC:
   1557  1.1.1.3.2.1    yamt 
   1558          1.1  jruoho             InfoTable = AcpiDmTableInfoMadt7;
   1559          1.1  jruoho             break;
   1560  1.1.1.3.2.1    yamt 
   1561          1.1  jruoho         case ACPI_MADT_TYPE_INTERRUPT_SOURCE:
   1562  1.1.1.3.2.1    yamt 
   1563          1.1  jruoho             InfoTable = AcpiDmTableInfoMadt8;
   1564          1.1  jruoho             break;
   1565  1.1.1.3.2.1    yamt 
   1566          1.1  jruoho         case ACPI_MADT_TYPE_LOCAL_X2APIC:
   1567  1.1.1.3.2.1    yamt 
   1568          1.1  jruoho             InfoTable = AcpiDmTableInfoMadt9;
   1569          1.1  jruoho             break;
   1570  1.1.1.3.2.1    yamt 
   1571          1.1  jruoho         case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI:
   1572  1.1.1.3.2.1    yamt 
   1573          1.1  jruoho             InfoTable = AcpiDmTableInfoMadt10;
   1574          1.1  jruoho             break;
   1575  1.1.1.3.2.1    yamt 
   1576  1.1.1.3.2.1    yamt         case ACPI_MADT_TYPE_GENERIC_INTERRUPT:
   1577  1.1.1.3.2.1    yamt 
   1578  1.1.1.3.2.1    yamt             InfoTable = AcpiDmTableInfoMadt11;
   1579  1.1.1.3.2.1    yamt             break;
   1580  1.1.1.3.2.1    yamt 
   1581  1.1.1.3.2.1    yamt         case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR:
   1582  1.1.1.3.2.1    yamt 
   1583  1.1.1.3.2.1    yamt             InfoTable = AcpiDmTableInfoMadt12;
   1584  1.1.1.3.2.1    yamt             break;
   1585  1.1.1.3.2.1    yamt 
   1586          1.1  jruoho         default:
   1587  1.1.1.3.2.1    yamt 
   1588          1.1  jruoho             AcpiOsPrintf ("\n**** Unknown MADT sub-table type 0x%X\n\n", SubTable->Type);
   1589          1.1  jruoho 
   1590          1.1  jruoho             /* Attempt to continue */
   1591          1.1  jruoho 
   1592          1.1  jruoho             if (!SubTable->Length)
   1593          1.1  jruoho             {
   1594          1.1  jruoho                 AcpiOsPrintf ("Invalid zero length subtable\n");
   1595          1.1  jruoho                 return;
   1596          1.1  jruoho             }
   1597          1.1  jruoho             goto NextSubTable;
   1598          1.1  jruoho         }
   1599          1.1  jruoho 
   1600          1.1  jruoho         Status = AcpiDmDumpTable (Length, Offset, SubTable,
   1601          1.1  jruoho                     SubTable->Length, InfoTable);
   1602          1.1  jruoho         if (ACPI_FAILURE (Status))
   1603          1.1  jruoho         {
   1604          1.1  jruoho             return;
   1605          1.1  jruoho         }
   1606          1.1  jruoho 
   1607          1.1  jruoho NextSubTable:
   1608          1.1  jruoho         /* Point to next sub-table */
   1609          1.1  jruoho 
   1610          1.1  jruoho         Offset += SubTable->Length;
   1611          1.1  jruoho         SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, SubTable->Length);
   1612          1.1  jruoho     }
   1613          1.1  jruoho }
   1614          1.1  jruoho 
   1615          1.1  jruoho 
   1616          1.1  jruoho /*******************************************************************************
   1617          1.1  jruoho  *
   1618          1.1  jruoho  * FUNCTION:    AcpiDmDumpMcfg
   1619          1.1  jruoho  *
   1620          1.1  jruoho  * PARAMETERS:  Table               - A MCFG Table
   1621          1.1  jruoho  *
   1622          1.1  jruoho  * RETURN:      None
   1623          1.1  jruoho  *
   1624          1.1  jruoho  * DESCRIPTION: Format the contents of a MCFG table
   1625          1.1  jruoho  *
   1626          1.1  jruoho  ******************************************************************************/
   1627          1.1  jruoho 
   1628          1.1  jruoho void
   1629          1.1  jruoho AcpiDmDumpMcfg (
   1630          1.1  jruoho     ACPI_TABLE_HEADER       *Table)
   1631          1.1  jruoho {
   1632          1.1  jruoho     ACPI_STATUS             Status;
   1633          1.1  jruoho     UINT32                  Offset = sizeof (ACPI_TABLE_MCFG);
   1634          1.1  jruoho     ACPI_MCFG_ALLOCATION    *SubTable;
   1635          1.1  jruoho 
   1636          1.1  jruoho 
   1637          1.1  jruoho     /* Main table */
   1638          1.1  jruoho 
   1639          1.1  jruoho     Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg);
   1640          1.1  jruoho     if (ACPI_FAILURE (Status))
   1641          1.1  jruoho     {
   1642          1.1  jruoho         return;
   1643          1.1  jruoho     }
   1644          1.1  jruoho 
   1645          1.1  jruoho     /* Sub-tables */
   1646          1.1  jruoho 
   1647          1.1  jruoho     SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset);
   1648          1.1  jruoho     while (Offset < Table->Length)
   1649          1.1  jruoho     {
   1650          1.1  jruoho         if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length)
   1651          1.1  jruoho         {
   1652          1.1  jruoho             AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n",
   1653          1.1  jruoho                 sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length));
   1654          1.1  jruoho             return;
   1655          1.1  jruoho         }
   1656          1.1  jruoho 
   1657          1.1  jruoho         AcpiOsPrintf ("\n");
   1658          1.1  jruoho         Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
   1659          1.1  jruoho                     sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0);
   1660          1.1  jruoho         if (ACPI_FAILURE (Status))
   1661          1.1  jruoho         {
   1662          1.1  jruoho             return;
   1663          1.1  jruoho         }
   1664          1.1  jruoho 
   1665          1.1  jruoho         /* Point to next sub-table (each subtable is of fixed length) */
   1666          1.1  jruoho 
   1667          1.1  jruoho         Offset += sizeof (ACPI_MCFG_ALLOCATION);
   1668          1.1  jruoho         SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, SubTable,
   1669          1.1  jruoho                         sizeof (ACPI_MCFG_ALLOCATION));
   1670          1.1  jruoho     }
   1671          1.1  jruoho }
   1672          1.1  jruoho 
   1673          1.1  jruoho 
   1674          1.1  jruoho /*******************************************************************************
   1675          1.1  jruoho  *
   1676  1.1.1.3.2.1    yamt  * FUNCTION:    AcpiDmDumpMpst
   1677  1.1.1.3.2.1    yamt  *
   1678  1.1.1.3.2.1    yamt  * PARAMETERS:  Table               - A MPST Table
   1679  1.1.1.3.2.1    yamt  *
   1680  1.1.1.3.2.1    yamt  * RETURN:      None
   1681  1.1.1.3.2.1    yamt  *
   1682  1.1.1.3.2.1    yamt  * DESCRIPTION: Format the contents of a MPST table
   1683  1.1.1.3.2.1    yamt  *
   1684  1.1.1.3.2.1    yamt  ******************************************************************************/
   1685  1.1.1.3.2.1    yamt 
   1686  1.1.1.3.2.1    yamt void
   1687  1.1.1.3.2.1    yamt AcpiDmDumpMpst (
   1688  1.1.1.3.2.1    yamt     ACPI_TABLE_HEADER       *Table)
   1689  1.1.1.3.2.1    yamt {
   1690  1.1.1.3.2.1    yamt     ACPI_STATUS             Status;
   1691  1.1.1.3.2.1    yamt     UINT32                  Offset = sizeof (ACPI_TABLE_MPST);
   1692  1.1.1.3.2.1    yamt     ACPI_MPST_POWER_NODE    *SubTable0;
   1693  1.1.1.3.2.1    yamt     ACPI_MPST_POWER_STATE   *SubTable0A;
   1694  1.1.1.3.2.1    yamt     ACPI_MPST_COMPONENT     *SubTable0B;
   1695  1.1.1.3.2.1    yamt     ACPI_MPST_DATA_HDR      *SubTable1;
   1696  1.1.1.3.2.1    yamt     ACPI_MPST_POWER_DATA    *SubTable2;
   1697  1.1.1.3.2.1    yamt     UINT16                  SubtableCount;
   1698  1.1.1.3.2.1    yamt     UINT32                  PowerStateCount;
   1699  1.1.1.3.2.1    yamt     UINT32                  ComponentCount;
   1700  1.1.1.3.2.1    yamt 
   1701  1.1.1.3.2.1    yamt 
   1702  1.1.1.3.2.1    yamt     /* Main table */
   1703  1.1.1.3.2.1    yamt 
   1704  1.1.1.3.2.1    yamt     Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMpst);
   1705  1.1.1.3.2.1    yamt     if (ACPI_FAILURE (Status))
   1706  1.1.1.3.2.1    yamt     {
   1707  1.1.1.3.2.1    yamt         return;
   1708  1.1.1.3.2.1    yamt     }
   1709  1.1.1.3.2.1    yamt 
   1710  1.1.1.3.2.1    yamt     /* Subtable: Memory Power Node(s) */
   1711  1.1.1.3.2.1    yamt 
   1712  1.1.1.3.2.1    yamt     SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount;
   1713  1.1.1.3.2.1    yamt     SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset);
   1714  1.1.1.3.2.1    yamt 
   1715  1.1.1.3.2.1    yamt     while ((Offset < Table->Length) && SubtableCount)
   1716  1.1.1.3.2.1    yamt     {
   1717  1.1.1.3.2.1    yamt         AcpiOsPrintf ("\n");
   1718  1.1.1.3.2.1    yamt         Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0,
   1719  1.1.1.3.2.1    yamt                     sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0);
   1720  1.1.1.3.2.1    yamt         if (ACPI_FAILURE (Status))
   1721  1.1.1.3.2.1    yamt         {
   1722  1.1.1.3.2.1    yamt             return;
   1723  1.1.1.3.2.1    yamt         }
   1724  1.1.1.3.2.1    yamt 
   1725  1.1.1.3.2.1    yamt         /* Extract the sub-subtable counts */
   1726  1.1.1.3.2.1    yamt 
   1727  1.1.1.3.2.1    yamt         PowerStateCount = SubTable0->NumPowerStates;
   1728  1.1.1.3.2.1    yamt         ComponentCount = SubTable0->NumPhysicalComponents;
   1729  1.1.1.3.2.1    yamt         Offset += sizeof (ACPI_MPST_POWER_NODE);
   1730  1.1.1.3.2.1    yamt 
   1731  1.1.1.3.2.1    yamt         /* Sub-subtables - Memory Power State Structure(s) */
   1732  1.1.1.3.2.1    yamt 
   1733  1.1.1.3.2.1    yamt         SubTable0A = ACPI_ADD_PTR (ACPI_MPST_POWER_STATE, SubTable0,
   1734  1.1.1.3.2.1    yamt             sizeof (ACPI_MPST_POWER_NODE));
   1735  1.1.1.3.2.1    yamt 
   1736  1.1.1.3.2.1    yamt         while (PowerStateCount)
   1737  1.1.1.3.2.1    yamt         {
   1738  1.1.1.3.2.1    yamt             AcpiOsPrintf ("\n");
   1739  1.1.1.3.2.1    yamt             Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0A,
   1740  1.1.1.3.2.1    yamt                         sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A);
   1741  1.1.1.3.2.1    yamt             if (ACPI_FAILURE (Status))
   1742  1.1.1.3.2.1    yamt             {
   1743  1.1.1.3.2.1    yamt                 return;
   1744  1.1.1.3.2.1    yamt             }
   1745  1.1.1.3.2.1    yamt 
   1746  1.1.1.3.2.1    yamt             SubTable0A++;
   1747  1.1.1.3.2.1    yamt             PowerStateCount--;
   1748  1.1.1.3.2.1    yamt             Offset += sizeof (ACPI_MPST_POWER_STATE);
   1749  1.1.1.3.2.1    yamt        }
   1750  1.1.1.3.2.1    yamt 
   1751  1.1.1.3.2.1    yamt         /* Sub-subtables - Physical Component ID Structure(s) */
   1752  1.1.1.3.2.1    yamt 
   1753  1.1.1.3.2.1    yamt         SubTable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, SubTable0A);
   1754  1.1.1.3.2.1    yamt 
   1755  1.1.1.3.2.1    yamt         if (ComponentCount)
   1756  1.1.1.3.2.1    yamt         {
   1757  1.1.1.3.2.1    yamt             AcpiOsPrintf ("\n");
   1758  1.1.1.3.2.1    yamt         }
   1759  1.1.1.3.2.1    yamt 
   1760  1.1.1.3.2.1    yamt         while (ComponentCount)
   1761  1.1.1.3.2.1    yamt         {
   1762  1.1.1.3.2.1    yamt             Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0B,
   1763  1.1.1.3.2.1    yamt                         sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B);
   1764  1.1.1.3.2.1    yamt             if (ACPI_FAILURE (Status))
   1765  1.1.1.3.2.1    yamt             {
   1766  1.1.1.3.2.1    yamt                 return;
   1767  1.1.1.3.2.1    yamt             }
   1768  1.1.1.3.2.1    yamt 
   1769  1.1.1.3.2.1    yamt             SubTable0B++;
   1770  1.1.1.3.2.1    yamt             ComponentCount--;
   1771  1.1.1.3.2.1    yamt             Offset += sizeof (ACPI_MPST_COMPONENT);
   1772  1.1.1.3.2.1    yamt         }
   1773  1.1.1.3.2.1    yamt 
   1774  1.1.1.3.2.1    yamt         /* Point to next Memory Power Node subtable */
   1775  1.1.1.3.2.1    yamt 
   1776  1.1.1.3.2.1    yamt         SubtableCount--;
   1777  1.1.1.3.2.1    yamt         SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, SubTable0,
   1778  1.1.1.3.2.1    yamt             sizeof (ACPI_MPST_POWER_NODE) +
   1779  1.1.1.3.2.1    yamt             (sizeof (ACPI_MPST_POWER_STATE) * SubTable0->NumPowerStates) +
   1780  1.1.1.3.2.1    yamt             (sizeof (ACPI_MPST_COMPONENT) * SubTable0->NumPhysicalComponents));
   1781  1.1.1.3.2.1    yamt     }
   1782  1.1.1.3.2.1    yamt 
   1783  1.1.1.3.2.1    yamt     /* Subtable: Count of Memory Power State Characteristic structures */
   1784  1.1.1.3.2.1    yamt 
   1785  1.1.1.3.2.1    yamt     AcpiOsPrintf ("\n");
   1786  1.1.1.3.2.1    yamt     SubTable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, SubTable0);
   1787  1.1.1.3.2.1    yamt     Status = AcpiDmDumpTable (Table->Length, Offset, SubTable1,
   1788  1.1.1.3.2.1    yamt                 sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1);
   1789  1.1.1.3.2.1    yamt     if (ACPI_FAILURE (Status))
   1790  1.1.1.3.2.1    yamt     {
   1791  1.1.1.3.2.1    yamt         return;
   1792  1.1.1.3.2.1    yamt     }
   1793  1.1.1.3.2.1    yamt 
   1794  1.1.1.3.2.1    yamt     SubtableCount = SubTable1->CharacteristicsCount;
   1795  1.1.1.3.2.1    yamt     Offset += sizeof (ACPI_MPST_DATA_HDR);
   1796  1.1.1.3.2.1    yamt 
   1797  1.1.1.3.2.1    yamt     /* Subtable: Memory Power State Characteristics structure(s) */
   1798  1.1.1.3.2.1    yamt 
   1799  1.1.1.3.2.1    yamt     SubTable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, SubTable1, sizeof (ACPI_MPST_DATA_HDR));
   1800  1.1.1.3.2.1    yamt 
   1801  1.1.1.3.2.1    yamt     while ((Offset < Table->Length) && SubtableCount)
   1802  1.1.1.3.2.1    yamt     {
   1803  1.1.1.3.2.1    yamt         AcpiOsPrintf ("\n");
   1804  1.1.1.3.2.1    yamt         Status = AcpiDmDumpTable (Table->Length, Offset, SubTable2,
   1805  1.1.1.3.2.1    yamt                     sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2);
   1806  1.1.1.3.2.1    yamt         if (ACPI_FAILURE (Status))
   1807  1.1.1.3.2.1    yamt         {
   1808  1.1.1.3.2.1    yamt             return;
   1809  1.1.1.3.2.1    yamt         }
   1810  1.1.1.3.2.1    yamt 
   1811  1.1.1.3.2.1    yamt         SubTable2++;
   1812  1.1.1.3.2.1    yamt         SubtableCount--;
   1813  1.1.1.3.2.1    yamt         Offset += sizeof (ACPI_MPST_POWER_DATA);
   1814  1.1.1.3.2.1    yamt     }
   1815  1.1.1.3.2.1    yamt }
   1816  1.1.1.3.2.1    yamt 
   1817  1.1.1.3.2.1    yamt 
   1818  1.1.1.3.2.1    yamt /*******************************************************************************
   1819  1.1.1.3.2.1    yamt  *
   1820          1.1  jruoho  * FUNCTION:    AcpiDmDumpMsct
   1821          1.1  jruoho  *
   1822          1.1  jruoho  * PARAMETERS:  Table               - A MSCT table
   1823          1.1  jruoho  *
   1824          1.1  jruoho  * RETURN:      None
   1825          1.1  jruoho  *
   1826          1.1  jruoho  * DESCRIPTION: Format the contents of a MSCT
   1827          1.1  jruoho  *
   1828          1.1  jruoho  ******************************************************************************/
   1829          1.1  jruoho 
   1830          1.1  jruoho void
   1831          1.1  jruoho AcpiDmDumpMsct (
   1832          1.1  jruoho     ACPI_TABLE_HEADER       *Table)
   1833          1.1  jruoho {
   1834          1.1  jruoho     ACPI_STATUS             Status;
   1835          1.1  jruoho     UINT32                  Offset = sizeof (ACPI_TABLE_MSCT);
   1836          1.1  jruoho     ACPI_MSCT_PROXIMITY     *SubTable;
   1837          1.1  jruoho 
   1838          1.1  jruoho 
   1839          1.1  jruoho     /* Main table */
   1840          1.1  jruoho 
   1841          1.1  jruoho     Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct);
   1842          1.1  jruoho     if (ACPI_FAILURE (Status))
   1843          1.1  jruoho     {
   1844          1.1  jruoho         return;
   1845          1.1  jruoho     }
   1846          1.1  jruoho 
   1847          1.1  jruoho     /* Sub-tables */
   1848          1.1  jruoho 
   1849          1.1  jruoho     SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset);
   1850          1.1  jruoho     while (Offset < Table->Length)
   1851          1.1  jruoho     {
   1852          1.1  jruoho         /* Common sub-table header */
   1853          1.1  jruoho 
   1854          1.1  jruoho         AcpiOsPrintf ("\n");
   1855          1.1  jruoho         Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
   1856          1.1  jruoho                     sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0);
   1857          1.1  jruoho         if (ACPI_FAILURE (Status))
   1858          1.1  jruoho         {
   1859          1.1  jruoho             return;
   1860          1.1  jruoho         }
   1861          1.1  jruoho 
   1862          1.1  jruoho         /* Point to next sub-table */
   1863          1.1  jruoho 
   1864          1.1  jruoho         Offset += sizeof (ACPI_MSCT_PROXIMITY);
   1865          1.1  jruoho         SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, SubTable, sizeof (ACPI_MSCT_PROXIMITY));
   1866          1.1  jruoho     }
   1867          1.1  jruoho }
   1868          1.1  jruoho 
   1869          1.1  jruoho 
   1870          1.1  jruoho /*******************************************************************************
   1871          1.1  jruoho  *
   1872  1.1.1.3.2.1    yamt  * FUNCTION:    AcpiDmDumpMtmr
   1873      1.1.1.3  jruoho  *
   1874  1.1.1.3.2.1    yamt  * PARAMETERS:  Table               - A MTMR table
   1875      1.1.1.3  jruoho  *
   1876      1.1.1.3  jruoho  * RETURN:      None
   1877      1.1.1.3  jruoho  *
   1878  1.1.1.3.2.1    yamt  * DESCRIPTION: Format the contents of a MTMR
   1879      1.1.1.3  jruoho  *
   1880      1.1.1.3  jruoho  ******************************************************************************/
   1881      1.1.1.3  jruoho 
   1882      1.1.1.3  jruoho void
   1883  1.1.1.3.2.1    yamt AcpiDmDumpMtmr (
   1884      1.1.1.3  jruoho     ACPI_TABLE_HEADER       *Table)
   1885      1.1.1.3  jruoho {
   1886      1.1.1.3  jruoho     ACPI_STATUS             Status;
   1887  1.1.1.3.2.1    yamt     UINT32                  Offset = sizeof (ACPI_TABLE_MTMR);
   1888  1.1.1.3.2.1    yamt     ACPI_MTMR_ENTRY         *SubTable;
   1889      1.1.1.3  jruoho 
   1890      1.1.1.3  jruoho 
   1891  1.1.1.3.2.1    yamt     /* Main table */
   1892      1.1.1.3  jruoho 
   1893  1.1.1.3.2.1    yamt     Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMtmr);
   1894  1.1.1.3.2.1    yamt     if (ACPI_FAILURE (Status))
   1895  1.1.1.3.2.1    yamt     {
   1896  1.1.1.3.2.1    yamt         return;
   1897  1.1.1.3.2.1    yamt     }
   1898  1.1.1.3.2.1    yamt 
   1899  1.1.1.3.2.1    yamt     /* Sub-tables */
   1900  1.1.1.3.2.1    yamt 
   1901  1.1.1.3.2.1    yamt     SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset);
   1902      1.1.1.3  jruoho     while (Offset < Table->Length)
   1903      1.1.1.3  jruoho     {
   1904      1.1.1.3  jruoho         /* Common sub-table header */
   1905      1.1.1.3  jruoho 
   1906      1.1.1.3  jruoho         AcpiOsPrintf ("\n");
   1907      1.1.1.3  jruoho         Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
   1908  1.1.1.3.2.1    yamt                     sizeof (ACPI_MTMR_ENTRY), AcpiDmTableInfoMtmr0);
   1909      1.1.1.3  jruoho         if (ACPI_FAILURE (Status))
   1910      1.1.1.3  jruoho         {
   1911      1.1.1.3  jruoho             return;
   1912      1.1.1.3  jruoho         }
   1913      1.1.1.3  jruoho 
   1914  1.1.1.3.2.1    yamt         /* Point to next sub-table */
   1915  1.1.1.3.2.1    yamt 
   1916  1.1.1.3.2.1    yamt         Offset += sizeof (ACPI_MTMR_ENTRY);
   1917  1.1.1.3.2.1    yamt         SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, SubTable, sizeof (ACPI_MTMR_ENTRY));
   1918  1.1.1.3.2.1    yamt     }
   1919  1.1.1.3.2.1    yamt }
   1920  1.1.1.3.2.1    yamt 
   1921  1.1.1.3.2.1    yamt 
   1922  1.1.1.3.2.1    yamt /*******************************************************************************
   1923  1.1.1.3.2.1    yamt  *
   1924  1.1.1.3.2.1    yamt  * FUNCTION:    AcpiDmDumpPcct
   1925  1.1.1.3.2.1    yamt  *
   1926  1.1.1.3.2.1    yamt  * PARAMETERS:  Table               - A PCCT table
   1927  1.1.1.3.2.1    yamt  *
   1928  1.1.1.3.2.1    yamt  * RETURN:      None
   1929  1.1.1.3.2.1    yamt  *
   1930  1.1.1.3.2.1    yamt  * DESCRIPTION: Format the contents of a PCCT. This table type consists
   1931  1.1.1.3.2.1    yamt  *              of an open-ended number of subtables.
   1932  1.1.1.3.2.1    yamt  *
   1933  1.1.1.3.2.1    yamt  ******************************************************************************/
   1934  1.1.1.3.2.1    yamt 
   1935  1.1.1.3.2.1    yamt void
   1936  1.1.1.3.2.1    yamt AcpiDmDumpPcct (
   1937  1.1.1.3.2.1    yamt     ACPI_TABLE_HEADER       *Table)
   1938  1.1.1.3.2.1    yamt {
   1939  1.1.1.3.2.1    yamt     ACPI_STATUS             Status;
   1940  1.1.1.3.2.1    yamt     ACPI_PCCT_SUBSPACE      *SubTable;
   1941  1.1.1.3.2.1    yamt     UINT32                  Length = Table->Length;
   1942  1.1.1.3.2.1    yamt     UINT32                  Offset = sizeof (ACPI_TABLE_PCCT);
   1943  1.1.1.3.2.1    yamt 
   1944  1.1.1.3.2.1    yamt 
   1945  1.1.1.3.2.1    yamt     /* Main table */
   1946  1.1.1.3.2.1    yamt 
   1947  1.1.1.3.2.1    yamt     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct);
   1948  1.1.1.3.2.1    yamt     if (ACPI_FAILURE (Status))
   1949  1.1.1.3.2.1    yamt     {
   1950  1.1.1.3.2.1    yamt         return;
   1951  1.1.1.3.2.1    yamt     }
   1952  1.1.1.3.2.1    yamt 
   1953  1.1.1.3.2.1    yamt     /* Subtables */
   1954  1.1.1.3.2.1    yamt 
   1955  1.1.1.3.2.1    yamt     SubTable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset);
   1956  1.1.1.3.2.1    yamt     while (Offset < Table->Length)
   1957  1.1.1.3.2.1    yamt     {
   1958  1.1.1.3.2.1    yamt         /* Common subtable header */
   1959  1.1.1.3.2.1    yamt 
   1960  1.1.1.3.2.1    yamt         AcpiOsPrintf ("\n");
   1961  1.1.1.3.2.1    yamt         Status = AcpiDmDumpTable (Length, Offset, SubTable,
   1962  1.1.1.3.2.1    yamt                     SubTable->Header.Length, AcpiDmTableInfoPcctHdr);
   1963  1.1.1.3.2.1    yamt         if (ACPI_FAILURE (Status))
   1964  1.1.1.3.2.1    yamt         {
   1965  1.1.1.3.2.1    yamt             return;
   1966  1.1.1.3.2.1    yamt         }
   1967  1.1.1.3.2.1    yamt 
   1968  1.1.1.3.2.1    yamt         /* ACPI 5.0: Only one type of PCCT subtable is supported */
   1969  1.1.1.3.2.1    yamt 
   1970  1.1.1.3.2.1    yamt         if (SubTable->Header.Type != ACPI_PCCT_TYPE_GENERIC_SUBSPACE)
   1971  1.1.1.3.2.1    yamt         {
   1972  1.1.1.3.2.1    yamt             AcpiOsPrintf (
   1973  1.1.1.3.2.1    yamt                 "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n",
   1974  1.1.1.3.2.1    yamt                 SubTable->Header.Type);
   1975  1.1.1.3.2.1    yamt             return;
   1976  1.1.1.3.2.1    yamt         }
   1977  1.1.1.3.2.1    yamt 
   1978  1.1.1.3.2.1    yamt         AcpiOsPrintf ("\n");
   1979  1.1.1.3.2.1    yamt         Status = AcpiDmDumpTable (Length, Offset, SubTable,
   1980  1.1.1.3.2.1    yamt                     SubTable->Header.Length, AcpiDmTableInfoPcct0);
   1981  1.1.1.3.2.1    yamt         if (ACPI_FAILURE (Status))
   1982  1.1.1.3.2.1    yamt         {
   1983  1.1.1.3.2.1    yamt             return;
   1984  1.1.1.3.2.1    yamt         }
   1985  1.1.1.3.2.1    yamt 
   1986  1.1.1.3.2.1    yamt         /* Point to next subtable */
   1987  1.1.1.3.2.1    yamt 
   1988  1.1.1.3.2.1    yamt         Offset += SubTable->Header.Length;
   1989  1.1.1.3.2.1    yamt         SubTable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, SubTable,
   1990  1.1.1.3.2.1    yamt                     SubTable->Header.Length);
   1991  1.1.1.3.2.1    yamt     }
   1992  1.1.1.3.2.1    yamt }
   1993  1.1.1.3.2.1    yamt 
   1994  1.1.1.3.2.1    yamt 
   1995  1.1.1.3.2.1    yamt /*******************************************************************************
   1996  1.1.1.3.2.1    yamt  *
   1997  1.1.1.3.2.1    yamt  * FUNCTION:    AcpiDmDumpPmtt
   1998  1.1.1.3.2.1    yamt  *
   1999  1.1.1.3.2.1    yamt  * PARAMETERS:  Table               - A PMTT table
   2000  1.1.1.3.2.1    yamt  *
   2001  1.1.1.3.2.1    yamt  * RETURN:      None
   2002  1.1.1.3.2.1    yamt  *
   2003  1.1.1.3.2.1    yamt  * DESCRIPTION: Format the contents of a PMTT. This table type consists
   2004  1.1.1.3.2.1    yamt  *              of an open-ended number of subtables.
   2005  1.1.1.3.2.1    yamt  *
   2006  1.1.1.3.2.1    yamt  ******************************************************************************/
   2007  1.1.1.3.2.1    yamt 
   2008  1.1.1.3.2.1    yamt void
   2009  1.1.1.3.2.1    yamt AcpiDmDumpPmtt (
   2010  1.1.1.3.2.1    yamt     ACPI_TABLE_HEADER       *Table)
   2011  1.1.1.3.2.1    yamt {
   2012  1.1.1.3.2.1    yamt     ACPI_STATUS             Status;
   2013  1.1.1.3.2.1    yamt     ACPI_PMTT_HEADER        *SubTable;
   2014  1.1.1.3.2.1    yamt     ACPI_PMTT_HEADER        *MemSubTable;
   2015  1.1.1.3.2.1    yamt     ACPI_PMTT_HEADER        *DimmSubTable;
   2016  1.1.1.3.2.1    yamt     ACPI_PMTT_DOMAIN        *DomainArray;
   2017  1.1.1.3.2.1    yamt     UINT32                  Length = Table->Length;
   2018  1.1.1.3.2.1    yamt     UINT32                  Offset = sizeof (ACPI_TABLE_PMTT);
   2019  1.1.1.3.2.1    yamt     UINT32                  MemOffset;
   2020  1.1.1.3.2.1    yamt     UINT32                  DimmOffset;
   2021  1.1.1.3.2.1    yamt     UINT32                  DomainOffset;
   2022  1.1.1.3.2.1    yamt     UINT32                  DomainCount;
   2023  1.1.1.3.2.1    yamt 
   2024  1.1.1.3.2.1    yamt 
   2025  1.1.1.3.2.1    yamt     /* Main table */
   2026  1.1.1.3.2.1    yamt 
   2027  1.1.1.3.2.1    yamt     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt);
   2028  1.1.1.3.2.1    yamt     if (ACPI_FAILURE (Status))
   2029  1.1.1.3.2.1    yamt     {
   2030  1.1.1.3.2.1    yamt         return;
   2031  1.1.1.3.2.1    yamt     }
   2032  1.1.1.3.2.1    yamt 
   2033  1.1.1.3.2.1    yamt     /* Subtables */
   2034  1.1.1.3.2.1    yamt 
   2035  1.1.1.3.2.1    yamt     SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset);
   2036  1.1.1.3.2.1    yamt     while (Offset < Table->Length)
   2037  1.1.1.3.2.1    yamt     {
   2038  1.1.1.3.2.1    yamt         /* Common subtable header */
   2039  1.1.1.3.2.1    yamt 
   2040  1.1.1.3.2.1    yamt         AcpiOsPrintf ("\n");
   2041  1.1.1.3.2.1    yamt         Status = AcpiDmDumpTable (Length, Offset, SubTable,
   2042  1.1.1.3.2.1    yamt                     SubTable->Length, AcpiDmTableInfoPmttHdr);
   2043  1.1.1.3.2.1    yamt         if (ACPI_FAILURE (Status))
   2044  1.1.1.3.2.1    yamt         {
   2045  1.1.1.3.2.1    yamt             return;
   2046  1.1.1.3.2.1    yamt         }
   2047  1.1.1.3.2.1    yamt 
   2048  1.1.1.3.2.1    yamt         /* Only Socket subtables are expected at this level */
   2049  1.1.1.3.2.1    yamt 
   2050  1.1.1.3.2.1    yamt         if (SubTable->Type != ACPI_PMTT_TYPE_SOCKET)
   2051  1.1.1.3.2.1    yamt         {
   2052  1.1.1.3.2.1    yamt             AcpiOsPrintf (
   2053  1.1.1.3.2.1    yamt                 "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
   2054  1.1.1.3.2.1    yamt                 SubTable->Type);
   2055  1.1.1.3.2.1    yamt             return;
   2056  1.1.1.3.2.1    yamt         }
   2057  1.1.1.3.2.1    yamt 
   2058  1.1.1.3.2.1    yamt         /* Dump the fixed-length portion of the subtable */
   2059  1.1.1.3.2.1    yamt 
   2060  1.1.1.3.2.1    yamt         Status = AcpiDmDumpTable (Length, Offset, SubTable,
   2061  1.1.1.3.2.1    yamt                     SubTable->Length, AcpiDmTableInfoPmtt0);
   2062  1.1.1.3.2.1    yamt         if (ACPI_FAILURE (Status))
   2063  1.1.1.3.2.1    yamt         {
   2064  1.1.1.3.2.1    yamt             return;
   2065  1.1.1.3.2.1    yamt         }
   2066  1.1.1.3.2.1    yamt 
   2067  1.1.1.3.2.1    yamt         /* Walk the memory controller subtables */
   2068  1.1.1.3.2.1    yamt 
   2069  1.1.1.3.2.1    yamt         MemOffset = sizeof (ACPI_PMTT_SOCKET);
   2070  1.1.1.3.2.1    yamt         MemSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, SubTable,
   2071  1.1.1.3.2.1    yamt             sizeof (ACPI_PMTT_SOCKET));
   2072  1.1.1.3.2.1    yamt 
   2073  1.1.1.3.2.1    yamt         while (((Offset + MemOffset) < Table->Length) &&
   2074  1.1.1.3.2.1    yamt             (MemOffset < SubTable->Length))
   2075  1.1.1.3.2.1    yamt         {
   2076  1.1.1.3.2.1    yamt             /* Common subtable header */
   2077  1.1.1.3.2.1    yamt 
   2078  1.1.1.3.2.1    yamt             AcpiOsPrintf ("\n");
   2079  1.1.1.3.2.1    yamt             Status = AcpiDmDumpTable (Length,
   2080  1.1.1.3.2.1    yamt                         Offset + MemOffset, MemSubTable,
   2081  1.1.1.3.2.1    yamt                         MemSubTable->Length, AcpiDmTableInfoPmttHdr);
   2082  1.1.1.3.2.1    yamt             if (ACPI_FAILURE (Status))
   2083  1.1.1.3.2.1    yamt             {
   2084  1.1.1.3.2.1    yamt                 return;
   2085  1.1.1.3.2.1    yamt             }
   2086  1.1.1.3.2.1    yamt 
   2087  1.1.1.3.2.1    yamt             /* Only memory controller subtables are expected at this level */
   2088  1.1.1.3.2.1    yamt 
   2089  1.1.1.3.2.1    yamt             if (MemSubTable->Type != ACPI_PMTT_TYPE_CONTROLLER)
   2090  1.1.1.3.2.1    yamt             {
   2091  1.1.1.3.2.1    yamt                 AcpiOsPrintf (
   2092  1.1.1.3.2.1    yamt                     "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
   2093  1.1.1.3.2.1    yamt                     MemSubTable->Type);
   2094  1.1.1.3.2.1    yamt                 return;
   2095  1.1.1.3.2.1    yamt             }
   2096  1.1.1.3.2.1    yamt 
   2097  1.1.1.3.2.1    yamt             /* Dump the fixed-length portion of the controller subtable */
   2098  1.1.1.3.2.1    yamt 
   2099  1.1.1.3.2.1    yamt             Status = AcpiDmDumpTable (Length,
   2100  1.1.1.3.2.1    yamt                         Offset + MemOffset, MemSubTable,
   2101  1.1.1.3.2.1    yamt                         MemSubTable->Length, AcpiDmTableInfoPmtt1);
   2102  1.1.1.3.2.1    yamt             if (ACPI_FAILURE (Status))
   2103  1.1.1.3.2.1    yamt             {
   2104  1.1.1.3.2.1    yamt                 return;
   2105  1.1.1.3.2.1    yamt             }
   2106  1.1.1.3.2.1    yamt 
   2107  1.1.1.3.2.1    yamt             /* Walk the variable count of proximity domains */
   2108  1.1.1.3.2.1    yamt 
   2109  1.1.1.3.2.1    yamt             DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubTable)->DomainCount;
   2110  1.1.1.3.2.1    yamt             DomainOffset = sizeof (ACPI_PMTT_CONTROLLER);
   2111  1.1.1.3.2.1    yamt             DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubTable,
   2112  1.1.1.3.2.1    yamt                 sizeof (ACPI_PMTT_CONTROLLER));
   2113  1.1.1.3.2.1    yamt 
   2114  1.1.1.3.2.1    yamt             while (((Offset + MemOffset + DomainOffset) < Table->Length) &&
   2115  1.1.1.3.2.1    yamt                 ((MemOffset + DomainOffset) < SubTable->Length) &&
   2116  1.1.1.3.2.1    yamt                 DomainCount)
   2117  1.1.1.3.2.1    yamt             {
   2118  1.1.1.3.2.1    yamt                 Status = AcpiDmDumpTable (Length,
   2119  1.1.1.3.2.1    yamt                             Offset + MemOffset + DomainOffset, DomainArray,
   2120  1.1.1.3.2.1    yamt                             sizeof (ACPI_PMTT_DOMAIN), AcpiDmTableInfoPmtt1a);
   2121  1.1.1.3.2.1    yamt                 if (ACPI_FAILURE (Status))
   2122  1.1.1.3.2.1    yamt                 {
   2123  1.1.1.3.2.1    yamt                     return;
   2124  1.1.1.3.2.1    yamt                 }
   2125  1.1.1.3.2.1    yamt 
   2126  1.1.1.3.2.1    yamt                 DomainOffset += sizeof (ACPI_PMTT_DOMAIN);
   2127  1.1.1.3.2.1    yamt                 DomainArray++;
   2128  1.1.1.3.2.1    yamt                 DomainCount--;
   2129  1.1.1.3.2.1    yamt             }
   2130  1.1.1.3.2.1    yamt 
   2131  1.1.1.3.2.1    yamt             if (DomainCount)
   2132  1.1.1.3.2.1    yamt             {
   2133  1.1.1.3.2.1    yamt                 AcpiOsPrintf (
   2134  1.1.1.3.2.1    yamt                     "\n**** DomainCount exceeds subtable length\n\n",
   2135  1.1.1.3.2.1    yamt                     MemSubTable->Type);
   2136  1.1.1.3.2.1    yamt             }
   2137  1.1.1.3.2.1    yamt 
   2138  1.1.1.3.2.1    yamt             /* Walk the physical component (DIMM) subtables */
   2139  1.1.1.3.2.1    yamt 
   2140  1.1.1.3.2.1    yamt             DimmOffset = DomainOffset;
   2141  1.1.1.3.2.1    yamt             DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubTable,
   2142  1.1.1.3.2.1    yamt                 DomainOffset);
   2143  1.1.1.3.2.1    yamt 
   2144  1.1.1.3.2.1    yamt             while (((Offset + MemOffset + DimmOffset) < Table->Length) &&
   2145  1.1.1.3.2.1    yamt                 (DimmOffset < MemSubTable->Length))
   2146  1.1.1.3.2.1    yamt             {
   2147  1.1.1.3.2.1    yamt                 /* Common subtable header */
   2148  1.1.1.3.2.1    yamt 
   2149  1.1.1.3.2.1    yamt                 AcpiOsPrintf ("\n");
   2150  1.1.1.3.2.1    yamt                 Status = AcpiDmDumpTable (Length,
   2151  1.1.1.3.2.1    yamt                             Offset + MemOffset + DimmOffset, DimmSubTable,
   2152  1.1.1.3.2.1    yamt                             DimmSubTable->Length, AcpiDmTableInfoPmttHdr);
   2153  1.1.1.3.2.1    yamt                 if (ACPI_FAILURE (Status))
   2154  1.1.1.3.2.1    yamt                 {
   2155  1.1.1.3.2.1    yamt                     return;
   2156  1.1.1.3.2.1    yamt                 }
   2157  1.1.1.3.2.1    yamt 
   2158  1.1.1.3.2.1    yamt                 /* Only DIMM subtables are expected at this level */
   2159  1.1.1.3.2.1    yamt 
   2160  1.1.1.3.2.1    yamt                 if (DimmSubTable->Type != ACPI_PMTT_TYPE_DIMM)
   2161  1.1.1.3.2.1    yamt                 {
   2162  1.1.1.3.2.1    yamt                     AcpiOsPrintf (
   2163  1.1.1.3.2.1    yamt                         "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
   2164  1.1.1.3.2.1    yamt                         DimmSubTable->Type);
   2165  1.1.1.3.2.1    yamt                     return;
   2166  1.1.1.3.2.1    yamt                 }
   2167  1.1.1.3.2.1    yamt 
   2168  1.1.1.3.2.1    yamt                 /* Dump the fixed-length DIMM subtable */
   2169  1.1.1.3.2.1    yamt 
   2170  1.1.1.3.2.1    yamt                 Status = AcpiDmDumpTable (Length,
   2171  1.1.1.3.2.1    yamt                             Offset + MemOffset + DimmOffset, DimmSubTable,
   2172  1.1.1.3.2.1    yamt                             DimmSubTable->Length, AcpiDmTableInfoPmtt2);
   2173  1.1.1.3.2.1    yamt                 if (ACPI_FAILURE (Status))
   2174  1.1.1.3.2.1    yamt                 {
   2175  1.1.1.3.2.1    yamt                     return;
   2176  1.1.1.3.2.1    yamt                 }
   2177  1.1.1.3.2.1    yamt 
   2178  1.1.1.3.2.1    yamt                 /* Point to next DIMM subtable */
   2179  1.1.1.3.2.1    yamt 
   2180  1.1.1.3.2.1    yamt                 DimmOffset += DimmSubTable->Length;
   2181  1.1.1.3.2.1    yamt                 DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
   2182  1.1.1.3.2.1    yamt                     DimmSubTable, DimmSubTable->Length);
   2183  1.1.1.3.2.1    yamt             }
   2184  1.1.1.3.2.1    yamt 
   2185  1.1.1.3.2.1    yamt             /* Point to next Controller subtable */
   2186  1.1.1.3.2.1    yamt 
   2187  1.1.1.3.2.1    yamt             MemOffset += MemSubTable->Length;
   2188  1.1.1.3.2.1    yamt             MemSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
   2189  1.1.1.3.2.1    yamt                 MemSubTable, MemSubTable->Length);
   2190  1.1.1.3.2.1    yamt         }
   2191  1.1.1.3.2.1    yamt 
   2192  1.1.1.3.2.1    yamt         /* Point to next Socket subtable */
   2193  1.1.1.3.2.1    yamt 
   2194  1.1.1.3.2.1    yamt         Offset += SubTable->Length;
   2195  1.1.1.3.2.1    yamt         SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
   2196  1.1.1.3.2.1    yamt             SubTable, SubTable->Length);
   2197  1.1.1.3.2.1    yamt     }
   2198  1.1.1.3.2.1    yamt }
   2199  1.1.1.3.2.1    yamt 
   2200  1.1.1.3.2.1    yamt 
   2201  1.1.1.3.2.1    yamt /*******************************************************************************
   2202  1.1.1.3.2.1    yamt  *
   2203  1.1.1.3.2.1    yamt  * FUNCTION:    AcpiDmDumpS3pt
   2204  1.1.1.3.2.1    yamt  *
   2205  1.1.1.3.2.1    yamt  * PARAMETERS:  Table               - A S3PT table
   2206  1.1.1.3.2.1    yamt  *
   2207  1.1.1.3.2.1    yamt  * RETURN:      Length of the table
   2208  1.1.1.3.2.1    yamt  *
   2209  1.1.1.3.2.1    yamt  * DESCRIPTION: Format the contents of a S3PT
   2210  1.1.1.3.2.1    yamt  *
   2211  1.1.1.3.2.1    yamt  ******************************************************************************/
   2212  1.1.1.3.2.1    yamt 
   2213  1.1.1.3.2.1    yamt UINT32
   2214  1.1.1.3.2.1    yamt AcpiDmDumpS3pt (
   2215  1.1.1.3.2.1    yamt     ACPI_TABLE_HEADER       *Tables)
   2216  1.1.1.3.2.1    yamt {
   2217  1.1.1.3.2.1    yamt     ACPI_STATUS             Status;
   2218  1.1.1.3.2.1    yamt     UINT32                  Offset = sizeof (ACPI_TABLE_S3PT);
   2219  1.1.1.3.2.1    yamt     ACPI_S3PT_HEADER        *SubTable;
   2220  1.1.1.3.2.1    yamt     ACPI_DMTABLE_INFO       *InfoTable;
   2221  1.1.1.3.2.1    yamt     ACPI_TABLE_S3PT         *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables);
   2222  1.1.1.3.2.1    yamt 
   2223  1.1.1.3.2.1    yamt 
   2224  1.1.1.3.2.1    yamt     /* Main table */
   2225  1.1.1.3.2.1    yamt 
   2226  1.1.1.3.2.1    yamt     Status = AcpiDmDumpTable (Offset, 0, S3ptTable, 0, AcpiDmTableInfoS3pt);
   2227  1.1.1.3.2.1    yamt     if (ACPI_FAILURE (Status))
   2228  1.1.1.3.2.1    yamt     {
   2229  1.1.1.3.2.1    yamt         return 0;
   2230  1.1.1.3.2.1    yamt     }
   2231  1.1.1.3.2.1    yamt 
   2232  1.1.1.3.2.1    yamt     SubTable = ACPI_ADD_PTR (ACPI_S3PT_HEADER, S3ptTable, Offset);
   2233  1.1.1.3.2.1    yamt     while (Offset < S3ptTable->Length)
   2234  1.1.1.3.2.1    yamt     {
   2235  1.1.1.3.2.1    yamt         /* Common sub-table header */
   2236  1.1.1.3.2.1    yamt 
   2237  1.1.1.3.2.1    yamt         AcpiOsPrintf ("\n");
   2238  1.1.1.3.2.1    yamt         Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable,
   2239  1.1.1.3.2.1    yamt                     SubTable->Length, AcpiDmTableInfoS3ptHdr);
   2240  1.1.1.3.2.1    yamt         if (ACPI_FAILURE (Status))
   2241  1.1.1.3.2.1    yamt         {
   2242  1.1.1.3.2.1    yamt             return 0;
   2243  1.1.1.3.2.1    yamt         }
   2244  1.1.1.3.2.1    yamt 
   2245  1.1.1.3.2.1    yamt         switch (SubTable->Type)
   2246  1.1.1.3.2.1    yamt         {
   2247  1.1.1.3.2.1    yamt         case ACPI_S3PT_TYPE_RESUME:
   2248  1.1.1.3.2.1    yamt 
   2249  1.1.1.3.2.1    yamt             InfoTable = AcpiDmTableInfoS3pt0;
   2250  1.1.1.3.2.1    yamt             break;
   2251  1.1.1.3.2.1    yamt 
   2252  1.1.1.3.2.1    yamt         case ACPI_S3PT_TYPE_SUSPEND:
   2253  1.1.1.3.2.1    yamt 
   2254  1.1.1.3.2.1    yamt             InfoTable = AcpiDmTableInfoS3pt1;
   2255  1.1.1.3.2.1    yamt             break;
   2256  1.1.1.3.2.1    yamt 
   2257  1.1.1.3.2.1    yamt         default:
   2258  1.1.1.3.2.1    yamt 
   2259  1.1.1.3.2.1    yamt             AcpiOsPrintf ("\n**** Unknown S3PT sub-table type 0x%X\n", SubTable->Type);
   2260  1.1.1.3.2.1    yamt 
   2261  1.1.1.3.2.1    yamt             /* Attempt to continue */
   2262  1.1.1.3.2.1    yamt 
   2263  1.1.1.3.2.1    yamt             if (!SubTable->Length)
   2264  1.1.1.3.2.1    yamt             {
   2265  1.1.1.3.2.1    yamt                 AcpiOsPrintf ("Invalid zero length subtable\n");
   2266  1.1.1.3.2.1    yamt                 return 0;
   2267  1.1.1.3.2.1    yamt             }
   2268  1.1.1.3.2.1    yamt             goto NextSubTable;
   2269  1.1.1.3.2.1    yamt         }
   2270  1.1.1.3.2.1    yamt 
   2271  1.1.1.3.2.1    yamt         AcpiOsPrintf ("\n");
   2272  1.1.1.3.2.1    yamt         Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable,
   2273  1.1.1.3.2.1    yamt                     SubTable->Length, InfoTable);
   2274  1.1.1.3.2.1    yamt         if (ACPI_FAILURE (Status))
   2275  1.1.1.3.2.1    yamt         {
   2276  1.1.1.3.2.1    yamt             return 0;
   2277  1.1.1.3.2.1    yamt         }
   2278  1.1.1.3.2.1    yamt 
   2279  1.1.1.3.2.1    yamt NextSubTable:
   2280  1.1.1.3.2.1    yamt         /* Point to next sub-table */
   2281  1.1.1.3.2.1    yamt 
   2282  1.1.1.3.2.1    yamt         Offset += SubTable->Length;
   2283  1.1.1.3.2.1    yamt         SubTable = ACPI_ADD_PTR (ACPI_S3PT_HEADER, SubTable, SubTable->Length);
   2284  1.1.1.3.2.1    yamt     }
   2285  1.1.1.3.2.1    yamt 
   2286  1.1.1.3.2.1    yamt     return (S3ptTable->Length);
   2287  1.1.1.3.2.1    yamt }
   2288  1.1.1.3.2.1    yamt 
   2289  1.1.1.3.2.1    yamt 
   2290  1.1.1.3.2.1    yamt /*******************************************************************************
   2291  1.1.1.3.2.1    yamt  *
   2292  1.1.1.3.2.1    yamt  * FUNCTION:    AcpiDmDumpSlic
   2293  1.1.1.3.2.1    yamt  *
   2294  1.1.1.3.2.1    yamt  * PARAMETERS:  Table               - A SLIC table
   2295  1.1.1.3.2.1    yamt  *
   2296  1.1.1.3.2.1    yamt  * RETURN:      None
   2297  1.1.1.3.2.1    yamt  *
   2298  1.1.1.3.2.1    yamt  * DESCRIPTION: Format the contents of a SLIC
   2299  1.1.1.3.2.1    yamt  *
   2300  1.1.1.3.2.1    yamt  ******************************************************************************/
   2301  1.1.1.3.2.1    yamt 
   2302  1.1.1.3.2.1    yamt void
   2303  1.1.1.3.2.1    yamt AcpiDmDumpSlic (
   2304  1.1.1.3.2.1    yamt     ACPI_TABLE_HEADER       *Table)
   2305  1.1.1.3.2.1    yamt {
   2306  1.1.1.3.2.1    yamt     ACPI_STATUS             Status;
   2307  1.1.1.3.2.1    yamt     UINT32                  Offset = sizeof (ACPI_TABLE_SLIC);
   2308  1.1.1.3.2.1    yamt     ACPI_SLIC_HEADER        *SubTable;
   2309  1.1.1.3.2.1    yamt     ACPI_DMTABLE_INFO       *InfoTable;
   2310  1.1.1.3.2.1    yamt 
   2311  1.1.1.3.2.1    yamt 
   2312  1.1.1.3.2.1    yamt     /* There is no main SLIC table, only subtables */
   2313  1.1.1.3.2.1    yamt 
   2314  1.1.1.3.2.1    yamt     SubTable = ACPI_ADD_PTR (ACPI_SLIC_HEADER, Table, Offset);
   2315  1.1.1.3.2.1    yamt     while (Offset < Table->Length)
   2316  1.1.1.3.2.1    yamt     {
   2317  1.1.1.3.2.1    yamt         /* Common sub-table header */
   2318  1.1.1.3.2.1    yamt 
   2319  1.1.1.3.2.1    yamt         AcpiOsPrintf ("\n");
   2320  1.1.1.3.2.1    yamt         Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
   2321  1.1.1.3.2.1    yamt                     SubTable->Length, AcpiDmTableInfoSlicHdr);
   2322  1.1.1.3.2.1    yamt         if (ACPI_FAILURE (Status))
   2323  1.1.1.3.2.1    yamt         {
   2324  1.1.1.3.2.1    yamt             return;
   2325  1.1.1.3.2.1    yamt         }
   2326  1.1.1.3.2.1    yamt 
   2327  1.1.1.3.2.1    yamt         switch (SubTable->Type)
   2328  1.1.1.3.2.1    yamt         {
   2329  1.1.1.3.2.1    yamt         case ACPI_SLIC_TYPE_PUBLIC_KEY:
   2330  1.1.1.3.2.1    yamt 
   2331  1.1.1.3.2.1    yamt             InfoTable = AcpiDmTableInfoSlic0;
   2332  1.1.1.3.2.1    yamt             break;
   2333  1.1.1.3.2.1    yamt 
   2334  1.1.1.3.2.1    yamt         case ACPI_SLIC_TYPE_WINDOWS_MARKER:
   2335  1.1.1.3.2.1    yamt 
   2336  1.1.1.3.2.1    yamt             InfoTable = AcpiDmTableInfoSlic1;
   2337  1.1.1.3.2.1    yamt             break;
   2338  1.1.1.3.2.1    yamt 
   2339  1.1.1.3.2.1    yamt         default:
   2340  1.1.1.3.2.1    yamt 
   2341  1.1.1.3.2.1    yamt             AcpiOsPrintf ("\n**** Unknown SLIC sub-table type 0x%X\n", SubTable->Type);
   2342      1.1.1.3  jruoho 
   2343      1.1.1.3  jruoho             /* Attempt to continue */
   2344      1.1.1.3  jruoho 
   2345      1.1.1.3  jruoho             if (!SubTable->Length)
   2346      1.1.1.3  jruoho             {
   2347      1.1.1.3  jruoho                 AcpiOsPrintf ("Invalid zero length subtable\n");
   2348      1.1.1.3  jruoho                 return;
   2349      1.1.1.3  jruoho             }
   2350      1.1.1.3  jruoho             goto NextSubTable;
   2351      1.1.1.3  jruoho         }
   2352      1.1.1.3  jruoho 
   2353      1.1.1.3  jruoho         AcpiOsPrintf ("\n");
   2354      1.1.1.3  jruoho         Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
   2355      1.1.1.3  jruoho                     SubTable->Length, InfoTable);
   2356      1.1.1.3  jruoho         if (ACPI_FAILURE (Status))
   2357      1.1.1.3  jruoho         {
   2358      1.1.1.3  jruoho             return;
   2359      1.1.1.3  jruoho         }
   2360      1.1.1.3  jruoho 
   2361      1.1.1.3  jruoho NextSubTable:
   2362      1.1.1.3  jruoho         /* Point to next sub-table */
   2363      1.1.1.3  jruoho 
   2364      1.1.1.3  jruoho         Offset += SubTable->Length;
   2365      1.1.1.3  jruoho         SubTable = ACPI_ADD_PTR (ACPI_SLIC_HEADER, SubTable, SubTable->Length);
   2366      1.1.1.3  jruoho     }
   2367      1.1.1.3  jruoho }
   2368      1.1.1.3  jruoho 
   2369      1.1.1.3  jruoho 
   2370      1.1.1.3  jruoho /*******************************************************************************
   2371      1.1.1.3  jruoho  *
   2372          1.1  jruoho  * FUNCTION:    AcpiDmDumpSlit
   2373          1.1  jruoho  *
   2374          1.1  jruoho  * PARAMETERS:  Table               - An SLIT
   2375          1.1  jruoho  *
   2376          1.1  jruoho  * RETURN:      None
   2377          1.1  jruoho  *
   2378          1.1  jruoho  * DESCRIPTION: Format the contents of a SLIT
   2379          1.1  jruoho  *
   2380          1.1  jruoho  ******************************************************************************/
   2381          1.1  jruoho 
   2382          1.1  jruoho void
   2383          1.1  jruoho AcpiDmDumpSlit (
   2384          1.1  jruoho     ACPI_TABLE_HEADER       *Table)
   2385          1.1  jruoho {
   2386          1.1  jruoho     ACPI_STATUS             Status;
   2387          1.1  jruoho     UINT32                  Offset;
   2388          1.1  jruoho     UINT8                   *Row;
   2389          1.1  jruoho     UINT32                  Localities;
   2390          1.1  jruoho     UINT32                  i;
   2391          1.1  jruoho     UINT32                  j;
   2392          1.1  jruoho 
   2393          1.1  jruoho 
   2394          1.1  jruoho     /* Main table */
   2395          1.1  jruoho 
   2396          1.1  jruoho     Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit);
   2397          1.1  jruoho     if (ACPI_FAILURE (Status))
   2398          1.1  jruoho     {
   2399          1.1  jruoho         return;
   2400          1.1  jruoho     }
   2401          1.1  jruoho 
   2402          1.1  jruoho     /* Display the Locality NxN Matrix */
   2403          1.1  jruoho 
   2404          1.1  jruoho     Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount;
   2405          1.1  jruoho     Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]);
   2406          1.1  jruoho     Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry;
   2407          1.1  jruoho 
   2408          1.1  jruoho     for (i = 0; i < Localities; i++)
   2409          1.1  jruoho     {
   2410          1.1  jruoho         /* Display one row of the matrix */
   2411          1.1  jruoho 
   2412          1.1  jruoho         AcpiDmLineHeader2 (Offset, Localities, "Locality", i);
   2413          1.1  jruoho         for  (j = 0; j < Localities; j++)
   2414          1.1  jruoho         {
   2415          1.1  jruoho             /* Check for beyond EOT */
   2416          1.1  jruoho 
   2417          1.1  jruoho             if (Offset >= Table->Length)
   2418          1.1  jruoho             {
   2419          1.1  jruoho                 AcpiOsPrintf ("\n**** Not enough room in table for all localities\n");
   2420          1.1  jruoho                 return;
   2421          1.1  jruoho             }
   2422          1.1  jruoho 
   2423      1.1.1.2  jruoho             AcpiOsPrintf ("%2.2X", Row[j]);
   2424          1.1  jruoho             Offset++;
   2425          1.1  jruoho 
   2426          1.1  jruoho             /* Display up to 16 bytes per output row */
   2427          1.1  jruoho 
   2428      1.1.1.2  jruoho             if ((j+1) < Localities)
   2429          1.1  jruoho             {
   2430      1.1.1.3  jruoho                 AcpiOsPrintf (" ");
   2431      1.1.1.2  jruoho 
   2432      1.1.1.2  jruoho                 if (j && (((j+1) % 16) == 0))
   2433      1.1.1.2  jruoho                 {
   2434      1.1.1.3  jruoho                     AcpiOsPrintf ("\\\n"); /* With line continuation char */
   2435      1.1.1.3  jruoho                     AcpiDmLineHeader (Offset, 0, NULL);
   2436      1.1.1.2  jruoho                 }
   2437          1.1  jruoho             }
   2438          1.1  jruoho         }
   2439          1.1  jruoho 
   2440          1.1  jruoho         /* Point to next row */
   2441          1.1  jruoho 
   2442          1.1  jruoho         AcpiOsPrintf ("\n");
   2443          1.1  jruoho         Row += Localities;
   2444          1.1  jruoho     }
   2445          1.1  jruoho }
   2446          1.1  jruoho 
   2447          1.1  jruoho 
   2448          1.1  jruoho /*******************************************************************************
   2449          1.1  jruoho  *
   2450          1.1  jruoho  * FUNCTION:    AcpiDmDumpSrat
   2451          1.1  jruoho  *
   2452          1.1  jruoho  * PARAMETERS:  Table               - A SRAT table
   2453          1.1  jruoho  *
   2454          1.1  jruoho  * RETURN:      None
   2455          1.1  jruoho  *
   2456          1.1  jruoho  * DESCRIPTION: Format the contents of a SRAT
   2457          1.1  jruoho  *
   2458          1.1  jruoho  ******************************************************************************/
   2459          1.1  jruoho 
   2460          1.1  jruoho void
   2461          1.1  jruoho AcpiDmDumpSrat (
   2462          1.1  jruoho     ACPI_TABLE_HEADER       *Table)
   2463          1.1  jruoho {
   2464          1.1  jruoho     ACPI_STATUS             Status;
   2465          1.1  jruoho     UINT32                  Offset = sizeof (ACPI_TABLE_SRAT);
   2466          1.1  jruoho     ACPI_SUBTABLE_HEADER    *SubTable;
   2467          1.1  jruoho     ACPI_DMTABLE_INFO       *InfoTable;
   2468          1.1  jruoho 
   2469          1.1  jruoho 
   2470          1.1  jruoho     /* Main table */
   2471          1.1  jruoho 
   2472          1.1  jruoho     Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat);
   2473          1.1  jruoho     if (ACPI_FAILURE (Status))
   2474          1.1  jruoho     {
   2475          1.1  jruoho         return;
   2476          1.1  jruoho     }
   2477          1.1  jruoho 
   2478          1.1  jruoho     /* Sub-tables */
   2479          1.1  jruoho 
   2480          1.1  jruoho     SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
   2481          1.1  jruoho     while (Offset < Table->Length)
   2482          1.1  jruoho     {
   2483          1.1  jruoho         /* Common sub-table header */
   2484          1.1  jruoho 
   2485          1.1  jruoho         AcpiOsPrintf ("\n");
   2486          1.1  jruoho         Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
   2487          1.1  jruoho                     SubTable->Length, AcpiDmTableInfoSratHdr);
   2488          1.1  jruoho         if (ACPI_FAILURE (Status))
   2489          1.1  jruoho         {
   2490          1.1  jruoho             return;
   2491          1.1  jruoho         }
   2492          1.1  jruoho 
   2493          1.1  jruoho         switch (SubTable->Type)
   2494          1.1  jruoho         {
   2495          1.1  jruoho         case ACPI_SRAT_TYPE_CPU_AFFINITY:
   2496  1.1.1.3.2.1    yamt 
   2497          1.1  jruoho             InfoTable = AcpiDmTableInfoSrat0;
   2498          1.1  jruoho             break;
   2499  1.1.1.3.2.1    yamt 
   2500          1.1  jruoho         case ACPI_SRAT_TYPE_MEMORY_AFFINITY:
   2501  1.1.1.3.2.1    yamt 
   2502          1.1  jruoho             InfoTable = AcpiDmTableInfoSrat1;
   2503          1.1  jruoho             break;
   2504  1.1.1.3.2.1    yamt 
   2505          1.1  jruoho         case ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY:
   2506  1.1.1.3.2.1    yamt 
   2507          1.1  jruoho             InfoTable = AcpiDmTableInfoSrat2;
   2508          1.1  jruoho             break;
   2509  1.1.1.3.2.1    yamt 
   2510          1.1  jruoho         default:
   2511          1.1  jruoho             AcpiOsPrintf ("\n**** Unknown SRAT sub-table type 0x%X\n", SubTable->Type);
   2512          1.1  jruoho 
   2513          1.1  jruoho             /* Attempt to continue */
   2514          1.1  jruoho 
   2515          1.1  jruoho             if (!SubTable->Length)
   2516          1.1  jruoho             {
   2517          1.1  jruoho                 AcpiOsPrintf ("Invalid zero length subtable\n");
   2518          1.1  jruoho                 return;
   2519          1.1  jruoho             }
   2520          1.1  jruoho             goto NextSubTable;
   2521          1.1  jruoho         }
   2522          1.1  jruoho 
   2523          1.1  jruoho         AcpiOsPrintf ("\n");
   2524          1.1  jruoho         Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
   2525          1.1  jruoho                     SubTable->Length, InfoTable);
   2526          1.1  jruoho         if (ACPI_FAILURE (Status))
   2527          1.1  jruoho         {
   2528          1.1  jruoho             return;
   2529          1.1  jruoho         }
   2530          1.1  jruoho 
   2531          1.1  jruoho NextSubTable:
   2532          1.1  jruoho         /* Point to next sub-table */
   2533          1.1  jruoho 
   2534          1.1  jruoho         Offset += SubTable->Length;
   2535          1.1  jruoho         SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, SubTable->Length);
   2536          1.1  jruoho     }
   2537          1.1  jruoho }
   2538          1.1  jruoho 
   2539          1.1  jruoho 
   2540          1.1  jruoho /*******************************************************************************
   2541          1.1  jruoho  *
   2542  1.1.1.3.2.1    yamt  * FUNCTION:    AcpiDmDumpVrtc
   2543  1.1.1.3.2.1    yamt  *
   2544  1.1.1.3.2.1    yamt  * PARAMETERS:  Table               - A VRTC table
   2545  1.1.1.3.2.1    yamt  *
   2546  1.1.1.3.2.1    yamt  * RETURN:      None
   2547  1.1.1.3.2.1    yamt  *
   2548  1.1.1.3.2.1    yamt  * DESCRIPTION: Format the contents of a VRTC
   2549  1.1.1.3.2.1    yamt  *
   2550  1.1.1.3.2.1    yamt  ******************************************************************************/
   2551  1.1.1.3.2.1    yamt 
   2552  1.1.1.3.2.1    yamt void
   2553  1.1.1.3.2.1    yamt AcpiDmDumpVrtc (
   2554  1.1.1.3.2.1    yamt     ACPI_TABLE_HEADER       *Table)
   2555  1.1.1.3.2.1    yamt {
   2556  1.1.1.3.2.1    yamt     ACPI_STATUS             Status;
   2557  1.1.1.3.2.1    yamt     UINT32                  Offset = sizeof (ACPI_TABLE_VRTC);
   2558  1.1.1.3.2.1    yamt     ACPI_VRTC_ENTRY         *SubTable;
   2559  1.1.1.3.2.1    yamt 
   2560  1.1.1.3.2.1    yamt 
   2561  1.1.1.3.2.1    yamt     /* Main table */
   2562  1.1.1.3.2.1    yamt 
   2563  1.1.1.3.2.1    yamt     Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoVrtc);
   2564  1.1.1.3.2.1    yamt     if (ACPI_FAILURE (Status))
   2565  1.1.1.3.2.1    yamt     {
   2566  1.1.1.3.2.1    yamt         return;
   2567  1.1.1.3.2.1    yamt     }
   2568  1.1.1.3.2.1    yamt 
   2569  1.1.1.3.2.1    yamt     /* Sub-tables */
   2570  1.1.1.3.2.1    yamt 
   2571  1.1.1.3.2.1    yamt     SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset);
   2572  1.1.1.3.2.1    yamt     while (Offset < Table->Length)
   2573  1.1.1.3.2.1    yamt     {
   2574  1.1.1.3.2.1    yamt         /* Common sub-table header */
   2575  1.1.1.3.2.1    yamt 
   2576  1.1.1.3.2.1    yamt         AcpiOsPrintf ("\n");
   2577  1.1.1.3.2.1    yamt         Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
   2578  1.1.1.3.2.1    yamt                     sizeof (ACPI_VRTC_ENTRY), AcpiDmTableInfoVrtc0);
   2579  1.1.1.3.2.1    yamt         if (ACPI_FAILURE (Status))
   2580  1.1.1.3.2.1    yamt         {
   2581  1.1.1.3.2.1    yamt             return;
   2582  1.1.1.3.2.1    yamt         }
   2583  1.1.1.3.2.1    yamt 
   2584  1.1.1.3.2.1    yamt         /* Point to next sub-table */
   2585  1.1.1.3.2.1    yamt 
   2586  1.1.1.3.2.1    yamt         Offset += sizeof (ACPI_VRTC_ENTRY);
   2587  1.1.1.3.2.1    yamt         SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, SubTable, sizeof (ACPI_VRTC_ENTRY));
   2588  1.1.1.3.2.1    yamt     }
   2589  1.1.1.3.2.1    yamt }
   2590  1.1.1.3.2.1    yamt 
   2591  1.1.1.3.2.1    yamt 
   2592  1.1.1.3.2.1    yamt /*******************************************************************************
   2593  1.1.1.3.2.1    yamt  *
   2594          1.1  jruoho  * FUNCTION:    AcpiDmDumpWdat
   2595          1.1  jruoho  *
   2596          1.1  jruoho  * PARAMETERS:  Table               - A WDAT table
   2597          1.1  jruoho  *
   2598          1.1  jruoho  * RETURN:      None
   2599          1.1  jruoho  *
   2600          1.1  jruoho  * DESCRIPTION: Format the contents of a WDAT
   2601          1.1  jruoho  *
   2602          1.1  jruoho  ******************************************************************************/
   2603          1.1  jruoho 
   2604          1.1  jruoho void
   2605          1.1  jruoho AcpiDmDumpWdat (
   2606          1.1  jruoho     ACPI_TABLE_HEADER       *Table)
   2607          1.1  jruoho {
   2608          1.1  jruoho     ACPI_STATUS             Status;
   2609          1.1  jruoho     UINT32                  Offset = sizeof (ACPI_TABLE_WDAT);
   2610          1.1  jruoho     ACPI_WDAT_ENTRY         *SubTable;
   2611          1.1  jruoho 
   2612          1.1  jruoho 
   2613          1.1  jruoho     /* Main table */
   2614          1.1  jruoho 
   2615          1.1  jruoho     Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat);
   2616          1.1  jruoho     if (ACPI_FAILURE (Status))
   2617          1.1  jruoho     {
   2618          1.1  jruoho         return;
   2619          1.1  jruoho     }
   2620          1.1  jruoho 
   2621          1.1  jruoho     /* Sub-tables */
   2622          1.1  jruoho 
   2623          1.1  jruoho     SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset);
   2624          1.1  jruoho     while (Offset < Table->Length)
   2625          1.1  jruoho     {
   2626          1.1  jruoho         /* Common sub-table header */
   2627          1.1  jruoho 
   2628          1.1  jruoho         AcpiOsPrintf ("\n");
   2629          1.1  jruoho         Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
   2630          1.1  jruoho                     sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0);
   2631          1.1  jruoho         if (ACPI_FAILURE (Status))
   2632          1.1  jruoho         {
   2633          1.1  jruoho             return;
   2634          1.1  jruoho         }
   2635          1.1  jruoho 
   2636          1.1  jruoho         /* Point to next sub-table */
   2637          1.1  jruoho 
   2638          1.1  jruoho         Offset += sizeof (ACPI_WDAT_ENTRY);
   2639          1.1  jruoho         SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, SubTable, sizeof (ACPI_WDAT_ENTRY));
   2640          1.1  jruoho     }
   2641          1.1  jruoho }
   2642