merge ROS Shell without integrated explorer part into trunk
[reactos.git] / reactos / drivers / bus / acpi / include / acdispat.h
1 /******************************************************************************
2 *
3 * Name: acdispat.h - dispatcher (parser to interpreter interface)
4 * $Revision: 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
37 ACPI_STATUS
38 acpi_ds_obj_stack_push (
39 void *object,
40 ACPI_WALK_STATE *walk_state);
41
42 ACPI_STATUS
43 acpi_ds_obj_stack_pop (
44 u32 pop_count,
45 ACPI_WALK_STATE *walk_state);
46
47 void *
48 acpi_ds_obj_stack_get_value (
49 u32 index,
50 ACPI_WALK_STATE *walk_state);
51
52 ACPI_STATUS
53 acpi_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
60 ACPI_STATUS
61 acpi_ds_get_field_unit_arguments (
62 ACPI_OPERAND_OBJECT *obj_desc);
63
64 ACPI_STATUS
65 acpi_ds_get_region_arguments (
66 ACPI_OPERAND_OBJECT *rgn_desc);
67
68
69 /* dsctrl - Parser/Interpreter interface, control stack routines */
70
71
72 ACPI_STATUS
73 acpi_ds_exec_begin_control_op (
74 ACPI_WALK_STATE *walk_state,
75 ACPI_PARSE_OBJECT *op);
76
77 ACPI_STATUS
78 acpi_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
86 ACPI_STATUS
87 acpi_ds_get_predicate_value (
88 ACPI_WALK_STATE *walk_state,
89 ACPI_PARSE_OBJECT *op,
90 u32 has_result_obj);
91
92 ACPI_STATUS
93 acpi_ds_exec_begin_op (
94 u16 opcode,
95 ACPI_PARSE_OBJECT *op,
96 ACPI_WALK_STATE *walk_state,
97 ACPI_PARSE_OBJECT **out_op);
98
99 ACPI_STATUS
100 acpi_ds_exec_end_op (
101 ACPI_WALK_STATE *state,
102 ACPI_PARSE_OBJECT *op);
103
104
105 /* dsfield - Parser/Interpreter interface for AML fields */
106
107
108 ACPI_STATUS
109 acpi_ds_create_field (
110 ACPI_PARSE_OBJECT *op,
111 ACPI_NAMESPACE_NODE *region_node,
112 ACPI_WALK_STATE *walk_state);
113
114 ACPI_STATUS
115 acpi_ds_create_bank_field (
116 ACPI_PARSE_OBJECT *op,
117 ACPI_NAMESPACE_NODE *region_node,
118 ACPI_WALK_STATE *walk_state);
119
120 ACPI_STATUS
121 acpi_ds_create_index_field (
122 ACPI_PARSE_OBJECT *op,
123 ACPI_HANDLE region_node,
124 ACPI_WALK_STATE *walk_state);
125
126
127 /* dsload - Parser/Interpreter interface, namespace load callbacks */
128
129 ACPI_STATUS
130 acpi_ds_load1_begin_op (
131 u16 opcode,
132 ACPI_PARSE_OBJECT *op,
133 ACPI_WALK_STATE *walk_state,
134 ACPI_PARSE_OBJECT **out_op);
135
136 ACPI_STATUS
137 acpi_ds_load1_end_op (
138 ACPI_WALK_STATE *walk_state,
139 ACPI_PARSE_OBJECT *op);
140
141 ACPI_STATUS
142 acpi_ds_load2_begin_op (
143 u16 opcode,
144 ACPI_PARSE_OBJECT *op,
145 ACPI_WALK_STATE *walk_state,
146 ACPI_PARSE_OBJECT **out_op);
147
148 ACPI_STATUS
149 acpi_ds_load2_end_op (
150 ACPI_WALK_STATE *state,
151 ACPI_PARSE_OBJECT *op);
152
153 ACPI_STATUS
154 acpi_ds_load3_begin_op (
155 u16 opcode,
156 ACPI_PARSE_OBJECT *op,
157 ACPI_WALK_STATE *walk_state,
158 ACPI_PARSE_OBJECT **out_op);
159
160 ACPI_STATUS
161 acpi_ds_load3_end_op (
162 ACPI_WALK_STATE *state,
163 ACPI_PARSE_OBJECT *op);
164
165
166 /* dsmthdat - method data (locals/args) */
167
168
169 ACPI_STATUS
170 acpi_ds_store_object_to_local (
171 u16 opcode,
172 u32 index,
173 ACPI_OPERAND_OBJECT *src_desc,
174 ACPI_WALK_STATE *walk_state);
175
176 ACPI_STATUS
177 acpi_ds_method_data_get_entry (
178 u16 opcode,
179 u32 index,
180 ACPI_WALK_STATE *walk_state,
181 ACPI_OPERAND_OBJECT ***node);
182
183 ACPI_STATUS
184 acpi_ds_method_data_delete_all (
185 ACPI_WALK_STATE *walk_state);
186
187 u8
188 acpi_ds_is_method_value (
189 ACPI_OPERAND_OBJECT *obj_desc);
190
191 OBJECT_TYPE_INTERNAL
192 acpi_ds_method_data_get_type (
193 u16 opcode,
194 u32 index,
195 ACPI_WALK_STATE *walk_state);
196
197 ACPI_STATUS
198 acpi_ds_method_data_get_value (
199 u16 opcode,
200 u32 index,
201 ACPI_WALK_STATE *walk_state,
202 ACPI_OPERAND_OBJECT **dest_desc);
203
204 ACPI_STATUS
205 acpi_ds_method_data_delete_value (
206 u16 opcode,
207 u32 index,
208 ACPI_WALK_STATE *walk_state);
209
210 ACPI_STATUS
211 acpi_ds_method_data_init_args (
212 ACPI_OPERAND_OBJECT **params,
213 u32 max_param_count,
214 ACPI_WALK_STATE *walk_state);
215
216 ACPI_NAMESPACE_NODE *
217 acpi_ds_method_data_get_node (
218 u16 opcode,
219 u32 index,
220 ACPI_WALK_STATE *walk_state);
221
222 ACPI_STATUS
223 acpi_ds_method_data_init (
224 ACPI_WALK_STATE *walk_state);
225
226 ACPI_STATUS
227 acpi_ds_method_data_set_entry (
228 u16 opcode,
229 u32 index,
230 ACPI_OPERAND_OBJECT *object,
231 ACPI_WALK_STATE *walk_state);
232
233
234 /* dsmethod - Parser/Interpreter interface - control method parsing */
235
236 ACPI_STATUS
237 acpi_ds_parse_method (
238 ACPI_HANDLE obj_handle);
239
240 ACPI_STATUS
241 acpi_ds_call_control_method (
242 ACPI_WALK_LIST *walk_list,
243 ACPI_WALK_STATE *walk_state,
244 ACPI_PARSE_OBJECT *op);
245
246 ACPI_STATUS
247 acpi_ds_restart_control_method (
248 ACPI_WALK_STATE *walk_state,
249 ACPI_OPERAND_OBJECT *return_desc);
250
251 ACPI_STATUS
252 acpi_ds_terminate_control_method (
253 ACPI_WALK_STATE *walk_state);
254
255 ACPI_STATUS
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);
260
261
262 /* dsobj - Parser/Interpreter interface - object initialization and conversion */
263
264 ACPI_STATUS
265 acpi_ds_init_one_object (
266 ACPI_HANDLE obj_handle,
267 u32 level,
268 void *context,
269 void **return_value);
270
271 ACPI_STATUS
272 acpi_ds_initialize_objects (
273 ACPI_TABLE_DESC *table_desc,
274 ACPI_NAMESPACE_NODE *start_node);
275
276 ACPI_STATUS
277 acpi_ds_build_internal_package_obj (
278 ACPI_WALK_STATE *walk_state,
279 ACPI_PARSE_OBJECT *op,
280 ACPI_OPERAND_OBJECT **obj_desc);
281
282 ACPI_STATUS
283 acpi_ds_build_internal_object (
284 ACPI_WALK_STATE *walk_state,
285 ACPI_PARSE_OBJECT *op,
286 ACPI_OPERAND_OBJECT **obj_desc_ptr);
287
288 ACPI_STATUS
289 acpi_ds_init_object_from_op (
290 ACPI_WALK_STATE *walk_state,
291 ACPI_PARSE_OBJECT *op,
292 u16 opcode,
293 ACPI_OPERAND_OBJECT **obj_desc);
294
295 ACPI_STATUS
296 acpi_ds_create_node (
297 ACPI_WALK_STATE *walk_state,
298 ACPI_NAMESPACE_NODE *node,
299 ACPI_PARSE_OBJECT *op);
300
301
302 /* dsregn - Parser/Interpreter interface - Op Region parsing */
303
304 ACPI_STATUS
305 acpi_ds_eval_field_unit_operands (
306 ACPI_WALK_STATE *walk_state,
307 ACPI_PARSE_OBJECT *op);
308
309 ACPI_STATUS
310 acpi_ds_eval_region_operands (
311 ACPI_WALK_STATE *walk_state,
312 ACPI_PARSE_OBJECT *op);
313
314 ACPI_STATUS
315 acpi_ds_initialize_region (
316 ACPI_HANDLE obj_handle);
317
318
319 /* dsutils - Parser/Interpreter interface utility routines */
320
321 u8
322 acpi_ds_is_result_used (
323 ACPI_PARSE_OBJECT *op,
324 ACPI_WALK_STATE *walk_state);
325
326 void
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);
331
332 ACPI_STATUS
333 acpi_ds_create_operand (
334 ACPI_WALK_STATE *walk_state,
335 ACPI_PARSE_OBJECT *arg,
336 u32 args_remaining);
337
338 ACPI_STATUS
339 acpi_ds_create_operands (
340 ACPI_WALK_STATE *walk_state,
341 ACPI_PARSE_OBJECT *first_arg);
342
343 ACPI_STATUS
344 acpi_ds_resolve_operands (
345 ACPI_WALK_STATE *walk_state);
346
347 OBJECT_TYPE_INTERNAL
348 acpi_ds_map_opcode_to_data_type (
349 u16 opcode,
350 u32 *out_flags);
351
352 OBJECT_TYPE_INTERNAL
353 acpi_ds_map_named_opcode_to_data_type (
354 u16 opcode);
355
356
357 /*
358 * dswscope - Scope Stack manipulation
359 */
360
361 ACPI_STATUS
362 acpi_ds_scope_stack_push (
363 ACPI_NAMESPACE_NODE *node,
364 OBJECT_TYPE_INTERNAL type,
365 ACPI_WALK_STATE *walk_state);
366
367
368 ACPI_STATUS
369 acpi_ds_scope_stack_pop (
370 ACPI_WALK_STATE *walk_state);
371
372 void
373 acpi_ds_scope_stack_clear (
374 ACPI_WALK_STATE *walk_state);
375
376
377 /* Acpi_dswstate - parser WALK_STATE management routines */
378
379 ACPI_WALK_STATE *
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);
385
386 ACPI_STATUS
387 acpi_ds_obj_stack_delete_all (
388 ACPI_WALK_STATE *walk_state);
389
390 ACPI_STATUS
391 acpi_ds_obj_stack_pop_and_delete (
392 u32 pop_count,
393 ACPI_WALK_STATE *walk_state);
394
395 void
396 acpi_ds_delete_walk_state (
397 ACPI_WALK_STATE *walk_state);
398
399 ACPI_WALK_STATE *
400 acpi_ds_pop_walk_state (
401 ACPI_WALK_LIST *walk_list);
402
403 ACPI_STATUS
404 acpi_ds_result_stack_pop (
405 ACPI_WALK_STATE *walk_state);
406
407 ACPI_STATUS
408 acpi_ds_result_stack_push (
409 ACPI_WALK_STATE *walk_state);
410
411 ACPI_STATUS
412 acpi_ds_result_stack_clear (
413 ACPI_WALK_STATE *walk_state);
414
415 ACPI_WALK_STATE *
416 acpi_ds_get_current_walk_state (
417 ACPI_WALK_LIST *walk_list);
418
419 void
420 acpi_ds_delete_walk_state_cache (
421 void);
422
423 ACPI_STATUS
424 acpi_ds_result_insert (
425 void *object,
426 u32 index,
427 ACPI_WALK_STATE *walk_state);
428
429 ACPI_STATUS
430 acpi_ds_result_remove (
431 ACPI_OPERAND_OBJECT **object,
432 u32 index,
433 ACPI_WALK_STATE *walk_state);
434
435 ACPI_STATUS
436 acpi_ds_result_pop (
437 ACPI_OPERAND_OBJECT **object,
438 ACPI_WALK_STATE *walk_state);
439
440 ACPI_STATUS
441 acpi_ds_result_push (
442 ACPI_OPERAND_OBJECT *object,
443 ACPI_WALK_STATE *walk_state);
444
445 ACPI_STATUS
446 acpi_ds_result_pop_from_bottom (
447 ACPI_OPERAND_OBJECT **object,
448 ACPI_WALK_STATE *walk_state);
449
450 #endif /* _ACDISPAT_H_ */