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