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, 192 acpi_adr_space_type space_id, u32 function); 193 194 void 195 acpi_ev_execute_orphan_reg_method(struct acpi_namespace_node *node, 196 acpi_adr_space_type space_id); 197 198 acpi_status 199 acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function); 200 201 /* 202 * evregini - Region initialization and setup 203 */ 204 acpi_status 205 acpi_ev_system_memory_region_setup(acpi_handle handle, 206 u32 function, 207 void *handler_context, 208 void **region_context); 209 210 acpi_status 211 acpi_ev_io_space_region_setup(acpi_handle handle, 212 u32 function, 213 void *handler_context, void **region_context); 214 215 acpi_status 216 acpi_ev_pci_config_region_setup(acpi_handle handle, 217 u32 function, 218 void *handler_context, void **region_context); 219 220 acpi_status 221 acpi_ev_cmos_region_setup(acpi_handle handle, 222 u32 function, 223 void *handler_context, void **region_context); 224 225 acpi_status 226 acpi_ev_pci_bar_region_setup(acpi_handle handle, 227 u32 function, 228 void *handler_context, void **region_context); 229 230 acpi_status 231 acpi_ev_data_table_region_setup(acpi_handle handle, 232 u32 function, 233 void *handler_context, void **region_context); 234 235 acpi_status 236 acpi_ev_default_region_setup(acpi_handle handle, 237 u32 function, 238 void *handler_context, void **region_context); 239 240 acpi_status acpi_ev_initialize_region(union acpi_operand_object *region_obj); 241 242 u8 acpi_ev_is_pci_root_bridge(struct acpi_namespace_node *node); 243 244 /* 245 * evsci - SCI (System Control Interrupt) handling/dispatch 246 */ 247 u32 ACPI_SYSTEM_XFACE acpi_ev_gpe_xrupt_handler(void *context); 248 249 u32 acpi_ev_sci_dispatch(void); 250 251 u32 acpi_ev_install_sci_handler(void); 252 253 acpi_status acpi_ev_remove_all_sci_handlers(void); 254 255 ACPI_HW_DEPENDENT_RETURN_VOID(void acpi_ev_terminate(void)) 256 #endif /* __ACEVENTS_H__ */ 257