ACPICA: Add function to decode reference obj types to strings
[linux-2.6/mini2440.git] / drivers / acpi / utilities / utglobal.c
blobbcace577183bc7a616adfc3704d3fbec6d7da498
1 /******************************************************************************
3 * Module Name: utglobal - Global variables for the ACPI subsystem
5 *****************************************************************************/
7 /*
8 * Copyright (C) 2000 - 2008, Intel Corp.
9 * All rights reserved.
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
44 #define DEFINE_ACPI_GLOBALS
46 #include <acpi/acpi.h>
47 #include <acpi/acnamesp.h>
48 #include <acpi/amlcode.h>
50 ACPI_EXPORT_SYMBOL(acpi_gbl_FADT)
51 #define _COMPONENT ACPI_UTILITIES
52 ACPI_MODULE_NAME("utglobal")
54 /*******************************************************************************
56 * Static global variable initialization.
58 ******************************************************************************/
60 * We want the debug switches statically initialized so they
61 * are already set when the debugger is entered.
63 /* Debug switch - level and trace mask */
64 u32 acpi_dbg_level = ACPI_DEBUG_DEFAULT;
66 /* Debug switch - layer (component) mask */
68 u32 acpi_dbg_layer = ACPI_COMPONENT_DEFAULT | ACPI_ALL_DRIVERS;
69 u32 acpi_gbl_nesting_level = 0;
71 /* Debugger globals */
73 u8 acpi_gbl_db_terminate_threads = FALSE;
74 u8 acpi_gbl_abort_method = FALSE;
75 u8 acpi_gbl_method_executing = FALSE;
77 /* System flags */
79 u32 acpi_gbl_startup_flags = 0;
81 /* System starts uninitialized */
83 u8 acpi_gbl_shutdown = TRUE;
85 const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT] = {
86 "\\_S0_",
87 "\\_S1_",
88 "\\_S2_",
89 "\\_S3_",
90 "\\_S4_",
91 "\\_S5_"
94 const char *acpi_gbl_highest_dstate_names[4] = {
95 "_S1D",
96 "_S2D",
97 "_S3D",
98 "_S4D"
101 /*******************************************************************************
103 * FUNCTION: acpi_format_exception
105 * PARAMETERS: Status - The acpi_status code to be formatted
107 * RETURN: A string containing the exception text. A valid pointer is
108 * always returned.
110 * DESCRIPTION: This function translates an ACPI exception into an ASCII string
111 * It is here instead of utxface.c so it is always present.
113 ******************************************************************************/
115 const char *acpi_format_exception(acpi_status status)
117 const char *exception = NULL;
119 ACPI_FUNCTION_ENTRY();
121 exception = acpi_ut_validate_exception(status);
122 if (!exception) {
124 /* Exception code was not recognized */
126 ACPI_ERROR((AE_INFO,
127 "Unknown exception code: 0x%8.8X", status));
129 exception = "UNKNOWN_STATUS_CODE";
130 dump_stack();
133 return (ACPI_CAST_PTR(const char, exception));
136 ACPI_EXPORT_SYMBOL(acpi_format_exception)
138 /*******************************************************************************
140 * Namespace globals
142 ******************************************************************************/
144 * Predefined ACPI Names (Built-in to the Interpreter)
146 * NOTES:
147 * 1) _SB_ is defined to be a device to allow \_SB_._INI to be run
148 * during the initialization sequence.
149 * 2) _TZ_ is defined to be a thermal zone in order to allow ASL code to
150 * perform a Notify() operation on it.
152 const struct acpi_predefined_names acpi_gbl_pre_defined_names[] = {
153 {"_GPE", ACPI_TYPE_LOCAL_SCOPE, NULL},
154 {"_PR_", ACPI_TYPE_LOCAL_SCOPE, NULL},
155 {"_SB_", ACPI_TYPE_DEVICE, NULL},
156 {"_SI_", ACPI_TYPE_LOCAL_SCOPE, NULL},
157 {"_TZ_", ACPI_TYPE_THERMAL, NULL},
158 {"_REV", ACPI_TYPE_INTEGER, (char *)ACPI_CA_SUPPORT_LEVEL},
159 {"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
160 {"_GL_", ACPI_TYPE_MUTEX, (char *)1},
162 #if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
163 {"_OSI", ACPI_TYPE_METHOD, (char *)1},
164 #endif
166 /* Table terminator */
168 {NULL, ACPI_TYPE_ANY, NULL}
172 * Properties of the ACPI Object Types, both internal and external.
173 * The table is indexed by values of acpi_object_type
175 const u8 acpi_gbl_ns_properties[] = {
176 ACPI_NS_NORMAL, /* 00 Any */
177 ACPI_NS_NORMAL, /* 01 Number */
178 ACPI_NS_NORMAL, /* 02 String */
179 ACPI_NS_NORMAL, /* 03 Buffer */
180 ACPI_NS_NORMAL, /* 04 Package */
181 ACPI_NS_NORMAL, /* 05 field_unit */
182 ACPI_NS_NEWSCOPE, /* 06 Device */
183 ACPI_NS_NORMAL, /* 07 Event */
184 ACPI_NS_NEWSCOPE, /* 08 Method */
185 ACPI_NS_NORMAL, /* 09 Mutex */
186 ACPI_NS_NORMAL, /* 10 Region */
187 ACPI_NS_NEWSCOPE, /* 11 Power */
188 ACPI_NS_NEWSCOPE, /* 12 Processor */
189 ACPI_NS_NEWSCOPE, /* 13 Thermal */
190 ACPI_NS_NORMAL, /* 14 buffer_field */
191 ACPI_NS_NORMAL, /* 15 ddb_handle */
192 ACPI_NS_NORMAL, /* 16 Debug Object */
193 ACPI_NS_NORMAL, /* 17 def_field */
194 ACPI_NS_NORMAL, /* 18 bank_field */
195 ACPI_NS_NORMAL, /* 19 index_field */
196 ACPI_NS_NORMAL, /* 20 Reference */
197 ACPI_NS_NORMAL, /* 21 Alias */
198 ACPI_NS_NORMAL, /* 22 method_alias */
199 ACPI_NS_NORMAL, /* 23 Notify */
200 ACPI_NS_NORMAL, /* 24 Address Handler */
201 ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 25 Resource Desc */
202 ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 26 Resource Field */
203 ACPI_NS_NEWSCOPE, /* 27 Scope */
204 ACPI_NS_NORMAL, /* 28 Extra */
205 ACPI_NS_NORMAL, /* 29 Data */
206 ACPI_NS_NORMAL /* 30 Invalid */
209 /* Hex to ASCII conversion table */
211 static const char acpi_gbl_hex_to_ascii[] = {
212 '0', '1', '2', '3', '4', '5', '6', '7',
213 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
216 /*******************************************************************************
218 * FUNCTION: acpi_ut_hex_to_ascii_char
220 * PARAMETERS: Integer - Contains the hex digit
221 * Position - bit position of the digit within the
222 * integer (multiple of 4)
224 * RETURN: The converted Ascii character
226 * DESCRIPTION: Convert a hex digit to an Ascii character
228 ******************************************************************************/
230 char acpi_ut_hex_to_ascii_char(acpi_integer integer, u32 position)
233 return (acpi_gbl_hex_to_ascii[(integer >> position) & 0xF]);
236 /******************************************************************************
238 * Event and Hardware globals
240 ******************************************************************************/
242 struct acpi_bit_register_info acpi_gbl_bit_register_info[ACPI_NUM_BITREG] = {
243 /* Name Parent Register Register Bit Position Register Bit Mask */
245 /* ACPI_BITREG_TIMER_STATUS */ {ACPI_REGISTER_PM1_STATUS,
246 ACPI_BITPOSITION_TIMER_STATUS,
247 ACPI_BITMASK_TIMER_STATUS},
248 /* ACPI_BITREG_BUS_MASTER_STATUS */ {ACPI_REGISTER_PM1_STATUS,
249 ACPI_BITPOSITION_BUS_MASTER_STATUS,
250 ACPI_BITMASK_BUS_MASTER_STATUS},
251 /* ACPI_BITREG_GLOBAL_LOCK_STATUS */ {ACPI_REGISTER_PM1_STATUS,
252 ACPI_BITPOSITION_GLOBAL_LOCK_STATUS,
253 ACPI_BITMASK_GLOBAL_LOCK_STATUS},
254 /* ACPI_BITREG_POWER_BUTTON_STATUS */ {ACPI_REGISTER_PM1_STATUS,
255 ACPI_BITPOSITION_POWER_BUTTON_STATUS,
256 ACPI_BITMASK_POWER_BUTTON_STATUS},
257 /* ACPI_BITREG_SLEEP_BUTTON_STATUS */ {ACPI_REGISTER_PM1_STATUS,
258 ACPI_BITPOSITION_SLEEP_BUTTON_STATUS,
259 ACPI_BITMASK_SLEEP_BUTTON_STATUS},
260 /* ACPI_BITREG_RT_CLOCK_STATUS */ {ACPI_REGISTER_PM1_STATUS,
261 ACPI_BITPOSITION_RT_CLOCK_STATUS,
262 ACPI_BITMASK_RT_CLOCK_STATUS},
263 /* ACPI_BITREG_WAKE_STATUS */ {ACPI_REGISTER_PM1_STATUS,
264 ACPI_BITPOSITION_WAKE_STATUS,
265 ACPI_BITMASK_WAKE_STATUS},
266 /* ACPI_BITREG_PCIEXP_WAKE_STATUS */ {ACPI_REGISTER_PM1_STATUS,
267 ACPI_BITPOSITION_PCIEXP_WAKE_STATUS,
268 ACPI_BITMASK_PCIEXP_WAKE_STATUS},
270 /* ACPI_BITREG_TIMER_ENABLE */ {ACPI_REGISTER_PM1_ENABLE,
271 ACPI_BITPOSITION_TIMER_ENABLE,
272 ACPI_BITMASK_TIMER_ENABLE},
273 /* ACPI_BITREG_GLOBAL_LOCK_ENABLE */ {ACPI_REGISTER_PM1_ENABLE,
274 ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE,
275 ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
276 /* ACPI_BITREG_POWER_BUTTON_ENABLE */ {ACPI_REGISTER_PM1_ENABLE,
277 ACPI_BITPOSITION_POWER_BUTTON_ENABLE,
278 ACPI_BITMASK_POWER_BUTTON_ENABLE},
279 /* ACPI_BITREG_SLEEP_BUTTON_ENABLE */ {ACPI_REGISTER_PM1_ENABLE,
280 ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE,
281 ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
282 /* ACPI_BITREG_RT_CLOCK_ENABLE */ {ACPI_REGISTER_PM1_ENABLE,
283 ACPI_BITPOSITION_RT_CLOCK_ENABLE,
284 ACPI_BITMASK_RT_CLOCK_ENABLE},
285 /* ACPI_BITREG_WAKE_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, 0, 0},
286 /* ACPI_BITREG_PCIEXP_WAKE_DISABLE */ {ACPI_REGISTER_PM1_ENABLE,
287 ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE,
288 ACPI_BITMASK_PCIEXP_WAKE_DISABLE},
290 /* ACPI_BITREG_SCI_ENABLE */ {ACPI_REGISTER_PM1_CONTROL,
291 ACPI_BITPOSITION_SCI_ENABLE,
292 ACPI_BITMASK_SCI_ENABLE},
293 /* ACPI_BITREG_BUS_MASTER_RLD */ {ACPI_REGISTER_PM1_CONTROL,
294 ACPI_BITPOSITION_BUS_MASTER_RLD,
295 ACPI_BITMASK_BUS_MASTER_RLD},
296 /* ACPI_BITREG_GLOBAL_LOCK_RELEASE */ {ACPI_REGISTER_PM1_CONTROL,
297 ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE,
298 ACPI_BITMASK_GLOBAL_LOCK_RELEASE},
299 /* ACPI_BITREG_SLEEP_TYPE_A */ {ACPI_REGISTER_PM1_CONTROL,
300 ACPI_BITPOSITION_SLEEP_TYPE_X,
301 ACPI_BITMASK_SLEEP_TYPE_X},
302 /* ACPI_BITREG_SLEEP_TYPE_B */ {ACPI_REGISTER_PM1_CONTROL,
303 ACPI_BITPOSITION_SLEEP_TYPE_X,
304 ACPI_BITMASK_SLEEP_TYPE_X},
305 /* ACPI_BITREG_SLEEP_ENABLE */ {ACPI_REGISTER_PM1_CONTROL,
306 ACPI_BITPOSITION_SLEEP_ENABLE,
307 ACPI_BITMASK_SLEEP_ENABLE},
309 /* ACPI_BITREG_ARB_DIS */ {ACPI_REGISTER_PM2_CONTROL,
310 ACPI_BITPOSITION_ARB_DISABLE,
311 ACPI_BITMASK_ARB_DISABLE}
314 struct acpi_fixed_event_info acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS] = {
315 /* ACPI_EVENT_PMTIMER */ {ACPI_BITREG_TIMER_STATUS,
316 ACPI_BITREG_TIMER_ENABLE,
317 ACPI_BITMASK_TIMER_STATUS,
318 ACPI_BITMASK_TIMER_ENABLE},
319 /* ACPI_EVENT_GLOBAL */ {ACPI_BITREG_GLOBAL_LOCK_STATUS,
320 ACPI_BITREG_GLOBAL_LOCK_ENABLE,
321 ACPI_BITMASK_GLOBAL_LOCK_STATUS,
322 ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
323 /* ACPI_EVENT_POWER_BUTTON */ {ACPI_BITREG_POWER_BUTTON_STATUS,
324 ACPI_BITREG_POWER_BUTTON_ENABLE,
325 ACPI_BITMASK_POWER_BUTTON_STATUS,
326 ACPI_BITMASK_POWER_BUTTON_ENABLE},
327 /* ACPI_EVENT_SLEEP_BUTTON */ {ACPI_BITREG_SLEEP_BUTTON_STATUS,
328 ACPI_BITREG_SLEEP_BUTTON_ENABLE,
329 ACPI_BITMASK_SLEEP_BUTTON_STATUS,
330 ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
331 /* ACPI_EVENT_RTC */ {ACPI_BITREG_RT_CLOCK_STATUS,
332 ACPI_BITREG_RT_CLOCK_ENABLE,
333 ACPI_BITMASK_RT_CLOCK_STATUS,
334 ACPI_BITMASK_RT_CLOCK_ENABLE},
337 /*******************************************************************************
339 * FUNCTION: acpi_ut_get_region_name
341 * PARAMETERS: None.
343 * RETURN: Status
345 * DESCRIPTION: Translate a Space ID into a name string (Debug only)
347 ******************************************************************************/
349 /* Region type decoding */
351 const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS] = {
352 "SystemMemory",
353 "SystemIO",
354 "PCI_Config",
355 "EmbeddedControl",
356 "SMBus",
357 "CMOS",
358 "PCIBARTarget",
359 "DataTable"
362 char *acpi_ut_get_region_name(u8 space_id)
365 if (space_id >= ACPI_USER_REGION_BEGIN) {
366 return ("UserDefinedRegion");
367 } else if (space_id >= ACPI_NUM_PREDEFINED_REGIONS) {
368 return ("InvalidSpaceId");
371 return (ACPI_CAST_PTR(char, acpi_gbl_region_types[space_id]));
374 /*******************************************************************************
376 * FUNCTION: acpi_ut_get_event_name
378 * PARAMETERS: None.
380 * RETURN: Status
382 * DESCRIPTION: Translate a Event ID into a name string (Debug only)
384 ******************************************************************************/
386 /* Event type decoding */
388 static const char *acpi_gbl_event_types[ACPI_NUM_FIXED_EVENTS] = {
389 "PM_Timer",
390 "GlobalLock",
391 "PowerButton",
392 "SleepButton",
393 "RealTimeClock",
396 char *acpi_ut_get_event_name(u32 event_id)
399 if (event_id > ACPI_EVENT_MAX) {
400 return ("InvalidEventID");
403 return (ACPI_CAST_PTR(char, acpi_gbl_event_types[event_id]));
406 /*******************************************************************************
408 * FUNCTION: acpi_ut_get_type_name
410 * PARAMETERS: None.
412 * RETURN: Status
414 * DESCRIPTION: Translate a Type ID into a name string (Debug only)
416 ******************************************************************************/
419 * Elements of acpi_gbl_ns_type_names below must match
420 * one-to-one with values of acpi_object_type
422 * The type ACPI_TYPE_ANY (Untyped) is used as a "don't care" when searching;
423 * when stored in a table it really means that we have thus far seen no
424 * evidence to indicate what type is actually going to be stored for this entry.
426 static const char acpi_gbl_bad_type[] = "UNDEFINED";
428 /* Printable names of the ACPI object types */
430 static const char *acpi_gbl_ns_type_names[] = {
431 /* 00 */ "Untyped",
432 /* 01 */ "Integer",
433 /* 02 */ "String",
434 /* 03 */ "Buffer",
435 /* 04 */ "Package",
436 /* 05 */ "FieldUnit",
437 /* 06 */ "Device",
438 /* 07 */ "Event",
439 /* 08 */ "Method",
440 /* 09 */ "Mutex",
441 /* 10 */ "Region",
442 /* 11 */ "Power",
443 /* 12 */ "Processor",
444 /* 13 */ "Thermal",
445 /* 14 */ "BufferField",
446 /* 15 */ "DdbHandle",
447 /* 16 */ "DebugObject",
448 /* 17 */ "RegionField",
449 /* 18 */ "BankField",
450 /* 19 */ "IndexField",
451 /* 20 */ "Reference",
452 /* 21 */ "Alias",
453 /* 22 */ "MethodAlias",
454 /* 23 */ "Notify",
455 /* 24 */ "AddrHandler",
456 /* 25 */ "ResourceDesc",
457 /* 26 */ "ResourceFld",
458 /* 27 */ "Scope",
459 /* 28 */ "Extra",
460 /* 29 */ "Data",
461 /* 30 */ "Invalid"
464 char *acpi_ut_get_type_name(acpi_object_type type)
467 if (type > ACPI_TYPE_INVALID) {
468 return (ACPI_CAST_PTR(char, acpi_gbl_bad_type));
471 return (ACPI_CAST_PTR(char, acpi_gbl_ns_type_names[type]));
474 char *acpi_ut_get_object_type_name(union acpi_operand_object *obj_desc)
477 if (!obj_desc) {
478 return ("[NULL Object Descriptor]");
481 return (acpi_ut_get_type_name(ACPI_GET_OBJECT_TYPE(obj_desc)));
484 /*******************************************************************************
486 * FUNCTION: acpi_ut_get_node_name
488 * PARAMETERS: Object - A namespace node
490 * RETURN: Pointer to a string
492 * DESCRIPTION: Validate the node and return the node's ACPI name.
494 ******************************************************************************/
496 char *acpi_ut_get_node_name(void *object)
498 struct acpi_namespace_node *node = (struct acpi_namespace_node *)object;
500 /* Must return a string of exactly 4 characters == ACPI_NAME_SIZE */
502 if (!object) {
503 return ("NULL");
506 /* Check for Root node */
508 if ((object == ACPI_ROOT_OBJECT) || (object == acpi_gbl_root_node)) {
509 return ("\"\\\" ");
512 /* Descriptor must be a namespace node */
514 if (ACPI_GET_DESCRIPTOR_TYPE(node) != ACPI_DESC_TYPE_NAMED) {
515 return ("####");
518 /* Name must be a valid ACPI name */
520 if (!acpi_ut_valid_acpi_name(node->name.integer)) {
521 node->name.integer = acpi_ut_repair_name(node->name.ascii);
524 /* Return the name */
526 return (node->name.ascii);
529 /*******************************************************************************
531 * FUNCTION: acpi_ut_get_descriptor_name
533 * PARAMETERS: Object - An ACPI object
535 * RETURN: Pointer to a string
537 * DESCRIPTION: Validate object and return the descriptor type
539 ******************************************************************************/
541 /* Printable names of object descriptor types */
543 static const char *acpi_gbl_desc_type_names[] = {
544 /* 00 */ "Invalid",
545 /* 01 */ "Cached",
546 /* 02 */ "State-Generic",
547 /* 03 */ "State-Update",
548 /* 04 */ "State-Package",
549 /* 05 */ "State-Control",
550 /* 06 */ "State-RootParseScope",
551 /* 07 */ "State-ParseScope",
552 /* 08 */ "State-WalkScope",
553 /* 09 */ "State-Result",
554 /* 10 */ "State-Notify",
555 /* 11 */ "State-Thread",
556 /* 12 */ "Walk",
557 /* 13 */ "Parser",
558 /* 14 */ "Operand",
559 /* 15 */ "Node"
562 char *acpi_ut_get_descriptor_name(void *object)
565 if (!object) {
566 return ("NULL OBJECT");
569 if (ACPI_GET_DESCRIPTOR_TYPE(object) > ACPI_DESC_TYPE_MAX) {
570 return (ACPI_CAST_PTR(char, acpi_gbl_bad_type));
573 return (ACPI_CAST_PTR(char,
574 acpi_gbl_desc_type_names[ACPI_GET_DESCRIPTOR_TYPE
575 (object)]));
579 /*******************************************************************************
581 * FUNCTION: acpi_ut_get_reference_name
583 * PARAMETERS: Object - An ACPI reference object
585 * RETURN: Pointer to a string
587 * DESCRIPTION: Decode a reference object sub-type to a string.
589 ******************************************************************************/
591 /* Printable names of reference object sub-types */
593 const char *acpi_ut_get_reference_name(union acpi_operand_object *object)
596 switch (object->reference.opcode) {
597 case AML_INT_NAMEPATH_OP:
598 return "Name";
600 case AML_LOAD_OP:
601 return "DDB-Handle";
603 case AML_REF_OF_OP:
604 return "RefOf";
606 case AML_INDEX_OP:
607 return "Index";
609 default:
610 return "Unknown";
614 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
616 * Strings and procedures used for debug only
619 /*******************************************************************************
621 * FUNCTION: acpi_ut_get_mutex_name
623 * PARAMETERS: mutex_id - The predefined ID for this mutex.
625 * RETURN: String containing the name of the mutex. Always returns a valid
626 * pointer.
628 * DESCRIPTION: Translate a mutex ID into a name string (Debug only)
630 ******************************************************************************/
632 char *acpi_ut_get_mutex_name(u32 mutex_id)
635 if (mutex_id > ACPI_MAX_MUTEX) {
636 return ("Invalid Mutex ID");
639 return (acpi_gbl_mutex_names[mutex_id]);
642 /*******************************************************************************
644 * FUNCTION: acpi_ut_get_notify_name
646 * PARAMETERS: notify_value - Value from the Notify() request
648 * RETURN: String corresponding to the Notify Value.
650 * DESCRIPTION: Translate a Notify Value to a notify namestring.
652 ******************************************************************************/
654 /* Names for Notify() values, used for debug output */
656 static const char *acpi_gbl_notify_value_names[] = {
657 "Bus Check",
658 "Device Check",
659 "Device Wake",
660 "Eject Request",
661 "Device Check Light",
662 "Frequency Mismatch",
663 "Bus Mode Mismatch",
664 "Power Fault",
665 "Capabilities Check",
666 "Device PLD Check",
667 "Reserved",
668 "System Locality Update"
671 const char *acpi_ut_get_notify_name(u32 notify_value)
674 if (notify_value <= ACPI_NOTIFY_MAX) {
675 return (acpi_gbl_notify_value_names[notify_value]);
676 } else if (notify_value <= ACPI_MAX_SYS_NOTIFY) {
677 return ("Reserved");
678 } else { /* Greater or equal to 0x80 */
680 return ("**Device Specific**");
683 #endif
685 /*******************************************************************************
687 * FUNCTION: acpi_ut_valid_object_type
689 * PARAMETERS: Type - Object type to be validated
691 * RETURN: TRUE if valid object type, FALSE otherwise
693 * DESCRIPTION: Validate an object type
695 ******************************************************************************/
697 u8 acpi_ut_valid_object_type(acpi_object_type type)
700 if (type > ACPI_TYPE_LOCAL_MAX) {
702 /* Note: Assumes all TYPEs are contiguous (external/local) */
704 return (FALSE);
707 return (TRUE);
710 /*******************************************************************************
712 * FUNCTION: acpi_ut_init_globals
714 * PARAMETERS: None
716 * RETURN: Status
718 * DESCRIPTION: Init library globals. All globals that require specific
719 * initialization should be initialized here!
721 ******************************************************************************/
723 acpi_status acpi_ut_init_globals(void)
725 acpi_status status;
726 u32 i;
728 ACPI_FUNCTION_TRACE(ut_init_globals);
730 /* Create all memory caches */
732 status = acpi_ut_create_caches();
733 if (ACPI_FAILURE(status)) {
734 return_ACPI_STATUS(status);
737 /* Mutex locked flags */
739 for (i = 0; i < ACPI_NUM_MUTEX; i++) {
740 acpi_gbl_mutex_info[i].mutex = NULL;
741 acpi_gbl_mutex_info[i].thread_id = ACPI_MUTEX_NOT_ACQUIRED;
742 acpi_gbl_mutex_info[i].use_count = 0;
745 for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++) {
746 acpi_gbl_owner_id_mask[i] = 0;
748 acpi_gbl_owner_id_mask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000; /* Last ID is never valid */
750 /* GPE support */
752 acpi_gbl_gpe_xrupt_list_head = NULL;
753 acpi_gbl_gpe_fadt_blocks[0] = NULL;
754 acpi_gbl_gpe_fadt_blocks[1] = NULL;
756 /* Global handlers */
758 acpi_gbl_system_notify.handler = NULL;
759 acpi_gbl_device_notify.handler = NULL;
760 acpi_gbl_exception_handler = NULL;
761 acpi_gbl_init_handler = NULL;
762 acpi_gbl_table_handler = NULL;
764 /* Global Lock support */
766 acpi_gbl_global_lock_semaphore = NULL;
767 acpi_gbl_global_lock_mutex = NULL;
768 acpi_gbl_global_lock_acquired = FALSE;
769 acpi_gbl_global_lock_handle = 0;
771 /* Miscellaneous variables */
773 acpi_gbl_cm_single_step = FALSE;
774 acpi_gbl_db_terminate_threads = FALSE;
775 acpi_gbl_shutdown = FALSE;
776 acpi_gbl_ns_lookup_count = 0;
777 acpi_gbl_ps_find_count = 0;
778 acpi_gbl_acpi_hardware_present = TRUE;
779 acpi_gbl_last_owner_id_index = 0;
780 acpi_gbl_next_owner_id_offset = 0;
781 acpi_gbl_trace_method_name = 0;
782 acpi_gbl_trace_dbg_level = 0;
783 acpi_gbl_trace_dbg_layer = 0;
784 acpi_gbl_debugger_configuration = DEBUGGER_THREADING;
785 acpi_gbl_db_output_flags = ACPI_DB_CONSOLE_OUTPUT;
787 /* Hardware oriented */
789 acpi_gbl_events_initialized = FALSE;
790 acpi_gbl_system_awake_and_running = TRUE;
792 /* Namespace */
794 acpi_gbl_root_node = NULL;
795 acpi_gbl_root_node_struct.name.integer = ACPI_ROOT_NAME;
796 acpi_gbl_root_node_struct.descriptor_type = ACPI_DESC_TYPE_NAMED;
797 acpi_gbl_root_node_struct.type = ACPI_TYPE_DEVICE;
798 acpi_gbl_root_node_struct.child = NULL;
799 acpi_gbl_root_node_struct.peer = NULL;
800 acpi_gbl_root_node_struct.object = NULL;
801 acpi_gbl_root_node_struct.flags = ANOBJ_END_OF_PEER_LIST;
803 #ifdef ACPI_DEBUG_OUTPUT
804 acpi_gbl_lowest_stack_pointer = ACPI_CAST_PTR(acpi_size, ACPI_SIZE_MAX);
805 #endif
807 #ifdef ACPI_DBG_TRACK_ALLOCATIONS
808 acpi_gbl_display_final_mem_stats = FALSE;
809 #endif
811 return_ACPI_STATUS(AE_OK);
814 ACPI_EXPORT_SYMBOL(acpi_dbg_level)
815 ACPI_EXPORT_SYMBOL(acpi_dbg_layer)