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 - 2023, 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 */ 30 acpi_status acpi_ev_initialize_events(void); 31 32 acpi_status acpi_ev_install_xrupt_handlers(void); 33 34 u32 acpi_ev_fixed_event_detect(void); 35 36 /* 37 * evmisc 38 */ 39 u8 acpi_ev_is_notify_object(struct acpi_namespace_node *node); 40 41 u32 acpi_ev_get_gpe_number_index(u32 gpe_number); 42 43 acpi_status 44 acpi_ev_queue_notify_request(struct acpi_namespace_node *node, 45 u32 notify_value); 46 47 /* 48 * evglock - Global Lock support 49 */ 50 acpi_status acpi_ev_init_global_lock_handler(void); 51 52 ACPI_HW_DEPENDENT_RETURN_OK(acpi_status 53 acpi_ev_acquire_global_lock(u16 timeout)) 54 ACPI_HW_DEPENDENT_RETURN_OK(acpi_status acpi_ev_release_global_lock(void)) 55 56 acpi_status acpi_ev_remove_global_lock_handler(void); 57 58 /* 59 * evgpe - Low-level GPE support 60 */ 61 u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info *gpe_xrupt_list); 62 63 acpi_status 64 acpi_ev_update_gpe_enable_mask(struct acpi_gpe_event_info *gpe_event_info); 65 66 acpi_status acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info); 67 68 acpi_status 69 acpi_ev_mask_gpe(struct acpi_gpe_event_info *gpe_event_info, u8 is_masked); 70 71 acpi_status 72 acpi_ev_add_gpe_reference(struct acpi_gpe_event_info *gpe_event_info, 73 u8 clear_on_enable); 74 75 acpi_status 76 acpi_ev_remove_gpe_reference(struct acpi_gpe_event_info *gpe_event_info); 77 78 struct acpi_gpe_event_info *acpi_ev_get_gpe_event_info(acpi_handle gpe_device, 79 u32 gpe_number); 80 81 struct acpi_gpe_event_info *acpi_ev_low_get_gpe_info(u32 gpe_number, 82 struct acpi_gpe_block_info 83 *gpe_block); 84 85 acpi_status acpi_ev_finish_gpe(struct acpi_gpe_event_info *gpe_event_info); 86 87 u32 88 acpi_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 */ 94 acpi_status 95 acpi_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 103 acpi_status 104 acpi_ev_initialize_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info, 105 struct acpi_gpe_block_info *gpe_block, 106 void *context); 107 108 ACPI_HW_DEPENDENT_RETURN_OK(acpi_status 109 acpi_ev_delete_gpe_block(struct acpi_gpe_block_info 110 *gpe_block)) 111 112 u32 113 acpi_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 */ 120 acpi_status acpi_ev_gpe_initialize(void); 121 122 ACPI_HW_DEPENDENT_RETURN_VOID(void 123 acpi_ev_update_gpes(acpi_owner_id table_owner_id)) 124 125 acpi_status 126 acpi_ev_match_gpe_method(acpi_handle obj_handle, 127 u32 level, void *context, void **return_value); 128 129 /* 130 * evgpeutil - GPE utilities 131 */ 132 acpi_status 133 acpi_ev_walk_gpe_list(acpi_gpe_callback gpe_walk_callback, void *context); 134 135 acpi_status 136 acpi_ev_get_gpe_device(struct acpi_gpe_xrupt_info *gpe_xrupt_info, 137 struct acpi_gpe_block_info *gpe_block, void *context); 138 139 acpi_status 140 acpi_ev_get_gpe_xrupt_block(u32 interrupt_number, 141 struct acpi_gpe_xrupt_info **gpe_xrupt_block); 142 143 acpi_status acpi_ev_delete_gpe_xrupt(struct acpi_gpe_xrupt_info *gpe_xrupt); 144 145 acpi_status 146 acpi_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 */ 153 union acpi_operand_object *acpi_ev_find_region_handler(acpi_adr_space_type 154 space_id, 155 union acpi_operand_object 156 *handler_obj); 157 158 u8 159 acpi_ev_has_default_handler(struct acpi_namespace_node *node, 160 acpi_adr_space_type space_id); 161 162 acpi_status acpi_ev_install_region_handlers(void); 163 164 acpi_status 165 acpi_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 */ 173 acpi_status acpi_ev_initialize_op_regions(void); 174 175 acpi_status 176 acpi_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 181 acpi_status 182 acpi_ev_attach_region(union acpi_operand_object *handler_obj, 183 union acpi_operand_object *region_obj, 184 u8 acpi_ns_is_locked); 185 186 void 187 acpi_ev_detach_region(union acpi_operand_object *region_obj, 188 u8 acpi_ns_is_locked); 189 190 void 191 acpi_ev_execute_reg_methods(struct acpi_namespace_node *node, u32 max_depth, 192 acpi_adr_space_type space_id, u32 function); 193 194 acpi_status 195 acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function); 196 197 /* 198 * evregini - Region initialization and setup 199 */ 200 acpi_status 201 acpi_ev_system_memory_region_setup(acpi_handle handle, 202 u32 function, 203 void *handler_context, 204 void **region_context); 205 206 acpi_status 207 acpi_ev_io_space_region_setup(acpi_handle handle, 208 u32 function, 209 void *handler_context, void **region_context); 210 211 acpi_status 212 acpi_ev_pci_config_region_setup(acpi_handle handle, 213 u32 function, 214 void *handler_context, void **region_context); 215 216 acpi_status 217 acpi_ev_cmos_region_setup(acpi_handle handle, 218 u32 function, 219 void *handler_context, void **region_context); 220 221 acpi_status 222 acpi_ev_pci_bar_region_setup(acpi_handle handle, 223 u32 function, 224 void *handler_context, void **region_context); 225 226 acpi_status 227 acpi_ev_data_table_region_setup(acpi_handle handle, 228 u32 function, 229 void *handler_context, void **region_context); 230 231 acpi_status 232 acpi_ev_default_region_setup(acpi_handle handle, 233 u32 function, 234 void *handler_context, void **region_context); 235 236 acpi_status acpi_ev_initialize_region(union acpi_operand_object *region_obj); 237 238 u8 acpi_ev_is_pci_root_bridge(struct acpi_namespace_node *node); 239 240 /* 241 * evsci - SCI (System Control Interrupt) handling/dispatch 242 */ 243 u32 ACPI_SYSTEM_XFACE acpi_ev_gpe_xrupt_handler(void *context); 244 245 u32 acpi_ev_sci_dispatch(void); 246 247 u32 acpi_ev_install_sci_handler(void); 248 249 acpi_status acpi_ev_remove_all_sci_handlers(void); 250 251 ACPI_HW_DEPENDENT_RETURN_VOID(void acpi_ev_terminate(void)) 252 #endif /* __ACEVENTS_H__ */ 253