utglobal.c 11.8 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7
/******************************************************************************
 *
 * Module Name: utglobal - Global variables for the ACPI subsystem
 *
 *****************************************************************************/

/*
8
 * Copyright (C) 2000 - 2011, Intel Corp.
L
Linus Torvalds 已提交
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
 * 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>
L
Len Brown 已提交
47
#include "accommon.h"
L
Linus Torvalds 已提交
48 49

#define _COMPONENT          ACPI_UTILITIES
50
ACPI_MODULE_NAME("utglobal")
L
Linus Torvalds 已提交
51

R
Robert Moore 已提交
52
/*******************************************************************************
L
Linus Torvalds 已提交
53 54 55 56 57 58 59 60 61
 *
 * 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 */
L
Len Brown 已提交
62
u32 acpi_dbg_level = ACPI_DEBUG_DEFAULT;
L
Linus Torvalds 已提交
63 64 65

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

66
u32 acpi_dbg_layer = 0;
L
Len Brown 已提交
67
u32 acpi_gbl_nesting_level = 0;
L
Linus Torvalds 已提交
68 69 70

/* Debugger globals */

L
Len Brown 已提交
71 72 73
u8 acpi_gbl_db_terminate_threads = FALSE;
u8 acpi_gbl_abort_method = FALSE;
u8 acpi_gbl_method_executing = FALSE;
L
Linus Torvalds 已提交
74 75 76

/* System flags */

L
Len Brown 已提交
77
u32 acpi_gbl_startup_flags = 0;
L
Linus Torvalds 已提交
78 79 80

/* System starts uninitialized */

L
Len Brown 已提交
81
u8 acpi_gbl_shutdown = TRUE;
L
Linus Torvalds 已提交
82

L
Len Brown 已提交
83
const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT] = {
L
Linus Torvalds 已提交
84 85 86 87 88 89 90 91
	"\\_S0_",
	"\\_S1_",
	"\\_S2_",
	"\\_S3_",
	"\\_S4_",
	"\\_S5_"
};

92 93 94 95 96 97 98 99 100
const char *acpi_gbl_lowest_dstate_names[ACPI_NUM_sx_w_METHODS] = {
	"_S0W",
	"_S1W",
	"_S2W",
	"_S3W",
	"_S4W"
};

const char *acpi_gbl_highest_dstate_names[ACPI_NUM_sx_d_METHODS] = {
L
Linus Torvalds 已提交
101 102 103 104 105 106
	"_S1D",
	"_S2D",
	"_S3D",
	"_S4D"
};

107 108 109 110 111
/*******************************************************************************
 *
 * Namespace globals
 *
 ******************************************************************************/
L
Linus Torvalds 已提交
112 113 114 115 116 117 118
/*
 * 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
119 120 121
 *    perform a Notify() operation on it. 09/2010: Changed to type Device.
 *    This still allows notifies, but does not confuse host code that
 *    searches for valid thermal_zone objects.
L
Linus Torvalds 已提交
122
 */
B
Bob Moore 已提交
123 124 125 126 127
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},
128
	{"_TZ_", ACPI_TYPE_DEVICE, NULL},
B
Bob Moore 已提交
129 130 131
	{"_REV", ACPI_TYPE_INTEGER, (char *)ACPI_CA_SUPPORT_LEVEL},
	{"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
	{"_GL_", ACPI_TYPE_MUTEX, (char *)1},
L
Linus Torvalds 已提交
132 133

#if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
B
Bob Moore 已提交
134
	{"_OSI", ACPI_TYPE_METHOD, (char *)1},
L
Linus Torvalds 已提交
135 136
#endif

R
Robert Moore 已提交
137 138
	/* Table terminator */

B
Bob Moore 已提交
139
	{NULL, ACPI_TYPE_ANY, NULL}
R
Robert Moore 已提交
140
};
L
Linus Torvalds 已提交
141 142 143 144 145 146 147

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

L
Len Brown 已提交
148
struct acpi_bit_register_info acpi_gbl_bit_register_info[ACPI_NUM_BITREG] = {
L
Linus Torvalds 已提交
149 150
	/* Name                                     Parent Register             Register Bit Position                   Register Bit Mask       */

L
Len Brown 已提交
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
	/* 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_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},
204 205 206
	/* ACPI_BITREG_SLEEP_TYPE           */ {ACPI_REGISTER_PM1_CONTROL,
						ACPI_BITPOSITION_SLEEP_TYPE,
						ACPI_BITMASK_SLEEP_TYPE},
L
Len Brown 已提交
207 208 209 210 211 212 213
	/* 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}
L
Linus Torvalds 已提交
214 215
};

L
Len Brown 已提交
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236
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},
L
Linus Torvalds 已提交
237 238
};

R
Robert Moore 已提交
239
/*******************************************************************************
L
Linus Torvalds 已提交
240 241 242
 *
 * FUNCTION:    acpi_ut_init_globals
 *
R
Robert Moore 已提交
243 244
 * PARAMETERS:  None
 *
245
 * RETURN:      Status
L
Linus Torvalds 已提交
246 247 248 249
 *
 * DESCRIPTION: Init library globals.  All globals that require specific
 *              initialization should be initialized here!
 *
R
Robert Moore 已提交
250
 ******************************************************************************/
L
Linus Torvalds 已提交
251

252
acpi_status acpi_ut_init_globals(void)
L
Linus Torvalds 已提交
253
{
L
Len Brown 已提交
254 255
	acpi_status status;
	u32 i;
L
Linus Torvalds 已提交
256

B
Bob Moore 已提交
257
	ACPI_FUNCTION_TRACE(ut_init_globals);
L
Linus Torvalds 已提交
258

259 260
	/* Create all memory caches */

L
Len Brown 已提交
261 262
	status = acpi_ut_create_caches();
	if (ACPI_FAILURE(status)) {
263
		return_ACPI_STATUS(status);
264
	}
L
Linus Torvalds 已提交
265 266 267

	/* Mutex locked flags */

B
Bob Moore 已提交
268
	for (i = 0; i < ACPI_NUM_MUTEX; i++) {
L
Len Brown 已提交
269 270 271
		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;
L
Linus Torvalds 已提交
272 273
	}

B
Bob Moore 已提交
274 275 276
	for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++) {
		acpi_gbl_owner_id_mask[i] = 0;
	}
277 278 279 280

