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 / acinterp.h
1 /******************************************************************************
2  *
3  * Name: acinterp.h - Interpreter subcomponent prototypes and defines
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 __ACINTERP_H__
45 #define __ACINTERP_H__
46
47 #define ACPI_WALK_OPERANDS          (&(walk_state->operands [walk_state->num_operands -1]))
48
49 /* Macros for tables used for debug output */
50
51 #define ACPI_EXD_OFFSET(f)          (u8) ACPI_OFFSET (union acpi_operand_object,f)
52 #define ACPI_EXD_NSOFFSET(f)        (u8) ACPI_OFFSET (struct acpi_namespace_node,f)
53 #define ACPI_EXD_TABLE_SIZE(name)   (sizeof(name) / sizeof (struct acpi_exdump_info))
54
55 /*
56  * If possible, pack the following structures to byte alignment, since we
57  * don't care about performance for debug output. Two cases where we cannot
58  * pack the structures:
59  *
60  * 1) Hardware does not support misaligned memory transfers
61  * 2) Compiler does not support pointers within packed structures
62  */
63 #if (!defined(ACPI_MISALIGNMENT_NOT_SUPPORTED) && !defined(ACPI_PACKED_POINTERS_NOT_SUPPORTED))
64 #pragma pack(1)
65 #endif
66
67 typedef const struct acpi_exdump_info {
68         u8 opcode;
69         u8 offset;
70         char *name;
71
72 } acpi_exdump_info;
73
74 /* Values for the Opcode field above */
75
76 #define ACPI_EXD_INIT                   0
77 #define ACPI_EXD_TYPE                   1
78 #define ACPI_EXD_UINT8                  2
79 #define ACPI_EXD_UINT16                 3
80 #define ACPI_EXD_UINT32                 4
81 #define ACPI_EXD_UINT64                 5
82 #define ACPI_EXD_LITERAL                6
83 #define ACPI_EXD_POINTER                7
84 #define ACPI_EXD_ADDRESS                8
85 #define ACPI_EXD_STRING                 9
86 #define ACPI_EXD_BUFFER                 10
87 #define ACPI_EXD_PACKAGE                11
88 #define ACPI_EXD_FIELD                  12
89 #define ACPI_EXD_REFERENCE              13
90
91 /* restore default alignment */
92
93 #pragma pack()
94
95 /*
96  * exconvrt - object conversion
97  */
98 acpi_status
99 acpi_ex_convert_to_integer(union acpi_operand_object *obj_desc,
100                            union acpi_operand_object **result_desc, u32 flags);
101
102 acpi_status
103 acpi_ex_convert_to_buffer(union acpi_operand_object *obj_desc,
104                           union acpi_operand_object **result_desc);
105
106 acpi_status
107 acpi_ex_convert_to_string(union acpi_operand_object *obj_desc,
108                           union acpi_operand_object **result_desc, u32 type);
109
110 /* Types for ->String conversion */
111
112 #define ACPI_EXPLICIT_BYTE_COPY         0x00000000
113 #define ACPI_EXPLICIT_CONVERT_HEX       0x00000001
114 #define ACPI_IMPLICIT_CONVERT_HEX       0x00000002
115 #define ACPI_EXPLICIT_CONVERT_DECIMAL   0x00000003
116
117 acpi_status
118 acpi_ex_convert_to_target_type(acpi_object_type destination_type,
119                                union acpi_operand_object *source_desc,
120                                union acpi_operand_object **result_desc,
121                                struct acpi_walk_state *walk_state);
122
123 /*
124  * exfield - ACPI AML (p-code) execution - field manipulation
125  */
126 acpi_status
127 acpi_ex_common_buffer_setup(union acpi_operand_object *obj_desc,
128                             u32 buffer_length, u32 * datum_count);
129
130 acpi_status
131 acpi_ex_write_with_update_rule(union acpi_operand_object *obj_desc,
132                                acpi_integer mask,
133                                acpi_integer field_value,
134                                u32 field_datum_byte_offset);
135
136 void
137 acpi_ex_get_buffer_datum(acpi_integer * datum,
138                          void *buffer,
139                          u32 buffer_length,
140                          u32 byte_granularity, u32 buffer_offset);
141
142 void
143 acpi_ex_set_buffer_datum(acpi_integer merged_datum,
144                          void *buffer,
145                          u32 buffer_length,
146                          u32 byte_granularity, u32 buffer_offset);
147
148 acpi_status
149 acpi_ex_read_data_from_field(struct acpi_walk_state *walk_state,
150                              union acpi_operand_object *obj_desc,
151                              union acpi_operand_object **ret_buffer_desc);
152
153 acpi_status
154 acpi_ex_write_data_to_field(union acpi_operand_object *source_desc,
155                             union acpi_operand_object *obj_desc,
156                             union acpi_operand_object **result_desc);
157
158 /*
159  * exfldio - low level field I/O
160  */
161 acpi_status
162 acpi_ex_extract_from_field(union acpi_operand_object *obj_desc,
163                            void *buffer, u32 buffer_length);
164
165 acpi_status
166 acpi_ex_insert_into_field(union acpi_operand_object *obj_desc,
167                           void *buffer, u32 buffer_length);
168
169 acpi_status
170 acpi_ex_access_region(union acpi_operand_object *obj_desc,
171                       u32 field_datum_byte_offset,
172                       acpi_integer * value, u32 read_write);
173
174 /*
175  * exmisc - misc support routines
176  */
177 acpi_status
178 acpi_ex_get_object_reference(union acpi_operand_object *obj_desc,
179                              union acpi_operand_object **return_desc,
180                              struct acpi_walk_state *walk_state);
181
182 acpi_status
183 acpi_ex_concat_template(union acpi_operand_object *obj_desc,
184                         union acpi_operand_object *obj_desc2,
185                         union acpi_operand_object **actual_return_desc,
186                         struct acpi_walk_state *walk_state);
187
188 acpi_status
189 acpi_ex_do_concatenate(union acpi_operand_object *obj_desc,
190                        union acpi_operand_object *obj_desc2,
191                        union acpi_operand_object **actual_return_desc,
192                        struct acpi_walk_state *walk_state);
193
194 acpi_status
195 acpi_ex_do_logical_numeric_op(u16 opcode,
196                               acpi_integer integer0,
197                               acpi_integer integer1, u8 * logical_result);
198
199 acpi_status
200 acpi_ex_do_logical_op(u16 opcode,
201                       union acpi_operand_object *operand0,
202                       union acpi_operand_object *operand1, u8 * logical_result);
203
204 acpi_integer
205 acpi_ex_do_math_op(u16 opcode, acpi_integer operand0, acpi_integer operand1);
206
207 acpi_status acpi_ex_create_mutex(struct acpi_walk_state *walk_state);
208
209 acpi_status acpi_ex_create_processor(struct acpi_walk_state *walk_state);
210
211 acpi_status acpi_ex_create_power_resource(struct acpi_walk_state *walk_state);
212
213 acpi_status
214 acpi_ex_create_region(u8 * aml_start,
215                       u32 aml_length,
216                       u8 region_space, struct acpi_walk_state *walk_state);
217
218 acpi_status acpi_ex_create_table_region(struct acpi_walk_state *walk_state);
219
220 acpi_status acpi_ex_create_event(struct acpi_walk_state *walk_state);
221
222 acpi_status acpi_ex_create_alias(struct acpi_walk_state *walk_state);
223
224 acpi_status
225 acpi_ex_create_method(u8 * aml_start,
226                       u32 aml_length, struct acpi_walk_state *walk_state);
227
228 /*
229  * exconfig - dynamic table load/unload
230  */
231 acpi_status
232 acpi_ex_load_op(union acpi_operand_object *obj_desc,
233                 union acpi_operand_object *target,
234                 struct acpi_walk_state *walk_state);
235
236 acpi_status
237 acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
238                       union acpi_operand_object **return_desc);
239
240 acpi_status acpi_ex_unload_table(union acpi_operand_object *ddb_handle);
241
242 /*
243  * exmutex - mutex support
244  */
245 acpi_status
246 acpi_ex_acquire_mutex(union acpi_operand_object *time_desc,
247                       union acpi_operand_object *obj_desc,
248                       struct acpi_walk_state *walk_state);
249
250 acpi_status
251 acpi_ex_release_mutex(union acpi_operand_object *obj_desc,
252                       struct acpi_walk_state *walk_state);
253
254 void acpi_ex_release_all_mutexes(struct acpi_thread_state *thread);
255
256 void acpi_ex_unlink_mutex(union acpi_operand_object *obj_desc);
257
258 /*
259  * exprep - ACPI AML execution - prep utilities
260  */
261 acpi_status
262 acpi_ex_prep_common_field_object(union acpi_operand_object *obj_desc,
263                                  u8 field_flags,
264                                  u8 field_attribute,
265                                  u32 field_bit_position, u32 field_bit_length);
266
267 acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info);
268
269 /*
270  * exsystem - Interface to OS services
271  */
272 acpi_status
273 acpi_ex_system_do_notify_op(union acpi_operand_object *value,
274                             union acpi_operand_object *obj_desc);
275
276 acpi_status acpi_ex_system_do_suspend(acpi_integer time);
277
278 acpi_status acpi_ex_system_do_stall(u32 time);
279
280 acpi_status
281 acpi_ex_system_acquire_mutex(union acpi_operand_object *time,
282                              union acpi_operand_object *obj_desc);
283
284 acpi_status acpi_ex_system_release_mutex(union acpi_operand_object *obj_desc);
285
286 acpi_status acpi_ex_system_signal_event(union acpi_operand_object *obj_desc);
287
288 acpi_status
289 acpi_ex_system_wait_event(union acpi_operand_object *time,
290                           union acpi_operand_object *obj_desc);
291
292 acpi_status acpi_ex_system_reset_event(union acpi_operand_object *obj_desc);
293
294 acpi_status
295 acpi_ex_system_wait_semaphore(acpi_semaphore semaphore, u16 timeout);
296
297 acpi_status acpi_ex_system_wait_mutex(acpi_mutex mutex, u16 timeout);
298
299 /*
300  * exoparg1 - ACPI AML execution, 1 operand
301  */
302 acpi_status acpi_ex_opcode_0A_0T_1R(struct acpi_walk_state *walk_state);
303
304 acpi_status acpi_ex_opcode_1A_0T_0R(struct acpi_walk_state *walk_state);
305
306 acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state);
307
308 acpi_status acpi_ex_opcode_1A_1T_1R(struct acpi_walk_state *walk_state);
309
310 acpi_status acpi_ex_opcode_1A_1T_0R(struct acpi_walk_state *walk_state);
311
312 /*
313  * exoparg2 - ACPI AML execution, 2 operands
314  */
315 acpi_status acpi_ex_opcode_2A_0T_0R(struct acpi_walk_state *walk_state);
316
317 acpi_status acpi_ex_opcode_2A_0T_1R(struct acpi_walk_state *walk_state);
318
319 acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state);
320
321 acpi_status acpi_ex_opcode_2A_2T_1R(struct acpi_walk_state *walk_state);
322
323 /*
324  * exoparg3 - ACPI AML execution, 3 operands
325  */
326 acpi_status acpi_ex_opcode_3A_0T_0R(struct acpi_walk_state *walk_state);
327
328 acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state);
329
330 /*
331  * exoparg6 - ACPI AML execution, 6 operands
332  */
333 acpi_status acpi_ex_opcode_6A_0T_1R(struct acpi_walk_state *walk_state);
334
335 /*
336  * exresolv - Object resolution and get value functions
337  */
338 acpi_status
339 acpi_ex_resolve_to_value(union acpi_operand_object **stack_ptr,
340                          struct acpi_walk_state *walk_state);
341
342 acpi_status
343 acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
344                          union acpi_operand_object *operand,
345                          acpi_object_type * return_type,
346                          union acpi_operand_object **return_desc);
347
348 /*
349  * exresnte - resolve namespace node
350  */
351 acpi_status
352 acpi_ex_resolve_node_to_value(struct acpi_namespace_node **stack_ptr,
353                               struct acpi_walk_state *walk_state);
354
355 /*
356  * exresop - resolve operand to value
357  */
358 acpi_status
359 acpi_ex_resolve_operands(u16 opcode,
360                          union acpi_operand_object **stack_ptr,
361                          struct acpi_walk_state *walk_state);
362
363 /*
364  * exdump - Interpreter debug output routines
365  */
366 void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth);
367
368 void
369 acpi_ex_dump_operands(union acpi_operand_object **operands,
370                       acpi_interpreter_mode interpreter_mode,
371                       char *ident,
372                       u32 num_levels,
373                       char *note, char *module_name, u32 line_number);
374
375 #ifdef  ACPI_FUTURE_USAGE
376 void
377 acpi_ex_dump_object_descriptor(union acpi_operand_object *object, u32 flags);
378
379 void acpi_ex_dump_namespace_node(struct acpi_namespace_node *node, u32 flags);
380 #endif                          /* ACPI_FUTURE_USAGE */
381
382 /*
383  * exnames - AML namestring support
384  */
385 acpi_status
386 acpi_ex_get_name_string(acpi_object_type data_type,
387                         u8 * in_aml_address,
388                         char **out_name_string, u32 * out_name_length);
389
390 /*
391  * exstore - Object store support
392  */
393 acpi_status
394 acpi_ex_store(union acpi_operand_object *val_desc,
395               union acpi_operand_object *dest_desc,
396               struct acpi_walk_state *walk_state);
397
398 acpi_status
399 acpi_ex_store_object_to_node(union acpi_operand_object *source_desc,
400                              struct acpi_namespace_node *node,
401                              struct acpi_walk_state *walk_state,
402                              u8 implicit_conversion);
403
404 #define ACPI_IMPLICIT_CONVERSION        TRUE
405 #define ACPI_NO_IMPLICIT_CONVERSION     FALSE
406
407 /*
408  * exstoren - resolve/store object
409  */
410 acpi_status
411 acpi_ex_resolve_object(union acpi_operand_object **source_desc_ptr,
412                        acpi_object_type target_type,
413                        struct acpi_walk_state *walk_state);
414
415 acpi_status
416 acpi_ex_store_object_to_object(union acpi_operand_object *source_desc,
417                                union acpi_operand_object *dest_desc,
418                                union acpi_operand_object **new_desc,
419                                struct acpi_walk_state *walk_state);
420
421 /*
422  * exstorob - store object - buffer/string
423  */
424 acpi_status
425 acpi_ex_store_buffer_to_buffer(union acpi_operand_object *source_desc,
426                                union acpi_operand_object *target_desc);
427
428 acpi_status
429 acpi_ex_store_string_to_string(union acpi_operand_object *source_desc,
430                                union acpi_operand_object *target_desc);
431
432 /*
433  * excopy - object copy
434  */
435 acpi_status
436 acpi_ex_copy_integer_to_index_field(union acpi_operand_object *source_desc,
437                                     union acpi_operand_object *target_desc);
438
439 acpi_status
440 acpi_ex_copy_integer_to_bank_field(union acpi_operand_object *source_desc,
441                                    union acpi_operand_object *target_desc);
442
443 acpi_status
444 acpi_ex_copy_data_to_named_field(union acpi_operand_object *source_desc,
445                                  struct acpi_namespace_node *node);
446
447 acpi_status
448 acpi_ex_copy_integer_to_buffer_field(union acpi_operand_object *source_desc,
449                                      union acpi_operand_object *target_desc);
450
451 /*
452  * exutils - interpreter/scanner utilities
453  */
454 acpi_status acpi_ex_enter_interpreter(void);
455
456 void acpi_ex_exit_interpreter(void);
457
458 void acpi_ex_truncate_for32bit_table(union acpi_operand_object *obj_desc);
459
460 u8 acpi_ex_acquire_global_lock(u32 rule);
461
462 void acpi_ex_release_global_lock(u8 locked);
463
464 void acpi_ex_eisa_id_to_string(u32 numeric_id, char *out_string);
465
466 void acpi_ex_unsigned_integer_to_string(acpi_integer value, char *out_string);
467
468 /*
469  * exregion - default op_region handlers
470  */
471 acpi_status
472 acpi_ex_system_memory_space_handler(u32 function,
473                                     acpi_physical_address address,
474                                     u32 bit_width,
475                                     acpi_integer * value,
476                                     void *handler_context,
477                                     void *region_context);
478
479 acpi_status
480 acpi_ex_system_io_space_handler(u32 function,
481                                 acpi_physical_address address,
482                                 u32 bit_width,
483                                 acpi_integer * value,
484                                 void *handler_context, void *region_context);
485
486 acpi_status
487 acpi_ex_pci_config_space_handler(u32 function,
488                                  acpi_physical_address address,
489                                  u32 bit_width,
490                                  acpi_integer * value,
491                                  void *handler_context, void *region_context);
492
493 acpi_status
494 acpi_ex_cmos_space_handler(u32 function,
495                            acpi_physical_address address,
496                            u32 bit_width,
497                            acpi_integer * value,
498                            void *handler_context, void *region_context);
499
500 acpi_status
501 acpi_ex_pci_bar_space_handler(u32 function,
502                               acpi_physical_address address,
503                               u32 bit_width,
504                               acpi_integer * value,
505                               void *handler_context, void *region_context);
506
507 acpi_status
508 acpi_ex_embedded_controller_space_handler(u32 function,
509                                           acpi_physical_address address,
510                                           u32 bit_width,
511                                           acpi_integer * value,
512                                           void *handler_context,
513                                           void *region_context);
514
515 acpi_status
516 acpi_ex_sm_bus_space_handler(u32 function,
517                              acpi_physical_address address,
518                              u32 bit_width,
519                              acpi_integer * value,
520                              void *handler_context, void *region_context);
521
522 acpi_status
523 acpi_ex_data_table_space_handler(u32 function,
524                                  acpi_physical_address address,
525                                  u32 bit_width,
526                                  acpi_integer * value,
527                                  void *handler_context, void *region_context);
528
529 #endif                          /* __INTERP_H__ */