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