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