1 /****************************************************************************** 2 * 3 * Name: acglobal.h - Declarations for global variables 4 * 5 *****************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2008, Intel Corp. 9 * 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 #ifndef __ACGLOBAL_H__ 45 #define __ACGLOBAL_H__ 46 47 /* 48 * Ensure that the globals are actually defined and initialized only once. 49 * 50 * The use of these macros allows a single list of globals (here) in order 51 * to simplify maintenance of the code. 52 */ 53 #ifdef DEFINE_ACPI_GLOBALS 54 #define ACPI_EXTERN 55 #define ACPI_INIT_GLOBAL(a,b) a=b 56 #else 57 #define ACPI_EXTERN extern 58 #define ACPI_INIT_GLOBAL(a,b) a 59 #endif 60 61 #ifdef DEFINE_ACPI_GLOBALS 62 63 /* Public globals, available from outside ACPICA subsystem */ 64 65 /***************************************************************************** 66 * 67 * Runtime configuration (static defaults that can be overriden at runtime) 68 * 69 ****************************************************************************/ 70 71 /* 72 * Enable "slack" in the AML interpreter? Default is FALSE, and the 73 * interpreter strictly follows the ACPI specification. Setting to TRUE 74 * allows the interpreter to ignore certain errors and/or bad AML constructs. 75 * 76 * Currently, these features are enabled by this flag: 77 * 78 * 1) Allow "implicit return" of last value in a control method 79 * 2) Allow access beyond the end of an operation region 80 * 3) Allow access to uninitialized locals/args (auto-init to integer 0) 81 * 4) Allow ANY object type to be a source operand for the Store() operator 82 * 5) Allow unresolved references (invalid target name) in package objects 83 * 6) Enable warning messages for behavior that is not ACPI spec compliant 84 */ 85 u8 ACPI_INIT_GLOBAL(acpi_gbl_enable_interpreter_slack, FALSE); 86 87 /* 88 * Automatically serialize ALL control methods? Default is FALSE, meaning 89 * to use the Serialized/not_serialized method flags on a per method basis. 90 * Only change this if the ASL code is poorly written and cannot handle 91 * reentrancy even though methods are marked "NotSerialized". 92 */ 93 u8 ACPI_INIT_GLOBAL(acpi_gbl_all_methods_serialized, FALSE); 94 95 /* 96 * Create the predefined _OSI method in the namespace? Default is TRUE 97 * because ACPI CA is fully compatible with other ACPI implementations. 98 * Changing this will revert ACPI CA (and machine ASL) to pre-OSI behavior. 99 */ 100 u8 ACPI_INIT_GLOBAL(acpi_gbl_create_osi_method, TRUE); 101 102 /* 103 * Disable wakeup GPEs during runtime? Default is TRUE because WAKE and 104 * RUNTIME GPEs should never be shared, and WAKE GPEs should typically only 105 * be enabled just before going to sleep. 106 */ 107 u8 ACPI_INIT_GLOBAL(acpi_gbl_leave_wake_gpes_disabled, TRUE); 108 109 /* 110 * Optionally use default values for the ACPI register widths. Set this to 111 * TRUE to use the defaults, if an FADT contains incorrect widths/lengths. 112 */ 113 u8 ACPI_INIT_GLOBAL(acpi_gbl_use_default_register_widths, TRUE); 114 115 /* acpi_gbl_FADT is a local copy of the FADT, converted to a common format. */ 116 117 struct acpi_table_fadt acpi_gbl_FADT; 118 u32 acpi_current_gpe_count; 119 u32 acpi_gbl_trace_flags; 120 acpi_name acpi_gbl_trace_method_name; 121 122 #endif 123 124 /***************************************************************************** 125 * 126 * Debug support 127 * 128 ****************************************************************************/ 129 130 /* Procedure nesting level for debug output */ 131 132 extern u32 acpi_gbl_nesting_level; 133 134 /* Support for dynamic control method tracing mechanism */ 135 136 ACPI_EXTERN u32 acpi_gbl_original_dbg_level; 137 ACPI_EXTERN u32 acpi_gbl_original_dbg_layer; 138 ACPI_EXTERN u32 acpi_gbl_trace_dbg_level; 139 ACPI_EXTERN u32 acpi_gbl_trace_dbg_layer; 140 141 /***************************************************************************** 142 * 143 * ACPI Table globals 144 * 145 ****************************************************************************/ 146 147 /* 148 * acpi_gbl_root_table_list is the master list of ACPI tables found in the 149 * RSDT/XSDT. 150 * 151 */ 152 ACPI_EXTERN struct acpi_internal_rsdt acpi_gbl_root_table_list; 153 ACPI_EXTERN struct acpi_table_facs *acpi_gbl_FACS; 154 155 /* These addresses are calculated from the FADT Event Block addresses */ 156 157 ACPI_EXTERN struct acpi_generic_address acpi_gbl_xpm1a_status; 158 ACPI_EXTERN struct acpi_generic_address acpi_gbl_xpm1a_enable; 159 160 ACPI_EXTERN struct acpi_generic_address acpi_gbl_xpm1b_status; 161 ACPI_EXTERN struct acpi_generic_address acpi_gbl_xpm1b_enable; 162 163 /* 164 * Handle both ACPI 1.0 and ACPI 2.0 Integer widths. The integer width is 165 * determined by the revision of the DSDT: If the DSDT revision is less than 166 * 2, use only the lower 32 bits of the internal 64-bit Integer. 167 */ 168 ACPI_EXTERN u8 acpi_gbl_integer_bit_width; 169 ACPI_EXTERN u8 acpi_gbl_integer_byte_width; 170 ACPI_EXTERN u8 acpi_gbl_integer_nybble_width; 171 172 /* Reader/Writer lock is used for namespace walk and dynamic table unload */ 173 174 ACPI_EXTERN struct acpi_rw_lock acpi_gbl_namespace_rw_lock; 175 176 /***************************************************************************** 177 * 178 * Mutual exlusion within ACPICA subsystem 179 * 180 ****************************************************************************/ 181 182 /* 183 * Predefined mutex objects. This array contains the 184 * actual OS mutex handles, indexed by the local ACPI_MUTEX_HANDLEs. 185 * (The table maps local handles to the real OS handles) 186 */ 187 ACPI_EXTERN struct acpi_mutex_info acpi_gbl_mutex_info[ACPI_NUM_MUTEX]; 188 189 /* 190 * Global lock mutex is an actual AML mutex object 191 * Global lock semaphore works in conjunction with the HW global lock 192 */ 193 ACPI_EXTERN union acpi_operand_object *acpi_gbl_global_lock_mutex; 194 ACPI_EXTERN acpi_semaphore acpi_gbl_global_lock_semaphore; 195 ACPI_EXTERN u16 acpi_gbl_global_lock_handle; 196 ACPI_EXTERN u8 acpi_gbl_global_lock_acquired; 197 ACPI_EXTERN u8 acpi_gbl_global_lock_present; 198 199 /* 200 * Spinlocks are used for interfaces that can be possibly called at 201 * interrupt level 202 */ 203 ACPI_EXTERN spinlock_t _acpi_gbl_gpe_lock; /* For GPE data structs and registers */ 204 ACPI_EXTERN spinlock_t _acpi_gbl_hardware_lock; /* For ACPI H/W except GPE registers */ 205 #define acpi_gbl_gpe_lock &_acpi_gbl_gpe_lock 206 #define acpi_gbl_hardware_lock &_acpi_gbl_hardware_lock 207 208 /***************************************************************************** 209 * 210 * Miscellaneous globals 211 * 212 ****************************************************************************/ 213 214 #ifdef ACPI_DBG_TRACK_ALLOCATIONS 215 216 /* Lists for tracking memory allocations */ 217 218 ACPI_EXTERN struct acpi_memory_list *acpi_gbl_global_list; 219 ACPI_EXTERN struct acpi_memory_list *acpi_gbl_ns_node_list; 220 ACPI_EXTERN u8 acpi_gbl_display_final_mem_stats; 221 #endif 222 223 /* Object caches */ 224 225 ACPI_EXTERN acpi_cache_t *acpi_gbl_namespace_cache; 226 ACPI_EXTERN acpi_cache_t *acpi_gbl_state_cache; 227 ACPI_EXTERN acpi_cache_t *acpi_gbl_ps_node_cache; 228 ACPI_EXTERN acpi_cache_t *acpi_gbl_ps_node_ext_cache; 229 ACPI_EXTERN acpi_cache_t *acpi_gbl_operand_cache; 230 231 /* Global handlers */ 232 233 ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_device_notify; 234 ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_system_notify; 235 ACPI_EXTERN acpi_exception_handler acpi_gbl_exception_handler; 236 ACPI_EXTERN acpi_init_handler acpi_gbl_init_handler; 237 ACPI_EXTERN acpi_tbl_handler acpi_gbl_table_handler; 238 ACPI_EXTERN void *acpi_gbl_table_handler_context; 239 ACPI_EXTERN struct acpi_walk_state *acpi_gbl_breakpoint_walk; 240 241 /* Owner ID support */ 242 243 ACPI_EXTERN u32 acpi_gbl_owner_id_mask[ACPI_NUM_OWNERID_MASKS]; 244 ACPI_EXTERN u8 acpi_gbl_last_owner_id_index; 245 ACPI_EXTERN u8 acpi_gbl_next_owner_id_offset; 246 247 /* Misc */ 248 249 ACPI_EXTERN u32 acpi_gbl_original_mode; 250 ACPI_EXTERN u32 acpi_gbl_rsdp_original_location; 251 ACPI_EXTERN u32 acpi_gbl_ns_lookup_count; 252 ACPI_EXTERN u32 acpi_gbl_ps_find_count; 253 ACPI_EXTERN u16 acpi_gbl_pm1_enable_register_save; 254 ACPI_EXTERN u8 acpi_gbl_debugger_configuration; 255 ACPI_EXTERN u8 acpi_gbl_step_to_next_call; 256 ACPI_EXTERN u8 acpi_gbl_acpi_hardware_present; 257 ACPI_EXTERN u8 acpi_gbl_events_initialized; 258 ACPI_EXTERN u8 acpi_gbl_system_awake_and_running; 259 ACPI_EXTERN u8 acpi_gbl_osi_data; 260 261 #ifndef DEFINE_ACPI_GLOBALS 262 263 /* Other miscellaneous */ 264 265 extern u8 acpi_gbl_shutdown; 266 extern u32 acpi_gbl_startup_flags; 267 extern const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT]; 268 extern const char *acpi_gbl_lowest_dstate_names[ACPI_NUM_sx_w_METHODS]; 269 extern const char *acpi_gbl_highest_dstate_names[ACPI_NUM_sx_d_METHODS]; 270 extern const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES]; 271 extern const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS]; 272 273 #endif 274 275 /* Exception codes */ 276 277 extern char const *acpi_gbl_exception_names_env[]; 278 extern char const *acpi_gbl_exception_names_pgm[]; 279 extern char const *acpi_gbl_exception_names_tbl[]; 280 extern char const *acpi_gbl_exception_names_aml[]; 281 extern char const *acpi_gbl_exception_names_ctrl[]; 282 283 /***************************************************************************** 284 * 285 * Namespace globals 286 * 287 ****************************************************************************/ 288 289 #if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY) 290 #define NUM_PREDEFINED_NAMES 10 291 #else 292 #define NUM_PREDEFINED_NAMES 9 293 #endif 294 295 ACPI_EXTERN struct acpi_namespace_node acpi_gbl_root_node_struct; 296 ACPI_EXTERN struct acpi_namespace_node *acpi_gbl_root_node; 297 ACPI_EXTERN struct acpi_namespace_node *acpi_gbl_fadt_gpe_device; 298 ACPI_EXTERN union acpi_operand_object *acpi_gbl_module_code_list; 299 300 extern const u8 acpi_gbl_ns_properties[ACPI_NUM_NS_TYPES]; 301 extern const struct acpi_predefined_names 302 acpi_gbl_pre_defined_names[NUM_PREDEFINED_NAMES]; 303 304 #ifdef ACPI_DEBUG_OUTPUT 305 ACPI_EXTERN u32 acpi_gbl_current_node_count; 306 ACPI_EXTERN u32 acpi_gbl_current_node_size; 307 ACPI_EXTERN u32 acpi_gbl_max_concurrent_node_count; 308 ACPI_EXTERN acpi_size *acpi_gbl_entry_stack_pointer; 309 ACPI_EXTERN acpi_size *acpi_gbl_lowest_stack_pointer; 310 ACPI_EXTERN u32 acpi_gbl_deepest_nesting; 311 #endif 312 313 /***************************************************************************** 314 * 315 * Interpreter globals 316 * 317 ****************************************************************************/ 318 319 ACPI_EXTERN struct acpi_thread_state *acpi_gbl_current_walk_list; 320 321 /* Control method single step flag */ 322 323 ACPI_EXTERN u8 acpi_gbl_cm_single_step; 324 325 /***************************************************************************** 326 * 327 * Hardware globals 328 * 329 ****************************************************************************/ 330 331 extern struct acpi_bit_register_info 332 acpi_gbl_bit_register_info[ACPI_NUM_BITREG]; 333 ACPI_EXTERN u8 acpi_gbl_sleep_type_a; 334 ACPI_EXTERN u8 acpi_gbl_sleep_type_b; 335 336 /***************************************************************************** 337 * 338 * Event and GPE globals 339 * 340 ****************************************************************************/ 341 342 extern struct acpi_fixed_event_info 343 acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS]; 344 ACPI_EXTERN struct acpi_fixed_event_handler 345 acpi_gbl_fixed_event_handlers[ACPI_NUM_FIXED_EVENTS]; 346 ACPI_EXTERN struct acpi_gpe_xrupt_info *acpi_gbl_gpe_xrupt_list_head; 347 ACPI_EXTERN struct acpi_gpe_block_info 348 *acpi_gbl_gpe_fadt_blocks[ACPI_MAX_GPE_BLOCKS]; 349 350 /***************************************************************************** 351 * 352 * Debugger globals 353 * 354 ****************************************************************************/ 355 356 ACPI_EXTERN u8 acpi_gbl_db_output_flags; 357 358 #ifdef ACPI_DISASSEMBLER 359 360 ACPI_EXTERN u8 acpi_gbl_db_opt_disasm; 361 ACPI_EXTERN u8 acpi_gbl_db_opt_verbose; 362 #endif 363 364 #ifdef ACPI_DEBUGGER 365 366 extern u8 acpi_gbl_method_executing; 367 extern u8 acpi_gbl_abort_method; 368 extern u8 acpi_gbl_db_terminate_threads; 369 370 ACPI_EXTERN u8 acpi_gbl_db_opt_tables; 371 ACPI_EXTERN u8 acpi_gbl_db_opt_stats; 372 ACPI_EXTERN u8 acpi_gbl_db_opt_ini_methods; 373 374 ACPI_EXTERN char *acpi_gbl_db_args[ACPI_DEBUGGER_MAX_ARGS]; 375 ACPI_EXTERN char acpi_gbl_db_line_buf[80]; 376 ACPI_EXTERN char acpi_gbl_db_parsed_buf[80]; 377 ACPI_EXTERN char acpi_gbl_db_scope_buf[40]; 378 ACPI_EXTERN char acpi_gbl_db_debug_filename[40]; 379 ACPI_EXTERN u8 acpi_gbl_db_output_to_file; 380 ACPI_EXTERN char *acpi_gbl_db_buffer; 381 ACPI_EXTERN char *acpi_gbl_db_filename; 382 ACPI_EXTERN u32 acpi_gbl_db_debug_level; 383 ACPI_EXTERN u32 acpi_gbl_db_console_debug_level; 384 ACPI_EXTERN struct acpi_namespace_node *acpi_gbl_db_scope_node; 385 386 /* 387 * Statistic globals 388 */ 389 ACPI_EXTERN u16 acpi_gbl_obj_type_count[ACPI_TYPE_NS_NODE_MAX + 1]; 390 ACPI_EXTERN u16 acpi_gbl_node_type_count[ACPI_TYPE_NS_NODE_MAX + 1]; 391 ACPI_EXTERN u16 acpi_gbl_obj_type_count_misc; 392 ACPI_EXTERN u16 acpi_gbl_node_type_count_misc; 393 ACPI_EXTERN u32 acpi_gbl_num_nodes; 394 ACPI_EXTERN u32 acpi_gbl_num_objects; 395 396 ACPI_EXTERN u32 acpi_gbl_size_of_parse_tree; 397 ACPI_EXTERN u32 acpi_gbl_size_of_method_trees; 398 ACPI_EXTERN u32 acpi_gbl_size_of_node_entries; 399 ACPI_EXTERN u32 acpi_gbl_size_of_acpi_objects; 400 401 #endif /* ACPI_DEBUGGER */ 402 403 #endif /* __ACGLOBAL_H__ */ 404