1/****************************************************************************** 2 * 3 * Name: acdispat.h - dispatcher (parser to interpreter interface) 4 * $Revision: 1.1.1.1 $ 5 * 6 *****************************************************************************/ 7 8/* 9 * Copyright (C) 2000, 2001 R. Byron Moore 10 * 11 * This program is free software; you can redistribute it and/or modify 12 * it under the terms of the GNU General Public License as published by 13 * the Free Software Foundation; either version 2 of the License, or 14 * (at your option) any later version. 15 * 16 * This program is distributed in the hope that it will be useful, 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 * GNU General Public License for more details. 20 * 21 * You should have received a copy of the GNU General Public License 22 * along with this program; if not, write to the Free Software 23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 24 */ 25 26 27#ifndef _ACDISPAT_H_ 28#define _ACDISPAT_H_ 29 30 31#define NAMEOF_LOCAL_NTE "__L0" 32#define NAMEOF_ARG_NTE "__A0" 33 34 35/* Common interfaces */ 36 37acpi_status 38acpi_ds_obj_stack_push ( 39 void *object, 40 acpi_walk_state *walk_state); 41 42acpi_status 43acpi_ds_obj_stack_pop ( 44 u32 pop_count, 45 acpi_walk_state *walk_state); 46 47void * 48acpi_ds_obj_stack_get_value ( 49 u32 index, 50 acpi_walk_state *walk_state); 51 52acpi_status 53acpi_ds_obj_stack_pop_object ( 54 acpi_operand_object **object, 55 acpi_walk_state *walk_state); 56 57 58/* dsopcode - support for late evaluation */ 59 60acpi_status 61acpi_ds_get_buffer_field_arguments ( 62 acpi_operand_object *obj_desc); 63 64acpi_status 65acpi_ds_get_region_arguments ( 66 acpi_operand_object *rgn_desc); 67 68 69/* dsctrl - Parser/Interpreter interface, control stack routines */ 70 71 72acpi_status 73acpi_ds_exec_begin_control_op ( 74 acpi_walk_state *walk_state, 75 acpi_parse_object *op); 76 77acpi_status 78acpi_ds_exec_end_control_op ( 79 acpi_walk_state *walk_state, 80 acpi_parse_object *op); 81 82 83/* dsexec - Parser/Interpreter interface, method execution callbacks */ 84 85 86acpi_status 87acpi_ds_get_predicate_value ( 88 acpi_walk_state *walk_state, 89 u32 has_result_obj); 90 91acpi_status 92acpi_ds_exec_begin_op ( 93 acpi_walk_state *walk_state, 94 acpi_parse_object **out_op); 95 96acpi_status 97acpi_ds_exec_end_op ( 98 acpi_walk_state *state); 99 100 101/* dsfield - Parser/Interpreter interface for AML fields */ 102 103acpi_status 104acpi_ds_create_field ( 105 acpi_parse_object *op, 106 acpi_namespace_node *region_node, 107 acpi_walk_state *walk_state); 108 109acpi_status 110acpi_ds_create_bank_field ( 111 acpi_parse_object *op, 112 acpi_namespace_node *region_node, 113 acpi_walk_state *walk_state); 114 115acpi_status 116acpi_ds_create_index_field ( 117 acpi_parse_object *op, 118 acpi_namespace_node *region_node, 119 acpi_walk_state *walk_state); 120 121acpi_status 122acpi_ds_create_buffer_field ( 123 acpi_parse_object *op, 124 acpi_walk_state *walk_state); 125 126 127/* dsload - Parser/Interpreter interface, namespace load callbacks */ 128 129acpi_status 130acpi_ds_load1_begin_op ( 131 acpi_walk_state *walk_state, 132 acpi_parse_object **out_op); 133 134acpi_status 135acpi_ds_load1_end_op ( 136 acpi_walk_state *walk_state); 137 138acpi_status 139acpi_ds_load2_begin_op ( 140 acpi_walk_state *walk_state, 141 acpi_parse_object **out_op); 142 143acpi_status 144acpi_ds_load2_end_op ( 145 acpi_walk_state *walk_state); 146 147acpi_status 148acpi_ds_init_callbacks ( 149 acpi_walk_state *walk_state, 150 u32 pass_number); 151 152 153/* dsmthdat - method data (locals/args) */ 154 155 156acpi_status 157acpi_ds_store_object_to_local ( 158 u16 opcode, 159 u32 index, 160 acpi_operand_object *src_desc, 161 acpi_walk_state *walk_state); 162 163acpi_status 164acpi_ds_method_data_get_entry ( 165 u16 opcode, 166 u32 index, 167 acpi_walk_state *walk_state, 168 acpi_operand_object ***node); 169 170acpi_status 171acpi_ds_method_data_delete_all ( 172 acpi_walk_state *walk_state); 173 174u8 175acpi_ds_is_method_value ( 176 acpi_operand_object *obj_desc); 177 178acpi_object_type8 179acpi_ds_method_data_get_type ( 180 u16 opcode, 181 u32 index, 182 acpi_walk_state *walk_state); 183 184acpi_status 185acpi_ds_method_data_get_value ( 186 u16 opcode, 187 u32 index, 188 acpi_walk_state *walk_state, 189 acpi_operand_object **dest_desc); 190 191acpi_status 192acpi_ds_method_data_delete_value ( 193 u16 opcode, 194 u32 index, 195 acpi_walk_state *walk_state); 196 197acpi_status 198acpi_ds_method_data_init_args ( 199 acpi_operand_object **params, 200 u32 max_param_count, 201 acpi_walk_state *walk_state); 202 203acpi_namespace_node * 204acpi_ds_method_data_get_node ( 205 u16 opcode, 206 u32 index, 207 acpi_walk_state *walk_state); 208 209acpi_status 210acpi_ds_method_data_init ( 211 acpi_walk_state *walk_state); 212 213acpi_status 214acpi_ds_method_data_set_entry ( 215 u16 opcode, 216 u32 index, 217 acpi_operand_object *object, 218 acpi_walk_state *walk_state); 219 220 221/* dsmethod - Parser/Interpreter interface - control method parsing */ 222 223acpi_status 224acpi_ds_parse_method ( 225 acpi_handle obj_handle); 226 227acpi_status 228acpi_ds_call_control_method ( 229 acpi_walk_list *walk_list, 230 acpi_walk_state *walk_state, 231 acpi_parse_object *op); 232 233acpi_status 234acpi_ds_restart_control_method ( 235 acpi_walk_state *walk_state, 236 acpi_operand_object *return_desc); 237 238acpi_status 239acpi_ds_terminate_control_method ( 240 acpi_walk_state *walk_state); 241 242acpi_status 243acpi_ds_begin_method_execution ( 244 acpi_namespace_node *method_node, 245 acpi_operand_object *obj_desc, 246 acpi_namespace_node *calling_method_node); 247 248 249/* dsobj - Parser/Interpreter interface - object initialization and conversion */ 250 251acpi_status 252acpi_ds_init_one_object ( 253 acpi_handle obj_handle, 254 u32 level, 255 void *context, 256 void **return_value); 257 258acpi_status 259acpi_ds_initialize_objects ( 260 acpi_table_desc *table_desc, 261 acpi_namespace_node *start_node); 262 263acpi_status 264acpi_ds_build_internal_package_obj ( 265 acpi_walk_state *walk_state, 266 acpi_parse_object *op, 267 acpi_operand_object **obj_desc); 268 269acpi_status 270acpi_ds_build_internal_object ( 271 acpi_walk_state *walk_state, 272 acpi_parse_object *op, 273 acpi_operand_object **obj_desc_ptr); 274 275acpi_status 276acpi_ds_init_object_from_op ( 277 acpi_walk_state *walk_state, 278 acpi_parse_object *op, 279 u16 opcode, 280 acpi_operand_object **obj_desc); 281 282acpi_status 283acpi_ds_create_node ( 284 acpi_walk_state *walk_state, 285 acpi_namespace_node *node, 286 acpi_parse_object *op); 287 288 289/* dsregn - Parser/Interpreter interface - Op Region parsing */ 290 291acpi_status 292acpi_ds_eval_buffer_field_operands ( 293 acpi_walk_state *walk_state, 294 acpi_parse_object *op); 295 296acpi_status 297acpi_ds_eval_region_operands ( 298 acpi_walk_state *walk_state, 299 acpi_parse_object *op); 300 301acpi_status 302acpi_ds_initialize_region ( 303 acpi_handle obj_handle); 304 305 306/* dsutils - Parser/Interpreter interface utility routines */ 307 308u8 309acpi_ds_is_result_used ( 310 acpi_parse_object *op, 311 acpi_walk_state *walk_state); 312 313void 314acpi_ds_delete_result_if_not_used ( 315 acpi_parse_object *op, 316 acpi_operand_object *result_obj, 317 acpi_walk_state *walk_state); 318 319acpi_status 320acpi_ds_create_operand ( 321 acpi_walk_state *walk_state, 322 acpi_parse_object *arg, 323 u32 args_remaining); 324 325acpi_status 326acpi_ds_create_operands ( 327 acpi_walk_state *walk_state, 328 acpi_parse_object *first_arg); 329 330acpi_status 331acpi_ds_resolve_operands ( 332 acpi_walk_state *walk_state); 333 334acpi_object_type8 335acpi_ds_map_opcode_to_data_type ( 336 u16 opcode, 337 u32 *out_flags); 338 339acpi_object_type8 340acpi_ds_map_named_opcode_to_data_type ( 341 u16 opcode); 342 343 344/* 345 * dswscope - Scope Stack manipulation 346 */ 347 348acpi_status 349acpi_ds_scope_stack_push ( 350 acpi_namespace_node *node, 351 acpi_object_type8 type, 352 acpi_walk_state *walk_state); 353 354 355acpi_status 356acpi_ds_scope_stack_pop ( 357 acpi_walk_state *walk_state); 358 359void 360acpi_ds_scope_stack_clear ( 361 acpi_walk_state *walk_state); 362 363 364/* dswstate - parser WALK_STATE management routines */ 365 366acpi_walk_state * 367acpi_ds_create_walk_state ( 368 acpi_owner_id owner_id, 369 acpi_parse_object *origin, 370 acpi_operand_object *mth_desc, 371 acpi_walk_list *walk_list); 372 373acpi_status 374acpi_ds_init_aml_walk ( 375 acpi_walk_state *walk_state, 376 acpi_parse_object *op, 377 acpi_namespace_node *method_node, 378 u8 *aml_start, 379 u32 aml_length, 380 acpi_operand_object **params, 381 acpi_operand_object **return_obj_desc, 382 u32 pass_number); 383 384acpi_status 385acpi_ds_obj_stack_delete_all ( 386 acpi_walk_state *walk_state); 387 388acpi_status 389acpi_ds_obj_stack_pop_and_delete ( 390 u32 pop_count, 391 acpi_walk_state *walk_state); 392 393void 394acpi_ds_delete_walk_state ( 395 acpi_walk_state *walk_state); 396 397acpi_walk_state * 398acpi_ds_pop_walk_state ( 399 acpi_walk_list *walk_list); 400 401void 402acpi_ds_push_walk_state ( 403 acpi_walk_state *walk_state, 404 acpi_walk_list *walk_list); 405 406acpi_status 407acpi_ds_result_stack_pop ( 408 acpi_walk_state *walk_state); 409 410acpi_status 411acpi_ds_result_stack_push ( 412 acpi_walk_state *walk_state); 413 414acpi_status 415acpi_ds_result_stack_clear ( 416 acpi_walk_state *walk_state); 417 418acpi_walk_state * 419acpi_ds_get_current_walk_state ( 420 acpi_walk_list *walk_list); 421 422void 423acpi_ds_delete_walk_state_cache ( 424 void); 425 426acpi_status 427acpi_ds_result_insert ( 428 void *object, 429 u32 index, 430 acpi_walk_state *walk_state); 431 432acpi_status 433acpi_ds_result_remove ( 434 acpi_operand_object **object, 435 u32 index, 436 acpi_walk_state *walk_state); 437 438acpi_status 439acpi_ds_result_pop ( 440 acpi_operand_object **object, 441 acpi_walk_state *walk_state); 442 443acpi_status 444acpi_ds_result_push ( 445 acpi_operand_object *object, 446 acpi_walk_state *walk_state); 447 448acpi_status 449acpi_ds_result_pop_from_bottom ( 450 acpi_operand_object **object, 451 acpi_walk_state *walk_state); 452 453#endif /* _ACDISPAT_H_ */ 454