Home | History | Annotate | Line # | Download | only in debugger
dbstats.c revision 1.1.1.12
      1       1.1    jruoho /*******************************************************************************
      2       1.1    jruoho  *
      3       1.1    jruoho  * Module Name: dbstats - Generation and display of ACPI table statistics
      4       1.1    jruoho  *
      5       1.1    jruoho  ******************************************************************************/
      6       1.1    jruoho 
      7   1.1.1.2    jruoho /*
      8  1.1.1.12  christos  * Copyright (C) 2000 - 2021, Intel Corp.
      9       1.1    jruoho  * All rights reserved.
     10       1.1    jruoho  *
     11   1.1.1.2    jruoho  * Redistribution and use in source and binary forms, with or without
     12   1.1.1.2    jruoho  * modification, are permitted provided that the following conditions
     13   1.1.1.2    jruoho  * are met:
     14   1.1.1.2    jruoho  * 1. Redistributions of source code must retain the above copyright
     15   1.1.1.2    jruoho  *    notice, this list of conditions, and the following disclaimer,
     16   1.1.1.2    jruoho  *    without modification.
     17   1.1.1.2    jruoho  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     18   1.1.1.2    jruoho  *    substantially similar to the "NO WARRANTY" disclaimer below
     19   1.1.1.2    jruoho  *    ("Disclaimer") and any redistribution must be conditioned upon
     20   1.1.1.2    jruoho  *    including a substantially similar Disclaimer requirement for further
     21   1.1.1.2    jruoho  *    binary redistribution.
     22   1.1.1.2    jruoho  * 3. Neither the names of the above-listed copyright holders nor the names
     23   1.1.1.2    jruoho  *    of any contributors may be used to endorse or promote products derived
     24   1.1.1.2    jruoho  *    from this software without specific prior written permission.
     25   1.1.1.2    jruoho  *
     26   1.1.1.2    jruoho  * Alternatively, this software may be distributed under the terms of the
     27   1.1.1.2    jruoho  * GNU General Public License ("GPL") version 2 as published by the Free
     28   1.1.1.2    jruoho  * Software Foundation.
     29   1.1.1.2    jruoho  *
     30   1.1.1.2    jruoho  * NO WARRANTY
     31   1.1.1.2    jruoho  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     32   1.1.1.2    jruoho  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     33  1.1.1.12  christos  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     34   1.1.1.2    jruoho  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     35   1.1.1.2    jruoho  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     36   1.1.1.2    jruoho  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     37   1.1.1.2    jruoho  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     38   1.1.1.2    jruoho  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     39   1.1.1.2    jruoho  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     40   1.1.1.2    jruoho  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     41   1.1.1.2    jruoho  * POSSIBILITY OF SUCH DAMAGES.
     42   1.1.1.2    jruoho  */
     43       1.1    jruoho 
     44       1.1    jruoho #include "acpi.h"
     45       1.1    jruoho #include "accommon.h"
     46       1.1    jruoho #include "acdebug.h"
     47       1.1    jruoho #include "acnamesp.h"
     48       1.1    jruoho 
     49       1.1    jruoho 
     50       1.1    jruoho #define _COMPONENT          ACPI_CA_DEBUGGER
     51       1.1    jruoho         ACPI_MODULE_NAME    ("dbstats")
     52       1.1    jruoho 
     53   1.1.1.6  christos 
     54       1.1    jruoho /* Local prototypes */
     55       1.1    jruoho 
     56       1.1    jruoho static void
     57       1.1    jruoho AcpiDbCountNamespaceObjects (
     58       1.1    jruoho     void);
     59       1.1    jruoho 
     60       1.1    jruoho static void
     61       1.1    jruoho AcpiDbEnumerateObject (
     62       1.1    jruoho     ACPI_OPERAND_OBJECT     *ObjDesc);
     63       1.1    jruoho 
     64       1.1    jruoho static ACPI_STATUS
     65       1.1    jruoho AcpiDbClassifyOneObject (
     66       1.1    jruoho     ACPI_HANDLE             ObjHandle,
     67       1.1    jruoho     UINT32                  NestingLevel,
     68       1.1    jruoho     void                    *Context,
     69       1.1    jruoho     void                    **ReturnValue);
     70       1.1    jruoho 
     71       1.1    jruoho #if defined ACPI_DBG_TRACK_ALLOCATIONS || defined ACPI_USE_LOCAL_CACHE
     72       1.1    jruoho static void
     73       1.1    jruoho AcpiDbListInfo (
     74       1.1    jruoho     ACPI_MEMORY_LIST        *List);
     75       1.1    jruoho #endif
     76       1.1    jruoho 
     77       1.1    jruoho 
     78       1.1    jruoho /*
     79       1.1    jruoho  * Statistics subcommands
     80       1.1    jruoho  */
     81   1.1.1.3  christos static ACPI_DB_ARGUMENT_INFO    AcpiDbStatTypes [] =
     82       1.1    jruoho {
     83       1.1    jruoho     {"ALLOCATIONS"},
     84       1.1    jruoho     {"OBJECTS"},
     85       1.1    jruoho     {"MEMORY"},
     86       1.1    jruoho     {"MISC"},
     87       1.1    jruoho     {"TABLES"},
     88       1.1    jruoho     {"SIZES"},
     89       1.1    jruoho     {"STACK"},
     90       1.1    jruoho     {NULL}           /* Must be null terminated */
     91       1.1    jruoho };
     92       1.1    jruoho 
     93       1.1    jruoho #define CMD_STAT_ALLOCATIONS     0
     94       1.1    jruoho #define CMD_STAT_OBJECTS         1
     95       1.1    jruoho #define CMD_STAT_MEMORY          2
     96       1.1    jruoho #define CMD_STAT_MISC            3
     97       1.1    jruoho #define CMD_STAT_TABLES          4
     98       1.1    jruoho #define CMD_STAT_SIZES           5
     99       1.1    jruoho #define CMD_STAT_STACK           6
    100       1.1    jruoho 
    101       1.1    jruoho 
    102       1.1    jruoho #if defined ACPI_DBG_TRACK_ALLOCATIONS || defined ACPI_USE_LOCAL_CACHE
    103       1.1    jruoho /*******************************************************************************
    104       1.1    jruoho  *
    105       1.1    jruoho  * FUNCTION:    AcpiDbListInfo
    106       1.1    jruoho  *
    107       1.1    jruoho  * PARAMETERS:  List            - Memory list/cache to be displayed
    108       1.1    jruoho  *
    109       1.1    jruoho  * RETURN:      None
    110       1.1    jruoho  *
    111       1.1    jruoho  * DESCRIPTION: Display information about the input memory list or cache.
    112       1.1    jruoho  *
    113       1.1    jruoho  ******************************************************************************/
    114       1.1    jruoho 
    115       1.1    jruoho static void
    116       1.1    jruoho AcpiDbListInfo (
    117       1.1    jruoho     ACPI_MEMORY_LIST        *List)
    118       1.1    jruoho {
    119       1.1    jruoho #ifdef ACPI_DBG_TRACK_ALLOCATIONS
    120       1.1    jruoho     UINT32                  Outstanding;
    121       1.1    jruoho #endif
    122       1.1    jruoho 
    123       1.1    jruoho     AcpiOsPrintf ("\n%s\n", List->ListName);
    124       1.1    jruoho 
    125       1.1    jruoho     /* MaxDepth > 0 indicates a cache object */
    126       1.1    jruoho 
    127       1.1    jruoho     if (List->MaxDepth > 0)
    128       1.1    jruoho     {
    129       1.1    jruoho         AcpiOsPrintf (
    130   1.1.1.6  christos             "    Cache: [Depth    MaxD Avail  Size]                "
    131   1.1.1.6  christos             "%8.2X %8.2X %8.2X %8.2X\n",
    132       1.1    jruoho             List->CurrentDepth,
    133       1.1    jruoho             List->MaxDepth,
    134       1.1    jruoho             List->MaxDepth - List->CurrentDepth,
    135       1.1    jruoho             (List->CurrentDepth * List->ObjectSize));
    136       1.1    jruoho     }
    137       1.1    jruoho 
    138       1.1    jruoho #ifdef ACPI_DBG_TRACK_ALLOCATIONS
    139       1.1    jruoho     if (List->MaxDepth > 0)
    140       1.1    jruoho     {
    141       1.1    jruoho         AcpiOsPrintf (
    142   1.1.1.6  christos             "    Cache: [Requests Hits Misses ObjSize]             "
    143   1.1.1.6  christos             "%8.2X %8.2X %8.2X %8.2X\n",
    144       1.1    jruoho             List->Requests,
    145       1.1    jruoho             List->Hits,
    146       1.1    jruoho             List->Requests - List->Hits,
    147       1.1    jruoho             List->ObjectSize);
    148       1.1    jruoho     }
    149       1.1    jruoho 
    150       1.1    jruoho     Outstanding = AcpiDbGetCacheInfo (List);
    151       1.1    jruoho 
    152       1.1    jruoho     if (List->ObjectSize)
    153       1.1    jruoho     {
    154       1.1    jruoho         AcpiOsPrintf (
    155   1.1.1.6  christos             "    Mem:   [Alloc    Free Max    CurSize Outstanding] "
    156   1.1.1.6  christos             "%8.2X %8.2X %8.2X %8.2X %8.2X\n",
    157       1.1    jruoho             List->TotalAllocated,
    158       1.1    jruoho             List->TotalFreed,
    159       1.1    jruoho             List->MaxOccupied,
    160       1.1    jruoho             Outstanding * List->ObjectSize,
    161       1.1    jruoho             Outstanding);
    162       1.1    jruoho     }
    163       1.1    jruoho     else
    164       1.1    jruoho     {
    165       1.1    jruoho         AcpiOsPrintf (
    166   1.1.1.6  christos             "    Mem:   [Alloc Free Max CurSize Outstanding Total] "
    167   1.1.1.6  christos             "%8.2X %8.2X %8.2X %8.2X %8.2X %8.2X\n",
    168       1.1    jruoho             List->TotalAllocated,
    169       1.1    jruoho             List->TotalFreed,
    170       1.1    jruoho             List->MaxOccupied,
    171       1.1    jruoho             List->CurrentTotalSize,
    172       1.1    jruoho             Outstanding,
    173       1.1    jruoho             List->TotalSize);
    174       1.1    jruoho     }
    175       1.1    jruoho #endif
    176       1.1    jruoho }
    177       1.1    jruoho #endif
    178       1.1    jruoho 
    179       1.1    jruoho 
    180       1.1    jruoho /*******************************************************************************
    181       1.1    jruoho  *
    182       1.1    jruoho  * FUNCTION:    AcpiDbEnumerateObject
    183       1.1    jruoho  *
    184       1.1    jruoho  * PARAMETERS:  ObjDesc             - Object to be counted
    185       1.1    jruoho  *
    186       1.1    jruoho  * RETURN:      None
    187       1.1    jruoho  *
    188       1.1    jruoho  * DESCRIPTION: Add this object to the global counts, by object type.
    189       1.1    jruoho  *              Limited recursion handles subobjects and packages, and this
    190       1.1    jruoho  *              is probably acceptable within the AML debugger only.
    191       1.1    jruoho  *
    192       1.1    jruoho  ******************************************************************************/
    193       1.1    jruoho 
    194       1.1    jruoho static void
    195       1.1    jruoho AcpiDbEnumerateObject (
    196       1.1    jruoho     ACPI_OPERAND_OBJECT     *ObjDesc)
    197       1.1    jruoho {
    198       1.1    jruoho     UINT32                  i;
    199       1.1    jruoho 
    200       1.1    jruoho 
    201       1.1    jruoho     if (!ObjDesc)
    202       1.1    jruoho     {
    203       1.1    jruoho         return;
    204       1.1    jruoho     }
    205       1.1    jruoho 
    206       1.1    jruoho     /* Enumerate this object first */
    207       1.1    jruoho 
    208       1.1    jruoho     AcpiGbl_NumObjects++;
    209       1.1    jruoho 
    210       1.1    jruoho     if (ObjDesc->Common.Type > ACPI_TYPE_NS_NODE_MAX)
    211       1.1    jruoho     {
    212       1.1    jruoho         AcpiGbl_ObjTypeCountMisc++;
    213       1.1    jruoho     }
    214       1.1    jruoho     else
    215       1.1    jruoho     {
    216       1.1    jruoho         AcpiGbl_ObjTypeCount [ObjDesc->Common.Type]++;
    217       1.1    jruoho     }
    218       1.1    jruoho 
    219       1.1    jruoho     /* Count the sub-objects */
    220       1.1    jruoho 
    221       1.1    jruoho     switch (ObjDesc->Common.Type)
    222       1.1    jruoho     {
    223       1.1    jruoho     case ACPI_TYPE_PACKAGE:
    224       1.1    jruoho 
    225       1.1    jruoho         for (i = 0; i < ObjDesc->Package.Count; i++)
    226       1.1    jruoho         {
    227       1.1    jruoho             AcpiDbEnumerateObject (ObjDesc->Package.Elements[i]);
    228       1.1    jruoho         }
    229       1.1    jruoho         break;
    230       1.1    jruoho 
    231       1.1    jruoho     case ACPI_TYPE_DEVICE:
    232       1.1    jruoho 
    233   1.1.1.3  christos         AcpiDbEnumerateObject (ObjDesc->Device.NotifyList[0]);
    234   1.1.1.3  christos         AcpiDbEnumerateObject (ObjDesc->Device.NotifyList[1]);
    235       1.1    jruoho         AcpiDbEnumerateObject (ObjDesc->Device.Handler);
    236       1.1    jruoho         break;
    237       1.1    jruoho 
    238       1.1    jruoho     case ACPI_TYPE_BUFFER_FIELD:
    239       1.1    jruoho 
    240       1.1    jruoho         if (AcpiNsGetSecondaryObject (ObjDesc))
    241       1.1    jruoho         {
    242       1.1    jruoho             AcpiGbl_ObjTypeCount [ACPI_TYPE_BUFFER_FIELD]++;
    243       1.1    jruoho         }
    244       1.1    jruoho         break;
    245       1.1    jruoho 
    246       1.1    jruoho     case ACPI_TYPE_REGION:
    247       1.1    jruoho 
    248       1.1    jruoho         AcpiGbl_ObjTypeCount [ACPI_TYPE_LOCAL_REGION_FIELD ]++;
    249       1.1    jruoho         AcpiDbEnumerateObject (ObjDesc->Region.Handler);
    250       1.1    jruoho         break;
    251       1.1    jruoho 
    252       1.1    jruoho     case ACPI_TYPE_POWER:
    253       1.1    jruoho 
    254   1.1.1.3  christos         AcpiDbEnumerateObject (ObjDesc->PowerResource.NotifyList[0]);
    255   1.1.1.3  christos         AcpiDbEnumerateObject (ObjDesc->PowerResource.NotifyList[1]);
    256       1.1    jruoho         break;
    257       1.1    jruoho 
    258       1.1    jruoho     case ACPI_TYPE_PROCESSOR:
    259       1.1    jruoho 
    260   1.1.1.3  christos         AcpiDbEnumerateObject (ObjDesc->Processor.NotifyList[0]);
    261   1.1.1.3  christos         AcpiDbEnumerateObject (ObjDesc->Processor.NotifyList[1]);
    262       1.1    jruoho         AcpiDbEnumerateObject (ObjDesc->Processor.Handler);
    263       1.1    jruoho         break;
    264       1.1    jruoho 
    265       1.1    jruoho     case ACPI_TYPE_THERMAL:
    266       1.1    jruoho 
    267   1.1.1.3  christos         AcpiDbEnumerateObject (ObjDesc->ThermalZone.NotifyList[0]);
    268   1.1.1.3  christos         AcpiDbEnumerateObject (ObjDesc->ThermalZone.NotifyList[1]);
    269       1.1    jruoho         AcpiDbEnumerateObject (ObjDesc->ThermalZone.Handler);
    270       1.1    jruoho         break;
    271       1.1    jruoho 
    272       1.1    jruoho     default:
    273   1.1.1.3  christos 
    274       1.1    jruoho         break;
    275       1.1    jruoho     }
    276       1.1    jruoho }
    277       1.1    jruoho 
    278       1.1    jruoho 
    279       1.1    jruoho /*******************************************************************************
    280       1.1    jruoho  *
    281       1.1    jruoho  * FUNCTION:    AcpiDbClassifyOneObject
    282       1.1    jruoho  *
    283       1.1    jruoho  * PARAMETERS:  Callback for WalkNamespace
    284       1.1    jruoho  *
    285       1.1    jruoho  * RETURN:      Status
    286       1.1    jruoho  *
    287       1.1    jruoho  * DESCRIPTION: Enumerate both the object descriptor (including subobjects) and
    288       1.1    jruoho  *              the parent namespace node.
    289       1.1    jruoho  *
    290       1.1    jruoho  ******************************************************************************/
    291       1.1    jruoho 
    292       1.1    jruoho static ACPI_STATUS
    293       1.1    jruoho AcpiDbClassifyOneObject (
    294       1.1    jruoho     ACPI_HANDLE             ObjHandle,
    295       1.1    jruoho     UINT32                  NestingLevel,
    296       1.1    jruoho     void                    *Context,
    297       1.1    jruoho     void                    **ReturnValue)
    298       1.1    jruoho {
    299       1.1    jruoho     ACPI_NAMESPACE_NODE     *Node;
    300       1.1    jruoho     ACPI_OPERAND_OBJECT     *ObjDesc;
    301       1.1    jruoho     UINT32                  Type;
    302       1.1    jruoho 
    303       1.1    jruoho 
    304       1.1    jruoho     AcpiGbl_NumNodes++;
    305       1.1    jruoho 
    306       1.1    jruoho     Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
    307       1.1    jruoho     ObjDesc = AcpiNsGetAttachedObject (Node);
    308       1.1    jruoho 
    309       1.1    jruoho     AcpiDbEnumerateObject (ObjDesc);
    310       1.1    jruoho 
    311       1.1    jruoho     Type = Node->Type;
    312       1.1    jruoho     if (Type > ACPI_TYPE_NS_NODE_MAX)
    313       1.1    jruoho     {
    314       1.1    jruoho         AcpiGbl_NodeTypeCountMisc++;
    315       1.1    jruoho     }
    316       1.1    jruoho     else
    317       1.1    jruoho     {
    318       1.1    jruoho         AcpiGbl_NodeTypeCount [Type]++;
    319       1.1    jruoho     }
    320       1.1    jruoho 
    321   1.1.1.3  christos     return (AE_OK);
    322       1.1    jruoho 
    323       1.1    jruoho 
    324       1.1    jruoho #ifdef ACPI_FUTURE_IMPLEMENTATION
    325       1.1    jruoho 
    326       1.1    jruoho     /* TBD: These need to be counted during the initial parsing phase */
    327       1.1    jruoho 
    328       1.1    jruoho     if (AcpiPsIsNamedOp (Op->Opcode))
    329       1.1    jruoho     {
    330       1.1    jruoho         NumNodes++;
    331       1.1    jruoho     }
    332       1.1    jruoho 
    333       1.1    jruoho     if (IsMethod)
    334       1.1    jruoho     {
    335       1.1    jruoho         NumMethodElements++;
    336       1.1    jruoho     }
    337       1.1    jruoho 
    338       1.1    jruoho     NumGrammarElements++;
    339       1.1    jruoho     Op = AcpiPsGetDepthNext (Root, Op);
    340       1.1    jruoho 
    341       1.1    jruoho     SizeOfParseTree   = (NumGrammarElements - NumMethodElements) *
    342   1.1.1.6  christos         (UINT32) sizeof (ACPI_PARSE_OBJECT);
    343       1.1    jruoho     SizeOfMethodTrees = NumMethodElements * (UINT32) sizeof (ACPI_PARSE_OBJECT);
    344       1.1    jruoho     SizeOfNodeEntries = NumNodes * (UINT32) sizeof (ACPI_NAMESPACE_NODE);
    345       1.1    jruoho     SizeOfAcpiObjects = NumNodes * (UINT32) sizeof (ACPI_OPERAND_OBJECT);
    346       1.1    jruoho #endif
    347       1.1    jruoho }
    348       1.1    jruoho 
    349       1.1    jruoho 
    350       1.1    jruoho /*******************************************************************************
    351       1.1    jruoho  *
    352       1.1    jruoho  * FUNCTION:    AcpiDbCountNamespaceObjects
    353       1.1    jruoho  *
    354       1.1    jruoho  * PARAMETERS:  None
    355       1.1    jruoho  *
    356       1.1    jruoho  * RETURN:      None
    357       1.1    jruoho  *
    358       1.1    jruoho  * DESCRIPTION: Count and classify the entire namespace, including all
    359       1.1    jruoho  *              namespace nodes and attached objects.
    360       1.1    jruoho  *
    361       1.1    jruoho  ******************************************************************************/
    362       1.1    jruoho 
    363       1.1    jruoho static void
    364       1.1    jruoho AcpiDbCountNamespaceObjects (
    365       1.1    jruoho     void)
    366       1.1    jruoho {
    367       1.1    jruoho     UINT32                  i;
    368       1.1    jruoho 
    369       1.1    jruoho 
    370       1.1    jruoho     AcpiGbl_NumNodes = 0;
    371       1.1    jruoho     AcpiGbl_NumObjects = 0;
    372       1.1    jruoho 
    373       1.1    jruoho     AcpiGbl_ObjTypeCountMisc = 0;
    374       1.1    jruoho     for (i = 0; i < (ACPI_TYPE_NS_NODE_MAX -1); i++)
    375       1.1    jruoho     {
    376       1.1    jruoho         AcpiGbl_ObjTypeCount [i] = 0;
    377       1.1    jruoho         AcpiGbl_NodeTypeCount [i] = 0;
    378       1.1    jruoho     }
    379       1.1    jruoho 
    380       1.1    jruoho     (void) AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
    381   1.1.1.6  christos         ACPI_UINT32_MAX, FALSE, AcpiDbClassifyOneObject, NULL, NULL, NULL);
    382       1.1    jruoho }
    383       1.1    jruoho 
    384       1.1    jruoho 
    385       1.1    jruoho /*******************************************************************************
    386       1.1    jruoho  *
    387       1.1    jruoho  * FUNCTION:    AcpiDbDisplayStatistics
    388       1.1    jruoho  *
    389       1.1    jruoho  * PARAMETERS:  TypeArg         - Subcommand
    390       1.1    jruoho  *
    391       1.1    jruoho  * RETURN:      Status
    392       1.1    jruoho  *
    393       1.1    jruoho  * DESCRIPTION: Display various statistics
    394       1.1    jruoho  *
    395       1.1    jruoho  ******************************************************************************/
    396       1.1    jruoho 
    397       1.1    jruoho ACPI_STATUS
    398       1.1    jruoho AcpiDbDisplayStatistics (
    399       1.1    jruoho     char                    *TypeArg)
    400       1.1    jruoho {
    401       1.1    jruoho     UINT32                  i;
    402       1.1    jruoho     UINT32                  Temp;
    403       1.1    jruoho 
    404       1.1    jruoho 
    405       1.1    jruoho     AcpiUtStrupr (TypeArg);
    406       1.1    jruoho     Temp = AcpiDbMatchArgument (TypeArg, AcpiDbStatTypes);
    407   1.1.1.4  christos     if (Temp == ACPI_TYPE_NOT_FOUND)
    408       1.1    jruoho     {
    409       1.1    jruoho         AcpiOsPrintf ("Invalid or unsupported argument\n");
    410       1.1    jruoho         return (AE_OK);
    411       1.1    jruoho     }
    412       1.1    jruoho 
    413       1.1    jruoho 
    414       1.1    jruoho     switch (Temp)
    415       1.1    jruoho     {
    416       1.1    jruoho     case CMD_STAT_ALLOCATIONS:
    417       1.1    jruoho 
    418       1.1    jruoho #ifdef ACPI_DBG_TRACK_ALLOCATIONS
    419       1.1    jruoho         AcpiUtDumpAllocationInfo ();
    420       1.1    jruoho #endif
    421       1.1    jruoho         break;
    422       1.1    jruoho 
    423       1.1    jruoho     case CMD_STAT_TABLES:
    424       1.1    jruoho 
    425       1.1    jruoho         AcpiOsPrintf ("ACPI Table Information (not implemented):\n\n");
    426       1.1    jruoho         break;
    427       1.1    jruoho 
    428       1.1    jruoho     case CMD_STAT_OBJECTS:
    429       1.1    jruoho 
    430       1.1    jruoho         AcpiDbCountNamespaceObjects ();
    431       1.1    jruoho 
    432       1.1    jruoho         AcpiOsPrintf ("\nObjects defined in the current namespace:\n\n");
    433       1.1    jruoho 
    434       1.1    jruoho         AcpiOsPrintf ("%16.16s %10.10s %10.10s\n",
    435       1.1    jruoho             "ACPI_TYPE", "NODES", "OBJECTS");
    436       1.1    jruoho 
    437       1.1    jruoho         for (i = 0; i < ACPI_TYPE_NS_NODE_MAX; i++)
    438       1.1    jruoho         {
    439  1.1.1.10  christos             AcpiOsPrintf ("%16.16s %10u %10u\n", AcpiUtGetTypeName (i),
    440       1.1    jruoho                 AcpiGbl_NodeTypeCount [i], AcpiGbl_ObjTypeCount [i]);
    441       1.1    jruoho         }
    442   1.1.1.6  christos 
    443  1.1.1.10  christos         AcpiOsPrintf ("%16.16s %10u %10u\n", "Misc/Unknown",
    444       1.1    jruoho             AcpiGbl_NodeTypeCountMisc, AcpiGbl_ObjTypeCountMisc);
    445       1.1    jruoho 
    446  1.1.1.10  christos         AcpiOsPrintf ("%16.16s %10u %10u\n", "TOTALS:",
    447       1.1    jruoho             AcpiGbl_NumNodes, AcpiGbl_NumObjects);
    448       1.1    jruoho         break;
    449       1.1    jruoho 
    450       1.1    jruoho     case CMD_STAT_MEMORY:
    451       1.1    jruoho 
    452       1.1    jruoho #ifdef ACPI_DBG_TRACK_ALLOCATIONS
    453       1.1    jruoho         AcpiOsPrintf ("\n----Object Statistics (all in hex)---------\n");
    454       1.1    jruoho 
    455       1.1    jruoho         AcpiDbListInfo (AcpiGbl_GlobalList);
    456       1.1    jruoho         AcpiDbListInfo (AcpiGbl_NsNodeList);
    457       1.1    jruoho #endif
    458       1.1    jruoho 
    459       1.1    jruoho #ifdef ACPI_USE_LOCAL_CACHE
    460       1.1    jruoho         AcpiOsPrintf ("\n----Cache Statistics (all in hex)---------\n");
    461       1.1    jruoho         AcpiDbListInfo (AcpiGbl_OperandCache);
    462       1.1    jruoho         AcpiDbListInfo (AcpiGbl_PsNodeCache);
    463       1.1    jruoho         AcpiDbListInfo (AcpiGbl_PsNodeExtCache);
    464       1.1    jruoho         AcpiDbListInfo (AcpiGbl_StateCache);
    465       1.1    jruoho #endif
    466       1.1    jruoho 
    467       1.1    jruoho         break;
    468       1.1    jruoho 
    469       1.1    jruoho     case CMD_STAT_MISC:
    470       1.1    jruoho 
    471       1.1    jruoho         AcpiOsPrintf ("\nMiscellaneous Statistics:\n\n");
    472  1.1.1.10  christos         AcpiOsPrintf ("%-28s:       %7u\n", "Calls to AcpiPsFind",
    473       1.1    jruoho             AcpiGbl_PsFindCount);
    474  1.1.1.10  christos         AcpiOsPrintf ("%-28s:       %7u\n", "Calls to AcpiNsLookup",
    475       1.1    jruoho             AcpiGbl_NsLookupCount);
    476       1.1    jruoho 
    477  1.1.1.10  christos         AcpiOsPrintf ("\nMutex usage:\n\n");
    478       1.1    jruoho         for (i = 0; i < ACPI_NUM_MUTEX; i++)
    479       1.1    jruoho         {
    480  1.1.1.10  christos             AcpiOsPrintf ("%-28s:       %7u\n",
    481       1.1    jruoho                 AcpiUtGetMutexName (i), AcpiGbl_MutexInfo[i].UseCount);
    482       1.1    jruoho         }
    483       1.1    jruoho         break;
    484       1.1    jruoho 
    485       1.1    jruoho     case CMD_STAT_SIZES:
    486       1.1    jruoho 
    487       1.1    jruoho         AcpiOsPrintf ("\nInternal object sizes:\n\n");
    488       1.1    jruoho 
    489  1.1.1.10  christos         AcpiOsPrintf ("Common           %3d\n", (UINT32) sizeof (ACPI_OBJECT_COMMON));
    490  1.1.1.10  christos         AcpiOsPrintf ("Number           %3d\n", (UINT32) sizeof (ACPI_OBJECT_INTEGER));
    491  1.1.1.10  christos         AcpiOsPrintf ("String           %3d\n", (UINT32) sizeof (ACPI_OBJECT_STRING));
    492  1.1.1.10  christos         AcpiOsPrintf ("Buffer           %3d\n", (UINT32) sizeof (ACPI_OBJECT_BUFFER));
    493  1.1.1.10  christos         AcpiOsPrintf ("Package          %3d\n", (UINT32) sizeof (ACPI_OBJECT_PACKAGE));
    494  1.1.1.10  christos         AcpiOsPrintf ("BufferField      %3d\n", (UINT32) sizeof (ACPI_OBJECT_BUFFER_FIELD));
    495  1.1.1.10  christos         AcpiOsPrintf ("Device           %3d\n", (UINT32) sizeof (ACPI_OBJECT_DEVICE));
    496  1.1.1.10  christos         AcpiOsPrintf ("Event            %3d\n", (UINT32) sizeof (ACPI_OBJECT_EVENT));
    497  1.1.1.10  christos         AcpiOsPrintf ("Method           %3d\n", (UINT32) sizeof (ACPI_OBJECT_METHOD));
    498  1.1.1.10  christos         AcpiOsPrintf ("Mutex            %3d\n", (UINT32) sizeof (ACPI_OBJECT_MUTEX));
    499  1.1.1.10  christos         AcpiOsPrintf ("Region           %3d\n", (UINT32) sizeof (ACPI_OBJECT_REGION));
    500  1.1.1.10  christos         AcpiOsPrintf ("PowerResource    %3d\n", (UINT32) sizeof (ACPI_OBJECT_POWER_RESOURCE));
    501  1.1.1.10  christos         AcpiOsPrintf ("Processor        %3d\n", (UINT32) sizeof (ACPI_OBJECT_PROCESSOR));
    502  1.1.1.10  christos         AcpiOsPrintf ("ThermalZone      %3d\n", (UINT32) sizeof (ACPI_OBJECT_THERMAL_ZONE));
    503  1.1.1.10  christos         AcpiOsPrintf ("RegionField      %3d\n", (UINT32) sizeof (ACPI_OBJECT_REGION_FIELD));
    504  1.1.1.10  christos         AcpiOsPrintf ("BankField        %3d\n", (UINT32) sizeof (ACPI_OBJECT_BANK_FIELD));
    505  1.1.1.10  christos         AcpiOsPrintf ("IndexField       %3d\n", (UINT32) sizeof (ACPI_OBJECT_INDEX_FIELD));
    506  1.1.1.10  christos         AcpiOsPrintf ("Reference        %3d\n", (UINT32) sizeof (ACPI_OBJECT_REFERENCE));
    507  1.1.1.10  christos         AcpiOsPrintf ("Notify           %3d\n", (UINT32) sizeof (ACPI_OBJECT_NOTIFY_HANDLER));
    508  1.1.1.10  christos         AcpiOsPrintf ("AddressSpace     %3d\n", (UINT32) sizeof (ACPI_OBJECT_ADDR_HANDLER));
    509  1.1.1.10  christos         AcpiOsPrintf ("Extra            %3d\n", (UINT32) sizeof (ACPI_OBJECT_EXTRA));
    510  1.1.1.10  christos         AcpiOsPrintf ("Data             %3d\n", (UINT32) sizeof (ACPI_OBJECT_DATA));
    511       1.1    jruoho 
    512       1.1    jruoho         AcpiOsPrintf ("\n");
    513       1.1    jruoho 
    514  1.1.1.10  christos         AcpiOsPrintf ("ParseObject      %3d\n", (UINT32) sizeof (ACPI_PARSE_OBJ_COMMON));
    515  1.1.1.10  christos         AcpiOsPrintf ("ParseObjectNamed %3d\n", (UINT32) sizeof (ACPI_PARSE_OBJ_NAMED));
    516  1.1.1.10  christos         AcpiOsPrintf ("ParseObjectAsl   %3d\n", (UINT32) sizeof (ACPI_PARSE_OBJ_ASL));
    517  1.1.1.10  christos         AcpiOsPrintf ("OperandObject    %3d\n", (UINT32) sizeof (ACPI_OPERAND_OBJECT));
    518  1.1.1.10  christos         AcpiOsPrintf ("NamespaceNode    %3d\n", (UINT32) sizeof (ACPI_NAMESPACE_NODE));
    519  1.1.1.10  christos         AcpiOsPrintf ("AcpiObject       %3d\n", (UINT32) sizeof (ACPI_OBJECT));
    520       1.1    jruoho 
    521   1.1.1.3  christos         AcpiOsPrintf ("\n");
    522       1.1    jruoho 
    523  1.1.1.10  christos         AcpiOsPrintf ("Generic State    %3d\n", (UINT32) sizeof (ACPI_GENERIC_STATE));
    524  1.1.1.10  christos         AcpiOsPrintf ("Common State     %3d\n", (UINT32) sizeof (ACPI_COMMON_STATE));
    525  1.1.1.10  christos         AcpiOsPrintf ("Control State    %3d\n", (UINT32) sizeof (ACPI_CONTROL_STATE));
    526  1.1.1.10  christos         AcpiOsPrintf ("Update State     %3d\n", (UINT32) sizeof (ACPI_UPDATE_STATE));
    527  1.1.1.10  christos         AcpiOsPrintf ("Scope State      %3d\n", (UINT32) sizeof (ACPI_SCOPE_STATE));
    528  1.1.1.10  christos         AcpiOsPrintf ("Parse Scope      %3d\n", (UINT32) sizeof (ACPI_PSCOPE_STATE));
    529  1.1.1.10  christos         AcpiOsPrintf ("Package State    %3d\n", (UINT32) sizeof (ACPI_PKG_STATE));
    530  1.1.1.10  christos         AcpiOsPrintf ("Thread State     %3d\n", (UINT32) sizeof (ACPI_THREAD_STATE));
    531  1.1.1.10  christos         AcpiOsPrintf ("Result Values    %3d\n", (UINT32) sizeof (ACPI_RESULT_VALUES));
    532  1.1.1.10  christos         AcpiOsPrintf ("Notify Info      %3d\n", (UINT32) sizeof (ACPI_NOTIFY_INFO));
    533   1.1.1.3  christos         break;
    534       1.1    jruoho 
    535       1.1    jruoho     case CMD_STAT_STACK:
    536       1.1    jruoho #if defined(ACPI_DEBUG_OUTPUT)
    537       1.1    jruoho 
    538   1.1.1.6  christos         Temp = (UINT32) ACPI_PTR_DIFF (
    539   1.1.1.6  christos             AcpiGbl_EntryStackPointer, AcpiGbl_LowestStackPointer);
    540       1.1    jruoho 
    541       1.1    jruoho         AcpiOsPrintf ("\nSubsystem Stack Usage:\n\n");
    542       1.1    jruoho         AcpiOsPrintf ("Entry Stack Pointer          %p\n", AcpiGbl_EntryStackPointer);
    543       1.1    jruoho         AcpiOsPrintf ("Lowest Stack Pointer         %p\n", AcpiGbl_LowestStackPointer);
    544       1.1    jruoho         AcpiOsPrintf ("Stack Use                    %X (%u)\n", Temp, Temp);
    545       1.1    jruoho         AcpiOsPrintf ("Deepest Procedure Nesting    %u\n", AcpiGbl_DeepestNesting);
    546       1.1    jruoho #endif
    547       1.1    jruoho         break;
    548       1.1    jruoho 
    549       1.1    jruoho     default:
    550   1.1.1.3  christos 
    551       1.1    jruoho         break;
    552       1.1    jruoho     }
    553       1.1    jruoho 
    554       1.1    jruoho     AcpiOsPrintf ("\n");
    555       1.1    jruoho     return (AE_OK);
    556       1.1    jruoho }
    557