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