162306a36Sopenharmony_ci/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 262306a36Sopenharmony_ci/****************************************************************************** 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Name: acevents.h - Event subcomponent prototypes and defines 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (C) 2000 - 2023, Intel Corp. 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci *****************************************************************************/ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef __ACEVENTS_H__ 1162306a36Sopenharmony_ci#define __ACEVENTS_H__ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* 1462306a36Sopenharmony_ci * Conditions to trigger post enabling GPE polling: 1562306a36Sopenharmony_ci * It is not sufficient to trigger edge-triggered GPE with specific GPE 1662306a36Sopenharmony_ci * chips, software need to poll once after enabling. 1762306a36Sopenharmony_ci */ 1862306a36Sopenharmony_ci#ifdef ACPI_USE_GPE_POLLING 1962306a36Sopenharmony_ci#define ACPI_GPE_IS_POLLING_NEEDED(__gpe__) \ 2062306a36Sopenharmony_ci ((__gpe__)->runtime_count == 1 && \ 2162306a36Sopenharmony_ci (__gpe__)->flags & ACPI_GPE_INITIALIZED && \ 2262306a36Sopenharmony_ci ((__gpe__)->flags & ACPI_GPE_XRUPT_TYPE_MASK) == ACPI_GPE_EDGE_TRIGGERED) 2362306a36Sopenharmony_ci#else 2462306a36Sopenharmony_ci#define ACPI_GPE_IS_POLLING_NEEDED(__gpe__) FALSE 2562306a36Sopenharmony_ci#endif 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci/* 2862306a36Sopenharmony_ci * evevent 2962306a36Sopenharmony_ci */ 3062306a36Sopenharmony_ciacpi_status acpi_ev_initialize_events(void); 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ciacpi_status acpi_ev_install_xrupt_handlers(void); 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ciu32 acpi_ev_fixed_event_detect(void); 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci/* 3762306a36Sopenharmony_ci * evmisc 3862306a36Sopenharmony_ci */ 3962306a36Sopenharmony_ciu8 acpi_ev_is_notify_object(struct acpi_namespace_node *node); 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ciu32 acpi_ev_get_gpe_number_index(u32 gpe_number); 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ciacpi_status 4462306a36Sopenharmony_ciacpi_ev_queue_notify_request(struct acpi_namespace_node *node, 4562306a36Sopenharmony_ci u32 notify_value); 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci/* 4862306a36Sopenharmony_ci * evglock - Global Lock support 4962306a36Sopenharmony_ci */ 5062306a36Sopenharmony_ciacpi_status acpi_ev_init_global_lock_handler(void); 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ciACPI_HW_DEPENDENT_RETURN_OK(acpi_status 5362306a36Sopenharmony_ci acpi_ev_acquire_global_lock(u16 timeout)) 5462306a36Sopenharmony_ciACPI_HW_DEPENDENT_RETURN_OK(acpi_status acpi_ev_release_global_lock(void)) 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ciacpi_status acpi_ev_remove_global_lock_handler(void); 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci/* 5962306a36Sopenharmony_ci * evgpe - Low-level GPE support 6062306a36Sopenharmony_ci */ 6162306a36Sopenharmony_ciu32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info *gpe_xrupt_list); 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ciacpi_status 6462306a36Sopenharmony_ciacpi_ev_update_gpe_enable_mask(struct acpi_gpe_event_info *gpe_event_info); 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ciacpi_status acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info); 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ciacpi_status 6962306a36Sopenharmony_ciacpi_ev_mask_gpe(struct acpi_gpe_event_info *gpe_event_info, u8 is_masked); 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ciacpi_status 7262306a36Sopenharmony_ciacpi_ev_add_gpe_reference(struct acpi_gpe_event_info *gpe_event_info, 7362306a36Sopenharmony_ci u8 clear_on_enable); 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ciacpi_status 7662306a36Sopenharmony_ciacpi_ev_remove_gpe_reference(struct acpi_gpe_event_info *gpe_event_info); 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_cistruct acpi_gpe_event_info *acpi_ev_get_gpe_event_info(acpi_handle gpe_device, 7962306a36Sopenharmony_ci u32 gpe_number); 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_cistruct acpi_gpe_event_info *acpi_ev_low_get_gpe_info(u32 gpe_number, 8262306a36Sopenharmony_ci struct acpi_gpe_block_info 8362306a36Sopenharmony_ci *gpe_block); 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ciacpi_status acpi_ev_finish_gpe(struct acpi_gpe_event_info *gpe_event_info); 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ciu32 8862306a36Sopenharmony_ciacpi_ev_detect_gpe(struct acpi_namespace_node *gpe_device, 8962306a36Sopenharmony_ci struct acpi_gpe_event_info *gpe_event_info, u32 gpe_number); 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci/* 9262306a36Sopenharmony_ci * evgpeblk - Upper-level GPE block support 9362306a36Sopenharmony_ci */ 9462306a36Sopenharmony_ciacpi_status 9562306a36Sopenharmony_ciacpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device, 9662306a36Sopenharmony_ci u64 address, 9762306a36Sopenharmony_ci u8 space_id, 9862306a36Sopenharmony_ci u32 register_count, 9962306a36Sopenharmony_ci u16 gpe_block_base_number, 10062306a36Sopenharmony_ci u32 interrupt_number, 10162306a36Sopenharmony_ci struct acpi_gpe_block_info **return_gpe_block); 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ciacpi_status 10462306a36Sopenharmony_ciacpi_ev_initialize_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info, 10562306a36Sopenharmony_ci struct acpi_gpe_block_info *gpe_block, 10662306a36Sopenharmony_ci void *context); 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ciACPI_HW_DEPENDENT_RETURN_OK(acpi_status 10962306a36Sopenharmony_ci acpi_ev_delete_gpe_block(struct acpi_gpe_block_info 11062306a36Sopenharmony_ci *gpe_block)) 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ciu32 11362306a36Sopenharmony_ciacpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device, 11462306a36Sopenharmony_ci struct acpi_gpe_event_info *gpe_event_info, 11562306a36Sopenharmony_ci u32 gpe_number); 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci/* 11862306a36Sopenharmony_ci * evgpeinit - GPE initialization and update 11962306a36Sopenharmony_ci */ 12062306a36Sopenharmony_ciacpi_status acpi_ev_gpe_initialize(void); 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ciACPI_HW_DEPENDENT_RETURN_VOID(void 12362306a36Sopenharmony_ci acpi_ev_update_gpes(acpi_owner_id table_owner_id)) 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ciacpi_status 12662306a36Sopenharmony_ciacpi_ev_match_gpe_method(acpi_handle obj_handle, 12762306a36Sopenharmony_ci u32 level, void *context, void **return_value); 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci/* 13062306a36Sopenharmony_ci * evgpeutil - GPE utilities 13162306a36Sopenharmony_ci */ 13262306a36Sopenharmony_ciacpi_status 13362306a36Sopenharmony_ciacpi_ev_walk_gpe_list(acpi_gpe_callback gpe_walk_callback, void *context); 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ciacpi_status 13662306a36Sopenharmony_ciacpi_ev_get_gpe_device(struct acpi_gpe_xrupt_info *gpe_xrupt_info, 13762306a36Sopenharmony_ci struct acpi_gpe_block_info *gpe_block, void *context); 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ciacpi_status 14062306a36Sopenharmony_ciacpi_ev_get_gpe_xrupt_block(u32 interrupt_number, 14162306a36Sopenharmony_ci struct acpi_gpe_xrupt_info **gpe_xrupt_block); 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ciacpi_status acpi_ev_delete_gpe_xrupt(struct acpi_gpe_xrupt_info *gpe_xrupt); 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ciacpi_status 14662306a36Sopenharmony_ciacpi_ev_delete_gpe_handlers(struct acpi_gpe_xrupt_info *gpe_xrupt_info, 14762306a36Sopenharmony_ci struct acpi_gpe_block_info *gpe_block, 14862306a36Sopenharmony_ci void *context); 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ci/* 15162306a36Sopenharmony_ci * evhandler - Address space handling 15262306a36Sopenharmony_ci */ 15362306a36Sopenharmony_ciunion acpi_operand_object *acpi_ev_find_region_handler(acpi_adr_space_type 15462306a36Sopenharmony_ci space_id, 15562306a36Sopenharmony_ci union acpi_operand_object 15662306a36Sopenharmony_ci *handler_obj); 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ciu8 15962306a36Sopenharmony_ciacpi_ev_has_default_handler(struct acpi_namespace_node *node, 16062306a36Sopenharmony_ci acpi_adr_space_type space_id); 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_ciacpi_status acpi_ev_install_region_handlers(void); 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ciacpi_status 16562306a36Sopenharmony_ciacpi_ev_install_space_handler(struct acpi_namespace_node *node, 16662306a36Sopenharmony_ci acpi_adr_space_type space_id, 16762306a36Sopenharmony_ci acpi_adr_space_handler handler, 16862306a36Sopenharmony_ci acpi_adr_space_setup setup, void *context); 16962306a36Sopenharmony_ci 17062306a36Sopenharmony_ci/* 17162306a36Sopenharmony_ci * evregion - Operation region support 17262306a36Sopenharmony_ci */ 17362306a36Sopenharmony_ciacpi_status acpi_ev_initialize_op_regions(void); 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ciacpi_status 17662306a36Sopenharmony_ciacpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, 17762306a36Sopenharmony_ci union acpi_operand_object *field_obj, 17862306a36Sopenharmony_ci u32 function, 17962306a36Sopenharmony_ci u32 region_offset, u32 bit_width, u64 *value); 18062306a36Sopenharmony_ci 18162306a36Sopenharmony_ciacpi_status 18262306a36Sopenharmony_ciacpi_ev_attach_region(union acpi_operand_object *handler_obj, 18362306a36Sopenharmony_ci union acpi_operand_object *region_obj, 18462306a36Sopenharmony_ci u8 acpi_ns_is_locked); 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_civoid 18762306a36Sopenharmony_ciacpi_ev_detach_region(union acpi_operand_object *region_obj, 18862306a36Sopenharmony_ci u8 acpi_ns_is_locked); 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_civoid 19162306a36Sopenharmony_ciacpi_ev_execute_reg_methods(struct acpi_namespace_node *node, 19262306a36Sopenharmony_ci acpi_adr_space_type space_id, u32 function); 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ciacpi_status 19562306a36Sopenharmony_ciacpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function); 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ci/* 19862306a36Sopenharmony_ci * evregini - Region initialization and setup 19962306a36Sopenharmony_ci */ 20062306a36Sopenharmony_ciacpi_status 20162306a36Sopenharmony_ciacpi_ev_system_memory_region_setup(acpi_handle handle, 20262306a36Sopenharmony_ci u32 function, 20362306a36Sopenharmony_ci void *handler_context, 20462306a36Sopenharmony_ci void **region_context); 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_ciacpi_status 20762306a36Sopenharmony_ciacpi_ev_io_space_region_setup(acpi_handle handle, 20862306a36Sopenharmony_ci u32 function, 20962306a36Sopenharmony_ci void *handler_context, void **region_context); 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_ciacpi_status 21262306a36Sopenharmony_ciacpi_ev_pci_config_region_setup(acpi_handle handle, 21362306a36Sopenharmony_ci u32 function, 21462306a36Sopenharmony_ci void *handler_context, void **region_context); 21562306a36Sopenharmony_ci 21662306a36Sopenharmony_ciacpi_status 21762306a36Sopenharmony_ciacpi_ev_cmos_region_setup(acpi_handle handle, 21862306a36Sopenharmony_ci u32 function, 21962306a36Sopenharmony_ci void *handler_context, void **region_context); 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_ciacpi_status 22262306a36Sopenharmony_ciacpi_ev_pci_bar_region_setup(acpi_handle handle, 22362306a36Sopenharmony_ci u32 function, 22462306a36Sopenharmony_ci void *handler_context, void **region_context); 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_ciacpi_status 22762306a36Sopenharmony_ciacpi_ev_data_table_region_setup(acpi_handle handle, 22862306a36Sopenharmony_ci u32 function, 22962306a36Sopenharmony_ci void *handler_context, void **region_context); 23062306a36Sopenharmony_ci 23162306a36Sopenharmony_ciacpi_status 23262306a36Sopenharmony_ciacpi_ev_default_region_setup(acpi_handle handle, 23362306a36Sopenharmony_ci u32 function, 23462306a36Sopenharmony_ci void *handler_context, void **region_context); 23562306a36Sopenharmony_ci 23662306a36Sopenharmony_ciacpi_status acpi_ev_initialize_region(union acpi_operand_object *region_obj); 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_ciu8 acpi_ev_is_pci_root_bridge(struct acpi_namespace_node *node); 23962306a36Sopenharmony_ci 24062306a36Sopenharmony_ci/* 24162306a36Sopenharmony_ci * evsci - SCI (System Control Interrupt) handling/dispatch 24262306a36Sopenharmony_ci */ 24362306a36Sopenharmony_ciu32 ACPI_SYSTEM_XFACE acpi_ev_gpe_xrupt_handler(void *context); 24462306a36Sopenharmony_ci 24562306a36Sopenharmony_ciu32 acpi_ev_sci_dispatch(void); 24662306a36Sopenharmony_ci 24762306a36Sopenharmony_ciu32 acpi_ev_install_sci_handler(void); 24862306a36Sopenharmony_ci 24962306a36Sopenharmony_ciacpi_status acpi_ev_remove_all_sci_handlers(void); 25062306a36Sopenharmony_ci 25162306a36Sopenharmony_ciACPI_HW_DEPENDENT_RETURN_VOID(void acpi_ev_terminate(void)) 25262306a36Sopenharmony_ci#endif /* __ACEVENTS_H__ */ 253