Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Added Kitten
[palacios-OLD.git] / kitten / include / acpi / acutils.h
1 /******************************************************************************
2  *
3  * Name: acutils.h -- prototypes for the common (subsystem-wide) procedures
4  *
5  *****************************************************************************/
6
7 /*
8  * Copyright (C) 2000 - 2006, R. Byron Moore
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions, and the following disclaimer,
16  *    without modification.
17  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18  *    substantially similar to the "NO WARRANTY" disclaimer below
19  *    ("Disclaimer") and any redistribution must be conditioned upon
20  *    including a substantially similar Disclaimer requirement for further
21  *    binary redistribution.
22  * 3. Neither the names of the above-listed copyright holders nor the names
23  *    of any contributors may be used to endorse or promote products derived
24  *    from this software without specific prior written permission.
25  *
26  * Alternatively, this software may be distributed under the terms of the
27  * GNU General Public License ("GPL") version 2 as published by the Free
28  * Software Foundation.
29  *
30  * NO WARRANTY
31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41  * POSSIBILITY OF SUCH DAMAGES.
42  */
43
44 #ifndef _ACUTILS_H
45 #define _ACUTILS_H
46
47 extern const u8 acpi_gbl_resource_aml_sizes[];
48
49 /* Strings used by the disassembler and debugger resource dump routines */
50
51 #if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER)
52
53 extern const char *acpi_gbl_bm_decode[];
54 extern const char *acpi_gbl_config_decode[];
55 extern const char *acpi_gbl_consume_decode[];
56 extern const char *acpi_gbl_dec_decode[];
57 extern const char *acpi_gbl_he_decode[];
58 extern const char *acpi_gbl_io_decode[];
59 extern const char *acpi_gbl_ll_decode[];
60 extern const char *acpi_gbl_max_decode[];
61 extern const char *acpi_gbl_mem_decode[];
62 extern const char *acpi_gbl_min_decode[];
63 extern const char *acpi_gbl_mtp_decode[];
64 extern const char *acpi_gbl_rng_decode[];
65 extern const char *acpi_gbl_rw_decode[];
66 extern const char *acpi_gbl_shr_decode[];
67 extern const char *acpi_gbl_siz_decode[];
68 extern const char *acpi_gbl_trs_decode[];
69 extern const char *acpi_gbl_ttp_decode[];
70 extern const char *acpi_gbl_typ_decode[];
71 #endif
72
73 /* Types for Resource descriptor entries */
74
75 #define ACPI_INVALID_RESOURCE           0
76 #define ACPI_FIXED_LENGTH               1
77 #define ACPI_VARIABLE_LENGTH            2
78 #define ACPI_SMALL_VARIABLE_LENGTH      3
79
80 typedef
81 acpi_status(*acpi_walk_aml_callback) (u8 * aml,
82                                       u32 length,
83                                       u32 offset,
84                                       u8 resource_index, void **context);
85
86 typedef
87 acpi_status(*acpi_pkg_callback) (u8 object_type,
88                                  union acpi_operand_object * source_object,
89                                  union acpi_generic_state * state,
90                                  void *context);
91
92 struct acpi_pkg_info {
93         u8 *free_space;
94         acpi_size length;
95         u32 object_space;
96         u32 num_packages;
97 };
98
99 #define REF_INCREMENT       (u16) 0
100 #define REF_DECREMENT       (u16) 1
101 #define REF_FORCE_DELETE    (u16) 2
102
103 /* acpi_ut_dump_buffer */
104
105 #define DB_BYTE_DISPLAY     1
106 #define DB_WORD_DISPLAY     2
107 #define DB_DWORD_DISPLAY    4
108 #define DB_QWORD_DISPLAY    8
109
110 /*
111  * utglobal - Global data structures and procedures
112  */
113 void acpi_ut_init_globals(void);
114
115 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
116
117 char *acpi_ut_get_mutex_name(u32 mutex_id);
118
119 #endif
120
121 char *acpi_ut_get_type_name(acpi_object_type type);
122
123 char *acpi_ut_get_node_name(void *object);
124
125 char *acpi_ut_get_descriptor_name(void *object);
126
127 char *acpi_ut_get_object_type_name(union acpi_operand_object *obj_desc);
128
129 char *acpi_ut_get_region_name(u8 space_id);
130
131 char *acpi_ut_get_event_name(u32 event_id);
132
133 char acpi_ut_hex_to_ascii_char(acpi_integer integer, u32 position);
134
135 u8 acpi_ut_valid_object_type(acpi_object_type type);
136
137 /*
138  * utinit - miscellaneous initialization and shutdown
139  */
140 acpi_status acpi_ut_hardware_initialize(void);
141
142 void acpi_ut_subsystem_shutdown(void);
143
144 acpi_status acpi_ut_validate_fadt(void);
145
146 /*
147  * utclib - Local implementations of C library functions
148  */
149 #ifndef ACPI_USE_SYSTEM_CLIBRARY
150
151 acpi_size acpi_ut_strlen(const char *string);
152
153 char *acpi_ut_strcpy(char *dst_string, const char *src_string);
154
155 char *acpi_ut_strncpy(char *dst_string,
156                       const char *src_string, acpi_size count);
157
158 int acpi_ut_memcmp(const char *buffer1, const char *buffer2, acpi_size count);
159
160 int acpi_ut_strncmp(const char *string1, const char *string2, acpi_size count);
161
162 int acpi_ut_strcmp(const char *string1, const char *string2);
163
164 char *acpi_ut_strcat(char *dst_string, const char *src_string);
165
166 char *acpi_ut_strncat(char *dst_string,
167                       const char *src_string, acpi_size count);
168
169 u32 acpi_ut_strtoul(const char *string, char **terminator, u32 base);
170
171 char *acpi_ut_strstr(char *string1, char *string2);
172
173 void *acpi_ut_memcpy(void *dest, const void *src, acpi_size count);
174
175 void *acpi_ut_memset(void *dest, acpi_native_uint value, acpi_size count);
176
177 int acpi_ut_to_upper(int c);
178
179 int acpi_ut_to_lower(int c);
180
181 extern const u8 _acpi_ctype[];
182
183 #define _ACPI_XA     0x00       /* extra alphabetic - not supported */
184 #define _ACPI_XS     0x40       /* extra space */
185 #define _ACPI_BB     0x00       /* BEL, BS, etc. - not supported */
186 #define _ACPI_CN     0x20       /* CR, FF, HT, NL, VT */
187 #define _ACPI_DI     0x04       /* '0'-'9' */
188 #define _ACPI_LO     0x02       /* 'a'-'z' */
189 #define _ACPI_PU     0x10       /* punctuation */
190 #define _ACPI_SP     0x08       /* space */
191 #define _ACPI_UP     0x01       /* 'A'-'Z' */
192 #define _ACPI_XD     0x80       /* '0'-'9', 'A'-'F', 'a'-'f' */
193
194 #define ACPI_IS_DIGIT(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_DI))
195 #define ACPI_IS_SPACE(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_SP))
196 #define ACPI_IS_XDIGIT(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_XD))
197 #define ACPI_IS_UPPER(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_UP))
198 #define ACPI_IS_LOWER(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO))
199 #define ACPI_IS_PRINT(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP | _ACPI_DI | _ACPI_SP | _ACPI_PU))
200 #define ACPI_IS_ALPHA(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP))
201
202 #endif                          /* ACPI_USE_SYSTEM_CLIBRARY */
203
204 /*
205  * utcopy - Object construction and conversion interfaces
206  */
207 acpi_status
208 acpi_ut_build_simple_object(union acpi_operand_object *obj,
209                             union acpi_object *user_obj,
210                             u8 * data_space, u32 * buffer_space_used);
211
212 acpi_status
213 acpi_ut_build_package_object(union acpi_operand_object *obj,
214                              u8 * buffer, u32 * space_used);
215
216 acpi_status
217 acpi_ut_copy_iobject_to_eobject(union acpi_operand_object *obj,
218                                 struct acpi_buffer *ret_buffer);
219
220 acpi_status
221 acpi_ut_copy_eobject_to_iobject(union acpi_object *obj,
222                                 union acpi_operand_object **internal_obj);
223
224 acpi_status
225 acpi_ut_copy_isimple_to_isimple(union acpi_operand_object *source_obj,
226                                 union acpi_operand_object *dest_obj);
227
228 acpi_status
229 acpi_ut_copy_iobject_to_iobject(union acpi_operand_object *source_desc,
230                                 union acpi_operand_object **dest_desc,
231                                 struct acpi_walk_state *walk_state);
232
233 /*
234  * utcreate - Object creation
235  */
236 acpi_status
237 acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action);
238
239 /*
240  * utdebug - Debug interfaces
241  */
242 void acpi_ut_init_stack_ptr_trace(void);
243
244 void acpi_ut_track_stack_ptr(void);
245
246 void
247 acpi_ut_trace(u32 line_number,
248               const char *function_name, char *module_name, u32 component_id);
249
250 void
251 acpi_ut_trace_ptr(u32 line_number,
252                   const char *function_name,
253                   char *module_name, u32 component_id, void *pointer);
254
255 void
256 acpi_ut_trace_u32(u32 line_number,
257                   const char *function_name,
258                   char *module_name, u32 component_id, u32 integer);
259
260 void
261 acpi_ut_trace_str(u32 line_number,
262                   const char *function_name,
263                   char *module_name, u32 component_id, char *string);
264
265 void
266 acpi_ut_exit(u32 line_number,
267              const char *function_name, char *module_name, u32 component_id);
268
269 void
270 acpi_ut_status_exit(u32 line_number,
271                     const char *function_name,
272                     char *module_name, u32 component_id, acpi_status status);
273
274 void
275 acpi_ut_value_exit(u32 line_number,
276                    const char *function_name,
277                    char *module_name, u32 component_id, acpi_integer value);
278
279 void
280 acpi_ut_ptr_exit(u32 line_number,
281                  const char *function_name,
282                  char *module_name, u32 component_id, u8 * ptr);
283
284 void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id);
285
286 void acpi_ut_dump_buffer2(u8 * buffer, u32 count, u32 display);
287
288 void acpi_ut_report_error(char *module_name, u32 line_number);
289
290 void acpi_ut_report_info(char *module_name, u32 line_number);
291
292 void acpi_ut_report_warning(char *module_name, u32 line_number);
293
294 /* Error and message reporting interfaces */
295
296 void ACPI_INTERNAL_VAR_XFACE
297 acpi_ut_debug_print(u32 requested_debug_level,
298                     u32 line_number,
299                     const char *function_name,
300                     char *module_name,
301                     u32 component_id, char *format, ...) ACPI_PRINTF_LIKE(6);
302
303 void ACPI_INTERNAL_VAR_XFACE
304 acpi_ut_debug_print_raw(u32 requested_debug_level,
305                         u32 line_number,
306                         const char *function_name,
307                         char *module_name,
308                         u32 component_id,
309                         char *format, ...) ACPI_PRINTF_LIKE(6);
310
311 void ACPI_INTERNAL_VAR_XFACE
312 acpi_ut_error(char *module_name,
313               u32 line_number, char *format, ...) ACPI_PRINTF_LIKE(3);
314
315 void ACPI_INTERNAL_VAR_XFACE
316 acpi_ut_exception(char *module_name,
317                   u32 line_number,
318                   acpi_status status, char *format, ...) ACPI_PRINTF_LIKE(4);
319
320 void ACPI_INTERNAL_VAR_XFACE
321 acpi_ut_warning(char *module_name,
322                 u32 line_number, char *format, ...) ACPI_PRINTF_LIKE(3);
323
324 void ACPI_INTERNAL_VAR_XFACE
325 acpi_ut_info(char *module_name,
326              u32 line_number, char *format, ...) ACPI_PRINTF_LIKE(3);
327
328 /*
329  * utdelete - Object deletion and reference counts
330  */
331 void acpi_ut_add_reference(union acpi_operand_object *object);
332
333 void acpi_ut_remove_reference(union acpi_operand_object *object);
334
335 void acpi_ut_delete_internal_package_object(union acpi_operand_object *object);
336
337 void acpi_ut_delete_internal_simple_object(union acpi_operand_object *object);
338
339 void acpi_ut_delete_internal_object_list(union acpi_operand_object **obj_list);
340
341 /*
342  * uteval - object evaluation
343  */
344 acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state);
345
346 acpi_status
347 acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
348                         char *path,
349                         u32 expected_return_btypes,
350                         union acpi_operand_object **return_desc);
351
352 acpi_status
353 acpi_ut_evaluate_numeric_object(char *object_name,
354                                 struct acpi_namespace_node *device_node,
355                                 acpi_integer * address);
356
357 acpi_status
358 acpi_ut_execute_HID(struct acpi_namespace_node *device_node,
359                     struct acpi_device_id *hid);
360
361 acpi_status
362 acpi_ut_execute_CID(struct acpi_namespace_node *device_node,
363                     struct acpi_compatible_id_list **return_cid_list);
364
365 acpi_status
366 acpi_ut_execute_STA(struct acpi_namespace_node *device_node,
367                     u32 * status_flags);
368
369 acpi_status
370 acpi_ut_execute_UID(struct acpi_namespace_node *device_node,
371                     struct acpi_device_id *uid);
372
373 acpi_status
374 acpi_ut_execute_sxds(struct acpi_namespace_node *device_node, u8 * highest);
375
376 /*
377  * utobject - internal object create/delete/cache routines
378  */
379 union acpi_operand_object *acpi_ut_create_internal_object_dbg(char *module_name,
380                                                               u32 line_number,
381                                                               u32 component_id,
382                                                               acpi_object_type
383                                                               type);
384
385 void *acpi_ut_allocate_object_desc_dbg(char *module_name,
386                                        u32 line_number, u32 component_id);
387
388 #define acpi_ut_create_internal_object(t) acpi_ut_create_internal_object_dbg (_acpi_module_name,__LINE__,_COMPONENT,t)
389 #define acpi_ut_allocate_object_desc()  acpi_ut_allocate_object_desc_dbg (_acpi_module_name,__LINE__,_COMPONENT)
390
391 void acpi_ut_delete_object_desc(union acpi_operand_object *object);
392
393 u8 acpi_ut_valid_internal_object(void *object);
394
395 union acpi_operand_object *acpi_ut_create_buffer_object(acpi_size buffer_size);
396
397 union acpi_operand_object *acpi_ut_create_string_object(acpi_size string_size);
398
399 acpi_status
400 acpi_ut_get_object_size(union acpi_operand_object *obj, acpi_size * obj_length);
401
402 /*
403  * utstate - Generic state creation/cache routines
404  */
405 void
406 acpi_ut_push_generic_state(union acpi_generic_state **list_head,
407                            union acpi_generic_state *state);
408
409 union acpi_generic_state *acpi_ut_pop_generic_state(union acpi_generic_state
410                                                     **list_head);
411
412 union acpi_generic_state *acpi_ut_create_generic_state(void);
413
414 struct acpi_thread_state *acpi_ut_create_thread_state(void);
415
416 union acpi_generic_state *acpi_ut_create_update_state(union acpi_operand_object
417                                                       *object, u16 action);
418
419 union acpi_generic_state *acpi_ut_create_pkg_state(void *internal_object,
420                                                    void *external_object,
421                                                    u16 index);
422
423 acpi_status
424 acpi_ut_create_update_state_and_push(union acpi_operand_object *object,
425                                      u16 action,
426                                      union acpi_generic_state **state_list);
427
428 #ifdef  ACPI_FUTURE_USAGE
429 acpi_status
430 acpi_ut_create_pkg_state_and_push(void *internal_object,
431                                   void *external_object,
432                                   u16 index,
433                                   union acpi_generic_state **state_list);
434 #endif                          /* ACPI_FUTURE_USAGE */
435
436 union acpi_generic_state *acpi_ut_create_control_state(void);
437
438 void acpi_ut_delete_generic_state(union acpi_generic_state *state);
439
440 /*
441  * utmath
442  */
443 acpi_status
444 acpi_ut_divide(acpi_integer in_dividend,
445                acpi_integer in_divisor,
446                acpi_integer * out_quotient, acpi_integer * out_remainder);
447
448 acpi_status
449 acpi_ut_short_divide(acpi_integer in_dividend,
450                      u32 divisor,
451                      acpi_integer * out_quotient, u32 * out_remainder);
452
453 /*
454  * utmisc
455  */
456 u8 acpi_ut_is_aml_table(struct acpi_table_header *table);
457
458 acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id);
459
460 void acpi_ut_release_owner_id(acpi_owner_id * owner_id);
461
462 acpi_status
463 acpi_ut_walk_package_tree(union acpi_operand_object *source_object,
464                           void *target_object,
465                           acpi_pkg_callback walk_callback, void *context);
466
467 void acpi_ut_strupr(char *src_string);
468
469 void acpi_ut_print_string(char *string, u8 max_length);
470
471 u8 acpi_ut_valid_acpi_name(u32 name);
472
473 acpi_name acpi_ut_repair_name(acpi_name name);
474
475 u8 acpi_ut_valid_acpi_char(char character, acpi_native_uint position);
476
477 acpi_status
478 acpi_ut_strtoul64(char *string, u32 base, acpi_integer * ret_integer);
479
480 /* Values for Base above (16=Hex, 10=Decimal) */
481
482 #define ACPI_ANY_BASE        0
483
484 u32 acpi_ut_dword_byte_swap(u32 value);
485
486 void acpi_ut_set_integer_width(u8 revision);
487
488 #ifdef ACPI_DEBUG_OUTPUT
489 void
490 acpi_ut_display_init_pathname(u8 type,
491                               struct acpi_namespace_node *obj_handle,
492                               char *path);
493 #endif
494
495 /*
496  * utresrc
497  */
498 acpi_status
499 acpi_ut_walk_aml_resources(u8 * aml,
500                            acpi_size aml_length,
501                            acpi_walk_aml_callback user_function, void **context);
502
503 acpi_status acpi_ut_validate_resource(void *aml, u8 * return_index);
504
505 u32 acpi_ut_get_descriptor_length(void *aml);
506
507 u16 acpi_ut_get_resource_length(void *aml);
508
509 u8 acpi_ut_get_resource_header_length(void *aml);
510
511 u8 acpi_ut_get_resource_type(void *aml);
512
513 acpi_status
514 acpi_ut_get_resource_end_tag(union acpi_operand_object *obj_desc,
515                              u8 ** end_tag);
516
517 /*
518  * utmutex - mutex support
519  */
520 acpi_status acpi_ut_mutex_initialize(void);
521
522 void acpi_ut_mutex_terminate(void);
523
524 acpi_status acpi_ut_acquire_mutex(acpi_mutex_handle mutex_id);
525
526 acpi_status acpi_ut_release_mutex(acpi_mutex_handle mutex_id);
527
528 /*
529  * utalloc - memory allocation and object caching
530  */
531 acpi_status acpi_ut_create_caches(void);
532
533 acpi_status acpi_ut_delete_caches(void);
534
535 acpi_status acpi_ut_validate_buffer(struct acpi_buffer *buffer);
536
537 acpi_status
538 acpi_ut_initialize_buffer(struct acpi_buffer *buffer,
539                           acpi_size required_length);
540
541 void *acpi_ut_allocate(acpi_size size, u32 component, char *module, u32 line);
542
543 void *acpi_ut_allocate_zeroed(acpi_size size,
544                               u32 component, char *module, u32 line);
545
546 #ifdef ACPI_DBG_TRACK_ALLOCATIONS
547 void *acpi_ut_allocate_and_track(acpi_size size,
548                                  u32 component, char *module, u32 line);
549
550 void *acpi_ut_allocate_zeroed_and_track(acpi_size size,
551                                         u32 component, char *module, u32 line);
552
553 void
554 acpi_ut_free_and_track(void *address, u32 component, char *module, u32 line);
555
556 #ifdef  ACPI_FUTURE_USAGE
557 void acpi_ut_dump_allocation_info(void);
558 #endif                          /* ACPI_FUTURE_USAGE */
559
560 void acpi_ut_dump_allocations(u32 component, char *module);
561
562 acpi_status
563 acpi_ut_create_list(char *list_name,
564                     u16 object_size, struct acpi_memory_list **return_cache);
565
566 #endif
567
568 #endif                          /* _ACUTILS_H */