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