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