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