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