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