162306a36Sopenharmony_ci/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
262306a36Sopenharmony_ci/******************************************************************************
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Name: acdispat.h - dispatcher (parser to interpreter interface)
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright (C) 2000 - 2023, Intel Corp.
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci *****************************************************************************/
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#ifndef _ACDISPAT_H_
1162306a36Sopenharmony_ci#define _ACDISPAT_H_
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#define NAMEOF_LOCAL_NTE    "__L0"
1462306a36Sopenharmony_ci#define NAMEOF_ARG_NTE      "__A0"
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci/*
1762306a36Sopenharmony_ci * dsargs - execution of dynamic arguments for static objects
1862306a36Sopenharmony_ci */
1962306a36Sopenharmony_ciacpi_status
2062306a36Sopenharmony_ciacpi_ds_get_buffer_field_arguments(union acpi_operand_object *obj_desc);
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ciacpi_status
2362306a36Sopenharmony_ciacpi_ds_get_bank_field_arguments(union acpi_operand_object *obj_desc);
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ciacpi_status acpi_ds_get_region_arguments(union acpi_operand_object *rgn_desc);
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ciacpi_status acpi_ds_get_buffer_arguments(union acpi_operand_object *obj_desc);
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ciacpi_status acpi_ds_get_package_arguments(union acpi_operand_object *obj_desc);
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci/*
3262306a36Sopenharmony_ci * dscontrol - support for execution control opcodes
3362306a36Sopenharmony_ci */
3462306a36Sopenharmony_ciacpi_status
3562306a36Sopenharmony_ciacpi_ds_exec_begin_control_op(struct acpi_walk_state *walk_state,
3662306a36Sopenharmony_ci			      union acpi_parse_object *op);
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ciacpi_status
3962306a36Sopenharmony_ciacpi_ds_exec_end_control_op(struct acpi_walk_state *walk_state,
4062306a36Sopenharmony_ci			    union acpi_parse_object *op);
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci/*
4362306a36Sopenharmony_ci * dsopcode - support for late operand evaluation
4462306a36Sopenharmony_ci */
4562306a36Sopenharmony_ciacpi_status
4662306a36Sopenharmony_ciacpi_ds_eval_buffer_field_operands(struct acpi_walk_state *walk_state,
4762306a36Sopenharmony_ci				   union acpi_parse_object *op);
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ciacpi_status
5062306a36Sopenharmony_ciacpi_ds_eval_region_operands(struct acpi_walk_state *walk_state,
5162306a36Sopenharmony_ci			     union acpi_parse_object *op);
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ciacpi_status
5462306a36Sopenharmony_ciacpi_ds_eval_table_region_operands(struct acpi_walk_state *walk_state,
5562306a36Sopenharmony_ci				   union acpi_parse_object *op);
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ciacpi_status
5862306a36Sopenharmony_ciacpi_ds_eval_data_object_operands(struct acpi_walk_state *walk_state,
5962306a36Sopenharmony_ci				  union acpi_parse_object *op,
6062306a36Sopenharmony_ci				  union acpi_operand_object *obj_desc);
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ciacpi_status
6362306a36Sopenharmony_ciacpi_ds_eval_bank_field_operands(struct acpi_walk_state *walk_state,
6462306a36Sopenharmony_ci				 union acpi_parse_object *op);
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ciacpi_status acpi_ds_initialize_region(acpi_handle obj_handle);
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci/*
6962306a36Sopenharmony_ci * dsexec - Parser/Interpreter interface, method execution callbacks
7062306a36Sopenharmony_ci */
7162306a36Sopenharmony_ciacpi_status
7262306a36Sopenharmony_ciacpi_ds_get_predicate_value(struct acpi_walk_state *walk_state,
7362306a36Sopenharmony_ci			    union acpi_operand_object *result_obj);
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ciacpi_status
7662306a36Sopenharmony_ciacpi_ds_exec_begin_op(struct acpi_walk_state *walk_state,
7762306a36Sopenharmony_ci		      union acpi_parse_object **out_op);
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ciacpi_status acpi_ds_exec_end_op(struct acpi_walk_state *state);
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci/*
8262306a36Sopenharmony_ci * dsfield - Parser/Interpreter interface for AML fields
8362306a36Sopenharmony_ci */
8462306a36Sopenharmony_ciacpi_status
8562306a36Sopenharmony_ciacpi_ds_create_field(union acpi_parse_object *op,
8662306a36Sopenharmony_ci		     struct acpi_namespace_node *region_node,
8762306a36Sopenharmony_ci		     struct acpi_walk_state *walk_state);
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ciacpi_status
9062306a36Sopenharmony_ciacpi_ds_create_bank_field(union acpi_parse_object *op,
9162306a36Sopenharmony_ci			  struct acpi_namespace_node *region_node,
9262306a36Sopenharmony_ci			  struct acpi_walk_state *walk_state);
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ciacpi_status
9562306a36Sopenharmony_ciacpi_ds_create_index_field(union acpi_parse_object *op,
9662306a36Sopenharmony_ci			   struct acpi_namespace_node *region_node,
9762306a36Sopenharmony_ci			   struct acpi_walk_state *walk_state);
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ciacpi_status
10062306a36Sopenharmony_ciacpi_ds_create_buffer_field(union acpi_parse_object *op,
10162306a36Sopenharmony_ci			    struct acpi_walk_state *walk_state);
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_ciacpi_status
10462306a36Sopenharmony_ciacpi_ds_init_field_objects(union acpi_parse_object *op,
10562306a36Sopenharmony_ci			   struct acpi_walk_state *walk_state);
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci/*
10862306a36Sopenharmony_ci * dsload - Parser/Interpreter interface
10962306a36Sopenharmony_ci */
11062306a36Sopenharmony_ciacpi_status
11162306a36Sopenharmony_ciacpi_ds_init_callbacks(struct acpi_walk_state *walk_state, u32 pass_number);
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ci/* dsload - pass 1 namespace load callbacks */
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_ciacpi_status
11662306a36Sopenharmony_ciacpi_ds_load1_begin_op(struct acpi_walk_state *walk_state,
11762306a36Sopenharmony_ci		       union acpi_parse_object **out_op);
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ciacpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state);
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci/* dsload - pass 2 namespace load callbacks */
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ciacpi_status
12462306a36Sopenharmony_ciacpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
12562306a36Sopenharmony_ci		       union acpi_parse_object **out_op);
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ciacpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state);
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ci/*
13062306a36Sopenharmony_ci * dsmthdat - method data (locals/args)
13162306a36Sopenharmony_ci */
13262306a36Sopenharmony_ciacpi_status
13362306a36Sopenharmony_ciacpi_ds_store_object_to_local(u8 type,
13462306a36Sopenharmony_ci			      u32 index,
13562306a36Sopenharmony_ci			      union acpi_operand_object *src_desc,
13662306a36Sopenharmony_ci			      struct acpi_walk_state *walk_state);
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ciacpi_status
13962306a36Sopenharmony_ciacpi_ds_method_data_get_entry(u16 opcode,
14062306a36Sopenharmony_ci			      u32 index,
14162306a36Sopenharmony_ci			      struct acpi_walk_state *walk_state,
14262306a36Sopenharmony_ci			      union acpi_operand_object ***node);
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_civoid acpi_ds_method_data_delete_all(struct acpi_walk_state *walk_state);
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ciu8 acpi_ds_is_method_value(union acpi_operand_object *obj_desc);
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ciacpi_status
14962306a36Sopenharmony_ciacpi_ds_method_data_get_value(u8 type,
15062306a36Sopenharmony_ci			      u32 index,
15162306a36Sopenharmony_ci			      struct acpi_walk_state *walk_state,
15262306a36Sopenharmony_ci			      union acpi_operand_object **dest_desc);
15362306a36Sopenharmony_ci
15462306a36Sopenharmony_ciacpi_status
15562306a36Sopenharmony_ciacpi_ds_method_data_init_args(union acpi_operand_object **params,
15662306a36Sopenharmony_ci			      u32 max_param_count,
15762306a36Sopenharmony_ci			      struct acpi_walk_state *walk_state);
15862306a36Sopenharmony_ci
15962306a36Sopenharmony_ciacpi_status
16062306a36Sopenharmony_ciacpi_ds_method_data_get_node(u8 type,
16162306a36Sopenharmony_ci			     u32 index,
16262306a36Sopenharmony_ci			     struct acpi_walk_state *walk_state,
16362306a36Sopenharmony_ci			     struct acpi_namespace_node **node);
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_civoid acpi_ds_method_data_init(struct acpi_walk_state *walk_state);
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ci/*
16862306a36Sopenharmony_ci * dsmethod - Parser/Interpreter interface - control method parsing
16962306a36Sopenharmony_ci */
17062306a36Sopenharmony_ciacpi_status
17162306a36Sopenharmony_ciacpi_ds_auto_serialize_method(struct acpi_namespace_node *node,
17262306a36Sopenharmony_ci			      union acpi_operand_object *obj_desc);
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_ciacpi_status
17562306a36Sopenharmony_ciacpi_ds_call_control_method(struct acpi_thread_state *thread,
17662306a36Sopenharmony_ci			    struct acpi_walk_state *walk_state,
17762306a36Sopenharmony_ci			    union acpi_parse_object *op);
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ciacpi_status
18062306a36Sopenharmony_ciacpi_ds_restart_control_method(struct acpi_walk_state *walk_state,
18162306a36Sopenharmony_ci			       union acpi_operand_object *return_desc);
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_civoid
18462306a36Sopenharmony_ciacpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
18562306a36Sopenharmony_ci				 struct acpi_walk_state *walk_state);
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ciacpi_status
18862306a36Sopenharmony_ciacpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
18962306a36Sopenharmony_ci			       union acpi_operand_object *obj_desc,
19062306a36Sopenharmony_ci			       struct acpi_walk_state *walk_state);
19162306a36Sopenharmony_ci
19262306a36Sopenharmony_ciacpi_status
19362306a36Sopenharmony_ciacpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state);
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_ci/*
19662306a36Sopenharmony_ci * dsinit
19762306a36Sopenharmony_ci */
19862306a36Sopenharmony_ciacpi_status
19962306a36Sopenharmony_ciacpi_ds_initialize_objects(u32 table_index,
20062306a36Sopenharmony_ci			   struct acpi_namespace_node *start_node);
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_ci/*
20362306a36Sopenharmony_ci * dsobject - Parser/Interpreter interface - object initialization and conversion
20462306a36Sopenharmony_ci */
20562306a36Sopenharmony_ciacpi_status
20662306a36Sopenharmony_ciacpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
20762306a36Sopenharmony_ci			      union acpi_parse_object *op,
20862306a36Sopenharmony_ci			      union acpi_operand_object **obj_desc_ptr);
20962306a36Sopenharmony_ci
21062306a36Sopenharmony_ciacpi_status
21162306a36Sopenharmony_ciacpi_ds_build_internal_buffer_obj(struct acpi_walk_state *walk_state,
21262306a36Sopenharmony_ci				  union acpi_parse_object *op,
21362306a36Sopenharmony_ci				  u32 buffer_length,
21462306a36Sopenharmony_ci				  union acpi_operand_object **obj_desc_ptr);
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ciacpi_status
21762306a36Sopenharmony_ciacpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
21862306a36Sopenharmony_ci				   union acpi_parse_object *op,
21962306a36Sopenharmony_ci				   u32 package_length,
22062306a36Sopenharmony_ci				   union acpi_operand_object **obj_desc);
22162306a36Sopenharmony_ci
22262306a36Sopenharmony_ciacpi_status
22362306a36Sopenharmony_ciacpi_ds_init_object_from_op(struct acpi_walk_state *walk_state,
22462306a36Sopenharmony_ci			    union acpi_parse_object *op,
22562306a36Sopenharmony_ci			    u16 opcode, union acpi_operand_object **obj_desc);
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_ciacpi_status
22862306a36Sopenharmony_ciacpi_ds_create_node(struct acpi_walk_state *walk_state,
22962306a36Sopenharmony_ci		    struct acpi_namespace_node *node,
23062306a36Sopenharmony_ci		    union acpi_parse_object *op);
23162306a36Sopenharmony_ci
23262306a36Sopenharmony_ci/*
23362306a36Sopenharmony_ci * dspkginit - Package object initialization
23462306a36Sopenharmony_ci */
23562306a36Sopenharmony_ciacpi_status
23662306a36Sopenharmony_ciacpi_ds_init_package_element(u8 object_type,
23762306a36Sopenharmony_ci			     union acpi_operand_object *source_object,
23862306a36Sopenharmony_ci			     union acpi_generic_state *state, void *context);
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ci/*
24162306a36Sopenharmony_ci * dsutils - Parser/Interpreter interface utility routines
24262306a36Sopenharmony_ci */
24362306a36Sopenharmony_civoid acpi_ds_clear_implicit_return(struct acpi_walk_state *walk_state);
24462306a36Sopenharmony_ci
24562306a36Sopenharmony_ciu8
24662306a36Sopenharmony_ciacpi_ds_do_implicit_return(union acpi_operand_object *return_desc,
24762306a36Sopenharmony_ci			   struct acpi_walk_state *walk_state,
24862306a36Sopenharmony_ci			   u8 add_reference);
24962306a36Sopenharmony_ci
25062306a36Sopenharmony_ciu8
25162306a36Sopenharmony_ciacpi_ds_is_result_used(union acpi_parse_object *op,
25262306a36Sopenharmony_ci		       struct acpi_walk_state *walk_state);
25362306a36Sopenharmony_ci
25462306a36Sopenharmony_civoid
25562306a36Sopenharmony_ciacpi_ds_delete_result_if_not_used(union acpi_parse_object *op,
25662306a36Sopenharmony_ci				  union acpi_operand_object *result_obj,
25762306a36Sopenharmony_ci				  struct acpi_walk_state *walk_state);
25862306a36Sopenharmony_ci
25962306a36Sopenharmony_ciacpi_status
26062306a36Sopenharmony_ciacpi_ds_create_operand(struct acpi_walk_state *walk_state,
26162306a36Sopenharmony_ci		       union acpi_parse_object *arg, u32 args_remaining);
26262306a36Sopenharmony_ci
26362306a36Sopenharmony_ciacpi_status
26462306a36Sopenharmony_ciacpi_ds_create_operands(struct acpi_walk_state *walk_state,
26562306a36Sopenharmony_ci			union acpi_parse_object *first_arg);
26662306a36Sopenharmony_ci
26762306a36Sopenharmony_ciacpi_status acpi_ds_resolve_operands(struct acpi_walk_state *walk_state);
26862306a36Sopenharmony_ci
26962306a36Sopenharmony_civoid acpi_ds_clear_operands(struct acpi_walk_state *walk_state);
27062306a36Sopenharmony_ci
27162306a36Sopenharmony_ciacpi_status acpi_ds_evaluate_name_path(struct acpi_walk_state *walk_state);
27262306a36Sopenharmony_ci
27362306a36Sopenharmony_ci/*
27462306a36Sopenharmony_ci * dswscope - Scope Stack manipulation
27562306a36Sopenharmony_ci */
27662306a36Sopenharmony_ciacpi_status
27762306a36Sopenharmony_ciacpi_ds_scope_stack_push(struct acpi_namespace_node *node,
27862306a36Sopenharmony_ci			 acpi_object_type type,
27962306a36Sopenharmony_ci			 struct acpi_walk_state *walk_state);
28062306a36Sopenharmony_ci
28162306a36Sopenharmony_ciacpi_status acpi_ds_scope_stack_pop(struct acpi_walk_state *walk_state);
28262306a36Sopenharmony_ci
28362306a36Sopenharmony_civoid acpi_ds_scope_stack_clear(struct acpi_walk_state *walk_state);
28462306a36Sopenharmony_ci
28562306a36Sopenharmony_ci/*
28662306a36Sopenharmony_ci * dswstate - parser WALK_STATE management routines
28762306a36Sopenharmony_ci */
28862306a36Sopenharmony_ciacpi_status
28962306a36Sopenharmony_ciacpi_ds_obj_stack_push(void *object, struct acpi_walk_state *walk_state);
29062306a36Sopenharmony_ci
29162306a36Sopenharmony_ciacpi_status
29262306a36Sopenharmony_ciacpi_ds_obj_stack_pop(u32 pop_count, struct acpi_walk_state *walk_state);
29362306a36Sopenharmony_ci
29462306a36Sopenharmony_cistruct acpi_walk_state * acpi_ds_create_walk_state(acpi_owner_id owner_id,
29562306a36Sopenharmony_ci						   union acpi_parse_object
29662306a36Sopenharmony_ci						   *origin,
29762306a36Sopenharmony_ci						   union acpi_operand_object
29862306a36Sopenharmony_ci						   *mth_desc,
29962306a36Sopenharmony_ci						   struct acpi_thread_state
30062306a36Sopenharmony_ci						   *thread);
30162306a36Sopenharmony_ci
30262306a36Sopenharmony_ciacpi_status
30362306a36Sopenharmony_ciacpi_ds_init_aml_walk(struct acpi_walk_state *walk_state,
30462306a36Sopenharmony_ci		      union acpi_parse_object *op,
30562306a36Sopenharmony_ci		      struct acpi_namespace_node *method_node,
30662306a36Sopenharmony_ci		      u8 * aml_start,
30762306a36Sopenharmony_ci		      u32 aml_length,
30862306a36Sopenharmony_ci		      struct acpi_evaluate_info *info, u8 pass_number);
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_civoid
31162306a36Sopenharmony_ciacpi_ds_obj_stack_pop_and_delete(u32 pop_count,
31262306a36Sopenharmony_ci				 struct acpi_walk_state *walk_state);
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_civoid acpi_ds_delete_walk_state(struct acpi_walk_state *walk_state);
31562306a36Sopenharmony_ci
31662306a36Sopenharmony_cistruct acpi_walk_state *acpi_ds_pop_walk_state(struct acpi_thread_state
31762306a36Sopenharmony_ci					       *thread);
31862306a36Sopenharmony_ci
31962306a36Sopenharmony_civoid
32062306a36Sopenharmony_ciacpi_ds_push_walk_state(struct acpi_walk_state *walk_state,
32162306a36Sopenharmony_ci			struct acpi_thread_state *thread);
32262306a36Sopenharmony_ci
32362306a36Sopenharmony_ciacpi_status acpi_ds_result_stack_clear(struct acpi_walk_state *walk_state);
32462306a36Sopenharmony_ci
32562306a36Sopenharmony_cistruct acpi_walk_state *acpi_ds_get_current_walk_state(struct acpi_thread_state
32662306a36Sopenharmony_ci						       *thread);
32762306a36Sopenharmony_ci
32862306a36Sopenharmony_ciacpi_status
32962306a36Sopenharmony_ciacpi_ds_result_pop(union acpi_operand_object **object,
33062306a36Sopenharmony_ci		   struct acpi_walk_state *walk_state);
33162306a36Sopenharmony_ci
33262306a36Sopenharmony_ciacpi_status
33362306a36Sopenharmony_ciacpi_ds_result_push(union acpi_operand_object *object,
33462306a36Sopenharmony_ci		    struct acpi_walk_state *walk_state);
33562306a36Sopenharmony_ci
33662306a36Sopenharmony_ci/*
33762306a36Sopenharmony_ci * dsdebug - parser debugging routines
33862306a36Sopenharmony_ci */
33962306a36Sopenharmony_civoid
34062306a36Sopenharmony_ciacpi_ds_dump_method_stack(acpi_status status,
34162306a36Sopenharmony_ci			  struct acpi_walk_state *walk_state,
34262306a36Sopenharmony_ci			  union acpi_parse_object *op);
34362306a36Sopenharmony_ci
34462306a36Sopenharmony_ci#endif				/* _ACDISPAT_H_ */
345