1 | /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ |
2 | /****************************************************************************** |
3 | * |
4 | * Name: acdispat.h - dispatcher (parser to interpreter interface) |
5 | * |
6 | * Copyright (C) 2000 - 2023, Intel Corp. |
7 | * |
8 | *****************************************************************************/ |
9 | |
10 | #ifndef _ACDISPAT_H_ |
11 | #define _ACDISPAT_H_ |
12 | |
13 | #define NAMEOF_LOCAL_NTE "__L0" |
14 | #define NAMEOF_ARG_NTE "__A0" |
15 | |
16 | /* |
17 | * dsargs - execution of dynamic arguments for static objects |
18 | */ |
19 | acpi_status |
20 | acpi_ds_get_buffer_field_arguments(union acpi_operand_object *obj_desc); |
21 | |
22 | acpi_status |
23 | acpi_ds_get_bank_field_arguments(union acpi_operand_object *obj_desc); |
24 | |
25 | acpi_status acpi_ds_get_region_arguments(union acpi_operand_object *rgn_desc); |
26 | |
27 | acpi_status acpi_ds_get_buffer_arguments(union acpi_operand_object *obj_desc); |
28 | |
29 | acpi_status acpi_ds_get_package_arguments(union acpi_operand_object *obj_desc); |
30 | |
31 | /* |
32 | * dscontrol - support for execution control opcodes |
33 | */ |
34 | acpi_status |
35 | acpi_ds_exec_begin_control_op(struct acpi_walk_state *walk_state, |
36 | union acpi_parse_object *op); |
37 | |
38 | acpi_status |
39 | acpi_ds_exec_end_control_op(struct acpi_walk_state *walk_state, |
40 | union acpi_parse_object *op); |
41 | |
42 | /* |
43 | * dsopcode - support for late operand evaluation |
44 | */ |
45 | acpi_status |
46 | acpi_ds_eval_buffer_field_operands(struct acpi_walk_state *walk_state, |
47 | union acpi_parse_object *op); |
48 | |
49 | acpi_status |
50 | acpi_ds_eval_region_operands(struct acpi_walk_state *walk_state, |
51 | union acpi_parse_object *op); |
52 | |
53 | acpi_status |
54 | acpi_ds_eval_table_region_operands(struct acpi_walk_state *walk_state, |
55 | union acpi_parse_object *op); |
56 | |
57 | acpi_status |
58 | acpi_ds_eval_data_object_operands(struct acpi_walk_state *walk_state, |
59 | union acpi_parse_object *op, |
60 | union acpi_operand_object *obj_desc); |
61 | |
62 | acpi_status |
63 | acpi_ds_eval_bank_field_operands(struct acpi_walk_state *walk_state, |
64 | union acpi_parse_object *op); |
65 | |
66 | acpi_status acpi_ds_initialize_region(acpi_handle obj_handle); |
67 | |
68 | /* |
69 | * dsexec - Parser/Interpreter interface, method execution callbacks |
70 | */ |
71 | acpi_status |
72 | acpi_ds_get_predicate_value(struct acpi_walk_state *walk_state, |
73 | union acpi_operand_object *result_obj); |
74 | |
75 | acpi_status |
76 | acpi_ds_exec_begin_op(struct acpi_walk_state *walk_state, |
77 | union acpi_parse_object **out_op); |
78 | |
79 | acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *state); |
80 | |
81 | /* |
82 | * dsfield - Parser/Interpreter interface for AML fields |
83 | */ |
84 | acpi_status |
85 | acpi_ds_create_field(union acpi_parse_object *op, |
86 | struct acpi_namespace_node *region_node, |
87 | struct acpi_walk_state *walk_state); |
88 | |
89 | acpi_status |
90 | acpi_ds_create_bank_field(union acpi_parse_object *op, |
91 | struct acpi_namespace_node *region_node, |
92 | struct acpi_walk_state *walk_state); |
93 | |
94 | acpi_status |
95 | acpi_ds_create_index_field(union acpi_parse_object *op, |
96 | struct acpi_namespace_node *region_node, |
97 | struct acpi_walk_state *walk_state); |
98 | |
99 | acpi_status |
100 | acpi_ds_create_buffer_field(union acpi_parse_object *op, |
101 | struct acpi_walk_state *walk_state); |
102 | |
103 | acpi_status |
104 | acpi_ds_init_field_objects(union acpi_parse_object *op, |
105 | struct acpi_walk_state *walk_state); |
106 | |
107 | /* |
108 | * dsload - Parser/Interpreter interface |
109 | */ |
110 | acpi_status |
111 | acpi_ds_init_callbacks(struct acpi_walk_state *walk_state, u32 pass_number); |
112 | |
113 | /* dsload - pass 1 namespace load callbacks */ |
114 | |
115 | acpi_status |
116 | acpi_ds_load1_begin_op(struct acpi_walk_state *walk_state, |
117 | union acpi_parse_object **out_op); |
118 | |
119 | acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state); |
120 | |
121 | /* dsload - pass 2 namespace load callbacks */ |
122 | |
123 | acpi_status |
124 | acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state, |
125 | union acpi_parse_object **out_op); |
126 | |
127 | acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state); |
128 | |
129 | /* |
130 | * dsmthdat - method data (locals/args) |
131 | */ |
132 | acpi_status |
133 | acpi_ds_store_object_to_local(u8 type, |
134 | u32 index, |
135 | union acpi_operand_object *src_desc, |
136 | struct acpi_walk_state *walk_state); |
137 | |
138 | acpi_status |
139 | acpi_ds_method_data_get_entry(u16 opcode, |
140 | u32 index, |
141 | struct acpi_walk_state *walk_state, |
142 | union acpi_operand_object ***node); |
143 | |
144 | void acpi_ds_method_data_delete_all(struct acpi_walk_state *walk_state); |
145 | |
146 | u8 acpi_ds_is_method_value(union acpi_operand_object *obj_desc); |
147 | |
148 | acpi_status |
149 | acpi_ds_method_data_get_value(u8 type, |
150 | u32 index, |
151 | struct acpi_walk_state *walk_state, |
152 | union acpi_operand_object **dest_desc); |
153 | |
154 | acpi_status |
155 | acpi_ds_method_data_init_args(union acpi_operand_object **params, |
156 | u32 max_param_count, |
157 | struct acpi_walk_state *walk_state); |
158 | |
159 | acpi_status |
160 | acpi_ds_method_data_get_node(u8 type, |
161 | u32 index, |
162 | struct acpi_walk_state *walk_state, |
163 | struct acpi_namespace_node **node); |
164 | |
165 | void acpi_ds_method_data_init(struct acpi_walk_state *walk_state); |
166 | |
167 | /* |
168 | * dsmethod - Parser/Interpreter interface - control method parsing |
169 | */ |
170 | acpi_status |
171 | acpi_ds_auto_serialize_method(struct acpi_namespace_node *node, |
172 | union acpi_operand_object *obj_desc); |
173 | |
174 | acpi_status |
175 | acpi_ds_call_control_method(struct acpi_thread_state *thread, |
176 | struct acpi_walk_state *walk_state, |
177 | union acpi_parse_object *op); |
178 | |
179 | acpi_status |
180 | acpi_ds_restart_control_method(struct acpi_walk_state *walk_state, |
181 | union acpi_operand_object *return_desc); |
182 | |
183 | void |
184 | acpi_ds_terminate_control_method(union acpi_operand_object *method_desc, |
185 | struct acpi_walk_state *walk_state); |
186 | |
187 | acpi_status |
188 | acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node, |
189 | union acpi_operand_object *obj_desc, |
190 | struct acpi_walk_state *walk_state); |
191 | |
192 | acpi_status |
193 | acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state); |
194 | |
195 | /* |
196 | * dsinit |
197 | */ |
198 | acpi_status |
199 | acpi_ds_initialize_objects(u32 table_index, |
200 | struct acpi_namespace_node *start_node); |
201 | |
202 | /* |
203 | * dsobject - Parser/Interpreter interface - object initialization and conversion |
204 | */ |
205 | acpi_status |
206 | acpi_ds_build_internal_object(struct acpi_walk_state *walk_state, |
207 | union acpi_parse_object *op, |
208 | union acpi_operand_object **obj_desc_ptr); |
209 | |
210 | acpi_status |
211 | acpi_ds_build_internal_buffer_obj(struct acpi_walk_state *walk_state, |
212 | union acpi_parse_object *op, |
213 | u32 buffer_length, |
214 | union acpi_operand_object **obj_desc_ptr); |
215 | |
216 | acpi_status |
217 | acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state, |
218 | union acpi_parse_object *op, |
219 | u32 package_length, |
220 | union acpi_operand_object **obj_desc); |
221 | |
222 | acpi_status |
223 | acpi_ds_init_object_from_op(struct acpi_walk_state *walk_state, |
224 | union acpi_parse_object *op, |
225 | u16 opcode, union acpi_operand_object **obj_desc); |
226 | |
227 | acpi_status |
228 | acpi_ds_create_node(struct acpi_walk_state *walk_state, |
229 | struct acpi_namespace_node *node, |
230 | union acpi_parse_object *op); |
231 | |
232 | /* |
233 | * dspkginit - Package object initialization |
234 | */ |
235 | acpi_status |
236 | acpi_ds_init_package_element(u8 object_type, |
237 | union acpi_operand_object *source_object, |
238 | union acpi_generic_state *state, void *context); |
239 | |
240 | /* |
241 | * dsutils - Parser/Interpreter interface utility routines |
242 | */ |
243 | void acpi_ds_clear_implicit_return(struct acpi_walk_state *walk_state); |
244 | |
245 | u8 |
246 | acpi_ds_do_implicit_return(union acpi_operand_object *return_desc, |
247 | struct acpi_walk_state *walk_state, |
248 | u8 add_reference); |
249 | |
250 | u8 |
251 | acpi_ds_is_result_used(union acpi_parse_object *op, |
252 | struct acpi_walk_state *walk_state); |
253 | |
254 | void |
255 | acpi_ds_delete_result_if_not_used(union acpi_parse_object *op, |
256 | union acpi_operand_object *result_obj, |
257 | struct acpi_walk_state *walk_state); |
258 | |
259 | acpi_status |
260 | acpi_ds_create_operand(struct acpi_walk_state *walk_state, |
261 | union acpi_parse_object *arg, u32 args_remaining); |
262 | |
263 | acpi_status |
264 | acpi_ds_create_operands(struct acpi_walk_state *walk_state, |
265 | union acpi_parse_object *first_arg); |
266 | |
267 | acpi_status acpi_ds_resolve_operands(struct acpi_walk_state *walk_state); |
268 | |
269 | void acpi_ds_clear_operands(struct acpi_walk_state *walk_state); |
270 | |
271 | acpi_status acpi_ds_evaluate_name_path(struct acpi_walk_state *walk_state); |
272 | |
273 | /* |
274 | * dswscope - Scope Stack manipulation |
275 | */ |
276 | acpi_status |
277 | acpi_ds_scope_stack_push(struct acpi_namespace_node *node, |
278 | acpi_object_type type, |
279 | struct acpi_walk_state *walk_state); |
280 | |
281 | acpi_status acpi_ds_scope_stack_pop(struct acpi_walk_state *walk_state); |
282 | |
283 | void acpi_ds_scope_stack_clear(struct acpi_walk_state *walk_state); |
284 | |
285 | /* |
286 | * dswstate - parser WALK_STATE management routines |
287 | */ |
288 | acpi_status |
289 | acpi_ds_obj_stack_push(void *object, struct acpi_walk_state *walk_state); |
290 | |
291 | acpi_status |
292 | acpi_ds_obj_stack_pop(u32 pop_count, struct acpi_walk_state *walk_state); |
293 | |
294 | struct acpi_walk_state * acpi_ds_create_walk_state(acpi_owner_id owner_id, |
295 | union acpi_parse_object |
296 | *origin, |
297 | union acpi_operand_object |
298 | *mth_desc, |
299 | struct acpi_thread_state |
300 | *thread); |
301 | |
302 | acpi_status |
303 | acpi_ds_init_aml_walk(struct acpi_walk_state *walk_state, |
304 | union acpi_parse_object *op, |
305 | struct acpi_namespace_node *method_node, |
306 | u8 * aml_start, |
307 | u32 aml_length, |
308 | struct acpi_evaluate_info *info, u8 pass_number); |
309 | |
310 | void |
311 | acpi_ds_obj_stack_pop_and_delete(u32 pop_count, |
312 | struct acpi_walk_state *walk_state); |
313 | |
314 | void acpi_ds_delete_walk_state(struct acpi_walk_state *walk_state); |
315 | |
316 | struct acpi_walk_state *acpi_ds_pop_walk_state(struct acpi_thread_state |
317 | *thread); |
318 | |
319 | void |
320 | acpi_ds_push_walk_state(struct acpi_walk_state *walk_state, |
321 | struct acpi_thread_state *thread); |
322 | |
323 | acpi_status acpi_ds_result_stack_clear(struct acpi_walk_state *walk_state); |
324 | |
325 | struct acpi_walk_state *acpi_ds_get_current_walk_state(struct acpi_thread_state |
326 | *thread); |
327 | |
328 | acpi_status |
329 | acpi_ds_result_pop(union acpi_operand_object **object, |
330 | struct acpi_walk_state *walk_state); |
331 | |
332 | acpi_status |
333 | acpi_ds_result_push(union acpi_operand_object *object, |
334 | struct acpi_walk_state *walk_state); |
335 | |
336 | /* |
337 | * dsdebug - parser debugging routines |
338 | */ |
339 | void |
340 | acpi_ds_dump_method_stack(acpi_status status, |
341 | struct acpi_walk_state *walk_state, |
342 | union acpi_parse_object *op); |
343 | |
344 | #endif /* _ACDISPAT_H_ */ |
345 | |