utglobal.c 24.4 KB
Newer Older
Linus Torvalds's avatar
Linus Torvalds committed
1 2 3 4 5 6 7
/******************************************************************************
 *
 * Module Name: utglobal - Global variables for the ACPI subsystem
 *
 *****************************************************************************/

/*
Bob Moore's avatar
Bob Moore committed
8
 * Copyright (C) 2000 - 2006, R. Byron Moore
Linus Torvalds's avatar
Linus Torvalds committed
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions, and the following disclaimer,
 *    without modification.
 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
 *    substantially similar to the "NO WARRANTY" disclaimer below
 *    ("Disclaimer") and any redistribution must be conditioned upon
 *    including a substantially similar Disclaimer requirement for further
 *    binary redistribution.
 * 3. Neither the names of the above-listed copyright holders nor the names
 *    of any contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * Alternatively, this software may be distributed under the terms of the
 * GNU General Public License ("GPL") version 2 as published by the Free
 * Software Foundation.
 *
 * NO WARRANTY
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES.
 */

#define DEFINE_ACPI_GLOBALS

#include <acpi/acpi.h>
#include <acpi/acnamesp.h>

#define _COMPONENT          ACPI_UTILITIES
Len Brown's avatar
Len Brown committed
50
ACPI_MODULE_NAME("utglobal")
Linus Torvalds's avatar
Linus Torvalds committed
51

52
/*******************************************************************************
Linus Torvalds's avatar
Linus Torvalds committed
53 54 55 56 57
 *
 * FUNCTION:    acpi_format_exception
 *
 * PARAMETERS:  Status       - The acpi_status code to be formatted
 *
58 59
 * RETURN:      A string containing the exception text. A valid pointer is
 *              always returned.
Linus Torvalds's avatar
Linus Torvalds committed
60 61 62 63
 *
 * DESCRIPTION: This function translates an ACPI exception into an ASCII string.
 *
 ******************************************************************************/
Len Brown's avatar
Len Brown committed
64
const char *acpi_format_exception(acpi_status status)
Linus Torvalds's avatar
Linus Torvalds committed
65
{
Len Brown's avatar
Len Brown committed
66 67
	acpi_status sub_status;
	const char *exception = NULL;
Linus Torvalds's avatar
Linus Torvalds committed
68

Bob Moore's avatar
Bob Moore committed
69
	ACPI_FUNCTION_ENTRY();
Linus Torvalds's avatar
Linus Torvalds committed
70

Bob Moore's avatar
Bob Moore committed
71 72 73
	/*
	 * Status is composed of two parts, a "type" and an actual code
	 */
Linus Torvalds's avatar
Linus Torvalds committed
74 75 76 77 78 79
	sub_status = (status & ~AE_CODE_MASK);

	switch (status & AE_CODE_MASK) {
	case AE_CODE_ENVIRONMENTAL:

		if (sub_status <= AE_CODE_ENV_MAX) {
Len Brown's avatar
Len Brown committed
80
			exception = acpi_gbl_exception_names_env[sub_status];
Linus Torvalds's avatar
Linus Torvalds committed
81
		}
82
		break;
Linus Torvalds's avatar
Linus Torvalds committed
83 84 85 86

	case AE_CODE_PROGRAMMER:

		if (sub_status <= AE_CODE_PGM_MAX) {
Len Brown's avatar
Len Brown committed
87 88
			exception =
			    acpi_gbl_exception_names_pgm[sub_status - 1];
Linus Torvalds's avatar
Linus Torvalds committed
89
		}
90
		break;
Linus Torvalds's avatar
Linus Torvalds committed
91 92 93 94

	case AE_CODE_ACPI_TABLES:

		if (sub_status <= AE_CODE_TBL_MAX) {
Len Brown's avatar
Len Brown committed
95 96
			exception =
			    acpi_gbl_exception_names_tbl[sub_status - 1];
Linus Torvalds's avatar
Linus Torvalds committed
97
		}
98
		break;
Linus Torvalds's avatar
Linus Torvalds committed
99 100 101 102

	case AE_CODE_AML:

		if (sub_status <= AE_CODE_AML_MAX) {
Len Brown's avatar
Len Brown committed
103 104
			exception =
			    acpi_gbl_exception_names_aml[sub_status - 1];
Linus Torvalds's avatar
Linus Torvalds committed
105
		}
106
		break;
Linus Torvalds's avatar
Linus Torvalds committed
107 108 109 110

	case AE_CODE_CONTROL:

		if (sub_status <= AE_CODE_CTRL_MAX) {
Len Brown's avatar
Len Brown committed
111 112
			exception =
			    acpi_gbl_exception_names_ctrl[sub_status - 1];
Linus Torvalds's avatar
Linus Torvalds committed
113
		}
114
		break;
Linus Torvalds's avatar
Linus Torvalds committed
115 116

	default:
117
		break;
Linus Torvalds's avatar
Linus Torvalds committed
118 119
	}

120
	if (!exception) {
Bob Moore's avatar
Bob Moore committed
121

122
		/* Exception code was not recognized */
Linus Torvalds's avatar
Linus Torvalds committed
123

Bob Moore's avatar
Bob Moore committed
124 125
		ACPI_ERROR((AE_INFO,
			    "Unknown exception code: 0x%8.8X", status));
Linus Torvalds's avatar
Linus Torvalds committed
126

Bob Moore's avatar
Bob Moore committed
127
		exception = "UNKNOWN_STATUS_CODE";
128
	}
Linus Torvalds's avatar
Linus Torvalds committed
129

Bob Moore's avatar
Bob Moore committed
130
	return (ACPI_CAST_PTR(const char, exception));
Linus Torvalds's avatar
Linus Torvalds committed
131 132
}

133
/*******************************************************************************
Linus Torvalds's avatar
Linus Torvalds committed
134 135 136 137 138 139 140 141 142 143 144
 *
 * Static global variable initialization.
 *
 ******************************************************************************/

