Subversion Repositories Kolibri OS

Rev

Rev 1498 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1498 serge 1
/*******************************************************************************
2
 *
3
 * Module Name: dbstats - Generation and display of ACPI table statistics
4
 *
5
 ******************************************************************************/
6
 
7
/******************************************************************************
8
 *
9
 * 1. Copyright Notice
10
 *
2216 Serge 11
 * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
1498 serge 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
 
117
#include "acpi.h"
118
#include "accommon.h"
119
#include "acdebug.h"
120
#include "acnamesp.h"
121
 
122
#ifdef ACPI_DEBUGGER
123
 
124
#define _COMPONENT          ACPI_CA_DEBUGGER
125
        ACPI_MODULE_NAME    ("dbstats")
126
 
127
/* Local prototypes */
128
 
129
static void
130
AcpiDbCountNamespaceObjects (
131
    void);
132
 
133
static void
134
AcpiDbEnumerateObject (
135
    ACPI_OPERAND_OBJECT     *ObjDesc);
136
 
137
static ACPI_STATUS
138
AcpiDbClassifyOneObject (
139
    ACPI_HANDLE             ObjHandle,
140
    UINT32                  NestingLevel,
141
    void                    *Context,
142
    void                    **ReturnValue);
143
 
144
#if defined ACPI_DBG_TRACK_ALLOCATIONS || defined ACPI_USE_LOCAL_CACHE
145
static void
146
AcpiDbListInfo (
147
    ACPI_MEMORY_LIST        *List);
148
#endif
149
 
150
 
151
/*
152
 * Statistics subcommands
153
 */
154
static ARGUMENT_INFO        AcpiDbStatTypes [] =
155
{
156
    {"ALLOCATIONS"},
157
    {"OBJECTS"},
158
    {"MEMORY"},
159
    {"MISC"},
160
    {"TABLES"},
161
    {"SIZES"},
162
    {"STACK"},
163
    {NULL}           /* Must be null terminated */
164
};
165
 
166
#define CMD_STAT_ALLOCATIONS     0
167
#define CMD_STAT_OBJECTS         1
168
#define CMD_STAT_MEMORY          2
169
#define CMD_STAT_MISC            3
170
#define CMD_STAT_TABLES          4
171
#define CMD_STAT_SIZES           5
172
#define CMD_STAT_STACK           6
173
 
174
 
175
#if defined ACPI_DBG_TRACK_ALLOCATIONS || defined ACPI_USE_LOCAL_CACHE
176
/*******************************************************************************
177
 *
178
 * FUNCTION:    AcpiDbListInfo
179
 *
180
 * PARAMETERS:  List            - Memory list/cache to be displayed
181
 *
182
 * RETURN:      None
183
 *
184
 * DESCRIPTION: Display information about the input memory list or cache.
185
 *
186
 ******************************************************************************/
187
 
188
static void
189
AcpiDbListInfo (
190
    ACPI_MEMORY_LIST        *List)
191
{
192
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
193
    UINT32                  Outstanding;
194
#endif
195
 
196
    AcpiOsPrintf ("\n%s\n", List->ListName);
197
 
198
    /* MaxDepth > 0 indicates a cache object */
199
 
200
    if (List->MaxDepth > 0)
201
    {
202
        AcpiOsPrintf (
203
            "    Cache: [Depth    MaxD Avail  Size]                %8.2X %8.2X %8.2X %8.2X\n",
204
            List->CurrentDepth,
205
            List->MaxDepth,
206
            List->MaxDepth - List->CurrentDepth,
207
            (List->CurrentDepth * List->ObjectSize));
208
    }
209
 
210
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
211
    if (List->MaxDepth > 0)
212
    {
213
        AcpiOsPrintf (
214
            "    Cache: [Requests Hits Misses ObjSize]             %8.2X %8.2X %8.2X %8.2X\n",
215
            List->Requests,
216
            List->Hits,
217
            List->Requests - List->Hits,
218
            List->ObjectSize);
219
    }
220
 
221
    Outstanding = AcpiDbGetCacheInfo (List);
222
 
223
    if (List->ObjectSize)
224
    {
225
        AcpiOsPrintf (
226
            "    Mem:   [Alloc    Free Max    CurSize Outstanding] %8.2X %8.2X %8.2X %8.2X %8.2X\n",
227
            List->TotalAllocated,
228
            List->TotalFreed,
229
            List->MaxOccupied,
230
            Outstanding * List->ObjectSize,
231
            Outstanding);
232
    }
233
    else
234
    {
235
        AcpiOsPrintf (
236
            "    Mem:   [Alloc Free Max CurSize Outstanding Total] %8.2X %8.2X %8.2X %8.2X %8.2X %8.2X\n",
237
            List->TotalAllocated,
238
            List->TotalFreed,
239
            List->MaxOccupied,
240
            List->CurrentTotalSize,
241
            Outstanding,
242
            List->TotalSize);
243
    }
244
#endif
245
}
246
#endif
247
 
