acevents.h (7126B)
1/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 2/****************************************************************************** 3 * 4 * Name: acevents.h - Event subcomponent prototypes and defines 5 * 6 * Copyright (C) 2000 - 2022, Intel Corp. 7 * 8 *****************************************************************************/ 9 10#ifndef __ACEVENTS_H__ 11#define __ACEVENTS_H__ 12 13/* 14 * Conditions to trigger post enabling GPE polling: 15 * It is not sufficient to trigger edge-triggered GPE with specific GPE 16 * chips, software need to poll once after enabling. 17 */ 18#ifdef ACPI_USE_GPE_POLLING 19#define ACPI_GPE_IS_POLLING_NEEDED(__gpe__) \ 20 ((__gpe__)->runtime_count == 1 && \ 21 (__gpe__)->flags & ACPI_GPE_INITIALIZED && \ 22 ((__gpe__)->flags & ACPI_GPE_XRUPT_TYPE_MASK) == ACPI_GPE_EDGE_TRIGGERED) 23#else 24#define ACPI_GPE_IS_POLLING_NEEDED(__gpe__) FALSE 25#endif 26 27/* 28 * evevent 29 */ 30acpi_status acpi_ev_initialize_events(void); 31 32acpi_status acpi_ev_install_xrupt_handlers(void); 33 34u32 acpi_ev_fixed_event_detect(void); 35 36/* 37 * evmisc 38 */ 39u8 acpi_ev_is_notify_object(struct acpi_namespace_node *node); 40 41u32 acpi_ev_get_gpe_number_index(u32 gpe_number); 42 43acpi_status 44acpi_ev_queue_notify_request(struct acpi_namespace_node *node, 45 u32 notify_value); 46 47/* 48 * evglock - Global Lock support 49 */ 50acpi_status acpi_ev_init_global_lock_handler(void); 51 52ACPI_HW_DEPENDENT_RETURN_OK(acpi_status 53 acpi_ev_acquire_global_lock(u16 timeout)) 54ACPI_HW_DEPENDENT_RETURN_OK(acpi_status acpi_ev_release_global_lock(void)) 55 56acpi_status acpi_ev_remove_global_lock_handler(void); 57 58/* 59 * evgpe - Low-level GPE support 60 */ 61u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info *gpe_xrupt_list); 62 63acpi_status 64acpi_ev_update_gpe_enable_mask(struct acpi_gpe_event_info *gpe_event_info); 65 66acpi_status acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info); 67 68acpi_status 69acpi_ev_mask_gpe(struct acpi_gpe_event_info *gpe_event_info, u8 is_masked); 70 71acpi_status 72acpi_ev_add_gpe_reference(struct acpi_gpe_event_info *gpe_event_info, 73 u8 clear_on_enable); 74 75acpi_status 76acpi_ev_remove_gpe_reference(struct acpi_gpe_event_info *gpe_event_info); 77 78struct acpi_gpe_event_info *acpi_ev_get_gpe_event_info(acpi_handle gpe_device, 79 u32 gpe_number); 80 81struct acpi_gpe_event_info *acpi_ev_low_get_gpe_info(u32 gpe_number, 82 struct acpi_gpe_block_info 83 *gpe_block); 84 85acpi_status acpi_ev_finish_gpe(struct acpi_gpe_event_info *gpe_event_info); 86 87u32 88acpi_ev_detect_gpe(struct acpi_namespace_node *gpe_device, 89 struct acpi_gpe_event_info *gpe_event_info, u32 gpe_number); 90 91/* 92 * evgpeblk - Upper-level GPE block support 93 */ 94acpi_status 95acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device, 96 u64 address, 97 u8 space_id, 98 u32 register_count, 99 u16 gpe_block_base_number, 100 u32 interrupt_number, 101 struct acpi_gpe_block_info **return_gpe_block); 102 103acpi_status 104acpi_ev_initialize_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info, 105 struct acpi_gpe_block_info *gpe_block, 106 void *context); 107 108ACPI_HW_DEPENDENT_RETURN_OK(acpi_status 109 acpi_ev_delete_gpe_block(struct acpi_gpe_block_info 110 *gpe_block)) 111 112u32 113acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device, 114 struct acpi_gpe_event_info *gpe_event_info, 115 u32 gpe_number); 116 117/* 118 * evgpeinit - GPE initialization and update 119 */ 120acpi_status acpi_ev_gpe_initialize(void); 121 122ACPI_HW_DEPENDENT_RETURN_VOID(void 123 acpi_ev_update_gpes(acpi_owner_id table_owner_id)) 124 125acpi_status 126acpi_ev_match_gpe_method(acpi_handle obj_handle, 127 u32 level, void *context, void **return_value); 128 129/* 130 * evgpeutil - GPE utilities 131 */ 132acpi_status 133acpi_ev_walk_gpe_list(acpi_gpe_callback gpe_walk_callback, void *context); 134 135acpi_status 136acpi_ev_get_gpe_device(struct acpi_gpe_xrupt_info *gpe_xrupt_info, 137 struct acpi_gpe_block_info *gpe_block, void *context); 138 139acpi_status 140acpi_ev_get_gpe_xrupt_block(u32 interrupt_number, 141 struct acpi_gpe_xrupt_info **gpe_xrupt_block); 142 143acpi_status acpi_ev_delete_gpe_xrupt(struct acpi_gpe_xrupt_info *gpe_xrupt); 144 145acpi_status 146acpi_ev_delete_gpe_handlers(struct acpi_gpe_xrupt_info *gpe_xrupt_info, 147 struct acpi_gpe_block_info *gpe_block, 148 void *context); 149 150/* 151 * evhandler - Address space handling 152 */ 153union acpi_operand_object *acpi_ev_find_region_handler(acpi_adr_space_type 154 space_id, 155 union acpi_operand_object 156 *handler_obj); 157 158u8 159acpi_ev_has_default_handler(struct acpi_namespace_node *node, 160 acpi_adr_space_type space_id); 161 162acpi_status acpi_ev_install_region_handlers(void); 163 164acpi_status 165acpi_ev_install_space_handler(struct acpi_namespace_node *node, 166 acpi_adr_space_type space_id, 167 acpi_adr_space_handler handler, 168 acpi_adr_space_setup setup, void *context); 169 170/* 171 * evregion - Operation region support 172 */ 173acpi_status acpi_ev_initialize_op_regions(void); 174 175acpi_status 176acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, 177 union acpi_operand_object *field_obj, 178 u32 function, 179 u32 region_offset, u32 bit_width, u64 *value); 180 181acpi_status 182acpi_ev_attach_region(union acpi_operand_object *handler_obj, 183 union acpi_operand_object *region_obj, 184 u8 acpi_ns_is_locked); 185 186void 187acpi_ev_detach_region(union acpi_operand_object *region_obj, 188 u8 acpi_ns_is_locked); 189 190void 191acpi_ev_execute_reg_methods(struct acpi_namespace_node *node, 192 acpi_adr_space_type space_id, u32 function); 193 194acpi_status 195acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function); 196 197/* 198 * evregini - Region initialization and setup 199 */ 200acpi_status 201acpi_ev_system_memory_region_setup(acpi_handle handle, 202 u32 function, 203 void *handler_context, 204 void **region_context); 205 206acpi_status 207acpi_ev_io_space_region_setup(acpi_handle handle, 208 u32 function, 209 void *handler_context, void **region_context); 210 211acpi_status 212acpi_ev_pci_config_region_setup(acpi_handle handle, 213 u32 function, 214 void *handler_context, void **region_context); 215 216acpi_status 217acpi_ev_cmos_region_setup(acpi_handle handle, 218 u32 function, 219 void *handler_context, void **region_context); 220 221acpi_status 222acpi_ev_pci_bar_region_setup(acpi_handle handle, 223 u32 function, 224 void *handler_context, void **region_context); 225 226acpi_status 227acpi_ev_data_table_region_setup(acpi_handle handle, 228 u32 function, 229 void *handler_context, void **region_context); 230 231acpi_status 232acpi_ev_default_region_setup(acpi_handle handle, 233 u32 function, 234 void *handler_context, void **region_context); 235 236acpi_status acpi_ev_initialize_region(union acpi_operand_object *region_obj); 237 238u8 acpi_ev_is_pci_root_bridge(struct acpi_namespace_node *node); 239 240/* 241 * evsci - SCI (System Control Interrupt) handling/dispatch 242 */ 243u32 ACPI_SYSTEM_XFACE acpi_ev_gpe_xrupt_handler(void *context); 244 245u32 acpi_ev_sci_dispatch(void); 246 247u32 acpi_ev_install_sci_handler(void); 248 249acpi_status acpi_ev_remove_all_sci_handlers(void); 250 251ACPI_HW_DEPENDENT_RETURN_VOID(void acpi_ev_terminate(void)) 252#endif /* __ACEVENTS_H__ */