blob: ffd13383a325ecae8ed8ae884187860b6566ce33 [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
46#include <linux/module.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070047#include <acpi/acpi.h>
48#include <acpi/acnamesp.h>
49
50#define _COMPONENT ACPI_UTILITIES
Len Brown4be44fc2005-08-05 00:44:28 -040051ACPI_MODULE_NAME("utglobal")
Linus Torvalds1da177e2005-04-16 15:20:36 -070052
Robert Moore44f6c012005-04-18 22:49:35 -040053/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -070054 *
55 * FUNCTION: acpi_format_exception
56 *
57 * PARAMETERS: Status - The acpi_status code to be formatted
58 *
Robert Moore44f6c012005-04-18 22:49:35 -040059 * RETURN: A string containing the exception text. A valid pointer is
60 * always returned.
Linus Torvalds1da177e2005-04-16 15:20:36 -070061 *
62 * DESCRIPTION: This function translates an ACPI exception into an ASCII string.
63 *
64 ******************************************************************************/
Len Brown4be44fc2005-08-05 00:44:28 -040065const char *acpi_format_exception(acpi_status status)
Linus Torvalds1da177e2005-04-16 15:20:36 -070066{
Len Brown4be44fc2005-08-05 00:44:28 -040067 acpi_status sub_status;
68 const char *exception = NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -070069
Bob Moore4a90c7e2006-01-13 16:22:00 -050070 ACPI_FUNCTION_ENTRY();
Linus Torvalds1da177e2005-04-16 15:20:36 -070071
Bob Moore4a90c7e2006-01-13 16:22:00 -050072 /*
73 * Status is composed of two parts, a "type" and an actual code
74 */
Linus Torvalds1da177e2005-04-16 15:20:36 -070075 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) {
Len Brown4be44fc2005-08-05 00:44:28 -040081 exception = acpi_gbl_exception_names_env[sub_status];
Linus Torvalds1da177e2005-04-16 15:20:36 -070082 }
Robert Moore44f6c012005-04-18 22:49:35 -040083 break;
Linus Torvalds1da177e2005-04-16 15:20:36 -070084
85 case AE_CODE_PROGRAMMER:
86
87 if (sub_status <= AE_CODE_PGM_MAX) {
Len Brown4be44fc2005-08-05 00:44:28 -040088 exception =
89 acpi_gbl_exception_names_pgm[sub_status - 1];
Linus Torvalds1da177e2005-04-16 15:20:36 -070090 }
Robert Moore44f6c012005-04-18 22:49:35 -040091 break;
Linus Torvalds1da177e2005-04-16 15:20:36 -070092
93 case AE_CODE_ACPI_TABLES:
94
95 if (sub_status <= AE_CODE_TBL_MAX) {
Len Brown4be44fc2005-08-05 00:44:28 -040096 exception =
97 acpi_gbl_exception_names_tbl[sub_status - 1];
Linus Torvalds1da177e2005-04-16 15:20:36 -070098 }
Robert Moore44f6c012005-04-18 22:49:35 -040099 break;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700100
101 case AE_CODE_AML:
102
103 if (sub_status <= AE_CODE_AML_MAX) {
Len Brown4be44fc2005-08-05 00:44:28 -0400104 exception =
105 acpi_gbl_exception_names_aml[sub_status - 1];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700106 }
Robert Moore44f6c012005-04-18 22:49:35 -0400107 break;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700108
109 case AE_CODE_CONTROL:
110
111 if (sub_status <= AE_CODE_CTRL_MAX) {
Len Brown4be44fc2005-08-05 00:44:28 -0400112 exception =
113 acpi_gbl_exception_names_ctrl[sub_status - 1];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700114 }
Robert Moore44f6c012005-04-18 22:49:35 -0400115 break;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700116
117 default:
Robert Moore44f6c012005-04-18 22:49:35 -0400118 break;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700119 }
120
Robert Moore44f6c012005-04-18 22:49:35 -0400121 if (!exception) {
122 /* 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 -0700146EXPORT_SYMBOL(acpi_dbg_level);
147
148/* Debug switch - layer (component) mask */
149
Len Brown4be44fc2005-08-05 00:44:28 -0400150u32 acpi_dbg_layer = ACPI_COMPONENT_DEFAULT | ACPI_ALL_DRIVERS;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700151EXPORT_SYMBOL(acpi_dbg_layer);
Len Brown4be44fc2005-08-05 00:44:28 -0400152u32 acpi_gbl_nesting_level = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700153
154/* Debugger globals */
155
Len Brown4be44fc2005-08-05 00:44:28 -0400156u8 acpi_gbl_db_terminate_threads = FALSE;
157u8 acpi_gbl_abort_method = FALSE;
158u8 acpi_gbl_method_executing = FALSE;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700159
160/* System flags */
161
Len Brown4be44fc2005-08-05 00:44:28 -0400162u32 acpi_gbl_startup_flags = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700163
164/* System starts uninitialized */
165
Len Brown4be44fc2005-08-05 00:44:28 -0400166u8 acpi_gbl_shutdown = TRUE;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700167
Len Brown4be44fc2005-08-05 00:44:28 -0400168const u8 acpi_gbl_decode_to8bit[8] = { 1, 2, 4, 8, 16, 32, 64, 128 };
Linus Torvalds1da177e2005-04-16 15:20:36 -0700169
Len Brown4be44fc2005-08-05 00:44:28 -0400170const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700171 "\\_S0_",
172 "\\_S1_",
173 "\\_S2_",
174 "\\_S3_",
175 "\\_S4_",
176 "\\_S5_"
177};
178
Len Brown4be44fc2005-08-05 00:44:28 -0400179const char *acpi_gbl_highest_dstate_names[4] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700180 "_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 */
Len Brown4be44fc2005-08-05 00:44:28 -0400190const char *acpi_gbl_valid_osi_strings[ACPI_NUM_OSI_STRINGS] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700191 /* 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
Robert Moore44f6c012005-04-18 22:49:35 -0400208/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700209 *
210 * Namespace globals
211 *
212 ******************************************************************************/
213
Linus Torvalds1da177e2005-04-16 15:20:36 -0700214/*
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 */
Bob Moore08978312005-10-21 00:00:00 -0400223const 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},
Linus Torvalds1da177e2005-04-16 15:20:36 -0700232
233#if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
Bob Moore08978312005-10-21 00:00:00 -0400234 {"_OSI", ACPI_TYPE_METHOD, (char *)1},
Linus Torvalds1da177e2005-04-16 15:20:36 -0700235#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -0700236
Robert Moore44f6c012005-04-18 22:49:35 -0400237 /* Table terminator */
238
Bob Moore08978312005-10-21 00:00:00 -0400239 {NULL, ACPI_TYPE_ANY, NULL}
Robert Moore44f6c012005-04-18 22:49:35 -0400240};
Linus Torvalds1da177e2005-04-16 15:20:36 -0700241
242/*
243 * Properties of the ACPI Object Types, both internal and external.
244 * The table is indexed by values of acpi_object_type
245 */
Len Brown4be44fc2005-08-05 00:44:28 -0400246const 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 */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700278};
279
Linus Torvalds1da177e2005-04-16 15:20:36 -0700280/* Hex to ASCII conversion table */
281
Len Brown4be44fc2005-08-05 00:44:28 -0400282static 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'
Robert Moore44f6c012005-04-18 22:49:35 -0400285};
Linus Torvalds1da177e2005-04-16 15:20:36 -0700286
Robert Moore44f6c012005-04-18 22:49:35 -0400287/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700288 *
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
Robert Moore44f6c012005-04-18 22:49:35 -0400293 * integer (multiple of 4)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700294 *
Robert Moore44f6c012005-04-18 22:49:35 -0400295 * RETURN: The converted Ascii character
Linus Torvalds1da177e2005-04-16 15:20:36 -0700296 *
Robert Moore44f6c012005-04-18 22:49:35 -0400297 * DESCRIPTION: Convert a hex digit to an Ascii character
Linus Torvalds1da177e2005-04-16 15:20:36 -0700298 *
Robert Moore44f6c012005-04-18 22:49:35 -0400299 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700300
Len Brown4be44fc2005-08-05 00:44:28 -0400301char acpi_ut_hex_to_ascii_char(acpi_integer integer, u32 position)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700302{
303
304 return (acpi_gbl_hex_to_ascii[(integer >> position) & 0xF]);
305}
306
Robert Moore44f6c012005-04-18 22:49:35 -0400307/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700308 *
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
Robert Moore44f6c012005-04-18 22:49:35 -0400316 * subsystem (No MADT, ECDT, SBST, etc.)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700317 *
318 ******************************************************************************/
319
Len Brown4be44fc2005-08-05 00:44:28 -0400320struct acpi_table_list acpi_gbl_table_lists[NUM_ACPI_TABLE_TYPES];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700321
Len Brown4be44fc2005-08-05 00:44:28 -0400322struct acpi_table_support acpi_gbl_table_data[NUM_ACPI_TABLE_TYPES] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700323 /*********** Name, Signature, Global typed pointer Signature size, Type How many allowed?, Contains valid AML? */
324
Len Brown4be44fc2005-08-05 00:44:28 -0400325 /* 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 ,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700352};
353
Linus Torvalds1da177e2005-04-16 15:20:36 -0700354/******************************************************************************
355 *
356 * Event and Hardware globals
357 *
358 ******************************************************************************/
359
Len Brown4be44fc2005-08-05 00:44:28 -0400360struct acpi_bit_register_info acpi_gbl_bit_register_info[ACPI_NUM_BITREG] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700361 /* Name Parent Register Register Bit Position Register Bit Mask */
362
Len Brown4be44fc2005-08-05 00:44:28 -0400363 /* 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},
Linus Torvalds1da177e2005-04-16 15:20:36 -0700387
Len Brown4be44fc2005-08-05 00:44:28 -0400388 /* 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},
Linus Torvalds1da177e2005-04-16 15:20:36 -0700407
Len Brown4be44fc2005-08-05 00:44:28 -0400408 /* 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},
Linus Torvalds1da177e2005-04-16 15:20:36 -0700426
Len Brown4be44fc2005-08-05 00:44:28 -0400427 /* ACPI_BITREG_ARB_DIS */ {ACPI_REGISTER_PM2_CONTROL,
428 ACPI_BITPOSITION_ARB_DISABLE,
429 ACPI_BITMASK_ARB_DISABLE}
Linus Torvalds1da177e2005-04-16 15:20:36 -0700430};
431
Len Brown4be44fc2005-08-05 00:44:28 -0400432struct 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},
Linus Torvalds1da177e2005-04-16 15:20:36 -0700453};
454
Robert Moore44f6c012005-04-18 22:49:35 -0400455/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700456 *
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 *
Robert Moore44f6c012005-04-18 22:49:35 -0400465 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700466
467/* Region type decoding */
468
Len Brown4be44fc2005-08-05 00:44:28 -0400469const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700470/*! [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
Len Brown4be44fc2005-08-05 00:44:28 -0400482char *acpi_ut_get_region_name(u8 space_id)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700483{
484
Len Brown4be44fc2005-08-05 00:44:28 -0400485 if (space_id >= ACPI_USER_REGION_BEGIN) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700486 return ("user_defined_region");
Len Brown4be44fc2005-08-05 00:44:28 -0400487 } else if (space_id >= ACPI_NUM_PREDEFINED_REGIONS) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700488 return ("invalid_space_id");
489 }
490
Bob Mooredefba1d2005-12-16 17:05:00 -0500491 return (ACPI_CAST_PTR(char, acpi_gbl_region_types[space_id]));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700492}
493
Robert Moore44f6c012005-04-18 22:49:35 -0400494/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700495 *
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 *
Robert Moore44f6c012005-04-18 22:49:35 -0400504 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700505
506/* Event type decoding */
507
Len Brown4be44fc2005-08-05 00:44:28 -0400508static const char *acpi_gbl_event_types[ACPI_NUM_FIXED_EVENTS] = {
Bob Moore08978312005-10-21 00:00:00 -0400509/*! [Begin] no source code translation (keep these strings as-is) */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700510 "PM_Timer",
Bob Moore08978312005-10-21 00:00:00 -0400511 "GlobalLock",
512 "PowerButton",
513 "SleepButton",
514 "RealTimeClock",
515/*! [End] no source code translation !*/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700516};
517
Len Brown4be44fc2005-08-05 00:44:28 -0400518char *acpi_ut_get_event_name(u32 event_id)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700519{
520
Len Brown4be44fc2005-08-05 00:44:28 -0400521 if (event_id > ACPI_EVENT_MAX) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700522 return ("invalid_event_iD");
523 }
524
Bob Moore4a90c7e2006-01-13 16:22:00 -0500525 return (ACPI_CAST_PTR(char, acpi_gbl_event_types[event_id]));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700526}
527
Robert Moore44f6c012005-04-18 22:49:35 -0400528/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700529 *
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 *
Robert Moore44f6c012005-04-18 22:49:35 -0400538 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700539
540/*
541 * Elements of acpi_gbl_ns_type_names below must match
542 * one-to-one with values of acpi_object_type
543 *
Robert Moore44f6c012005-04-18 22:49:35 -0400544 * 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.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700547 */
Len Brown4be44fc2005-08-05 00:44:28 -0400548static const char acpi_gbl_bad_type[] = "UNDEFINED";
Linus Torvalds1da177e2005-04-16 15:20:36 -0700549
Robert Moore44f6c012005-04-18 22:49:35 -0400550/* Printable names of the ACPI object types */
551
Len Brown4be44fc2005-08-05 00:44:28 -0400552static const char *acpi_gbl_ns_type_names[] = {
Bob Moore08978312005-10-21 00:00:00 -0400553/*! [Begin] no source code translation (keep these strings as-is) */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700554 /* 00 */ "Untyped",
555 /* 01 */ "Integer",
556 /* 02 */ "String",
557 /* 03 */ "Buffer",
558 /* 04 */ "Package",
Bob Moore08978312005-10-21 00:00:00 -0400559 /* 05 */ "FieldUnit",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700560 /* 06 */ "Device",
561 /* 07 */ "Event",
562 /* 08 */ "Method",
563 /* 09 */ "Mutex",
564 /* 10 */ "Region",
565 /* 11 */ "Power",
566 /* 12 */ "Processor",
567 /* 13 */ "Thermal",
Bob Moore08978312005-10-21 00:00:00 -0400568 /* 14 */ "BufferField",
569 /* 15 */ "DdbHandle",
570 /* 16 */ "DebugObject",
571 /* 17 */ "RegionField",
572 /* 18 */ "BankField",
573 /* 19 */ "IndexField",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700574 /* 20 */ "Reference",
575 /* 21 */ "Alias",
Bob Moore08978312005-10-21 00:00:00 -0400576 /* 22 */ "MethodAlias",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700577 /* 23 */ "Notify",
Bob Moore08978312005-10-21 00:00:00 -0400578 /* 24 */ "AddrHandler",
579 /* 25 */ "ResourceDesc",
580 /* 26 */ "ResourceFld",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700581 /* 27 */ "Scope",
582 /* 28 */ "Extra",
583 /* 29 */ "Data",
584 /* 30 */ "Invalid"
Bob Moore08978312005-10-21 00:00:00 -0400585/*! [End] no source code translation !*/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700586};
587
Len Brown4be44fc2005-08-05 00:44:28 -0400588char *acpi_ut_get_type_name(acpi_object_type type)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700589{
590
Len Brown4be44fc2005-08-05 00:44:28 -0400591 if (type > ACPI_TYPE_INVALID) {
Bob Moore4a90c7e2006-01-13 16:22:00 -0500592 return (ACPI_CAST_PTR(char, acpi_gbl_bad_type));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700593 }
594
Bob Moore4a90c7e2006-01-13 16:22:00 -0500595 return (ACPI_CAST_PTR(char, acpi_gbl_ns_type_names[type]));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700596}
597
Len Brown4be44fc2005-08-05 00:44:28 -0400598char *acpi_ut_get_object_type_name(union acpi_operand_object *obj_desc)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700599{
600
Len Brown4be44fc2005-08-05 00:44:28 -0400601 if (!obj_desc) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700602 return ("[NULL Object Descriptor]");
603 }
604
Len Brown4be44fc2005-08-05 00:44:28 -0400605 return (acpi_ut_get_type_name(ACPI_GET_OBJECT_TYPE(obj_desc)));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700606}
607
Robert Moore44f6c012005-04-18 22:49:35 -0400608/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700609 *
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 *
Robert Moore44f6c012005-04-18 22:49:35 -0400618 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700619
Len Brown4be44fc2005-08-05 00:44:28 -0400620char *acpi_ut_get_node_name(void *object)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700621{
Len Brown4be44fc2005-08-05 00:44:28 -0400622 struct acpi_namespace_node *node = (struct acpi_namespace_node *)object;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700623
624 /* Must return a string of exactly 4 characters == ACPI_NAME_SIZE */
625
Len Brown4be44fc2005-08-05 00:44:28 -0400626 if (!object) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700627 return ("NULL");
628 }
629
630 /* Check for Root node */
631
Len Brown4be44fc2005-08-05 00:44:28 -0400632 if ((object == ACPI_ROOT_OBJECT) || (object == acpi_gbl_root_node)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700633 return ("\"\\\" ");
634 }
635
636 /* Descriptor must be a namespace node */
637
Len Brown4be44fc2005-08-05 00:44:28 -0400638 if (node->descriptor != ACPI_DESC_TYPE_NAMED) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700639 return ("####");
640 }
641
642 /* Name must be a valid ACPI name */
643
Bob Moorec51a4de2005-11-17 13:07:00 -0500644 if (!acpi_ut_valid_acpi_name(node->name.integer)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700645 return ("????");
646 }
647
648 /* Return the name */
649
650 return (node->name.ascii);
651}
652
Robert Moore44f6c012005-04-18 22:49:35 -0400653/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700654 *
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 *
Robert Moore44f6c012005-04-18 22:49:35 -0400663 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700664
Robert Moore44f6c012005-04-18 22:49:35 -0400665/* Printable names of object descriptor types */
666
Len Brown4be44fc2005-08-05 00:44:28 -0400667static const char *acpi_gbl_desc_type_names[] = {
Bob Moore08978312005-10-21 00:00:00 -0400668/*! [Begin] no source code translation (keep these ASL Keywords as-is) */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700669 /* 00 */ "Invalid",
670 /* 01 */ "Cached",
671 /* 02 */ "State-Generic",
672 /* 03 */ "State-Update",
673 /* 04 */ "State-Package",
674 /* 05 */ "State-Control",
Bob Moore08978312005-10-21 00:00:00 -0400675 /* 06 */ "State-RootParseScope",
676 /* 07 */ "State-ParseScope",
677 /* 08 */ "State-WalkScope",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700678 /* 09 */ "State-Result",
679 /* 10 */ "State-Notify",
680 /* 11 */ "State-Thread",
681 /* 12 */ "Walk",
682 /* 13 */ "Parser",
683 /* 14 */ "Operand",
684 /* 15 */ "Node"
Bob Moore08978312005-10-21 00:00:00 -0400685/*! [End] no source code translation !*/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700686};
687
Len Brown4be44fc2005-08-05 00:44:28 -0400688char *acpi_ut_get_descriptor_name(void *object)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700689{
690
Len Brown4be44fc2005-08-05 00:44:28 -0400691 if (!object) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700692 return ("NULL OBJECT");
693 }
694
Len Brown4be44fc2005-08-05 00:44:28 -0400695 if (ACPI_GET_DESCRIPTOR_TYPE(object) > ACPI_DESC_TYPE_MAX) {
Bob Mooredefba1d2005-12-16 17:05:00 -0500696 return (ACPI_CAST_PTR(char, acpi_gbl_bad_type));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700697 }
698
Bob Mooredefba1d2005-12-16 17:05:00 -0500699 return (ACPI_CAST_PTR(char,
700 acpi_gbl_desc_type_names[ACPI_GET_DESCRIPTOR_TYPE
701 (object)]));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700702
703}
704
Linus Torvalds1da177e2005-04-16 15:20:36 -0700705#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
706/*
707 * Strings and procedures used for debug only
708 */
709
Robert Moore44f6c012005-04-18 22:49:35 -0400710/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700711 *
712 * FUNCTION: acpi_ut_get_mutex_name
713 *
Robert Moore44f6c012005-04-18 22:49:35 -0400714 * PARAMETERS: mutex_id - The predefined ID for this mutex.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700715 *
Robert Moore44f6c012005-04-18 22:49:35 -0400716 * RETURN: String containing the name of the mutex. Always returns a valid
717 * pointer.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700718 *
719 * DESCRIPTION: Translate a mutex ID into a name string (Debug only)
720 *
Robert Moore44f6c012005-04-18 22:49:35 -0400721 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700722
Len Brown4be44fc2005-08-05 00:44:28 -0400723char *acpi_ut_get_mutex_name(u32 mutex_id)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700724{
725
Len Brown4be44fc2005-08-05 00:44:28 -0400726 if (mutex_id > MAX_MUTEX) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700727 return ("Invalid Mutex ID");
728 }
729
730 return (acpi_gbl_mutex_names[mutex_id]);
731}
Linus Torvalds1da177e2005-04-16 15:20:36 -0700732#endif
733
Robert Moore44f6c012005-04-18 22:49:35 -0400734/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700735 *
736 * FUNCTION: acpi_ut_valid_object_type
737 *
738 * PARAMETERS: Type - Object type to be validated
739 *
Robert Moore44f6c012005-04-18 22:49:35 -0400740 * RETURN: TRUE if valid object type, FALSE otherwise
Linus Torvalds1da177e2005-04-16 15:20:36 -0700741 *
742 * DESCRIPTION: Validate an object type
743 *
Robert Moore44f6c012005-04-18 22:49:35 -0400744 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700745
Len Brown4be44fc2005-08-05 00:44:28 -0400746u8 acpi_ut_valid_object_type(acpi_object_type type)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700747{
748
Len Brown4be44fc2005-08-05 00:44:28 -0400749 if (type > ACPI_TYPE_LOCAL_MAX) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700750 /* Note: Assumes all TYPEs are contiguous (external/local) */
751
752 return (FALSE);
753 }
754
755 return (TRUE);
756}
757
Robert Moore44f6c012005-04-18 22:49:35 -0400758/*******************************************************************************
Linus Torvalds1da177e2005-04-16 15:20:36 -0700759 *
Linus Torvalds1da177e2005-04-16 15:20:36 -0700760 * FUNCTION: acpi_ut_init_globals
761 *
Robert Moore44f6c012005-04-18 22:49:35 -0400762 * PARAMETERS: None
763 *
764 * RETURN: None
Linus Torvalds1da177e2005-04-16 15:20:36 -0700765 *
766 * DESCRIPTION: Init library globals. All globals that require specific
767 * initialization should be initialized here!
768 *
Robert Moore44f6c012005-04-18 22:49:35 -0400769 ******************************************************************************/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700770
Len Brown4be44fc2005-08-05 00:44:28 -0400771void acpi_ut_init_globals(void)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700772{
Len Brown4be44fc2005-08-05 00:44:28 -0400773 acpi_status status;
774 u32 i;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700775
Len Brown4be44fc2005-08-05 00:44:28 -0400776 ACPI_FUNCTION_TRACE("ut_init_globals");
Linus Torvalds1da177e2005-04-16 15:20:36 -0700777
Robert Moore73459f72005-06-24 00:00:00 -0400778 /* Create all memory caches */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700779
Len Brown4be44fc2005-08-05 00:44:28 -0400780 status = acpi_ut_create_caches();
781 if (ACPI_FAILURE(status)) {
Robert Moore73459f72005-06-24 00:00:00 -0400782 return;
783 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700784
785 /* ACPI table structure */
786
Len Brown4be44fc2005-08-05 00:44:28 -0400787 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;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700790 }
791
792 /* Mutex locked flags */
793
Len Brown4be44fc2005-08-05 00:44:28 -0400794 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;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700798 }
799
Bob Moore28f55eb2005-12-02 18:27:00 -0500800 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
Linus Torvalds1da177e2005-04-16 15:20:36 -0700805 /* GPE support */
806
Len Brown4be44fc2005-08-05 00:44:28 -0400807 acpi_gbl_gpe_xrupt_list_head = NULL;
808 acpi_gbl_gpe_fadt_blocks[0] = NULL;
809 acpi_gbl_gpe_fadt_blocks[1] = NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700810
811 /* Global notify handlers */
812
Len Brown4be44fc2005-08-05 00:44:28 -0400813 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;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700817
818 /* Global "typed" ACPI table pointers */
819
Len Brown4be44fc2005-08-05 00:44:28 -0400820 acpi_gbl_RSDP = NULL;
821 acpi_gbl_XSDT = NULL;
822 acpi_gbl_FACS = NULL;
823 acpi_gbl_FADT = NULL;
824 acpi_gbl_DSDT = NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700825
826 /* Global Lock support */
827
Len Brown4be44fc2005-08-05 00:44:28 -0400828 acpi_gbl_global_lock_acquired = FALSE;
829 acpi_gbl_global_lock_thread_count = 0;
830 acpi_gbl_global_lock_handle = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700831
832 /* Miscellaneous variables */
833
Len Brown4be44fc2005-08-05 00:44:28 -0400834 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;
Bob Moore28f55eb2005-12-02 18:27:00 -0500842 acpi_gbl_last_owner_id_index = 0;
843 acpi_gbl_next_owner_id_offset = 0;
Bob Moore50eca3e2005-09-30 19:03:00 -0400844 acpi_gbl_trace_method_name = 0;
845 acpi_gbl_trace_dbg_level = 0;
846 acpi_gbl_trace_dbg_layer = 0;
Len Brown4be44fc2005-08-05 00:44:28 -0400847 acpi_gbl_debugger_configuration = DEBUGGER_THREADING;
848 acpi_gbl_db_output_flags = ACPI_DB_CONSOLE_OUTPUT;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700849
850 /* Hardware oriented */
851
Len Brown4be44fc2005-08-05 00:44:28 -0400852 acpi_gbl_events_initialized = FALSE;
853 acpi_gbl_system_awake_and_running = TRUE;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700854
855 /* Namespace */
856
Len Brown4be44fc2005-08-05 00:44:28 -0400857 acpi_gbl_root_node = NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700858 acpi_gbl_root_node_struct.name.integer = ACPI_ROOT_NAME;
859 acpi_gbl_root_node_struct.descriptor = ACPI_DESC_TYPE_NAMED;
Len Brown4be44fc2005-08-05 00:44:28 -0400860 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;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700865
866#ifdef ACPI_DEBUG_OUTPUT
Len Brown4be44fc2005-08-05 00:44:28 -0400867 acpi_gbl_lowest_stack_pointer = ACPI_SIZE_MAX;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700868#endif
869
870 return_VOID;
871}