:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / drivers / bus / acpi / include / acinterp.h
1 /******************************************************************************
2  *
3  * Name: acinterp.h - Interpreter subcomponent prototypes and defines
4  *       $Revision$
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 #ifndef __ACINTERP_H__
27 #define __ACINTERP_H__
28
29
30 #define WALK_OPERANDS       &(walk_state->operands [walk_state->num_operands -1])
31
32
33 /* Interpreter constants */
34
35 #define AML_END_OF_BLOCK            -1
36 #define PUSH_PKG_LENGTH             1
37 #define DO_NOT_PUSH_PKG_LENGTH      0
38
39
40 #define STACK_TOP                   0
41 #define STACK_BOTTOM                (u32) -1
42
43 /* Constants for global "When_to_parse_methods" */
44
45 #define METHOD_PARSE_AT_INIT        0x0
46 #define METHOD_PARSE_JUST_IN_TIME   0x1
47 #define METHOD_DELETE_AT_COMPLETION 0x2
48
49
50 ACPI_STATUS
51 acpi_aml_resolve_operands (
52         u16                     opcode,
53         ACPI_OPERAND_OBJECT     **stack_ptr,
54         ACPI_WALK_STATE         *walk_state);
55
56
57 /*
58  * amxface - External interpreter interfaces
59  */
60
61 ACPI_STATUS
62 acpi_aml_load_table (
63         ACPI_TABLE_TYPE         table_id);
64
65 ACPI_STATUS
66 acpi_aml_execute_method (
67         ACPI_NAMESPACE_NODE     *method_node,
68         ACPI_OPERAND_OBJECT     **params,
69         ACPI_OPERAND_OBJECT     **return_obj_desc);
70
71
72 /*
73  * amconvrt - object conversion
74  */
75
76 ACPI_STATUS
77 acpi_aml_convert_to_integer (
78         ACPI_OPERAND_OBJECT     **obj_desc,
79         ACPI_WALK_STATE         *walk_state);
80
81 ACPI_STATUS
82 acpi_aml_convert_to_buffer (
83         ACPI_OPERAND_OBJECT     **obj_desc,
84         ACPI_WALK_STATE         *walk_state);
85
86 ACPI_STATUS
87 acpi_aml_convert_to_string (
88         ACPI_OPERAND_OBJECT     **obj_desc,
89         ACPI_WALK_STATE         *walk_state);
90
91 ACPI_STATUS
92 acpi_aml_convert_to_target_type (
93         OBJECT_TYPE_INTERNAL    destination_type,
94         ACPI_OPERAND_OBJECT     **obj_desc,
95         ACPI_WALK_STATE         *walk_state);
96
97
98 /*
99  * amfield - ACPI AML (p-code) execution - field manipulation
100  */
101
102 ACPI_STATUS
103 acpi_aml_read_field (
104         ACPI_OPERAND_OBJECT     *obj_desc,
105         void                    *buffer,
106         u32                     buffer_length,
107         u32                     byte_length,
108         u32                     datum_length,
109         u32                     bit_granularity,
110         u32                     byte_granularity);
111
112 ACPI_STATUS
113 acpi_aml_write_field (
114         ACPI_OPERAND_OBJECT     *obj_desc,
115         void                    *buffer,
116         u32                     buffer_length,
117         u32                     byte_length,
118         u32                     datum_length,
119         u32                     bit_granularity,
120         u32                     byte_granularity);
121
122 ACPI_STATUS
123 acpi_aml_setup_field (
124         ACPI_OPERAND_OBJECT     *obj_desc,
125         ACPI_OPERAND_OBJECT     *rgn_desc,
126         u32                     field_bit_width);
127
128 ACPI_STATUS
129 acpi_aml_read_field_data (
130         ACPI_OPERAND_OBJECT     *obj_desc,
131         u32                     field_byte_offset,
132         u32                     field_bit_width,
133         u32                     *value);
134
135 ACPI_STATUS
136 acpi_aml_access_named_field (
137         u32                     mode,
138         ACPI_HANDLE             named_field,
139         void                    *buffer,
140         u32                     length);
141
142 /*
143  * ammisc - ACPI AML (p-code) execution - specific opcodes
144  */
145
146 ACPI_STATUS
147 acpi_aml_exec_create_field (
148         u8                      *aml_ptr,
149         u32                     aml_length,
150         ACPI_NAMESPACE_NODE     *node,
151         ACPI_WALK_STATE         *walk_state);
152
153 ACPI_STATUS
154 acpi_aml_exec_reconfiguration (
155         u16                     opcode,
156         ACPI_WALK_STATE         *walk_state);
157
158 ACPI_STATUS
159 acpi_aml_exec_fatal (
160         ACPI_WALK_STATE         *walk_state);
161
162 ACPI_STATUS
163 acpi_aml_exec_index (
164         ACPI_WALK_STATE         *walk_state,
165         ACPI_OPERAND_OBJECT     **return_desc);
166
167 ACPI_STATUS
168 acpi_aml_exec_match (
169         ACPI_WALK_STATE         *walk_state,
170         ACPI_OPERAND_OBJECT     **return_desc);
171
172 ACPI_STATUS
173 acpi_aml_exec_create_mutex (
174         ACPI_WALK_STATE         *walk_state);
175
176 ACPI_STATUS
177 acpi_aml_exec_create_processor (
178         ACPI_PARSE_OBJECT       *op,
179         ACPI_HANDLE             processor_nTE);
180
181 ACPI_STATUS
182 acpi_aml_exec_create_power_resource (
183         ACPI_PARSE_OBJECT       *op,
184         ACPI_HANDLE             processor_nTE);
185
186 ACPI_STATUS
187 acpi_aml_exec_create_region (
188         u8                      *aml_ptr,
189         u32                     acpi_aml_length,
190         u8                      region_space,
191         ACPI_WALK_STATE         *walk_state);
192
193 ACPI_STATUS
194 acpi_aml_exec_create_event (
195         ACPI_WALK_STATE         *walk_state);
196
197 ACPI_STATUS
198 acpi_aml_exec_create_alias (
199         ACPI_WALK_STATE         *walk_state);
200
201 ACPI_STATUS
202 acpi_aml_exec_create_method (
203         u8                      *aml_ptr,
204         u32                     acpi_aml_length,
205         u32                     method_flags,
206         ACPI_HANDLE             method);
207
208
209 /*
210  * ammutex - mutex support
211  */
212
213 ACPI_STATUS
214 acpi_aml_acquire_mutex (
215         ACPI_OPERAND_OBJECT     *time_desc,
216         ACPI_OPERAND_OBJECT     *obj_desc,
217         ACPI_WALK_STATE         *walk_state);
218
219 ACPI_STATUS
220 acpi_aml_release_mutex (
221         ACPI_OPERAND_OBJECT     *obj_desc,
222         ACPI_WALK_STATE         *walk_state);
223
224 ACPI_STATUS
225 acpi_aml_release_all_mutexes (
226         ACPI_OPERAND_OBJECT     *mutex_list);
227
228 void
229 acpi_aml_unlink_mutex (
230         ACPI_OPERAND_OBJECT     *obj_desc);
231
232
233 /*
234  * amprep - ACPI AML (p-code) execution - prep utilities
235  */
236
237 ACPI_STATUS
238 acpi_aml_prep_def_field_value (
239         ACPI_NAMESPACE_NODE     *node,
240         ACPI_HANDLE             region,
241         u8                      field_flags,
242         u8                      field_attribute,
243         u32                     field_position,
244         u32                     field_length);
245
246 ACPI_STATUS
247 acpi_aml_prep_bank_field_value (
248         ACPI_NAMESPACE_NODE     *node,
249         ACPI_HANDLE             region,
250         ACPI_HANDLE             bank_reg,
251         u32                     bank_val,
252         u8                      field_flags,
253         u8                      field_attribute,
254         u32                     field_position,
255         u32                     field_length);
256
257 ACPI_STATUS
258 acpi_aml_prep_index_field_value (
259         ACPI_NAMESPACE_NODE     *node,
260         ACPI_HANDLE             index_reg,
261         ACPI_HANDLE             data_reg,
262         u8                      field_flags,
263         u8                      field_attribute,
264         u32                     field_position,
265         u32                     field_length);
266
267
268 /*
269  * amsystem - Interface to OS services
270  */
271
272 ACPI_STATUS
273 acpi_aml_system_do_notify_op (
274         ACPI_OPERAND_OBJECT     *value,
275         ACPI_OPERAND_OBJECT     *obj_desc);
276
277 void
278 acpi_aml_system_do_suspend(
279         u32                     time);
280
281 void
282 acpi_aml_system_do_stall (
283         u32                     time);
284
285 ACPI_STATUS
286 acpi_aml_system_acquire_mutex(
287         ACPI_OPERAND_OBJECT     *time,
288         ACPI_OPERAND_OBJECT     *obj_desc);
289
290 ACPI_STATUS
291 acpi_aml_system_release_mutex(
292         ACPI_OPERAND_OBJECT     *obj_desc);
293
294 ACPI_STATUS
295 acpi_aml_system_signal_event(
296         ACPI_OPERAND_OBJECT     *obj_desc);
297
298 ACPI_STATUS
299 acpi_aml_system_wait_event(
300         ACPI_OPERAND_OBJECT     *time,
301         ACPI_OPERAND_OBJECT     *obj_desc);
302
303 ACPI_STATUS
304 acpi_aml_system_reset_event(
305         ACPI_OPERAND_OBJECT     *obj_desc);
306
307 ACPI_STATUS
308 acpi_aml_system_wait_semaphore (
309         ACPI_HANDLE             semaphore,
310         u32                     timeout);
311
312
313 /*
314  * ammonadic - ACPI AML (p-code) execution, monadic operators
315  */
316
317 ACPI_STATUS
318 acpi_aml_exec_monadic1 (
319         u16                     opcode,
320         ACPI_WALK_STATE         *walk_state);
321
322 ACPI_STATUS
323 acpi_aml_exec_monadic2 (
324         u16                     opcode,
325         ACPI_WALK_STATE         *walk_state,
326         ACPI_OPERAND_OBJECT     **return_desc);
327
328 ACPI_STATUS
329 acpi_aml_exec_monadic2_r (
330         u16                     opcode,
331         ACPI_WALK_STATE         *walk_state,
332         ACPI_OPERAND_OBJECT     **return_desc);
333
334
335 /*
336  * amdyadic - ACPI AML (p-code) execution, dyadic operators
337  */
338
339 ACPI_STATUS
340 acpi_aml_exec_dyadic1 (
341         u16                     opcode,
342         ACPI_WALK_STATE         *walk_state);
343
344 ACPI_STATUS
345 acpi_aml_exec_dyadic2 (
346         u16                     opcode,
347         ACPI_WALK_STATE         *walk_state,
348         ACPI_OPERAND_OBJECT     **return_desc);
349
350 ACPI_STATUS
351 acpi_aml_exec_dyadic2_r (
352         u16                     opcode,
353         ACPI_WALK_STATE         *walk_state,
354         ACPI_OPERAND_OBJECT     **return_desc);
355
356 ACPI_STATUS
357 acpi_aml_exec_dyadic2_s (
358         u16                     opcode,
359         ACPI_WALK_STATE         *walk_state,
360         ACPI_OPERAND_OBJECT     **return_desc);
361
362
363 /*
364  * amresolv  - Object resolution and get value functions
365  */
366
367 ACPI_STATUS
368 acpi_aml_resolve_to_value (
369         ACPI_OPERAND_OBJECT     **stack_ptr,
370         ACPI_WALK_STATE         *walk_state);
371
372 ACPI_STATUS
373 acpi_aml_resolve_node_to_value (
374         ACPI_NAMESPACE_NODE     **stack_ptr,
375         ACPI_WALK_STATE         *walk_state);
376
377 ACPI_STATUS
378 acpi_aml_resolve_object_to_value (
379         ACPI_OPERAND_OBJECT     **stack_ptr,
380         ACPI_WALK_STATE         *walk_state);
381
382 ACPI_STATUS
383 acpi_aml_get_field_unit_value (
384         ACPI_OPERAND_OBJECT     *field_desc,
385         ACPI_OPERAND_OBJECT     *result_desc);
386
387
388 /*
389  * amdump - Scanner debug output routines
390  */
391
392 void
393 acpi_aml_show_hex_value (
394         u32                     byte_count,
395         u8                      *aml_ptr,
396         u32                     lead_space);
397
398
399 ACPI_STATUS
400 acpi_aml_dump_operand (
401         ACPI_OPERAND_OBJECT     *entry_desc);
402
403 void
404 acpi_aml_dump_operands (
405         ACPI_OPERAND_OBJECT     **operands,
406         OPERATING_MODE          interpreter_mode,
407         NATIVE_CHAR             *ident,
408         u32                     num_levels,
409         NATIVE_CHAR             *note,
410         NATIVE_CHAR             *module_name,
411         u32                     line_number);
412
413 void
414 acpi_aml_dump_object_descriptor (
415         ACPI_OPERAND_OBJECT     *object,
416         u32                     flags);
417
418
419 void
420 acpi_aml_dump_node (
421         ACPI_NAMESPACE_NODE     *node,
422         u32                     flags);
423
424
425 /*
426  * amnames - interpreter/scanner name load/execute
427  */
428
429 NATIVE_CHAR *
430 acpi_aml_allocate_name_string (
431         u32                     prefix_count,
432         u32                     num_name_segs);
433
434 u32
435 acpi_aml_good_char (
436         u32                     character);
437
438 ACPI_STATUS
439 acpi_aml_exec_name_segment (
440         u8                      **in_aml_address,
441         NATIVE_CHAR             *name_string);
442
443 ACPI_STATUS
444 acpi_aml_get_name_string (
445         OBJECT_TYPE_INTERNAL    data_type,
446         u8                      *in_aml_address,
447         NATIVE_CHAR             **out_name_string,
448         u32                     *out_name_length);
449
450 ACPI_STATUS
451 acpi_aml_do_name (
452         ACPI_OBJECT_TYPE        data_type,
453         OPERATING_MODE          load_exec_mode);
454
455
456 /*
457  * amstore - Object store support
458  */
459
460 ACPI_STATUS
461 acpi_aml_exec_store (
462         ACPI_OPERAND_OBJECT     *val_desc,
463         ACPI_OPERAND_OBJECT     *dest_desc,
464         ACPI_WALK_STATE         *walk_state);
465
466 ACPI_STATUS
467 acpi_aml_store_object_to_index (
468         ACPI_OPERAND_OBJECT     *val_desc,
469         ACPI_OPERAND_OBJECT     *dest_desc,
470         ACPI_WALK_STATE         *walk_state);
471
472 ACPI_STATUS
473 acpi_aml_store_object_to_node (
474         ACPI_OPERAND_OBJECT     *source_desc,
475         ACPI_NAMESPACE_NODE     *node,
476         ACPI_WALK_STATE         *walk_state);
477
478 ACPI_STATUS
479 acpi_aml_store_object_to_object (
480         ACPI_OPERAND_OBJECT     *source_desc,
481         ACPI_OPERAND_OBJECT     *dest_desc,
482         ACPI_WALK_STATE         *walk_state);
483
484
485 /*
486  *
487  */
488
489 ACPI_STATUS
490 acpi_aml_resolve_object (
491         ACPI_OPERAND_OBJECT     **source_desc_ptr,
492         OBJECT_TYPE_INTERNAL    target_type,
493         ACPI_WALK_STATE         *walk_state);
494
495 ACPI_STATUS
496 acpi_aml_store_object (
497         ACPI_OPERAND_OBJECT     *source_desc,
498         OBJECT_TYPE_INTERNAL    target_type,
499         ACPI_OPERAND_OBJECT     **target_desc_ptr,
500         ACPI_WALK_STATE         *walk_state);
501
502
503 /*
504  * amcopy - object copy
505  */
506
507 ACPI_STATUS
508 acpi_aml_copy_buffer_to_buffer (
509         ACPI_OPERAND_OBJECT     *source_desc,
510         ACPI_OPERAND_OBJECT     *target_desc);
511
512 ACPI_STATUS
513 acpi_aml_copy_string_to_string (
514         ACPI_OPERAND_OBJECT     *source_desc,
515         ACPI_OPERAND_OBJECT     *target_desc);
516
517 ACPI_STATUS
518 acpi_aml_copy_integer_to_index_field (
519         ACPI_OPERAND_OBJECT     *source_desc,
520         ACPI_OPERAND_OBJECT     *target_desc);
521
522 ACPI_STATUS
523 acpi_aml_copy_integer_to_bank_field (
524         ACPI_OPERAND_OBJECT     *source_desc,
525         ACPI_OPERAND_OBJECT     *target_desc);
526
527 ACPI_STATUS
528 acpi_aml_copy_data_to_named_field (
529         ACPI_OPERAND_OBJECT     *source_desc,
530         ACPI_NAMESPACE_NODE     *node);
531
532 ACPI_STATUS
533 acpi_aml_copy_integer_to_field_unit (
534         ACPI_OPERAND_OBJECT     *source_desc,
535         ACPI_OPERAND_OBJECT     *target_desc);
536
537 /*
538  * amutils - interpreter/scanner utilities
539  */
540
541 ACPI_STATUS
542 acpi_aml_enter_interpreter (
543         void);
544
545 void
546 acpi_aml_exit_interpreter (
547         void);
548
549 void
550 acpi_aml_truncate_for32bit_table (
551         ACPI_OPERAND_OBJECT     *obj_desc,
552         ACPI_WALK_STATE         *walk_state);
553
554 u8
555 acpi_aml_validate_object_type (
556         ACPI_OBJECT_TYPE        type);
557
558 u8
559 acpi_aml_acquire_global_lock (
560         u32                     rule);
561
562 ACPI_STATUS
563 acpi_aml_release_global_lock (
564         u8                      locked);
565
566 u32
567 acpi_aml_digits_needed (
568         ACPI_INTEGER            value,
569         u32                     base);
570
571 ACPI_STATUS
572 acpi_aml_eisa_id_to_string (
573         u32                     numeric_id,
574         NATIVE_CHAR             *out_string);
575
576 ACPI_STATUS
577 acpi_aml_unsigned_integer_to_string (
578         ACPI_INTEGER            value,
579         NATIVE_CHAR             *out_string);
580
581
582 /*
583  * amregion - default Op_region handlers
584  */
585
586 ACPI_STATUS
587 acpi_aml_system_memory_space_handler (
588         u32                     function,
589         ACPI_PHYSICAL_ADDRESS   address,
590         u32                     bit_width,
591         u32                     *value,
592         void                    *handler_context,
593         void                    *region_context);
594
595 ACPI_STATUS
596 acpi_aml_system_io_space_handler (
597         u32                     function,
598         ACPI_PHYSICAL_ADDRESS   address,
599         u32                     bit_width,
600         u32                     *value,
601         void                    *handler_context,
602         void                    *region_context);
603
604 ACPI_STATUS
605 acpi_aml_pci_config_space_handler (
606         u32                     function,
607         ACPI_PHYSICAL_ADDRESS   address,
608         u32                     bit_width,
609         u32                     *value,
610         void                    *handler_context,
611         void                    *region_context);
612
613 ACPI_STATUS
614 acpi_aml_embedded_controller_space_handler (
615         u32                     function,
616         ACPI_PHYSICAL_ADDRESS   address,
617         u32                     bit_width,
618         u32                     *value,
619         void                    *handler_context,
620         void                    *region_context);
621
622 ACPI_STATUS
623 acpi_aml_sm_bus_space_handler (
624         u32                     function,
625         ACPI_PHYSICAL_ADDRESS   address,
626         u32                     bit_width,
627         u32                     *value,
628         void                    *handler_context,
629         void                    *region_context);
630
631
632 #endif /* __INTERP_H__ */