blob: 5bc8da7acc6c9b9f147d56efab17db40e5caf1b8 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/******************************************************************************
2 *
3 * Module Name: utglobal - Global variables for the ACPI subsystem
4 *
5 *****************************************************************************/
6
7/*
Bob Moore4a90c7e2006-01-13 16:22:00 -05008 * Copyright (C) 2000 - 2006, R. Byron Moore
Linus Torvalds1da177e2005-04-16 15:20:36 -07009 * 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
Linus Torvalds1da177e2005-04-16 15:20:36 -070046#include <acpi/acpi.h>
47#include <acpi/acnamesp.h>
48
49#define _COMPONENT ACPI_UTILITIES
Len Brown4be44fc2005-08-05 00:44:28 -040050ACPI_MODULE_NAME("utglobal")
Linus Torvalds1da177e2005-04-16 15:20:36 -070051
Robert Moore44f6c012005-04-18 22:49:35 -040052/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -070053 *
54 * FUNCTION: acpi_format_exception
55 *
56 * PARAMETERS: Status - The acpi_status code to be formatted
57 *
Robert Moore44f6c012005-04-18 22:49:35 -040058 * RETURN: A string containing the exception text. A valid pointer is
59 * always returned.
Linus Torvalds1da177e2005-04-16 15:20:36 -070060 *
61 * DESCRIPTION: This function translates an ACPI exception into an ASCII string.
62 *
63 ******************************************************************************/
Len Brown4be44fc2005-08-05 00:44:28 -040064const char *acpi_format_exception(acpi_status status)
Linus Torvalds1da177e2005-04-16 15:20:36 -070065{
Len Brown4be44fc2005-08-05 00:44:28 -040066 acpi_status sub_status;
67 const char *exception = NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -070068
Bob Moore4a90c7e2006-01-13 16:22:00 -050069 ACPI_FUNCTION_ENTRY();
Linus Torvalds1da177e2005-04-16 15:20:36 -070070
Bob Moore4a90c7e2006-01-13 16:22:00 -050071 /*
72 * Status is composed of two parts, a "type" and an actual code
73 */
Linus Torvalds1da177e2005-04-16 15:20:36 -070074 sub_status = (status & ~AE_CODE_MASK);
75
76 switch (status & AE_CODE_MASK) {
77 case AE_CODE_ENVIRONMENTAL:
78
79 if (sub_status <= AE_CODE_ENV_MAX) {
Len Brown4be44fc2005-08-05 00:44:28 -040080 exception = acpi_gbl_exception_names_env[sub_status];
Linus Torvalds1da177e2005-04-16 15:20:36 -070081 }
Robert Moore44f6c012005-04-18 22:49:35 -040082 break;
Linus Torvalds1da177e2005-04-16 15:20:36 -070083
84 case AE_CODE_PROGRAMMER:
85
86 if (sub_status <= AE_CODE_PGM_MAX) {
Len Brown4be44fc2005-08-05 00:44:28 -040087 exception =
88 acpi_gbl_exception_names_pgm[sub_status - 1];
Linus Torvalds1da177e2005-04-16 15:20:36 -070089 }
Robert Moore44f6c012005-04-18 22:49:35 -040090 break;
Linus Torvalds1da177e2005-04-16 15:20:36 -070091
92 case AE_CODE_ACPI_TABLES:
93
94 if (sub_status <= AE_CODE_TBL_MAX) {
Len Brown4be44fc2005-08-05 00:44:28 -040095 exception =
96 acpi_gbl_exception_names_tbl[sub_status - 1];
Linus Torvalds1da177e2005-04-16 15:20:36 -070097 }
Robert Moore44f6c012005-04-18 22:49:35 -040098 break;
Linus Torvalds1da177e2005-04-16 15:20:36 -070099
100 case AE_CODE_AML:
101
102 if (sub_status <= AE_CODE_AML_MAX) {
Len Brown4be44fc2005-08-05 00:44:28 -0400103 exception =
104 acpi_gbl_exception_names_aml[sub_status - 1];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700105 }
Robert Moore44f6c012005-04-18 22:49:35 -0400106 break;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700107
108 case AE_CODE_CONTROL:
109
110 if (sub_status <= AE_CODE_CTRL_MAX) {
Len Brown4be44fc2005-08-05 00:44:28 -0400111 exception =
112 acpi_gbl_exception_names_ctrl[sub_status - 1];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700113 }
Robert Moore44f6c012005-04-18 22:49:35 -0400114 break;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700115
116 default:
Robert Moore44f6c012005-04-18 22:49:35 -0400117 break;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700118 }
119
Robert Moore44f6c012005-04-18 22:49:35 -0400120 if (!exception) {
Bob Moore52fc0b02006-10-02 00:00:00 -0400121
Robert Moore44f6c012005-04-18 22:49:35 -0400122 /* Exception code was not recognized */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700123
Bob Mooreb8e4d892006-01-27 16:43:00 -0500124 ACPI_ERROR((AE_INFO,
125 "Unknown exception code: 0x%8.8X", status));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700126
Bob Moore4a90c7e2006-01-13 16:22:00 -0500127 exception = "UNKNOWN_STATUS_CODE";
Robert Moore44f6c012005-04-18 22:49:35 -0400128 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700129
Bob Moore4a90c7e2006-01-13 16:22:00 -0500130 return (ACPI_CAST_PTR(const char, exception));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700131}
132
Robert Moore44f6c012005-04-18 22:49:35 -0400133/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700134 *
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 */
Len Brown4be44fc2005-08-05 00:44:28 -0400145u32 acpi_dbg_level = ACPI_DEBUG_DEFAULT;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700146
147/* Debug switch - layer (component) mask */
148
Len Brown4be44fc2005-08-05 00:44:28 -0400149u32 acpi_dbg_layer = ACPI_COMPONENT_DEFAULT | ACPI_ALL_DRIVERS;
Len Brown4be44fc2005-08-05 00:44:28 -0400150u32 acpi_gbl_nesting_level = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700151
152/* Debugger globals */
153
Len Brown4be44fc2005-08-05 00:44:28 -0400154u8 acpi_gbl_db_terminate_threads = FALSE;
155u8 acpi_gbl_abort_method = FALSE;
156u8 acpi_gbl_method_executing = FALSE;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700157
158/* System flags */
159
Len Brown4be44fc2005-08-05 00:44:28 -0400160u32 acpi_gbl_startup_flags = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700161
162/* System starts uninitialized */
163
Len Brown4be44fc2005-08-05 00:44:28 -0400164u8 acpi_gbl_shutdown = TRUE;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700165
Len Brown4be44fc2005-08-05 00:44:28 -0400166const u8 acpi_gbl_decode_to8bit[8] = { 1, 2, 4, 8, 16, 32, 64, 128 };
Linus Torvalds1da177e2005-04-16 15:20:36 -0700167
Len Brown4be44fc2005-08-05 00:44:28 -0400168const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700169 "\\_S0_",
170 "\\_S1_",
171 "\\_S2_",
172 "\\_S3_",
173 "\\_S4_",
174 "\\_S5_"
175};
176
Len Brown4be44fc2005-08-05 00:44:28 -0400177const char *acpi_gbl_highest_dstate_names[4] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700178 "_S1D",
179 "_S2D",
180 "_S3D",
181 "_S4D"
182};
183
184/*
185 * Strings supported by the _OSI predefined (internal) method.
186 * When adding strings, be sure to update ACPI_NUM_OSI_STRINGS.
187 */
Len Brown4be44fc2005-08-05 00:44:28 -0400188const char *acpi_gbl_valid_osi_strings[ACPI_NUM_OSI_STRINGS] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700189 /* Operating System Vendor Strings */
190
191 "Linux",
192 "Windows 2000",
193 "Windows 2001",
194 "Windows 2001.1",
195 "Windows 2001 SP0",
196 "Windows 2001 SP1",
197 "Windows 2001 SP2",
198 "Windows 2001 SP3",
199 "Windows 2001 SP4",
200
201 /* Feature Group Strings */
202
203 "Extended Address Space Descriptor"
204};
205
Robert Moore44f6c012005-04-18 22:49:35 -0400206/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700207 *
208 * Namespace globals
209 *
210 ******************************************************************************/
211
Linus Torvalds1da177e2005-04-16 15:20:36 -0700212/*
213 * Predefined ACPI Names (Built-in to the Interpreter)
214 *
215 * NOTES:
216 * 1) _SB_ is defined to be a device to allow \_SB_._INI to be run
217 * during the initialization sequence.
218 * 2) _TZ_ is defined to be a thermal zone in order to allow ASL code to
219 * perform a Notify() operation on it.
220 */
Bob Moore08978312005-10-21 00:00:00 -0400221const struct acpi_predefined_names acpi_gbl_pre_defined_names[] = {
222 {"_GPE", ACPI_TYPE_LOCAL_SCOPE, NULL},
223 {"_PR_", ACPI_TYPE_LOCAL_SCOPE, NULL},
224 {"_SB_", ACPI_TYPE_DEVICE, NULL},
225 {"_SI_", ACPI_TYPE_LOCAL_SCOPE, NULL},
226 {"_TZ_", ACPI_TYPE_THERMAL, NULL},
227 {"_REV", ACPI_TYPE_INTEGER, (char *)ACPI_CA_SUPPORT_LEVEL},
228 {"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
229 {"_GL_", ACPI_TYPE_MUTEX, (char *)1},
Linus Torvalds1da177e2005-04-16 15:20:36 -0700230
231#if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
Bob Moore08978312005-10-21 00:00:00 -0400232 {"_OSI", ACPI_TYPE_METHOD, (char *)1},
Linus Torvalds1da177e2005-04-16 15:20:36 -0700233#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -0700234
Robert Moore44f6c012005-04-18 22:49:35 -0400235 /* Table terminator */
236
Bob Moore08978312005-10-21 00:00:00 -0400237 {NULL, ACPI_TYPE_ANY, NULL}
Robert Moore44f6c012005-04-18 22:49:35 -0400238};
Linus Torvalds1da177e2005-04-16 15:20:36 -0700239
240/*
241 * Properties of the ACPI Object Types, both internal and external.
242 * The table is indexed by values of acpi_object_type
243 */
Len Brown4be44fc2005-08-05 00:44:28 -0400244const u8 acpi_gbl_ns_properties[] = {
245 ACPI_NS_NORMAL, /* 00 Any */
246 ACPI_NS_NORMAL, /* 01 Number */
247 ACPI_NS_NORMAL, /* 02 String */
248 ACPI_NS_NORMAL, /* 03 Buffer */
249 ACPI_NS_NORMAL, /* 04 Package */
250 ACPI_NS_NORMAL, /* 05 field_unit */
251 ACPI_NS_NEWSCOPE, /* 06 Device */
252 ACPI_NS_NORMAL, /* 07 Event */
253 ACPI_NS_NEWSCOPE, /* 08 Method */
254 ACPI_NS_NORMAL, /* 09 Mutex */
255 ACPI_NS_NORMAL, /* 10 Region */
256 ACPI_NS_NEWSCOPE, /* 11 Power */
257 ACPI_NS_NEWSCOPE, /* 12 Processor */
258 ACPI_NS_NEWSCOPE, /* 13 Thermal */
259 ACPI_NS_NORMAL, /* 14 buffer_field */
260 ACPI_NS_NORMAL, /* 15 ddb_handle */
261 ACPI_NS_NORMAL, /* 16 Debug Object */
262 ACPI_NS_NORMAL, /* 17 def_field */
263 ACPI_NS_NORMAL, /* 18 bank_field */
264 ACPI_NS_NORMAL, /* 19 index_field */
265 ACPI_NS_NORMAL, /* 20 Reference */
266 ACPI_NS_NORMAL, /* 21 Alias */
267 ACPI_NS_NORMAL, /* 22 method_alias */
268 ACPI_NS_NORMAL, /* 23 Notify */
269 ACPI_NS_NORMAL, /* 24 Address Handler */
270 ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 25 Resource Desc */
271 ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 26 Resource Field */
272 ACPI_NS_NEWSCOPE, /* 27 Scope */
273 ACPI_NS_NORMAL, /* 28 Extra */
274 ACPI_NS_NORMAL, /* 29 Data */
275 ACPI_NS_NORMAL /* 30 Invalid */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700276};
277
Linus Torvalds1da177e2005-04-16 15:20:36 -0700278/* Hex to ASCII conversion table */
279
Len Brown4be44fc2005-08-05 00:44:28 -0400280static const char acpi_gbl_hex_to_ascii[] = {
281 '0', '1', '2', '3', '4', '5', '6', '7',
282 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
Robert Moore44f6c012005-04-18 22:49:35 -0400283};
Linus Torvalds1da177e2005-04-16 15:20:36 -0700284
Robert Moore44f6c012005-04-18 22:49:35 -0400285/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700286 *
287 * FUNCTION: acpi_ut_hex_to_ascii_char
288 *
289 * PARAMETERS: Integer - Contains the hex digit
290 * Position - bit position of the digit within the
Robert Moore44f6c012005-04-18 22:49:35 -0400291 * integer (multiple of 4)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700292 *
Robert Moore44f6c012005-04-18 22:49:35 -0400293 * RETURN: The converted Ascii character
Linus Torvalds1da177e2005-04-16 15:20:36 -0700294 *
Robert Moore44f6c012005-04-18 22:49:35 -0400295 * DESCRIPTION: Convert a hex digit to an Ascii character
Linus Torvalds1da177e2005-04-16 15:20:36 -0700296 *
Robert Moore44f6c012005-04-18 22:49:35 -0400297 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700298
Len Brown4be44fc2005-08-05 00:44:28 -0400299char acpi_ut_hex_to_ascii_char(acpi_integer integer, u32 position)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700300{
301
302 return (acpi_gbl_hex_to_ascii[(integer >> position) & 0xF]);
303}
304
Robert Moore44f6c012005-04-18 22:49:35 -0400305/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700306 *
307 * Table name globals
308 *
309 * NOTE: This table includes ONLY the ACPI tables that the subsystem consumes.
310 * it is NOT an exhaustive list of all possible ACPI tables. All ACPI tables
311 * that are not used by the subsystem are simply ignored.
312 *
313 * Do NOT add any table to this list that is not consumed directly by this
Robert Moore44f6c012005-04-18 22:49:35 -0400314 * subsystem (No MADT, ECDT, SBST, etc.)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700315 *
316 ******************************************************************************/
317
Len Brown4be44fc2005-08-05 00:44:28 -0400318struct acpi_table_list acpi_gbl_table_lists[NUM_ACPI_TABLE_TYPES];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700319
Len Brown4be44fc2005-08-05 00:44:28 -0400320struct acpi_table_support acpi_gbl_table_data[NUM_ACPI_TABLE_TYPES] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700321 /*********** Name, Signature, Global typed pointer Signature size, Type How many allowed?, Contains valid AML? */
322
Len Brown4be44fc2005-08-05 00:44:28 -0400323 /* RSDP 0 */ {RSDP_NAME, RSDP_SIG, NULL, sizeof(RSDP_SIG) - 1,
324 ACPI_TABLE_ROOT | ACPI_TABLE_SINGLE}
325 ,
326 /* DSDT 1 */ {DSDT_SIG, DSDT_SIG, (void *)&acpi_gbl_DSDT,
327 sizeof(DSDT_SIG) - 1,
328 ACPI_TABLE_SECONDARY | ACPI_TABLE_SINGLE |
329 ACPI_TABLE_EXECUTABLE}
330 ,
331 /* FADT 2 */ {FADT_SIG, FADT_SIG, (void *)&acpi_gbl_FADT,
332 sizeof(FADT_SIG) - 1,
333 ACPI_TABLE_PRIMARY | ACPI_TABLE_SINGLE}
334 ,
335 /* FACS 3 */ {FACS_SIG, FACS_SIG, (void *)&acpi_gbl_FACS,
336 sizeof(FACS_SIG) - 1,
337 ACPI_TABLE_SECONDARY | ACPI_TABLE_SINGLE}
338 ,
339 /* PSDT 4 */ {PSDT_SIG, PSDT_SIG, NULL, sizeof(PSDT_SIG) - 1,
340 ACPI_TABLE_PRIMARY | ACPI_TABLE_MULTIPLE |
341 ACPI_TABLE_EXECUTABLE}
342 ,
343 /* SSDT 5 */ {SSDT_SIG, SSDT_SIG, NULL, sizeof(SSDT_SIG) - 1,
344 ACPI_TABLE_PRIMARY | ACPI_TABLE_MULTIPLE |
345 ACPI_TABLE_EXECUTABLE}
346 ,
347 /* XSDT 6 */ {XSDT_SIG, XSDT_SIG, NULL, sizeof(RSDT_SIG) - 1,
348 ACPI_TABLE_ROOT | ACPI_TABLE_SINGLE}
349 ,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700350};
351
Linus Torvalds1da177e2005-04-16 15:20:36 -0700352/******************************************************************************
353 *
354 * Event and Hardware globals
355 *
356 ******************************************************************************/
357
Len Brown4be44fc2005-08-05 00:44:28 -0400358struct acpi_bit_register_info acpi_gbl_bit_register_info[ACPI_NUM_BITREG] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700359 /* Name Parent Register Register Bit Position Register Bit Mask */
360
Len Brown4be44fc2005-08-05 00:44:28 -0400361 /* ACPI_BITREG_TIMER_STATUS */ {ACPI_REGISTER_PM1_STATUS,
362 ACPI_BITPOSITION_TIMER_STATUS,
363 ACPI_BITMASK_TIMER_STATUS},
364 /* ACPI_BITREG_BUS_MASTER_STATUS */ {ACPI_REGISTER_PM1_STATUS,
365 ACPI_BITPOSITION_BUS_MASTER_STATUS,
366 ACPI_BITMASK_BUS_MASTER_STATUS},
367 /* ACPI_BITREG_GLOBAL_LOCK_STATUS */ {ACPI_REGISTER_PM1_STATUS,
368 ACPI_BITPOSITION_GLOBAL_LOCK_STATUS,
369 ACPI_BITMASK_GLOBAL_LOCK_STATUS},
370 /* ACPI_BITREG_POWER_BUTTON_STATUS */ {ACPI_REGISTER_PM1_STATUS,
371 ACPI_BITPOSITION_POWER_BUTTON_STATUS,
372 ACPI_BITMASK_POWER_BUTTON_STATUS},
373 /* ACPI_BITREG_SLEEP_BUTTON_STATUS */ {ACPI_REGISTER_PM1_STATUS,
374 ACPI_BITPOSITION_SLEEP_BUTTON_STATUS,
375 ACPI_BITMASK_SLEEP_BUTTON_STATUS},
376 /* ACPI_BITREG_RT_CLOCK_STATUS */ {ACPI_REGISTER_PM1_STATUS,
377 ACPI_BITPOSITION_RT_CLOCK_STATUS,
378 ACPI_BITMASK_RT_CLOCK_STATUS},
379 /* ACPI_BITREG_WAKE_STATUS */ {ACPI_REGISTER_PM1_STATUS,
380 ACPI_BITPOSITION_WAKE_STATUS,
381 ACPI_BITMASK_WAKE_STATUS},
382 /* ACPI_BITREG_PCIEXP_WAKE_STATUS */ {ACPI_REGISTER_PM1_STATUS,
383 ACPI_BITPOSITION_PCIEXP_WAKE_STATUS,
384 ACPI_BITMASK_PCIEXP_WAKE_STATUS},
Linus Torvalds1da177e2005-04-16 15:20:36 -0700385
Len Brown4be44fc2005-08-05 00:44:28 -0400386 /* ACPI_BITREG_TIMER_ENABLE */ {ACPI_REGISTER_PM1_ENABLE,
387 ACPI_BITPOSITION_TIMER_ENABLE,
388 ACPI_BITMASK_TIMER_ENABLE},
389 /* ACPI_BITREG_GLOBAL_LOCK_ENABLE */ {ACPI_REGISTER_PM1_ENABLE,
390 ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE,
391 ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
392 /* ACPI_BITREG_POWER_BUTTON_ENABLE */ {ACPI_REGISTER_PM1_ENABLE,
393 ACPI_BITPOSITION_POWER_BUTTON_ENABLE,
394 ACPI_BITMASK_POWER_BUTTON_ENABLE},
395 /* ACPI_BITREG_SLEEP_BUTTON_ENABLE */ {ACPI_REGISTER_PM1_ENABLE,
396 ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE,
397 ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
398 /* ACPI_BITREG_RT_CLOCK_ENABLE */ {ACPI_REGISTER_PM1_ENABLE,
399 ACPI_BITPOSITION_RT_CLOCK_ENABLE,
400 ACPI_BITMASK_RT_CLOCK_ENABLE},
401 /* ACPI_BITREG_WAKE_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, 0, 0},
402 /* ACPI_BITREG_PCIEXP_WAKE_DISABLE */ {ACPI_REGISTER_PM1_ENABLE,
403 ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE,
404 ACPI_BITMASK_PCIEXP_WAKE_DISABLE},
Linus Torvalds1da177e2005-04-16 15:20:36 -0700405
Len Brown4be44fc2005-08-05 00:44:28 -0400406 /* ACPI_BITREG_SCI_ENABLE */ {ACPI_REGISTER_PM1_CONTROL,
407 ACPI_BITPOSITION_SCI_ENABLE,
408 ACPI_BITMASK_SCI_ENABLE},
409 /* ACPI_BITREG_BUS_MASTER_RLD */ {ACPI_REGISTER_PM1_CONTROL,
410 ACPI_BITPOSITION_BUS_MASTER_RLD,
411 ACPI_BITMASK_BUS_MASTER_RLD},
412 /* ACPI_BITREG_GLOBAL_LOCK_RELEASE */ {ACPI_REGISTER_PM1_CONTROL,
413 ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE,
414 ACPI_BITMASK_GLOBAL_LOCK_RELEASE},
415 /* ACPI_BITREG_SLEEP_TYPE_A */ {ACPI_REGISTER_PM1_CONTROL,
416 ACPI_BITPOSITION_SLEEP_TYPE_X,
417 ACPI_BITMASK_SLEEP_TYPE_X},
418 /* ACPI_BITREG_SLEEP_TYPE_B */ {ACPI_REGISTER_PM1_CONTROL,
419 ACPI_BITPOSITION_SLEEP_TYPE_X,
420 ACPI_BITMASK_SLEEP_TYPE_X},
421 /* ACPI_BITREG_SLEEP_ENABLE */ {ACPI_REGISTER_PM1_CONTROL,
422 ACPI_BITPOSITION_SLEEP_ENABLE,
423 ACPI_BITMASK_SLEEP_ENABLE},
Linus Torvalds1da177e2005-04-16 15:20:36 -0700424
Len Brown4be44fc2005-08-05 00:44:28 -0400425 /* ACPI_BITREG_ARB_DIS */ {ACPI_REGISTER_PM2_CONTROL,
426 ACPI_BITPOSITION_ARB_DISABLE,
427 ACPI_BITMASK_ARB_DISABLE}
Linus Torvalds1da177e2005-04-16 15:20:36 -0700428};
429
Len Brown4be44fc2005-08-05 00:44:28 -0400430struct acpi_fixed_event_info acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS] = {
431 /* ACPI_EVENT_PMTIMER */ {ACPI_BITREG_TIMER_STATUS,
432 ACPI_BITREG_TIMER_ENABLE,
433 ACPI_BITMASK_TIMER_STATUS,
434 ACPI_BITMASK_TIMER_ENABLE},
435 /* ACPI_EVENT_GLOBAL */ {ACPI_BITREG_GLOBAL_LOCK_STATUS,
436 ACPI_BITREG_GLOBAL_LOCK_ENABLE,
437 ACPI_BITMASK_GLOBAL_LOCK_STATUS,
438 ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
439 /* ACPI_EVENT_POWER_BUTTON */ {ACPI_BITREG_POWER_BUTTON_STATUS,
440 ACPI_BITREG_POWER_BUTTON_ENABLE,
441 ACPI_BITMASK_POWER_BUTTON_STATUS,
442 ACPI_BITMASK_POWER_BUTTON_ENABLE},
443 /* ACPI_EVENT_SLEEP_BUTTON */ {ACPI_BITREG_SLEEP_BUTTON_STATUS,
444 ACPI_BITREG_SLEEP_BUTTON_ENABLE,
445 ACPI_BITMASK_SLEEP_BUTTON_STATUS,
446 ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
447 /* ACPI_EVENT_RTC */ {ACPI_BITREG_RT_CLOCK_STATUS,
448 ACPI_BITREG_RT_CLOCK_ENABLE,
449 ACPI_BITMASK_RT_CLOCK_STATUS,
450 ACPI_BITMASK_RT_CLOCK_ENABLE},
Linus Torvalds1da177e2005-04-16 15:20:36 -0700451};
452
Robert Moore44f6c012005-04-18 22:49:35 -0400453/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700454 *
455 * FUNCTION: acpi_ut_get_region_name
456 *
457 * PARAMETERS: None.
458 *
459 * RETURN: Status
460 *
461 * DESCRIPTION: Translate a Space ID into a name string (Debug only)
462 *
Robert Moore44f6c012005-04-18 22:49:35 -0400463 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700464
465/* Region type decoding */
466
Len Brown4be44fc2005-08-05 00:44:28 -0400467const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700468/*! [Begin] no source code translation (keep these ASL Keywords as-is) */
469 "SystemMemory",
470 "SystemIO",
471 "PCI_Config",
472 "EmbeddedControl",
473 "SMBus",
474 "CMOS",
475 "PCIBARTarget",
476 "DataTable"
477/*! [End] no source code translation !*/
478};
479
Len Brown4be44fc2005-08-05 00:44:28 -0400480char *acpi_ut_get_region_name(u8 space_id)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700481{
482
Len Brown4be44fc2005-08-05 00:44:28 -0400483 if (space_id >= ACPI_USER_REGION_BEGIN) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700484 return ("user_defined_region");
Len Brown4be44fc2005-08-05 00:44:28 -0400485 } else if (space_id >= ACPI_NUM_PREDEFINED_REGIONS) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700486 return ("invalid_space_id");
487 }
488
Bob Mooredefba1d2005-12-16 17:05:00 -0500489 return (ACPI_CAST_PTR(char, acpi_gbl_region_types[space_id]));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700490}
491
Robert Moore44f6c012005-04-18 22:49:35 -0400492/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700493 *
494 * FUNCTION: acpi_ut_get_event_name
495 *
496 * PARAMETERS: None.
497 *
498 * RETURN: Status
499 *
500 * DESCRIPTION: Translate a Event ID into a name string (Debug only)
501 *
Robert Moore44f6c012005-04-18 22:49:35 -0400502 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700503
504/* Event type decoding */
505
Len Brown4be44fc2005-08-05 00:44:28 -0400506static const char *acpi_gbl_event_types[ACPI_NUM_FIXED_EVENTS] = {
Bob Moore08978312005-10-21 00:00:00 -0400507/*! [Begin] no source code translation (keep these strings as-is) */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700508 "PM_Timer",
Bob Moore08978312005-10-21 00:00:00 -0400509 "GlobalLock",
510 "PowerButton",
511 "SleepButton",
512 "RealTimeClock",
513/*! [End] no source code translation !*/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700514};
515
Len Brown4be44fc2005-08-05 00:44:28 -0400516char *acpi_ut_get_event_name(u32 event_id)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700517{
518
Len Brown4be44fc2005-08-05 00:44:28 -0400519 if (event_id > ACPI_EVENT_MAX) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700520 return ("invalid_event_iD");
521 }
522
Bob Moore4a90c7e2006-01-13 16:22:00 -0500523 return (ACPI_CAST_PTR(char, acpi_gbl_event_types[event_id]));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700524}
525
Robert Moore44f6c012005-04-18 22:49:35 -0400526/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700527 *
528 * FUNCTION: acpi_ut_get_type_name
529 *
530 * PARAMETERS: None.
531 *
532 * RETURN: Status
533 *
534 * DESCRIPTION: Translate a Type ID into a name string (Debug only)
535 *
Robert Moore44f6c012005-04-18 22:49:35 -0400536 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700537
538/*
539 * Elements of acpi_gbl_ns_type_names below must match
540 * one-to-one with values of acpi_object_type
541 *
Robert Moore44f6c012005-04-18 22:49:35 -0400542 * The type ACPI_TYPE_ANY (Untyped) is used as a "don't care" when searching;
543 * when stored in a table it really means that we have thus far seen no
544 * evidence to indicate what type is actually going to be stored for this entry.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700545 */
Len Brown4be44fc2005-08-05 00:44:28 -0400546static const char acpi_gbl_bad_type[] = "UNDEFINED";
Linus Torvalds1da177e2005-04-16 15:20:36 -0700547
Robert Moore44f6c012005-04-18 22:49:35 -0400548/* Printable names of the ACPI object types */
549
Len Brown4be44fc2005-08-05 00:44:28 -0400550static const char *acpi_gbl_ns_type_names[] = {
Bob Moore08978312005-10-21 00:00:00 -0400551/*! [Begin] no source code translation (keep these strings as-is) */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700552 /* 00 */ "Untyped",
553 /* 01 */ "Integer",
554 /* 02 */ "String",
555 /* 03 */ "Buffer",
556 /* 04 */ "Package",
Bob Moore08978312005-10-21 00:00:00 -0400557 /* 05 */ "FieldUnit",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700558 /* 06 */ "Device",
559 /* 07 */ "Event",
560 /* 08 */ "Method",
561 /* 09 */ "Mutex",
562 /* 10 */ "Region",
563 /* 11 */ "Power",
564 /* 12 */ "Processor",
565 /* 13 */ "Thermal",
Bob Moore08978312005-10-21 00:00:00 -0400566 /* 14 */ "BufferField",
567 /* 15 */ "DdbHandle",
568 /* 16 */ "DebugObject",
569 /* 17 */ "RegionField",
570 /* 18 */ "BankField",
571 /* 19 */ "IndexField",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700572 /* 20 */ "Reference",
573 /* 21 */ "Alias",
Bob Moore08978312005-10-21 00:00:00 -0400574 /* 22 */ "MethodAlias",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700575 /* 23 */ "Notify",
Bob Moore08978312005-10-21 00:00:00 -0400576 /* 24 */ "AddrHandler",
577 /* 25 */ "ResourceDesc",
578 /* 26 */ "ResourceFld",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700579 /* 27 */ "Scope",
580 /* 28 */ "Extra",
581 /* 29 */ "Data",
582 /* 30 */ "Invalid"
Bob Moore08978312005-10-21 00:00:00 -0400583/*! [End] no source code translation !*/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700584};
585
Len Brown4be44fc2005-08-05 00:44:28 -0400586char *acpi_ut_get_type_name(acpi_object_type type)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700587{
588
Len Brown4be44fc2005-08-05 00:44:28 -0400589 if (type > ACPI_TYPE_INVALID) {
Bob Moore4a90c7e2006-01-13 16:22:00 -0500590 return (ACPI_CAST_PTR(char, acpi_gbl_bad_type));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700591 }
592
Bob Moore4a90c7e2006-01-13 16:22:00 -0500593 return (ACPI_CAST_PTR(char, acpi_gbl_ns_type_names[type]));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700594}
595
Len Brown4be44fc2005-08-05 00:44:28 -0400596char *acpi_ut_get_object_type_name(union acpi_operand_object *obj_desc)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700597{
598
Len Brown4be44fc2005-08-05 00:44:28 -0400599 if (!obj_desc) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700600 return ("[NULL Object Descriptor]");
601 }
602
Len Brown4be44fc2005-08-05 00:44:28 -0400603 return (acpi_ut_get_type_name(ACPI_GET_OBJECT_TYPE(obj_desc)));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700604}
605
Robert Moore44f6c012005-04-18 22:49:35 -0400606/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700607 *
608 * FUNCTION: acpi_ut_get_node_name
609 *
610 * PARAMETERS: Object - A namespace node
611 *
612 * RETURN: Pointer to a string
613 *
614 * DESCRIPTION: Validate the node and return the node's ACPI name.
615 *
Robert Moore44f6c012005-04-18 22:49:35 -0400616 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700617
Len Brown4be44fc2005-08-05 00:44:28 -0400618char *acpi_ut_get_node_name(void *object)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700619{
Len Brown4be44fc2005-08-05 00:44:28 -0400620 struct acpi_namespace_node *node = (struct acpi_namespace_node *)object;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700621
622 /* Must return a string of exactly 4 characters == ACPI_NAME_SIZE */
623
Len Brown4be44fc2005-08-05 00:44:28 -0400624 if (!object) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700625 return ("NULL");
626 }
627
628 /* Check for Root node */
629
Len Brown4be44fc2005-08-05 00:44:28 -0400630 if ((object == ACPI_ROOT_OBJECT) || (object == acpi_gbl_root_node)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700631 return ("\"\\\" ");
632 }
633
634 /* Descriptor must be a namespace node */
635
Len Brown4be44fc2005-08-05 00:44:28 -0400636 if (node->descriptor != ACPI_DESC_TYPE_NAMED) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700637 return ("####");
638 }
639
640 /* Name must be a valid ACPI name */
641
Bob Moorec51a4de2005-11-17 13:07:00 -0500642 if (!acpi_ut_valid_acpi_name(node->name.integer)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700643 return ("????");
644 }
645
646 /* Return the name */
647
648 return (node->name.ascii);
649}
650
Robert Moore44f6c012005-04-18 22:49:35 -0400651/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700652 *
653 * FUNCTION: acpi_ut_get_descriptor_name
654 *
655 * PARAMETERS: Object - An ACPI object
656 *
657 * RETURN: Pointer to a string
658 *
659 * DESCRIPTION: Validate object and return the descriptor type
660 *
Robert Moore44f6c012005-04-18 22:49:35 -0400661 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700662
Robert Moore44f6c012005-04-18 22:49:35 -0400663/* Printable names of object descriptor types */
664
Len Brown4be44fc2005-08-05 00:44:28 -0400665static const char *acpi_gbl_desc_type_names[] = {
Bob Moore08978312005-10-21 00:00:00 -0400666/*! [Begin] no source code translation (keep these ASL Keywords as-is) */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700667 /* 00 */ "Invalid",
668 /* 01 */ "Cached",
669 /* 02 */ "State-Generic",
670 /* 03 */ "State-Update",
671 /* 04 */ "State-Package",
672 /* 05 */ "State-Control",
Bob Moore08978312005-10-21 00:00:00 -0400673 /* 06 */ "State-RootParseScope",
674 /* 07 */ "State-ParseScope",
675 /* 08 */ "State-WalkScope",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700676 /* 09 */ "State-Result",
677 /* 10 */ "State-Notify",
678 /* 11 */ "State-Thread",
679 /* 12 */ "Walk",
680 /* 13 */ "Parser",
681 /* 14 */ "Operand",
682 /* 15 */ "Node"
Bob Moore08978312005-10-21 00:00:00 -0400683/*! [End] no source code translation !*/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700684};
685
Len Brown4be44fc2005-08-05 00:44:28 -0400686char *acpi_ut_get_descriptor_name(void *object)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700687{
688
Len Brown4be44fc2005-08-05 00:44:28 -0400689 if (!object) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700690 return ("NULL OBJECT");
691 }
692
Len Brown4be44fc2005-08-05 00:44:28 -0400693 if (ACPI_GET_DESCRIPTOR_TYPE(object) > ACPI_DESC_TYPE_MAX) {
Bob Mooredefba1d2005-12-16 17:05:00 -0500694 return (ACPI_CAST_PTR(char, acpi_gbl_bad_type));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700695 }
696
Bob Mooredefba1d2005-12-16 17:05:00 -0500697 return (ACPI_CAST_PTR(char,
698 acpi_gbl_desc_type_names[ACPI_GET_DESCRIPTOR_TYPE
699 (object)]));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700700
701}
702
Linus Torvalds1da177e2005-04-16 15:20:36 -0700703#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
704/*
705 * Strings and procedures used for debug only
706 */
707
Robert Moore44f6c012005-04-18 22:49:35 -0400708/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700709 *
710 * FUNCTION: acpi_ut_get_mutex_name
711 *
Robert Moore44f6c012005-04-18 22:49:35 -0400712 * PARAMETERS: mutex_id - The predefined ID for this mutex.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700713 *
Robert Moore44f6c012005-04-18 22:49:35 -0400714 * RETURN: String containing the name of the mutex. Always returns a valid
715 * pointer.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700716 *
717 * DESCRIPTION: Translate a mutex ID into a name string (Debug only)
718 *
Robert Moore44f6c012005-04-18 22:49:35 -0400719 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700720
Len Brown4be44fc2005-08-05 00:44:28 -0400721char *acpi_ut_get_mutex_name(u32 mutex_id)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700722{
723
Len Brown4be44fc2005-08-05 00:44:28 -0400724 if (mutex_id > MAX_MUTEX) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700725 return ("Invalid Mutex ID");
726 }
727
728 return (acpi_gbl_mutex_names[mutex_id]);
729}
Linus Torvalds1da177e2005-04-16 15:20:36 -0700730#endif
731
Robert Moore44f6c012005-04-18 22:49:35 -0400732/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700733 *
734 * FUNCTION: acpi_ut_valid_object_type
735 *
736 * PARAMETERS: Type - Object type to be validated
737 *
Robert Moore44f6c012005-04-18 22:49:35 -0400738 * RETURN: TRUE if valid object type, FALSE otherwise
Linus Torvalds1da177e2005-04-16 15:20:36 -0700739 *
740 * DESCRIPTION: Validate an object type
741 *
Robert Moore44f6c012005-04-18 22:49:35 -0400742 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700743
Len Brown4be44fc2005-08-05 00:44:28 -0400744u8 acpi_ut_valid_object_type(acpi_object_type type)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700745{
746
Len Brown4be44fc2005-08-05 00:44:28 -0400747 if (type > ACPI_TYPE_LOCAL_MAX) {
Bob Moore52fc0b02006-10-02 00:00:00 -0400748
Linus Torvalds1da177e2005-04-16 15:20:36 -0700749 /* Note: Assumes all TYPEs are contiguous (external/local) */
750
751 return (FALSE);
752 }
753
754 return (TRUE);
755}
756
Robert Moore44f6c012005-04-18 22:49:35 -0400757/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700758 *
Linus Torvalds1da177e2005-04-16 15:20:36 -0700759 * FUNCTION: acpi_ut_init_globals
760 *
Robert Moore44f6c012005-04-18 22:49:35 -0400761 * PARAMETERS: None
762 *
763 * RETURN: None
Linus Torvalds1da177e2005-04-16 15:20:36 -0700764 *
765 * DESCRIPTION: Init library globals. All globals that require specific
766 * initialization should be initialized here!
767 *
Robert Moore44f6c012005-04-18 22:49:35 -0400768 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700769
Len Brown4be44fc2005-08-05 00:44:28 -0400770void acpi_ut_init_globals(void)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700771{
Len Brown4be44fc2005-08-05 00:44:28 -0400772 acpi_status status;
773 u32 i;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700774
Len Brown4be44fc2005-08-05 00:44:28 -0400775 ACPI_FUNCTION_TRACE("ut_init_globals");
Linus Torvalds1da177e2005-04-16 15:20:36 -0700776
Robert Moore73459f72005-06-24 00:00:00 -0400777 /* Create all memory caches */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700778
Len Brown4be44fc2005-08-05 00:44:28 -0400779 status = acpi_ut_create_caches();
780 if (ACPI_FAILURE(status)) {
Robert Moore73459f72005-06-24 00:00:00 -0400781 return;
782 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700783
784 /* ACPI table structure */
785
Len Brown4be44fc2005-08-05 00:44:28 -0400786 for (i = 0; i < NUM_ACPI_TABLE_TYPES; i++) {
787 acpi_gbl_table_lists[i].next = NULL;
788 acpi_gbl_table_lists[i].count = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700789 }
790
791 /* Mutex locked flags */
792
Len Brown4be44fc2005-08-05 00:44:28 -0400793 for (i = 0; i < NUM_MUTEX; i++) {
794 acpi_gbl_mutex_info[i].mutex = NULL;
795 acpi_gbl_mutex_info[i].thread_id = ACPI_MUTEX_NOT_ACQUIRED;
796 acpi_gbl_mutex_info[i].use_count = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700797 }
798
Bob Moore28f55eb2005-12-02 18:27:00 -0500799 for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++) {
800 acpi_gbl_owner_id_mask[i] = 0;
801 }
802 acpi_gbl_owner_id_mask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000; /* Last ID is never valid */
803
Linus Torvalds1da177e2005-04-16 15:20:36 -0700804 /* GPE support */
805
Len Brown4be44fc2005-08-05 00:44:28 -0400806 acpi_gbl_gpe_xrupt_list_head = NULL;
807 acpi_gbl_gpe_fadt_blocks[0] = NULL;
808 acpi_gbl_gpe_fadt_blocks[1] = NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700809
810 /* Global notify handlers */
811
Len Brown4be44fc2005-08-05 00:44:28 -0400812 acpi_gbl_system_notify.handler = NULL;
813 acpi_gbl_device_notify.handler = NULL;
814 acpi_gbl_exception_handler = NULL;
815 acpi_gbl_init_handler = NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700816
817 /* Global "typed" ACPI table pointers */
818
Len Brown4be44fc2005-08-05 00:44:28 -0400819 acpi_gbl_RSDP = NULL;
820 acpi_gbl_XSDT = NULL;
821 acpi_gbl_FACS = NULL;
822 acpi_gbl_FADT = NULL;
823 acpi_gbl_DSDT = NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700824
825 /* Global Lock support */
826
Len Brown4be44fc2005-08-05 00:44:28 -0400827 acpi_gbl_global_lock_acquired = FALSE;
828 acpi_gbl_global_lock_thread_count = 0;
829 acpi_gbl_global_lock_handle = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700830
831 /* Miscellaneous variables */
832
Len Brown4be44fc2005-08-05 00:44:28 -0400833 acpi_gbl_table_flags = ACPI_PHYSICAL_POINTER;
834 acpi_gbl_rsdp_original_location = 0;
835 acpi_gbl_cm_single_step = FALSE;
836 acpi_gbl_db_terminate_threads = FALSE;
837 acpi_gbl_shutdown = FALSE;
838 acpi_gbl_ns_lookup_count = 0;
839 acpi_gbl_ps_find_count = 0;
840 acpi_gbl_acpi_hardware_present = TRUE;
Bob Moore28f55eb2005-12-02 18:27:00 -0500841 acpi_gbl_last_owner_id_index = 0;
842 acpi_gbl_next_owner_id_offset = 0;
Bob Moore50eca3e2005-09-30 19:03:00 -0400843 acpi_gbl_trace_method_name = 0;
844 acpi_gbl_trace_dbg_level = 0;
845 acpi_gbl_trace_dbg_layer = 0;
Len Brown4be44fc2005-08-05 00:44:28 -0400846 acpi_gbl_debugger_configuration = DEBUGGER_THREADING;
847 acpi_gbl_db_output_flags = ACPI_DB_CONSOLE_OUTPUT;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700848
849 /* Hardware oriented */
850
Len Brown4be44fc2005-08-05 00:44:28 -0400851 acpi_gbl_events_initialized = FALSE;
852 acpi_gbl_system_awake_and_running = TRUE;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700853
854 /* Namespace */
855
Len Brown4be44fc2005-08-05 00:44:28 -0400856 acpi_gbl_root_node = NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700857 acpi_gbl_root_node_struct.name.integer = ACPI_ROOT_NAME;
858 acpi_gbl_root_node_struct.descriptor = ACPI_DESC_TYPE_NAMED;
Len Brown4be44fc2005-08-05 00:44:28 -0400859 acpi_gbl_root_node_struct.type = ACPI_TYPE_DEVICE;
860 acpi_gbl_root_node_struct.child = NULL;
861 acpi_gbl_root_node_struct.peer = NULL;
862 acpi_gbl_root_node_struct.object = NULL;
863 acpi_gbl_root_node_struct.flags = ANOBJ_END_OF_PEER_LIST;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700864
865#ifdef ACPI_DEBUG_OUTPUT
Len Brown4be44fc2005-08-05 00:44:28 -0400866 acpi_gbl_lowest_stack_pointer = ACPI_SIZE_MAX;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700867#endif
868
869 return_VOID;
870}
Bob Moore83135242006-10-03 00:00:00 -0400871
872ACPI_EXPORT_SYMBOL(acpi_dbg_level)
873ACPI_EXPORT_SYMBOL(acpi_dbg_layer)