acdispat.h (9989B)
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 - 2022, 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 */ 19acpi_status 20acpi_ds_get_buffer_field_arguments(union acpi_operand_object *obj_desc); 21 22acpi_status 23acpi_ds_get_bank_field_arguments(union acpi_operand_object *obj_desc); 24 25acpi_status acpi_ds_get_region_arguments(union acpi_operand_object *rgn_desc); 26 27acpi_status acpi_ds_get_buffer_arguments(union acpi_operand_object *obj_desc); 28 29acpi_status acpi_ds_get_package_arguments(union acpi_operand_object *obj_desc); 30 31/* 32 * dscontrol - support for execution control opcodes 33 */ 34acpi_status 35acpi_ds_exec_begin_control_op(struct acpi_walk_state *walk_state, 36 union acpi_parse_object *op); 37 38acpi_status 39acpi_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 */ 45acpi_status 46acpi_ds_eval_buffer_field_operands(struct acpi_walk_state *walk_state, 47 union acpi_parse_object *op); 48 49acpi_status 50acpi_ds_eval_region_operands(struct acpi_walk_state *walk_state, 51 union acpi_parse_object *op); 52 53acpi_status 54acpi_ds_eval_table_region_operands(struct acpi_walk_state *walk_state, 55 union acpi_parse_object *op); 56 57acpi_status 58acpi_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 62acpi_status 63acpi_ds_eval_bank_field_operands(struct acpi_walk_state *walk_state, 64 union acpi_parse_object *op); 65 66acpi_status acpi_ds_initialize_region(acpi_handle obj_handle); 67 68/* 69 * dsexec - Parser/Interpreter interface, method execution callbacks 70 */ 71acpi_status 72acpi_ds_get_predicate_value(struct acpi_walk_state *walk_state, 73 union acpi_operand_object *result_obj); 74 75acpi_status 76acpi_ds_exec_begin_op(struct acpi_walk_state *walk_state, 77 union acpi_parse_object **out_op); 78 79acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *state); 80 81/* 82 * dsfield - Parser/Interpreter interface for AML fields 83 */ 84acpi_status 85acpi_ds_create_field(union acpi_parse_object *op, 86 struct acpi_namespace_node *region_node, 87 struct acpi_walk_state *walk_state); 88 89acpi_status 90acpi_ds_create_bank_field(union acpi_parse_object *op, 91 struct acpi_namespace_node *region_node, 92 struct acpi_walk_state *walk_state); 93 94acpi_status 95acpi_ds_create_index_field(union acpi_parse_object *op, 96 struct acpi_namespace_node *region_node, 97 struct acpi_walk_state *walk_state); 98 99acpi_status 100acpi_ds_create_buffer_field(union acpi_parse_object *op, 101 struct acpi_walk_state *walk_state); 102 103acpi_status 104acpi_ds_init_field_objects(union acpi_parse_object *op, 105 struct acpi_walk_state *walk_state); 106 107/* 108 * dsload - Parser/Interpreter interface 109 */ 110acpi_status 111acpi_ds_init_callbacks(struct acpi_walk_state *walk_state, u32 pass_number); 112 113/* dsload - pass 1 namespace load callbacks */ 114 115acpi_status 116acpi_ds_load1_begin_op(struct acpi_walk_state *walk_state, 117 union acpi_parse_object **out_op); 118 119acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state); 120 121/* dsload - pass 2 namespace load callbacks */ 122 123acpi_status 124acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state, 125 union acpi_parse_object **out_op); 126 127acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state); 128 129/* 130 * dsmthdat - method data (locals/args) 131 */ 132acpi_status 133acpi_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 138acpi_status 139acpi_ds_method_data_get_entry(u16 opcode, 140 u32 index, 141 struct acpi_walk_state *walk_state, 142 union acpi_operand_object ***node); 143 144void acpi_ds_method_data_delete_all(struct acpi_walk_state *walk_state); 145 146u8 acpi_ds_is_method_value(union acpi_operand_object *obj_desc); 147 148acpi_status 149acpi_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 154acpi_status 155acpi_ds_method_data_init_args(union acpi_operand_object **params, 156 u32 max_param_count, 157 struct acpi_walk_state *walk_state); 158 159acpi_status 160acpi_ds_method_data_get_node(u8 type, 161 u32 index, 162 struct acpi_walk_state *walk_state, 163 struct acpi_namespace_node **node); 164 165void acpi_ds_method_data_init(struct acpi_walk_state *walk_state); 166 167/* 168 * dsmethod - Parser/Interpreter interface - control method parsing 169 */ 170acpi_status 171acpi_ds_auto_serialize_method(struct acpi_namespace_node *node, 172 union acpi_operand_object *obj_desc); 173 174acpi_status 175acpi_ds_call_control_method(struct acpi_thread_state *thread, 176 struct acpi_walk_state *walk_state, 177 union acpi_parse_object *op); 178 179acpi_status 180acpi_ds_restart_control_method(struct acpi_walk_state *walk_state, 181 union acpi_operand_object *return_desc); 182 183void 184acpi_ds_terminate_control_method(union acpi_operand_object *method_desc, 185 struct acpi_walk_state *walk_state); 186 187acpi_status 188acpi_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 192acpi_status 193acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state); 194 195/* 196 * dsinit 197 */ 198acpi_status 199acpi_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 */ 205acpi_status 206acpi_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 210acpi_status 211acpi_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 216acpi_status 217acpi_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 222acpi_status 223acpi_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 227acpi_status 228acpi_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 */ 235acpi_status 236acpi_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 */ 243void acpi_ds_clear_implicit_return(struct acpi_walk_state *walk_state); 244 245u8 246acpi_ds_do_implicit_return(union acpi_operand_object *return_desc, 247 struct acpi_walk_state *walk_state, 248 u8 add_reference); 249 250u8 251acpi_ds_is_result_used(union acpi_parse_object *op, 252 struct acpi_walk_state *walk_state); 253 254void 255acpi_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 259acpi_status 260acpi_ds_create_operand(struct acpi_walk_state *walk_state, 261 union acpi_parse_object *arg, u32 args_remaining); 262 263acpi_status 264acpi_ds_create_operands(struct acpi_walk_state *walk_state, 265 union acpi_parse_object *first_arg); 266 267acpi_status acpi_ds_resolve_operands(struct acpi_walk_state *walk_state); 268 269void acpi_ds_clear_operands(struct acpi_walk_state *walk_state); 270 271acpi_status acpi_ds_evaluate_name_path(struct acpi_walk_state *walk_state); 272 273/* 274 * dswscope - Scope Stack manipulation 275 */ 276acpi_status 277acpi_ds_scope_stack_push(struct acpi_namespace_node *node, 278 acpi_object_type type, 279 struct acpi_walk_state *walk_state); 280 281acpi_status acpi_ds_scope_stack_pop(struct acpi_walk_state *walk_state); 282 283void acpi_ds_scope_stack_clear(struct acpi_walk_state *walk_state); 284 285/* 286 * dswstate - parser WALK_STATE management routines 287 */ 288acpi_status 289acpi_ds_obj_stack_push(void *object, struct acpi_walk_state *walk_state); 290 291acpi_status 292acpi_ds_obj_stack_pop(u32 pop_count, struct acpi_walk_state *walk_state); 293 294struct 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 302acpi_status 303acpi_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 310void 311acpi_ds_obj_stack_pop_and_delete(u32 pop_count, 312 struct acpi_walk_state *walk_state); 313 314void acpi_ds_delete_walk_state(struct acpi_walk_state *walk_state); 315 316struct acpi_walk_state *acpi_ds_pop_walk_state(struct acpi_thread_state 317 *thread); 318 319void 320acpi_ds_push_walk_state(struct acpi_walk_state *walk_state, 321 struct acpi_thread_state *thread); 322 323acpi_status acpi_ds_result_stack_clear(struct acpi_walk_state *walk_state); 324 325struct acpi_walk_state *acpi_ds_get_current_walk_state(struct acpi_thread_state 326 *thread); 327 328acpi_status 329acpi_ds_result_pop(union acpi_operand_object **object, 330 struct acpi_walk_state *walk_state); 331 332acpi_status 333acpi_ds_result_push(union acpi_operand_object *object, 334 struct acpi_walk_state *walk_state); 335 336/* 337 * dsdebug - parser debugging routines 338 */ 339void 340acpi_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_ */