ACPICA: Comment update; no functional change
[deliverable/linux.git] / drivers / acpi / acpica / utglobal.c
CommitLineData
1da177e4
LT
1/******************************************************************************
2 *
3 * Module Name: utglobal - Global variables for the ACPI subsystem
4 *
5 *****************************************************************************/
6
7/*
a8357b0c 8 * Copyright (C) 2000 - 2010, Intel Corp.
1da177e4
LT
9 * All rights reserved.
10 *
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.
25 *
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.
29 *
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.
42 */
43
44#define DEFINE_ACPI_GLOBALS
45
1da177e4 46#include <acpi/acpi.h>
e2f7a777
LB
47#include "accommon.h"
48#include "acnamesp.h"
1da177e4
LT
49
50#define _COMPONENT ACPI_UTILITIES
e97d6bf1 51ACPI_MODULE_NAME("utglobal")
1da177e4 52
44f6c012 53/*******************************************************************************
1da177e4
LT
54 *
55 * Static global variable initialization.
56 *
57 ******************************************************************************/
1da177e4
LT
58/*
59 * We want the debug switches statically initialized so they
60 * are already set when the debugger is entered.
61 */
1da177e4 62/* Debug switch - level and trace mask */
4be44fcd 63u32 acpi_dbg_level = ACPI_DEBUG_DEFAULT;
1da177e4
LT
64
65/* Debug switch - layer (component) mask */
66
e76f4276 67u32 acpi_dbg_layer = 0;
4be44fcd 68u32 acpi_gbl_nesting_level = 0;
1da177e4
LT
69
70/* Debugger globals */
71
4be44fcd
LB
72u8 acpi_gbl_db_terminate_threads = FALSE;
73u8 acpi_gbl_abort_method = FALSE;
74u8 acpi_gbl_method_executing = FALSE;
1da177e4
LT
75
76/* System flags */
77
4be44fcd 78u32 acpi_gbl_startup_flags = 0;
1da177e4
LT
79
80/* System starts uninitialized */
81
4be44fcd 82u8 acpi_gbl_shutdown = TRUE;
1da177e4 83
4be44fcd 84const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT] = {
1da177e4
LT
85 "\\_S0_",
86 "\\_S1_",
87 "\\_S2_",
88 "\\_S3_",
89 "\\_S4_",
90 "\\_S5_"
91};
92
15b8dd53
BM
93const char *acpi_gbl_lowest_dstate_names[ACPI_NUM_sx_w_METHODS] = {
94 "_S0W",
95 "_S1W",
96 "_S2W",
97 "_S3W",
98 "_S4W"
99};
100
101const char *acpi_gbl_highest_dstate_names[ACPI_NUM_sx_d_METHODS] = {
1da177e4
LT
102 "_S1D",
103 "_S2D",
104 "_S3D",
105 "_S4D"
106};
107
44f6c012 108/*******************************************************************************
1da177e4 109 *
84fb2c97
BM
110 * FUNCTION: acpi_format_exception
111 *
112 * PARAMETERS: Status - The acpi_status code to be formatted
113 *
114 * RETURN: A string containing the exception text. A valid pointer is
115 * always returned.
116 *
117 * DESCRIPTION: This function translates an ACPI exception into an ASCII string
118 * It is here instead of utxface.c so it is always present.
1da177e4
LT
119 *
120 ******************************************************************************/
121
84fb2c97
BM
122const char *acpi_format_exception(acpi_status status)
123{
124 const char *exception = NULL;
125
126 ACPI_FUNCTION_ENTRY();
127
128 exception = acpi_ut_validate_exception(status);
129 if (!exception) {
130
131 /* Exception code was not recognized */
132
133 ACPI_ERROR((AE_INFO,
134 "Unknown exception code: 0x%8.8X", status));
135
136 exception = "UNKNOWN_STATUS_CODE";
3e0d69ec 137 dump_stack();
84fb2c97
BM
138 }
139
140 return (ACPI_CAST_PTR(const char, exception));
141}
142
143ACPI_EXPORT_SYMBOL(acpi_format_exception)
144
145/*******************************************************************************
146 *
147 * Namespace globals
148 *
149 ******************************************************************************/
1da177e4
LT
150/*
151 * Predefined ACPI Names (Built-in to the Interpreter)
152 *
153 * NOTES:
154 * 1) _SB_ is defined to be a device to allow \_SB_._INI to be run
155 * during the initialization sequence.
156 * 2) _TZ_ is defined to be a thermal zone in order to allow ASL code to
157 * perform a Notify() operation on it.
158 */
0897831b
BM
159const struct acpi_predefined_names acpi_gbl_pre_defined_names[] = {
160 {"_GPE", ACPI_TYPE_LOCAL_SCOPE, NULL},
161 {"_PR_", ACPI_TYPE_LOCAL_SCOPE, NULL},
162 {"_SB_", ACPI_TYPE_DEVICE, NULL},
163 {"_SI_", ACPI_TYPE_LOCAL_SCOPE, NULL},
164 {"_TZ_", ACPI_TYPE_THERMAL, NULL},
165 {"_REV", ACPI_TYPE_INTEGER, (char *)ACPI_CA_SUPPORT_LEVEL},
166 {"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
167 {"_GL_", ACPI_TYPE_MUTEX, (char *)1},
1da177e4
LT
168
169#if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
0897831b 170 {"_OSI", ACPI_TYPE_METHOD, (char *)1},
1da177e4 171#endif
1da177e4 172
44f6c012
RM
173 /* Table terminator */
174
0897831b 175 {NULL, ACPI_TYPE_ANY, NULL}
44f6c012 176};
1da177e4
LT
177
178/*
179 * Properties of the ACPI Object Types, both internal and external.
180 * The table is indexed by values of acpi_object_type
181 */
4be44fcd
LB
182const u8 acpi_gbl_ns_properties[] = {
183 ACPI_NS_NORMAL, /* 00 Any */
184 ACPI_NS_NORMAL, /* 01 Number */
185 ACPI_NS_NORMAL, /* 02 String */
186 ACPI_NS_NORMAL, /* 03 Buffer */
187 ACPI_NS_NORMAL, /* 04 Package */
188 ACPI_NS_NORMAL, /* 05 field_unit */
189 ACPI_NS_NEWSCOPE, /* 06 Device */
190 ACPI_NS_NORMAL, /* 07 Event */
191 ACPI_NS_NEWSCOPE, /* 08 Method */
192 ACPI_NS_NORMAL, /* 09 Mutex */
193 ACPI_NS_NORMAL, /* 10 Region */
194 ACPI_NS_NEWSCOPE, /* 11 Power */
195 ACPI_NS_NEWSCOPE, /* 12 Processor */
196 ACPI_NS_NEWSCOPE, /* 13 Thermal */
197 ACPI_NS_NORMAL, /* 14 buffer_field */
198 ACPI_NS_NORMAL, /* 15 ddb_handle */
199 ACPI_NS_NORMAL, /* 16 Debug Object */
200 ACPI_NS_NORMAL, /* 17 def_field */
201 ACPI_NS_NORMAL, /* 18 bank_field */
202 ACPI_NS_NORMAL, /* 19 index_field */
203 ACPI_NS_NORMAL, /* 20 Reference */
204 ACPI_NS_NORMAL, /* 21 Alias */
205 ACPI_NS_NORMAL, /* 22 method_alias */
206 ACPI_NS_NORMAL, /* 23 Notify */
207 ACPI_NS_NORMAL, /* 24 Address Handler */
208 ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 25 Resource Desc */
209 ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 26 Resource Field */
210 ACPI_NS_NEWSCOPE, /* 27 Scope */
211 ACPI_NS_NORMAL, /* 28 Extra */
212 ACPI_NS_NORMAL, /* 29 Data */
213 ACPI_NS_NORMAL /* 30 Invalid */
1da177e4
LT
214};
215
1da177e4
LT
216/* Hex to ASCII conversion table */
217
4be44fcd
LB
218static const char acpi_gbl_hex_to_ascii[] = {
219 '0', '1', '2', '3', '4', '5', '6', '7',
220 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
44f6c012
RM
221};
222
44f6c012 223/*******************************************************************************
1da177e4
LT
224 *
225 * FUNCTION: acpi_ut_hex_to_ascii_char
226 *
227 * PARAMETERS: Integer - Contains the hex digit
228 * Position - bit position of the digit within the
44f6c012 229 * integer (multiple of 4)
1da177e4 230 *
44f6c012 231 * RETURN: The converted Ascii character
1da177e4 232 *
44f6c012 233 * DESCRIPTION: Convert a hex digit to an Ascii character
1da177e4 234 *
44f6c012 235 ******************************************************************************/
1da177e4 236
5df7e6cb 237char acpi_ut_hex_to_ascii_char(u64 integer, u32 position)
1da177e4
LT
238{
239
240 return (acpi_gbl_hex_to_ascii[(integer >> position) & 0xF]);
241}
242
1da177e4
LT
243/******************************************************************************
244 *
245 * Event and Hardware globals
246 *
247 ******************************************************************************/
248
4be44fcd 249struct acpi_bit_register_info acpi_gbl_bit_register_info[ACPI_NUM_BITREG] = {
1da177e4
LT
250 /* Name Parent Register Register Bit Position Register Bit Mask */
251
4be44fcd
LB
252 /* ACPI_BITREG_TIMER_STATUS */ {ACPI_REGISTER_PM1_STATUS,
253 ACPI_BITPOSITION_TIMER_STATUS,
254 ACPI_BITMASK_TIMER_STATUS},
255 /* ACPI_BITREG_BUS_MASTER_STATUS */ {ACPI_REGISTER_PM1_STATUS,
256 ACPI_BITPOSITION_BUS_MASTER_STATUS,
257 ACPI_BITMASK_BUS_MASTER_STATUS},
258 /* ACPI_BITREG_GLOBAL_LOCK_STATUS */ {ACPI_REGISTER_PM1_STATUS,
259 ACPI_BITPOSITION_GLOBAL_LOCK_STATUS,
260 ACPI_BITMASK_GLOBAL_LOCK_STATUS},
261 /* ACPI_BITREG_POWER_BUTTON_STATUS */ {ACPI_REGISTER_PM1_STATUS,
262 ACPI_BITPOSITION_POWER_BUTTON_STATUS,
263 ACPI_BITMASK_POWER_BUTTON_STATUS},
264 /* ACPI_BITREG_SLEEP_BUTTON_STATUS */ {ACPI_REGISTER_PM1_STATUS,
265 ACPI_BITPOSITION_SLEEP_BUTTON_STATUS,
266 ACPI_BITMASK_SLEEP_BUTTON_STATUS},
267 /* ACPI_BITREG_RT_CLOCK_STATUS */ {ACPI_REGISTER_PM1_STATUS,
268 ACPI_BITPOSITION_RT_CLOCK_STATUS,
269 ACPI_BITMASK_RT_CLOCK_STATUS},
270 /* ACPI_BITREG_WAKE_STATUS */ {ACPI_REGISTER_PM1_STATUS,
271 ACPI_BITPOSITION_WAKE_STATUS,
272 ACPI_BITMASK_WAKE_STATUS},
273 /* ACPI_BITREG_PCIEXP_WAKE_STATUS */ {ACPI_REGISTER_PM1_STATUS,
274 ACPI_BITPOSITION_PCIEXP_WAKE_STATUS,
275 ACPI_BITMASK_PCIEXP_WAKE_STATUS},
276
277 /* ACPI_BITREG_TIMER_ENABLE */ {ACPI_REGISTER_PM1_ENABLE,
278 ACPI_BITPOSITION_TIMER_ENABLE,
279 ACPI_BITMASK_TIMER_ENABLE},
280 /* ACPI_BITREG_GLOBAL_LOCK_ENABLE */ {ACPI_REGISTER_PM1_ENABLE,
281 ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE,
282 ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
283 /* ACPI_BITREG_POWER_BUTTON_ENABLE */ {ACPI_REGISTER_PM1_ENABLE,
284 ACPI_BITPOSITION_POWER_BUTTON_ENABLE,
285 ACPI_BITMASK_POWER_BUTTON_ENABLE},
286 /* ACPI_BITREG_SLEEP_BUTTON_ENABLE */ {ACPI_REGISTER_PM1_ENABLE,
287 ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE,
288 ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
289 /* ACPI_BITREG_RT_CLOCK_ENABLE */ {ACPI_REGISTER_PM1_ENABLE,
290 ACPI_BITPOSITION_RT_CLOCK_ENABLE,
291 ACPI_BITMASK_RT_CLOCK_ENABLE},
4be44fcd
LB
292 /* ACPI_BITREG_PCIEXP_WAKE_DISABLE */ {ACPI_REGISTER_PM1_ENABLE,
293 ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE,
294 ACPI_BITMASK_PCIEXP_WAKE_DISABLE},
295
296 /* ACPI_BITREG_SCI_ENABLE */ {ACPI_REGISTER_PM1_CONTROL,
297 ACPI_BITPOSITION_SCI_ENABLE,
298 ACPI_BITMASK_SCI_ENABLE},
299 /* ACPI_BITREG_BUS_MASTER_RLD */ {ACPI_REGISTER_PM1_CONTROL,
300 ACPI_BITPOSITION_BUS_MASTER_RLD,
301 ACPI_BITMASK_BUS_MASTER_RLD},
302 /* ACPI_BITREG_GLOBAL_LOCK_RELEASE */ {ACPI_REGISTER_PM1_CONTROL,
303 ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE,
304 ACPI_BITMASK_GLOBAL_LOCK_RELEASE},
82d79b86
BM
305 /* ACPI_BITREG_SLEEP_TYPE */ {ACPI_REGISTER_PM1_CONTROL,
306 ACPI_BITPOSITION_SLEEP_TYPE,
307 ACPI_BITMASK_SLEEP_TYPE},
4be44fcd
LB
308 /* ACPI_BITREG_SLEEP_ENABLE */ {ACPI_REGISTER_PM1_CONTROL,
309 ACPI_BITPOSITION_SLEEP_ENABLE,
310 ACPI_BITMASK_SLEEP_ENABLE},
311
312 /* ACPI_BITREG_ARB_DIS */ {ACPI_REGISTER_PM2_CONTROL,
313 ACPI_BITPOSITION_ARB_DISABLE,
314 ACPI_BITMASK_ARB_DISABLE}
1da177e4
LT
315};
316
4be44fcd
LB
317struct acpi_fixed_event_info acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS] = {
318 /* ACPI_EVENT_PMTIMER */ {ACPI_BITREG_TIMER_STATUS,
319 ACPI_BITREG_TIMER_ENABLE,
320 ACPI_BITMASK_TIMER_STATUS,
321 ACPI_BITMASK_TIMER_ENABLE},
322 /* ACPI_EVENT_GLOBAL */ {ACPI_BITREG_GLOBAL_LOCK_STATUS,
323 ACPI_BITREG_GLOBAL_LOCK_ENABLE,
324 ACPI_BITMASK_GLOBAL_LOCK_STATUS,
325 ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
326 /* ACPI_EVENT_POWER_BUTTON */ {ACPI_BITREG_POWER_BUTTON_STATUS,
327 ACPI_BITREG_POWER_BUTTON_ENABLE,
328 ACPI_BITMASK_POWER_BUTTON_STATUS,
329 ACPI_BITMASK_POWER_BUTTON_ENABLE},
330 /* ACPI_EVENT_SLEEP_BUTTON */ {ACPI_BITREG_SLEEP_BUTTON_STATUS,
331 ACPI_BITREG_SLEEP_BUTTON_ENABLE,
332 ACPI_BITMASK_SLEEP_BUTTON_STATUS,
333 ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
334 /* ACPI_EVENT_RTC */ {ACPI_BITREG_RT_CLOCK_STATUS,
335 ACPI_BITREG_RT_CLOCK_ENABLE,
336 ACPI_BITMASK_RT_CLOCK_STATUS,
337 ACPI_BITMASK_RT_CLOCK_ENABLE},
1da177e4
LT
338};
339
44f6c012 340/*******************************************************************************
1da177e4
LT
341 *
342 * FUNCTION: acpi_ut_get_region_name
343 *
344 * PARAMETERS: None.
345 *
346 * RETURN: Status
347 *
348 * DESCRIPTION: Translate a Space ID into a name string (Debug only)
349 *
44f6c012 350 ******************************************************************************/
1da177e4
LT
351
352/* Region type decoding */
353
4be44fcd 354const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS] = {
1da177e4
LT
355 "SystemMemory",
356 "SystemIO",
357 "PCI_Config",
358 "EmbeddedControl",
359 "SMBus",
34830726 360 "SystemCMOS",
1da177e4 361 "PCIBARTarget",
3db20bed 362 "IPMI",
1da177e4 363 "DataTable"
1da177e4
LT
364};
365
4be44fcd 366char *acpi_ut_get_region_name(u8 space_id)
1da177e4
LT
367{
368
4be44fcd 369 if (space_id >= ACPI_USER_REGION_BEGIN) {
b229cf92 370 return ("UserDefinedRegion");
4be44fcd 371 } else if (space_id >= ACPI_NUM_PREDEFINED_REGIONS) {
b229cf92 372 return ("InvalidSpaceId");
1da177e4
LT
373 }
374
defba1d8 375 return (ACPI_CAST_PTR(char, acpi_gbl_region_types[space_id]));
1da177e4
LT
376}
377
44f6c012 378/*******************************************************************************
1da177e4
LT
379 *
380 * FUNCTION: acpi_ut_get_event_name
381 *
382 * PARAMETERS: None.
383 *
384 * RETURN: Status
385 *
386 * DESCRIPTION: Translate a Event ID into a name string (Debug only)
387 *
44f6c012 388 ******************************************************************************/
1da177e4
LT
389
390/* Event type decoding */
391
4be44fcd 392static const char *acpi_gbl_event_types[ACPI_NUM_FIXED_EVENTS] = {
1da177e4 393 "PM_Timer",
0897831b
BM
394 "GlobalLock",
395 "PowerButton",
396 "SleepButton",
397 "RealTimeClock",
1da177e4
LT
398};
399
4be44fcd 400char *acpi_ut_get_event_name(u32 event_id)
1da177e4
LT
401{
402
4be44fcd 403 if (event_id > ACPI_EVENT_MAX) {
b229cf92 404 return ("InvalidEventID");
1da177e4
LT
405 }
406
4a90c7e8 407 return (ACPI_CAST_PTR(char, acpi_gbl_event_types[event_id]));
1da177e4
LT
408}
409
44f6c012 410/*******************************************************************************
1da177e4
LT
411 *
412 * FUNCTION: acpi_ut_get_type_name
413 *
414 * PARAMETERS: None.
415 *
416 * RETURN: Status
417 *
418 * DESCRIPTION: Translate a Type ID into a name string (Debug only)
419 *
44f6c012 420 ******************************************************************************/
1da177e4
LT
421
422/*
423 * Elements of acpi_gbl_ns_type_names below must match
424 * one-to-one with values of acpi_object_type
425 *
44f6c012
RM
426 * The type ACPI_TYPE_ANY (Untyped) is used as a "don't care" when searching;
427 * when stored in a table it really means that we have thus far seen no
428 * evidence to indicate what type is actually going to be stored for this entry.
1da177e4 429 */
4be44fcd 430static const char acpi_gbl_bad_type[] = "UNDEFINED";
1da177e4 431
44f6c012
RM
432/* Printable names of the ACPI object types */
433
4be44fcd 434static const char *acpi_gbl_ns_type_names[] = {
1da177e4
LT
435 /* 00 */ "Untyped",
436 /* 01 */ "Integer",
437 /* 02 */ "String",
438 /* 03 */ "Buffer",
439 /* 04 */ "Package",
0897831b 440 /* 05 */ "FieldUnit",
1da177e4
LT
441 /* 06 */ "Device",
442 /* 07 */ "Event",
443 /* 08 */ "Method",
444 /* 09 */ "Mutex",
445 /* 10 */ "Region",
446 /* 11 */ "Power",
447 /* 12 */ "Processor",
448 /* 13 */ "Thermal",
0897831b
BM
449 /* 14 */ "BufferField",
450 /* 15 */ "DdbHandle",
451 /* 16 */ "DebugObject",
452 /* 17 */ "RegionField",
453 /* 18 */ "BankField",
454 /* 19 */ "IndexField",
1da177e4
LT
455 /* 20 */ "Reference",
456 /* 21 */ "Alias",
0897831b 457 /* 22 */ "MethodAlias",
1da177e4 458 /* 23 */ "Notify",
0897831b
BM
459 /* 24 */ "AddrHandler",
460 /* 25 */ "ResourceDesc",
461 /* 26 */ "ResourceFld",
1da177e4
LT
462 /* 27 */ "Scope",
463 /* 28 */ "Extra",
464 /* 29 */ "Data",
465 /* 30 */ "Invalid"
466};
467
4be44fcd 468char *acpi_ut_get_type_name(acpi_object_type type)
1da177e4
LT
469{
470
4be44fcd 471 if (type > ACPI_TYPE_INVALID) {
4a90c7e8 472 return (ACPI_CAST_PTR(char, acpi_gbl_bad_type));
1da177e4
LT
473 }
474
4a90c7e8 475 return (ACPI_CAST_PTR(char, acpi_gbl_ns_type_names[type]));
1da177e4
LT
476}
477
4be44fcd 478char *acpi_ut_get_object_type_name(union acpi_operand_object *obj_desc)
1da177e4
LT
479{
480
4be44fcd 481 if (!obj_desc) {
1da177e4
LT
482 return ("[NULL Object Descriptor]");
483 }
484
3371c19c 485 return (acpi_ut_get_type_name(obj_desc->common.type));
1da177e4
LT
486}
487
44f6c012 488/*******************************************************************************
1da177e4
LT
489 *
490 * FUNCTION: acpi_ut_get_node_name
491 *
492 * PARAMETERS: Object - A namespace node
493 *
494 * RETURN: Pointer to a string
495 *
496 * DESCRIPTION: Validate the node and return the node's ACPI name.
497 *
44f6c012 498 ******************************************************************************/
1da177e4 499
4be44fcd 500char *acpi_ut_get_node_name(void *object)
1da177e4 501{
4be44fcd 502 struct acpi_namespace_node *node = (struct acpi_namespace_node *)object;
1da177e4
LT
503
504 /* Must return a string of exactly 4 characters == ACPI_NAME_SIZE */
505
4be44fcd 506 if (!object) {
1da177e4
LT
507 return ("NULL");
508 }
509
510 /* Check for Root node */
511
4be44fcd 512 if ((object == ACPI_ROOT_OBJECT) || (object == acpi_gbl_root_node)) {
1da177e4
LT
513 return ("\"\\\" ");
514 }
515
516 /* Descriptor must be a namespace node */
517
61686124 518 if (ACPI_GET_DESCRIPTOR_TYPE(node) != ACPI_DESC_TYPE_NAMED) {
1da177e4
LT
519 return ("####");
520 }
521
522 /* Name must be a valid ACPI name */
523
c51a4de8 524 if (!acpi_ut_valid_acpi_name(node->name.integer)) {
3d81b236 525 node->name.integer = acpi_ut_repair_name(node->name.ascii);
1da177e4
LT
526 }
527
528 /* Return the name */
529
530 return (node->name.ascii);
531}
532
44f6c012 533/*******************************************************************************
1da177e4
LT
534 *
535 * FUNCTION: acpi_ut_get_descriptor_name
536 *
537 * PARAMETERS: Object - An ACPI object
538 *
539 * RETURN: Pointer to a string
540 *
541 * DESCRIPTION: Validate object and return the descriptor type
542 *
44f6c012
RM
543 ******************************************************************************/
544
545/* Printable names of object descriptor types */
1da177e4 546
4be44fcd 547static const char *acpi_gbl_desc_type_names[] = {
1da177e4
LT
548 /* 00 */ "Invalid",
549 /* 01 */ "Cached",
550 /* 02 */ "State-Generic",
551 /* 03 */ "State-Update",
552 /* 04 */ "State-Package",
553 /* 05 */ "State-Control",
0897831b
BM
554 /* 06 */ "State-RootParseScope",
555 /* 07 */ "State-ParseScope",
556 /* 08 */ "State-WalkScope",
1da177e4
LT
557 /* 09 */ "State-Result",
558 /* 10 */ "State-Notify",
559 /* 11 */ "State-Thread",
560 /* 12 */ "Walk",
561 /* 13 */ "Parser",
562 /* 14 */ "Operand",
563 /* 15 */ "Node"
564};
565
4be44fcd 566char *acpi_ut_get_descriptor_name(void *object)
1da177e4
LT
567{
568
4be44fcd 569 if (!object) {
1da177e4
LT
570 return ("NULL OBJECT");
571 }
572
4be44fcd 573 if (ACPI_GET_DESCRIPTOR_TYPE(object) > ACPI_DESC_TYPE_MAX) {
defba1d8 574 return (ACPI_CAST_PTR(char, acpi_gbl_bad_type));
1da177e4
LT
575 }
576
defba1d8
BM
577 return (ACPI_CAST_PTR(char,
578 acpi_gbl_desc_type_names[ACPI_GET_DESCRIPTOR_TYPE
579 (object)]));
1da177e4
LT
580
581}
582
f02a99ac
BM
583/*******************************************************************************
584 *
585 * FUNCTION: acpi_ut_get_reference_name
586 *
587 * PARAMETERS: Object - An ACPI reference object
588 *
589 * RETURN: Pointer to a string
590 *
591 * DESCRIPTION: Decode a reference object sub-type to a string.
592 *
593 ******************************************************************************/
594
595/* Printable names of reference object sub-types */
596
1044f1f6
BM
597static const char *acpi_gbl_ref_class_names[] = {
598 /* 00 */ "Local",
599 /* 01 */ "Argument",
600 /* 02 */ "RefOf",
601 /* 03 */ "Index",
602 /* 04 */ "DdbHandle",
603 /* 05 */ "Named Object",
604 /* 06 */ "Debug"
605};
606
f02a99ac
BM
607const char *acpi_ut_get_reference_name(union acpi_operand_object *object)
608{
1044f1f6
BM
609 if (!object)
610 return "NULL Object";
f02a99ac 611
1044f1f6
BM
612 if (ACPI_GET_DESCRIPTOR_TYPE(object) != ACPI_DESC_TYPE_OPERAND)
613 return "Not an Operand object";
f02a99ac 614
1044f1f6
BM
615 if (object->common.type != ACPI_TYPE_LOCAL_REFERENCE)
616 return "Not a Reference object";
f02a99ac 617
1044f1f6
BM
618 if (object->reference.class > ACPI_REFCLASS_MAX)
619 return "Unknown Reference class";
f02a99ac 620
1044f1f6 621 return acpi_gbl_ref_class_names[object->reference.class];
f02a99ac
BM
622}
623
1da177e4
LT
624#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
625/*
626 * Strings and procedures used for debug only
627 */
628
44f6c012 629/*******************************************************************************
1da177e4
LT
630 *
631 * FUNCTION: acpi_ut_get_mutex_name
632 *
44f6c012 633 * PARAMETERS: mutex_id - The predefined ID for this mutex.
1da177e4 634 *
44f6c012
RM
635 * RETURN: String containing the name of the mutex. Always returns a valid
636 * pointer.
1da177e4
LT
637 *
638 * DESCRIPTION: Translate a mutex ID into a name string (Debug only)
639 *
44f6c012 640 ******************************************************************************/
1da177e4 641
4be44fcd 642char *acpi_ut_get_mutex_name(u32 mutex_id)
1da177e4
LT
643{
644
4c90ece2 645 if (mutex_id > ACPI_MAX_MUTEX) {
1da177e4
LT
646 return ("Invalid Mutex ID");
647 }
648
649 return (acpi_gbl_mutex_names[mutex_id]);
650}
514d18d7
ZR
651
652/*******************************************************************************
653 *
654 * FUNCTION: acpi_ut_get_notify_name
655 *
656 * PARAMETERS: notify_value - Value from the Notify() request
657 *
658 * RETURN: String corresponding to the Notify Value.
659 *
660 * DESCRIPTION: Translate a Notify Value to a notify namestring.
661 *
662 ******************************************************************************/
663
664/* Names for Notify() values, used for debug output */
665
666static const char *acpi_gbl_notify_value_names[] = {
667 "Bus Check",
668 "Device Check",
669 "Device Wake",
670 "Eject Request",
671 "Device Check Light",
672 "Frequency Mismatch",
673 "Bus Mode Mismatch",
674 "Power Fault",
675 "Capabilities Check",
676 "Device PLD Check",
677 "Reserved",
678 "System Locality Update"
679};
680
681const char *acpi_ut_get_notify_name(u32 notify_value)
682{
683
684 if (notify_value <= ACPI_NOTIFY_MAX) {
685 return (acpi_gbl_notify_value_names[notify_value]);
686 } else if (notify_value <= ACPI_MAX_SYS_NOTIFY) {
687 return ("Reserved");
688 } else { /* Greater or equal to 0x80 */
689
690 return ("**Device Specific**");
691 }
692}
1da177e4
LT
693#endif
694
44f6c012 695/*******************************************************************************
1da177e4
LT
696 *
697 * FUNCTION: acpi_ut_valid_object_type
698 *
699 * PARAMETERS: Type - Object type to be validated
700 *
44f6c012 701 * RETURN: TRUE if valid object type, FALSE otherwise
1da177e4
LT
702 *
703 * DESCRIPTION: Validate an object type
704 *
44f6c012 705 ******************************************************************************/
1da177e4 706
4be44fcd 707u8 acpi_ut_valid_object_type(acpi_object_type type)
1da177e4
LT
708{
709
4be44fcd 710 if (type > ACPI_TYPE_LOCAL_MAX) {
52fc0b02 711
1da177e4
LT
712 /* Note: Assumes all TYPEs are contiguous (external/local) */
713
714 return (FALSE);
715 }
716
717 return (TRUE);
718}
719
44f6c012 720/*******************************************************************************
1da177e4
LT
721 *
722 * FUNCTION: acpi_ut_init_globals
723 *
44f6c012
RM
724 * PARAMETERS: None
725 *
b417d40b 726 * RETURN: Status
1da177e4
LT
727 *
728 * DESCRIPTION: Init library globals. All globals that require specific
729 * initialization should be initialized here!
730 *
44f6c012 731 ******************************************************************************/
1da177e4 732
b417d40b 733acpi_status acpi_ut_init_globals(void)
1da177e4 734{
4be44fcd
LB
735 acpi_status status;
736 u32 i;
1da177e4 737
b229cf92 738 ACPI_FUNCTION_TRACE(ut_init_globals);
1da177e4 739
73459f73
RM
740 /* Create all memory caches */
741
4be44fcd
LB
742 status = acpi_ut_create_caches();
743 if (ACPI_FAILURE(status)) {
b417d40b 744 return_ACPI_STATUS(status);
73459f73 745 }
1da177e4 746
1da177e4
LT
747 /* Mutex locked flags */
748
4c90ece2 749 for (i = 0; i < ACPI_NUM_MUTEX; i++) {
4be44fcd
LB
750 acpi_gbl_mutex_info[i].mutex = NULL;
751 acpi_gbl_mutex_info[i].thread_id = ACPI_MUTEX_NOT_ACQUIRED;
752 acpi_gbl_mutex_info[i].use_count = 0;
1da177e4
LT
753 }
754
28f55ebc
BM
755 for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++) {
756 acpi_gbl_owner_id_mask[i] = 0;
757 }
ec41f193
BM
758
759 /* Last owner_iD is never valid */
760
761 acpi_gbl_owner_id_mask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000;
28f55ebc 762
1da177e4
LT
763 /* GPE support */
764
4be44fcd
LB
765 acpi_gbl_gpe_xrupt_list_head = NULL;
766 acpi_gbl_gpe_fadt_blocks[0] = NULL;
767 acpi_gbl_gpe_fadt_blocks[1] = NULL;
e97d6bf1 768 acpi_current_gpe_count = 0;
1da177e4 769
3e08e2d2 770 /* Global handlers */
1da177e4 771
4be44fcd
LB
772 acpi_gbl_system_notify.handler = NULL;
773 acpi_gbl_device_notify.handler = NULL;
774 acpi_gbl_exception_handler = NULL;
775 acpi_gbl_init_handler = NULL;
3e08e2d2 776 acpi_gbl_table_handler = NULL;
b0ed7a91 777 acpi_gbl_interface_handler = NULL;
1da177e4 778
1da177e4
LT
779 /* Global Lock support */
780
967440e3 781 acpi_gbl_global_lock_semaphore = NULL;
c81da666 782 acpi_gbl_global_lock_mutex = NULL;
4be44fcd 783 acpi_gbl_global_lock_acquired = FALSE;
4be44fcd 784 acpi_gbl_global_lock_handle = 0;
009c4cbe 785 acpi_gbl_global_lock_present = FALSE;
1da177e4
LT
786
787 /* Miscellaneous variables */
788
43323cb4 789 acpi_gbl_DSDT = NULL;
4be44fcd
LB
790 acpi_gbl_cm_single_step = FALSE;
791 acpi_gbl_db_terminate_threads = FALSE;
792 acpi_gbl_shutdown = FALSE;
793 acpi_gbl_ns_lookup_count = 0;
794 acpi_gbl_ps_find_count = 0;
795 acpi_gbl_acpi_hardware_present = TRUE;
28f55ebc
BM
796 acpi_gbl_last_owner_id_index = 0;
797 acpi_gbl_next_owner_id_offset = 0;
50eca3eb
BM
798 acpi_gbl_trace_method_name = 0;
799 acpi_gbl_trace_dbg_level = 0;
800 acpi_gbl_trace_dbg_layer = 0;
4be44fcd
LB
801 acpi_gbl_debugger_configuration = DEBUGGER_THREADING;
802 acpi_gbl_db_output_flags = ACPI_DB_CONSOLE_OUTPUT;
7f071903 803 acpi_gbl_osi_data = 0;
b0ed7a91 804 acpi_gbl_osi_mutex = NULL;
1da177e4
LT
805
806 /* Hardware oriented */
807
4be44fcd
LB
808 acpi_gbl_events_initialized = FALSE;
809 acpi_gbl_system_awake_and_running = TRUE;
1da177e4
LT
810
811 /* Namespace */
812
7f0c826a 813 acpi_gbl_module_code_list = NULL;
4be44fcd 814 acpi_gbl_root_node = NULL;
1da177e4 815 acpi_gbl_root_node_struct.name.integer = ACPI_ROOT_NAME;
61686124 816 acpi_gbl_root_node_struct.descriptor_type = ACPI_DESC_TYPE_NAMED;
4be44fcd 817 acpi_gbl_root_node_struct.type = ACPI_TYPE_DEVICE;
c45b5c09 818 acpi_gbl_root_node_struct.parent = NULL;
4be44fcd
LB
819 acpi_gbl_root_node_struct.child = NULL;
820 acpi_gbl_root_node_struct.peer = NULL;
821 acpi_gbl_root_node_struct.object = NULL;
1da177e4
LT
822
823#ifdef ACPI_DEBUG_OUTPUT
1d18c058 824 acpi_gbl_lowest_stack_pointer = ACPI_CAST_PTR(acpi_size, ACPI_SIZE_MAX);
1da177e4
LT
825#endif
826
d41eb99b
BM
827#ifdef ACPI_DBG_TRACK_ALLOCATIONS
828 acpi_gbl_display_final_mem_stats = FALSE;
829#endif
830
b417d40b 831 return_ACPI_STATUS(AE_OK);
1da177e4 832}
8313524a 833
e97d6bf1 834ACPI_EXPORT_SYMBOL(acpi_gbl_FADT)
8313524a 835ACPI_EXPORT_SYMBOL(acpi_dbg_level)
1044f1f6 836ACPI_EXPORT_SYMBOL(acpi_dbg_layer)
e97d6bf1 837ACPI_EXPORT_SYMBOL(acpi_current_gpe_count)
This page took 0.459036 seconds and 5 git commands to generate.