vserver 1.9.3
[linux-2.6.git] / include / acpi / acdisasm.h
1 /******************************************************************************
2  *
3  * Name: acdisasm.h - AML disassembler
4  *
5  *****************************************************************************/
6
7 /*
8  * Copyright (C) 2000 - 2004, 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 __ACDISASM_H__
45 #define __ACDISASM_H__
46
47 #include "amlresrc.h"
48
49
50 #define BLOCK_NONE              0
51 #define BLOCK_PAREN             1
52 #define BLOCK_BRACE             2
53 #define BLOCK_COMMA_LIST        4
54
55 struct acpi_external_list
56 {
57         char                                *path;
58         struct acpi_external_list           *next;
59 };
60
61 extern struct acpi_external_list        *acpi_gbl_external_list;
62 extern const char                       *acpi_gbl_io_decode[2];
63 extern const char                       *acpi_gbl_word_decode[4];
64 extern const char                       *acpi_gbl_consume_decode[2];
65 extern const char                       *acpi_gbl_min_decode[2];
66 extern const char                       *acpi_gbl_max_decode[2];
67 extern const char                       *acpi_gbl_DECdecode[2];
68 extern const char                       *acpi_gbl_RNGdecode[4];
69 extern const char                       *acpi_gbl_MEMdecode[4];
70 extern const char                       *acpi_gbl_RWdecode[2];
71 extern const char                       *acpi_gbl_irq_decode[2];
72 extern const char                       *acpi_gbl_HEdecode[2];
73 extern const char                       *acpi_gbl_LLdecode[2];
74 extern const char                       *acpi_gbl_SHRdecode[2];
75 extern const char                       *acpi_gbl_TYPdecode[4];
76 extern const char                       *acpi_gbl_BMdecode[2];
77 extern const char                       *acpi_gbl_SIZdecode[4];
78 extern const char                       *acpi_gbl_lock_rule[ACPI_NUM_LOCK_RULES];
79 extern const char                       *acpi_gbl_access_types[ACPI_NUM_ACCESS_TYPES];
80 extern const char                       *acpi_gbl_update_rules[ACPI_NUM_UPDATE_RULES];
81 extern const char                       *acpi_gbl_match_ops[ACPI_NUM_MATCH_OPS];
82
83
84 struct acpi_op_walk_info
85 {
86         u32                             level;
87         u32                             bit_offset;
88 };
89
90 typedef
91 acpi_status (*asl_walk_callback) (
92         union acpi_parse_object             *op,
93         u32                                 level,
94         void                                *context);
95
96
97 /*
98  * dmwalk
99  */
100
101 void
102 acpi_dm_walk_parse_tree (
103         union acpi_parse_object         *op,
104         asl_walk_callback               descending_callback,
105         asl_walk_callback               ascending_callback,
106         void                            *context);
107
108 acpi_status
109 acpi_dm_descending_op (
110         union acpi_parse_object         *op,
111         u32                             level,
112         void                            *context);
113
114 acpi_status
115 acpi_dm_ascending_op (
116         union acpi_parse_object         *op,
117         u32                             level,
118         void                            *context);
119
120
121 /*
122  * dmopcode
123  */
124
125 void
126 acpi_dm_validate_name (
127         char                            *name,
128         union acpi_parse_object         *op);
129
130 u32
131 acpi_dm_dump_name (
132         char                            *name);
133
134 void
135 acpi_dm_unicode (
136         union acpi_parse_object         *op);
137
138 void
139 acpi_dm_disassemble (
140         struct acpi_walk_state          *walk_state,
141         union acpi_parse_object         *origin,
142         u32                             num_opcodes);
143
144 void
145 acpi_dm_namestring (
146         char                            *name);
147
148 void
149 acpi_dm_display_path (
150         union acpi_parse_object         *op);
151
152 void
153 acpi_dm_disassemble_one_op (
154         struct acpi_walk_state          *walk_state,
155         struct acpi_op_walk_info        *info,
156         union acpi_parse_object         *op);
157
158 void
159 acpi_dm_decode_internal_object (
160         union acpi_operand_object       *obj_desc);
161
162 u32
163 acpi_dm_block_type (
164         union acpi_parse_object         *op);
165
166 u32
167 acpi_dm_list_type (
168         union acpi_parse_object         *op);
169
170 acpi_status
171 acpi_ps_display_object_pathname (
172         struct acpi_walk_state          *walk_state,
173         union acpi_parse_object         *op);
174
175 void
176 acpi_dm_method_flags (
177         union acpi_parse_object         *op);
178
179 void
180 acpi_dm_field_flags (
181         union acpi_parse_object         *op);
182
183 void
184 acpi_dm_address_space (
185         u8                              space_id);
186
187 void
188 acpi_dm_region_flags (
189         union acpi_parse_object         *op);
190
191 void
192 acpi_dm_match_op (
193         union acpi_parse_object         *op);
194
195 void
196 acpi_dm_match_keyword (
197         union acpi_parse_object         *op);
198
199 u8
200 acpi_dm_comma_if_list_member (
201         union acpi_parse_object         *op);
202
203 void
204 acpi_dm_comma_if_field_member (
205         union acpi_parse_object         *op);
206
207
208 /*
209  * dmobject
210  */
211
212 void
213 acpi_dm_decode_node (
214         struct acpi_namespace_node      *node);
215
216 void
217 acpi_dm_display_internal_object (
218         union acpi_operand_object       *obj_desc,
219         struct acpi_walk_state          *walk_state);
220
221 void
222 acpi_dm_display_arguments (
223         struct acpi_walk_state          *walk_state);
224
225 void
226 acpi_dm_display_locals (
227         struct acpi_walk_state          *walk_state);
228
229 void
230 acpi_dm_dump_method_info (
231         acpi_status                     status,
232         struct acpi_walk_state          *walk_state,
233         union acpi_parse_object         *op);
234
235
236 /*
237  * dmbuffer
238  */
239
240 void
241 acpi_is_eisa_id (
242         union acpi_parse_object         *op);
243
244 void
245 acpi_dm_eisa_id (
246         u32                             encoded_id);
247
248 u8
249 acpi_dm_is_unicode_buffer (
250         union acpi_parse_object         *op);
251
252 u8
253 acpi_dm_is_string_buffer (
254         union acpi_parse_object         *op);
255
256
257 /*
258  * dmresrc
259  */
260
261 void
262 acpi_dm_disasm_byte_list (
263         u32                             level,
264         u8                              *byte_data,
265         u32                             byte_count);
266
267 void
268 acpi_dm_byte_list (
269         struct acpi_op_walk_info        *info,
270         union acpi_parse_object         *op);
271
272 void
273 acpi_dm_resource_descriptor (
274         struct acpi_op_walk_info        *info,
275         u8                              *byte_data,
276         u32                             byte_count);
277
278 u8
279 acpi_dm_is_resource_descriptor (
280         union acpi_parse_object         *op);
281
282 void
283 acpi_dm_indent (
284         u32                             level);
285
286 void
287 acpi_dm_bit_list (
288         u16                             mask);
289
290 void
291 acpi_dm_decode_attribute (
292         u8                              attribute);
293
294 /*
295  * dmresrcl
296  */
297
298 void
299 acpi_dm_io_flags (
300                 u8                          flags);
301
302 void
303 acpi_dm_memory_flags (
304         u8                              flags,
305         u8                              specific_flags);
306
307 void
308 acpi_dm_word_descriptor (
309         struct asl_word_address_desc    *resource,
310         u32                             length,
311         u32                             level);
312
313 void
314 acpi_dm_dword_descriptor (
315         struct asl_dword_address_desc   *resource,
316         u32                             length,
317         u32                             level);
318
319 void
320 acpi_dm_qword_descriptor (
321         struct asl_qword_address_desc   *resource,
322         u32                             length,
323         u32                             level);
324
325 void
326 acpi_dm_memory24_descriptor (
327         struct asl_memory_24_desc       *resource,
328         u32                             length,
329         u32                             level);
330
331 void
332 acpi_dm_memory32_descriptor (
333         struct asl_memory_32_desc       *resource,
334         u32                             length,
335         u32                             level);
336
337 void
338 acpi_dm_fixed_mem32_descriptor (
339         struct asl_fixed_memory_32_desc *resource,
340         u32                             length,
341         u32                             level);
342
343 void
344 acpi_dm_generic_register_descriptor (
345         struct asl_general_register_desc *resource,
346         u32                             length,
347         u32                             level);
348
349 void
350 acpi_dm_interrupt_descriptor (
351         struct asl_extended_xrupt_desc *resource,
352         u32                             length,
353         u32                             level);
354
355 void
356 acpi_dm_vendor_large_descriptor (
357         struct asl_large_vendor_desc    *resource,
358         u32                             length,
359         u32                             level);
360
361
362 /*
363  * dmresrcs
364  */
365
366 void
367 acpi_dm_irq_descriptor (
368         struct asl_irq_format_desc      *resource,
369         u32                             length,
370         u32                             level);
371
372 void
373 acpi_dm_dma_descriptor (
374         struct asl_dma_format_desc      *resource,
375         u32                             length,
376         u32                             level);
377
378 void
379 acpi_dm_io_descriptor (
380         struct asl_io_port_desc         *resource,
381         u32                             length,
382         u32                             level);
383
384 void
385 acpi_dm_fixed_io_descriptor (
386         struct asl_fixed_io_port_desc   *resource,
387         u32                             length,
388         u32                             level);
389
390 void
391 acpi_dm_start_dependent_descriptor (
392         struct asl_start_dependent_desc *resource,
393         u32                             length,
394         u32                             level);
395
396 void
397 acpi_dm_end_dependent_descriptor (
398         struct asl_start_dependent_desc *resource,
399         u32                             length,
400         u32                             level);
401
402 void
403 acpi_dm_vendor_small_descriptor (
404         struct asl_small_vendor_desc    *resource,
405         u32                             length,
406         u32                             level);
407
408
409 /*
410  * dmutils
411  */
412
413 void
414 acpi_dm_add_to_external_list (
415         char                            *path);
416
417 #endif  /* __ACDISASM_H__ */