/*
 * We want the debug switches statically initialized so they
 * are already set when the debugger is entered.
 */

/* Debug switch - level and trace mask */
Len Brown's avatar
Len Brown committed
145
u32 acpi_dbg_level = ACPI_DEBUG_DEFAULT;
Linus Torvalds's avatar
Linus Torvalds committed
146 147 148

/* Debug switch - layer (component) mask */

Len Brown's avatar
Len Brown committed
149 150
u32 acpi_dbg_layer = ACPI_COMPONENT_DEFAULT | ACPI_ALL_DRIVERS;
u32 acpi_gbl_nesting_level = 0;
Linus Torvalds's avatar
Linus Torvalds committed
151 152 153

/* Debugger globals */

Len Brown's avatar
Len Brown committed
154 155 156
u8 acpi_gbl_db_terminate_threads = FALSE;
u8 acpi_gbl_abort_method = FALSE;
u8 acpi_gbl_method_executing = FALSE;
Linus Torvalds's avatar
Linus Torvalds committed
157 158 159

/* System flags */

Len Brown's avatar
Len Brown committed
160
u32 acpi_gbl_startup_flags = 0;
Linus Torvalds's avatar
Linus Torvalds committed
161 162 163

/* System starts uninitialized */

Len Brown's avatar
Len Brown committed
164
u8 acpi_gbl_shutdown = TRUE;
Linus Torvalds's avatar
Linus Torvalds committed
165

Len Brown's avatar
Len Brown committed
166
const u8 acpi_gbl_decode_to8bit[8] = { 1, 2, 4, 8, 16, 32, 64, 128 };
Linus Torvalds's avatar
Linus Torvalds committed
167

Len Brown's avatar
Len Brown committed
168
const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT] = {
Linus Torvalds's avatar
Linus Torvalds committed
169 170 171 172 173 174 175 176
	"\\_S0_",
	"\\_S1_",
	"\\_S2_",
	"\\_S3_",
	"\\_S4_",
	"\\_S5_"
};

Len Brown's avatar
Len Brown committed
177
const char *acpi_gbl_highest_dstate_names[4] = {
Linus Torvalds's avatar
Linus Torvalds committed
178 179 180 181 182 183
	"_S1D",
	"_S2D",
	"_S3D",
	"_S4D"
};

184
/*******************************************************************************
Linus Torvalds's avatar
Linus Torvalds committed
185 186 187 188 189 190 191 192 193 194 195 196 197 198
 *
 * Namespace globals
 *
 ******************************************************************************/

/*
 * Predefined ACPI Names (Built-in to the Interpreter)
 *
 * NOTES:
 * 1) _SB_ is defined to be a device to allow \_SB_._INI to be run
 *    during the initialization sequence.
 * 2) _TZ_ is defined to be a thermal zone in order to allow ASL code to
 *    perform a Notify() operation on it.
 */