	/* Last owner_iD is never valid */

	acpi_gbl_owner_id_mask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000;
B
Bob Moore 已提交
281

L
Linus Torvalds 已提交
282 283
	/* GPE support */

L
Len Brown 已提交
284 285 286
	acpi_gbl_gpe_xrupt_list_head = NULL;
	acpi_gbl_gpe_fadt_blocks[0] = NULL;
	acpi_gbl_gpe_fadt_blocks[1] = NULL;
287
	acpi_current_gpe_count = 0;
288
	acpi_gbl_all_gpes_initialized = FALSE;
L
Linus Torvalds 已提交
289

290
	/* Global handlers */
L
Linus Torvalds 已提交
291

L
Len Brown 已提交
292 293 294 295
	acpi_gbl_system_notify.handler = NULL;
	acpi_gbl_device_notify.handler = NULL;
	acpi_gbl_exception_handler = NULL;
	acpi_gbl_init_handler = NULL;
296
	acpi_gbl_table_handler = NULL;
297
	acpi_gbl_interface_handler = NULL;
L
Lin Ming 已提交
298
	acpi_gbl_global_event_handler = NULL;
L
Linus Torvalds 已提交
299 300 301

	/* Global Lock support */

B
Bob Moore 已提交
302
	acpi_gbl_global_lock_semaphore = NULL;
303
	acpi_gbl_global_lock_mutex = NULL;
L
Len Brown 已提交
304 305
	acpi_gbl_global_lock_acquired = FALSE;
	acpi_gbl_global_lock_handle = 0;
306
	acpi_gbl_global_lock_present = FALSE;
L
Linus Torvalds 已提交
307 308 309

	/* Miscellaneous variables */

B
Bob Moore 已提交
310
	acpi_gbl_DSDT = NULL;
L
Len Brown 已提交
311 312 313 314 315 316
	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;
B
Bob Moore 已提交
317 318
	acpi_gbl_last_owner_id_index = 0;
	acpi_gbl_next_owner_id_offset = 0;
B
Bob Moore 已提交
319 320 321
	acpi_gbl_trace_method_name = 0;
	acpi_gbl_trace_dbg_level = 0;
	acpi_gbl_trace_dbg_layer = 0;
L
Len Brown 已提交
322 323
	acpi_gbl_debugger_configuration = DEBUGGER_THREADING;
	acpi_gbl_db_output_flags = ACPI_DB_CONSOLE_OUTPUT;
B
Bob Moore 已提交
324
	acpi_gbl_osi_data = 0;
325
	acpi_gbl_osi_mutex = NULL;
L
Linus Torvalds 已提交
326 327 328

	/* Hardware oriented */

L
Len Brown 已提交
329 330
	acpi_gbl_events_initialized = FALSE;
	acpi_gbl_system_awake_and_running = TRUE;
L
Linus Torvalds 已提交
331 332 333

	/* Namespace */

334
	acpi_gbl_module_code_list = NULL;
L
Len Brown 已提交
335
	acpi_gbl_root_node = NULL;
L
Linus Torvalds 已提交
336
	acpi_gbl_root_node_struct.name.integer = ACPI_ROOT_NAME;
B
Bob Moore 已提交
337
	acpi_gbl_root_node_struct.descriptor_type = ACPI_DESC_TYPE_NAMED;
L
Len Brown 已提交
338
	acpi_gbl_root_node_struct.type = ACPI_TYPE_DEVICE;
339
	acpi_gbl_root_node_struct.parent = NULL;
L
Len Brown 已提交
340 341 342
	acpi_gbl_root_node_struct.child = NULL;
	acpi_gbl_root_node_struct.peer = NULL;
	acpi_gbl_root_node_struct.object = NULL;
L
Linus Torvalds 已提交
343 344

#ifdef ACPI_DEBUG_OUTPUT
345
	acpi_gbl_lowest_stack_pointer = ACPI_CAST_PTR(acpi_size, ACPI_SIZE_MAX);
L
Linus Torvalds 已提交
346 347
#endif

348 349 350 351
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
	acpi_gbl_display_final_mem_stats = FALSE;
#endif

352
	return_ACPI_STATUS(AE_OK);
L
Linus Torvalds 已提交
353
}
B
Bob Moore 已提交
354

355
ACPI_EXPORT_SYMBOL(acpi_gbl_FADT)
B
Bob Moore 已提交
356
ACPI_EXPORT_SYMBOL(acpi_dbg_level)
357
ACPI_EXPORT_SYMBOL(acpi_dbg_layer)
358
ACPI_EXPORT_SYMBOL(acpi_current_gpe_count)