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