Bob Moore's avatar
Bob Moore committed
199 200 201 202 203 204 205 206 207
const struct acpi_predefined_names acpi_gbl_pre_defined_names[] = {
	{"_GPE", ACPI_TYPE_LOCAL_SCOPE, NULL},
	{"_PR_", ACPI_TYPE_LOCAL_SCOPE, NULL},
	{"_SB_", ACPI_TYPE_DEVICE, NULL},
	{"_SI_", ACPI_TYPE_LOCAL_SCOPE, NULL},
	{"_TZ_", ACPI_TYPE_THERMAL, NULL},
	{"_REV", ACPI_TYPE_INTEGER, (char *)ACPI_CA_SUPPORT_LEVEL},
	{"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
	{"_GL_", ACPI_TYPE_MUTEX, (char *)1},
Linus Torvalds's avatar
Linus Torvalds committed
208 209

#if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
Bob Moore's avatar
Bob Moore committed
210
	{"_OSI", ACPI_TYPE_METHOD, (char *)1},
Linus Torvalds's avatar
Linus Torvalds committed
211 212
#endif

213 214
	/* Table terminator */

Bob Moore's avatar
Bob Moore committed
215
	{NULL, ACPI_TYPE_ANY, NULL}
216
};
Linus Torvalds's avatar
Linus Torvalds committed
217 218 219 220 221

/*
 * Properties of the ACPI Object Types, both internal and external.
 * The table is indexed by values of acpi_object_type
 */
Len Brown's avatar
Len Brown committed
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
const u8 acpi_gbl_ns_properties[] = {
	ACPI_NS_NORMAL,		/* 00 Any              */
	ACPI_NS_NORMAL,		/* 01 Number           */
	ACPI_NS_NORMAL,		/* 02 String           */
	ACPI_NS_NORMAL,		/* 03 Buffer           */
	ACPI_NS_NORMAL,		/* 04 Package          */
	ACPI_NS_NORMAL,		/* 05 field_unit       */
	ACPI_NS_NEWSCOPE,	/* 06 Device           */
	ACPI_NS_NORMAL,		/* 07 Event            */
	ACPI_NS_NEWSCOPE,	/* 08 Method           */
	ACPI_NS_NORMAL,		/* 09 Mutex            */
	ACPI_NS_NORMAL,		/* 10 Region           */
	ACPI_NS_NEWSCOPE,	/* 11 Power            */
	ACPI_NS_NEWSCOPE,	/* 12 Processor        */
	ACPI_NS_NEWSCOPE,	/* 13 Thermal          */
	ACPI_NS_NORMAL,		/* 14 buffer_field     */
	ACPI_NS_NORMAL,		/* 15 ddb_handle       */
	ACPI_NS_NORMAL,		/* 16 Debug Object     */
	ACPI_NS_NORMAL,		/* 17 def_field        */
	ACPI_NS_NORMAL,		/* 18 bank_field       */
	ACPI_NS_NORMAL,		/* 19 index_field      */
	ACPI_NS_NORMAL,		/* 20 Reference        */
	ACPI_NS_NORMAL,		/* 21 Alias            */
	ACPI_NS_NORMAL,		/* 22 method_alias     */
	ACPI_NS_NORMAL,		/* 23 Notify           */
	ACPI_NS_NORMAL,		/* 24 Address Handler  */
	ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,	/* 25 Resource Desc    */
	ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,	/* 26 Resource Field   */
	ACPI_NS_NEWSCOPE,	/* 27 Scope            */
	ACPI_NS_NORMAL,		/* 28 Extra            */
	ACPI_NS_NORMAL,		/* 29 Data             */
	ACPI_NS_NORMAL		/* 30 Invalid          */
Linus Torvalds's avatar
Linus Torvalds committed
254 255 256 257
};

/* Hex to ASCII conversion table */

Len Brown's avatar
Len Brown committed
258 259 260
static const char acpi_gbl_hex_to_ascii[] = {
	'0', '1', '2', '3', '4', '5', '6', '7',
	'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
261 262 263
};

/*******************************************************************************
Linus Torvalds's avatar
Linus Torvalds committed
264 265 266 267 268
 *
 * FUNCTION:    acpi_ut_hex_to_ascii_char
 *
 * PARAMETERS:  Integer             - Contains the hex digit
 *              Position            - bit position of the digit within the
269
 *                                    integer (multiple of 4)
Linus Torvalds's avatar
Linus Torvalds committed
270
 *
271
 * RETURN:      The converted Ascii character
Linus Torvalds's avatar
Linus Torvalds committed
272
 *
273
 * DESCRIPTION: Convert a hex digit to an Ascii character
Linus Torvalds's avatar
Linus Torvalds committed
274
 *
275
 ******************************************************************************/
Linus Torvalds's avatar
Linus Torvalds committed
276

Len Brown's avatar
Len Brown committed
277
char acpi_ut_hex_to_ascii_char(acpi_integer integer, u32 position)
Linus Torvalds's avatar
Linus Torvalds committed
278 279 280 281 282
{

	return (acpi_gbl_hex_to_ascii[(integer >> position) & 0xF]);
}

283
/*******************************************************************************
Linus Torvalds's avatar
Linus Torvalds committed
284 285 286 287 288 289 290 291
 *
 * Table name globals
 *
 * NOTE: This table includes ONLY the ACPI tables that the subsystem consumes.
 * it is NOT an exhaustive list of all possible ACPI tables.  All ACPI tables
 * that are not used by the subsystem are simply ignored.
 *
 * Do NOT add any table to this list that is not consumed directly by this
292
 * subsystem (No MADT, ECDT, SBST, etc.)
Linus Torvalds's avatar
Linus Torvalds committed
293 294 295
 *
 ******************************************************************************/

Bob Moore's avatar
Bob Moore committed
296
struct acpi_table_list acpi_gbl_table_lists[ACPI_TABLE_ID_MAX + 1];
Linus Torvalds's avatar
Linus Torvalds committed
297

Bob Moore's avatar
Bob Moore committed
298
struct acpi_table_support acpi_gbl_table_data[ACPI_TABLE_ID_MAX + 1] = {
Linus Torvalds's avatar
Linus Torvalds committed
299 300
	/***********    Name,   Signature, Global typed pointer     Signature size,      Type                  How many allowed?,    Contains valid AML? */

Len Brown's avatar
Len Brown committed
301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327
	/* RSDP 0 */ {RSDP_NAME, RSDP_SIG, NULL, sizeof(RSDP_SIG) - 1,
		      ACPI_TABLE_ROOT | ACPI_TABLE_SINGLE}
	,
	/* DSDT 1 */ {DSDT_SIG, DSDT_SIG, (void *)&acpi_gbl_DSDT,
		      sizeof(DSDT_SIG) - 1,
		      ACPI_TABLE_SECONDARY | ACPI_TABLE_SINGLE |
		      ACPI_TABLE_EXECUTABLE}
	,
	/* FADT 2 */ {FADT_SIG, FADT_SIG, (void *)&acpi_gbl_FADT,
		      sizeof(FADT_SIG) - 1,
		      ACPI_TABLE_PRIMARY | ACPI_TABLE_SINGLE}
	,
	/* FACS 3 */ {FACS_SIG, FACS_SIG, (void *)&acpi_gbl_FACS,
		      sizeof(FACS_SIG) - 1,
		      ACPI_TABLE_SECONDARY | ACPI_TABLE_SINGLE}
	,
	/* PSDT 4 */ {PSDT_SIG, PSDT_SIG, NULL, sizeof(PSDT_SIG) - 1,
		      ACPI_TABLE_PRIMARY | ACPI_TABLE_MULTIPLE |
		      ACPI_TABLE_EXECUTABLE}
	,
	/* SSDT 5 */ {SSDT_SIG, SSDT_SIG, NULL, sizeof(SSDT_SIG) - 1,
		      ACPI_TABLE_PRIMARY | ACPI_TABLE_MULTIPLE |
		      ACPI_TABLE_EXECUTABLE}
	,
	/* XSDT 6 */ {XSDT_SIG, XSDT_SIG, NULL, sizeof(RSDT_SIG) - 1,
		      ACPI_TABLE_ROOT | ACPI_TABLE_SINGLE}
	,
Linus Torvalds's avatar
Linus Torvalds committed
328 329 330 331 332 333 334 335
};

/******************************************************************************
 *
 * Event and Hardware globals
 *
 ******************************************************************************/

Len Brown's avatar
Len Brown committed
336
struct acpi_bit_register_info acpi_gbl_bit_register_info[ACPI_NUM_BITREG] = {
Linus Torvalds's avatar
Linus Torvalds committed
337 338
	/* Name                                     Parent Register             Register Bit Position                   Register Bit Mask       */

Len Brown's avatar
Len Brown committed
339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405
	/* ACPI_BITREG_TIMER_STATUS         */ {ACPI_REGISTER_PM1_STATUS,
						ACPI_BITPOSITION_TIMER_STATUS,
						ACPI_BITMASK_TIMER_STATUS},
	/* ACPI_BITREG_BUS_MASTER_STATUS    */ {ACPI_REGISTER_PM1_STATUS,
						ACPI_BITPOSITION_BUS_MASTER_STATUS,
						ACPI_BITMASK_BUS_MASTER_STATUS},
	/* ACPI_BITREG_GLOBAL_LOCK_STATUS   */ {ACPI_REGISTER_PM1_STATUS,
						ACPI_BITPOSITION_GLOBAL_LOCK_STATUS,
						ACPI_BITMASK_GLOBAL_LOCK_STATUS},
	/* ACPI_BITREG_POWER_BUTTON_STATUS  */ {ACPI_REGISTER_PM1_STATUS,
						ACPI_BITPOSITION_POWER_BUTTON_STATUS,
						ACPI_BITMASK_POWER_BUTTON_STATUS},
	/* ACPI_BITREG_SLEEP_BUTTON_STATUS  */ {ACPI_REGISTER_PM1_STATUS,
						ACPI_BITPOSITION_SLEEP_BUTTON_STATUS,
						ACPI_BITMASK_SLEEP_BUTTON_STATUS},
	/* ACPI_BITREG_RT_CLOCK_STATUS      */ {ACPI_REGISTER_PM1_STATUS,
						ACPI_BITPOSITION_RT_CLOCK_STATUS,
						ACPI_BITMASK_RT_CLOCK_STATUS},
	/* ACPI_BITREG_WAKE_STATUS          */ {ACPI_REGISTER_PM1_STATUS,
						ACPI_BITPOSITION_WAKE_STATUS,
						ACPI_BITMASK_WAKE_STATUS},
	/* ACPI_BITREG_PCIEXP_WAKE_STATUS   */ {ACPI_REGISTER_PM1_STATUS,
						ACPI_BITPOSITION_PCIEXP_WAKE_STATUS,
						ACPI_BITMASK_PCIEXP_WAKE_STATUS},

	/* ACPI_BITREG_TIMER_ENABLE         */ {ACPI_REGISTER_PM1_ENABLE,
						ACPI_BITPOSITION_TIMER_ENABLE,
						ACPI_BITMASK_TIMER_ENABLE},
	/* ACPI_BITREG_GLOBAL_LOCK_ENABLE   */ {ACPI_REGISTER_PM1_ENABLE,
						ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE,
						ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
	/* ACPI_BITREG_POWER_BUTTON_ENABLE  */ {ACPI_REGISTER_PM1_ENABLE,
						ACPI_BITPOSITION_POWER_BUTTON_ENABLE,
						ACPI_BITMASK_POWER_BUTTON_ENABLE},
	/* ACPI_BITREG_SLEEP_BUTTON_ENABLE  */ {ACPI_REGISTER_PM1_ENABLE,
						ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE,
						ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
	/* ACPI_BITREG_RT_CLOCK_ENABLE      */ {ACPI_REGISTER_PM1_ENABLE,
						ACPI_BITPOSITION_RT_CLOCK_ENABLE,
						ACPI_BITMASK_RT_CLOCK_ENABLE},
	/* ACPI_BITREG_WAKE_ENABLE          */ {ACPI_REGISTER_PM1_ENABLE, 0, 0},
	/* ACPI_BITREG_PCIEXP_WAKE_DISABLE  */ {ACPI_REGISTER_PM1_ENABLE,
						ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE,
						ACPI_BITMASK_PCIEXP_WAKE_DISABLE},

	/* ACPI_BITREG_SCI_ENABLE           */ {ACPI_REGISTER_PM1_CONTROL,
						ACPI_BITPOSITION_SCI_ENABLE,
						ACPI_BITMASK_SCI_ENABLE},
	/* ACPI_BITREG_BUS_MASTER_RLD       */ {ACPI_REGISTER_PM1_CONTROL,
						ACPI_BITPOSITION_BUS_MASTER_RLD,
						ACPI_BITMASK_BUS_MASTER_RLD},
	/* ACPI_BITREG_GLOBAL_LOCK_RELEASE  */ {ACPI_REGISTER_PM1_CONTROL,
						ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE,
						ACPI_BITMASK_GLOBAL_LOCK_RELEASE},
	/* ACPI_BITREG_SLEEP_TYPE_A         */ {ACPI_REGISTER_PM1_CONTROL,
						ACPI_BITPOSITION_SLEEP_TYPE_X,
						ACPI_BITMASK_SLEEP_TYPE_X},
	/* ACPI_BITREG_SLEEP_TYPE_B         */ {ACPI_REGISTER_PM1_CONTROL,
						ACPI_BITPOSITION_SLEEP_TYPE_X,
						ACPI_BITMASK_SLEEP_TYPE_X},
	/* ACPI_BITREG_SLEEP_ENABLE         */ {ACPI_REGISTER_PM1_CONTROL,
						ACPI_BITPOSITION_SLEEP_ENABLE,
						ACPI_BITMASK_SLEEP_ENABLE},

	/* ACPI_BITREG_ARB_DIS              */ {ACPI_REGISTER_PM2_CONTROL,
						ACPI_BITPOSITION_ARB_DISABLE,
						ACPI_BITMASK_ARB_DISABLE}
Linus Torvalds's avatar
Linus Torvalds committed
406 407
};

Len Brown's avatar
Len Brown committed
408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428
struct acpi_fixed_event_info acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS] = {
	/* ACPI_EVENT_PMTIMER       */ {ACPI_BITREG_TIMER_STATUS,
					ACPI_BITREG_TIMER_ENABLE,
					ACPI_BITMASK_TIMER_STATUS,
					ACPI_BITMASK_TIMER_ENABLE},
	/* ACPI_EVENT_GLOBAL        */ {ACPI_BITREG_GLOBAL_LOCK_STATUS,
					ACPI_BITREG_GLOBAL_LOCK_ENABLE,
					ACPI_BITMASK_GLOBAL_LOCK_STATUS,
					ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
	/* ACPI_EVENT_POWER_BUTTON  */ {ACPI_BITREG_POWER_BUTTON_STATUS,
					ACPI_BITREG_POWER_BUTTON_ENABLE,
					ACPI_BITMASK_POWER_BUTTON_STATUS,
					ACPI_BITMASK_POWER_BUTTON_ENABLE},
	/* ACPI_EVENT_SLEEP_BUTTON  */ {ACPI_BITREG_SLEEP_BUTTON_STATUS,
					ACPI_BITREG_SLEEP_BUTTON_ENABLE,
					ACPI_BITMASK_SLEEP_BUTTON_STATUS,
					ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
	/* ACPI_EVENT_RTC           */ {ACPI_BITREG_RT_CLOCK_STATUS,
					ACPI_BITREG_RT_CLOCK_ENABLE,
					ACPI_BITMASK_RT_CLOCK_STATUS,
					ACPI_BITMASK_RT_CLOCK_ENABLE},
Linus Torvalds's avatar
Linus Torvalds committed
429 430
};

431
/*******************************************************************************
Linus Torvalds's avatar
Linus Torvalds committed
432 433 434 435 436 437 438 439 440
 *
 * FUNCTION:    acpi_ut_get_region_name
 *
 * PARAMETERS:  None.
 *
 * RETURN:      Status
 *
 * DESCRIPTION: Translate a Space ID into a name string (Debug only)
 *
441
 ******************************************************************************/
Linus Torvalds's avatar
Linus Torvalds committed
442 443 444

/* Region type decoding */

Len Brown's avatar
Len Brown committed
445
const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS] = {
Linus Torvalds's avatar
Linus Torvalds committed
446 447 448 449 450 451 452 453 454 455
	"SystemMemory",
	"SystemIO",
	"PCI_Config",
	"EmbeddedControl",
	"SMBus",
	"CMOS",
	"PCIBARTarget",
	"DataTable"
};

Len Brown's avatar
Len Brown committed
456
char *acpi_ut_get_region_name(u8 space_id)
Linus Torvalds's avatar
Linus Torvalds committed
457 458
{

Len Brown's avatar
Len Brown committed
459
	if (space_id >= ACPI_USER_REGION_BEGIN) {
Bob Moore's avatar
Bob Moore committed
460
		return ("UserDefinedRegion");
Len Brown's avatar
Len Brown committed
461
	} else if (space_id >= ACPI_NUM_PREDEFINED_REGIONS) {
Bob Moore's avatar
Bob Moore committed
462
		return ("InvalidSpaceId");
Linus Torvalds's avatar
Linus Torvalds committed
463 464
	}

Bob Moore's avatar
Bob Moore committed
465
	return (ACPI_CAST_PTR(char, acpi_gbl_region_types[space_id]));
Linus Torvalds's avatar
Linus Torvalds committed
466 467
}

468
/*******************************************************************************
Linus Torvalds's avatar
Linus Torvalds committed
469 470 471 472 473 474 475 476 477
 *
 * FUNCTION:    acpi_ut_get_event_name
 *
 * PARAMETERS:  None.
 *
 * RETURN:      Status
 *
 * DESCRIPTION: Translate a Event ID into a name string (Debug only)
 *
478
 ******************************************************************************/
Linus Torvalds's avatar
Linus Torvalds committed
479 480 481

/* Event type decoding */

Len Brown's avatar
Len Brown committed
482
static const char *acpi_gbl_event_types[ACPI_NUM_FIXED_EVENTS] = {
Linus Torvalds's avatar
Linus Torvalds committed
483
	"PM_Timer",
Bob Moore's avatar
Bob Moore committed
484 485 486 487
	"GlobalLock",
	"PowerButton",
	"SleepButton",
	"RealTimeClock",
Linus Torvalds's avatar
Linus Torvalds committed
488 489
};

Len Brown's avatar
Len Brown committed
490
char *acpi_ut_get_event_name(u32 event_id)
Linus Torvalds's avatar
Linus Torvalds committed
491 492
{

Len Brown's avatar
Len Brown committed
493
	if (event_id > ACPI_EVENT_MAX) {
Bob Moore's avatar
Bob Moore committed
494
		return ("InvalidEventID");
Linus Torvalds's avatar
Linus Torvalds committed
495 496
	}

Bob Moore's avatar
Bob Moore committed
497
	return (ACPI_CAST_PTR(char, acpi_gbl_event_types[event_id]));
Linus Torvalds's avatar
Linus Torvalds committed
498 499
}

500
/*******************************************************************************
Linus Torvalds's avatar
Linus Torvalds committed
501 502 503 504 505 506 507 508 509
 *
 * FUNCTION:    acpi_ut_get_type_name
 *
 * PARAMETERS:  None.
 *
 * RETURN:      Status
 *
 * DESCRIPTION: Translate a Type ID into a name string (Debug only)
 *
510
 ******************************************************************************/
Linus Torvalds's avatar
Linus Torvalds committed
511 512 513 514 515

/*
 * Elements of acpi_gbl_ns_type_names below must match
 * one-to-one with values of acpi_object_type
 *
516 517 518
 * The type ACPI_TYPE_ANY (Untyped) is used as a "don't care" when searching;
 * when stored in a table it really means that we have thus far seen no
 * evidence to indicate what type is actually going to be stored for this entry.
Linus Torvalds's avatar
Linus Torvalds committed
519
 */
Len Brown's avatar
Len Brown committed
520
static const char acpi_gbl_bad_type[] = "UNDEFINED";
Linus Torvalds's avatar
Linus Torvalds committed
521

522 523
/* Printable names of the ACPI object types */

Len Brown's avatar
Len Brown committed
524
static const char *acpi_gbl_ns_type_names[] = {
Linus Torvalds's avatar
Linus Torvalds committed
525 526 527 528 529
	/* 00 */ "Untyped",
	/* 01 */ "Integer",
	/* 02 */ "String",
	/* 03 */ "Buffer",
	/* 04 */ "Package",
Bob Moore's avatar
Bob Moore committed
530
	/* 05 */ "FieldUnit",
Linus Torvalds's avatar
Linus Torvalds committed
531 532 533 534 535 536 537 538
	/* 06 */ "Device",
	/* 07 */ "Event",
	/* 08 */ "Method",
	/* 09 */ "Mutex",
	/* 10 */ "Region",
	/* 11 */ "Power",
	/* 12 */ "Processor",
	/* 13 */ "Thermal",
Bob Moore's avatar
Bob Moore committed
539 540 541 542 543 544
	/* 14 */ "BufferField",
	/* 15 */ "DdbHandle",
	/* 16 */ "DebugObject",
	/* 17 */ "RegionField",
	/* 18 */ "BankField",
	/* 19 */ "IndexField",
Linus Torvalds's avatar
Linus Torvalds committed
545 546
	/* 20 */ "Reference",
	/* 21 */ "Alias",
Bob Moore's avatar
Bob Moore committed
547
	/* 22 */ "MethodAlias",
Linus Torvalds's avatar
Linus Torvalds committed
548
	/* 23 */ "Notify",
Bob Moore's avatar
Bob Moore committed
549 550 551
	/* 24 */ "AddrHandler",
	/* 25 */ "ResourceDesc",
	/* 26 */ "ResourceFld",
Linus Torvalds's avatar
Linus Torvalds committed
552 553 554 555 556 557
	/* 27 */ "Scope",
	/* 28 */ "Extra",
	/* 29 */ "Data",
	/* 30 */ "Invalid"
};

Len Brown's avatar
Len Brown committed
558
char *acpi_ut_get_type_name(acpi_object_type type)
Linus Torvalds's avatar
Linus Torvalds committed
559 560
{

Len Brown's avatar
Len Brown committed
561
	if (type > ACPI_TYPE_INVALID) {
Bob Moore's avatar
Bob Moore committed
562
		return (ACPI_CAST_PTR(char, acpi_gbl_bad_type));
Linus Torvalds's avatar
Linus Torvalds committed
563 564
	}

Bob Moore's avatar
Bob Moore committed
565
	return (ACPI_CAST_PTR(char, acpi_gbl_ns_type_names[type]));
Linus Torvalds's avatar
Linus Torvalds committed
566 567
}

Len Brown's avatar
Len Brown committed
568
char *acpi_ut_get_object_type_name(union acpi_operand_object *obj_desc)
Linus Torvalds's avatar
Linus Torvalds committed
569 570
{

Len Brown's avatar
Len Brown committed
571
	if (!obj_desc) {
Linus Torvalds's avatar
Linus Torvalds committed
572 573 574
		return ("[NULL Object Descriptor]");
	}

Len Brown's avatar
Len Brown committed
575
	return (acpi_ut_get_type_name(ACPI_GET_OBJECT_TYPE(obj_desc)));
Linus Torvalds's avatar
Linus Torvalds committed
576 577
}

578
/*******************************************************************************
Linus Torvalds's avatar
Linus Torvalds committed
579 580 581 582 583 584 585 586 587
 *
 * FUNCTION:    acpi_ut_get_node_name
 *
 * PARAMETERS:  Object               - A namespace node
 *
 * RETURN:      Pointer to a string
 *
 * DESCRIPTION: Validate the node and return the node's ACPI name.
 *
588
 ******************************************************************************/
Linus Torvalds's avatar
Linus Torvalds committed
589

Len Brown's avatar
Len Brown committed
590
char *acpi_ut_get_node_name(void *object)
Linus Torvalds's avatar
Linus Torvalds committed
591
{
Len Brown's avatar
Len Brown committed
592
	struct acpi_namespace_node *node = (struct acpi_namespace_node *)object;
Linus Torvalds's avatar
Linus Torvalds committed
593 594 595

	/* Must return a string of exactly 4 characters == ACPI_NAME_SIZE */

Len Brown's avatar
Len Brown committed
596
	if (!object) {
Linus Torvalds's avatar
Linus Torvalds committed
597 598 599 600 601
		return ("NULL");
	}

	/* Check for Root node */

Len Brown's avatar
Len Brown committed
602
	if ((object == ACPI_ROOT_OBJECT) || (object == acpi_gbl_root_node)) {
Linus Torvalds's avatar
Linus Torvalds committed
603 604 605 606 607
		return ("\"\\\" ");
	}

	/* Descriptor must be a namespace node */

Bob Moore's avatar
Bob Moore committed
608
	if (ACPI_GET_DESCRIPTOR_TYPE(node) != ACPI_DESC_TYPE_NAMED) {
Linus Torvalds's avatar
Linus Torvalds committed
609 610 611 612 613
		return ("####");
	}

	/* Name must be a valid ACPI name */

Bob Moore's avatar
Bob Moore committed
614
	if (!acpi_ut_valid_acpi_name(node->name.integer)) {
Bob Moore's avatar
Bob Moore committed
615
		node->name.integer = acpi_ut_repair_name(node->name.integer);
Linus Torvalds's avatar
Linus Torvalds committed
616 617 618 619 620 621 622
	}

	/* Return the name */

	return (node->name.ascii);
}

623
/*******************************************************************************
Linus Torvalds's avatar
Linus Torvalds committed
624 625 626 627 628 629 630 631 632
 *
 * FUNCTION:    acpi_ut_get_descriptor_name
 *
 * PARAMETERS:  Object               - An ACPI object
 *
 * RETURN:      Pointer to a string
 *
 * DESCRIPTION: Validate object and return the descriptor type
 *
633 634 635
 ******************************************************************************/

/* Printable names of object descriptor types */
Linus Torvalds's avatar
Linus Torvalds committed
636

Len Brown's avatar
Len Brown committed
637
static const char *acpi_gbl_desc_type_names[] = {
Linus Torvalds's avatar
Linus Torvalds committed
638 639 640 641 642 643
	/* 00 */ "Invalid",
	/* 01 */ "Cached",
	/* 02 */ "State-Generic",
	/* 03 */ "State-Update",
	/* 04 */ "State-Package",
	/* 05 */ "State-Control",
Bob Moore's avatar
Bob Moore committed
644 645 646
	/* 06 */ "State-RootParseScope",
	/* 07 */ "State-ParseScope",
	/* 08 */ "State-WalkScope",
Linus Torvalds's avatar
Linus Torvalds committed
647 648 649 650 651 652 653 654 655
	/* 09 */ "State-Result",
	/* 10 */ "State-Notify",
	/* 11 */ "State-Thread",
	/* 12 */ "Walk",
	/* 13 */ "Parser",
	/* 14 */ "Operand",
	/* 15 */ "Node"
};

Len Brown's avatar
Len Brown committed
656
char *acpi_ut_get_descriptor_name(void *object)
Linus Torvalds's avatar
Linus Torvalds committed
657 658
{

Len Brown's avatar
Len Brown committed
659
	if (!object) {
Linus Torvalds's avatar
Linus Torvalds committed
660 661 662
		return ("NULL OBJECT");
	}

Len Brown's avatar
Len Brown committed
663
	if (ACPI_GET_DESCRIPTOR_TYPE(object) > ACPI_DESC_TYPE_MAX) {
Bob Moore's avatar
Bob Moore committed
664
		return (ACPI_CAST_PTR(char, acpi_gbl_bad_type));
Linus Torvalds's avatar
Linus Torvalds committed
665 666
	}

Bob Moore's avatar
Bob Moore committed
667 668 669
	return (ACPI_CAST_PTR(char,
			      acpi_gbl_desc_type_names[ACPI_GET_DESCRIPTOR_TYPE
						       (object)]));
Linus Torvalds's avatar
Linus Torvalds committed
670 671 672 673 674 675 676 677

}

#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
/*
 * Strings and procedures used for debug only
 */

678
/*******************************************************************************
Linus Torvalds's avatar
Linus Torvalds committed
679 680 681
 *
 * FUNCTION:    acpi_ut_get_mutex_name
 *
682
 * PARAMETERS:  mutex_id        - The predefined ID for this mutex.
Linus Torvalds's avatar
Linus Torvalds committed
683
 *
684 685
 * RETURN:      String containing the name of the mutex. Always returns a valid
 *              pointer.
Linus Torvalds's avatar
Linus Torvalds committed
686 687 688
 *
 * DESCRIPTION: Translate a mutex ID into a name string (Debug only)
 *
689
 ******************************************************************************/
Linus Torvalds's avatar
Linus Torvalds committed
690

Len Brown's avatar
Len Brown committed
691
char *acpi_ut_get_mutex_name(u32 mutex_id)
Linus Torvalds's avatar
Linus Torvalds committed
692 693
{

Bob Moore's avatar
Bob Moore committed
694
	if (mutex_id > ACPI_MAX_MUTEX) {
Linus Torvalds's avatar
Linus Torvalds committed
695 696 697 698 699 700 701
		return ("Invalid Mutex ID");
	}

	return (acpi_gbl_mutex_names[mutex_id]);
}
#endif

702
/*******************************************************************************
Linus Torvalds's avatar
Linus Torvalds committed
703 704 705 706 707
 *
 * FUNCTION:    acpi_ut_valid_object_type
 *
 * PARAMETERS:  Type            - Object type to be validated
 *
708
 * RETURN:      TRUE if valid object type, FALSE otherwise
Linus Torvalds's avatar
Linus Torvalds committed
709 710 711
 *
 * DESCRIPTION: Validate an object type
 *
712
 ******************************************************************************/
Linus Torvalds's avatar
Linus Torvalds committed
713

Len Brown's avatar
Len Brown committed
714
u8 acpi_ut_valid_object_type(acpi_object_type type)
Linus Torvalds's avatar
Linus Torvalds committed
715 716
{

Len Brown's avatar
Len Brown committed
717
	if (type > ACPI_TYPE_LOCAL_MAX) {
Bob Moore's avatar
Bob Moore committed
718

Linus Torvalds's avatar
Linus Torvalds committed
719 720 721 722 723 724 725 726
		/* Note: Assumes all TYPEs are contiguous (external/local) */

		return (FALSE);
	}

	return (TRUE);
}

727
/*******************************************************************************
Linus Torvalds's avatar
Linus Torvalds committed
728 729 730
 *
 * FUNCTION:    acpi_ut_init_globals
 *
731 732 733
 * PARAMETERS:  None
 *
 * RETURN:      None
Linus Torvalds's avatar
Linus Torvalds committed
734 735 736 737
 *
 * DESCRIPTION: Init library globals.  All globals that require specific
 *              initialization should be initialized here!
 *
738
 ******************************************************************************/
Linus Torvalds's avatar
Linus Torvalds committed
739

Len Brown's avatar
Len Brown committed
740
void acpi_ut_init_globals(void)
Linus Torvalds's avatar
Linus Torvalds committed
741
{
Len Brown's avatar
Len Brown committed
742 743
	acpi_status status;
	u32 i;
Linus Torvalds's avatar
Linus Torvalds committed
744

Bob Moore's avatar
Bob Moore committed
745
	ACPI_FUNCTION_TRACE(ut_init_globals);
Linus Torvalds's avatar
Linus Torvalds committed
746

747 748
	/* Create all memory caches */

Len Brown's avatar
Len Brown committed
749 750
	status = acpi_ut_create_caches();
	if (ACPI_FAILURE(status)) {
751 752
		return;
	}
Linus Torvalds's avatar
Linus Torvalds committed
753 754 755

	/* ACPI table structure */

Bob Moore's avatar
Bob Moore committed
756
	for (i = 0; i < (ACPI_TABLE_ID_MAX + 1); i++) {
Len Brown's avatar
Len Brown committed
757 758
		acpi_gbl_table_lists[i].next = NULL;
		acpi_gbl_table_lists[i].count = 0;
Linus Torvalds's avatar
Linus Torvalds committed
759 760 761 762
	}

	/* Mutex locked flags */

Bob Moore's avatar
Bob Moore committed
763
	for (i = 0; i < ACPI_NUM_MUTEX; i++) {
Len Brown's avatar
Len Brown committed
764 765 766
		acpi_gbl_mutex_info[i].mutex = NULL;
		acpi_gbl_mutex_info[i].thread_id = ACPI_MUTEX_NOT_ACQUIRED;
		acpi_gbl_mutex_info[i].use_count = 0;
Linus Torvalds's avatar
Linus Torvalds committed
767 768
	}

Bob Moore's avatar
Bob Moore committed
769 770 771 772 773
	for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++) {
		acpi_gbl_owner_id_mask[i] = 0;
	}
	acpi_gbl_owner_id_mask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000;	/* Last ID is never valid */

Linus Torvalds's avatar
Linus Torvalds committed
774 775
	/* GPE support */

Len Brown's avatar
Len Brown committed
776 777 778
	acpi_gbl_gpe_xrupt_list_head = NULL;
	acpi_gbl_gpe_fadt_blocks[0] = NULL;
	acpi_gbl_gpe_fadt_blocks[1] = NULL;
Linus Torvalds's avatar
Linus Torvalds committed
779 780 781

	/* Global notify handlers */

Len Brown's avatar
Len Brown committed
782 783 784 785
	acpi_gbl_system_notify.handler = NULL;
	acpi_gbl_device_notify.handler = NULL;
	acpi_gbl_exception_handler = NULL;
	acpi_gbl_init_handler = NULL;
Linus Torvalds's avatar
Linus Torvalds committed
786 787 788

	/* Global "typed" ACPI table pointers */

Len Brown's avatar
Len Brown committed
789 790 791 792 793
	acpi_gbl_RSDP = NULL;
	acpi_gbl_XSDT = NULL;
	acpi_gbl_FACS = NULL;
	acpi_gbl_FADT = NULL;
	acpi_gbl_DSDT = NULL;
Linus Torvalds's avatar
Linus Torvalds committed
794 795 796

	/* Global Lock support */

Bob Moore's avatar
Bob Moore committed
797
	acpi_gbl_global_lock_semaphore = NULL;
Len Brown's avatar
Len Brown committed
798 799 800
	acpi_gbl_global_lock_acquired = FALSE;
	acpi_gbl_global_lock_thread_count = 0;
	acpi_gbl_global_lock_handle = 0;
Linus Torvalds's avatar
Linus Torvalds committed
801 802 803

	/* Miscellaneous variables */

Len Brown's avatar
Len Brown committed
804 805 806 807 808 809 810 811
	acpi_gbl_table_flags = ACPI_PHYSICAL_POINTER;
	acpi_gbl_rsdp_original_location = 0;
	acpi_gbl_cm_single_step = FALSE;
	acpi_gbl_db_terminate_threads = FALSE;
	acpi_gbl_shutdown = FALSE;
	acpi_gbl_ns_lookup_count = 0;
	acpi_gbl_ps_find_count = 0;
	acpi_gbl_acpi_hardware_present = TRUE;
Bob Moore's avatar
Bob Moore committed
812 813
	acpi_gbl_last_owner_id_index = 0;
	acpi_gbl_next_owner_id_offset = 0;
Bob Moore's avatar
Bob Moore committed
814 815 816
	acpi_gbl_trace_method_name = 0;
	acpi_gbl_trace_dbg_level = 0;
	acpi_gbl_trace_dbg_layer = 0;
Len Brown's avatar
Len Brown committed
817 818
	acpi_gbl_debugger_configuration = DEBUGGER_THREADING;
	acpi_gbl_db_output_flags = ACPI_DB_CONSOLE_OUTPUT;
Linus Torvalds's avatar
Linus Torvalds committed
819 820 821

	/* Hardware oriented */

Len Brown's avatar
Len Brown committed
822 823
	acpi_gbl_events_initialized = FALSE;
	acpi_gbl_system_awake_and_running = TRUE;
Linus Torvalds's avatar
Linus Torvalds committed
824 825 826

	/* Namespace */

Len Brown's avatar
Len Brown committed
827
	acpi_gbl_root_node = NULL;
Linus Torvalds's avatar
Linus Torvalds committed
828
	acpi_gbl_root_node_struct.name.integer = ACPI_ROOT_NAME;
Bob Moore's avatar
Bob Moore committed
829
	acpi_gbl_root_node_struct.descriptor_type = ACPI_DESC_TYPE_NAMED;
Len Brown's avatar
Len Brown committed
830 831 832 833 834
	acpi_gbl_root_node_struct.type = ACPI_TYPE_DEVICE;
	acpi_gbl_root_node_struct.child = NULL;
	acpi_gbl_root_node_struct.peer = NULL;
	acpi_gbl_root_node_struct.object = NULL;
	acpi_gbl_root_node_struct.flags = ANOBJ_END_OF_PEER_LIST;
Linus Torvalds's avatar
Linus Torvalds committed
835 836

#ifdef ACPI_DEBUG_OUTPUT
Len Brown's avatar
Len Brown committed
837
	acpi_gbl_lowest_stack_pointer = ACPI_SIZE_MAX;
Linus Torvalds's avatar
Linus Torvalds committed
838 839 840 841
#endif

	return_VOID;
}
Bob Moore's avatar
Bob Moore committed
842 843 844

ACPI_EXPORT_SYMBOL(acpi_dbg_level)
ACPI_EXPORT_SYMBOL(acpi_dbg_layer)