195857638SErik Schmauss /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 2e2f7a777SLen Brown /****************************************************************************** 3e2f7a777SLen Brown * 4e2f7a777SLen Brown * Name: acevents.h - Event subcomponent prototypes and defines 5e2f7a777SLen Brown * 6612c2932SBob Moore * Copyright (C) 2000 - 2023, Intel Corp. 7e2f7a777SLen Brown * 895857638SErik Schmauss *****************************************************************************/ 9e2f7a777SLen Brown 10e2f7a777SLen Brown #ifndef __ACEVENTS_H__ 11e2f7a777SLen Brown #define __ACEVENTS_H__ 12e2f7a777SLen Brown 13e2f7a777SLen Brown /* 1487cd826bSErik Schmauss * Conditions to trigger post enabling GPE polling: 1587cd826bSErik Schmauss * It is not sufficient to trigger edge-triggered GPE with specific GPE 1687cd826bSErik Schmauss * chips, software need to poll once after enabling. 1787cd826bSErik Schmauss */ 1887cd826bSErik Schmauss #ifdef ACPI_USE_GPE_POLLING 1987cd826bSErik Schmauss #define ACPI_GPE_IS_POLLING_NEEDED(__gpe__) \ 2087cd826bSErik Schmauss ((__gpe__)->runtime_count == 1 && \ 2187cd826bSErik Schmauss (__gpe__)->flags & ACPI_GPE_INITIALIZED && \ 2287cd826bSErik Schmauss ((__gpe__)->flags & ACPI_GPE_XRUPT_TYPE_MASK) == ACPI_GPE_EDGE_TRIGGERED) 2387cd826bSErik Schmauss #else 2487cd826bSErik Schmauss #define ACPI_GPE_IS_POLLING_NEEDED(__gpe__) FALSE 2587cd826bSErik Schmauss #endif 2687cd826bSErik Schmauss 2787cd826bSErik Schmauss /* 28e2f7a777SLen Brown * evevent 29e2f7a777SLen Brown */ 30e2f7a777SLen Brown acpi_status acpi_ev_initialize_events(void); 31e2f7a777SLen Brown 32e2f7a777SLen Brown acpi_status acpi_ev_install_xrupt_handlers(void); 33e2f7a777SLen Brown 34e2f7a777SLen Brown u32 acpi_ev_fixed_event_detect(void); 35e2f7a777SLen Brown 36e2f7a777SLen Brown /* 37e2f7a777SLen Brown * evmisc 38e2f7a777SLen Brown */ 39e2f7a777SLen Brown u8 acpi_ev_is_notify_object(struct acpi_namespace_node *node); 40e2f7a777SLen Brown 41e2f7a777SLen Brown u32 acpi_ev_get_gpe_number_index(u32 gpe_number); 42e2f7a777SLen Brown 43e2f7a777SLen Brown acpi_status 44e2f7a777SLen Brown acpi_ev_queue_notify_request(struct acpi_namespace_node *node, 45e2f7a777SLen Brown u32 notify_value); 46e2f7a777SLen Brown 47e2f7a777SLen Brown /* 480f6896f1SBob Moore * evglock - Global Lock support 490f6896f1SBob Moore */ 500f6896f1SBob Moore acpi_status acpi_ev_init_global_lock_handler(void); 510f6896f1SBob Moore 5233620c54SBob Moore ACPI_HW_DEPENDENT_RETURN_OK(acpi_status 5333620c54SBob Moore acpi_ev_acquire_global_lock(u16 timeout)) 5433620c54SBob Moore ACPI_HW_DEPENDENT_RETURN_OK(acpi_status acpi_ev_release_global_lock(void)) 55f5c1e1c5SLv Zheng 560f6896f1SBob Moore acpi_status acpi_ev_remove_global_lock_handler(void); 570f6896f1SBob Moore 580f6896f1SBob Moore /* 593fe50208SBob Moore * evgpe - Low-level GPE support 60e2f7a777SLen Brown */ 613fe50208SBob Moore u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info *gpe_xrupt_list); 623fe50208SBob Moore 63e2f7a777SLen Brown acpi_status 64a44061aaSRafael J. Wysocki acpi_ev_update_gpe_enable_mask(struct acpi_gpe_event_info *gpe_event_info); 65e2f7a777SLen Brown 663bd741bdSRafael J. Wysocki acpi_status acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info); 673bd741bdSRafael J. Wysocki 681f86e8c1SLv Zheng acpi_status 692af52c2bSLv Zheng acpi_ev_mask_gpe(struct acpi_gpe_event_info *gpe_event_info, u8 is_masked); 702af52c2bSLv Zheng 712af52c2bSLv Zheng acpi_status 7244758bafSRafael J. Wysocki acpi_ev_add_gpe_reference(struct acpi_gpe_event_info *gpe_event_info, 7344758bafSRafael J. Wysocki u8 clear_on_enable); 7428f4f8a9SRafael J. Wysocki 751f86e8c1SLv Zheng acpi_status 761f86e8c1SLv Zheng acpi_ev_remove_gpe_reference(struct acpi_gpe_event_info *gpe_event_info); 7728f4f8a9SRafael J. Wysocki 78e2f7a777SLen Brown struct acpi_gpe_event_info *acpi_ev_get_gpe_event_info(acpi_handle gpe_device, 79e2f7a777SLen Brown u32 gpe_number); 80e2f7a777SLen Brown 810f849d2cSLin Ming struct acpi_gpe_event_info *acpi_ev_low_get_gpe_info(u32 gpe_number, 820f849d2cSLin Ming struct acpi_gpe_block_info 830f849d2cSLin Ming *gpe_block); 840f849d2cSLin Ming 85bba63a29SLin Ming acpi_status acpi_ev_finish_gpe(struct acpi_gpe_event_info *gpe_event_info); 86bba63a29SLin Ming 878d593495SErik Schmauss u32 888d593495SErik Schmauss acpi_ev_detect_gpe(struct acpi_namespace_node *gpe_device, 898d593495SErik Schmauss struct acpi_gpe_event_info *gpe_event_info, u32 gpe_number); 908d593495SErik Schmauss 91e2f7a777SLen Brown /* 923fe50208SBob Moore * evgpeblk - Upper-level GPE block support 93e2f7a777SLen Brown */ 94e2f7a777SLen Brown acpi_status 95e2f7a777SLen Brown acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device, 967505da4cSBob Moore u64 address, 977505da4cSBob Moore u8 space_id, 98e2f7a777SLen Brown u32 register_count, 997505da4cSBob Moore u16 gpe_block_base_number, 100e2f7a777SLen Brown u32 interrupt_number, 101e2f7a777SLen Brown struct acpi_gpe_block_info **return_gpe_block); 102e2f7a777SLen Brown 103e2f7a777SLen Brown acpi_status 104a2100801SRafael J. Wysocki acpi_ev_initialize_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info, 105a2100801SRafael J. Wysocki struct acpi_gpe_block_info *gpe_block, 1063a37898dSLin Ming void *context); 107e2f7a777SLen Brown 10833620c54SBob Moore ACPI_HW_DEPENDENT_RETURN_OK(acpi_status 10933620c54SBob Moore acpi_ev_delete_gpe_block(struct acpi_gpe_block_info 11033620c54SBob Moore *gpe_block)) 111e2f7a777SLen Brown 112e2f7a777SLen Brown u32 1138b6cd8adSLin Ming acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device, 1148b6cd8adSLin Ming struct acpi_gpe_event_info *gpe_event_info, 115e2f7a777SLen Brown u32 gpe_number); 116e2f7a777SLen Brown 1173fe50208SBob Moore /* 1183fe50208SBob Moore * evgpeinit - GPE initialization and update 1193fe50208SBob Moore */ 120e2f7a777SLen Brown acpi_status acpi_ev_gpe_initialize(void); 121e2f7a777SLen Brown 12233620c54SBob Moore ACPI_HW_DEPENDENT_RETURN_VOID(void 12333620c54SBob Moore acpi_ev_update_gpes(acpi_owner_id table_owner_id)) 1243fe50208SBob Moore 1253fe50208SBob Moore acpi_status 1263fe50208SBob Moore acpi_ev_match_gpe_method(acpi_handle obj_handle, 1273fe50208SBob Moore u32 level, void *context, void **return_value); 1283fe50208SBob Moore 1293fe50208SBob Moore /* 1303fe50208SBob Moore * evgpeutil - GPE utilities 1313fe50208SBob Moore */ 1323fe50208SBob Moore acpi_status 1333fe50208SBob Moore acpi_ev_walk_gpe_list(acpi_gpe_callback gpe_walk_callback, void *context); 1343fe50208SBob Moore 1353cfd53d5SLin Ming acpi_status 1363cfd53d5SLin Ming acpi_ev_get_gpe_device(struct acpi_gpe_xrupt_info *gpe_xrupt_info, 1373cfd53d5SLin Ming struct acpi_gpe_block_info *gpe_block, void *context); 1383cfd53d5SLin Ming 1394bec3d80SBob Moore acpi_status 1404bec3d80SBob Moore acpi_ev_get_gpe_xrupt_block(u32 interrupt_number, 1414bec3d80SBob Moore struct acpi_gpe_xrupt_info **gpe_xrupt_block); 1423fe50208SBob Moore 1433fe50208SBob Moore acpi_status acpi_ev_delete_gpe_xrupt(struct acpi_gpe_xrupt_info *gpe_xrupt); 1443fe50208SBob Moore 1453fe50208SBob Moore acpi_status 1463fe50208SBob Moore acpi_ev_delete_gpe_handlers(struct acpi_gpe_xrupt_info *gpe_xrupt_info, 1473fe50208SBob Moore struct acpi_gpe_block_info *gpe_block, 1483fe50208SBob Moore void *context); 1493fe50208SBob Moore 150e2f7a777SLen Brown /* 15142f8fb75SBob Moore * evhandler - Address space handling 152e2f7a777SLen Brown */ 153f31a99ceSLv Zheng union acpi_operand_object *acpi_ev_find_region_handler(acpi_adr_space_type 154f31a99ceSLv Zheng space_id, 155f31a99ceSLv Zheng union acpi_operand_object 156f31a99ceSLv Zheng *handler_obj); 157f31a99ceSLv Zheng 15842f8fb75SBob Moore u8 15942f8fb75SBob Moore acpi_ev_has_default_handler(struct acpi_namespace_node *node, 16042f8fb75SBob Moore acpi_adr_space_type space_id); 16142f8fb75SBob Moore 162e2f7a777SLen Brown acpi_status acpi_ev_install_region_handlers(void); 163e2f7a777SLen Brown 16442f8fb75SBob Moore acpi_status 16542f8fb75SBob Moore acpi_ev_install_space_handler(struct acpi_namespace_node *node, 16642f8fb75SBob Moore acpi_adr_space_type space_id, 16742f8fb75SBob Moore acpi_adr_space_handler handler, 16842f8fb75SBob Moore acpi_adr_space_setup setup, void *context); 16942f8fb75SBob Moore 17042f8fb75SBob Moore /* 17142f8fb75SBob Moore * evregion - Operation region support 17242f8fb75SBob Moore */ 173e2f7a777SLen Brown acpi_status acpi_ev_initialize_op_regions(void); 174e2f7a777SLen Brown 175e2f7a777SLen Brown acpi_status 176e2f7a777SLen Brown acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, 1779ce81784SBob Moore union acpi_operand_object *field_obj, 178e2f7a777SLen Brown u32 function, 1795df7e6cbSBob Moore u32 region_offset, u32 bit_width, u64 *value); 180e2f7a777SLen Brown 181e2f7a777SLen Brown acpi_status 182e2f7a777SLen Brown acpi_ev_attach_region(union acpi_operand_object *handler_obj, 183e2f7a777SLen Brown union acpi_operand_object *region_obj, 184e2f7a777SLen Brown u8 acpi_ns_is_locked); 185e2f7a777SLen Brown 186e2f7a777SLen Brown void 187e2f7a777SLen Brown acpi_ev_detach_region(union acpi_operand_object *region_obj, 188e2f7a777SLen Brown u8 acpi_ns_is_locked); 189e2f7a777SLen Brown 190d815346fSLv Zheng void 191*03fd525dSRafael J. Wysocki acpi_ev_execute_reg_methods(struct acpi_namespace_node *node, u32 max_depth, 192d815346fSLv Zheng acpi_adr_space_type space_id, u32 function); 193e2f7a777SLen Brown 194e2f7a777SLen Brown acpi_status 195e2f7a777SLen Brown acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function); 196e2f7a777SLen Brown 197e2f7a777SLen Brown /* 198e2f7a777SLen Brown * evregini - Region initialization and setup 199e2f7a777SLen Brown */ 200e2f7a777SLen Brown acpi_status 201e2f7a777SLen Brown acpi_ev_system_memory_region_setup(acpi_handle handle, 202e2f7a777SLen Brown u32 function, 203e2f7a777SLen Brown void *handler_context, 204e2f7a777SLen Brown void **region_context); 205e2f7a777SLen Brown 206e2f7a777SLen Brown acpi_status 207e2f7a777SLen Brown acpi_ev_io_space_region_setup(acpi_handle handle, 208e2f7a777SLen Brown u32 function, 209e2f7a777SLen Brown void *handler_context, void **region_context); 210e2f7a777SLen Brown 211e2f7a777SLen Brown acpi_status 212e2f7a777SLen Brown acpi_ev_pci_config_region_setup(acpi_handle handle, 213e2f7a777SLen Brown u32 function, 214e2f7a777SLen Brown void *handler_context, void **region_context); 215e2f7a777SLen Brown 216e2f7a777SLen Brown acpi_status 217e2f7a777SLen Brown acpi_ev_cmos_region_setup(acpi_handle handle, 218e2f7a777SLen Brown u32 function, 219e2f7a777SLen Brown void *handler_context, void **region_context); 220e2f7a777SLen Brown 221e2f7a777SLen Brown acpi_status 222e2f7a777SLen Brown acpi_ev_pci_bar_region_setup(acpi_handle handle, 223e2f7a777SLen Brown u32 function, 224e2f7a777SLen Brown void *handler_context, void **region_context); 225e2f7a777SLen Brown 226e2f7a777SLen Brown acpi_status 227ca25f92bSJessica Clarke acpi_ev_data_table_region_setup(acpi_handle handle, 228ca25f92bSJessica Clarke u32 function, 229ca25f92bSJessica Clarke void *handler_context, void **region_context); 230ca25f92bSJessica Clarke 231ca25f92bSJessica Clarke acpi_status 232e2f7a777SLen Brown acpi_ev_default_region_setup(acpi_handle handle, 233e2f7a777SLen Brown u32 function, 234e2f7a777SLen Brown void *handler_context, void **region_context); 235e2f7a777SLen Brown 236760235cdSLv Zheng acpi_status acpi_ev_initialize_region(union acpi_operand_object *region_obj); 237e2f7a777SLen Brown 2388b1cafdcSBob Moore u8 acpi_ev_is_pci_root_bridge(struct acpi_namespace_node *node); 2398b1cafdcSBob Moore 240e2f7a777SLen Brown /* 241e2f7a777SLen Brown * evsci - SCI (System Control Interrupt) handling/dispatch 242e2f7a777SLen Brown */ 243e2f7a777SLen Brown u32 ACPI_SYSTEM_XFACE acpi_ev_gpe_xrupt_handler(void *context); 244e2f7a777SLen Brown 245a2fd4b4bSLv Zheng u32 acpi_ev_sci_dispatch(void); 246a2fd4b4bSLv Zheng 247e2f7a777SLen Brown u32 acpi_ev_install_sci_handler(void); 248e2f7a777SLen Brown 249a2fd4b4bSLv Zheng acpi_status acpi_ev_remove_all_sci_handlers(void); 250e2f7a777SLen Brown 25133620c54SBob Moore ACPI_HW_DEPENDENT_RETURN_VOID(void acpi_ev_terminate(void)) 252e2f7a777SLen Brown #endif /* __ACEVENTS_H__ */ 253