Home | History | Annotate | Line # | Download | only in executer
      1   1.1    jruoho /******************************************************************************
      2   1.1    jruoho  *
      3   1.1    jruoho  * Module Name: exdump - Interpreter debug output routines
      4   1.1    jruoho  *
      5   1.1    jruoho  *****************************************************************************/
      6   1.1    jruoho 
      7  1.19  christos /******************************************************************************
      8  1.19  christos  *
      9  1.19  christos  * 1. Copyright Notice
     10  1.19  christos  *
     11  1.20  christos  * Some or all of this work - Copyright (c) 1999 - 2025, Intel Corp.
     12   1.1    jruoho  * All rights reserved.
     13   1.1    jruoho  *
     14  1.19  christos  * 2. License
     15  1.19  christos  *
     16  1.19  christos  * 2.1. This is your license from Intel Corp. under its intellectual property
     17  1.19  christos  * rights. You may have additional license terms from the party that provided
     18  1.19  christos  * you this software, covering your right to use that party's intellectual
     19  1.19  christos  * property rights.
     20  1.19  christos  *
     21  1.19  christos  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
     22  1.19  christos  * copy of the source code appearing in this file ("Covered Code") an
     23  1.19  christos  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
     24  1.19  christos  * base code distributed originally by Intel ("Original Intel Code") to copy,
     25  1.19  christos  * make derivatives, distribute, use and display any portion of the Covered
     26  1.19  christos  * Code in any form, with the right to sublicense such rights; and
     27  1.19  christos  *
     28  1.19  christos  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
     29  1.19  christos  * license (with the right to sublicense), under only those claims of Intel
     30  1.19  christos  * patents that are infringed by the Original Intel Code, to make, use, sell,
     31  1.19  christos  * offer to sell, and import the Covered Code and derivative works thereof
     32  1.19  christos  * solely to the minimum extent necessary to exercise the above copyright
     33  1.19  christos  * license, and in no event shall the patent license extend to any additions
     34  1.19  christos  * to or modifications of the Original Intel Code. No other license or right
     35  1.19  christos  * is granted directly or by implication, estoppel or otherwise;
     36  1.19  christos  *
     37  1.19  christos  * The above copyright and patent license is granted only if the following
     38  1.19  christos  * conditions are met:
     39  1.19  christos  *
     40  1.19  christos  * 3. Conditions
     41  1.19  christos  *
     42  1.19  christos  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
     43  1.19  christos  * Redistribution of source code of any substantial portion of the Covered
     44  1.19  christos  * Code or modification with rights to further distribute source must include
     45  1.19  christos  * the above Copyright Notice, the above License, this list of Conditions,
     46  1.19  christos  * and the following Disclaimer and Export Compliance provision. In addition,
     47  1.19  christos  * Licensee must cause all Covered Code to which Licensee contributes to
     48  1.19  christos  * contain a file documenting the changes Licensee made to create that Covered
     49  1.19  christos  * Code and the date of any change. Licensee must include in that file the
     50  1.19  christos  * documentation of any changes made by any predecessor Licensee. Licensee
     51  1.19  christos  * must include a prominent statement that the modification is derived,
     52  1.19  christos  * directly or indirectly, from Original Intel Code.
     53  1.19  christos  *
     54  1.19  christos  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
     55  1.19  christos  * Redistribution of source code of any substantial portion of the Covered
     56  1.19  christos  * Code or modification without rights to further distribute source must
     57  1.19  christos  * include the following Disclaimer and Export Compliance provision in the
     58  1.19  christos  * documentation and/or other materials provided with distribution. In
     59  1.19  christos  * addition, Licensee may not authorize further sublicense of source of any
     60  1.19  christos  * portion of the Covered Code, and must include terms to the effect that the
     61  1.19  christos  * license from Licensee to its licensee is limited to the intellectual
     62  1.19  christos  * property embodied in the software Licensee provides to its licensee, and
     63  1.19  christos  * not to intellectual property embodied in modifications its licensee may
     64  1.19  christos  * make.
     65  1.19  christos  *
     66  1.19  christos  * 3.3. Redistribution of Executable. Redistribution in executable form of any
     67  1.19  christos  * substantial portion of the Covered Code or modification must reproduce the
     68  1.19  christos  * above Copyright Notice, and the following Disclaimer and Export Compliance
     69  1.19  christos  * provision in the documentation and/or other materials provided with the
     70  1.19  christos  * distribution.
     71  1.19  christos  *
     72  1.19  christos  * 3.4. Intel retains all right, title, and interest in and to the Original
     73  1.19  christos  * Intel Code.
     74  1.19  christos  *
     75  1.19  christos  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
     76  1.19  christos  * Intel shall be used in advertising or otherwise to promote the sale, use or
     77  1.19  christos  * other dealings in products derived from or relating to the Covered Code
     78  1.19  christos  * without prior written authorization from Intel.
     79  1.19  christos  *
     80  1.19  christos  * 4. Disclaimer and Export Compliance
     81  1.19  christos  *
     82  1.19  christos  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
     83  1.19  christos  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
     84  1.19  christos  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
     85  1.19  christos  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
     86  1.19  christos  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
     87  1.19  christos  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
     88  1.19  christos  * PARTICULAR PURPOSE.
     89  1.19  christos  *
     90  1.19  christos  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
     91  1.19  christos  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
     92  1.19  christos  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
     93  1.19  christos  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
     94  1.19  christos  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
     95  1.19  christos  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
     96  1.19  christos  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
     97  1.19  christos  * LIMITED REMEDY.
     98  1.19  christos  *
     99  1.19  christos  * 4.3. Licensee shall not export, either directly or indirectly, any of this
    100  1.19  christos  * software or system incorporating such software without first obtaining any
    101  1.19  christos  * required license or other approval from the U. S. Department of Commerce or
    102  1.19  christos  * any other agency or department of the United States Government. In the
    103  1.19  christos  * event Licensee exports any such software from the United States or
    104  1.19  christos  * re-exports any such software from a foreign destination, Licensee shall
    105  1.19  christos  * ensure that the distribution and export/re-export of the software is in
    106  1.19  christos  * compliance with all laws, regulations, orders, or other restrictions of the
    107  1.19  christos  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
    108  1.19  christos  * any of its subsidiaries will export/re-export any technical data, process,
    109  1.19  christos  * software, or service, directly or indirectly, to any country for which the
    110  1.19  christos  * United States government or any agency thereof requires an export license,
    111  1.19  christos  * other governmental approval, or letter of assurance, without first obtaining
    112  1.19  christos  * such license, approval or letter.
    113  1.19  christos  *
    114  1.19  christos  *****************************************************************************
    115  1.19  christos  *
    116  1.19  christos  * Alternatively, you may choose to be licensed under the terms of the
    117  1.19  christos  * following license:
    118  1.19  christos  *
    119   1.3    jruoho  * Redistribution and use in source and binary forms, with or without
    120   1.3    jruoho  * modification, are permitted provided that the following conditions
    121   1.3    jruoho  * are met:
    122   1.3    jruoho  * 1. Redistributions of source code must retain the above copyright
    123   1.3    jruoho  *    notice, this list of conditions, and the following disclaimer,
    124   1.3    jruoho  *    without modification.
    125   1.3    jruoho  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
    126   1.3    jruoho  *    substantially similar to the "NO WARRANTY" disclaimer below
    127   1.3    jruoho  *    ("Disclaimer") and any redistribution must be conditioned upon
    128   1.3    jruoho  *    including a substantially similar Disclaimer requirement for further
    129   1.3    jruoho  *    binary redistribution.
    130   1.3    jruoho  * 3. Neither the names of the above-listed copyright holders nor the names
    131   1.3    jruoho  *    of any contributors may be used to endorse or promote products derived
    132   1.3    jruoho  *    from this software without specific prior written permission.
    133   1.3    jruoho  *
    134   1.3    jruoho  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    135   1.3    jruoho  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    136  1.16  christos  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    137   1.3    jruoho  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    138  1.19  christos  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    139  1.19  christos  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    140  1.19  christos  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    141  1.19  christos  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    142  1.19  christos  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    143  1.19  christos  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    144  1.19  christos  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    145  1.19  christos  *
    146  1.19  christos  * Alternatively, you may choose to be licensed under the terms of the
    147  1.19  christos  * GNU General Public License ("GPL") version 2 as published by the Free
    148  1.19  christos  * Software Foundation.
    149  1.19  christos  *
    150  1.19  christos  *****************************************************************************/
    151   1.1    jruoho 
    152   1.1    jruoho #include "acpi.h"
    153   1.1    jruoho #include "accommon.h"
    154   1.1    jruoho #include "acinterp.h"
    155   1.1    jruoho #include "amlcode.h"
    156   1.1    jruoho #include "acnamesp.h"
    157   1.1    jruoho 
    158   1.1    jruoho 
    159   1.1    jruoho #define _COMPONENT          ACPI_EXECUTER
    160   1.1    jruoho         ACPI_MODULE_NAME    ("exdump")
    161   1.1    jruoho 
    162   1.1    jruoho /*
    163   1.1    jruoho  * The following routines are used for debug output only
    164   1.1    jruoho  */
    165   1.1    jruoho #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
    166   1.1    jruoho 
    167   1.1    jruoho /* Local prototypes */
    168   1.1    jruoho 
    169   1.1    jruoho static void
    170   1.1    jruoho AcpiExOutString (
    171   1.2    jruoho     const char              *Title,
    172   1.2    jruoho     const char              *Value);
    173   1.1    jruoho 
    174   1.1    jruoho static void
    175   1.1    jruoho AcpiExOutPointer (
    176   1.2    jruoho     const char              *Title,
    177   1.9  christos     const void              *Value);
    178   1.1    jruoho 
    179   1.1    jruoho static void
    180   1.1    jruoho AcpiExDumpObject (
    181   1.1    jruoho     ACPI_OPERAND_OBJECT     *ObjDesc,
    182   1.1    jruoho     ACPI_EXDUMP_INFO        *Info);
    183   1.1    jruoho 
    184   1.1    jruoho static void
    185   1.1    jruoho AcpiExDumpReferenceObj (
    186   1.1    jruoho     ACPI_OPERAND_OBJECT     *ObjDesc);
    187   1.1    jruoho 
    188   1.1    jruoho static void
    189   1.1    jruoho AcpiExDumpPackageObj (
    190   1.1    jruoho     ACPI_OPERAND_OBJECT     *ObjDesc,
    191   1.1    jruoho     UINT32                  Level,
    192   1.1    jruoho     UINT32                  Index);
    193   1.1    jruoho 
    194   1.1    jruoho 
    195   1.1    jruoho /*******************************************************************************
    196   1.1    jruoho  *
    197   1.1    jruoho  * Object Descriptor info tables
    198   1.1    jruoho  *
    199   1.1    jruoho  * Note: The first table entry must be an INIT opcode and must contain
    200   1.1    jruoho  * the table length (number of table entries)
    201   1.1    jruoho  *
    202   1.1    jruoho  ******************************************************************************/
    203   1.1    jruoho 
    204   1.1    jruoho static ACPI_EXDUMP_INFO     AcpiExDumpInteger[2] =
    205   1.1    jruoho {
    206   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpInteger),        NULL},
    207   1.1    jruoho     {ACPI_EXD_UINT64,   ACPI_EXD_OFFSET (Integer.Value),                "Value"}
    208   1.1    jruoho };
    209   1.1    jruoho 
    210   1.1    jruoho static ACPI_EXDUMP_INFO     AcpiExDumpString[4] =
    211   1.1    jruoho {
    212   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpString),         NULL},
    213   1.1    jruoho     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (String.Length),                "Length"},
    214   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (String.Pointer),               "Pointer"},
    215   1.1    jruoho     {ACPI_EXD_STRING,   0,                                              NULL}
    216   1.1    jruoho };
    217   1.1    jruoho 
    218   1.1    jruoho static ACPI_EXDUMP_INFO     AcpiExDumpBuffer[5] =
    219   1.1    jruoho {
    220   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBuffer),         NULL},
    221   1.1    jruoho     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Buffer.Length),                "Length"},
    222   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Buffer.Pointer),               "Pointer"},
    223   1.5  christos     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Buffer.Node),                  "Parent Node"},
    224   1.1    jruoho     {ACPI_EXD_BUFFER,   0,                                              NULL}
    225   1.1    jruoho };
    226   1.1    jruoho 
    227   1.5  christos static ACPI_EXDUMP_INFO     AcpiExDumpPackage[6] =
    228   1.1    jruoho {
    229   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPackage),        NULL},
    230   1.5  christos     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Package.Node),                 "Parent Node"},
    231   1.1    jruoho     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Package.Flags),                "Flags"},
    232  1.11  christos     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Package.Count),                "Element Count"},
    233   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Package.Elements),             "Element List"},
    234   1.1    jruoho     {ACPI_EXD_PACKAGE,  0,                                              NULL}
    235   1.1    jruoho };
    236   1.1    jruoho 
    237   1.1    jruoho static ACPI_EXDUMP_INFO     AcpiExDumpDevice[4] =
    238   1.1    jruoho {
    239   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpDevice),         NULL},
    240   1.4  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.NotifyList[0]),         "System Notify"},
    241   1.5  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.NotifyList[1]),         "Device Notify"},
    242   1.5  christos     {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Device.Handler),               "Handler"}
    243   1.1    jruoho };
    244   1.1    jruoho 
    245   1.1    jruoho static ACPI_EXDUMP_INFO     AcpiExDumpEvent[2] =
    246   1.1    jruoho {
    247   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpEvent),          NULL},
    248   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Event.OsSemaphore),            "OsSemaphore"}
    249   1.1    jruoho };
    250   1.1    jruoho 
    251   1.1    jruoho static ACPI_EXDUMP_INFO     AcpiExDumpMethod[9] =
    252   1.1    jruoho {
    253   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpMethod),         NULL},
    254   1.3    jruoho     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.InfoFlags),             "Info Flags"},
    255   1.1    jruoho     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.ParamCount),            "Parameter Count"},
    256   1.1    jruoho     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.SyncLevel),             "Sync Level"},
    257   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Method.Mutex),                 "Mutex"},
    258  1.14  christos     {ACPI_EXD_UINT16,   ACPI_EXD_OFFSET (Method.OwnerId),               "Owner Id"},
    259   1.1    jruoho     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Method.ThreadCount),           "Thread Count"},
    260   1.1    jruoho     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Method.AmlLength),             "Aml Length"},
    261   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Method.AmlStart),              "Aml Start"}
    262   1.1    jruoho };
    263   1.1    jruoho 
    264   1.5  christos static ACPI_EXDUMP_INFO     AcpiExDumpMutex[6] =
    265   1.1    jruoho {
    266   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpMutex),          NULL},
    267   1.1    jruoho     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Mutex.SyncLevel),              "Sync Level"},
    268   1.5  christos     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Mutex.OriginalSyncLevel),      "Original Sync Level"},
    269   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Mutex.OwnerThread),            "Owner Thread"},
    270   1.1    jruoho     {ACPI_EXD_UINT16,   ACPI_EXD_OFFSET (Mutex.AcquisitionDepth),       "Acquire Depth"},
    271   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Mutex.OsMutex),                "OsMutex"}
    272   1.1    jruoho };
    273   1.1    jruoho 
    274   1.5  christos static ACPI_EXDUMP_INFO     AcpiExDumpRegion[8] =
    275   1.1    jruoho {
    276   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpRegion),         NULL},
    277   1.1    jruoho     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Region.SpaceId),               "Space Id"},
    278   1.1    jruoho     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Region.Flags),                 "Flags"},
    279   1.5  christos     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Region.Node),                  "Parent Node"},
    280   1.1    jruoho     {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Region.Address),               "Address"},
    281   1.1    jruoho     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Region.Length),                "Length"},
    282   1.5  christos     {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Region.Handler),               "Handler"},
    283   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Region.Next),                  "Next"}
    284   1.1    jruoho };
    285   1.1    jruoho 
    286   1.5  christos static ACPI_EXDUMP_INFO     AcpiExDumpPower[6] =
    287   1.1    jruoho {
    288   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPower),          NULL},
    289   1.1    jruoho     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.SystemLevel),    "System Level"},
    290   1.1    jruoho     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.ResourceOrder),  "Resource Order"},
    291   1.4  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.NotifyList[0]),  "System Notify"},
    292   1.5  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.NotifyList[1]),  "Device Notify"},
    293   1.5  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.Handler),        "Handler"}
    294   1.1    jruoho };
    295   1.1    jruoho 
    296   1.1    jruoho static ACPI_EXDUMP_INFO     AcpiExDumpProcessor[7] =
    297   1.1    jruoho {
    298   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpProcessor),      NULL},
    299   1.1    jruoho     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Processor.ProcId),             "Processor ID"},
    300   1.1    jruoho     {ACPI_EXD_UINT8 ,   ACPI_EXD_OFFSET (Processor.Length),             "Length"},
    301   1.1    jruoho     {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Processor.Address),            "Address"},
    302   1.4  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.NotifyList[0]),      "System Notify"},
    303   1.4  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.NotifyList[1]),      "Device Notify"},
    304   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Processor.Handler),            "Handler"}
    305   1.1    jruoho };
    306   1.1    jruoho 
    307   1.1    jruoho static ACPI_EXDUMP_INFO     AcpiExDumpThermal[4] =
    308   1.1    jruoho {
    309   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpThermal),        NULL},
    310   1.4  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.NotifyList[0]),    "System Notify"},
    311   1.4  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.NotifyList[1]),    "Device Notify"},
    312   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (ThermalZone.Handler),          "Handler"}
    313   1.1    jruoho };
    314   1.1    jruoho 
    315   1.1    jruoho static ACPI_EXDUMP_INFO     AcpiExDumpBufferField[3] =
    316   1.1    jruoho {
    317   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBufferField),    NULL},
    318   1.1    jruoho     {ACPI_EXD_FIELD,    0,                                              NULL},
    319   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BufferField.BufferObj),        "Buffer Object"}
    320   1.1    jruoho };
    321   1.1    jruoho 
    322   1.4  christos static ACPI_EXDUMP_INFO     AcpiExDumpRegionField[5] =
    323   1.1    jruoho {
    324   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpRegionField),    NULL},
    325   1.1    jruoho     {ACPI_EXD_FIELD,    0,                                              NULL},
    326   1.4  christos     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Field.AccessLength),           "AccessLength"},
    327   1.4  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Field.RegionObj),              "Region Object"},
    328   1.4  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Field.ResourceBuffer),         "ResourceBuffer"}
    329   1.1    jruoho };
    330   1.1    jruoho 
    331   1.1    jruoho static ACPI_EXDUMP_INFO     AcpiExDumpBankField[5] =
    332   1.1    jruoho {
    333   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField),      NULL},
    334   1.1    jruoho     {ACPI_EXD_FIELD,    0,                                              NULL},
    335   1.1    jruoho     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (BankField.Value),              "Value"},
    336   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BankField.RegionObj),          "Region Object"},
    337   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (BankField.BankObj),            "Bank Object"}
    338   1.1    jruoho };
    339   1.1    jruoho 
    340   1.1    jruoho static ACPI_EXDUMP_INFO     AcpiExDumpIndexField[5] =
    341   1.1    jruoho {
    342   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField),      NULL},
    343   1.1    jruoho     {ACPI_EXD_FIELD,    0,                                              NULL},
    344   1.1    jruoho     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (IndexField.Value),             "Value"},
    345   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (IndexField.IndexObj),          "Index Object"},
    346   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (IndexField.DataObj),           "Data Object"}
    347   1.1    jruoho };
    348   1.1    jruoho 
    349   1.7  christos static ACPI_EXDUMP_INFO     AcpiExDumpReference[9] =
    350   1.1    jruoho {
    351   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpReference),       NULL},
    352   1.1    jruoho     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Reference.Class),              "Class"},
    353   1.1    jruoho     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Reference.TargetType),         "Target Type"},
    354   1.1    jruoho     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Reference.Value),              "Value"},
    355   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Object),             "Object Desc"},
    356   1.5  christos     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Reference.Node),               "Node"},
    357   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Where),              "Where"},
    358   1.7  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.IndexPointer),       "Index Pointer"},
    359   1.1    jruoho     {ACPI_EXD_REFERENCE,0,                                              NULL}
    360   1.1    jruoho };
    361   1.1    jruoho 
    362   1.1    jruoho static ACPI_EXDUMP_INFO     AcpiExDumpAddressHandler[6] =
    363   1.1    jruoho {
    364   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpAddressHandler), NULL},
    365   1.1    jruoho     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (AddressSpace.SpaceId),         "Space Id"},
    366   1.5  christos     {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (AddressSpace.Next),            "Next"},
    367   1.5  christos     {ACPI_EXD_RGN_LIST, ACPI_EXD_OFFSET (AddressSpace.RegionList),      "Region List"},
    368   1.5  christos     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (AddressSpace.Node),            "Node"},
    369   1.1    jruoho     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.Context),         "Context"}
    370   1.1    jruoho };
    371   1.1    jruoho 
    372   1.4  christos static ACPI_EXDUMP_INFO     AcpiExDumpNotify[7] =
    373   1.1    jruoho {
    374   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNotify),         NULL},
    375   1.5  christos     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Notify.Node),                  "Node"},
    376   1.4  christos     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Notify.HandlerType),           "Handler Type"},
    377   1.4  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Handler),               "Handler"},
    378   1.4  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Context),               "Context"},
    379   1.4  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Next[0]),               "Next System Notify"},
    380   1.4  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Next[1]),               "Next Device Notify"}
    381   1.1    jruoho };
    382   1.1    jruoho 
    383   1.5  christos static ACPI_EXDUMP_INFO     AcpiExDumpExtra[6] =
    384   1.5  christos {
    385   1.5  christos     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpExtra),          NULL},
    386   1.5  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.Method_REG),             "_REG Method"},
    387   1.5  christos     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Extra.ScopeNode),              "Scope Node"},
    388   1.5  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.RegionContext),          "Region Context"},
    389   1.5  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.AmlStart),               "Aml Start"},
    390   1.5  christos     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Extra.AmlLength),              "Aml Length"}
    391   1.5  christos };
    392   1.5  christos 
    393   1.5  christos static ACPI_EXDUMP_INFO     AcpiExDumpData[3] =
    394   1.5  christos {
    395   1.5  christos     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpData),           NULL},
    396   1.5  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Data.Handler),                 "Handler"},
    397   1.5  christos     {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Data.Pointer),                 "Raw Data"}
    398   1.5  christos };
    399   1.1    jruoho 
    400   1.1    jruoho /* Miscellaneous tables */
    401   1.1    jruoho 
    402   1.5  christos static ACPI_EXDUMP_INFO     AcpiExDumpCommon[5] =
    403   1.1    jruoho {
    404   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpCommon),         NULL},
    405   1.1    jruoho     {ACPI_EXD_TYPE ,    0,                                              NULL},
    406   1.1    jruoho     {ACPI_EXD_UINT16,   ACPI_EXD_OFFSET (Common.ReferenceCount),        "Reference Count"},
    407   1.5  christos     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Common.Flags),                 "Flags"},
    408   1.5  christos     {ACPI_EXD_LIST,     ACPI_EXD_OFFSET (Common.NextObject),            "Object List"}
    409   1.1    jruoho };
    410   1.1    jruoho 
    411   1.1    jruoho static ACPI_EXDUMP_INFO     AcpiExDumpFieldCommon[7] =
    412   1.1    jruoho {
    413   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpFieldCommon),    NULL},
    414   1.1    jruoho     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.FieldFlags),       "Field Flags"},
    415   1.1    jruoho     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.AccessByteWidth),  "Access Byte Width"},
    416   1.1    jruoho     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BitLength),        "Bit Length"},
    417   1.1    jruoho     {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.StartFieldBitOffset),"Field Bit Offset"},
    418   1.1    jruoho     {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BaseByteOffset),   "Base Byte Offset"},
    419   1.5  christos     {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (CommonField.Node),             "Parent Node"}
    420   1.1    jruoho };
    421   1.1    jruoho 
    422   1.5  christos static ACPI_EXDUMP_INFO     AcpiExDumpNode[7] =
    423   1.1    jruoho {
    424   1.1    jruoho     {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNode),           NULL},
    425  1.14  christos     {ACPI_EXD_UINT16,   ACPI_EXD_NSOFFSET (Flags),                      "Flags"},
    426  1.14  christos     {ACPI_EXD_UINT16,   ACPI_EXD_NSOFFSET (OwnerId),                    "Owner Id"},
    427   1.5  christos     {ACPI_EXD_LIST,     ACPI_EXD_NSOFFSET (Object),                     "Object List"},
    428   1.5  christos     {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Parent),                     "Parent"},
    429   1.5  christos     {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Child),                      "Child"},
    430   1.5  christos     {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Peer),                       "Peer"}
    431   1.1    jruoho };
    432   1.1    jruoho 
    433   1.1    jruoho 
    434   1.1    jruoho /* Dispatch table, indexed by object type */
    435   1.1    jruoho 
    436   1.1    jruoho static ACPI_EXDUMP_INFO     *AcpiExDumpInfo[] =
    437   1.1    jruoho {
    438   1.1    jruoho     NULL,
    439   1.1    jruoho     AcpiExDumpInteger,
    440   1.1    jruoho     AcpiExDumpString,
    441   1.1    jruoho     AcpiExDumpBuffer,
    442   1.1    jruoho     AcpiExDumpPackage,
    443   1.1    jruoho     NULL,
    444   1.1    jruoho     AcpiExDumpDevice,
    445   1.1    jruoho     AcpiExDumpEvent,
    446   1.1    jruoho     AcpiExDumpMethod,
    447   1.1    jruoho     AcpiExDumpMutex,
    448   1.1    jruoho     AcpiExDumpRegion,
    449   1.1    jruoho     AcpiExDumpPower,
    450   1.1    jruoho     AcpiExDumpProcessor,
    451   1.1    jruoho     AcpiExDumpThermal,
    452   1.1    jruoho     AcpiExDumpBufferField,
    453   1.1    jruoho     NULL,
    454   1.1    jruoho     NULL,
    455   1.1    jruoho     AcpiExDumpRegionField,
    456   1.1    jruoho     AcpiExDumpBankField,
    457   1.1    jruoho     AcpiExDumpIndexField,
    458   1.1    jruoho     AcpiExDumpReference,
    459   1.1    jruoho     NULL,
    460   1.1    jruoho     NULL,
    461   1.1    jruoho     AcpiExDumpNotify,
    462   1.1    jruoho     AcpiExDumpAddressHandler,
    463   1.1    jruoho     NULL,
    464   1.1    jruoho     NULL,
    465   1.5  christos     NULL,
    466   1.5  christos     AcpiExDumpExtra,
    467   1.5  christos     AcpiExDumpData
    468   1.1    jruoho };
    469   1.1    jruoho 
    470   1.1    jruoho 
    471   1.1    jruoho /*******************************************************************************
    472   1.1    jruoho  *
    473   1.1    jruoho  * FUNCTION:    AcpiExDumpObject
    474   1.1    jruoho  *
    475   1.1    jruoho  * PARAMETERS:  ObjDesc             - Descriptor to dump
    476   1.1    jruoho  *              Info                - Info table corresponding to this object
    477   1.1    jruoho  *                                    type
    478   1.1    jruoho  *
    479   1.1    jruoho  * RETURN:      None
    480   1.1    jruoho  *
    481   1.1    jruoho  * DESCRIPTION: Walk the info table for this object
    482   1.1    jruoho  *
    483   1.1    jruoho  ******************************************************************************/
    484   1.1    jruoho 
    485   1.1    jruoho static void
    486   1.1    jruoho AcpiExDumpObject (
    487   1.1    jruoho     ACPI_OPERAND_OBJECT     *ObjDesc,
    488   1.1    jruoho     ACPI_EXDUMP_INFO        *Info)
    489   1.1    jruoho {
    490   1.1    jruoho     UINT8                   *Target;
    491   1.9  christos     const char              *Name;
    492   1.1    jruoho     UINT8                   Count;
    493   1.5  christos     ACPI_OPERAND_OBJECT     *Start;
    494   1.5  christos     ACPI_OPERAND_OBJECT     *Data = NULL;
    495   1.5  christos     ACPI_OPERAND_OBJECT     *Next;
    496   1.5  christos     ACPI_NAMESPACE_NODE     *Node;
    497   1.1    jruoho 
    498   1.1    jruoho 
    499   1.1    jruoho     if (!Info)
    500   1.1    jruoho     {
    501   1.1    jruoho         AcpiOsPrintf (
    502   1.1    jruoho             "ExDumpObject: Display not implemented for object type %s\n",
    503   1.1    jruoho             AcpiUtGetObjectTypeName (ObjDesc));
    504   1.1    jruoho         return;
    505   1.1    jruoho     }
    506   1.1    jruoho 
    507   1.1    jruoho     /* First table entry must contain the table length (# of table entries) */
    508   1.1    jruoho 
    509   1.1    jruoho     Count = Info->Offset;
    510   1.1    jruoho 
    511   1.1    jruoho     while (Count)
    512   1.1    jruoho     {
    513  1.11  christos         if (!ObjDesc)
    514  1.11  christos         {
    515  1.11  christos             return;
    516  1.11  christos         }
    517  1.11  christos 
    518   1.1    jruoho         Target = ACPI_ADD_PTR (UINT8, ObjDesc, Info->Offset);
    519   1.2    jruoho         Name = __UNCONST(Info->Name);
    520   1.1    jruoho 
    521   1.1    jruoho         switch (Info->Opcode)
    522   1.1    jruoho         {
    523   1.1    jruoho         case ACPI_EXD_INIT:
    524   1.4  christos 
    525   1.1    jruoho             break;
    526   1.1    jruoho 
    527   1.1    jruoho         case ACPI_EXD_TYPE:
    528   1.1    jruoho 
    529   1.5  christos             AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type",
    530  1.11  christos                 ObjDesc->Common.Type,
    531  1.11  christos                 AcpiUtGetObjectTypeName (ObjDesc));
    532   1.1    jruoho             break;
    533   1.1    jruoho 
    534   1.1    jruoho         case ACPI_EXD_UINT8:
    535   1.1    jruoho 
    536   1.1    jruoho             AcpiOsPrintf ("%20s : %2.2X\n", Name, *Target);
    537   1.1    jruoho             break;
    538   1.1    jruoho 
    539   1.1    jruoho         case ACPI_EXD_UINT16:
    540   1.1    jruoho 
    541   1.1    jruoho             AcpiOsPrintf ("%20s : %4.4X\n", Name, ACPI_GET16 (Target));
    542   1.1    jruoho             break;
    543   1.1    jruoho 
    544   1.1    jruoho         case ACPI_EXD_UINT32:
    545   1.1    jruoho 
    546   1.1    jruoho             AcpiOsPrintf ("%20s : %8.8X\n", Name, ACPI_GET32 (Target));
    547   1.1    jruoho             break;
    548   1.1    jruoho 
    549   1.1    jruoho         case ACPI_EXD_UINT64:
    550   1.1    jruoho 
    551   1.1    jruoho             AcpiOsPrintf ("%20s : %8.8X%8.8X\n", "Value",
    552   1.1    jruoho                 ACPI_FORMAT_UINT64 (ACPI_GET64 (Target)));
    553   1.1    jruoho             break;
    554   1.1    jruoho 
    555   1.1    jruoho         case ACPI_EXD_POINTER:
    556   1.1    jruoho         case ACPI_EXD_ADDRESS:
    557   1.1    jruoho 
    558   1.1    jruoho             AcpiExOutPointer (Name, *ACPI_CAST_PTR (void *, Target));
    559   1.1    jruoho             break;
    560   1.1    jruoho 
    561   1.1    jruoho         case ACPI_EXD_STRING:
    562   1.1    jruoho 
    563   1.1    jruoho             AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
    564   1.1    jruoho             AcpiOsPrintf ("\n");
    565   1.1    jruoho             break;
    566   1.1    jruoho 
    567   1.1    jruoho         case ACPI_EXD_BUFFER:
    568   1.1    jruoho 
    569   1.8  christos             ACPI_DUMP_BUFFER (
    570   1.8  christos                 ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length);
    571   1.1    jruoho             break;
    572   1.1    jruoho 
    573   1.1    jruoho         case ACPI_EXD_PACKAGE:
    574   1.1    jruoho 
    575   1.1    jruoho             /* Dump the package contents */
    576   1.1    jruoho 
    577   1.1    jruoho             AcpiOsPrintf ("\nPackage Contents:\n");
    578   1.1    jruoho             AcpiExDumpPackageObj (ObjDesc, 0, 0);
    579   1.1    jruoho             break;
    580   1.1    jruoho 
    581   1.1    jruoho         case ACPI_EXD_FIELD:
    582   1.1    jruoho 
    583   1.1    jruoho             AcpiExDumpObject (ObjDesc, AcpiExDumpFieldCommon);
    584   1.1    jruoho             break;
    585   1.1    jruoho 
    586   1.1    jruoho         case ACPI_EXD_REFERENCE:
    587   1.1    jruoho 
    588   1.9  christos             AcpiExOutString ("Class Name", AcpiUtGetReferenceName (ObjDesc));
    589   1.1    jruoho             AcpiExDumpReferenceObj (ObjDesc);
    590   1.1    jruoho             break;
    591   1.1    jruoho 
    592   1.5  christos         case ACPI_EXD_LIST:
    593   1.5  christos 
    594   1.5  christos             Start = *ACPI_CAST_PTR (void *, Target);
    595   1.5  christos             Next = Start;
    596   1.5  christos 
    597  1.11  christos             AcpiOsPrintf ("%20s : %p ", Name, Next);
    598   1.5  christos             if (Next)
    599   1.5  christos             {
    600  1.11  christos                 AcpiOsPrintf ("%s (Type %2.2X)",
    601   1.5  christos                     AcpiUtGetObjectTypeName (Next), Next->Common.Type);
    602   1.5  christos 
    603   1.5  christos                 while (Next->Common.NextObject)
    604   1.5  christos                 {
    605   1.5  christos                     if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
    606   1.5  christos                         !Data)
    607   1.5  christos                     {
    608   1.5  christos                         Data = Next;
    609   1.5  christos                     }
    610   1.5  christos 
    611   1.5  christos                     Next = Next->Common.NextObject;
    612   1.5  christos                     AcpiOsPrintf ("->%p(%s %2.2X)", Next,
    613   1.5  christos                         AcpiUtGetObjectTypeName (Next), Next->Common.Type);
    614   1.5  christos 
    615   1.5  christos                     if ((Next == Start) || (Next == Data))
    616   1.5  christos                     {
    617   1.8  christos                         AcpiOsPrintf (
    618   1.8  christos                             "\n**** Error: Object list appears to be circular linked");
    619   1.5  christos                         break;
    620   1.5  christos                     }
    621   1.5  christos                 }
    622   1.5  christos             }
    623  1.11  christos             else
    624  1.11  christos             {
    625  1.11  christos                 AcpiOsPrintf ("- No attached objects");
    626  1.11  christos             }
    627   1.5  christos 
    628   1.5  christos             AcpiOsPrintf ("\n");
    629   1.5  christos             break;
    630   1.5  christos 
    631   1.5  christos         case ACPI_EXD_HDLR_LIST:
    632   1.5  christos 
    633   1.5  christos             Start = *ACPI_CAST_PTR (void *, Target);
    634   1.5  christos             Next = Start;
    635   1.5  christos 
    636   1.5  christos             AcpiOsPrintf ("%20s : %p", Name, Next);
    637   1.5  christos             if (Next)
    638   1.5  christos             {
    639   1.5  christos                 AcpiOsPrintf ("(%s %2.2X)",
    640   1.8  christos                     AcpiUtGetObjectTypeName (Next),
    641   1.8  christos                     Next->AddressSpace.SpaceId);
    642   1.5  christos 
    643   1.5  christos                 while (Next->AddressSpace.Next)
    644   1.5  christos                 {
    645   1.5  christos                     if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
    646   1.5  christos                         !Data)
    647   1.5  christos                     {
    648   1.5  christos                         Data = Next;
    649   1.5  christos                     }
    650   1.5  christos 
    651   1.5  christos                     Next = Next->AddressSpace.Next;
    652   1.5  christos                     AcpiOsPrintf ("->%p(%s %2.2X)", Next,
    653   1.8  christos                         AcpiUtGetObjectTypeName (Next),
    654   1.8  christos                         Next->AddressSpace.SpaceId);
    655   1.5  christos 
    656   1.5  christos                     if ((Next == Start) || (Next == Data))
    657   1.5  christos                     {
    658   1.8  christos                         AcpiOsPrintf (
    659   1.8  christos                             "\n**** Error: Handler list appears to be circular linked");
    660   1.5  christos                         break;
    661   1.5  christos                     }
    662   1.5  christos                 }
    663   1.5  christos             }
    664   1.5  christos 
    665   1.5  christos             AcpiOsPrintf ("\n");
    666   1.5  christos             break;
    667   1.5  christos 
    668   1.5  christos         case ACPI_EXD_RGN_LIST:
    669   1.5  christos 
    670   1.5  christos             Start = *ACPI_CAST_PTR (void *, Target);
    671   1.5  christos             Next = Start;
    672   1.5  christos 
    673   1.5  christos             AcpiOsPrintf ("%20s : %p", Name, Next);
    674   1.5  christos             if (Next)
    675   1.5  christos             {
    676   1.5  christos                 AcpiOsPrintf ("(%s %2.2X)",
    677   1.5  christos                     AcpiUtGetObjectTypeName (Next), Next->Common.Type);
    678   1.5  christos 
    679   1.5  christos                 while (Next->Region.Next)
    680   1.5  christos                 {
    681   1.5  christos                     if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
    682   1.5  christos                         !Data)
    683   1.5  christos                     {
    684   1.5  christos                         Data = Next;
    685   1.5  christos                     }
    686   1.5  christos 
    687   1.5  christos                     Next = Next->Region.Next;
    688   1.5  christos                     AcpiOsPrintf ("->%p(%s %2.2X)", Next,
    689   1.5  christos                         AcpiUtGetObjectTypeName (Next), Next->Common.Type);
    690   1.5  christos 
    691   1.5  christos                     if ((Next == Start) || (Next == Data))
    692   1.5  christos                     {
    693   1.8  christos                         AcpiOsPrintf (
    694   1.8  christos                             "\n**** Error: Region list appears to be circular linked");
    695   1.5  christos                         break;
    696   1.5  christos                     }
    697   1.5  christos                 }
    698   1.5  christos             }
    699   1.5  christos 
    700   1.5  christos             AcpiOsPrintf ("\n");
    701   1.5  christos             break;
    702   1.5  christos 
    703   1.5  christos         case ACPI_EXD_NODE:
    704   1.5  christos 
    705   1.5  christos             Node = *ACPI_CAST_PTR (ACPI_NAMESPACE_NODE *, Target);
    706   1.5  christos 
    707   1.5  christos             AcpiOsPrintf ("%20s : %p", Name, Node);
    708   1.5  christos             if (Node)
    709   1.5  christos             {
    710   1.5  christos                 AcpiOsPrintf (" [%4.4s]", Node->Name.Ascii);
    711   1.5  christos             }
    712   1.5  christos             AcpiOsPrintf ("\n");
    713   1.5  christos             break;
    714   1.5  christos 
    715   1.1    jruoho         default:
    716   1.1    jruoho 
    717   1.1    jruoho             AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n",
    718   1.1    jruoho                 Info->Opcode);
    719   1.1    jruoho             return;
    720   1.1    jruoho         }
    721   1.1    jruoho 
    722   1.1    jruoho         Info++;
    723   1.1    jruoho         Count--;
    724   1.1    jruoho     }
    725   1.1    jruoho }
    726   1.1    jruoho 
    727   1.1    jruoho 
    728   1.1    jruoho /*******************************************************************************
    729   1.1    jruoho  *
    730   1.1    jruoho  * FUNCTION:    AcpiExDumpOperand
    731   1.1    jruoho  *
    732   1.1    jruoho  * PARAMETERS:  *ObjDesc        - Pointer to entry to be dumped
    733   1.1    jruoho  *              Depth           - Current nesting depth
    734   1.1    jruoho  *
    735   1.1    jruoho  * RETURN:      None
    736   1.1    jruoho  *
    737   1.1    jruoho  * DESCRIPTION: Dump an operand object
    738   1.1    jruoho  *
    739   1.1    jruoho  ******************************************************************************/
    740   1.1    jruoho 
    741   1.1    jruoho void
    742   1.1    jruoho AcpiExDumpOperand (
    743   1.1    jruoho     ACPI_OPERAND_OBJECT     *ObjDesc,
    744   1.1    jruoho     UINT32                  Depth)
    745   1.1    jruoho {
    746   1.1    jruoho     UINT32                  Length;
    747   1.1    jruoho     UINT32                  Index;
    748   1.1    jruoho 
    749   1.1    jruoho 
    750  1.12  christos     ACPI_FUNCTION_NAME (ExDumpOperand);
    751   1.1    jruoho 
    752   1.1    jruoho 
    753   1.4  christos     /* Check if debug output enabled */
    754   1.4  christos 
    755   1.4  christos     if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_EXEC, _COMPONENT))
    756   1.1    jruoho     {
    757   1.1    jruoho         return;
    758   1.1    jruoho     }
    759   1.1    jruoho 
    760   1.1    jruoho     if (!ObjDesc)
    761   1.1    jruoho     {
    762   1.1    jruoho         /* This could be a null element of a package */
    763   1.1    jruoho 
    764   1.1    jruoho         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n"));
    765   1.1    jruoho         return;
    766   1.1    jruoho     }
    767   1.1    jruoho 
    768   1.1    jruoho     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
    769   1.1    jruoho     {
    770   1.1    jruoho         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", ObjDesc));
    771   1.1    jruoho         ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_EXEC);
    772   1.1    jruoho         return;
    773   1.1    jruoho     }
    774   1.1    jruoho 
    775   1.1    jruoho     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
    776   1.1    jruoho     {
    777   1.1    jruoho         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
    778   1.1    jruoho             "%p is not a node or operand object: [%s]\n",
    779   1.1    jruoho             ObjDesc, AcpiUtGetDescriptorName (ObjDesc)));
    780   1.1    jruoho         ACPI_DUMP_BUFFER (ObjDesc, sizeof (ACPI_OPERAND_OBJECT));
    781   1.1    jruoho         return;
    782   1.1    jruoho     }
    783   1.1    jruoho 
    784   1.1    jruoho     /* ObjDesc is a valid object */
    785   1.1    jruoho 
    786   1.1    jruoho     if (Depth > 0)
    787   1.1    jruoho     {
    788  1.11  christos         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p Refs=%u ",
    789  1.11  christos             Depth, " ", Depth, ObjDesc, ObjDesc->Common.ReferenceCount));
    790   1.1    jruoho     }
    791   1.1    jruoho     else
    792   1.1    jruoho     {
    793  1.11  christos         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Refs=%u ",
    794  1.11  christos             ObjDesc, ObjDesc->Common.ReferenceCount));
    795   1.1    jruoho     }
    796   1.1    jruoho 
    797   1.1    jruoho     /* Decode object type */
    798   1.1    jruoho 
    799   1.1    jruoho     switch (ObjDesc->Common.Type)
    800   1.1    jruoho     {
    801   1.1    jruoho     case ACPI_TYPE_LOCAL_REFERENCE:
    802   1.1    jruoho 
    803   1.8  christos         AcpiOsPrintf ("Reference: [%s] ",
    804   1.8  christos             AcpiUtGetReferenceName (ObjDesc));
    805   1.1    jruoho 
    806   1.1    jruoho         switch (ObjDesc->Reference.Class)
    807   1.1    jruoho         {
    808   1.1    jruoho         case ACPI_REFCLASS_DEBUG:
    809   1.1    jruoho 
    810   1.1    jruoho             AcpiOsPrintf ("\n");
    811   1.1    jruoho             break;
    812   1.1    jruoho 
    813   1.1    jruoho         case ACPI_REFCLASS_INDEX:
    814   1.1    jruoho 
    815   1.1    jruoho             AcpiOsPrintf ("%p\n", ObjDesc->Reference.Object);
    816   1.1    jruoho             break;
    817   1.1    jruoho 
    818   1.1    jruoho         case ACPI_REFCLASS_TABLE:
    819   1.1    jruoho 
    820   1.1    jruoho             AcpiOsPrintf ("Table Index %X\n", ObjDesc->Reference.Value);
    821   1.1    jruoho             break;
    822   1.1    jruoho 
    823   1.1    jruoho         case ACPI_REFCLASS_REFOF:
    824   1.1    jruoho 
    825   1.1    jruoho             AcpiOsPrintf ("%p [%s]\n", ObjDesc->Reference.Object,
    826   1.1    jruoho                 AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
    827   1.1    jruoho                     ObjDesc->Reference.Object)->Common.Type));
    828   1.1    jruoho             break;
    829   1.1    jruoho 
    830   1.1    jruoho         case ACPI_REFCLASS_NAME:
    831   1.1    jruoho 
    832  1.11  christos             AcpiUtRepairName (ObjDesc->Reference.Node->Name.Ascii);
    833  1.11  christos             AcpiOsPrintf ("- [%4.4s] (Node %p)\n",
    834  1.11  christos                 ObjDesc->Reference.Node->Name.Ascii,
    835  1.11  christos                 ObjDesc->Reference.Node);
    836   1.1    jruoho             break;
    837   1.1    jruoho 
    838   1.1    jruoho         case ACPI_REFCLASS_ARG:
    839   1.1    jruoho         case ACPI_REFCLASS_LOCAL:
    840   1.1    jruoho 
    841   1.1    jruoho             AcpiOsPrintf ("%X\n", ObjDesc->Reference.Value);
    842   1.1    jruoho             break;
    843   1.1    jruoho 
    844   1.1    jruoho         default:    /* Unknown reference class */
    845   1.1    jruoho 
    846   1.1    jruoho             AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class);
    847   1.1    jruoho             break;
    848   1.1    jruoho         }
    849   1.1    jruoho         break;
    850   1.1    jruoho 
    851   1.1    jruoho     case ACPI_TYPE_BUFFER:
    852   1.1    jruoho 
    853   1.1    jruoho         AcpiOsPrintf ("Buffer length %.2X @ %p\n",
    854   1.1    jruoho             ObjDesc->Buffer.Length, ObjDesc->Buffer.Pointer);
    855   1.1    jruoho 
    856   1.1    jruoho         /* Debug only -- dump the buffer contents */
    857   1.1    jruoho 
    858   1.1    jruoho         if (ObjDesc->Buffer.Pointer)
    859   1.1    jruoho         {
    860   1.1    jruoho             Length = ObjDesc->Buffer.Length;
    861   1.1    jruoho             if (Length > 128)
    862   1.1    jruoho             {
    863   1.1    jruoho                 Length = 128;
    864   1.1    jruoho             }
    865   1.1    jruoho 
    866   1.8  christos             AcpiOsPrintf (
    867   1.8  christos                 "Buffer Contents: (displaying length 0x%.2X)\n", Length);
    868   1.1    jruoho             ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, Length);
    869   1.1    jruoho         }
    870   1.1    jruoho         break;
    871   1.1    jruoho 
    872   1.1    jruoho     case ACPI_TYPE_INTEGER:
    873   1.1    jruoho 
    874   1.1    jruoho         AcpiOsPrintf ("Integer %8.8X%8.8X\n",
    875   1.1    jruoho             ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
    876   1.1    jruoho         break;
    877   1.1    jruoho 
    878   1.1    jruoho     case ACPI_TYPE_PACKAGE:
    879   1.1    jruoho 
    880   1.1    jruoho         AcpiOsPrintf ("Package [Len %X] ElementArray %p\n",
    881   1.1    jruoho             ObjDesc->Package.Count, ObjDesc->Package.Elements);
    882   1.1    jruoho 
    883   1.1    jruoho         /*
    884   1.1    jruoho          * If elements exist, package element pointer is valid,
    885   1.1    jruoho          * and debug_level exceeds 1, dump package's elements.
    886   1.1    jruoho          */
    887   1.1    jruoho         if (ObjDesc->Package.Count &&
    888   1.1    jruoho             ObjDesc->Package.Elements &&
    889   1.1    jruoho             AcpiDbgLevel > 1)
    890   1.1    jruoho         {
    891   1.1    jruoho             for (Index = 0; Index < ObjDesc->Package.Count; Index++)
    892   1.1    jruoho             {
    893   1.8  christos                 AcpiExDumpOperand (
    894   1.8  christos                     ObjDesc->Package.Elements[Index], Depth + 1);
    895   1.1    jruoho             }
    896   1.1    jruoho         }
    897   1.1    jruoho         break;
    898   1.1    jruoho 
    899   1.1    jruoho     case ACPI_TYPE_REGION:
    900   1.1    jruoho 
    901   1.1    jruoho         AcpiOsPrintf ("Region %s (%X)",
    902   1.1    jruoho             AcpiUtGetRegionName (ObjDesc->Region.SpaceId),
    903   1.1    jruoho             ObjDesc->Region.SpaceId);
    904   1.1    jruoho 
    905   1.1    jruoho         /*
    906   1.1    jruoho          * If the address and length have not been evaluated,
    907   1.1    jruoho          * don't print them.
    908   1.1    jruoho          */
    909   1.1    jruoho         if (!(ObjDesc->Region.Flags & AOPOBJ_DATA_VALID))
    910   1.1    jruoho         {
    911   1.1    jruoho             AcpiOsPrintf ("\n");
    912   1.1    jruoho         }
    913   1.1    jruoho         else
    914   1.1    jruoho         {
    915   1.1    jruoho             AcpiOsPrintf (" base %8.8X%8.8X Length %X\n",
    916   1.6  christos                 ACPI_FORMAT_UINT64 (ObjDesc->Region.Address),
    917   1.1    jruoho                 ObjDesc->Region.Length);
    918   1.1    jruoho         }
    919   1.1    jruoho         break;
    920   1.1    jruoho 
    921   1.1    jruoho     case ACPI_TYPE_STRING:
    922   1.1    jruoho 
    923   1.1    jruoho         AcpiOsPrintf ("String length %X @ %p ",
    924   1.1    jruoho             ObjDesc->String.Length,
    925   1.1    jruoho             ObjDesc->String.Pointer);
    926   1.1    jruoho 
    927   1.1    jruoho         AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
    928   1.1    jruoho         AcpiOsPrintf ("\n");
    929   1.1    jruoho         break;
    930   1.1    jruoho 
    931   1.1    jruoho     case ACPI_TYPE_LOCAL_BANK_FIELD:
    932   1.1    jruoho 
    933   1.1    jruoho         AcpiOsPrintf ("BankField\n");
    934   1.1    jruoho         break;
    935   1.1    jruoho 
    936   1.1    jruoho     case ACPI_TYPE_LOCAL_REGION_FIELD:
    937   1.1    jruoho 
    938   1.1    jruoho         AcpiOsPrintf ("RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at "
    939   1.1    jruoho             "byte=%X bit=%X of below:\n",
    940   1.1    jruoho             ObjDesc->Field.BitLength,
    941   1.1    jruoho             ObjDesc->Field.AccessByteWidth,
    942   1.1    jruoho             ObjDesc->Field.FieldFlags & AML_FIELD_LOCK_RULE_MASK,
    943   1.1    jruoho             ObjDesc->Field.FieldFlags & AML_FIELD_UPDATE_RULE_MASK,
    944   1.1    jruoho             ObjDesc->Field.BaseByteOffset,
    945   1.1    jruoho             ObjDesc->Field.StartFieldBitOffset);
    946   1.1    jruoho 
    947   1.8  christos         AcpiExDumpOperand (ObjDesc->Field.RegionObj, Depth + 1);
    948   1.1    jruoho         break;
    949   1.1    jruoho 
    950   1.1    jruoho     case ACPI_TYPE_LOCAL_INDEX_FIELD:
    951   1.1    jruoho 
    952   1.1    jruoho         AcpiOsPrintf ("IndexField\n");
    953   1.1    jruoho         break;
    954   1.1    jruoho 
    955   1.1    jruoho     case ACPI_TYPE_BUFFER_FIELD:
    956   1.1    jruoho 
    957   1.1    jruoho         AcpiOsPrintf ("BufferField: %X bits at byte %X bit %X of\n",
    958   1.1    jruoho             ObjDesc->BufferField.BitLength,
    959   1.1    jruoho             ObjDesc->BufferField.BaseByteOffset,
    960   1.1    jruoho             ObjDesc->BufferField.StartFieldBitOffset);
    961   1.1    jruoho 
    962   1.1    jruoho         if (!ObjDesc->BufferField.BufferObj)
    963   1.1    jruoho         {
    964   1.1    jruoho             ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL*\n"));
    965   1.1    jruoho         }
    966   1.1    jruoho         else if ((ObjDesc->BufferField.BufferObj)->Common.Type !=
    967   1.8  christos             ACPI_TYPE_BUFFER)
    968   1.1    jruoho         {
    969   1.1    jruoho             AcpiOsPrintf ("*not a Buffer*\n");
    970   1.1    jruoho         }
    971   1.1    jruoho         else
    972   1.1    jruoho         {
    973   1.8  christos             AcpiExDumpOperand (ObjDesc->BufferField.BufferObj, Depth + 1);
    974   1.1    jruoho         }
    975   1.1    jruoho         break;
    976   1.1    jruoho 
    977   1.1    jruoho     case ACPI_TYPE_EVENT:
    978   1.1    jruoho 
    979   1.1    jruoho         AcpiOsPrintf ("Event\n");
    980   1.1    jruoho         break;
    981   1.1    jruoho 
    982   1.1    jruoho     case ACPI_TYPE_METHOD:
    983   1.1    jruoho 
    984   1.1    jruoho         AcpiOsPrintf ("Method(%X) @ %p:%X\n",
    985   1.1    jruoho             ObjDesc->Method.ParamCount,
    986   1.1    jruoho             ObjDesc->Method.AmlStart,
    987   1.1    jruoho             ObjDesc->Method.AmlLength);
    988   1.1    jruoho         break;
    989   1.1    jruoho 
    990   1.1    jruoho     case ACPI_TYPE_MUTEX:
    991   1.1    jruoho 
    992   1.1    jruoho         AcpiOsPrintf ("Mutex\n");
    993   1.1    jruoho         break;
    994   1.1    jruoho 
    995   1.1    jruoho     case ACPI_TYPE_DEVICE:
    996   1.1    jruoho 
    997   1.1    jruoho         AcpiOsPrintf ("Device\n");
    998   1.1    jruoho         break;
    999   1.1    jruoho 
   1000   1.1    jruoho     case ACPI_TYPE_POWER:
   1001   1.1    jruoho 
   1002   1.1    jruoho         AcpiOsPrintf ("Power\n");
   1003   1.1    jruoho         break;
   1004   1.1    jruoho 
   1005   1.1    jruoho     case ACPI_TYPE_PROCESSOR:
   1006   1.1    jruoho 
   1007   1.1    jruoho         AcpiOsPrintf ("Processor\n");
   1008   1.1    jruoho         break;
   1009   1.1    jruoho 
   1010   1.1    jruoho     case ACPI_TYPE_THERMAL:
   1011   1.1    jruoho 
   1012   1.1    jruoho         AcpiOsPrintf ("Thermal\n");
   1013   1.1    jruoho         break;
   1014   1.1    jruoho 
   1015   1.4  christos     default:
   1016   1.1    jruoho 
   1017   1.1    jruoho         /* Unknown Type */
   1018   1.1    jruoho 
   1019   1.1    jruoho         AcpiOsPrintf ("Unknown Type %X\n", ObjDesc->Common.Type);
   1020   1.1    jruoho         break;
   1021   1.1    jruoho     }
   1022   1.1    jruoho 
   1023   1.1    jruoho     return;
   1024   1.1    jruoho }
   1025   1.1    jruoho 
   1026   1.1    jruoho 
   1027   1.1    jruoho /*******************************************************************************
   1028   1.1    jruoho  *
   1029   1.1    jruoho  * FUNCTION:    AcpiExDumpOperands
   1030   1.1    jruoho  *
   1031   1.1    jruoho  * PARAMETERS:  Operands            - A list of Operand objects
   1032   1.1    jruoho  *              OpcodeName          - AML opcode name
   1033   1.1    jruoho  *              NumOperands         - Operand count for this opcode
   1034   1.1    jruoho  *
   1035   1.1    jruoho  * DESCRIPTION: Dump the operands associated with the opcode
   1036   1.1    jruoho  *
   1037   1.1    jruoho  ******************************************************************************/
   1038   1.1    jruoho 
   1039   1.1    jruoho void
   1040   1.1    jruoho AcpiExDumpOperands (
   1041   1.1    jruoho     ACPI_OPERAND_OBJECT     **Operands,
   1042   1.1    jruoho     const char              *OpcodeName,
   1043   1.1    jruoho     UINT32                  NumOperands)
   1044   1.1    jruoho {
   1045  1.12  christos     ACPI_FUNCTION_TRACE (ExDumpOperands);
   1046   1.1    jruoho 
   1047   1.1    jruoho 
   1048   1.1    jruoho     if (!OpcodeName)
   1049   1.1    jruoho     {
   1050   1.1    jruoho         OpcodeName = "UNKNOWN";
   1051   1.1    jruoho     }
   1052   1.1    jruoho 
   1053   1.1    jruoho     ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
   1054   1.1    jruoho         "**** Start operand dump for opcode [%s], %u operands\n",
   1055   1.1    jruoho         OpcodeName, NumOperands));
   1056   1.1    jruoho 
   1057   1.1    jruoho     if (NumOperands == 0)
   1058   1.1    jruoho     {
   1059   1.1    jruoho         NumOperands = 1;
   1060   1.1    jruoho     }
   1061   1.1    jruoho 
   1062   1.1    jruoho     /* Dump the individual operands */
   1063   1.1    jruoho 
   1064   1.1    jruoho     while (NumOperands)
   1065   1.1    jruoho     {
   1066   1.1    jruoho         AcpiExDumpOperand (*Operands, 0);
   1067   1.1    jruoho         Operands++;
   1068   1.1    jruoho         NumOperands--;
   1069   1.1    jruoho     }
   1070   1.1    jruoho 
   1071   1.1    jruoho     ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
   1072   1.1    jruoho         "**** End operand dump for [%s]\n", OpcodeName));
   1073  1.12  christos     return_VOID;
   1074   1.1    jruoho }
   1075   1.1    jruoho 
   1076   1.1    jruoho 
   1077   1.1    jruoho /*******************************************************************************
   1078   1.1    jruoho  *
   1079   1.1    jruoho  * FUNCTION:    AcpiExOut* functions
   1080   1.1    jruoho  *
   1081   1.1    jruoho  * PARAMETERS:  Title               - Descriptive text
   1082   1.1    jruoho  *              Value               - Value to be displayed
   1083   1.1    jruoho  *
   1084   1.4  christos  * DESCRIPTION: Object dump output formatting functions. These functions
   1085   1.1    jruoho  *              reduce the number of format strings required and keeps them
   1086   1.1    jruoho  *              all in one place for easy modification.
   1087   1.1    jruoho  *
   1088   1.1    jruoho  ******************************************************************************/
   1089   1.1    jruoho 
   1090   1.1    jruoho static void
   1091   1.1    jruoho AcpiExOutString (
   1092   1.2    jruoho     const char              *Title,
   1093   1.2    jruoho     const char              *Value)
   1094   1.1    jruoho {
   1095   1.1    jruoho     AcpiOsPrintf ("%20s : %s\n", Title, Value);
   1096   1.1    jruoho }
   1097   1.1    jruoho 
   1098   1.1    jruoho static void
   1099   1.1    jruoho AcpiExOutPointer (
   1100   1.2    jruoho     const char              *Title,
   1101   1.9  christos     const void              *Value)
   1102   1.1    jruoho {
   1103   1.1    jruoho     AcpiOsPrintf ("%20s : %p\n", Title, Value);
   1104   1.1    jruoho }
   1105   1.1    jruoho 
   1106   1.1    jruoho 
   1107   1.1    jruoho /*******************************************************************************
   1108   1.1    jruoho  *
   1109   1.1    jruoho  * FUNCTION:    AcpiExDumpNamespaceNode
   1110   1.1    jruoho  *
   1111   1.1    jruoho  * PARAMETERS:  Node                - Descriptor to dump
   1112   1.1    jruoho  *              Flags               - Force display if TRUE
   1113   1.1    jruoho  *
   1114   1.1    jruoho  * DESCRIPTION: Dumps the members of the given.Node
   1115   1.1    jruoho  *
   1116   1.1    jruoho  ******************************************************************************/
   1117   1.1    jruoho 
   1118   1.1    jruoho void
   1119   1.1    jruoho AcpiExDumpNamespaceNode (
   1120   1.1    jruoho     ACPI_NAMESPACE_NODE     *Node,
   1121   1.1    jruoho     UINT32                  Flags)
   1122   1.1    jruoho {
   1123   1.1    jruoho 
   1124   1.1    jruoho     ACPI_FUNCTION_ENTRY ();
   1125   1.1    jruoho 
   1126   1.1    jruoho 
   1127   1.1    jruoho     if (!Flags)
   1128   1.1    jruoho     {
   1129   1.4  christos         /* Check if debug output enabled */
   1130   1.4  christos 
   1131   1.4  christos         if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT))
   1132   1.1    jruoho         {
   1133   1.1    jruoho             return;
   1134   1.1    jruoho         }
   1135   1.1    jruoho     }
   1136   1.1    jruoho 
   1137   1.1    jruoho     AcpiOsPrintf ("%20s : %4.4s\n", "Name", AcpiUtGetNodeName (Node));
   1138   1.5  christos     AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type",
   1139   1.5  christos         Node->Type, AcpiUtGetTypeName (Node->Type));
   1140   1.1    jruoho 
   1141   1.1    jruoho     AcpiExDumpObject (ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node),
   1142   1.1    jruoho         AcpiExDumpNode);
   1143   1.1    jruoho }
   1144   1.1    jruoho 
   1145   1.1    jruoho 
   1146   1.1    jruoho /*******************************************************************************
   1147   1.1    jruoho  *
   1148   1.1    jruoho  * FUNCTION:    AcpiExDumpReferenceObj
   1149   1.1    jruoho  *
   1150   1.1    jruoho  * PARAMETERS:  Object              - Descriptor to dump
   1151   1.1    jruoho  *
   1152   1.1    jruoho  * DESCRIPTION: Dumps a reference object
   1153   1.1    jruoho  *
   1154   1.1    jruoho  ******************************************************************************/
   1155   1.1    jruoho 
   1156   1.1    jruoho static void
   1157   1.1    jruoho AcpiExDumpReferenceObj (
   1158   1.1    jruoho     ACPI_OPERAND_OBJECT     *ObjDesc)
   1159   1.1    jruoho {
   1160   1.1    jruoho     ACPI_BUFFER             RetBuf;
   1161   1.1    jruoho     ACPI_STATUS             Status;
   1162   1.1    jruoho 
   1163   1.1    jruoho 
   1164   1.1    jruoho     RetBuf.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
   1165   1.1    jruoho 
   1166   1.1    jruoho     if (ObjDesc->Reference.Class == ACPI_REFCLASS_NAME)
   1167   1.1    jruoho     {
   1168   1.1    jruoho         AcpiOsPrintf (" %p ", ObjDesc->Reference.Node);
   1169   1.1    jruoho 
   1170   1.7  christos         Status = AcpiNsHandleToPathname (ObjDesc->Reference.Node,
   1171   1.8  christos             &RetBuf, TRUE);
   1172   1.1    jruoho         if (ACPI_FAILURE (Status))
   1173   1.1    jruoho         {
   1174  1.11  christos             AcpiOsPrintf (" Could not convert name to pathname: %s\n",
   1175  1.11  christos                 AcpiFormatException (Status));
   1176   1.1    jruoho         }
   1177   1.1    jruoho         else
   1178   1.1    jruoho         {
   1179  1.11  christos             AcpiOsPrintf ("%s: %s\n",
   1180  1.11  christos                 AcpiUtGetTypeName (ObjDesc->Reference.Node->Type),
   1181  1.11  christos                 (char *) RetBuf.Pointer);
   1182  1.11  christos             ACPI_FREE (RetBuf.Pointer);
   1183   1.1    jruoho         }
   1184   1.1    jruoho     }
   1185   1.1    jruoho     else if (ObjDesc->Reference.Object)
   1186   1.1    jruoho     {
   1187   1.1    jruoho         if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND)
   1188   1.1    jruoho         {
   1189   1.7  christos             AcpiOsPrintf ("%22s %p", "Target :",
   1190   1.7  christos                 ObjDesc->Reference.Object);
   1191   1.1    jruoho             if (ObjDesc->Reference.Class == ACPI_REFCLASS_TABLE)
   1192   1.1    jruoho             {
   1193   1.7  christos                 AcpiOsPrintf (" Table Index: %X\n",
   1194   1.7  christos                     ObjDesc->Reference.Value);
   1195   1.1    jruoho             }
   1196   1.1    jruoho             else
   1197   1.1    jruoho             {
   1198   1.7  christos                 AcpiOsPrintf (" [%s]\n",
   1199   1.1    jruoho                     AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *)
   1200   1.7  christos                     ObjDesc->Reference.Object)->Common.Type));
   1201   1.1    jruoho             }
   1202   1.1    jruoho         }
   1203   1.1    jruoho         else
   1204   1.1    jruoho         {
   1205   1.1    jruoho             AcpiOsPrintf (" Target: %p\n", ObjDesc->Reference.Object);
   1206   1.1    jruoho         }
   1207   1.1    jruoho     }
   1208   1.1    jruoho }
   1209   1.1    jruoho 
   1210   1.1    jruoho 
   1211   1.1    jruoho /*******************************************************************************
   1212   1.1    jruoho  *
   1213   1.1    jruoho  * FUNCTION:    AcpiExDumpPackageObj
   1214   1.1    jruoho  *
   1215   1.1    jruoho  * PARAMETERS:  ObjDesc             - Descriptor to dump
   1216   1.1    jruoho  *              Level               - Indentation Level
   1217   1.1    jruoho  *              Index               - Package index for this object
   1218   1.1    jruoho  *
   1219   1.1    jruoho  * DESCRIPTION: Dumps the elements of the package
   1220   1.1    jruoho  *
   1221   1.1    jruoho  ******************************************************************************/
   1222   1.1    jruoho 
   1223   1.1    jruoho static void
   1224   1.1    jruoho AcpiExDumpPackageObj (
   1225   1.1    jruoho     ACPI_OPERAND_OBJECT     *ObjDesc,
   1226   1.1    jruoho     UINT32                  Level,
   1227   1.1    jruoho     UINT32                  Index)
   1228   1.1    jruoho {
   1229   1.1    jruoho     UINT32                  i;
   1230   1.1    jruoho 
   1231   1.1    jruoho 
   1232   1.1    jruoho     /* Indentation and index output */
   1233   1.1    jruoho 
   1234   1.1    jruoho     if (Level > 0)
   1235   1.1    jruoho     {
   1236   1.1    jruoho         for (i = 0; i < Level; i++)
   1237   1.1    jruoho         {
   1238   1.1    jruoho             AcpiOsPrintf ("  ");
   1239   1.1    jruoho         }
   1240   1.1    jruoho 
   1241   1.1    jruoho         AcpiOsPrintf ("[%.2d] ", Index);
   1242   1.1    jruoho     }
   1243   1.1    jruoho 
   1244   1.1    jruoho     AcpiOsPrintf ("%p ", ObjDesc);
   1245   1.1    jruoho 
   1246   1.1    jruoho     /* Null package elements are allowed */
   1247   1.1    jruoho 
   1248   1.1    jruoho     if (!ObjDesc)
   1249   1.1    jruoho     {
   1250   1.1    jruoho         AcpiOsPrintf ("[Null Object]\n");
   1251   1.1    jruoho         return;
   1252   1.1    jruoho     }
   1253   1.1    jruoho 
   1254   1.1    jruoho     /* Packages may only contain a few object types */
   1255   1.1    jruoho 
   1256   1.1    jruoho     switch (ObjDesc->Common.Type)
   1257   1.1    jruoho     {
   1258   1.1    jruoho     case ACPI_TYPE_INTEGER:
   1259   1.1    jruoho 
   1260   1.1    jruoho         AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n",
   1261   1.1    jruoho             ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
   1262   1.1    jruoho         break;
   1263   1.1    jruoho 
   1264   1.1    jruoho     case ACPI_TYPE_STRING:
   1265   1.1    jruoho 
   1266   1.1    jruoho         AcpiOsPrintf ("[String]  Value: ");
   1267   1.4  christos         AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX);
   1268   1.1    jruoho         AcpiOsPrintf ("\n");
   1269   1.1    jruoho         break;
   1270   1.1    jruoho 
   1271   1.1    jruoho     case ACPI_TYPE_BUFFER:
   1272   1.1    jruoho 
   1273   1.1    jruoho         AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length);
   1274   1.1    jruoho         if (ObjDesc->Buffer.Length)
   1275   1.1    jruoho         {
   1276   1.8  christos             AcpiUtDebugDumpBuffer (
   1277   1.8  christos                 ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer),
   1278   1.1    jruoho                 ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT);
   1279   1.1    jruoho         }
   1280   1.1    jruoho         else
   1281   1.1    jruoho         {
   1282   1.1    jruoho             AcpiOsPrintf ("\n");
   1283   1.1    jruoho         }
   1284   1.1    jruoho         break;
   1285   1.1    jruoho 
   1286   1.1    jruoho     case ACPI_TYPE_PACKAGE:
   1287   1.1    jruoho 
   1288   1.1    jruoho         AcpiOsPrintf ("[Package] Contains %u Elements:\n",
   1289   1.1    jruoho             ObjDesc->Package.Count);
   1290   1.1    jruoho 
   1291   1.1    jruoho         for (i = 0; i < ObjDesc->Package.Count; i++)
   1292   1.1    jruoho         {
   1293   1.8  christos             AcpiExDumpPackageObj (
   1294   1.8  christos                 ObjDesc->Package.Elements[i], Level + 1, i);
   1295   1.1    jruoho         }
   1296   1.1    jruoho         break;
   1297   1.1    jruoho 
   1298   1.1    jruoho     case ACPI_TYPE_LOCAL_REFERENCE:
   1299   1.1    jruoho 
   1300  1.11  christos         AcpiOsPrintf ("[Object Reference] Class [%s]",
   1301  1.11  christos             AcpiUtGetReferenceName (ObjDesc));
   1302   1.1    jruoho         AcpiExDumpReferenceObj (ObjDesc);
   1303   1.1    jruoho         break;
   1304   1.1    jruoho 
   1305   1.1    jruoho     default:
   1306   1.1    jruoho 
   1307  1.11  christos         AcpiOsPrintf ("[%s] Type: %2.2X\n",
   1308  1.11  christos             AcpiUtGetTypeName (ObjDesc->Common.Type), ObjDesc->Common.Type);
   1309   1.1    jruoho         break;
   1310   1.1    jruoho     }
   1311   1.1    jruoho }
   1312   1.1    jruoho 
   1313   1.1    jruoho 
   1314   1.1    jruoho /*******************************************************************************
   1315   1.1    jruoho  *
   1316   1.1    jruoho  * FUNCTION:    AcpiExDumpObjectDescriptor
   1317   1.1    jruoho  *
   1318   1.1    jruoho  * PARAMETERS:  ObjDesc             - Descriptor to dump
   1319   1.1    jruoho  *              Flags               - Force display if TRUE
   1320   1.1    jruoho  *
   1321   1.1    jruoho  * DESCRIPTION: Dumps the members of the object descriptor given.
   1322   1.1    jruoho  *
   1323   1.1    jruoho  ******************************************************************************/
   1324   1.1    jruoho 
   1325   1.1    jruoho void
   1326   1.1    jruoho AcpiExDumpObjectDescriptor (
   1327   1.1    jruoho     ACPI_OPERAND_OBJECT     *ObjDesc,
   1328   1.1    jruoho     UINT32                  Flags)
   1329   1.1    jruoho {
   1330   1.1    jruoho     ACPI_FUNCTION_TRACE (ExDumpObjectDescriptor);
   1331   1.1    jruoho 
   1332   1.1    jruoho 
   1333   1.1    jruoho     if (!ObjDesc)
   1334   1.1    jruoho     {
   1335   1.1    jruoho         return_VOID;
   1336   1.1    jruoho     }
   1337   1.1    jruoho 
   1338   1.1    jruoho     if (!Flags)
   1339   1.1    jruoho     {
   1340   1.4  christos         /* Check if debug output enabled */
   1341   1.4  christos 
   1342   1.4  christos         if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT))
   1343   1.1    jruoho         {
   1344   1.1    jruoho             return_VOID;
   1345   1.1    jruoho         }
   1346   1.1    jruoho     }
   1347   1.1    jruoho 
   1348   1.1    jruoho     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
   1349   1.1    jruoho     {
   1350   1.1    jruoho         AcpiExDumpNamespaceNode ((ACPI_NAMESPACE_NODE *) ObjDesc, Flags);
   1351   1.1    jruoho 
   1352  1.11  christos         ObjDesc = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object;
   1353  1.11  christos         if (!ObjDesc)
   1354  1.11  christos         {
   1355  1.11  christos             return_VOID;
   1356  1.11  christos         }
   1357  1.11  christos 
   1358  1.11  christos         AcpiOsPrintf ("\nAttached Object %p", ObjDesc);
   1359  1.11  christos         if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED)
   1360  1.11  christos         {
   1361  1.11  christos             AcpiOsPrintf (" - Namespace Node");
   1362  1.11  christos         }
   1363   1.1    jruoho 
   1364  1.11  christos         AcpiOsPrintf (":\n");
   1365   1.5  christos         goto DumpObject;
   1366   1.1    jruoho     }
   1367   1.1    jruoho 
   1368   1.1    jruoho     if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
   1369   1.1    jruoho     {
   1370   1.1    jruoho         AcpiOsPrintf (
   1371   1.5  christos             "%p is not an ACPI operand object: [%s]\n",
   1372   1.1    jruoho             ObjDesc, AcpiUtGetDescriptorName (ObjDesc));
   1373   1.1    jruoho         return_VOID;
   1374   1.1    jruoho     }
   1375   1.1    jruoho 
   1376   1.5  christos     /* Validate the object type */
   1377   1.5  christos 
   1378   1.5  christos     if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX)
   1379   1.1    jruoho     {
   1380   1.5  christos         AcpiOsPrintf ("Not a known object type: %2.2X\n",
   1381   1.5  christos             ObjDesc->Common.Type);
   1382   1.1    jruoho         return_VOID;
   1383   1.1    jruoho     }
   1384   1.1    jruoho 
   1385   1.5  christos 
   1386   1.5  christos DumpObject:
   1387   1.5  christos 
   1388  1.11  christos     if (!ObjDesc)
   1389  1.11  christos     {
   1390  1.11  christos         return_VOID;
   1391  1.11  christos     }
   1392  1.11  christos 
   1393   1.1    jruoho     /* Common Fields */
   1394   1.1    jruoho 
   1395   1.1    jruoho     AcpiExDumpObject (ObjDesc, AcpiExDumpCommon);
   1396   1.1    jruoho 
   1397   1.1    jruoho     /* Object-specific fields */
   1398   1.1    jruoho 
   1399   1.1    jruoho     AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
   1400   1.5  christos 
   1401   1.5  christos     if (ObjDesc->Common.Type == ACPI_TYPE_REGION)
   1402   1.5  christos     {
   1403   1.5  christos         ObjDesc = ObjDesc->Common.NextObject;
   1404   1.5  christos         if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX)
   1405   1.5  christos         {
   1406   1.8  christos             AcpiOsPrintf (
   1407   1.8  christos                 "Secondary object is not a known object type: %2.2X\n",
   1408   1.5  christos                 ObjDesc->Common.Type);
   1409   1.5  christos 
   1410   1.5  christos             return_VOID;
   1411   1.5  christos         }
   1412   1.5  christos 
   1413   1.5  christos         AcpiOsPrintf ("\nExtra attached Object (%p):\n", ObjDesc);
   1414   1.5  christos         AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
   1415   1.5  christos     }
   1416   1.5  christos 
   1417   1.1    jruoho     return_VOID;
   1418   1.1    jruoho }
   1419   1.1    jruoho 
   1420   1.1    jruoho #endif
   1421