248
 
249
/*******************************************************************************
250
 *
251
 * FUNCTION:    AcpiDbEnumerateObject
252
 *
253
 * PARAMETERS:  ObjDesc             - Object to be counted
254
 *
255
 * RETURN:      None
256
 *
257
 * DESCRIPTION: Add this object to the global counts, by object type.
258
 *              Limited recursion handles subobjects and packages, and this
259
 *              is probably acceptable within the AML debugger only.
260
 *
261
 ******************************************************************************/
262
 
263
static void
264
AcpiDbEnumerateObject (
265
    ACPI_OPERAND_OBJECT     *ObjDesc)
266
{
267
    UINT32                  i;
268
 
269
 
270
    if (!ObjDesc)
271
    {
272
        return;
273
    }
274
 
275
    /* Enumerate this object first */
276
 
277
    AcpiGbl_NumObjects++;
278
 
279
    if (ObjDesc->Common.Type > ACPI_TYPE_NS_NODE_MAX)
280
    {
281
        AcpiGbl_ObjTypeCountMisc++;
282
    }
283
    else
284
    {
285
        AcpiGbl_ObjTypeCount [ObjDesc->Common.Type]++;
286
    }
287
 
288
    /* Count the sub-objects */
289
 
290
    switch (ObjDesc->Common.Type)
291
    {
292
    case ACPI_TYPE_PACKAGE:
293
 
294
        for (i = 0; i < ObjDesc->Package.Count; i++)
295
        {
296
            AcpiDbEnumerateObject (ObjDesc->Package.Elements[i]);
297
        }
298
        break;
299
 
300
    case ACPI_TYPE_DEVICE:
301
 
302
        AcpiDbEnumerateObject (ObjDesc->Device.SystemNotify);
303
        AcpiDbEnumerateObject (ObjDesc->Device.DeviceNotify);
304
        AcpiDbEnumerateObject (ObjDesc->Device.Handler);
305
        break;
306
 
307
    case ACPI_TYPE_BUFFER_FIELD:
308
 
309
        if (AcpiNsGetSecondaryObject (ObjDesc))
310
        {
311
            AcpiGbl_ObjTypeCount [ACPI_TYPE_BUFFER_FIELD]++;
312
        }
313
        break;
314
 
315
    case ACPI_TYPE_REGION:
316
 
317
        AcpiGbl_ObjTypeCount [ACPI_TYPE_LOCAL_REGION_FIELD ]++;
318
        AcpiDbEnumerateObject (ObjDesc->Region.Handler);
319
        break;
320
 
321
    case ACPI_TYPE_POWER:
322
 
323
        AcpiDbEnumerateObject (ObjDesc->PowerResource.SystemNotify);
324
        AcpiDbEnumerateObject (ObjDesc->PowerResource.DeviceNotify);
325
        break;
326
 
327
    case ACPI_TYPE_PROCESSOR:
328
 
329
        AcpiDbEnumerateObject (ObjDesc->Processor.SystemNotify);
330
        AcpiDbEnumerateObject (ObjDesc->Processor.DeviceNotify);
331
        AcpiDbEnumerateObject (ObjDesc->Processor.Handler);
332
        break;
333
 
334
    case ACPI_TYPE_THERMAL:
335
 
336
        AcpiDbEnumerateObject (ObjDesc->ThermalZone.SystemNotify);
337
        AcpiDbEnumerateObject (ObjDesc->ThermalZone.DeviceNotify);
338
        AcpiDbEnumerateObject (ObjDesc->ThermalZone.Handler);
339
        break;
340
 
341
    default:
342
        break;
343
    }
344
}
345
 
346
 
