Home | History | Annotate | Line # | Download | only in utilities
utdecode.c revision 1.3.2.2
      1  1.3.2.2  rmind /******************************************************************************
      2  1.3.2.2  rmind  *
      3  1.3.2.2  rmind  * Module Name: utdecode - Utility decoding routines (value-to-string)
      4  1.3.2.2  rmind  *
      5  1.3.2.2  rmind  *****************************************************************************/
      6  1.3.2.2  rmind 
      7  1.3.2.2  rmind /*
      8  1.3.2.2  rmind  * Copyright (C) 2000 - 2011, Intel Corp.
      9  1.3.2.2  rmind  * All rights reserved.
     10  1.3.2.2  rmind  *
     11  1.3.2.2  rmind  * Redistribution and use in source and binary forms, with or without
     12  1.3.2.2  rmind  * modification, are permitted provided that the following conditions
     13  1.3.2.2  rmind  * are met:
     14  1.3.2.2  rmind  * 1. Redistributions of source code must retain the above copyright
     15  1.3.2.2  rmind  *    notice, this list of conditions, and the following disclaimer,
     16  1.3.2.2  rmind  *    without modification.
     17  1.3.2.2  rmind  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     18  1.3.2.2  rmind  *    substantially similar to the "NO WARRANTY" disclaimer below
     19  1.3.2.2  rmind  *    ("Disclaimer") and any redistribution must be conditioned upon
     20  1.3.2.2  rmind  *    including a substantially similar Disclaimer requirement for further
     21  1.3.2.2  rmind  *    binary redistribution.
     22  1.3.2.2  rmind  * 3. Neither the names of the above-listed copyright holders nor the names
     23  1.3.2.2  rmind  *    of any contributors may be used to endorse or promote products derived
     24  1.3.2.2  rmind  *    from this software without specific prior written permission.
     25  1.3.2.2  rmind  *
     26  1.3.2.2  rmind  * Alternatively, this software may be distributed under the terms of the
     27  1.3.2.2  rmind  * GNU General Public License ("GPL") version 2 as published by the Free
     28  1.3.2.2  rmind  * Software Foundation.
     29  1.3.2.2  rmind  *
     30  1.3.2.2  rmind  * NO WARRANTY
     31  1.3.2.2  rmind  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     32  1.3.2.2  rmind  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     33  1.3.2.2  rmind  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     34  1.3.2.2  rmind  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     35  1.3.2.2  rmind  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     36  1.3.2.2  rmind  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     37  1.3.2.2  rmind  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     38  1.3.2.2  rmind  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     39  1.3.2.2  rmind  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     40  1.3.2.2  rmind  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     41  1.3.2.2  rmind  * POSSIBILITY OF SUCH DAMAGES.
     42  1.3.2.2  rmind  */
     43  1.3.2.2  rmind 
     44  1.3.2.2  rmind #define __UTDECODE_C__
     45  1.3.2.2  rmind 
     46  1.3.2.2  rmind #include "acpi.h"
     47  1.3.2.2  rmind #include "accommon.h"
     48  1.3.2.2  rmind #include "acnamesp.h"
     49  1.3.2.2  rmind 
     50  1.3.2.2  rmind #define _COMPONENT          ACPI_UTILITIES
     51  1.3.2.2  rmind         ACPI_MODULE_NAME    ("utdecode")
     52  1.3.2.2  rmind 
     53  1.3.2.2  rmind 
     54  1.3.2.2  rmind /*******************************************************************************
     55  1.3.2.2  rmind  *
     56  1.3.2.2  rmind  * FUNCTION:    AcpiFormatException
     57  1.3.2.2  rmind  *
     58  1.3.2.2  rmind  * PARAMETERS:  Status       - The ACPI_STATUS code to be formatted
     59  1.3.2.2  rmind  *
     60  1.3.2.2  rmind  * RETURN:      A string containing the exception text. A valid pointer is
     61  1.3.2.2  rmind  *              always returned.
     62  1.3.2.2  rmind  *
     63  1.3.2.2  rmind  * DESCRIPTION: This function translates an ACPI exception into an ASCII string
     64  1.3.2.2  rmind  *              It is here instead of utxface.c so it is always present.
     65  1.3.2.2  rmind  *
     66  1.3.2.2  rmind  ******************************************************************************/
     67  1.3.2.2  rmind 
     68  1.3.2.2  rmind const char *
     69  1.3.2.2  rmind AcpiFormatException (
     70  1.3.2.2  rmind     ACPI_STATUS             Status)
     71  1.3.2.2  rmind {
     72  1.3.2.2  rmind     const char              *Exception = NULL;
     73  1.3.2.2  rmind 
     74  1.3.2.2  rmind 
     75  1.3.2.2  rmind     ACPI_FUNCTION_ENTRY ();
     76  1.3.2.2  rmind 
     77  1.3.2.2  rmind 
     78  1.3.2.2  rmind     Exception = AcpiUtValidateException (Status);
     79  1.3.2.2  rmind     if (!Exception)
     80  1.3.2.2  rmind     {
     81  1.3.2.2  rmind         /* Exception code was not recognized */
     82  1.3.2.2  rmind 
     83  1.3.2.2  rmind         ACPI_ERROR ((AE_INFO,
     84  1.3.2.2  rmind             "Unknown exception code: 0x%8.8X", Status));
     85  1.3.2.2  rmind 
     86  1.3.2.2  rmind         Exception = "UNKNOWN_STATUS_CODE";
     87  1.3.2.2  rmind     }
     88  1.3.2.2  rmind 
     89  1.3.2.2  rmind     return (ACPI_CAST_PTR (const char, Exception));
     90  1.3.2.2  rmind }
     91  1.3.2.2  rmind 
     92  1.3.2.2  rmind ACPI_EXPORT_SYMBOL (AcpiFormatException)
     93  1.3.2.2  rmind 
     94  1.3.2.2  rmind 
     95  1.3.2.2  rmind /*
     96  1.3.2.2  rmind  * Properties of the ACPI Object Types, both internal and external.
     97  1.3.2.2  rmind  * The table is indexed by values of ACPI_OBJECT_TYPE
     98  1.3.2.2  rmind  */
     99  1.3.2.2  rmind const UINT8                     AcpiGbl_NsProperties[ACPI_NUM_NS_TYPES] =
    100  1.3.2.2  rmind {
    101  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 00 Any              */
    102  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 01 Number           */
    103  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 02 String           */
    104  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 03 Buffer           */
    105  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 04 Package          */
    106  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 05 FieldUnit        */
    107  1.3.2.2  rmind     ACPI_NS_NEWSCOPE,                   /* 06 Device           */
    108  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 07 Event            */
    109  1.3.2.2  rmind     ACPI_NS_NEWSCOPE,                   /* 08 Method           */
    110  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 09 Mutex            */
    111  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 10 Region           */
    112  1.3.2.2  rmind     ACPI_NS_NEWSCOPE,                   /* 11 Power            */
    113  1.3.2.2  rmind     ACPI_NS_NEWSCOPE,                   /* 12 Processor        */
    114  1.3.2.2  rmind     ACPI_NS_NEWSCOPE,                   /* 13 Thermal          */
    115  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 14 BufferField      */
    116  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 15 DdbHandle        */
    117  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 16 Debug Object     */
    118  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 17 DefField         */
    119  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 18 BankField        */
    120  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 19 IndexField       */
    121  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 20 Reference        */
    122  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 21 Alias            */
    123  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 22 MethodAlias      */
    124  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 23 Notify           */
    125  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 24 Address Handler  */
    126  1.3.2.2  rmind     ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,   /* 25 Resource Desc    */
    127  1.3.2.2  rmind     ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,   /* 26 Resource Field   */
    128  1.3.2.2  rmind     ACPI_NS_NEWSCOPE,                   /* 27 Scope            */
    129  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 28 Extra            */
    130  1.3.2.2  rmind     ACPI_NS_NORMAL,                     /* 29 Data             */
    131  1.3.2.2  rmind     ACPI_NS_NORMAL                      /* 30 Invalid          */
    132  1.3.2.2  rmind };
    133  1.3.2.2  rmind 
    134  1.3.2.2  rmind 
    135  1.3.2.2  rmind /*******************************************************************************
    136  1.3.2.2  rmind  *
    137  1.3.2.2  rmind  * FUNCTION:    AcpiUtHexToAsciiChar
    138  1.3.2.2  rmind  *
    139  1.3.2.2  rmind  * PARAMETERS:  Integer             - Contains the hex digit
    140  1.3.2.2  rmind  *              Position            - bit position of the digit within the
    141  1.3.2.2  rmind  *                                    integer (multiple of 4)
    142  1.3.2.2  rmind  *
    143  1.3.2.2  rmind  * RETURN:      The converted Ascii character
    144  1.3.2.2  rmind  *
    145  1.3.2.2  rmind  * DESCRIPTION: Convert a hex digit to an Ascii character
    146  1.3.2.2  rmind  *
    147  1.3.2.2  rmind  ******************************************************************************/
    148  1.3.2.2  rmind 
    149  1.3.2.2  rmind /* Hex to ASCII conversion table */
    150  1.3.2.2  rmind 
    151  1.3.2.2  rmind static const char           AcpiGbl_HexToAscii[] =
    152  1.3.2.2  rmind {
    153  1.3.2.2  rmind     '0','1','2','3','4','5','6','7',
    154  1.3.2.2  rmind     '8','9','A','B','C','D','E','F'
    155  1.3.2.2  rmind };
    156  1.3.2.2  rmind 
    157  1.3.2.2  rmind char
    158  1.3.2.2  rmind AcpiUtHexToAsciiChar (
    159  1.3.2.2  rmind     UINT64                  Integer,
    160  1.3.2.2  rmind     UINT32                  Position)
    161  1.3.2.2  rmind {
    162  1.3.2.2  rmind 
    163  1.3.2.2  rmind     return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]);
    164  1.3.2.2  rmind }
    165  1.3.2.2  rmind 
    166  1.3.2.2  rmind 
    167  1.3.2.2  rmind /*******************************************************************************
    168  1.3.2.2  rmind  *
    169  1.3.2.2  rmind  * FUNCTION:    AcpiUtGetRegionName
    170  1.3.2.2  rmind  *
    171  1.3.2.2  rmind  * PARAMETERS:  Space ID            - ID for the region
    172  1.3.2.2  rmind  *
    173  1.3.2.2  rmind  * RETURN:      Decoded region SpaceId name
    174  1.3.2.2  rmind  *
    175  1.3.2.2  rmind  * DESCRIPTION: Translate a Space ID into a name string (Debug only)
    176  1.3.2.2  rmind  *
    177  1.3.2.2  rmind  ******************************************************************************/
    178  1.3.2.2  rmind 
    179  1.3.2.2  rmind /* Region type decoding */
    180  1.3.2.2  rmind 
    181  1.3.2.2  rmind const char        *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] =
    182  1.3.2.2  rmind {
    183  1.3.2.2  rmind     "SystemMemory",
    184  1.3.2.2  rmind     "SystemIO",
    185  1.3.2.2  rmind     "PCI_Config",
    186  1.3.2.2  rmind     "EmbeddedControl",
    187  1.3.2.2  rmind     "SMBus",
    188  1.3.2.2  rmind     "SystemCMOS",
    189  1.3.2.2  rmind     "PCIBARTarget",
    190  1.3.2.2  rmind     "IPMI",
    191  1.3.2.2  rmind     "DataTable"
    192  1.3.2.2  rmind };
    193  1.3.2.2  rmind 
    194  1.3.2.2  rmind 
    195  1.3.2.2  rmind const char *
    196  1.3.2.2  rmind AcpiUtGetRegionName (
    197  1.3.2.2  rmind     UINT8                   SpaceId)
    198  1.3.2.2  rmind {
    199  1.3.2.2  rmind 
    200  1.3.2.2  rmind     if (SpaceId >= ACPI_USER_REGION_BEGIN)
    201  1.3.2.2  rmind     {
    202  1.3.2.2  rmind         return ("UserDefinedRegion");
    203  1.3.2.2  rmind     }
    204  1.3.2.2  rmind     else if (SpaceId == ACPI_ADR_SPACE_FIXED_HARDWARE)
    205  1.3.2.2  rmind     {
    206  1.3.2.2  rmind         return ("FunctionalFixedHW");
    207  1.3.2.2  rmind     }
    208  1.3.2.2  rmind     else if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS)
    209  1.3.2.2  rmind     {
    210  1.3.2.2  rmind         return ("InvalidSpaceId");
    211  1.3.2.2  rmind     }
    212  1.3.2.2  rmind 
    213  1.3.2.2  rmind     return (ACPI_CAST_PTR (char, AcpiGbl_RegionTypes[SpaceId]));
    214  1.3.2.2  rmind }
    215  1.3.2.2  rmind 
    216  1.3.2.2  rmind 
    217  1.3.2.2  rmind /*******************************************************************************
    218  1.3.2.2  rmind  *
    219  1.3.2.2  rmind  * FUNCTION:    AcpiUtGetEventName
    220  1.3.2.2  rmind  *
    221  1.3.2.2  rmind  * PARAMETERS:  EventId             - Fixed event ID
    222  1.3.2.2  rmind  *
    223  1.3.2.2  rmind  * RETURN:      Decoded event ID name
    224  1.3.2.2  rmind  *
    225  1.3.2.2  rmind  * DESCRIPTION: Translate a Event ID into a name string (Debug only)
    226  1.3.2.2  rmind  *
    227  1.3.2.2  rmind  ******************************************************************************/
    228  1.3.2.2  rmind 
    229  1.3.2.2  rmind /* Event type decoding */
    230  1.3.2.2  rmind 
    231  1.3.2.2  rmind static const char        *AcpiGbl_EventTypes[ACPI_NUM_FIXED_EVENTS] =
    232  1.3.2.2  rmind {
    233  1.3.2.2  rmind     "PM_Timer",
    234  1.3.2.2  rmind     "GlobalLock",
    235  1.3.2.2  rmind     "PowerButton",
    236  1.3.2.2  rmind     "SleepButton",
    237  1.3.2.2  rmind     "RealTimeClock",
    238  1.3.2.2  rmind };
    239  1.3.2.2  rmind 
    240  1.3.2.2  rmind 
    241  1.3.2.2  rmind const char *
    242  1.3.2.2  rmind AcpiUtGetEventName (
    243  1.3.2.2  rmind     UINT32                  EventId)
    244  1.3.2.2  rmind {
    245  1.3.2.2  rmind 
    246  1.3.2.2  rmind     if (EventId > ACPI_EVENT_MAX)
    247  1.3.2.2  rmind     {
    248  1.3.2.2  rmind         return ("InvalidEventID");
    249  1.3.2.2  rmind     }
    250  1.3.2.2  rmind 
    251  1.3.2.2  rmind     return (ACPI_CAST_PTR (char, AcpiGbl_EventTypes[EventId]));
    252  1.3.2.2  rmind }
    253  1.3.2.2  rmind 
    254  1.3.2.2  rmind 
    255  1.3.2.2  rmind /*******************************************************************************
    256  1.3.2.2  rmind  *
    257  1.3.2.2  rmind  * FUNCTION:    AcpiUtGetTypeName
    258  1.3.2.2  rmind  *
    259  1.3.2.2  rmind  * PARAMETERS:  Type                - An ACPI object type
    260  1.3.2.2  rmind  *
    261  1.3.2.2  rmind  * RETURN:      Decoded ACPI object type name
    262  1.3.2.2  rmind  *
    263  1.3.2.2  rmind  * DESCRIPTION: Translate a Type ID into a name string (Debug only)
    264  1.3.2.2  rmind  *
    265  1.3.2.2  rmind  ******************************************************************************/
    266  1.3.2.2  rmind 
    267  1.3.2.2  rmind /*
    268  1.3.2.2  rmind  * Elements of AcpiGbl_NsTypeNames below must match
    269  1.3.2.2  rmind  * one-to-one with values of ACPI_OBJECT_TYPE
    270  1.3.2.2  rmind  *
    271  1.3.2.2  rmind  * The type ACPI_TYPE_ANY (Untyped) is used as a "don't care" when searching;
    272  1.3.2.2  rmind  * when stored in a table it really means that we have thus far seen no
    273  1.3.2.2  rmind  * evidence to indicate what type is actually going to be stored for this entry.
    274  1.3.2.2  rmind  */
    275  1.3.2.2  rmind static const char           AcpiGbl_BadType[] = "UNDEFINED";
    276  1.3.2.2  rmind 
    277  1.3.2.2  rmind /* Printable names of the ACPI object types */
    278  1.3.2.2  rmind 
    279  1.3.2.2  rmind static const char           *AcpiGbl_NsTypeNames[] =
    280  1.3.2.2  rmind {
    281  1.3.2.2  rmind     /* 00 */ "Untyped",
    282  1.3.2.2  rmind     /* 01 */ "Integer",
    283  1.3.2.2  rmind     /* 02 */ "String",
    284  1.3.2.2  rmind     /* 03 */ "Buffer",
    285  1.3.2.2  rmind     /* 04 */ "Package",
    286  1.3.2.2  rmind     /* 05 */ "FieldUnit",
    287  1.3.2.2  rmind     /* 06 */ "Device",
    288  1.3.2.2  rmind     /* 07 */ "Event",
    289  1.3.2.2  rmind     /* 08 */ "Method",
    290  1.3.2.2  rmind     /* 09 */ "Mutex",
    291  1.3.2.2  rmind     /* 10 */ "Region",
    292  1.3.2.2  rmind     /* 11 */ "Power",
    293  1.3.2.2  rmind     /* 12 */ "Processor",
    294  1.3.2.2  rmind     /* 13 */ "Thermal",
    295  1.3.2.2  rmind     /* 14 */ "BufferField",
    296  1.3.2.2  rmind     /* 15 */ "DdbHandle",
    297  1.3.2.2  rmind     /* 16 */ "DebugObject",
    298  1.3.2.2  rmind     /* 17 */ "RegionField",
    299  1.3.2.2  rmind     /* 18 */ "BankField",
    300  1.3.2.2  rmind     /* 19 */ "IndexField",
    301  1.3.2.2  rmind     /* 20 */ "Reference",
    302  1.3.2.2  rmind     /* 21 */ "Alias",
    303  1.3.2.2  rmind     /* 22 */ "MethodAlias",
    304  1.3.2.2  rmind     /* 23 */ "Notify",
    305  1.3.2.2  rmind     /* 24 */ "AddrHandler",
    306  1.3.2.2  rmind     /* 25 */ "ResourceDesc",
    307  1.3.2.2  rmind     /* 26 */ "ResourceFld",
    308  1.3.2.2  rmind     /* 27 */ "Scope",
    309  1.3.2.2  rmind     /* 28 */ "Extra",
    310  1.3.2.2  rmind     /* 29 */ "Data",
    311  1.3.2.2  rmind     /* 30 */ "Invalid"
    312  1.3.2.2  rmind };
    313  1.3.2.2  rmind 
    314  1.3.2.2  rmind 
    315  1.3.2.2  rmind char *
    316  1.3.2.2  rmind AcpiUtGetTypeName (
    317  1.3.2.2  rmind     ACPI_OBJECT_TYPE        Type)
    318  1.3.2.2  rmind {
    319  1.3.2.2  rmind 
    320  1.3.2.2  rmind     if (Type > ACPI_TYPE_INVALID)
    321  1.3.2.2  rmind     {
    322  1.3.2.2  rmind         return (ACPI_CAST_PTR (char, AcpiGbl_BadType));
    323  1.3.2.2  rmind     }
    324  1.3.2.2  rmind 
    325  1.3.2.2  rmind     return (ACPI_CAST_PTR (char, AcpiGbl_NsTypeNames[Type]));
    326  1.3.2.2  rmind }
    327  1.3.2.2  rmind 
    328  1.3.2.2  rmind 
    329  1.3.2.2  rmind const char *
    330  1.3.2.2  rmind AcpiUtGetObjectTypeName (
    331  1.3.2.2  rmind     ACPI_OPERAND_OBJECT     *ObjDesc)
    332  1.3.2.2  rmind {
    333  1.3.2.2  rmind 
    334  1.3.2.2  rmind     if (!ObjDesc)
    335  1.3.2.2  rmind     {
    336  1.3.2.2  rmind         return ("[NULL Object Descriptor]");
    337  1.3.2.2  rmind     }
    338  1.3.2.2  rmind 
    339  1.3.2.2  rmind     return (AcpiUtGetTypeName (ObjDesc->Common.Type));
    340  1.3.2.2  rmind }
    341  1.3.2.2  rmind 
    342  1.3.2.2  rmind 
    343  1.3.2.2  rmind /*******************************************************************************
    344  1.3.2.2  rmind  *
    345  1.3.2.2  rmind  * FUNCTION:    AcpiUtGetNodeName
    346  1.3.2.2  rmind  *
    347  1.3.2.2  rmind  * PARAMETERS:  Object               - A namespace node
    348  1.3.2.2  rmind  *
    349  1.3.2.2  rmind  * RETURN:      ASCII name of the node
    350  1.3.2.2  rmind  *
    351  1.3.2.2  rmind  * DESCRIPTION: Validate the node and return the node's ACPI name.
    352  1.3.2.2  rmind  *
    353  1.3.2.2  rmind  ******************************************************************************/
    354  1.3.2.2  rmind 
    355  1.3.2.2  rmind const char *
    356  1.3.2.2  rmind AcpiUtGetNodeName (
    357  1.3.2.2  rmind     void                    *Object)
    358  1.3.2.2  rmind {
    359  1.3.2.2  rmind     ACPI_NAMESPACE_NODE     *Node = (ACPI_NAMESPACE_NODE *) Object;
    360  1.3.2.2  rmind 
    361  1.3.2.2  rmind 
    362  1.3.2.2  rmind     /* Must return a string of exactly 4 characters == ACPI_NAME_SIZE */
    363  1.3.2.2  rmind 
    364  1.3.2.2  rmind     if (!Object)
    365  1.3.2.2  rmind     {
    366  1.3.2.2  rmind         return ("NULL");
    367  1.3.2.2  rmind     }
    368  1.3.2.2  rmind 
    369  1.3.2.2  rmind     /* Check for Root node */
    370  1.3.2.2  rmind 
    371  1.3.2.2  rmind     if ((Object == ACPI_ROOT_OBJECT) ||
    372  1.3.2.2  rmind         (Object == AcpiGbl_RootNode))
    373  1.3.2.2  rmind     {
    374  1.3.2.2  rmind         return ("\"\\\" ");
    375  1.3.2.2  rmind     }
    376  1.3.2.2  rmind 
    377  1.3.2.2  rmind     /* Descriptor must be a namespace node */
    378  1.3.2.2  rmind 
    379  1.3.2.2  rmind     if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED)
    380  1.3.2.2  rmind     {
    381  1.3.2.2  rmind         return ("####");
    382  1.3.2.2  rmind     }
    383  1.3.2.2  rmind 
    384  1.3.2.2  rmind     /*
    385  1.3.2.2  rmind      * Ensure name is valid. The name was validated/repaired when the node
    386  1.3.2.2  rmind      * was created, but make sure it has not been corrupted.
    387  1.3.2.2  rmind      */
    388  1.3.2.2  rmind     AcpiUtRepairName (Node->Name.Ascii);
    389  1.3.2.2  rmind 
    390  1.3.2.2  rmind     /* Return the name */
    391  1.3.2.2  rmind 
    392  1.3.2.2  rmind     return (Node->Name.Ascii);
    393  1.3.2.2  rmind }
    394  1.3.2.2  rmind 
    395  1.3.2.2  rmind 
    396  1.3.2.2  rmind /*******************************************************************************
    397  1.3.2.2  rmind  *
    398  1.3.2.2  rmind  * FUNCTION:    AcpiUtGetDescriptorName
    399  1.3.2.2  rmind  *
    400  1.3.2.2  rmind  * PARAMETERS:  Object               - An ACPI object
    401  1.3.2.2  rmind  *
    402  1.3.2.2  rmind  * RETURN:      Decoded name of the descriptor type
    403  1.3.2.2  rmind  *
    404  1.3.2.2  rmind  * DESCRIPTION: Validate object and return the descriptor type
    405  1.3.2.2  rmind  *
    406  1.3.2.2  rmind  ******************************************************************************/
    407  1.3.2.2  rmind 
    408  1.3.2.2  rmind /* Printable names of object descriptor types */
    409  1.3.2.2  rmind 
    410  1.3.2.2  rmind static const char           *AcpiGbl_DescTypeNames[] =
    411  1.3.2.2  rmind {
    412  1.3.2.2  rmind     /* 00 */ "Not a Descriptor",
    413  1.3.2.2  rmind     /* 01 */ "Cached",
    414  1.3.2.2  rmind     /* 02 */ "State-Generic",
    415  1.3.2.2  rmind     /* 03 */ "State-Update",
    416  1.3.2.2  rmind     /* 04 */ "State-Package",
    417  1.3.2.2  rmind     /* 05 */ "State-Control",
    418  1.3.2.2  rmind     /* 06 */ "State-RootParseScope",
    419  1.3.2.2  rmind     /* 07 */ "State-ParseScope",
    420  1.3.2.2  rmind     /* 08 */ "State-WalkScope",
    421  1.3.2.2  rmind     /* 09 */ "State-Result",
    422  1.3.2.2  rmind     /* 10 */ "State-Notify",
    423  1.3.2.2  rmind     /* 11 */ "State-Thread",
    424  1.3.2.2  rmind     /* 12 */ "Walk",
    425  1.3.2.2  rmind     /* 13 */ "Parser",
    426  1.3.2.2  rmind     /* 14 */ "Operand",
    427  1.3.2.2  rmind     /* 15 */ "Node"
    428  1.3.2.2  rmind };
    429  1.3.2.2  rmind 
    430  1.3.2.2  rmind 
    431  1.3.2.2  rmind const char *
    432  1.3.2.2  rmind AcpiUtGetDescriptorName (
    433  1.3.2.2  rmind     void                    *Object)
    434  1.3.2.2  rmind {
    435  1.3.2.2  rmind 
    436  1.3.2.2  rmind     if (!Object)
    437  1.3.2.2  rmind     {
    438  1.3.2.2  rmind         return ("NULL OBJECT");
    439  1.3.2.2  rmind     }
    440  1.3.2.2  rmind 
    441  1.3.2.2  rmind     if (ACPI_GET_DESCRIPTOR_TYPE (Object) > ACPI_DESC_TYPE_MAX)
    442  1.3.2.2  rmind     {
    443  1.3.2.2  rmind         return ("Not a Descriptor");
    444  1.3.2.2  rmind     }
    445  1.3.2.2  rmind 
    446  1.3.2.2  rmind     return (ACPI_CAST_PTR (char,
    447  1.3.2.2  rmind         AcpiGbl_DescTypeNames[ACPI_GET_DESCRIPTOR_TYPE (Object)]));
    448  1.3.2.2  rmind 
    449  1.3.2.2  rmind }
    450  1.3.2.2  rmind 
    451  1.3.2.2  rmind 
    452  1.3.2.2  rmind /*******************************************************************************
    453  1.3.2.2  rmind  *
    454  1.3.2.2  rmind  * FUNCTION:    AcpiUtGetReferenceName
    455  1.3.2.2  rmind  *
    456  1.3.2.2  rmind  * PARAMETERS:  Object               - An ACPI reference object
    457  1.3.2.2  rmind  *
    458  1.3.2.2  rmind  * RETURN:      Decoded name of the type of reference
    459  1.3.2.2  rmind  *
    460  1.3.2.2  rmind  * DESCRIPTION: Decode a reference object sub-type to a string.
    461  1.3.2.2  rmind  *
    462  1.3.2.2  rmind  ******************************************************************************/
    463  1.3.2.2  rmind 
    464  1.3.2.2  rmind /* Printable names of reference object sub-types */
    465  1.3.2.2  rmind 
    466  1.3.2.2  rmind static const char           *AcpiGbl_RefClassNames[] =
    467  1.3.2.2  rmind {
    468  1.3.2.2  rmind     /* 00 */ "Local",
    469  1.3.2.2  rmind     /* 01 */ "Argument",
    470  1.3.2.2  rmind     /* 02 */ "RefOf",
    471  1.3.2.2  rmind     /* 03 */ "Index",
    472  1.3.2.2  rmind     /* 04 */ "DdbHandle",
    473  1.3.2.2  rmind     /* 05 */ "Named Object",
    474  1.3.2.2  rmind     /* 06 */ "Debug"
    475  1.3.2.2  rmind };
    476  1.3.2.2  rmind 
    477  1.3.2.2  rmind const char *
    478  1.3.2.2  rmind AcpiUtGetReferenceName (
    479  1.3.2.2  rmind     ACPI_OPERAND_OBJECT     *Object)
    480  1.3.2.2  rmind {
    481  1.3.2.2  rmind 
    482  1.3.2.2  rmind     if (!Object)
    483  1.3.2.2  rmind     {
    484  1.3.2.2  rmind         return ("NULL Object");
    485  1.3.2.2  rmind     }
    486  1.3.2.2  rmind 
    487  1.3.2.2  rmind     if (ACPI_GET_DESCRIPTOR_TYPE (Object) != ACPI_DESC_TYPE_OPERAND)
    488  1.3.2.2  rmind     {
    489  1.3.2.2  rmind         return ("Not an Operand object");
    490  1.3.2.2  rmind     }
    491  1.3.2.2  rmind 
    492  1.3.2.2  rmind     if (Object->Common.Type != ACPI_TYPE_LOCAL_REFERENCE)
    493  1.3.2.2  rmind     {
    494  1.3.2.2  rmind         return ("Not a Reference object");
    495  1.3.2.2  rmind     }
    496  1.3.2.2  rmind 
    497  1.3.2.2  rmind     if (Object->Reference.Class > ACPI_REFCLASS_MAX)
    498  1.3.2.2  rmind     {
    499  1.3.2.2  rmind         return ("Unknown Reference class");
    500  1.3.2.2  rmind     }
    501  1.3.2.2  rmind 
    502  1.3.2.2  rmind     return (AcpiGbl_RefClassNames[Object->Reference.Class]);
    503  1.3.2.2  rmind }
    504  1.3.2.2  rmind 
    505  1.3.2.2  rmind 
    506  1.3.2.2  rmind #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
    507  1.3.2.2  rmind /*
    508  1.3.2.2  rmind  * Strings and procedures used for debug only
    509  1.3.2.2  rmind  */
    510  1.3.2.2  rmind 
    511  1.3.2.2  rmind /*******************************************************************************
    512  1.3.2.2  rmind  *
    513  1.3.2.2  rmind  * FUNCTION:    AcpiUtGetMutexName
    514  1.3.2.2  rmind  *
    515  1.3.2.2  rmind  * PARAMETERS:  MutexId         - The predefined ID for this mutex.
    516  1.3.2.2  rmind  *
    517  1.3.2.2  rmind  * RETURN:      Decoded name of the internal mutex
    518  1.3.2.2  rmind  *
    519  1.3.2.2  rmind  * DESCRIPTION: Translate a mutex ID into a name string (Debug only)
    520  1.3.2.2  rmind  *
    521  1.3.2.2  rmind  ******************************************************************************/
    522  1.3.2.2  rmind 
    523  1.3.2.2  rmind /* Names for internal mutex objects, used for debug output */
    524  1.3.2.2  rmind 
    525  1.3.2.2  rmind static const char              *AcpiGbl_MutexNames[ACPI_NUM_MUTEX] =
    526  1.3.2.2  rmind {
    527  1.3.2.2  rmind     "ACPI_MTX_Interpreter",
    528  1.3.2.2  rmind     "ACPI_MTX_Namespace",
    529  1.3.2.2  rmind     "ACPI_MTX_Tables",
    530  1.3.2.2  rmind     "ACPI_MTX_Events",
    531  1.3.2.2  rmind     "ACPI_MTX_Caches",
    532  1.3.2.2  rmind     "ACPI_MTX_Memory",
    533  1.3.2.2  rmind     "ACPI_MTX_CommandComplete",
    534  1.3.2.2  rmind     "ACPI_MTX_CommandReady"
    535  1.3.2.2  rmind };
    536  1.3.2.2  rmind 
    537  1.3.2.2  rmind const char *
    538  1.3.2.2  rmind AcpiUtGetMutexName (
    539  1.3.2.2  rmind     UINT32                  MutexId)
    540  1.3.2.2  rmind {
    541  1.3.2.2  rmind 
    542  1.3.2.2  rmind     if (MutexId > ACPI_MAX_MUTEX)
    543  1.3.2.2  rmind     {
    544  1.3.2.2  rmind         return ("Invalid Mutex ID");
    545  1.3.2.2  rmind     }
    546  1.3.2.2  rmind 
    547  1.3.2.2  rmind     return (AcpiGbl_MutexNames[MutexId]);
    548  1.3.2.2  rmind }
    549  1.3.2.2  rmind 
    550  1.3.2.2  rmind 
    551  1.3.2.2  rmind /*******************************************************************************
    552  1.3.2.2  rmind  *
    553  1.3.2.2  rmind  * FUNCTION:    AcpiUtGetNotifyName
    554  1.3.2.2  rmind  *
    555  1.3.2.2  rmind  * PARAMETERS:  NotifyValue     - Value from the Notify() request
    556  1.3.2.2  rmind  *
    557  1.3.2.2  rmind  * RETURN:      Decoded name for the notify value
    558  1.3.2.2  rmind  *
    559  1.3.2.2  rmind  * DESCRIPTION: Translate a Notify Value to a notify namestring.
    560  1.3.2.2  rmind  *
    561  1.3.2.2  rmind  ******************************************************************************/
    562  1.3.2.2  rmind 
    563  1.3.2.2  rmind /* Names for Notify() values, used for debug output */
    564  1.3.2.2  rmind 
    565  1.3.2.2  rmind static const char           *AcpiGbl_NotifyValueNames[] =
    566  1.3.2.2  rmind {
    567  1.3.2.2  rmind     "Bus Check",
    568  1.3.2.2  rmind     "Device Check",
    569  1.3.2.2  rmind     "Device Wake",
    570  1.3.2.2  rmind     "Eject Request",
    571  1.3.2.2  rmind     "Device Check Light",
    572  1.3.2.2  rmind     "Frequency Mismatch",
    573  1.3.2.2  rmind     "Bus Mode Mismatch",
    574  1.3.2.2  rmind     "Power Fault",
    575  1.3.2.2  rmind     "Capabilities Check",
    576  1.3.2.2  rmind     "Device PLD Check",
    577  1.3.2.2  rmind     "Reserved",
    578  1.3.2.2  rmind     "System Locality Update"
    579  1.3.2.2  rmind };
    580  1.3.2.2  rmind 
    581  1.3.2.2  rmind const char *
    582  1.3.2.2  rmind AcpiUtGetNotifyName (
    583  1.3.2.2  rmind     UINT32                  NotifyValue)
    584  1.3.2.2  rmind {
    585  1.3.2.2  rmind 
    586  1.3.2.2  rmind     if (NotifyValue <= ACPI_NOTIFY_MAX)
    587  1.3.2.2  rmind     {
    588  1.3.2.2  rmind         return (AcpiGbl_NotifyValueNames[NotifyValue]);
    589  1.3.2.2  rmind     }
    590  1.3.2.2  rmind     else if (NotifyValue <= ACPI_MAX_SYS_NOTIFY)
    591  1.3.2.2  rmind     {
    592  1.3.2.2  rmind         return ("Reserved");
    593  1.3.2.2  rmind     }
    594  1.3.2.2  rmind     else /* Greater or equal to 0x80 */
    595  1.3.2.2  rmind     {
    596  1.3.2.2  rmind         return ("**Device Specific**");
    597  1.3.2.2  rmind     }
    598  1.3.2.2  rmind }
    599  1.3.2.2  rmind #endif
    600  1.3.2.2  rmind 
    601  1.3.2.2  rmind 
    602  1.3.2.2  rmind /*******************************************************************************
    603  1.3.2.2  rmind  *
    604  1.3.2.2  rmind  * FUNCTION:    AcpiUtValidObjectType
    605  1.3.2.2  rmind  *
    606  1.3.2.2  rmind  * PARAMETERS:  Type            - Object type to be validated
    607  1.3.2.2  rmind  *
    608  1.3.2.2  rmind  * RETURN:      TRUE if valid object type, FALSE otherwise
    609  1.3.2.2  rmind  *
    610  1.3.2.2  rmind  * DESCRIPTION: Validate an object type
    611  1.3.2.2  rmind  *
    612  1.3.2.2  rmind  ******************************************************************************/
    613  1.3.2.2  rmind 
    614  1.3.2.2  rmind BOOLEAN
    615  1.3.2.2  rmind AcpiUtValidObjectType (
    616  1.3.2.2  rmind     ACPI_OBJECT_TYPE        Type)
    617  1.3.2.2  rmind {
    618  1.3.2.2  rmind 
    619  1.3.2.2  rmind     if (Type > ACPI_TYPE_LOCAL_MAX)
    620  1.3.2.2  rmind     {
    621  1.3.2.2  rmind         /* Note: Assumes all TYPEs are contiguous (external/local) */
    622  1.3.2.2  rmind 
    623  1.3.2.2  rmind         return (FALSE);
    624  1.3.2.2  rmind     }
    625  1.3.2.2  rmind 
    626  1.3.2.2  rmind     return (TRUE);
    627  1.3.2.2  rmind }
    628