xref: /titanic_50/usr/src/uts/intel/io/acpica/utilities/utdecode.c (revision 385cc6b4ad1792caef3f84eb61eed3f27085801f)
126f3cdf0SGordon Ross /******************************************************************************
226f3cdf0SGordon Ross  *
326f3cdf0SGordon Ross  * Module Name: utdecode - Utility decoding routines (value-to-string)
426f3cdf0SGordon Ross  *
526f3cdf0SGordon Ross  *****************************************************************************/
626f3cdf0SGordon Ross 
726f3cdf0SGordon Ross /*
8*385cc6b4SJerry Jelinek  * Copyright (C) 2000 - 2016, Intel Corp.
926f3cdf0SGordon Ross  * All rights reserved.
1026f3cdf0SGordon Ross  *
1126f3cdf0SGordon Ross  * Redistribution and use in source and binary forms, with or without
1226f3cdf0SGordon Ross  * modification, are permitted provided that the following conditions
1326f3cdf0SGordon Ross  * are met:
1426f3cdf0SGordon Ross  * 1. Redistributions of source code must retain the above copyright
1526f3cdf0SGordon Ross  *    notice, this list of conditions, and the following disclaimer,
1626f3cdf0SGordon Ross  *    without modification.
1726f3cdf0SGordon Ross  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
1826f3cdf0SGordon Ross  *    substantially similar to the "NO WARRANTY" disclaimer below
1926f3cdf0SGordon Ross  *    ("Disclaimer") and any redistribution must be conditioned upon
2026f3cdf0SGordon Ross  *    including a substantially similar Disclaimer requirement for further
2126f3cdf0SGordon Ross  *    binary redistribution.
2226f3cdf0SGordon Ross  * 3. Neither the names of the above-listed copyright holders nor the names
2326f3cdf0SGordon Ross  *    of any contributors may be used to endorse or promote products derived
2426f3cdf0SGordon Ross  *    from this software without specific prior written permission.
2526f3cdf0SGordon Ross  *
2626f3cdf0SGordon Ross  * Alternatively, this software may be distributed under the terms of the
2726f3cdf0SGordon Ross  * GNU General Public License ("GPL") version 2 as published by the Free
2826f3cdf0SGordon Ross  * Software Foundation.
2926f3cdf0SGordon Ross  *
3026f3cdf0SGordon Ross  * NO WARRANTY
3126f3cdf0SGordon Ross  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
3226f3cdf0SGordon Ross  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
3326f3cdf0SGordon Ross  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
3426f3cdf0SGordon Ross  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
3526f3cdf0SGordon Ross  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
3626f3cdf0SGordon Ross  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
3726f3cdf0SGordon Ross  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3826f3cdf0SGordon Ross  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
3926f3cdf0SGordon Ross  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
4026f3cdf0SGordon Ross  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
4126f3cdf0SGordon Ross  * POSSIBILITY OF SUCH DAMAGES.
4226f3cdf0SGordon Ross  */
4326f3cdf0SGordon Ross 
4426f3cdf0SGordon Ross #include "acpi.h"
4526f3cdf0SGordon Ross #include "accommon.h"
4626f3cdf0SGordon Ross #include "acnamesp.h"
4726f3cdf0SGordon Ross 
4826f3cdf0SGordon Ross #define _COMPONENT          ACPI_UTILITIES
4926f3cdf0SGordon Ross         ACPI_MODULE_NAME    ("utdecode")
5026f3cdf0SGordon Ross 
5126f3cdf0SGordon Ross 
5226f3cdf0SGordon Ross /*
5326f3cdf0SGordon Ross  * Properties of the ACPI Object Types, both internal and external.
5426f3cdf0SGordon Ross  * The table is indexed by values of ACPI_OBJECT_TYPE
5526f3cdf0SGordon Ross  */
5626f3cdf0SGordon Ross const UINT8                     AcpiGbl_NsProperties[ACPI_NUM_NS_TYPES] =
5726f3cdf0SGordon Ross {
5826f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 00 Any              */
5926f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 01 Number           */
6026f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 02 String           */
6126f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 03 Buffer           */
6226f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 04 Package          */
6326f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 05 FieldUnit        */
6426f3cdf0SGordon Ross     ACPI_NS_NEWSCOPE,                   /* 06 Device           */
6526f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 07 Event            */
6626f3cdf0SGordon Ross     ACPI_NS_NEWSCOPE,                   /* 08 Method           */
6726f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 09 Mutex            */
6826f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 10 Region           */
6926f3cdf0SGordon Ross     ACPI_NS_NEWSCOPE,                   /* 11 Power            */
7026f3cdf0SGordon Ross     ACPI_NS_NEWSCOPE,                   /* 12 Processor        */
7126f3cdf0SGordon Ross     ACPI_NS_NEWSCOPE,                   /* 13 Thermal          */
7226f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 14 BufferField      */
7326f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 15 DdbHandle        */
7426f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 16 Debug Object     */
7526f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 17 DefField         */
7626f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 18 BankField        */
7726f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 19 IndexField       */
7826f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 20 Reference        */
7926f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 21 Alias            */
8026f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 22 MethodAlias      */
8126f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 23 Notify           */
8226f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 24 Address Handler  */
8326f3cdf0SGordon Ross     ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,   /* 25 Resource Desc    */
8426f3cdf0SGordon Ross     ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,   /* 26 Resource Field   */
8526f3cdf0SGordon Ross     ACPI_NS_NEWSCOPE,                   /* 27 Scope            */
8626f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 28 Extra            */
8726f3cdf0SGordon Ross     ACPI_NS_NORMAL,                     /* 29 Data             */
8826f3cdf0SGordon Ross     ACPI_NS_NORMAL                      /* 30 Invalid          */
8926f3cdf0SGordon Ross };
9026f3cdf0SGordon Ross 
9126f3cdf0SGordon Ross 
9226f3cdf0SGordon Ross /*******************************************************************************
9326f3cdf0SGordon Ross  *
9426f3cdf0SGordon Ross  * FUNCTION:    AcpiUtGetRegionName
9526f3cdf0SGordon Ross  *
9626f3cdf0SGordon Ross  * PARAMETERS:  Space ID            - ID for the region
9726f3cdf0SGordon Ross  *
9826f3cdf0SGordon Ross  * RETURN:      Decoded region SpaceId name
9926f3cdf0SGordon Ross  *
10026f3cdf0SGordon Ross  * DESCRIPTION: Translate a Space ID into a name string (Debug only)
10126f3cdf0SGordon Ross  *
10226f3cdf0SGordon Ross  ******************************************************************************/
10326f3cdf0SGordon Ross 
10426f3cdf0SGordon Ross /* Region type decoding */
10526f3cdf0SGordon Ross 
10626f3cdf0SGordon Ross const char        *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] =
10726f3cdf0SGordon Ross {
108*385cc6b4SJerry Jelinek     "SystemMemory",     /* 0x00 */
109*385cc6b4SJerry Jelinek     "SystemIO",         /* 0x01 */
110*385cc6b4SJerry Jelinek     "PCI_Config",       /* 0x02 */
111*385cc6b4SJerry Jelinek     "EmbeddedControl",  /* 0x03 */
112*385cc6b4SJerry Jelinek     "SMBus",            /* 0x04 */
113*385cc6b4SJerry Jelinek     "SystemCMOS",       /* 0x05 */
114*385cc6b4SJerry Jelinek     "PCIBARTarget",     /* 0x06 */
115*385cc6b4SJerry Jelinek     "IPMI",             /* 0x07 */
116*385cc6b4SJerry Jelinek     "GeneralPurposeIo", /* 0x08 */
117*385cc6b4SJerry Jelinek     "GenericSerialBus", /* 0x09 */
118*385cc6b4SJerry Jelinek     "PCC"               /* 0x0A */
11926f3cdf0SGordon Ross };
12026f3cdf0SGordon Ross 
12126f3cdf0SGordon Ross 
122*385cc6b4SJerry Jelinek const char *
AcpiUtGetRegionName(UINT8 SpaceId)12326f3cdf0SGordon Ross AcpiUtGetRegionName (
12426f3cdf0SGordon Ross     UINT8                   SpaceId)
12526f3cdf0SGordon Ross {
12626f3cdf0SGordon Ross 
12726f3cdf0SGordon Ross     if (SpaceId >= ACPI_USER_REGION_BEGIN)
12826f3cdf0SGordon Ross     {
12926f3cdf0SGordon Ross         return ("UserDefinedRegion");
13026f3cdf0SGordon Ross     }
13126f3cdf0SGordon Ross     else if (SpaceId == ACPI_ADR_SPACE_DATA_TABLE)
13226f3cdf0SGordon Ross     {
13326f3cdf0SGordon Ross         return ("DataTable");
13426f3cdf0SGordon Ross     }
13526f3cdf0SGordon Ross     else if (SpaceId == ACPI_ADR_SPACE_FIXED_HARDWARE)
13626f3cdf0SGordon Ross     {
13726f3cdf0SGordon Ross         return ("FunctionalFixedHW");
13826f3cdf0SGordon Ross     }
13926f3cdf0SGordon Ross     else if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS)
14026f3cdf0SGordon Ross     {
14126f3cdf0SGordon Ross         return ("InvalidSpaceId");
14226f3cdf0SGordon Ross     }
14326f3cdf0SGordon Ross 
144*385cc6b4SJerry Jelinek     return (AcpiGbl_RegionTypes[SpaceId]);
14526f3cdf0SGordon Ross }
14626f3cdf0SGordon Ross 
14726f3cdf0SGordon Ross 
14826f3cdf0SGordon Ross /*******************************************************************************
14926f3cdf0SGordon Ross  *
15026f3cdf0SGordon Ross  * FUNCTION:    AcpiUtGetEventName
15126f3cdf0SGordon Ross  *
15226f3cdf0SGordon Ross  * PARAMETERS:  EventId             - Fixed event ID
15326f3cdf0SGordon Ross  *
15426f3cdf0SGordon Ross  * RETURN:      Decoded event ID name
15526f3cdf0SGordon Ross  *
15626f3cdf0SGordon Ross  * DESCRIPTION: Translate a Event ID into a name string (Debug only)
15726f3cdf0SGordon Ross  *
15826f3cdf0SGordon Ross  ******************************************************************************/
15926f3cdf0SGordon Ross 
16026f3cdf0SGordon Ross /* Event type decoding */
16126f3cdf0SGordon Ross 
16226f3cdf0SGordon Ross static const char        *AcpiGbl_EventTypes[ACPI_NUM_FIXED_EVENTS] =
16326f3cdf0SGordon Ross {
16426f3cdf0SGordon Ross     "PM_Timer",
16526f3cdf0SGordon Ross     "GlobalLock",
16626f3cdf0SGordon Ross     "PowerButton",
16726f3cdf0SGordon Ross     "SleepButton",
16826f3cdf0SGordon Ross     "RealTimeClock",
16926f3cdf0SGordon Ross };
17026f3cdf0SGordon Ross 
17126f3cdf0SGordon Ross 
172*385cc6b4SJerry Jelinek const char *
AcpiUtGetEventName(UINT32 EventId)17326f3cdf0SGordon Ross AcpiUtGetEventName (
17426f3cdf0SGordon Ross     UINT32                  EventId)
17526f3cdf0SGordon Ross {
17626f3cdf0SGordon Ross 
17726f3cdf0SGordon Ross     if (EventId > ACPI_EVENT_MAX)
17826f3cdf0SGordon Ross     {
17926f3cdf0SGordon Ross         return ("InvalidEventID");
18026f3cdf0SGordon Ross     }
18126f3cdf0SGordon Ross 
182*385cc6b4SJerry Jelinek     return (AcpiGbl_EventTypes[EventId]);
18326f3cdf0SGordon Ross }
18426f3cdf0SGordon Ross 
18526f3cdf0SGordon Ross 
18626f3cdf0SGordon Ross /*******************************************************************************
18726f3cdf0SGordon Ross  *
18826f3cdf0SGordon Ross  * FUNCTION:    AcpiUtGetTypeName
18926f3cdf0SGordon Ross  *
19026f3cdf0SGordon Ross  * PARAMETERS:  Type                - An ACPI object type
19126f3cdf0SGordon Ross  *
19226f3cdf0SGordon Ross  * RETURN:      Decoded ACPI object type name
19326f3cdf0SGordon Ross  *
19426f3cdf0SGordon Ross  * DESCRIPTION: Translate a Type ID into a name string (Debug only)
19526f3cdf0SGordon Ross  *
19626f3cdf0SGordon Ross  ******************************************************************************/
19726f3cdf0SGordon Ross 
19826f3cdf0SGordon Ross /*
19926f3cdf0SGordon Ross  * Elements of AcpiGbl_NsTypeNames below must match
20026f3cdf0SGordon Ross  * one-to-one with values of ACPI_OBJECT_TYPE
20126f3cdf0SGordon Ross  *
20226f3cdf0SGordon Ross  * The type ACPI_TYPE_ANY (Untyped) is used as a "don't care" when searching;
20326f3cdf0SGordon Ross  * when stored in a table it really means that we have thus far seen no
204*385cc6b4SJerry Jelinek  * evidence to indicate what type is actually going to be stored for this
205*385cc6b4SJerry Jelinek  & entry.
20626f3cdf0SGordon Ross  */
20726f3cdf0SGordon Ross static const char           AcpiGbl_BadType[] = "UNDEFINED";
20826f3cdf0SGordon Ross 
20926f3cdf0SGordon Ross /* Printable names of the ACPI object types */
21026f3cdf0SGordon Ross 
21126f3cdf0SGordon Ross static const char           *AcpiGbl_NsTypeNames[] =
21226f3cdf0SGordon Ross {
21326f3cdf0SGordon Ross     /* 00 */ "Untyped",
21426f3cdf0SGordon Ross     /* 01 */ "Integer",
21526f3cdf0SGordon Ross     /* 02 */ "String",
21626f3cdf0SGordon Ross     /* 03 */ "Buffer",
21726f3cdf0SGordon Ross     /* 04 */ "Package",
21826f3cdf0SGordon Ross     /* 05 */ "FieldUnit",
21926f3cdf0SGordon Ross     /* 06 */ "Device",
22026f3cdf0SGordon Ross     /* 07 */ "Event",
22126f3cdf0SGordon Ross     /* 08 */ "Method",
22226f3cdf0SGordon Ross     /* 09 */ "Mutex",
22326f3cdf0SGordon Ross     /* 10 */ "Region",
22426f3cdf0SGordon Ross     /* 11 */ "Power",
22526f3cdf0SGordon Ross     /* 12 */ "Processor",
22626f3cdf0SGordon Ross     /* 13 */ "Thermal",
22726f3cdf0SGordon Ross     /* 14 */ "BufferField",
22826f3cdf0SGordon Ross     /* 15 */ "DdbHandle",
22926f3cdf0SGordon Ross     /* 16 */ "DebugObject",
23026f3cdf0SGordon Ross     /* 17 */ "RegionField",
23126f3cdf0SGordon Ross     /* 18 */ "BankField",
23226f3cdf0SGordon Ross     /* 19 */ "IndexField",
23326f3cdf0SGordon Ross     /* 20 */ "Reference",
23426f3cdf0SGordon Ross     /* 21 */ "Alias",
23526f3cdf0SGordon Ross     /* 22 */ "MethodAlias",
23626f3cdf0SGordon Ross     /* 23 */ "Notify",
23726f3cdf0SGordon Ross     /* 24 */ "AddrHandler",
23826f3cdf0SGordon Ross     /* 25 */ "ResourceDesc",
23926f3cdf0SGordon Ross     /* 26 */ "ResourceFld",
24026f3cdf0SGordon Ross     /* 27 */ "Scope",
24126f3cdf0SGordon Ross     /* 28 */ "Extra",
24226f3cdf0SGordon Ross     /* 29 */ "Data",
24326f3cdf0SGordon Ross     /* 30 */ "Invalid"
24426f3cdf0SGordon Ross };
24526f3cdf0SGordon Ross 
24626f3cdf0SGordon Ross 
247*385cc6b4SJerry Jelinek const char *
AcpiUtGetTypeName(ACPI_OBJECT_TYPE Type)24826f3cdf0SGordon Ross AcpiUtGetTypeName (
24926f3cdf0SGordon Ross     ACPI_OBJECT_TYPE        Type)
25026f3cdf0SGordon Ross {
25126f3cdf0SGordon Ross 
25226f3cdf0SGordon Ross     if (Type > ACPI_TYPE_INVALID)
25326f3cdf0SGordon Ross     {
254*385cc6b4SJerry Jelinek         return (AcpiGbl_BadType);
25526f3cdf0SGordon Ross     }
25626f3cdf0SGordon Ross 
257*385cc6b4SJerry Jelinek     return (AcpiGbl_NsTypeNames[Type]);
25826f3cdf0SGordon Ross }
25926f3cdf0SGordon Ross 
26026f3cdf0SGordon Ross 
261*385cc6b4SJerry Jelinek const char *
AcpiUtGetObjectTypeName(ACPI_OPERAND_OBJECT * ObjDesc)26226f3cdf0SGordon Ross AcpiUtGetObjectTypeName (
26326f3cdf0SGordon Ross     ACPI_OPERAND_OBJECT     *ObjDesc)
26426f3cdf0SGordon Ross {
265*385cc6b4SJerry Jelinek     ACPI_FUNCTION_TRACE (UtGetObjectTypeName);
266*385cc6b4SJerry Jelinek 
26726f3cdf0SGordon Ross 
26826f3cdf0SGordon Ross     if (!ObjDesc)
26926f3cdf0SGordon Ross     {
270*385cc6b4SJerry Jelinek         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n"));
271*385cc6b4SJerry Jelinek         return_PTR ("[NULL Object Descriptor]");
27226f3cdf0SGordon Ross     }
27326f3cdf0SGordon Ross 
274*385cc6b4SJerry Jelinek     /* These descriptor types share a common area */
275*385cc6b4SJerry Jelinek 
276*385cc6b4SJerry Jelinek     if ((ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) &&
277*385cc6b4SJerry Jelinek         (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_NAMED))
278*385cc6b4SJerry Jelinek     {
279*385cc6b4SJerry Jelinek         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
280*385cc6b4SJerry Jelinek             "Invalid object descriptor type: 0x%2.2X [%s] (%p)\n",
281*385cc6b4SJerry Jelinek             ACPI_GET_DESCRIPTOR_TYPE (ObjDesc),
282*385cc6b4SJerry Jelinek             AcpiUtGetDescriptorName (ObjDesc), ObjDesc));
283*385cc6b4SJerry Jelinek 
284*385cc6b4SJerry Jelinek         return_PTR ("Invalid object");
285*385cc6b4SJerry Jelinek     }
286*385cc6b4SJerry Jelinek 
287*385cc6b4SJerry Jelinek     return_STR (AcpiUtGetTypeName (ObjDesc->Common.Type));
28826f3cdf0SGordon Ross }
28926f3cdf0SGordon Ross 
29026f3cdf0SGordon Ross 
29126f3cdf0SGordon Ross /*******************************************************************************
29226f3cdf0SGordon Ross  *
29326f3cdf0SGordon Ross  * FUNCTION:    AcpiUtGetNodeName
29426f3cdf0SGordon Ross  *
29526f3cdf0SGordon Ross  * PARAMETERS:  Object               - A namespace node
29626f3cdf0SGordon Ross  *
29726f3cdf0SGordon Ross  * RETURN:      ASCII name of the node
29826f3cdf0SGordon Ross  *
29926f3cdf0SGordon Ross  * DESCRIPTION: Validate the node and return the node's ACPI name.
30026f3cdf0SGordon Ross  *
30126f3cdf0SGordon Ross  ******************************************************************************/
30226f3cdf0SGordon Ross 
303*385cc6b4SJerry Jelinek const char *
AcpiUtGetNodeName(void * Object)30426f3cdf0SGordon Ross AcpiUtGetNodeName (
30526f3cdf0SGordon Ross     void                    *Object)
30626f3cdf0SGordon Ross {
30726f3cdf0SGordon Ross     ACPI_NAMESPACE_NODE     *Node = (ACPI_NAMESPACE_NODE *) Object;
30826f3cdf0SGordon Ross 
30926f3cdf0SGordon Ross 
31026f3cdf0SGordon Ross     /* Must return a string of exactly 4 characters == ACPI_NAME_SIZE */
31126f3cdf0SGordon Ross 
31226f3cdf0SGordon Ross     if (!Object)
31326f3cdf0SGordon Ross     {
31426f3cdf0SGordon Ross         return ("NULL");
31526f3cdf0SGordon Ross     }
31626f3cdf0SGordon Ross 
31726f3cdf0SGordon Ross     /* Check for Root node */
31826f3cdf0SGordon Ross 
31926f3cdf0SGordon Ross     if ((Object == ACPI_ROOT_OBJECT) ||
32026f3cdf0SGordon Ross         (Object == AcpiGbl_RootNode))
32126f3cdf0SGordon Ross     {
32226f3cdf0SGordon Ross         return ("\"\\\" ");
32326f3cdf0SGordon Ross     }
32426f3cdf0SGordon Ross 
32526f3cdf0SGordon Ross     /* Descriptor must be a namespace node */
32626f3cdf0SGordon Ross 
32726f3cdf0SGordon Ross     if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED)
32826f3cdf0SGordon Ross     {
32926f3cdf0SGordon Ross         return ("####");
33026f3cdf0SGordon Ross     }
33126f3cdf0SGordon Ross 
33226f3cdf0SGordon Ross     /*
33326f3cdf0SGordon Ross      * Ensure name is valid. The name was validated/repaired when the node
33426f3cdf0SGordon Ross      * was created, but make sure it has not been corrupted.
33526f3cdf0SGordon Ross      */
33626f3cdf0SGordon Ross     AcpiUtRepairName (Node->Name.Ascii);
33726f3cdf0SGordon Ross 
33826f3cdf0SGordon Ross     /* Return the name */
33926f3cdf0SGordon Ross 
34026f3cdf0SGordon Ross     return (Node->Name.Ascii);
34126f3cdf0SGordon Ross }
34226f3cdf0SGordon Ross 
34326f3cdf0SGordon Ross 
34426f3cdf0SGordon Ross /*******************************************************************************
34526f3cdf0SGordon Ross  *
34626f3cdf0SGordon Ross  * FUNCTION:    AcpiUtGetDescriptorName
34726f3cdf0SGordon Ross  *
34826f3cdf0SGordon Ross  * PARAMETERS:  Object               - An ACPI object
34926f3cdf0SGordon Ross  *
35026f3cdf0SGordon Ross  * RETURN:      Decoded name of the descriptor type
35126f3cdf0SGordon Ross  *
35226f3cdf0SGordon Ross  * DESCRIPTION: Validate object and return the descriptor type
35326f3cdf0SGordon Ross  *
35426f3cdf0SGordon Ross  ******************************************************************************/
35526f3cdf0SGordon Ross 
35626f3cdf0SGordon Ross /* Printable names of object descriptor types */
35726f3cdf0SGordon Ross 
35826f3cdf0SGordon Ross static const char           *AcpiGbl_DescTypeNames[] =
35926f3cdf0SGordon Ross {
36026f3cdf0SGordon Ross     /* 00 */ "Not a Descriptor",
36126f3cdf0SGordon Ross     /* 01 */ "Cached",
36226f3cdf0SGordon Ross     /* 02 */ "State-Generic",
36326f3cdf0SGordon Ross     /* 03 */ "State-Update",
36426f3cdf0SGordon Ross     /* 04 */ "State-Package",
36526f3cdf0SGordon Ross     /* 05 */ "State-Control",
36626f3cdf0SGordon Ross     /* 06 */ "State-RootParseScope",
36726f3cdf0SGordon Ross     /* 07 */ "State-ParseScope",
36826f3cdf0SGordon Ross     /* 08 */ "State-WalkScope",
36926f3cdf0SGordon Ross     /* 09 */ "State-Result",
37026f3cdf0SGordon Ross     /* 10 */ "State-Notify",
37126f3cdf0SGordon Ross     /* 11 */ "State-Thread",
37226f3cdf0SGordon Ross     /* 12 */ "Walk",
37326f3cdf0SGordon Ross     /* 13 */ "Parser",
37426f3cdf0SGordon Ross     /* 14 */ "Operand",
37526f3cdf0SGordon Ross     /* 15 */ "Node"
37626f3cdf0SGordon Ross };
37726f3cdf0SGordon Ross 
37826f3cdf0SGordon Ross 
379*385cc6b4SJerry Jelinek const char *
AcpiUtGetDescriptorName(void * Object)38026f3cdf0SGordon Ross AcpiUtGetDescriptorName (
38126f3cdf0SGordon Ross     void                    *Object)
38226f3cdf0SGordon Ross {
38326f3cdf0SGordon Ross 
38426f3cdf0SGordon Ross     if (!Object)
38526f3cdf0SGordon Ross     {
38626f3cdf0SGordon Ross         return ("NULL OBJECT");
38726f3cdf0SGordon Ross     }
38826f3cdf0SGordon Ross 
38926f3cdf0SGordon Ross     if (ACPI_GET_DESCRIPTOR_TYPE (Object) > ACPI_DESC_TYPE_MAX)
39026f3cdf0SGordon Ross     {
39126f3cdf0SGordon Ross         return ("Not a Descriptor");
39226f3cdf0SGordon Ross     }
39326f3cdf0SGordon Ross 
394*385cc6b4SJerry Jelinek     return (AcpiGbl_DescTypeNames[ACPI_GET_DESCRIPTOR_TYPE (Object)]);
39526f3cdf0SGordon Ross }
39626f3cdf0SGordon Ross 
39726f3cdf0SGordon Ross 
39826f3cdf0SGordon Ross /*******************************************************************************
39926f3cdf0SGordon Ross  *
40026f3cdf0SGordon Ross  * FUNCTION:    AcpiUtGetReferenceName
40126f3cdf0SGordon Ross  *
40226f3cdf0SGordon Ross  * PARAMETERS:  Object               - An ACPI reference object
40326f3cdf0SGordon Ross  *
40426f3cdf0SGordon Ross  * RETURN:      Decoded name of the type of reference
40526f3cdf0SGordon Ross  *
40626f3cdf0SGordon Ross  * DESCRIPTION: Decode a reference object sub-type to a string.
40726f3cdf0SGordon Ross  *
40826f3cdf0SGordon Ross  ******************************************************************************/
40926f3cdf0SGordon Ross 
41026f3cdf0SGordon Ross /* Printable names of reference object sub-types */
41126f3cdf0SGordon Ross 
41226f3cdf0SGordon Ross static const char           *AcpiGbl_RefClassNames[] =
41326f3cdf0SGordon Ross {
41426f3cdf0SGordon Ross     /* 00 */ "Local",
41526f3cdf0SGordon Ross     /* 01 */ "Argument",
41626f3cdf0SGordon Ross     /* 02 */ "RefOf",
41726f3cdf0SGordon Ross     /* 03 */ "Index",
41826f3cdf0SGordon Ross     /* 04 */ "DdbHandle",
41926f3cdf0SGordon Ross     /* 05 */ "Named Object",
42026f3cdf0SGordon Ross     /* 06 */ "Debug"
42126f3cdf0SGordon Ross };
42226f3cdf0SGordon Ross 
42326f3cdf0SGordon Ross const char *
AcpiUtGetReferenceName(ACPI_OPERAND_OBJECT * Object)42426f3cdf0SGordon Ross AcpiUtGetReferenceName (
42526f3cdf0SGordon Ross     ACPI_OPERAND_OBJECT     *Object)
42626f3cdf0SGordon Ross {
42726f3cdf0SGordon Ross 
42826f3cdf0SGordon Ross     if (!Object)
42926f3cdf0SGordon Ross     {
43026f3cdf0SGordon Ross         return ("NULL Object");
43126f3cdf0SGordon Ross     }
43226f3cdf0SGordon Ross 
43326f3cdf0SGordon Ross     if (ACPI_GET_DESCRIPTOR_TYPE (Object) != ACPI_DESC_TYPE_OPERAND)
43426f3cdf0SGordon Ross     {
43526f3cdf0SGordon Ross         return ("Not an Operand object");
43626f3cdf0SGordon Ross     }
43726f3cdf0SGordon Ross 
43826f3cdf0SGordon Ross     if (Object->Common.Type != ACPI_TYPE_LOCAL_REFERENCE)
43926f3cdf0SGordon Ross     {
44026f3cdf0SGordon Ross         return ("Not a Reference object");
44126f3cdf0SGordon Ross     }
44226f3cdf0SGordon Ross 
44326f3cdf0SGordon Ross     if (Object->Reference.Class > ACPI_REFCLASS_MAX)
44426f3cdf0SGordon Ross     {
44526f3cdf0SGordon Ross         return ("Unknown Reference class");
44626f3cdf0SGordon Ross     }
44726f3cdf0SGordon Ross 
44826f3cdf0SGordon Ross     return (AcpiGbl_RefClassNames[Object->Reference.Class]);
44926f3cdf0SGordon Ross }
45026f3cdf0SGordon Ross 
45126f3cdf0SGordon Ross 
45226f3cdf0SGordon Ross #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
45326f3cdf0SGordon Ross /*
45426f3cdf0SGordon Ross  * Strings and procedures used for debug only
45526f3cdf0SGordon Ross  */
45626f3cdf0SGordon Ross 
45726f3cdf0SGordon Ross /*******************************************************************************
45826f3cdf0SGordon Ross  *
45926f3cdf0SGordon Ross  * FUNCTION:    AcpiUtGetMutexName
46026f3cdf0SGordon Ross  *
46126f3cdf0SGordon Ross  * PARAMETERS:  MutexId         - The predefined ID for this mutex.
46226f3cdf0SGordon Ross  *
46326f3cdf0SGordon Ross  * RETURN:      Decoded name of the internal mutex
46426f3cdf0SGordon Ross  *
46526f3cdf0SGordon Ross  * DESCRIPTION: Translate a mutex ID into a name string (Debug only)
46626f3cdf0SGordon Ross  *
46726f3cdf0SGordon Ross  ******************************************************************************/
46826f3cdf0SGordon Ross 
46926f3cdf0SGordon Ross /* Names for internal mutex objects, used for debug output */
47026f3cdf0SGordon Ross 
471*385cc6b4SJerry Jelinek static const char           *AcpiGbl_MutexNames[ACPI_NUM_MUTEX] =
47226f3cdf0SGordon Ross {
47326f3cdf0SGordon Ross     "ACPI_MTX_Interpreter",
47426f3cdf0SGordon Ross     "ACPI_MTX_Namespace",
47526f3cdf0SGordon Ross     "ACPI_MTX_Tables",
47626f3cdf0SGordon Ross     "ACPI_MTX_Events",
47726f3cdf0SGordon Ross     "ACPI_MTX_Caches",
47826f3cdf0SGordon Ross     "ACPI_MTX_Memory",
47926f3cdf0SGordon Ross };
48026f3cdf0SGordon Ross 
481*385cc6b4SJerry Jelinek const char *
AcpiUtGetMutexName(UINT32 MutexId)48226f3cdf0SGordon Ross AcpiUtGetMutexName (
48326f3cdf0SGordon Ross     UINT32                  MutexId)
48426f3cdf0SGordon Ross {
48526f3cdf0SGordon Ross 
48626f3cdf0SGordon Ross     if (MutexId > ACPI_MAX_MUTEX)
48726f3cdf0SGordon Ross     {
48826f3cdf0SGordon Ross         return ("Invalid Mutex ID");
48926f3cdf0SGordon Ross     }
49026f3cdf0SGordon Ross 
49126f3cdf0SGordon Ross     return (AcpiGbl_MutexNames[MutexId]);
49226f3cdf0SGordon Ross }
49326f3cdf0SGordon Ross 
49426f3cdf0SGordon Ross 
49526f3cdf0SGordon Ross /*******************************************************************************
49626f3cdf0SGordon Ross  *
49726f3cdf0SGordon Ross  * FUNCTION:    AcpiUtGetNotifyName
49826f3cdf0SGordon Ross  *
49926f3cdf0SGordon Ross  * PARAMETERS:  NotifyValue     - Value from the Notify() request
50026f3cdf0SGordon Ross  *
50126f3cdf0SGordon Ross  * RETURN:      Decoded name for the notify value
50226f3cdf0SGordon Ross  *
50326f3cdf0SGordon Ross  * DESCRIPTION: Translate a Notify Value to a notify namestring.
50426f3cdf0SGordon Ross  *
50526f3cdf0SGordon Ross  ******************************************************************************/
50626f3cdf0SGordon Ross 
50726f3cdf0SGordon Ross /* Names for Notify() values, used for debug output */
50826f3cdf0SGordon Ross 
509*385cc6b4SJerry Jelinek static const char           *AcpiGbl_GenericNotify[ACPI_GENERIC_NOTIFY_MAX + 1] =
51026f3cdf0SGordon Ross {
511*385cc6b4SJerry Jelinek     /* 00 */ "Bus Check",
512*385cc6b4SJerry Jelinek     /* 01 */ "Device Check",
513*385cc6b4SJerry Jelinek     /* 02 */ "Device Wake",
514*385cc6b4SJerry Jelinek     /* 03 */ "Eject Request",
515*385cc6b4SJerry Jelinek     /* 04 */ "Device Check Light",
516*385cc6b4SJerry Jelinek     /* 05 */ "Frequency Mismatch",
517*385cc6b4SJerry Jelinek     /* 06 */ "Bus Mode Mismatch",
518*385cc6b4SJerry Jelinek     /* 07 */ "Power Fault",
519*385cc6b4SJerry Jelinek     /* 08 */ "Capabilities Check",
520*385cc6b4SJerry Jelinek     /* 09 */ "Device PLD Check",
521*385cc6b4SJerry Jelinek     /* 0A */ "Reserved",
522*385cc6b4SJerry Jelinek     /* 0B */ "System Locality Update",
523*385cc6b4SJerry Jelinek     /* 0C */ "Shutdown Request", /* Reserved in ACPI 6.0 */
524*385cc6b4SJerry Jelinek     /* 0D */ "System Resource Affinity Update"
52526f3cdf0SGordon Ross };
52626f3cdf0SGordon Ross 
527*385cc6b4SJerry Jelinek static const char           *AcpiGbl_DeviceNotify[5] =
528*385cc6b4SJerry Jelinek {
529*385cc6b4SJerry Jelinek     /* 80 */ "Status Change",
530*385cc6b4SJerry Jelinek     /* 81 */ "Information Change",
531*385cc6b4SJerry Jelinek     /* 82 */ "Device-Specific Change",
532*385cc6b4SJerry Jelinek     /* 83 */ "Device-Specific Change",
533*385cc6b4SJerry Jelinek     /* 84 */ "Reserved"
534*385cc6b4SJerry Jelinek };
535*385cc6b4SJerry Jelinek 
536*385cc6b4SJerry Jelinek static const char           *AcpiGbl_ProcessorNotify[5] =
537*385cc6b4SJerry Jelinek {
538*385cc6b4SJerry Jelinek     /* 80 */ "Performance Capability Change",
539*385cc6b4SJerry Jelinek     /* 81 */ "C-State Change",
540*385cc6b4SJerry Jelinek     /* 82 */ "Throttling Capability Change",
541*385cc6b4SJerry Jelinek     /* 83 */ "Guaranteed Change",
542*385cc6b4SJerry Jelinek     /* 84 */ "Minimum Excursion"
543*385cc6b4SJerry Jelinek };
544*385cc6b4SJerry Jelinek 
545*385cc6b4SJerry Jelinek static const char           *AcpiGbl_ThermalNotify[5] =
546*385cc6b4SJerry Jelinek {
547*385cc6b4SJerry Jelinek     /* 80 */ "Thermal Status Change",
548*385cc6b4SJerry Jelinek     /* 81 */ "Thermal Trip Point Change",
549*385cc6b4SJerry Jelinek     /* 82 */ "Thermal Device List Change",
550*385cc6b4SJerry Jelinek     /* 83 */ "Thermal Relationship Change",
551*385cc6b4SJerry Jelinek     /* 84 */ "Reserved"
552*385cc6b4SJerry Jelinek };
553*385cc6b4SJerry Jelinek 
554*385cc6b4SJerry Jelinek 
55526f3cdf0SGordon Ross const char *
AcpiUtGetNotifyName(UINT32 NotifyValue,ACPI_OBJECT_TYPE Type)55626f3cdf0SGordon Ross AcpiUtGetNotifyName (
557*385cc6b4SJerry Jelinek     UINT32                  NotifyValue,
558*385cc6b4SJerry Jelinek     ACPI_OBJECT_TYPE        Type)
55926f3cdf0SGordon Ross {
56026f3cdf0SGordon Ross 
561*385cc6b4SJerry Jelinek     /* 00 - 0D are "common to all object types" (from ACPI Spec) */
562*385cc6b4SJerry Jelinek 
563*385cc6b4SJerry Jelinek     if (NotifyValue <= ACPI_GENERIC_NOTIFY_MAX)
56426f3cdf0SGordon Ross     {
565*385cc6b4SJerry Jelinek         return (AcpiGbl_GenericNotify[NotifyValue]);
56626f3cdf0SGordon Ross     }
567*385cc6b4SJerry Jelinek 
568*385cc6b4SJerry Jelinek     /* 0E - 7F are reserved */
569*385cc6b4SJerry Jelinek 
570*385cc6b4SJerry Jelinek     if (NotifyValue <= ACPI_MAX_SYS_NOTIFY)
57126f3cdf0SGordon Ross     {
57226f3cdf0SGordon Ross         return ("Reserved");
57326f3cdf0SGordon Ross     }
574*385cc6b4SJerry Jelinek 
575*385cc6b4SJerry Jelinek     /* 80 - 84 are per-object-type */
576*385cc6b4SJerry Jelinek 
577*385cc6b4SJerry Jelinek     if (NotifyValue <= ACPI_SPECIFIC_NOTIFY_MAX)
57826f3cdf0SGordon Ross     {
579*385cc6b4SJerry Jelinek         switch (Type)
580*385cc6b4SJerry Jelinek         {
581*385cc6b4SJerry Jelinek         case ACPI_TYPE_ANY:
582*385cc6b4SJerry Jelinek         case ACPI_TYPE_DEVICE:
583*385cc6b4SJerry Jelinek             return (AcpiGbl_DeviceNotify [NotifyValue - 0x80]);
584*385cc6b4SJerry Jelinek 
585*385cc6b4SJerry Jelinek         case ACPI_TYPE_PROCESSOR:
586*385cc6b4SJerry Jelinek             return (AcpiGbl_ProcessorNotify [NotifyValue - 0x80]);
587*385cc6b4SJerry Jelinek 
588*385cc6b4SJerry Jelinek         case ACPI_TYPE_THERMAL:
589*385cc6b4SJerry Jelinek             return (AcpiGbl_ThermalNotify [NotifyValue - 0x80]);
590*385cc6b4SJerry Jelinek 
591*385cc6b4SJerry Jelinek         default:
592*385cc6b4SJerry Jelinek             return ("Target object type does not support notifies");
59326f3cdf0SGordon Ross         }
59426f3cdf0SGordon Ross     }
595*385cc6b4SJerry Jelinek 
596*385cc6b4SJerry Jelinek     /* 84 - BF are device-specific */
597*385cc6b4SJerry Jelinek 
598*385cc6b4SJerry Jelinek     if (NotifyValue <= ACPI_MAX_DEVICE_SPECIFIC_NOTIFY)
599*385cc6b4SJerry Jelinek     {
600*385cc6b4SJerry Jelinek         return ("Device-Specific");
601*385cc6b4SJerry Jelinek     }
602*385cc6b4SJerry Jelinek 
603*385cc6b4SJerry Jelinek     /* C0 and above are hardware-specific */
604*385cc6b4SJerry Jelinek 
605*385cc6b4SJerry Jelinek     return ("Hardware-Specific");
606*385cc6b4SJerry Jelinek }
60726f3cdf0SGordon Ross #endif
60826f3cdf0SGordon Ross 
60926f3cdf0SGordon Ross 
61026f3cdf0SGordon Ross /*******************************************************************************
61126f3cdf0SGordon Ross  *
61226f3cdf0SGordon Ross  * FUNCTION:    AcpiUtValidObjectType
61326f3cdf0SGordon Ross  *
61426f3cdf0SGordon Ross  * PARAMETERS:  Type            - Object type to be validated
61526f3cdf0SGordon Ross  *
61626f3cdf0SGordon Ross  * RETURN:      TRUE if valid object type, FALSE otherwise
61726f3cdf0SGordon Ross  *
61826f3cdf0SGordon Ross  * DESCRIPTION: Validate an object type
61926f3cdf0SGordon Ross  *
62026f3cdf0SGordon Ross  ******************************************************************************/
62126f3cdf0SGordon Ross 
62226f3cdf0SGordon Ross BOOLEAN
AcpiUtValidObjectType(ACPI_OBJECT_TYPE Type)62326f3cdf0SGordon Ross AcpiUtValidObjectType (
62426f3cdf0SGordon Ross     ACPI_OBJECT_TYPE        Type)
62526f3cdf0SGordon Ross {
62626f3cdf0SGordon Ross 
62726f3cdf0SGordon Ross     if (Type > ACPI_TYPE_LOCAL_MAX)
62826f3cdf0SGordon Ross     {
62926f3cdf0SGordon Ross         /* Note: Assumes all TYPEs are contiguous (external/local) */
63026f3cdf0SGordon Ross 
63126f3cdf0SGordon Ross         return (FALSE);
63226f3cdf0SGordon Ross     }
63326f3cdf0SGordon Ross 
63426f3cdf0SGordon Ross     return (TRUE);
63526f3cdf0SGordon Ross }
636