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