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