1/****************************************************************************** 2 * 3 * Name: acdispat.h - dispatcher (parser to interpreter interface) 4 * 5 *****************************************************************************/ 6 7/* 8 * Copyright (C) 2000 - 2010, Intel Corp. 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions, and the following disclaimer, 16 * without modification. 17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18 * substantially similar to the "NO WARRANTY" disclaimer below 19 * ("Disclaimer") and any redistribution must be conditioned upon 20 * including a substantially similar Disclaimer requirement for further 21 * binary redistribution. 22 * 3. Neither the names of the above-listed copyright holders nor the names 23 * of any contributors may be used to endorse or promote products derived 24 * from this software without specific prior written permission. 25 * 26 * Alternatively, this software may be distributed under the terms of the 27 * GNU General Public License ("GPL") version 2 as published by the Free 28 * Software Foundation. 29 * 30 * NO WARRANTY 31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41 * POSSIBILITY OF SUCH DAMAGES. 42 */ 43 44#ifndef _ACDISPAT_H_ 45#define _ACDISPAT_H_ 46 47#define NAMEOF_LOCAL_NTE "__L0" 48#define NAMEOF_ARG_NTE "__A0" 49 50/* 51 * dsopcode - support for late evaluation 52 */ 53acpi_status 54acpi_ds_get_buffer_field_arguments(union acpi_operand_object *obj_desc); 55 56acpi_status 57acpi_ds_get_bank_field_arguments(union acpi_operand_object *obj_desc); 58 59acpi_status acpi_ds_get_region_arguments(union acpi_operand_object *rgn_desc); 60 61acpi_status acpi_ds_get_buffer_arguments(union acpi_operand_object *obj_desc); 62 63acpi_status acpi_ds_get_package_arguments(union acpi_operand_object *obj_desc); 64 65acpi_status 66acpi_ds_eval_buffer_field_operands(struct acpi_walk_state *walk_state, 67 union acpi_parse_object *op); 68 69acpi_status 70acpi_ds_eval_region_operands(struct acpi_walk_state *walk_state, 71 union acpi_parse_object *op); 72 73acpi_status 74acpi_ds_eval_table_region_operands(struct acpi_walk_state *walk_state, 75 union acpi_parse_object *op); 76 77acpi_status 78acpi_ds_eval_data_object_operands(struct acpi_walk_state *walk_state, 79 union acpi_parse_object *op, 80 union acpi_operand_object *obj_desc); 81 82acpi_status 83acpi_ds_eval_bank_field_operands(struct acpi_walk_state *walk_state, 84 union acpi_parse_object *op); 85 86acpi_status acpi_ds_initialize_region(acpi_handle obj_handle); 87 88/* 89 * dsctrl - Parser/Interpreter interface, control stack routines 90 */ 91acpi_status 92acpi_ds_exec_begin_control_op(struct acpi_walk_state *walk_state, 93 union acpi_parse_object *op); 94 95acpi_status 96acpi_ds_exec_end_control_op(struct acpi_walk_state *walk_state, 97 union acpi_parse_object *op); 98 99/* 100 * dsexec - Parser/Interpreter interface, method execution callbacks 101 */ 102acpi_status 103acpi_ds_get_predicate_value(struct acpi_walk_state *walk_state, 104 union acpi_operand_object *result_obj); 105 106acpi_status 107acpi_ds_exec_begin_op(struct acpi_walk_state *walk_state, 108 union acpi_parse_object **out_op); 109 110acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *state); 111 112/* 113 * dsfield - Parser/Interpreter interface for AML fields 114 */ 115acpi_status 116acpi_ds_create_field(union acpi_parse_object *op, 117 struct acpi_namespace_node *region_node, 118 struct acpi_walk_state *walk_state); 119 120acpi_status 121acpi_ds_create_bank_field(union acpi_parse_object *op, 122 struct acpi_namespace_node *region_node, 123 struct acpi_walk_state *walk_state); 124 125acpi_status 126acpi_ds_create_index_field(union acpi_parse_object *op, 127 struct acpi_namespace_node *region_node, 128 struct acpi_walk_state *walk_state); 129 130acpi_status 131acpi_ds_create_buffer_field(union acpi_parse_object *op, 132 struct acpi_walk_state *walk_state); 133 134acpi_status 135acpi_ds_init_field_objects(union acpi_parse_object *op, 136 struct acpi_walk_state *walk_state); 137 138/* 139 * dsload - Parser/Interpreter interface, namespace load callbacks 140 */ 141acpi_status 142acpi_ds_load1_begin_op(struct acpi_walk_state *walk_state, 143 union acpi_parse_object **out_op); 144 145acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state); 146 147acpi_status 148acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state, 149 union acpi_parse_object **out_op); 150 151acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state); 152 153acpi_status 154acpi_ds_init_callbacks(struct acpi_walk_state *walk_state, u32 pass_number); 155 156/* 157 * dsmthdat - method data (locals/args) 158 */ 159acpi_status 160acpi_ds_store_object_to_local(u8 type, 161 u32 index, 162 union acpi_operand_object *src_desc, 163 struct acpi_walk_state *walk_state); 164 165acpi_status 166acpi_ds_method_data_get_entry(u16 opcode, 167 u32 index, 168 struct acpi_walk_state *walk_state, 169 union acpi_operand_object ***node); 170 171void acpi_ds_method_data_delete_all(struct acpi_walk_state *walk_state); 172 173u8 acpi_ds_is_method_value(union acpi_operand_object *obj_desc); 174 175acpi_status 176acpi_ds_method_data_get_value(u8 type, 177 u32 index, 178 struct acpi_walk_state *walk_state, 179 union acpi_operand_object **dest_desc); 180 181acpi_status 182acpi_ds_method_data_init_args(union acpi_operand_object **params, 183 u32 max_param_count, 184 struct acpi_walk_state *walk_state); 185 186acpi_status 187acpi_ds_method_data_get_node(u8 type, 188 u32 index, 189 struct acpi_walk_state *walk_state, 190 struct acpi_namespace_node **node); 191 192void acpi_ds_method_data_init(struct acpi_walk_state *walk_state); 193 194/* 195 * dsmethod - Parser/Interpreter interface - control method parsing 196 */ 197acpi_status acpi_ds_parse_method(struct acpi_namespace_node *node); 198 199acpi_status 200acpi_ds_call_control_method(struct acpi_thread_state *thread, 201 struct acpi_walk_state *walk_state, 202 union acpi_parse_object *op); 203 204acpi_status 205acpi_ds_restart_control_method(struct acpi_walk_state *walk_state, 206 union acpi_operand_object *return_desc); 207 208void 209acpi_ds_terminate_control_method(union acpi_operand_object *method_desc, 210 struct acpi_walk_state *walk_state); 211 212acpi_status 213acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node, 214 union acpi_operand_object *obj_desc, 215 struct acpi_walk_state *walk_state); 216 217acpi_status 218acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state); 219 220/* 221 * dsinit 222 */ 223acpi_status 224acpi_ds_initialize_objects(u32 table_index, 225 struct acpi_namespace_node *start_node); 226 227/* 228 * dsobject - Parser/Interpreter interface - object initialization and conversion 229 */ 230acpi_status 231acpi_ds_build_internal_buffer_obj(struct acpi_walk_state *walk_state, 232 union acpi_parse_object *op, 233 u32 buffer_length, 234 union acpi_operand_object **obj_desc_ptr); 235 236acpi_status 237acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state, 238 union acpi_parse_object *op, 239 u32 package_length, 240 union acpi_operand_object **obj_desc); 241 242acpi_status 243acpi_ds_init_object_from_op(struct acpi_walk_state *walk_state, 244 union acpi_parse_object *op, 245 u16 opcode, union acpi_operand_object **obj_desc); 246 247acpi_status 248acpi_ds_create_node(struct acpi_walk_state *walk_state, 249 struct acpi_namespace_node *node, 250 union acpi_parse_object *op); 251 252/* 253 * dsutils - Parser/Interpreter interface utility routines 254 */ 255void acpi_ds_clear_implicit_return(struct acpi_walk_state *walk_state); 256 257u8 258acpi_ds_do_implicit_return(union acpi_operand_object *return_desc, 259 struct acpi_walk_state *walk_state, 260 u8 add_reference); 261 262u8 263acpi_ds_is_result_used(union acpi_parse_object *op, 264 struct acpi_walk_state *walk_state); 265 266void 267acpi_ds_delete_result_if_not_used(union acpi_parse_object *op, 268 union acpi_operand_object *result_obj, 269 struct acpi_walk_state *walk_state); 270 271acpi_status 272acpi_ds_create_operand(struct acpi_walk_state *walk_state, 273 union acpi_parse_object *arg, u32 args_remaining); 274 275acpi_status 276acpi_ds_create_operands(struct acpi_walk_state *walk_state, 277 union acpi_parse_object *first_arg); 278 279acpi_status acpi_ds_resolve_operands(struct acpi_walk_state *walk_state); 280 281void acpi_ds_clear_operands(struct acpi_walk_state *walk_state); 282 283acpi_status acpi_ds_evaluate_name_path(struct acpi_walk_state *walk_state); 284 285/* 286 * dswscope - Scope Stack manipulation 287 */ 288acpi_status 289acpi_ds_scope_stack_push(struct acpi_namespace_node *node, 290 acpi_object_type type, 291 struct acpi_walk_state *walk_state); 292 293acpi_status acpi_ds_scope_stack_pop(struct acpi_walk_state *walk_state); 294 295void acpi_ds_scope_stack_clear(struct acpi_walk_state *walk_state); 296 297/* 298 * dswstate - parser WALK_STATE management routines 299 */ 300acpi_status 301acpi_ds_obj_stack_push(void *object, struct acpi_walk_state *walk_state); 302 303acpi_status 304acpi_ds_obj_stack_pop(u32 pop_count, struct acpi_walk_state *walk_state); 305 306struct acpi_walk_state *acpi_ds_create_walk_state(acpi_owner_id owner_id, union acpi_parse_object 307 *origin, union acpi_operand_object 308 *mth_desc, struct acpi_thread_state 309 *thread); 310 311acpi_status 312acpi_ds_init_aml_walk(struct acpi_walk_state *walk_state, 313 union acpi_parse_object *op, 314 struct acpi_namespace_node *method_node, 315 u8 * aml_start, 316 u32 aml_length, 317 struct acpi_evaluate_info *info, u8 pass_number); 318 319void 320acpi_ds_obj_stack_pop_and_delete(u32 pop_count, 321 struct acpi_walk_state *walk_state); 322 323void acpi_ds_delete_walk_state(struct acpi_walk_state *walk_state); 324 325struct acpi_walk_state *acpi_ds_pop_walk_state(struct acpi_thread_state 326 *thread); 327 328void 329acpi_ds_push_walk_state(struct acpi_walk_state *walk_state, 330 struct acpi_thread_state *thread); 331 332acpi_status acpi_ds_result_stack_clear(struct acpi_walk_state *walk_state); 333 334struct acpi_walk_state *acpi_ds_get_current_walk_state(struct acpi_thread_state 335 *thread); 336 337acpi_status 338acpi_ds_result_pop(union acpi_operand_object **object, 339 struct acpi_walk_state *walk_state); 340 341acpi_status 342acpi_ds_result_push(union acpi_operand_object *object, 343 struct acpi_walk_state *walk_state); 344 345#endif /* _ACDISPAT_H_ */ 346