The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/dev/acpica/components/executer/exdump.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

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

Cache object: e6c6926f7a678f583ab3af7fd5f9e83b


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.