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