347
/*******************************************************************************
348
 *
349
 * FUNCTION:    AcpiDbClassifyOneObject
350
 *
351
 * PARAMETERS:  Callback for WalkNamespace
352
 *
353
 * RETURN:      Status
354
 *
355
 * DESCRIPTION: Enumerate both the object descriptor (including subobjects) and
356
 *              the parent namespace node.
357
 *
358
 ******************************************************************************/
359
 
360
static ACPI_STATUS
361
AcpiDbClassifyOneObject (
362
    ACPI_HANDLE             ObjHandle,
363
    UINT32                  NestingLevel,
364
    void                    *Context,
365
    void                    **ReturnValue)
366
{
367
    ACPI_NAMESPACE_NODE     *Node;
368
    ACPI_OPERAND_OBJECT     *ObjDesc;
369
    UINT32                  Type;
370
 
371
 
372
    AcpiGbl_NumNodes++;
373
 
374
    Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
375
    ObjDesc = AcpiNsGetAttachedObject (Node);
376
 
377
    AcpiDbEnumerateObject (ObjDesc);
378
 
379
    Type = Node->Type;
380
    if (Type > ACPI_TYPE_NS_NODE_MAX)
381
    {
382
        AcpiGbl_NodeTypeCountMisc++;
383
    }
384
    else
385
    {
386
        AcpiGbl_NodeTypeCount [Type]++;
387
    }
388
 
389
    return AE_OK;
390
 
391
 
392
#ifdef ACPI_FUTURE_IMPLEMENTATION
393
 
394
    /* TBD: These need to be counted during the initial parsing phase */
395
 
396
    if (AcpiPsIsNamedOp (Op->Opcode))
397
    {
398
        NumNodes++;
399
    }
400
 
401
    if (IsMethod)
402
    {
403
        NumMethodElements++;
404
    }
405
 
406
    NumGrammarElements++;
407
    Op = AcpiPsGetDepthNext (Root, Op);
408
 
409
    SizeOfParseTree   = (NumGrammarElements - NumMethodElements) *
410
                            (UINT32) sizeof (ACPI_PARSE_OBJECT);
411
    SizeOfMethodTrees = NumMethodElements * (UINT32) sizeof (ACPI_PARSE_OBJECT);
412
    SizeOfNodeEntries = NumNodes * (UINT32) sizeof (ACPI_NAMESPACE_NODE);
413
    SizeOfAcpiObjects = NumNodes * (UINT32) sizeof (ACPI_OPERAND_OBJECT);
414
#endif
415
}
416
 
417
 
418
/*******************************************************************************
419
 *
420
 * FUNCTION:    AcpiDbCountNamespaceObjects
421
 *
422
 * PARAMETERS:  None
423
 *
424
 * RETURN:      None
425
 *
426
 * DESCRIPTION: Count and classify the entire namespace, including all
427
 *              namespace nodes and attached objects.
428
 *
429
 ******************************************************************************/
430
 
431
static void
432
AcpiDbCountNamespaceObjects (
433
    void)
434
{
435
    UINT32                  i;
436
 
437
 
438
    AcpiGbl_NumNodes = 0;
439
    AcpiGbl_NumObjects = 0;
440
 
441
    AcpiGbl_ObjTypeCountMisc = 0;
442
    for (i = 0; i < (ACPI_TYPE_NS_NODE_MAX -1); i++)
443
    {
444
        AcpiGbl_ObjTypeCount [i] = 0;
445
        AcpiGbl_NodeTypeCount [i] = 0;
446
    }
447
 
448
    (void) AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
449
                ACPI_UINT32_MAX, FALSE, AcpiDbClassifyOneObject, NULL, NULL, NULL);
450
}
451
 
452
 
453
/*******************************************************************************
454
 *
455
 * FUNCTION:    AcpiDbDisplayStatistics
456
 *
457
 * PARAMETERS:  TypeArg         - Subcommand
458
 *
459
 * RETURN:      Status
460
 *
461
 * DESCRIPTION: Display various statistics
462
 *
463
 ******************************************************************************/
464
 
465
ACPI_STATUS
466
AcpiDbDisplayStatistics (
467
    char                    *TypeArg)
