:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / drivers / bus / acpi / include / accommon.h
1 /******************************************************************************
2  *
3  * Name: accommon.h -- prototypes for the common (subsystem-wide) procedures
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 _ACCOMMON_H
27 #define _ACCOMMON_H
28
29
30 typedef
31 ACPI_STATUS (*ACPI_PKG_CALLBACK) (
32         u8                      object_type,
33         ACPI_OPERAND_OBJECT     *source_object,
34         ACPI_GENERIC_STATE      *state,
35         void                    *context);
36
37
38 ACPI_STATUS
39 acpi_cm_walk_package_tree (
40         ACPI_OPERAND_OBJECT     *source_object,
41         void                    *target_object,
42         ACPI_PKG_CALLBACK       walk_callback,
43         void                    *context);
44
45
46 typedef struct acpi_pkg_info
47 {
48         u8                      *free_space;
49         u32                     length;
50         u32                     object_space;
51         u32                     num_packages;
52 } ACPI_PKG_INFO;
53
54 #define REF_INCREMENT       (u16) 0
55 #define REF_DECREMENT       (u16) 1
56 #define REF_FORCE_DELETE    (u16) 2
57
58 /* Acpi_cm_dump_buffer */
59
60 #define DB_BYTE_DISPLAY     1
61 #define DB_WORD_DISPLAY     2
62 #define DB_DWORD_DISPLAY    4
63 #define DB_QWORD_DISPLAY    8
64
65
66 /* Global initialization interfaces */
67
68 void
69 acpi_cm_init_globals (
70         void);
71
72 void
73 acpi_cm_terminate (
74         void);
75
76
77 /*
78  * Cm_init - miscellaneous initialization and shutdown
79  */
80
81 ACPI_STATUS
82 acpi_cm_hardware_initialize (
83         void);
84
85 ACPI_STATUS
86 acpi_cm_subsystem_shutdown (
87         void);
88
89 ACPI_STATUS
90 acpi_cm_validate_fadt (
91         void);
92
93 /*
94  * Cm_global - Global data structures and procedures
95  */
96
97 #ifdef ACPI_DEBUG
98
99 NATIVE_CHAR *
100 acpi_cm_get_mutex_name (
101         u32                     mutex_id);
102
103 NATIVE_CHAR *
104 acpi_cm_get_type_name (
105         u32                     type);
106
107 NATIVE_CHAR *
108 acpi_cm_get_region_name (
109         u8                      space_id);
110
111 #endif
112
113
114 u8
115 acpi_cm_valid_object_type (
116         u32                     type);
117
118 ACPI_OWNER_ID
119 acpi_cm_allocate_owner_id (
120         u32                     id_type);
121
122
123 /*
124  * Cm_clib - Local implementations of C library functions
125  */
126
127 #ifndef ACPI_USE_SYSTEM_CLIBRARY
128
129 u32
130 acpi_cm_strlen (
131         const NATIVE_CHAR       *string);
132
133 NATIVE_CHAR *
134 acpi_cm_strcpy (
135         NATIVE_CHAR             *dst_string,
136         const NATIVE_CHAR       *src_string);
137
138 NATIVE_CHAR *
139 acpi_cm_strncpy (
140         NATIVE_CHAR             *dst_string,
141         const NATIVE_CHAR       *src_string,
142         NATIVE_UINT             count);
143
144 u32
145 acpi_cm_strncmp (
146         const NATIVE_CHAR       *string1,
147         const NATIVE_CHAR       *string2,
148         NATIVE_UINT             count);
149
150 u32
151 acpi_cm_strcmp (
152         const NATIVE_CHAR       *string1,
153         const NATIVE_CHAR       *string2);
154
155 NATIVE_CHAR *
156 acpi_cm_strcat (
157         NATIVE_CHAR             *dst_string,
158         const NATIVE_CHAR       *src_string);
159
160 NATIVE_CHAR *
161 acpi_cm_strncat (
162         NATIVE_CHAR             *dst_string,
163         const NATIVE_CHAR       *src_string,
164         NATIVE_UINT             count);
165
166 NATIVE_UINT
167 acpi_cm_strtoul (
168         const NATIVE_CHAR       *string,
169         NATIVE_CHAR             **terminator,
170         NATIVE_UINT             base);
171
172 NATIVE_CHAR *
173 acpi_cm_strstr (
174         NATIVE_CHAR             *string1,
175         NATIVE_CHAR             *string2);
176
177 NATIVE_CHAR *
178 acpi_cm_strupr (
179         NATIVE_CHAR             *src_string);
180
181 void *
182 acpi_cm_memcpy (
183         void                    *dest,
184         const void              *src,
185         NATIVE_UINT             count);
186
187 void *
188 acpi_cm_memset (
189         void                    *dest,
190         NATIVE_UINT             value,
191         NATIVE_UINT             count);
192
193 u32
194 acpi_cm_to_upper (
195         u32                     c);
196
197 u32
198 acpi_cm_to_lower (
199         u32                     c);
200
201 #endif /* ACPI_USE_SYSTEM_CLIBRARY */
202
203 /*
204  * Cm_copy - Object construction and conversion interfaces
205  */
206
207 ACPI_STATUS
208 acpi_cm_build_simple_object(
209         ACPI_OPERAND_OBJECT     *obj,
210         ACPI_OBJECT             *user_obj,
211         u8                      *data_space,
212         u32                     *buffer_space_used);
213
214 ACPI_STATUS
215 acpi_cm_build_package_object (
216         ACPI_OPERAND_OBJECT     *obj,
217         u8                      *buffer,
218         u32                     *space_used);
219
220 ACPI_STATUS
221 acpi_cm_copy_iobject_to_eobject (
222         ACPI_OPERAND_OBJECT     *obj,
223         ACPI_BUFFER             *ret_buffer);
224
225 ACPI_STATUS
226 acpi_cm_copy_esimple_to_isimple(
227         ACPI_OBJECT             *user_obj,
228         ACPI_OPERAND_OBJECT     *obj);
229
230 ACPI_STATUS
231 acpi_cm_copy_eobject_to_iobject (
232         ACPI_OBJECT             *obj,
233         ACPI_OPERAND_OBJECT     *internal_obj);
234
235 ACPI_STATUS
236 acpi_cm_copy_isimple_to_isimple (
237         ACPI_OPERAND_OBJECT     *source_obj,
238         ACPI_OPERAND_OBJECT     *dest_obj);
239
240 ACPI_STATUS
241 acpi_cm_copy_ipackage_to_ipackage (
242         ACPI_OPERAND_OBJECT     *source_obj,
243         ACPI_OPERAND_OBJECT     *dest_obj,
244         ACPI_WALK_STATE         *walk_state);
245
246
247 /*
248  * Cm_create - Object creation
249  */
250
251 ACPI_STATUS
252 acpi_cm_update_object_reference (
253         ACPI_OPERAND_OBJECT     *object,
254         u16                     action);
255
256 ACPI_OPERAND_OBJECT  *
257 _cm_create_internal_object (
258         NATIVE_CHAR             *module_name,
259         u32                     line_number,
260         u32                     component_id,
261         OBJECT_TYPE_INTERNAL    type);
262
263
264 /*
265  * Cm_debug - Debug interfaces
266  */
267
268 u32
269 get_debug_level (
270         void);
271
272 void
273 set_debug_level (
274         u32                     level);
275
276 void
277 function_trace (
278         NATIVE_CHAR             *module_name,
279         u32                     line_number,
280         u32                     component_id,
281         NATIVE_CHAR             *function_name);
282
283 void
284 function_trace_ptr (
285         NATIVE_CHAR             *module_name,
286         u32                     line_number,
287         u32                     component_id,
288         NATIVE_CHAR             *function_name,
289         void                    *pointer);
290
291 void
292 function_trace_u32 (
293         NATIVE_CHAR             *module_name,
294         u32                     line_number,
295         u32                     component_id,
296         NATIVE_CHAR             *function_name,
297         u32                     integer);
298
299 void
300 function_trace_str (
301         NATIVE_CHAR             *module_name,
302         u32                     line_number,
303         u32                     component_id,
304         NATIVE_CHAR             *function_name,
305         NATIVE_CHAR             *string);
306
307 void
308 function_exit (
309         NATIVE_CHAR             *module_name,
310         u32                     line_number,
311         u32                     component_id,
312         NATIVE_CHAR             *function_name);
313
314 void
315 function_status_exit (
316         NATIVE_CHAR             *module_name,
317         u32                     line_number,
318         u32                     component_id,
319         NATIVE_CHAR             *function_name,
320         ACPI_STATUS             status);
321
322 void
323 function_value_exit (
324         NATIVE_CHAR             *module_name,
325         u32                     line_number,
326         u32                     component_id,
327         NATIVE_CHAR             *function_name,
328         ACPI_INTEGER            value);
329
330 void
331 function_ptr_exit (
332         NATIVE_CHAR             *module_name,
333         u32                     line_number,
334         u32                     component_id,
335         NATIVE_CHAR             *function_name,
336         u8                      *ptr);
337
338 void
339 debug_print_prefix (
340         NATIVE_CHAR             *module_name,
341         u32                     line_number);
342
343 void
344 debug_print (
345         NATIVE_CHAR             *module_name,
346         u32                     line_number,
347         u32                     component_id,
348         u32                     print_level,
349         NATIVE_CHAR             *format, ...);
350
351 void
352 debug_print_raw (
353         NATIVE_CHAR             *format, ...);
354
355 void
356 _report_info (
357         NATIVE_CHAR             *module_name,
358         u32                     line_number,
359         u32                     component_id);
360
361 void
362 _report_error (
363         NATIVE_CHAR             *module_name,
364         u32                     line_number,
365         u32                     component_id);
366
367 void
368 _report_warning (
369         NATIVE_CHAR             *module_name,
370         u32                     line_number,
371         u32                     component_id);
372
373 void
374 acpi_cm_dump_buffer (
375         u8                      *buffer,
376         u32                     count,
377         u32                     display,
378         u32                     component_id);
379
380
381 /*
382  * Cm_delete - Object deletion
383  */
384
385 void
386 acpi_cm_delete_internal_obj (
387         ACPI_OPERAND_OBJECT     *object);
388
389 void
390 acpi_cm_delete_internal_package_object (
391         ACPI_OPERAND_OBJECT     *object);
392
393 void
394 acpi_cm_delete_internal_simple_object (
395         ACPI_OPERAND_OBJECT     *object);
396
397 ACPI_STATUS
398 acpi_cm_delete_internal_object_list (
399         ACPI_OPERAND_OBJECT     **obj_list);
400
401
402 /*
403  * Cm_eval - object evaluation
404  */
405
406 /* Method name strings */
407
408 #define METHOD_NAME__HID        "_HID"
409 #define METHOD_NAME__UID        "_UID"
410 #define METHOD_NAME__ADR        "_ADR"
411 #define METHOD_NAME__STA        "_STA"
412 #define METHOD_NAME__REG        "_REG"
413 #define METHOD_NAME__SEG        "_SEG"
414 #define METHOD_NAME__BBN        "_BBN"
415
416
417 ACPI_STATUS
418 acpi_cm_evaluate_numeric_object (
419         NATIVE_CHAR             *object_name,
420         ACPI_NAMESPACE_NODE     *device_node,
421         ACPI_INTEGER            *address);
422
423 ACPI_STATUS
424 acpi_cm_execute_HID (
425         ACPI_NAMESPACE_NODE     *device_node,
426         DEVICE_ID               *hid);
427
428 ACPI_STATUS
429 acpi_cm_execute_STA (
430         ACPI_NAMESPACE_NODE     *device_node,
431         u32                     *status_flags);
432
433 ACPI_STATUS
434 acpi_cm_execute_UID (
435         ACPI_NAMESPACE_NODE     *device_node,
436         DEVICE_ID               *uid);
437
438
439 /*
440  * Cm_error - exception interfaces
441  */
442
443 NATIVE_CHAR *
444 acpi_cm_format_exception (
445         ACPI_STATUS             status);
446
447
448 /*
449  * Cm_mutex - mutual exclusion interfaces
450  */
451
452 ACPI_STATUS
453 acpi_cm_mutex_initialize (
454         void);
455
456 void
457 acpi_cm_mutex_terminate (
458         void);
459
460 ACPI_STATUS
461 acpi_cm_create_mutex (
462         ACPI_MUTEX_HANDLE       mutex_id);
463
464 ACPI_STATUS
465 acpi_cm_delete_mutex (
466         ACPI_MUTEX_HANDLE       mutex_id);
467
468 ACPI_STATUS
469 acpi_cm_acquire_mutex (
470         ACPI_MUTEX_HANDLE       mutex_id);
471
472 ACPI_STATUS
473 acpi_cm_release_mutex (
474         ACPI_MUTEX_HANDLE       mutex_id);
475
476
477 /*
478  * Cm_object - internal object create/delete/cache routines
479  */
480
481 void *
482 _cm_allocate_object_desc (
483         NATIVE_CHAR             *module_name,
484         u32                     line_number,
485         u32                     component_id);
486
487 #define acpi_cm_create_internal_object(t) _cm_create_internal_object(_THIS_MODULE,__LINE__,_COMPONENT,t)
488 #define acpi_cm_allocate_object_desc()  _cm_allocate_object_desc(_THIS_MODULE,__LINE__,_COMPONENT)
489
490 void
491 acpi_cm_delete_object_desc (
492         ACPI_OPERAND_OBJECT     *object);
493
494 u8
495 acpi_cm_valid_internal_object (
496         void                    *object);
497
498
499 /*
500  * Cm_ref_cnt - Object reference count management
501  */
502
503 void
504 acpi_cm_add_reference (
505         ACPI_OPERAND_OBJECT     *object);
506
507 void
508 acpi_cm_remove_reference (
509         ACPI_OPERAND_OBJECT     *object);
510
511 /*
512  * Cm_size - Object size routines
513  */
514
515 ACPI_STATUS
516 acpi_cm_get_simple_object_size (
517         ACPI_OPERAND_OBJECT     *obj,
518         u32                     *obj_length);
519
520 ACPI_STATUS
521 acpi_cm_get_package_object_size (
522         ACPI_OPERAND_OBJECT     *obj,
523         u32                     *obj_length);
524
525 ACPI_STATUS
526 acpi_cm_get_object_size(
527         ACPI_OPERAND_OBJECT     *obj,
528         u32                     *obj_length);
529
530
531 /*
532  * Cm_state - Generic state creation/cache routines
533  */
534
535 void
536 acpi_cm_push_generic_state (
537         ACPI_GENERIC_STATE      **list_head,
538         ACPI_GENERIC_STATE      *state);
539
540 ACPI_GENERIC_STATE *
541 acpi_cm_pop_generic_state (
542         ACPI_GENERIC_STATE      **list_head);
543
544
545 ACPI_GENERIC_STATE *
546 acpi_cm_create_generic_state (
547         void);
548
549 ACPI_GENERIC_STATE *
550 acpi_cm_create_update_state (
551         ACPI_OPERAND_OBJECT     *object,
552         u16                     action);
553
554 ACPI_GENERIC_STATE *
555 acpi_cm_create_pkg_state (
556         void                    *internal_object,
557         void                    *external_object,
558         u16                     index);
559
560 ACPI_STATUS
561 acpi_cm_create_update_state_and_push (
562         ACPI_OPERAND_OBJECT     *object,
563         u16                     action,
564         ACPI_GENERIC_STATE      **state_list);
565
566 ACPI_STATUS
567 acpi_cm_create_pkg_state_and_push (
568         void                    *internal_object,
569         void                    *external_object,
570         u16                     index,
571         ACPI_GENERIC_STATE      **state_list);
572
573 ACPI_GENERIC_STATE *
574 acpi_cm_create_control_state (
575         void);
576
577 void
578 acpi_cm_delete_generic_state (
579         ACPI_GENERIC_STATE      *state);
580
581 void
582 acpi_cm_delete_generic_state_cache (
583         void);
584
585 void
586 acpi_cm_delete_object_cache (
587         void);
588
589 /*
590  * Cmutils
591  */
592
593 u8
594 acpi_cm_valid_acpi_name (
595         u32                     name);
596
597 u8
598 acpi_cm_valid_acpi_character (
599         NATIVE_CHAR             character);
600
601 ACPI_STATUS
602 acpi_cm_resolve_package_references (
603         ACPI_OPERAND_OBJECT     *obj_desc);
604
605 #ifdef ACPI_DEBUG
606
607 void
608 acpi_cm_display_init_pathname (
609         ACPI_HANDLE             obj_handle,
610         char                    *path);
611
612 #endif
613
614
615 /*
616  * Memory allocation functions and related macros.
617  * Macros that expand to include filename and line number
618  */
619
620 void *
621 _cm_allocate (
622         u32                     size,
623         u32                     component,
624         NATIVE_CHAR             *module,
625         u32                     line);
626
627 void *
628 _cm_callocate (
629         u32                     size,
630         u32                     component,
631         NATIVE_CHAR             *module,
632         u32                     line);
633
634 void
635 _cm_free (
636         void                    *address,
637         u32                     component,
638         NATIVE_CHAR             *module,
639         u32                     line);
640
641 void
642 acpi_cm_init_static_object (
643         ACPI_OPERAND_OBJECT     *obj_desc);
644
645 #define acpi_cm_allocate(a)             _cm_allocate(a,_COMPONENT,_THIS_MODULE,__LINE__)
646 #define acpi_cm_callocate(a)            _cm_callocate(a, _COMPONENT,_THIS_MODULE,__LINE__)
647 #define acpi_cm_free(a)                 _cm_free(a,_COMPONENT,_THIS_MODULE,__LINE__)
648
649 #ifndef ACPI_DEBUG_TRACK_ALLOCATIONS
650
651 #define acpi_cm_add_element_to_alloc_list(a,b,c,d,e,f)
652 #define acpi_cm_delete_element_from_alloc_list(a,b,c,d)
653 #define acpi_cm_dump_current_allocations(a,b)
654 #define acpi_cm_dump_allocation_info()
655
656 #define DECREMENT_OBJECT_METRICS(a)
657 #define INCREMENT_OBJECT_METRICS(a)
658 #define INITIALIZE_ALLOCATION_METRICS()
659 #define DECREMENT_NAME_TABLE_METRICS(a)
660 #define INCREMENT_NAME_TABLE_METRICS(a)
661
662 #else
663
664 #define INITIALIZE_ALLOCATION_METRICS() \
665         acpi_gbl_current_object_count = 0; \
666         acpi_gbl_current_object_size = 0; \
667         acpi_gbl_running_object_count = 0; \
668         acpi_gbl_running_object_size = 0; \
669         acpi_gbl_max_concurrent_object_count = 0; \
670         acpi_gbl_max_concurrent_object_size = 0; \
671         acpi_gbl_current_alloc_size = 0; \
672         acpi_gbl_current_alloc_count = 0; \
673         acpi_gbl_running_alloc_size = 0; \
674         acpi_gbl_running_alloc_count = 0; \
675         acpi_gbl_max_concurrent_alloc_size = 0; \
676         acpi_gbl_max_concurrent_alloc_count = 0; \
677         acpi_gbl_current_node_count = 0; \
678         acpi_gbl_current_node_size = 0; \
679         acpi_gbl_max_concurrent_node_count = 0
680
681
682 #define DECREMENT_OBJECT_METRICS(a) \
683         acpi_gbl_current_object_count--; \
684         acpi_gbl_current_object_size -= a
685
686 #define INCREMENT_OBJECT_METRICS(a) \
687         acpi_gbl_current_object_count++; \
688         acpi_gbl_running_object_count++; \
689         if (acpi_gbl_max_concurrent_object_count < acpi_gbl_current_object_count) \
690         { \
691                 acpi_gbl_max_concurrent_object_count = acpi_gbl_current_object_count; \
692         } \
693         acpi_gbl_running_object_size += a; \
694         acpi_gbl_current_object_size += a; \
695         if (acpi_gbl_max_concurrent_object_size < acpi_gbl_current_object_size) \
696         { \
697                 acpi_gbl_max_concurrent_object_size = acpi_gbl_current_object_size; \
698         }
699
700 #define DECREMENT_NAME_TABLE_METRICS(a) \
701         acpi_gbl_current_node_count--; \
702         acpi_gbl_current_node_size -= (a)
703
704 #define INCREMENT_NAME_TABLE_METRICS(a) \
705         acpi_gbl_current_node_count++; \
706         acpi_gbl_current_node_size+= (a); \
707         if (acpi_gbl_max_concurrent_node_count < acpi_gbl_current_node_count) \
708         { \
709                 acpi_gbl_max_concurrent_node_count = acpi_gbl_current_node_count; \
710         } \
711
712
713 void
714 acpi_cm_dump_allocation_info (
715         void);
716
717 void
718 acpi_cm_dump_current_allocations (
719         u32                     component,
720         NATIVE_CHAR             *module);
721
722 #endif
723
724
725 #endif /* _ACCOMMON_H */