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