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 - 2021, 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