Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /******************************************************************************
  2.  *
  3.  * Name: acglobal.h - Declarations for global variables
  4.  *
  5.  *****************************************************************************/
  6.  
  7. /*
  8.  * Copyright (C) 2000 - 2015, 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.  *
  49.  * Globals related to the ACPI tables
  50.  *
  51.  ****************************************************************************/
  52.  
  53. /* Master list of all ACPI tables that were found in the RSDT/XSDT */
  54.  
  55. ACPI_GLOBAL(struct acpi_table_list, acpi_gbl_root_table_list);
  56.  
  57. /* DSDT information. Used to check for DSDT corruption */
  58.  
  59. ACPI_GLOBAL(struct acpi_table_header *, acpi_gbl_DSDT);
  60. ACPI_GLOBAL(struct acpi_table_header, acpi_gbl_original_dsdt_header);
  61. ACPI_INIT_GLOBAL(u32, acpi_gbl_dsdt_index, ACPI_INVALID_TABLE_INDEX);
  62. ACPI_INIT_GLOBAL(u32, acpi_gbl_facs_index, ACPI_INVALID_TABLE_INDEX);
  63. ACPI_INIT_GLOBAL(u32, acpi_gbl_xfacs_index, ACPI_INVALID_TABLE_INDEX);
  64. ACPI_INIT_GLOBAL(u32, acpi_gbl_fadt_index, ACPI_INVALID_TABLE_INDEX);
  65.  
  66. #if (!ACPI_REDUCED_HARDWARE)
  67. ACPI_GLOBAL(struct acpi_table_facs *, acpi_gbl_FACS);
  68.  
  69. #endif                          /* !ACPI_REDUCED_HARDWARE */
  70.  
  71. /* These addresses are calculated from the FADT Event Block addresses */
  72.  
  73. ACPI_GLOBAL(struct acpi_generic_address, acpi_gbl_xpm1a_status);
  74. ACPI_GLOBAL(struct acpi_generic_address, acpi_gbl_xpm1a_enable);
  75.  
  76. ACPI_GLOBAL(struct acpi_generic_address, acpi_gbl_xpm1b_status);
  77. ACPI_GLOBAL(struct acpi_generic_address, acpi_gbl_xpm1b_enable);
  78.  
  79. /*
  80.  * Handle both ACPI 1.0 and ACPI 2.0+ Integer widths. The integer width is
  81.  * determined by the revision of the DSDT: If the DSDT revision is less than
  82.  * 2, use only the lower 32 bits of the internal 64-bit Integer.
  83.  */
  84. ACPI_GLOBAL(u8, acpi_gbl_integer_bit_width);
  85. ACPI_GLOBAL(u8, acpi_gbl_integer_byte_width);
  86. ACPI_GLOBAL(u8, acpi_gbl_integer_nybble_width);
  87.  
  88. /*****************************************************************************
  89.  *
  90.  * Mutual exclusion within ACPICA subsystem
  91.  *
  92.  ****************************************************************************/
  93.  
  94. /*
  95.  * Predefined mutex objects. This array contains the
  96.  * actual OS mutex handles, indexed by the local ACPI_MUTEX_HANDLEs.
  97.  * (The table maps local handles to the real OS handles)
  98.  */
  99. ACPI_GLOBAL(struct acpi_mutex_info, acpi_gbl_mutex_info[ACPI_NUM_MUTEX]);
  100.  
  101. /*
  102.  * Global lock mutex is an actual AML mutex object
  103.  * Global lock semaphore works in conjunction with the actual global lock
  104.  * Global lock spinlock is used for "pending" handshake
  105.  */
  106. ACPI_GLOBAL(union acpi_operand_object *, acpi_gbl_global_lock_mutex);
  107. ACPI_GLOBAL(acpi_semaphore, acpi_gbl_global_lock_semaphore);
  108. ACPI_GLOBAL(acpi_spinlock, acpi_gbl_global_lock_pending_lock);
  109. ACPI_GLOBAL(u16, acpi_gbl_global_lock_handle);
  110. ACPI_GLOBAL(u8, acpi_gbl_global_lock_acquired);
  111. ACPI_GLOBAL(u8, acpi_gbl_global_lock_present);
  112. ACPI_GLOBAL(u8, acpi_gbl_global_lock_pending);
  113.  
  114. /*
  115.  * Spinlocks are used for interfaces that can be possibly called at
  116.  * interrupt level
  117.  */
  118. ACPI_GLOBAL(acpi_spinlock, acpi_gbl_gpe_lock);  /* For GPE data structs and registers */
  119. ACPI_GLOBAL(acpi_spinlock, acpi_gbl_hardware_lock);     /* For ACPI H/W except GPE registers */
  120. ACPI_GLOBAL(acpi_spinlock, acpi_gbl_reference_count_lock);
  121.  
  122. /* Mutex for _OSI support */
  123.  
  124. ACPI_GLOBAL(acpi_mutex, acpi_gbl_osi_mutex);
  125.  
  126. /* Reader/Writer lock is used for namespace walk and dynamic table unload */
  127.  
  128. ACPI_GLOBAL(struct acpi_rw_lock, acpi_gbl_namespace_rw_lock);
  129.  
  130. /*****************************************************************************
  131.  *
  132.  * Miscellaneous globals
  133.  *
  134.  ****************************************************************************/
  135.  
  136. /* Object caches */
  137.  
  138. ACPI_GLOBAL(acpi_cache_t *, acpi_gbl_namespace_cache);
  139. ACPI_GLOBAL(acpi_cache_t *, acpi_gbl_state_cache);
  140. ACPI_GLOBAL(acpi_cache_t *, acpi_gbl_ps_node_cache);
  141. ACPI_GLOBAL(acpi_cache_t *, acpi_gbl_ps_node_ext_cache);
  142. ACPI_GLOBAL(acpi_cache_t *, acpi_gbl_operand_cache);
  143.  
  144. /* System */
  145.  
  146. ACPI_INIT_GLOBAL(u32, acpi_gbl_startup_flags, 0);
  147. ACPI_INIT_GLOBAL(u8, acpi_gbl_shutdown, TRUE);
  148.  
  149. /* Global handlers */
  150.  
  151. ACPI_GLOBAL(struct acpi_global_notify_handler, acpi_gbl_global_notify[2]);
  152. ACPI_GLOBAL(acpi_exception_handler, acpi_gbl_exception_handler);
  153. ACPI_GLOBAL(acpi_init_handler, acpi_gbl_init_handler);
  154. ACPI_GLOBAL(acpi_table_handler, acpi_gbl_table_handler);
  155. ACPI_GLOBAL(void *, acpi_gbl_table_handler_context);
  156. ACPI_GLOBAL(acpi_interface_handler, acpi_gbl_interface_handler);
  157. ACPI_GLOBAL(struct acpi_sci_handler_info *, acpi_gbl_sci_handler_list);
  158.  
  159. /* Owner ID support */
  160.  
  161. ACPI_GLOBAL(u32, acpi_gbl_owner_id_mask[ACPI_NUM_OWNERID_MASKS]);
  162. ACPI_GLOBAL(u8, acpi_gbl_last_owner_id_index);
  163. ACPI_GLOBAL(u8, acpi_gbl_next_owner_id_offset);
  164.  
  165. /* Initialization sequencing */
  166.  
  167. ACPI_GLOBAL(u8, acpi_gbl_reg_methods_executed);
  168.  
  169. /* Misc */
  170.  
  171. ACPI_GLOBAL(u32, acpi_gbl_original_mode);
  172. ACPI_GLOBAL(u32, acpi_gbl_ns_lookup_count);
  173. ACPI_GLOBAL(u32, acpi_gbl_ps_find_count);
  174. ACPI_GLOBAL(u16, acpi_gbl_pm1_enable_register_save);
  175. ACPI_GLOBAL(u8, acpi_gbl_debugger_configuration);
  176. ACPI_GLOBAL(u8, acpi_gbl_step_to_next_call);
  177. ACPI_GLOBAL(u8, acpi_gbl_acpi_hardware_present);
  178. ACPI_GLOBAL(u8, acpi_gbl_events_initialized);
  179. ACPI_GLOBAL(struct acpi_interface_info *, acpi_gbl_supported_interfaces);
  180. ACPI_GLOBAL(struct acpi_address_range *,
  181.             acpi_gbl_address_range_list[ACPI_ADDRESS_RANGE_MAX]);
  182.  
  183. /* Other miscellaneous, declared and initialized in utglobal */
  184.  
  185. extern const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT];
  186. extern const char *acpi_gbl_lowest_dstate_names[ACPI_NUM_sx_w_METHODS];
  187. extern const char *acpi_gbl_highest_dstate_names[ACPI_NUM_sx_d_METHODS];
  188. extern const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS];
  189. extern const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES];
  190.  
  191. #ifdef ACPI_DBG_TRACK_ALLOCATIONS
  192.  
  193. /* Lists for tracking memory allocations (debug only) */
  194.  
  195. ACPI_GLOBAL(struct acpi_memory_list *, acpi_gbl_global_list);
  196. ACPI_GLOBAL(struct acpi_memory_list *, acpi_gbl_ns_node_list);
  197. ACPI_GLOBAL(u8, acpi_gbl_display_final_mem_stats);
  198. ACPI_GLOBAL(u8, acpi_gbl_disable_mem_tracking);
  199. #endif
  200.  
  201. /*****************************************************************************
  202.  *
  203.  * Namespace globals
  204.  *
  205.  ****************************************************************************/
  206.  
  207. #if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
  208. #define NUM_PREDEFINED_NAMES            10
  209. #else
  210. #define NUM_PREDEFINED_NAMES            9
  211. #endif
  212.  
  213. ACPI_GLOBAL(struct acpi_namespace_node, acpi_gbl_root_node_struct);
  214. ACPI_GLOBAL(struct acpi_namespace_node *, acpi_gbl_root_node);
  215. ACPI_GLOBAL(struct acpi_namespace_node *, acpi_gbl_fadt_gpe_device);
  216. ACPI_GLOBAL(union acpi_operand_object *, acpi_gbl_module_code_list);
  217.  
  218. extern const u8 acpi_gbl_ns_properties[ACPI_NUM_NS_TYPES];
  219. extern const struct acpi_predefined_names
  220.     acpi_gbl_pre_defined_names[NUM_PREDEFINED_NAMES];
  221.  
  222. #ifdef ACPI_DEBUG_OUTPUT
  223. ACPI_GLOBAL(u32, acpi_gbl_current_node_count);
  224. ACPI_GLOBAL(u32, acpi_gbl_current_node_size);
  225. ACPI_GLOBAL(u32, acpi_gbl_max_concurrent_node_count);
  226. ACPI_GLOBAL(acpi_size *, acpi_gbl_entry_stack_pointer);
  227. ACPI_GLOBAL(acpi_size *, acpi_gbl_lowest_stack_pointer);
  228. ACPI_GLOBAL(u32, acpi_gbl_deepest_nesting);
  229. ACPI_INIT_GLOBAL(u32, acpi_gbl_nesting_level, 0);
  230. #endif
  231.  
  232. /*****************************************************************************
  233.  *
  234.  * Interpreter globals
  235.  *
  236.  ****************************************************************************/
  237.  
  238. ACPI_GLOBAL(struct acpi_thread_state *, acpi_gbl_current_walk_list);
  239.  
  240. /* Maximum number of While() loop iterations before forced abort */
  241.  
  242. ACPI_GLOBAL(u16, acpi_gbl_max_loop_iterations);
  243.  
  244. /* Control method single step flag */
  245.  
  246. ACPI_GLOBAL(u8, acpi_gbl_cm_single_step);
  247.  
  248. /*****************************************************************************
  249.  *
  250.  * Hardware globals
  251.  *
  252.  ****************************************************************************/
  253.  
  254. extern struct acpi_bit_register_info
  255.     acpi_gbl_bit_register_info[ACPI_NUM_BITREG];
  256.  
  257. ACPI_GLOBAL(u8, acpi_gbl_sleep_type_a);
  258. ACPI_GLOBAL(u8, acpi_gbl_sleep_type_b);
  259.  
  260. /*****************************************************************************
  261.  *
  262.  * Event and GPE globals
  263.  *
  264.  ****************************************************************************/
  265.  
  266. #if (!ACPI_REDUCED_HARDWARE)
  267.  
  268. ACPI_GLOBAL(u8, acpi_gbl_all_gpes_initialized);
  269. ACPI_GLOBAL(struct acpi_gpe_xrupt_info *, acpi_gbl_gpe_xrupt_list_head);
  270. ACPI_GLOBAL(struct acpi_gpe_block_info *,
  271.             acpi_gbl_gpe_fadt_blocks[ACPI_MAX_GPE_BLOCKS]);
  272. ACPI_GLOBAL(acpi_gbl_event_handler, acpi_gbl_global_event_handler);
  273. ACPI_GLOBAL(void *, acpi_gbl_global_event_handler_context);
  274. ACPI_GLOBAL(struct acpi_fixed_event_handler,
  275.             acpi_gbl_fixed_event_handlers[ACPI_NUM_FIXED_EVENTS]);
  276.  
  277. extern struct acpi_fixed_event_info
  278.     acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS];
  279.  
  280. #endif                          /* !ACPI_REDUCED_HARDWARE */
  281.  
  282. /*****************************************************************************
  283.  *
  284.  * Debug support
  285.  *
  286.  ****************************************************************************/
  287.  
  288. /* Event counters */
  289.  
  290. ACPI_GLOBAL(u32, acpi_method_count);
  291. ACPI_GLOBAL(u32, acpi_gpe_count);
  292. ACPI_GLOBAL(u32, acpi_sci_count);
  293. ACPI_GLOBAL(u32, acpi_fixed_event_count[ACPI_NUM_FIXED_EVENTS]);
  294.  
  295. /* Support for dynamic control method tracing mechanism */
  296.  
  297. ACPI_GLOBAL(u32, acpi_gbl_original_dbg_level);
  298. ACPI_GLOBAL(u32, acpi_gbl_original_dbg_layer);
  299.  
  300. /*****************************************************************************
  301.  *
  302.  * Debugger and Disassembler globals
  303.  *
  304.  ****************************************************************************/
  305.  
  306. ACPI_INIT_GLOBAL(u8, acpi_gbl_db_output_flags, ACPI_DB_CONSOLE_OUTPUT);
  307.  
  308. #ifdef ACPI_DISASSEMBLER
  309.  
  310. /* Do not disassemble buffers to resource descriptors */
  311.  
  312. ACPI_INIT_GLOBAL(u8, acpi_gbl_no_resource_disassembly, FALSE);
  313. ACPI_INIT_GLOBAL(u8, acpi_gbl_ignore_noop_operator, FALSE);
  314. ACPI_INIT_GLOBAL(u8, acpi_gbl_cstyle_disassembly, TRUE);
  315. ACPI_INIT_GLOBAL(u8, acpi_gbl_force_aml_disassembly, FALSE);
  316. ACPI_INIT_GLOBAL(u8, acpi_gbl_dm_opt_verbose, TRUE);
  317.  
  318. ACPI_GLOBAL(u8, acpi_gbl_dm_opt_disasm);
  319. ACPI_GLOBAL(u8, acpi_gbl_dm_opt_listing);
  320. ACPI_GLOBAL(u8, acpi_gbl_num_external_methods);
  321. ACPI_GLOBAL(u32, acpi_gbl_resolved_external_methods);
  322. ACPI_GLOBAL(struct acpi_external_list *, acpi_gbl_external_list);
  323. ACPI_GLOBAL(struct acpi_external_file *, acpi_gbl_external_file_list);
  324. #endif
  325.  
  326. #ifdef ACPI_DEBUGGER
  327.  
  328. ACPI_INIT_GLOBAL(u8, acpi_gbl_abort_method, FALSE);
  329. ACPI_INIT_GLOBAL(u8, acpi_gbl_method_executing, FALSE);
  330. ACPI_INIT_GLOBAL(acpi_thread_id, acpi_gbl_db_thread_id, ACPI_INVALID_THREAD_ID);
  331.  
  332. ACPI_GLOBAL(u8, acpi_gbl_db_opt_no_ini_methods);
  333. ACPI_GLOBAL(u8, acpi_gbl_db_opt_no_region_support);
  334. ACPI_GLOBAL(u8, acpi_gbl_db_output_to_file);
  335. ACPI_GLOBAL(char *, acpi_gbl_db_buffer);
  336. ACPI_GLOBAL(char *, acpi_gbl_db_filename);
  337. ACPI_GLOBAL(u32, acpi_gbl_db_debug_level);
  338. ACPI_GLOBAL(u32, acpi_gbl_db_console_debug_level);
  339. ACPI_GLOBAL(struct acpi_namespace_node *, acpi_gbl_db_scope_node);
  340. ACPI_GLOBAL(u8, acpi_gbl_db_terminate_loop);
  341. ACPI_GLOBAL(u8, acpi_gbl_db_threads_terminated);
  342.  
  343. ACPI_GLOBAL(char *, acpi_gbl_db_args[ACPI_DEBUGGER_MAX_ARGS]);
  344. ACPI_GLOBAL(acpi_object_type, acpi_gbl_db_arg_types[ACPI_DEBUGGER_MAX_ARGS]);
  345.  
  346. /* These buffers should all be the same size */
  347.  
  348. ACPI_GLOBAL(char, acpi_gbl_db_line_buf[ACPI_DB_LINE_BUFFER_SIZE]);
  349. ACPI_GLOBAL(char, acpi_gbl_db_parsed_buf[ACPI_DB_LINE_BUFFER_SIZE]);
  350. ACPI_GLOBAL(char, acpi_gbl_db_scope_buf[ACPI_DB_LINE_BUFFER_SIZE]);
  351. ACPI_GLOBAL(char, acpi_gbl_db_debug_filename[ACPI_DB_LINE_BUFFER_SIZE]);
  352.  
  353. /*
  354.  * Statistic globals
  355.  */
  356. ACPI_GLOBAL(u16, acpi_gbl_obj_type_count[ACPI_TOTAL_TYPES]);
  357. ACPI_GLOBAL(u16, acpi_gbl_node_type_count[ACPI_TOTAL_TYPES]);
  358. ACPI_GLOBAL(u16, acpi_gbl_obj_type_count_misc);
  359. ACPI_GLOBAL(u16, acpi_gbl_node_type_count_misc);
  360. ACPI_GLOBAL(u32, acpi_gbl_num_nodes);
  361. ACPI_GLOBAL(u32, acpi_gbl_num_objects);
  362.  
  363. ACPI_GLOBAL(acpi_mutex, acpi_gbl_db_command_ready);
  364. ACPI_GLOBAL(acpi_mutex, acpi_gbl_db_command_complete);
  365.  
  366. #endif                          /* ACPI_DEBUGGER */
  367.  
  368. /*****************************************************************************
  369.  *
  370.  * Application globals
  371.  *
  372.  ****************************************************************************/
  373.  
  374. #ifdef ACPI_APPLICATION
  375.  
  376. ACPI_INIT_GLOBAL(ACPI_FILE, acpi_gbl_debug_file, NULL);
  377. ACPI_INIT_GLOBAL(ACPI_FILE, acpi_gbl_output_file, NULL);
  378.  
  379. /* Print buffer */
  380.  
  381. ACPI_GLOBAL(acpi_spinlock, acpi_gbl_print_lock);        /* For print buffer */
  382. ACPI_GLOBAL(char, acpi_gbl_print_buffer[1024]);
  383.  
  384. #endif                          /* ACPI_APPLICATION */
  385.  
  386. /*****************************************************************************
  387.  *
  388.  * Info/help support
  389.  *
  390.  ****************************************************************************/
  391.  
  392. extern const struct ah_predefined_name asl_predefined_info[];
  393. extern const struct ah_device_id asl_device_ids[];
  394.  
  395. #endif                          /* __ACGLOBAL_H__ */
  396.