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