1 /******************************************************************************
3 * Name: acdispat.h - dispatcher (parser to interpreter interface)
6 *****************************************************************************/
9 * Copyright (C) 2000, 2001 R. Byron Moore
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.
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.
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
31 #define NAMEOF_LOCAL_NTE "__L0"
32 #define NAMEOF_ARG_NTE "__A0"
35 /* Common interfaces */
38 acpi_ds_obj_stack_push (
40 ACPI_WALK_STATE
*walk_state
);
43 acpi_ds_obj_stack_pop (
45 ACPI_WALK_STATE
*walk_state
);
48 acpi_ds_obj_stack_get_value (
50 ACPI_WALK_STATE
*walk_state
);
53 acpi_ds_obj_stack_pop_object (
54 ACPI_OPERAND_OBJECT
**object
,
55 ACPI_WALK_STATE
*walk_state
);
58 /* dsopcode - support for late evaluation */
61 acpi_ds_get_field_unit_arguments (
62 ACPI_OPERAND_OBJECT
*obj_desc
);
65 acpi_ds_get_region_arguments (
66 ACPI_OPERAND_OBJECT
*rgn_desc
);
69 /* dsctrl - Parser/Interpreter interface, control stack routines */
73 acpi_ds_exec_begin_control_op (
74 ACPI_WALK_STATE
*walk_state
,
75 ACPI_PARSE_OBJECT
*op
);
78 acpi_ds_exec_end_control_op (
79 ACPI_WALK_STATE
*walk_state
,
80 ACPI_PARSE_OBJECT
*op
);
83 /* dsexec - Parser/Interpreter interface, method execution callbacks */
87 acpi_ds_get_predicate_value (
88 ACPI_WALK_STATE
*walk_state
,
89 ACPI_PARSE_OBJECT
*op
,
90 NATIVE_UINT has_result_obj
);
93 acpi_ds_exec_begin_op (
95 ACPI_PARSE_OBJECT
*op
,
96 ACPI_WALK_STATE
*walk_state
,
97 ACPI_PARSE_OBJECT
**out_op
);
100 acpi_ds_exec_end_op (
101 ACPI_WALK_STATE
*state
,
102 ACPI_PARSE_OBJECT
*op
);
105 /* dsfield - Parser/Interpreter interface for AML fields */
109 acpi_ds_create_field (
110 ACPI_PARSE_OBJECT
*op
,
111 ACPI_NAMESPACE_NODE
*region_node
,
112 ACPI_WALK_STATE
*walk_state
);
115 acpi_ds_create_bank_field (
116 ACPI_PARSE_OBJECT
*op
,
117 ACPI_NAMESPACE_NODE
*region_node
,
118 ACPI_WALK_STATE
*walk_state
);
121 acpi_ds_create_index_field (
122 ACPI_PARSE_OBJECT
*op
,
123 ACPI_HANDLE region_node
,
124 ACPI_WALK_STATE
*walk_state
);
127 /* dsload - Parser/Interpreter interface, namespace load callbacks */
130 acpi_ds_load1_begin_op (
132 ACPI_PARSE_OBJECT
*op
,
133 ACPI_WALK_STATE
*walk_state
,
134 ACPI_PARSE_OBJECT
**out_op
);
137 acpi_ds_load1_end_op (
138 ACPI_WALK_STATE
*walk_state
,
139 ACPI_PARSE_OBJECT
*op
);
142 acpi_ds_load2_begin_op (
144 ACPI_PARSE_OBJECT
*op
,
145 ACPI_WALK_STATE
*walk_state
,
146 ACPI_PARSE_OBJECT
**out_op
);
149 acpi_ds_load2_end_op (
150 ACPI_WALK_STATE
*state
,
151 ACPI_PARSE_OBJECT
*op
);
154 acpi_ds_load3_begin_op (
156 ACPI_PARSE_OBJECT
*op
,
157 ACPI_WALK_STATE
*walk_state
,
158 ACPI_PARSE_OBJECT
**out_op
);
161 acpi_ds_load3_end_op (
162 ACPI_WALK_STATE
*state
,
163 ACPI_PARSE_OBJECT
*op
);
166 /* dsmthdat - method data (locals/args) */
170 acpi_ds_store_object_to_local (
173 ACPI_OPERAND_OBJECT
*src_desc
,
174 ACPI_WALK_STATE
*walk_state
);
177 acpi_ds_method_data_get_entry (
180 ACPI_WALK_STATE
*walk_state
,
181 ACPI_OPERAND_OBJECT
***node
);
184 acpi_ds_method_data_delete_all (
185 ACPI_WALK_STATE
*walk_state
);
188 acpi_ds_is_method_value (
189 ACPI_OPERAND_OBJECT
*obj_desc
);
192 acpi_ds_method_data_get_type (
195 ACPI_WALK_STATE
*walk_state
);
198 acpi_ds_method_data_get_value (
201 ACPI_WALK_STATE
*walk_state
,
202 ACPI_OPERAND_OBJECT
**dest_desc
);
205 acpi_ds_method_data_delete_value (
208 ACPI_WALK_STATE
*walk_state
);
211 acpi_ds_method_data_init_args (
212 ACPI_OPERAND_OBJECT
**params
,
214 ACPI_WALK_STATE
*walk_state
);
216 ACPI_NAMESPACE_NODE
*
217 acpi_ds_method_data_get_node (
220 ACPI_WALK_STATE
*walk_state
);
223 acpi_ds_method_data_init (
224 ACPI_WALK_STATE
*walk_state
);
227 acpi_ds_method_data_set_entry (
230 ACPI_OPERAND_OBJECT
*object
,
231 ACPI_WALK_STATE
*walk_state
);
234 /* dsmethod - Parser/Interpreter interface - control method parsing */
237 acpi_ds_parse_method (
238 ACPI_HANDLE obj_handle
);
241 acpi_ds_call_control_method (
242 ACPI_WALK_LIST
*walk_list
,
243 ACPI_WALK_STATE
*walk_state
,
244 ACPI_PARSE_OBJECT
*op
);
247 acpi_ds_restart_control_method (
248 ACPI_WALK_STATE
*walk_state
,
249 ACPI_OPERAND_OBJECT
*return_desc
);
252 acpi_ds_terminate_control_method (
253 ACPI_WALK_STATE
*walk_state
);
256 acpi_ds_begin_method_execution (
257 ACPI_NAMESPACE_NODE
*method_node
,
258 ACPI_OPERAND_OBJECT
*obj_desc
,
259 ACPI_NAMESPACE_NODE
*calling_method_node
);
262 /* dsobj - Parser/Interpreter interface - object initialization and conversion */
265 acpi_ds_init_one_object (
266 ACPI_HANDLE obj_handle
,
269 void **return_value
);
272 acpi_ds_initialize_objects (
273 ACPI_TABLE_DESC
*table_desc
,
274 ACPI_NAMESPACE_NODE
*start_node
);
277 acpi_ds_build_internal_package_obj (
278 ACPI_WALK_STATE
*walk_state
,
279 ACPI_PARSE_OBJECT
*op
,
280 ACPI_OPERAND_OBJECT
**obj_desc
);
283 acpi_ds_build_internal_object (
284 ACPI_WALK_STATE
*walk_state
,
285 ACPI_PARSE_OBJECT
*op
,
286 ACPI_OPERAND_OBJECT
**obj_desc_ptr
);
289 acpi_ds_init_object_from_op (
290 ACPI_WALK_STATE
*walk_state
,
291 ACPI_PARSE_OBJECT
*op
,
293 ACPI_OPERAND_OBJECT
**obj_desc
);
296 acpi_ds_create_node (
297 ACPI_WALK_STATE
*walk_state
,
298 ACPI_NAMESPACE_NODE
*node
,
299 ACPI_PARSE_OBJECT
*op
);
302 /* dsregn - Parser/Interpreter interface - Op Region parsing */
305 acpi_ds_eval_field_unit_operands (
306 ACPI_WALK_STATE
*walk_state
,
307 ACPI_PARSE_OBJECT
*op
);
310 acpi_ds_eval_region_operands (
311 ACPI_WALK_STATE
*walk_state
,
312 ACPI_PARSE_OBJECT
*op
);
315 acpi_ds_initialize_region (
316 ACPI_HANDLE obj_handle
);
319 /* dsutils - Parser/Interpreter interface utility routines */
322 acpi_ds_is_result_used (
323 ACPI_PARSE_OBJECT
*op
,
324 ACPI_WALK_STATE
*walk_state
);
327 acpi_ds_delete_result_if_not_used (
328 ACPI_PARSE_OBJECT
*op
,
329 ACPI_OPERAND_OBJECT
*result_obj
,
330 ACPI_WALK_STATE
*walk_state
);
333 acpi_ds_create_operand (
334 ACPI_WALK_STATE
*walk_state
,
335 ACPI_PARSE_OBJECT
*arg
,
339 acpi_ds_create_operands (
340 ACPI_WALK_STATE
*walk_state
,
341 ACPI_PARSE_OBJECT
*first_arg
);
344 acpi_ds_resolve_operands (
345 ACPI_WALK_STATE
*walk_state
);
348 acpi_ds_map_opcode_to_data_type (
353 acpi_ds_map_named_opcode_to_data_type (
358 * dswscope - Scope Stack manipulation
362 acpi_ds_scope_stack_push (
363 ACPI_NAMESPACE_NODE
*node
,
364 OBJECT_TYPE_INTERNAL type
,
365 ACPI_WALK_STATE
*walk_state
);
369 acpi_ds_scope_stack_pop (
370 ACPI_WALK_STATE
*walk_state
);
373 acpi_ds_scope_stack_clear (
374 ACPI_WALK_STATE
*walk_state
);
377 /* Acpi_dswstate - parser WALK_STATE management routines */
380 acpi_ds_create_walk_state (
381 ACPI_OWNER_ID owner_id
,
382 ACPI_PARSE_OBJECT
*origin
,
383 ACPI_OPERAND_OBJECT
*mth_desc
,
384 ACPI_WALK_LIST
*walk_list
);
387 acpi_ds_obj_stack_delete_all (
388 ACPI_WALK_STATE
*walk_state
);
391 acpi_ds_obj_stack_pop_and_delete (
393 ACPI_WALK_STATE
*walk_state
);
396 acpi_ds_delete_walk_state (
397 ACPI_WALK_STATE
*walk_state
);
400 acpi_ds_pop_walk_state (
401 ACPI_WALK_LIST
*walk_list
);
404 acpi_ds_result_stack_pop (
405 ACPI_WALK_STATE
*walk_state
);
408 acpi_ds_result_stack_push (
409 ACPI_WALK_STATE
*walk_state
);
412 acpi_ds_result_stack_clear (
413 ACPI_WALK_STATE
*walk_state
);
416 acpi_ds_get_current_walk_state (
417 ACPI_WALK_LIST
*walk_list
);
420 acpi_ds_delete_walk_state_cache (
424 acpi_ds_result_insert (
427 ACPI_WALK_STATE
*walk_state
);
430 acpi_ds_result_remove (
431 ACPI_OPERAND_OBJECT
**object
,
433 ACPI_WALK_STATE
*walk_state
);
437 ACPI_OPERAND_OBJECT
**object
,
438 ACPI_WALK_STATE
*walk_state
);
441 acpi_ds_result_push (
442 ACPI_OPERAND_OBJECT
*object
,
443 ACPI_WALK_STATE
*walk_state
);
446 acpi_ds_result_pop_from_bottom (
447 ACPI_OPERAND_OBJECT
**object
,
448 ACPI_WALK_STATE
*walk_state
);
450 #endif /* _ACDISPAT_H_ */