nsdump.c revision 123315
138032Speter/******************************************************************************
2363466Sgshapiro *
364565Sgshapiro * Module Name: nsdump - table dumping routines for debug
438032Speter *              $Revision: 156 $
538032Speter *
638032Speter *****************************************************************************/
738032Speter
838032Speter/******************************************************************************
938032Speter *
1038032Speter * 1. Copyright Notice
1138032Speter *
1238032Speter * Some or all of this work - Copyright (c) 1999 - 2003, Intel Corp.
1338032Speter * All rights reserved.
1490795Sgshapiro *
1538032Speter * 2. License
16266527Sgshapiro *
1790795Sgshapiro * 2.1. This is your license from Intel Corp. under its intellectual property
1890795Sgshapiro * rights.  You may have additional license terms from the party that provided
1964565Sgshapiro * you this software, covering your right to use that party's intellectual
2064565Sgshapiro * property rights.
21363466Sgshapiro *
2264565Sgshapiro * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
2364565Sgshapiro * copy of the source code appearing in this file ("Covered Code") an
2464565Sgshapiro * irrevocable, perpetual, worldwide license under Intel's copyrights in the
2564565Sgshapiro * base code distributed originally by Intel ("Original Intel Code") to copy,
2664565Sgshapiro
2764565Sgshapiro * make derivatives, distribute, use and display any portion of the Covered
2838032Speter * Code in any form, with the right to sublicense such rights; and
2990795Sgshapiro *
3090795Sgshapiro * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
3190795Sgshapiro * license (with the right to sublicense), under only those claims of Intel
3290795Sgshapiro * patents that are infringed by the Original Intel Code, to make, use, sell,
3390795Sgshapiro * offer to sell, and import the Covered Code and derivative works thereof
3490795Sgshapiro * solely to the minimum extent necessary to exercise the above copyright
3590795Sgshapiro * license, and in no event shall the patent license extend to any additions
3690795Sgshapiro * to or modifications of the Original Intel Code.  No other license or right
3790795Sgshapiro * is granted directly or by implication, estoppel or otherwise;
3890795Sgshapiro *
3990795Sgshapiro * The above copyright and patent license is granted only if the following
4090795Sgshapiro * conditions are met:
4190795Sgshapiro *
4290795Sgshapiro * 3. Conditions
4390795Sgshapiro *
4490795Sgshapiro * 3.1. Redistribution of Source with Rights to Further Distribute Source.
4590795Sgshapiro * Redistribution of source code of any substantial portion of the Covered
4690795Sgshapiro * Code or modification with rights to further distribute source must include
4790795Sgshapiro * the above Copyright Notice, the above License, this list of Conditions,
4890795Sgshapiro * and the following Disclaimer and Export Compliance provision.  In addition,
4990795Sgshapiro * Licensee must cause all Covered Code to which Licensee contributes to
5090795Sgshapiro * contain a file documenting the changes Licensee made to create that Covered
5190795Sgshapiro * Code and the date of any change.  Licensee must include in that file the
5290795Sgshapiro * documentation of any changes made by any predecessor Licensee.  Licensee
5390795Sgshapiro * must include a prominent statement that the modification is derived,
5490795Sgshapiro * directly or indirectly, from Original Intel Code.
5590795Sgshapiro *
5690795Sgshapiro * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
5790795Sgshapiro * Redistribution of source code of any substantial portion of the Covered
5890795Sgshapiro * Code or modification without rights to further distribute source must
5990795Sgshapiro * include the following Disclaimer and Export Compliance provision in the
6090795Sgshapiro * documentation and/or other materials provided with distribution.  In
6190795Sgshapiro * addition, Licensee may not authorize further sublicense of source of any
6290795Sgshapiro * portion of the Covered Code, and must include terms to the effect that the
6390795Sgshapiro * license from Licensee to its licensee is limited to the intellectual
6490795Sgshapiro * property embodied in the software Licensee provides to its licensee, and
6590795Sgshapiro * not to intellectual property embodied in modifications its licensee may
6690795Sgshapiro * make.
6790795Sgshapiro *
6890795Sgshapiro * 3.3. Redistribution of Executable. Redistribution in executable form of any
6990795Sgshapiro * substantial portion of the Covered Code or modification must reproduce the
7090795Sgshapiro * above Copyright Notice, and the following Disclaimer and Export Compliance
7190795Sgshapiro * provision in the documentation and/or other materials provided with the
7290795Sgshapiro * distribution.
7390795Sgshapiro *
7490795Sgshapiro * 3.4. Intel retains all right, title, and interest in and to the Original
7590795Sgshapiro * Intel Code.
7690795Sgshapiro *
7790795Sgshapiro * 3.5. Neither the name Intel nor any other trademark owned or controlled by
7890795Sgshapiro * Intel shall be used in advertising or otherwise to promote the sale, use or
7990795Sgshapiro * other dealings in products derived from or relating to the Covered Code
8090795Sgshapiro * without prior written authorization from Intel.
8190795Sgshapiro *
8238032Speter * 4. Disclaimer and Export Compliance
8338032Speter *
8490795Sgshapiro * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
8538032Speter * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
8638032Speter * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
8738032Speter * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
8838032Speter * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
8938032Speter * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
9038032Speter * PARTICULAR PURPOSE.
9190795Sgshapiro *
9290795Sgshapiro * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
9390795Sgshapiro * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
9490795Sgshapiro * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
9590795Sgshapiro * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
9638032Speter * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
97285229Sgshapiro * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
9890795Sgshapiro * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
9990795Sgshapiro * LIMITED REMEDY.
10038032Speter *
10138032Speter * 4.3. Licensee shall not export, either directly or indirectly, any of this
10238032Speter * software or system incorporating such software without first obtaining any
10338032Speter * required license or other approval from the U. S. Department of Commerce or
10490795Sgshapiro * any other agency or department of the United States Government.  In the
10538032Speter * event Licensee exports any such software from the United States or
10638032Speter * re-exports any such software from a foreign destination, Licensee shall
10738032Speter * ensure that the distribution and export/re-export of the software is in
10838032Speter * compliance with all laws, regulations, orders, or other restrictions of the
10938032Speter * U.S. Export Administration Regulations. Licensee agrees that neither it nor
11038032Speter * any of its subsidiaries will export/re-export any technical data, process,
11164565Sgshapiro * software, or service, directly or indirectly, to any country for which the
112168520Sgshapiro * United States government or any agency thereof requires an export license,
11338032Speter * other governmental approval, or letter of assurance, without first obtaining
11438032Speter * such license, approval or letter.
11538032Speter *
116363466Sgshapiro *****************************************************************************/
11738032Speter
11838032Speter#define __NSDUMP_C__
11938032Speter
12038032Speter#include "acpi.h"
12138032Speter#include "acnamesp.h"
12264565Sgshapiro#include "acparser.h"
12338032Speter
12438032Speter
12538032Speter#define _COMPONENT          ACPI_NAMESPACE
12664565Sgshapiro        ACPI_MODULE_NAME    ("nsdump")
12738032Speter
12838032Speter
12964565Sgshapiro#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
130285229Sgshapiro
13164565Sgshapiro/*******************************************************************************
13264565Sgshapiro *
13364565Sgshapiro * FUNCTION:    AcpiNsPrintPathname
13438032Speter *
13538032Speter * PARAMETERS:  NumSegment          - Number of ACPI name segments
13690795Sgshapiro *              Pathname            - The compressed (internal) path
13738032Speter *
138285229Sgshapiro * DESCRIPTION: Print an object's full namespace pathname
13990795Sgshapiro *
14038032Speter ******************************************************************************/
14190795Sgshapiro
14290795Sgshapirovoid
143285229SgshapiroAcpiNsPrintPathname (
14490795Sgshapiro    UINT32                  NumSegments,
14590795Sgshapiro    char                    *Pathname)
14690795Sgshapiro{
14790795Sgshapiro    ACPI_FUNCTION_NAME ("NsPrintPathname");
14890795Sgshapiro
149285229Sgshapiro
150285229Sgshapiro    if (!(AcpiDbgLevel & ACPI_LV_NAMES) || !(AcpiDbgLayer & ACPI_NAMESPACE))
151285229Sgshapiro    {
152285229Sgshapiro        return;
15390795Sgshapiro    }
15490795Sgshapiro
15538032Speter    /* Print the entire name */
15638032Speter
15738032Speter    ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "["));
15890795Sgshapiro
15964565Sgshapiro    while (NumSegments)
16090795Sgshapiro    {
16190795Sgshapiro        AcpiOsPrintf ("%4.4s", Pathname);
16290795Sgshapiro        Pathname += ACPI_NAME_SIZE;
16390795Sgshapiro
16490795Sgshapiro        NumSegments--;
16590795Sgshapiro        if (NumSegments)
16690795Sgshapiro        {
16790795Sgshapiro            AcpiOsPrintf (".");
16890795Sgshapiro        }
16990795Sgshapiro    }
17090795Sgshapiro
17138032Speter    AcpiOsPrintf ("]\n");
17264565Sgshapiro}
17364565Sgshapiro
17438032Speter
17564565Sgshapiro/*******************************************************************************
17638032Speter *
17764565Sgshapiro * FUNCTION:    AcpiNsDumpPathname
17864565Sgshapiro *
17990795Sgshapiro * PARAMETERS:  Handle              - Object
18064565Sgshapiro *              Msg                 - Prefix message
18190795Sgshapiro *              Level               - Desired debug level
18238032Speter *              Component           - Caller's component ID
18338032Speter *
18438032Speter * DESCRIPTION: Print an object's full namespace pathname
185285229Sgshapiro *              Manages allocation/freeing of a pathname buffer
18638032Speter *
18790795Sgshapiro ******************************************************************************/
18890795Sgshapiro
18990795Sgshapirovoid
19077352SgshapiroAcpiNsDumpPathname (
19190795Sgshapiro    ACPI_HANDLE             Handle,
19238032Speter    char                    *Msg,
19338032Speter    UINT32                  Level,
19438032Speter    UINT32                  Component)
19538032Speter{
19638032Speter
19764565Sgshapiro    ACPI_FUNCTION_TRACE ("NsDumpPathname");
19838032Speter
19938032Speter
20038032Speter    /* Do this only if the requested debug level and component are enabled */
20138032Speter
20290795Sgshapiro    if (!(AcpiDbgLevel & Level) || !(AcpiDbgLayer & Component))
20338032Speter    {
20438032Speter        return_VOID;
20577352Sgshapiro    }
20638032Speter
20764565Sgshapiro    /* Convert handle to a full pathname and print it (with supplied message) */
20838032Speter
20938032Speter    AcpiNsPrintNodePathname (Handle, Msg);
21064565Sgshapiro    AcpiOsPrintf ("\n");
211168520Sgshapiro    return_VOID;
21238032Speter}
21338032Speter
21438032Speter
21538032Speter/*******************************************************************************
21638032Speter *
21738032Speter * FUNCTION:    AcpiNsDumpOneObject
21864565Sgshapiro *
21964565Sgshapiro * PARAMETERS:  Handle              - Node to be dumped
22038032Speter *              Level               - Nesting level of the handle
22138032Speter *              Context             - Passed into WalkNamespace
22238032Speter *
22338032Speter * DESCRIPTION: Dump a single Node
22438032Speter *              This procedure is a UserFunction called by AcpiNsWalkNamespace.
22538032Speter *
22638032Speter ******************************************************************************/
227363466Sgshapiro
22838032SpeterACPI_STATUS
22938032SpeterAcpiNsDumpOneObject (
230363466Sgshapiro    ACPI_HANDLE             ObjHandle,
23138032Speter    UINT32                  Level,
23238032Speter    void                    *Context,
233363466Sgshapiro    void                    **ReturnValue)
23438032Speter{
23538032Speter    ACPI_WALK_INFO          *Info = (ACPI_WALK_INFO *) Context;
236363466Sgshapiro    ACPI_NAMESPACE_NODE     *ThisNode;
23738032Speter    ACPI_OPERAND_OBJECT     *ObjDesc = NULL;
23838032Speter    ACPI_OBJECT_TYPE        ObjType;
239363466Sgshapiro    ACPI_OBJECT_TYPE        Type;
24090795Sgshapiro    UINT32                  BytesToDump;
241132946Sgshapiro    UINT32                  DbgLevel;
24238032Speter    UINT32                  i;
24338032Speter
24438032Speter
24538032Speter    ACPI_FUNCTION_NAME ("NsDumpOneObject");
24690795Sgshapiro
24738032Speter
248363466Sgshapiro    /* Is output enabled? */
24964565Sgshapiro
25038032Speter    if (!(AcpiDbgLevel & Info->DebugLevel))
25138032Speter    {
25238032Speter        return (AE_OK);
25338032Speter    }
25438032Speter
25538032Speter    if (!ObjHandle)
25690795Sgshapiro    {
25738032Speter        ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Null object handle\n"));
258363466Sgshapiro        return (AE_OK);
25990795Sgshapiro    }
26038032Speter
26138032Speter    ThisNode = AcpiNsMapHandleToNode (ObjHandle);
26238032Speter    Type = ThisNode->Type;
26338032Speter
26438032Speter    /* Check if the owner matches */
26538032Speter
26690795Sgshapiro    if ((Info->OwnerId != ACPI_UINT32_MAX) &&
26790795Sgshapiro        (Info->OwnerId != ThisNode->OwnerId))
26838032Speter    {
26938032Speter        return (AE_OK);
27038032Speter    }
27190795Sgshapiro
27238032Speter    /* Indent the object according to the level */
27338032Speter
27438032Speter    AcpiOsPrintf ("%2d%*s", (UINT32) Level - 1, (int) Level * 2, " ");
27538032Speter
27638032Speter    /* Check the node type and name */
27738032Speter
27838032Speter    if (Type > ACPI_TYPE_LOCAL_MAX)
27938032Speter    {
28038032Speter        ACPI_REPORT_WARNING (("Invalid ACPI Type %08X\n", Type));
28164565Sgshapiro    }
28238032Speter
28338032Speter    if (!AcpiUtValidAcpiName (ThisNode->Name.Integer))
28438032Speter    {
28564565Sgshapiro        ACPI_REPORT_WARNING (("Invalid ACPI Name %08X\n", ThisNode->Name.Integer));
28638032Speter    }
28764565Sgshapiro
28864565Sgshapiro    /*
28990795Sgshapiro     * Now we can print out the pertinent information
29038032Speter     */
29164565Sgshapiro    AcpiOsPrintf ("%4.4s %-12s %p ",
29264565Sgshapiro            AcpiUtGetNodeName (ThisNode), AcpiUtGetTypeName (Type), ThisNode);
29364565Sgshapiro
29464565Sgshapiro    DbgLevel = AcpiDbgLevel;
29564565Sgshapiro    AcpiDbgLevel = 0;
29664565Sgshapiro    ObjDesc = AcpiNsGetAttachedObject (ThisNode);
29764565Sgshapiro    AcpiDbgLevel = DbgLevel;
29864565Sgshapiro
29990795Sgshapiro    switch (Info->DisplayType)
30090795Sgshapiro    {
30190795Sgshapiro    case ACPI_DISPLAY_SUMMARY:
30264565Sgshapiro
30338032Speter        if (!ObjDesc)
30438032Speter        {
30538032Speter            /* No attached object, we are done */
30664565Sgshapiro
30764565Sgshapiro            AcpiOsPrintf ("\n");
30864565Sgshapiro            return (AE_OK);
30964565Sgshapiro        }
31064565Sgshapiro
31164565Sgshapiro        switch (Type)
31264565Sgshapiro        {
31364565Sgshapiro        case ACPI_TYPE_PROCESSOR:
31464565Sgshapiro
31564565Sgshapiro            AcpiOsPrintf ("ID %X Len %.4X Addr %p\n",
31664565Sgshapiro                        ObjDesc->Processor.ProcId,
31764565Sgshapiro                        ObjDesc->Processor.Length,
31890795Sgshapiro                        (char *) ObjDesc->Processor.Address);
31977352Sgshapiro            break;
32064565Sgshapiro
32164565Sgshapiro
32264565Sgshapiro        case ACPI_TYPE_DEVICE:
32364565Sgshapiro
324168520Sgshapiro            AcpiOsPrintf ("Notify Object: %p\n", ObjDesc);
32590795Sgshapiro            break;
326168520Sgshapiro
32790795Sgshapiro
32890795Sgshapiro        case ACPI_TYPE_METHOD:
32964565Sgshapiro
33064565Sgshapiro            AcpiOsPrintf ("Args %X Len %.4X Aml %p\n",
33164565Sgshapiro                        (UINT32) ObjDesc->Method.ParamCount,
33290795Sgshapiro                        ObjDesc->Method.AmlLength,
33390795Sgshapiro                        ObjDesc->Method.AmlStart);
33464565Sgshapiro            break;
33564565Sgshapiro
33664565Sgshapiro
33764565Sgshapiro        case ACPI_TYPE_INTEGER:
33864565Sgshapiro
33964565Sgshapiro            AcpiOsPrintf ("= %8.8X%8.8X\n",
34064565Sgshapiro                        ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
34164565Sgshapiro            break;
34290795Sgshapiro
34364565Sgshapiro
344363466Sgshapiro        case ACPI_TYPE_PACKAGE:
34590795Sgshapiro
34664565Sgshapiro            if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)
34764565Sgshapiro            {
34864565Sgshapiro                AcpiOsPrintf ("Elements %.2X\n",
34964565Sgshapiro                            ObjDesc->Package.Count);
35064565Sgshapiro            }
35164565Sgshapiro            else
35264565Sgshapiro            {
35390795Sgshapiro                AcpiOsPrintf ("[Length not yet evaluated]\n");
35490795Sgshapiro            }
35564565Sgshapiro            break;
35664565Sgshapiro
35764565Sgshapiro
35890795Sgshapiro        case ACPI_TYPE_BUFFER:
35964565Sgshapiro
36064565Sgshapiro            if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)
36164565Sgshapiro            {
36264565Sgshapiro                AcpiOsPrintf ("Len %.2X",
36364565Sgshapiro                            ObjDesc->Buffer.Length);
364223067Sgshapiro
36564565Sgshapiro                /* Dump some of the buffer */
36664565Sgshapiro
36764565Sgshapiro                if (ObjDesc->Buffer.Length > 0)
36864565Sgshapiro                {
36964565Sgshapiro                    AcpiOsPrintf (" =");
37064565Sgshapiro                    for (i = 0; (i < ObjDesc->Buffer.Length && i < 12); i++)
37164565Sgshapiro                    {
37264565Sgshapiro                        AcpiOsPrintf (" %.2hX", ObjDesc->Buffer.Pointer[i]);
37364565Sgshapiro                    }
37464565Sgshapiro                }
37564565Sgshapiro                AcpiOsPrintf ("\n");
37690795Sgshapiro            }
37764565Sgshapiro            else
37864565Sgshapiro            {
37964565Sgshapiro                AcpiOsPrintf ("[Length not yet evaluated]\n");
38064565Sgshapiro            }
38164565Sgshapiro            break;
38264565Sgshapiro
38364565Sgshapiro
38464565Sgshapiro        case ACPI_TYPE_STRING:
38564565Sgshapiro
38664565Sgshapiro            AcpiOsPrintf ("Len %.2X ", ObjDesc->String.Length);
38790795Sgshapiro            AcpiUtPrintString (ObjDesc->String.Pointer, 32);
38890795Sgshapiro            AcpiOsPrintf ("\n");
38990795Sgshapiro            break;
39038032Speter
39164565Sgshapiro
39264565Sgshapiro        case ACPI_TYPE_REGION:
39364565Sgshapiro
39438032Speter            AcpiOsPrintf ("[%s]", AcpiUtGetRegionName (ObjDesc->Region.SpaceId));
39538032Speter            if (ObjDesc->Region.Flags & AOPOBJ_DATA_VALID)
39638032Speter            {
39738032Speter                AcpiOsPrintf (" Addr %8.8X%8.8X Len %.4X\n",
39838032Speter                            ACPI_FORMAT_UINT64 (ObjDesc->Region.Address),
39938032Speter                            ObjDesc->Region.Length);
40038032Speter            }
40138032Speter            else
40264565Sgshapiro            {
40338032Speter                AcpiOsPrintf (" [Address/Length not yet evaluated]\n");
40438032Speter            }
40538032Speter            break;
40690795Sgshapiro
40777352Sgshapiro
40838032Speter        case ACPI_TYPE_LOCAL_REFERENCE:
40938032Speter
41038032Speter            AcpiOsPrintf ("[%s]\n",
41138032Speter                    AcpiPsGetOpcodeName (ObjDesc->Reference.Opcode));
412168520Sgshapiro            break;
41390795Sgshapiro
414168520Sgshapiro
41590795Sgshapiro        case ACPI_TYPE_BUFFER_FIELD:
41690795Sgshapiro
41738032Speter            if (ObjDesc->BufferField.BufferObj &&
41838032Speter                ObjDesc->BufferField.BufferObj->Buffer.Node)
41938032Speter            {
42090795Sgshapiro                AcpiOsPrintf ("Buf [%4.4s]",
42190795Sgshapiro                        AcpiUtGetNodeName (ObjDesc->BufferField.BufferObj->Buffer.Node));
42238032Speter            }
42338032Speter            break;
42438032Speter
42538032Speter
42638032Speter        case ACPI_TYPE_LOCAL_REGION_FIELD:
42738032Speter
42864565Sgshapiro            AcpiOsPrintf ("Rgn [%4.4s]",
42938032Speter                    AcpiUtGetNodeName (ObjDesc->CommonField.RegionObj->Region.Node));
43090795Sgshapiro            break;
43138032Speter
432223067Sgshapiro
43390795Sgshapiro        case ACPI_TYPE_LOCAL_BANK_FIELD:
43438032Speter
43538032Speter            AcpiOsPrintf ("Rgn [%4.4s] Bnk [%4.4s]",
43638032Speter                    AcpiUtGetNodeName (ObjDesc->CommonField.RegionObj->Region.Node),
43790795Sgshapiro                    AcpiUtGetNodeName (ObjDesc->BankField.BankObj->CommonField.Node));
43838032Speter            break;
43990795Sgshapiro
44038032Speter
44138032Speter        case ACPI_TYPE_LOCAL_INDEX_FIELD:
44238032Speter
44338032Speter            AcpiOsPrintf ("Idx [%4.4s] Dat [%4.4s]",
44438032Speter                    AcpiUtGetNodeName (ObjDesc->IndexField.IndexObj->CommonField.Node),
44538032Speter                    AcpiUtGetNodeName (ObjDesc->IndexField.DataObj->CommonField.Node));
44638032Speter            break;
44738032Speter
44838032Speter
44964565Sgshapiro        case ACPI_TYPE_LOCAL_ALIAS:
45038032Speter
45138032Speter            AcpiOsPrintf ("Target %4.4s (%p)\n", AcpiUtGetNodeName (ObjDesc), ObjDesc);
45238032Speter            break;
45364565Sgshapiro
45438032Speter        default:
45564565Sgshapiro
45690795Sgshapiro            AcpiOsPrintf ("Object %p\n", ObjDesc);
45738032Speter            break;
45838032Speter        }
45990795Sgshapiro
46064565Sgshapiro        /* Common field handling */
46190795Sgshapiro
46290795Sgshapiro        switch (Type)
46338032Speter        {
46438032Speter        case ACPI_TYPE_BUFFER_FIELD:
46538032Speter        case ACPI_TYPE_LOCAL_REGION_FIELD:
46638032Speter        case ACPI_TYPE_LOCAL_BANK_FIELD:
46738032Speter        case ACPI_TYPE_LOCAL_INDEX_FIELD:
46838032Speter
46938032Speter            AcpiOsPrintf (" Off %.3X Len %.2X Acc %.2hd\n",
47038032Speter                    (ObjDesc->CommonField.BaseByteOffset * 8)
47164565Sgshapiro                        + ObjDesc->CommonField.StartFieldBitOffset,
47238032Speter                    ObjDesc->CommonField.BitLength,
47338032Speter                    ObjDesc->CommonField.AccessByteWidth);
47490795Sgshapiro            break;
47577352Sgshapiro
476223067Sgshapiro        default:
47738032Speter            break;
47838032Speter        }
47938032Speter        break;
480223067Sgshapiro
481285229Sgshapiro
482285229Sgshapiro    case ACPI_DISPLAY_OBJECTS:
483285229Sgshapiro
484285229Sgshapiro        AcpiOsPrintf ("O:%p", ObjDesc);
485285229Sgshapiro        if (!ObjDesc)
486285229Sgshapiro        {
487285229Sgshapiro            /* No attached object, we are done */
488285229Sgshapiro
489285229Sgshapiro            AcpiOsPrintf ("\n");
490285229Sgshapiro            return (AE_OK);
491285229Sgshapiro        }
492285229Sgshapiro
493285229Sgshapiro        AcpiOsPrintf ("(R%d)",
494285229Sgshapiro                ObjDesc->Common.ReferenceCount);
495285229Sgshapiro
496223067Sgshapiro        switch (Type)
497285229Sgshapiro        {
498285229Sgshapiro        case ACPI_TYPE_METHOD:
499285229Sgshapiro
500285229Sgshapiro            /* Name is a Method and its AML offset/length are set */
501285229Sgshapiro
502285229Sgshapiro            AcpiOsPrintf (" M:%p-%X\n", ObjDesc->Method.AmlStart,
503285229Sgshapiro                                        ObjDesc->Method.AmlLength);
504285229Sgshapiro            break;
505285229Sgshapiro
506285229Sgshapiro        case ACPI_TYPE_INTEGER:
507285229Sgshapiro
508285229Sgshapiro            AcpiOsPrintf (" I:%8.8X8.8%X\n",
509285229Sgshapiro                    ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
510285229Sgshapiro            break;
511285229Sgshapiro
512285229Sgshapiro        case ACPI_TYPE_STRING:
513285229Sgshapiro
514285229Sgshapiro            AcpiOsPrintf (" S:%p-%X\n", ObjDesc->String.Pointer,
515285229Sgshapiro                                        ObjDesc->String.Length);
516285229Sgshapiro            break;
517285229Sgshapiro
518285229Sgshapiro        case ACPI_TYPE_BUFFER:
519285229Sgshapiro
520285229Sgshapiro            AcpiOsPrintf (" B:%p-%X\n", ObjDesc->Buffer.Pointer,
521285229Sgshapiro                                        ObjDesc->Buffer.Length);
522285229Sgshapiro            break;
523285229Sgshapiro
524285229Sgshapiro        default:
525285229Sgshapiro
526285229Sgshapiro            AcpiOsPrintf ("\n");
527285229Sgshapiro            break;
528285229Sgshapiro        }
529285229Sgshapiro        break;
530285229Sgshapiro
531285229Sgshapiro
532285229Sgshapiro    default:
533285229Sgshapiro        AcpiOsPrintf ("\n");
534285229Sgshapiro        break;
53590795Sgshapiro    }
536285229Sgshapiro
537285229Sgshapiro    /* If debug turned off, done */
538285229Sgshapiro
539285229Sgshapiro    if (!(AcpiDbgLevel & ACPI_LV_VALUES))
540285229Sgshapiro    {
541285229Sgshapiro        return (AE_OK);
542285229Sgshapiro    }
543285229Sgshapiro
544285229Sgshapiro
545285229Sgshapiro    /* If there is an attached object, display it */
546285229Sgshapiro
547285229Sgshapiro    DbgLevel     = AcpiDbgLevel;
548285229Sgshapiro    AcpiDbgLevel = 0;
549285229Sgshapiro    ObjDesc      = AcpiNsGetAttachedObject (ThisNode);
550285229Sgshapiro    AcpiDbgLevel = DbgLevel;
551285229Sgshapiro
552285229Sgshapiro    /* Dump attached objects */
553285229Sgshapiro
554285229Sgshapiro    while (ObjDesc)
555285229Sgshapiro    {
556285229Sgshapiro        ObjType = ACPI_TYPE_INVALID;
557285229Sgshapiro        AcpiOsPrintf ("        Attached Object %p: ", ObjDesc);
558285229Sgshapiro
559285229Sgshapiro        /* Decode the type of attached object and dump the contents */
560285229Sgshapiro
561285229Sgshapiro        switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc))
562285229Sgshapiro        {
563285229Sgshapiro        case ACPI_DESC_TYPE_NAMED:
564285229Sgshapiro
565285229Sgshapiro            AcpiOsPrintf ("(Ptr to Node)\n");
566285229Sgshapiro            BytesToDump = sizeof (ACPI_NAMESPACE_NODE);
567285229Sgshapiro            break;
568285229Sgshapiro
569285229Sgshapiro
570285229Sgshapiro        case ACPI_DESC_TYPE_OPERAND:
571285229Sgshapiro
572285229Sgshapiro            ObjType = ACPI_GET_OBJECT_TYPE (ObjDesc);
573285229Sgshapiro
574285229Sgshapiro            if (ObjType > ACPI_TYPE_LOCAL_MAX)
575285229Sgshapiro            {
576285229Sgshapiro                AcpiOsPrintf ("(Ptr to ACPI Object type %X [UNKNOWN])\n", ObjType);
577285229Sgshapiro                BytesToDump = 32;
578285229Sgshapiro            }
579285229Sgshapiro            else
580285229Sgshapiro            {
581285229Sgshapiro                AcpiOsPrintf ("(Ptr to ACPI Object type %s, %X)\n",
58238032Speter                                    AcpiUtGetTypeName (ObjType), ObjType);
58338032Speter                BytesToDump = sizeof (ACPI_OPERAND_OBJECT);
58438032Speter            }
58538032Speter            break;
58638032Speter
58790795Sgshapiro
58838032Speter        default:
58938032Speter
59090795Sgshapiro            AcpiOsPrintf ("(String or Buffer ptr - not an object descriptor) [%s]\n",
59138032Speter                    AcpiUtGetDescriptorName (ObjDesc));
59238032Speter            BytesToDump = 16;
59338032Speter            break;
59438032Speter        }
59538032Speter
59638032Speter        ACPI_DUMP_BUFFER (ObjDesc, BytesToDump);
59738032Speter
59838032Speter        /* If value is NOT an internal object, we are done */
59938032Speter
60064565Sgshapiro        if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
60138032Speter        {
60238032Speter            goto Cleanup;
60338032Speter        }
60464565Sgshapiro
60538032Speter        /*
60664565Sgshapiro         * Valid object, get the pointer to next level, if any
60790795Sgshapiro         */
60838032Speter        switch (ObjType)
60938032Speter        {
61090795Sgshapiro        case ACPI_TYPE_STRING:
61164565Sgshapiro            ObjDesc = (void *) ObjDesc->String.Pointer;
61264565Sgshapiro            break;
61390795Sgshapiro
61490795Sgshapiro        case ACPI_TYPE_BUFFER:
61538032Speter            ObjDesc = (void *) ObjDesc->Buffer.Pointer;
61638032Speter            break;
61738032Speter
61838032Speter        case ACPI_TYPE_BUFFER_FIELD:
61938032Speter            ObjDesc = (ACPI_OPERAND_OBJECT *) ObjDesc->BufferField.BufferObj;
62038032Speter            break;
62138032Speter
62238032Speter        case ACPI_TYPE_PACKAGE:
62364565Sgshapiro            ObjDesc = (void *) ObjDesc->Package.Elements;
62438032Speter            break;
62538032Speter
62690795Sgshapiro        case ACPI_TYPE_METHOD:
62777352Sgshapiro            ObjDesc = (void *) ObjDesc->Method.AmlStart;
628168520Sgshapiro            break;
62938032Speter
63038032Speter        case ACPI_TYPE_LOCAL_REGION_FIELD:
63138032Speter            ObjDesc = (void *) ObjDesc->Field.RegionObj;
632363466Sgshapiro            break;
63390795Sgshapiro
63438032Speter        case ACPI_TYPE_LOCAL_BANK_FIELD:
63538032Speter            ObjDesc = (void *) ObjDesc->BankField.RegionObj;
63638032Speter            break;
63738032Speter
63890795Sgshapiro        case ACPI_TYPE_LOCAL_INDEX_FIELD:
63938032Speter            ObjDesc = (void *) ObjDesc->IndexField.IndexObj;
64090795Sgshapiro            break;
64138032Speter
64238032Speter        default:
64338032Speter            goto Cleanup;
64438032Speter        }
64538032Speter
64638032Speter        ObjType = ACPI_TYPE_INVALID;   /* Terminate loop after next pass */
64738032Speter    }
64838032Speter
64938032SpeterCleanup:
65038032Speter    AcpiOsPrintf ("\n");
65138032Speter    return (AE_OK);
65264565Sgshapiro}
65338032Speter
65438032Speter
65538032Speter/*******************************************************************************
65638032Speter *
65738032Speter * FUNCTION:    AcpiNsDumpObjects
658168520Sgshapiro *
65964565Sgshapiro * PARAMETERS:  Type                - Object type to be dumped
660168520Sgshapiro *              MaxDepth            - Maximum depth of dump.  Use ACPI_UINT32_MAX
66138032Speter *                                    for an effectively unlimited depth.
66238032Speter *              OwnerId             - Dump only objects owned by this ID.  Use
66338032Speter *                                    ACPI_UINT32_MAX to match all owners.
66490795Sgshapiro *              StartHandle         - Where in namespace to start/end search
66538032Speter *
66638032Speter * DESCRIPTION: Dump typed objects within the loaded namespace.
66738032Speter *              Uses AcpiNsWalkNamespace in conjunction with AcpiNsDumpOneObject.
66838032Speter *
66938032Speter ******************************************************************************/
67038032Speter
67138032Spetervoid
672168520SgshapiroAcpiNsDumpObjects (
67338032Speter    ACPI_OBJECT_TYPE        Type,
67438032Speter    UINT8                   DisplayType,
67538032Speter    UINT32                  MaxDepth,
67638032Speter    UINT32                  OwnerId,
67790795Sgshapiro    ACPI_HANDLE             StartHandle)
67890795Sgshapiro{
67938032Speter    ACPI_WALK_INFO          Info;
68090795Sgshapiro
681168520Sgshapiro
68290795Sgshapiro    ACPI_FUNCTION_ENTRY ();
68390795Sgshapiro
68438032Speter
68538032Speter    Info.DebugLevel = ACPI_LV_TABLES;
68638032Speter    Info.OwnerId = OwnerId;
68738032Speter    Info.DisplayType = DisplayType;
68838032Speter
68938032Speter    (void) AcpiNsWalkNamespace (Type, StartHandle, MaxDepth,
69038032Speter                ACPI_NS_WALK_NO_UNLOCK, AcpiNsDumpOneObject,
69138032Speter                (void *) &Info, NULL);
69238032Speter}
69338032Speter
69438032Speter
69564565Sgshapiro/*******************************************************************************
69664565Sgshapiro *
697168520Sgshapiro * FUNCTION:    AcpiNsDumpTables
69838032Speter *
69938032Speter * PARAMETERS:  SearchBase          - Root of subtree to be dumped, or
70038032Speter *                                    NS_ALL to dump the entire namespace
70190795Sgshapiro *              MaxDepth            - Maximum depth of dump.  Use INT_MAX
70238032Speter *                                    for an effectively unlimited depth.
70338032Speter *
70438032Speter * DESCRIPTION: Dump the name space, or a portion of it.
70564565Sgshapiro *
70664565Sgshapiro ******************************************************************************/
70764565Sgshapiro
70864565Sgshapirovoid
70964565SgshapiroAcpiNsDumpTables (
71064565Sgshapiro    ACPI_HANDLE             SearchBase,
71164565Sgshapiro    UINT32                  MaxDepth)
71264565Sgshapiro{
71364565Sgshapiro    ACPI_HANDLE             SearchHandle = SearchBase;
71464565Sgshapiro
71564565Sgshapiro
71664565Sgshapiro    ACPI_FUNCTION_TRACE ("NsDumpTables");
71764565Sgshapiro
71864565Sgshapiro
71938032Speter    if (!AcpiGbl_RootNode)
72038032Speter    {
72138032Speter        /*
72290795Sgshapiro         * If the name space has not been initialized,
72390795Sgshapiro         * there is nothing to dump.
72438032Speter         */
72590795Sgshapiro        ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "namespace not initialized!\n"));
72690795Sgshapiro        return_VOID;
72738032Speter    }
72890795Sgshapiro
72990795Sgshapiro    if (ACPI_NS_ALL == SearchBase)
73090795Sgshapiro    {
73190795Sgshapiro        /*  entire namespace    */
73290795Sgshapiro
73390795Sgshapiro        SearchHandle = AcpiGbl_RootNode;
73438032Speter        ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "\\\n"));
73590795Sgshapiro    }
73690795Sgshapiro
73738032Speter    AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_OBJECTS, MaxDepth,
73838032Speter            ACPI_UINT32_MAX, SearchHandle);
73938032Speter    return_VOID;
74038032Speter}
74138032Speter
74238032Speter
74338032Speter/*******************************************************************************
74438032Speter *
74590795Sgshapiro * FUNCTION:    AcpiNsDumpEntry
74690795Sgshapiro *
74738032Speter * PARAMETERS:  Handle              - Node to be dumped
74838032Speter *              DebugLevel          - Output level
74938032Speter *
75090795Sgshapiro * DESCRIPTION: Dump a single Node
75138032Speter *
752168520Sgshapiro ******************************************************************************/
75364565Sgshapiro
75490795Sgshapirovoid
75590795SgshapiroAcpiNsDumpEntry (
75690795Sgshapiro    ACPI_HANDLE             Handle,
75738032Speter    UINT32                  DebugLevel)
758363466Sgshapiro{
75990795Sgshapiro    ACPI_WALK_INFO          Info;
76038032Speter
76138032Speter
76238032Speter    ACPI_FUNCTION_ENTRY ();
76338032Speter
76438032Speter
76538032Speter    Info.DebugLevel = DebugLevel;
76638032Speter    Info.OwnerId = ACPI_UINT32_MAX;
76738032Speter    Info.DisplayType = ACPI_DISPLAY_SUMMARY;
76838032Speter
76938032Speter    (void) AcpiNsDumpOneObject (Handle, 1, &Info, NULL);
77038032Speter}
77138032Speter
77264565Sgshapiro#endif
77338032Speter
77438032Speter