468
{
469
    UINT32                  i;
470
    UINT32                  Temp;
471
 
472
 
473
    if (!TypeArg)
474
    {
475
        AcpiOsPrintf ("The following subcommands are available:\n    ALLOCATIONS, OBJECTS, MEMORY, MISC, SIZES, TABLES\n");
476
        return (AE_OK);
477
    }
478
 
479
    AcpiUtStrupr (TypeArg);
480
    Temp = AcpiDbMatchArgument (TypeArg, AcpiDbStatTypes);
481
    if (Temp == (UINT32) -1)
482
    {
483
        AcpiOsPrintf ("Invalid or unsupported argument\n");
484
        return (AE_OK);
485
    }
486
 
487
 
488
    switch (Temp)
489
    {
490
    case CMD_STAT_ALLOCATIONS:
491
 
492
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
493
        AcpiUtDumpAllocationInfo ();
494
#endif
495
        break;
496
 
497
    case CMD_STAT_TABLES:
498
 
499
        AcpiOsPrintf ("ACPI Table Information (not implemented):\n\n");
500
        break;
501
 
502
    case CMD_STAT_OBJECTS:
503
 
504
        AcpiDbCountNamespaceObjects ();
505
 
506
        AcpiOsPrintf ("\nObjects defined in the current namespace:\n\n");
507
 
508
        AcpiOsPrintf ("%16.16s %10.10s %10.10s\n",
509
            "ACPI_TYPE", "NODES", "OBJECTS");
510
 
511
        for (i = 0; i < ACPI_TYPE_NS_NODE_MAX; i++)
512
        {
513
            AcpiOsPrintf ("%16.16s % 10ld% 10ld\n", AcpiUtGetTypeName (i),
514
                AcpiGbl_NodeTypeCount [i], AcpiGbl_ObjTypeCount [i]);
515
        }
516
        AcpiOsPrintf ("%16.16s % 10ld% 10ld\n", "Misc/Unknown",
517
            AcpiGbl_NodeTypeCountMisc, AcpiGbl_ObjTypeCountMisc);
518
 
519
        AcpiOsPrintf ("%16.16s % 10ld% 10ld\n", "TOTALS:",
520
            AcpiGbl_NumNodes, AcpiGbl_NumObjects);
521
        break;
522
 
523
    case CMD_STAT_MEMORY:
524
 
525
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
526
        AcpiOsPrintf ("\n----Object Statistics (all in hex)---------\n");
527
 
528
        AcpiDbListInfo (AcpiGbl_GlobalList);
529
        AcpiDbListInfo (AcpiGbl_NsNodeList);
530
#endif
531
 
532
#ifdef ACPI_USE_LOCAL_CACHE
533
        AcpiOsPrintf ("\n----Cache Statistics (all in hex)---------\n");
534
        AcpiDbListInfo (AcpiGbl_OperandCache);
535
        AcpiDbListInfo (AcpiGbl_PsNodeCache);
536
        AcpiDbListInfo (AcpiGbl_PsNodeExtCache);
537
        AcpiDbListInfo (AcpiGbl_StateCache);
538
#endif
539
 
540
        break;
541
 
542
    case CMD_STAT_MISC:
543
 
544
        AcpiOsPrintf ("\nMiscellaneous Statistics:\n\n");
545
        AcpiOsPrintf ("Calls to AcpiPsFind:..  ........% 7ld\n",
546
            AcpiGbl_PsFindCount);
547
        AcpiOsPrintf ("Calls to AcpiNsLookup:..........% 7ld\n",
548
            AcpiGbl_NsLookupCount);
549
 
550
        AcpiOsPrintf ("\n");
551
 
552
        AcpiOsPrintf ("Mutex usage:\n\n");
553
        for (i = 0; i < ACPI_NUM_MUTEX; i++)
554
        {
555
            AcpiOsPrintf ("%-28s:       % 7ld\n",
556
                AcpiUtGetMutexName (i), AcpiGbl_MutexInfo[i].UseCount);
557
        }
558
        break;
559
 
560
 
561
    case CMD_STAT_SIZES:
562
 
563
        AcpiOsPrintf ("\nInternal object sizes:\n\n");
564
 
565
        AcpiOsPrintf ("Common           %3d\n", sizeof (ACPI_OBJECT_COMMON));
566
        AcpiOsPrintf ("Number           %3d\n", sizeof (ACPI_OBJECT_INTEGER));
567
        AcpiOsPrintf ("String           %3d\n", sizeof (ACPI_OBJECT_STRING));
568
        AcpiOsPrintf ("Buffer           %3d\n", sizeof (ACPI_OBJECT_BUFFER));
569
        AcpiOsPrintf ("Package          %3d\n", sizeof (ACPI_OBJECT_PACKAGE));
570
        AcpiOsPrintf ("BufferField      %3d\n", sizeof (ACPI_OBJECT_BUFFER_FIELD));
571
        AcpiOsPrintf ("Device           %3d\n", sizeof (ACPI_OBJECT_DEVICE));
572
        AcpiOsPrintf ("Event            %3d\n", sizeof (ACPI_OBJECT_EVENT));
573
        AcpiOsPrintf ("Method           %3d\n", sizeof (ACPI_OBJECT_METHOD));
574
        AcpiOsPrintf ("Mutex            %3d\n", sizeof (ACPI_OBJECT_MUTEX));
575
        AcpiOsPrintf ("Region           %3d\n", sizeof (ACPI_OBJECT_REGION));
576
        AcpiOsPrintf ("PowerResource    %3d\n", sizeof (ACPI_OBJECT_POWER_RESOURCE));
577
        AcpiOsPrintf ("Processor        %3d\n", sizeof (ACPI_OBJECT_PROCESSOR));
578
        AcpiOsPrintf ("ThermalZone      %3d\n", sizeof (ACPI_OBJECT_THERMAL_ZONE));
579
        AcpiOsPrintf ("RegionField      %3d\n", sizeof (ACPI_OBJECT_REGION_FIELD));
580
        AcpiOsPrintf ("BankField        %3d\n", sizeof (ACPI_OBJECT_BANK_FIELD));
581
        AcpiOsPrintf ("IndexField       %3d\n", sizeof (ACPI_OBJECT_INDEX_FIELD));
582
        AcpiOsPrintf ("Reference        %3d\n", sizeof (ACPI_OBJECT_REFERENCE));
583
        AcpiOsPrintf ("Notify           %3d\n", sizeof (ACPI_OBJECT_NOTIFY_HANDLER));
584
        AcpiOsPrintf ("AddressSpace     %3d\n", sizeof (ACPI_OBJECT_ADDR_HANDLER));
585
        AcpiOsPrintf ("Extra            %3d\n", sizeof (ACPI_OBJECT_EXTRA));
586
        AcpiOsPrintf ("Data             %3d\n", sizeof (ACPI_OBJECT_DATA));
587
 
588
        AcpiOsPrintf ("\n");
589
 
590
        AcpiOsPrintf ("ParseObject      %3d\n", sizeof (ACPI_PARSE_OBJ_COMMON));
591
        AcpiOsPrintf ("ParseObjectNamed %3d\n", sizeof (ACPI_PARSE_OBJ_NAMED));
592
        AcpiOsPrintf ("ParseObjectAsl   %3d\n", sizeof (ACPI_PARSE_OBJ_ASL));
593
        AcpiOsPrintf ("OperandObject    %3d\n", sizeof (ACPI_OPERAND_OBJECT));
594
        AcpiOsPrintf ("NamespaceNode    %3d\n", sizeof (ACPI_NAMESPACE_NODE));
595
        AcpiOsPrintf ("AcpiObject       %3d\n", sizeof (ACPI_OBJECT));
596
 
597
        break;
598
 
599
 
600
    case CMD_STAT_STACK:
601
#if defined(ACPI_DEBUG_OUTPUT)
602
 
603
        Temp = (UINT32) ACPI_PTR_DIFF (AcpiGbl_EntryStackPointer, AcpiGbl_LowestStackPointer);
604
 
605
        AcpiOsPrintf ("\nSubsystem Stack Usage:\n\n");
606
        AcpiOsPrintf ("Entry Stack Pointer          %p\n", AcpiGbl_EntryStackPointer);
607
        AcpiOsPrintf ("Lowest Stack Pointer         %p\n", AcpiGbl_LowestStackPointer);
608
        AcpiOsPrintf ("Stack Use                    %X (%u)\n", Temp, Temp);
609
        AcpiOsPrintf ("Deepest Procedure Nesting    %u\n", AcpiGbl_DeepestNesting);
610
#endif
611
        break;
612
 
613
    default:
614
        break;
615
    }
616
 
617
    AcpiOsPrintf ("\n");
618
    return (AE_OK);
619
}
620
 
621
#endif /* ACPI_DEBUGGER  */