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