|
1 /****************************************************************************** |
|
2 * |
|
3 * Name: acdisasm.h - AML disassembler |
|
4 * |
|
5 *****************************************************************************/ |
|
6 |
|
7 /* |
|
8 * Copyright (C) 2000 - 2008, Intel Corp. |
|
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 #define BLOCK_NONE 0 |
|
50 #define BLOCK_PAREN 1 |
|
51 #define BLOCK_BRACE 2 |
|
52 #define BLOCK_COMMA_LIST 4 |
|
53 #define ACPI_DEFAULT_RESNAME *(u32 *) "__RD" |
|
54 |
|
55 struct acpi_external_list { |
|
56 char *path; |
|
57 char *internal_path; |
|
58 struct acpi_external_list *next; |
|
59 u32 value; |
|
60 u16 length; |
|
61 u8 type; |
|
62 }; |
|
63 |
|
64 extern struct acpi_external_list *acpi_gbl_external_list; |
|
65 |
|
66 typedef const struct acpi_dmtable_info { |
|
67 u8 opcode; |
|
68 u8 offset; |
|
69 char *name; |
|
70 |
|
71 } acpi_dmtable_info; |
|
72 |
|
73 /* |
|
74 * Values for Opcode above. |
|
75 * Note: 0-7 must not change, used as a flag shift value |
|
76 */ |
|
77 #define ACPI_DMT_FLAG0 0 |
|
78 #define ACPI_DMT_FLAG1 1 |
|
79 #define ACPI_DMT_FLAG2 2 |
|
80 #define ACPI_DMT_FLAG3 3 |
|
81 #define ACPI_DMT_FLAG4 4 |
|
82 #define ACPI_DMT_FLAG5 5 |
|
83 #define ACPI_DMT_FLAG6 6 |
|
84 #define ACPI_DMT_FLAG7 7 |
|
85 #define ACPI_DMT_FLAGS0 8 |
|
86 #define ACPI_DMT_FLAGS2 9 |
|
87 #define ACPI_DMT_UINT8 10 |
|
88 #define ACPI_DMT_UINT16 11 |
|
89 #define ACPI_DMT_UINT24 12 |
|
90 #define ACPI_DMT_UINT32 13 |
|
91 #define ACPI_DMT_UINT56 14 |
|
92 #define ACPI_DMT_UINT64 15 |
|
93 #define ACPI_DMT_STRING 16 |
|
94 #define ACPI_DMT_NAME4 17 |
|
95 #define ACPI_DMT_NAME6 18 |
|
96 #define ACPI_DMT_NAME8 19 |
|
97 #define ACPI_DMT_CHKSUM 20 |
|
98 #define ACPI_DMT_SPACEID 21 |
|
99 #define ACPI_DMT_GAS 22 |
|
100 #define ACPI_DMT_ASF 23 |
|
101 #define ACPI_DMT_DMAR 24 |
|
102 #define ACPI_DMT_HEST 25 |
|
103 #define ACPI_DMT_HESTNTFY 26 |
|
104 #define ACPI_DMT_HESTNTYP 27 |
|
105 #define ACPI_DMT_MADT 28 |
|
106 #define ACPI_DMT_SRAT 29 |
|
107 #define ACPI_DMT_EXIT 30 |
|
108 #define ACPI_DMT_SIG 31 |
|
109 |
|
110 typedef |
|
111 void (*acpi_dmtable_handler) (struct acpi_table_header * table); |
|
112 |
|
113 struct acpi_dmtable_data { |
|
114 char *signature; |
|
115 struct acpi_dmtable_info *table_info; |
|
116 acpi_dmtable_handler table_handler; |
|
117 char *name; |
|
118 }; |
|
119 |
|
120 struct acpi_op_walk_info { |
|
121 u32 level; |
|
122 u32 last_level; |
|
123 u32 count; |
|
124 u32 bit_offset; |
|
125 u32 flags; |
|
126 struct acpi_walk_state *walk_state; |
|
127 }; |
|
128 |
|
129 typedef |
|
130 acpi_status(*asl_walk_callback) (union acpi_parse_object * op, |
|
131 u32 level, void *context); |
|
132 |
|
133 struct acpi_resource_tag { |
|
134 u32 bit_index; |
|
135 char *tag; |
|
136 }; |
|
137 |
|
138 /* Strings used for decoding flags to ASL keywords */ |
|
139 |
|
140 extern const char *acpi_gbl_word_decode[]; |
|
141 extern const char *acpi_gbl_irq_decode[]; |
|
142 extern const char *acpi_gbl_lock_rule[]; |
|
143 extern const char *acpi_gbl_access_types[]; |
|
144 extern const char *acpi_gbl_update_rules[]; |
|
145 extern const char *acpi_gbl_match_ops[]; |
|
146 |
|
147 extern struct acpi_dmtable_info acpi_dm_table_info_asf0[]; |
|
148 extern struct acpi_dmtable_info acpi_dm_table_info_asf1[]; |
|
149 extern struct acpi_dmtable_info acpi_dm_table_info_asf1a[]; |
|
150 extern struct acpi_dmtable_info acpi_dm_table_info_asf2[]; |
|
151 extern struct acpi_dmtable_info acpi_dm_table_info_asf2a[]; |
|
152 extern struct acpi_dmtable_info acpi_dm_table_info_asf3[]; |
|
153 extern struct acpi_dmtable_info acpi_dm_table_info_asf4[]; |
|
154 extern struct acpi_dmtable_info acpi_dm_table_info_asf_hdr[]; |
|
155 extern struct acpi_dmtable_info acpi_dm_table_info_boot[]; |
|
156 extern struct acpi_dmtable_info acpi_dm_table_info_bert[]; |
|
157 extern struct acpi_dmtable_info acpi_dm_table_info_cpep[]; |
|
158 extern struct acpi_dmtable_info acpi_dm_table_info_cpep0[]; |
|
159 extern struct acpi_dmtable_info acpi_dm_table_info_dbgp[]; |
|
160 extern struct acpi_dmtable_info acpi_dm_table_info_dmar[]; |
|
161 extern struct acpi_dmtable_info acpi_dm_table_info_dmar_hdr[]; |
|
162 extern struct acpi_dmtable_info acpi_dm_table_info_dmar_scope[]; |
|
163 extern struct acpi_dmtable_info acpi_dm_table_info_dmar0[]; |
|
164 extern struct acpi_dmtable_info acpi_dm_table_info_dmar1[]; |
|
165 extern struct acpi_dmtable_info acpi_dm_table_info_dmar2[]; |
|
166 extern struct acpi_dmtable_info acpi_dm_table_info_ecdt[]; |
|
167 extern struct acpi_dmtable_info acpi_dm_table_info_einj[]; |
|
168 extern struct acpi_dmtable_info acpi_dm_table_info_einj0[]; |
|
169 extern struct acpi_dmtable_info acpi_dm_table_info_erst[]; |
|
170 extern struct acpi_dmtable_info acpi_dm_table_info_facs[]; |
|
171 extern struct acpi_dmtable_info acpi_dm_table_info_fadt1[]; |
|
172 extern struct acpi_dmtable_info acpi_dm_table_info_fadt2[]; |
|
173 extern struct acpi_dmtable_info acpi_dm_table_info_gas[]; |
|
174 extern struct acpi_dmtable_info acpi_dm_table_info_header[]; |
|
175 extern struct acpi_dmtable_info acpi_dm_table_info_hest[]; |
|
176 extern struct acpi_dmtable_info acpi_dm_table_info_hest9[]; |
|
177 extern struct acpi_dmtable_info acpi_dm_table_info_hest_notify[]; |
|
178 extern struct acpi_dmtable_info acpi_dm_table_info_hpet[]; |
|
179 extern struct acpi_dmtable_info acpi_dm_table_info_madt[]; |
|
180 extern struct acpi_dmtable_info acpi_dm_table_info_madt0[]; |
|
181 extern struct acpi_dmtable_info acpi_dm_table_info_madt1[]; |
|
182 extern struct acpi_dmtable_info acpi_dm_table_info_madt2[]; |
|
183 extern struct acpi_dmtable_info acpi_dm_table_info_madt3[]; |
|
184 extern struct acpi_dmtable_info acpi_dm_table_info_madt4[]; |
|
185 extern struct acpi_dmtable_info acpi_dm_table_info_madt5[]; |
|
186 extern struct acpi_dmtable_info acpi_dm_table_info_madt6[]; |
|
187 extern struct acpi_dmtable_info acpi_dm_table_info_madt7[]; |
|
188 extern struct acpi_dmtable_info acpi_dm_table_info_madt8[]; |
|
189 extern struct acpi_dmtable_info acpi_dm_table_info_madt9[]; |
|
190 extern struct acpi_dmtable_info acpi_dm_table_info_madt10[]; |
|
191 extern struct acpi_dmtable_info acpi_dm_table_info_madt_hdr[]; |
|
192 extern struct acpi_dmtable_info acpi_dm_table_info_mcfg[]; |
|
193 extern struct acpi_dmtable_info acpi_dm_table_info_mcfg0[]; |
|
194 extern struct acpi_dmtable_info acpi_dm_table_info_rsdp1[]; |
|
195 extern struct acpi_dmtable_info acpi_dm_table_info_rsdp2[]; |
|
196 extern struct acpi_dmtable_info acpi_dm_table_info_sbst[]; |
|
197 extern struct acpi_dmtable_info acpi_dm_table_info_slic[]; |
|
198 extern struct acpi_dmtable_info acpi_dm_table_info_slit[]; |
|
199 extern struct acpi_dmtable_info acpi_dm_table_info_spcr[]; |
|
200 extern struct acpi_dmtable_info acpi_dm_table_info_spmi[]; |
|
201 extern struct acpi_dmtable_info acpi_dm_table_info_srat[]; |
|
202 extern struct acpi_dmtable_info acpi_dm_table_info_srat_hdr[]; |
|
203 extern struct acpi_dmtable_info acpi_dm_table_info_srat0[]; |
|
204 extern struct acpi_dmtable_info acpi_dm_table_info_srat1[]; |
|
205 extern struct acpi_dmtable_info acpi_dm_table_info_srat2[]; |
|
206 extern struct acpi_dmtable_info acpi_dm_table_info_tcpa[]; |
|
207 extern struct acpi_dmtable_info acpi_dm_table_info_wdrt[]; |
|
208 |
|
209 /* |
|
210 * dmtable |
|
211 */ |
|
212 void acpi_dm_dump_data_table(struct acpi_table_header *table); |
|
213 |
|
214 acpi_status |
|
215 acpi_dm_dump_table(u32 table_length, |
|
216 u32 table_offset, |
|
217 void *table, |
|
218 u32 sub_table_length, struct acpi_dmtable_info *info); |
|
219 |
|
220 void acpi_dm_line_header(u32 offset, u32 byte_length, char *name); |
|
221 |
|
222 void acpi_dm_line_header2(u32 offset, u32 byte_length, char *name, u32 value); |
|
223 |
|
224 /* |
|
225 * dmtbdump |
|
226 */ |
|
227 void acpi_dm_dump_asf(struct acpi_table_header *table); |
|
228 |
|
229 void acpi_dm_dump_cpep(struct acpi_table_header *table); |
|
230 |
|
231 void acpi_dm_dump_dmar(struct acpi_table_header *table); |
|
232 |
|
233 void acpi_dm_dump_einj(struct acpi_table_header *table); |
|
234 |
|
235 void acpi_dm_dump_erst(struct acpi_table_header *table); |
|
236 |
|
237 void acpi_dm_dump_fadt(struct acpi_table_header *table); |
|
238 |
|
239 void acpi_dm_dump_hest(struct acpi_table_header *table); |
|
240 |
|
241 void acpi_dm_dump_mcfg(struct acpi_table_header *table); |
|
242 |
|
243 void acpi_dm_dump_madt(struct acpi_table_header *table); |
|
244 |
|
245 u32 acpi_dm_dump_rsdp(struct acpi_table_header *table); |
|
246 |
|
247 void acpi_dm_dump_rsdt(struct acpi_table_header *table); |
|
248 |
|
249 void acpi_dm_dump_slit(struct acpi_table_header *table); |
|
250 |
|
251 void acpi_dm_dump_srat(struct acpi_table_header *table); |
|
252 |
|
253 void acpi_dm_dump_xsdt(struct acpi_table_header *table); |
|
254 |
|
255 /* |
|
256 * dmwalk |
|
257 */ |
|
258 void |
|
259 acpi_dm_disassemble(struct acpi_walk_state *walk_state, |
|
260 union acpi_parse_object *origin, u32 num_opcodes); |
|
261 |
|
262 void |
|
263 acpi_dm_walk_parse_tree(union acpi_parse_object *op, |
|
264 asl_walk_callback descending_callback, |
|
265 asl_walk_callback ascending_callback, void *context); |
|
266 |
|
267 /* |
|
268 * dmopcode |
|
269 */ |
|
270 void |
|
271 acpi_dm_disassemble_one_op(struct acpi_walk_state *walk_state, |
|
272 struct acpi_op_walk_info *info, |
|
273 union acpi_parse_object *op); |
|
274 |
|
275 void acpi_dm_decode_internal_object(union acpi_operand_object *obj_desc); |
|
276 |
|
277 u32 acpi_dm_list_type(union acpi_parse_object *op); |
|
278 |
|
279 void acpi_dm_method_flags(union acpi_parse_object *op); |
|
280 |
|
281 void acpi_dm_field_flags(union acpi_parse_object *op); |
|
282 |
|
283 void acpi_dm_address_space(u8 space_id); |
|
284 |
|
285 void acpi_dm_region_flags(union acpi_parse_object *op); |
|
286 |
|
287 void acpi_dm_match_op(union acpi_parse_object *op); |
|
288 |
|
289 u8 acpi_dm_comma_if_list_member(union acpi_parse_object *op); |
|
290 |
|
291 void acpi_dm_comma_if_field_member(union acpi_parse_object *op); |
|
292 |
|
293 /* |
|
294 * dmnames |
|
295 */ |
|
296 u32 acpi_dm_dump_name(char *name); |
|
297 |
|
298 acpi_status |
|
299 acpi_ps_display_object_pathname(struct acpi_walk_state *walk_state, |
|
300 union acpi_parse_object *op); |
|
301 |
|
302 void acpi_dm_namestring(char *name); |
|
303 |
|
304 /* |
|
305 * dmobject |
|
306 */ |
|
307 void |
|
308 acpi_dm_display_internal_object(union acpi_operand_object *obj_desc, |
|
309 struct acpi_walk_state *walk_state); |
|
310 |
|
311 void acpi_dm_display_arguments(struct acpi_walk_state *walk_state); |
|
312 |
|
313 void acpi_dm_display_locals(struct acpi_walk_state *walk_state); |
|
314 |
|
315 void |
|
316 acpi_dm_dump_method_info(acpi_status status, |
|
317 struct acpi_walk_state *walk_state, |
|
318 union acpi_parse_object *op); |
|
319 |
|
320 /* |
|
321 * dmbuffer |
|
322 */ |
|
323 void acpi_dm_disasm_byte_list(u32 level, u8 * byte_data, u32 byte_count); |
|
324 |
|
325 void |
|
326 acpi_dm_byte_list(struct acpi_op_walk_info *info, union acpi_parse_object *op); |
|
327 |
|
328 void acpi_dm_is_eisa_id(union acpi_parse_object *op); |
|
329 |
|
330 void acpi_dm_eisa_id(u32 encoded_id); |
|
331 |
|
332 u8 acpi_dm_is_unicode_buffer(union acpi_parse_object *op); |
|
333 |
|
334 u8 acpi_dm_is_string_buffer(union acpi_parse_object *op); |
|
335 |
|
336 /* |
|
337 * dmresrc |
|
338 */ |
|
339 void acpi_dm_dump_integer8(u8 value, char *name); |
|
340 |
|
341 void acpi_dm_dump_integer16(u16 value, char *name); |
|
342 |
|
343 void acpi_dm_dump_integer32(u32 value, char *name); |
|
344 |
|
345 void acpi_dm_dump_integer64(u64 value, char *name); |
|
346 |
|
347 void |
|
348 acpi_dm_resource_template(struct acpi_op_walk_info *info, |
|
349 union acpi_parse_object *op, |
|
350 u8 * byte_data, u32 byte_count); |
|
351 |
|
352 acpi_status acpi_dm_is_resource_template(union acpi_parse_object *op); |
|
353 |
|
354 void acpi_dm_indent(u32 level); |
|
355 |
|
356 void acpi_dm_bit_list(u16 mask); |
|
357 |
|
358 void acpi_dm_decode_attribute(u8 attribute); |
|
359 |
|
360 void acpi_dm_descriptor_name(void); |
|
361 |
|
362 /* |
|
363 * dmresrcl |
|
364 */ |
|
365 void |
|
366 acpi_dm_word_descriptor(union aml_resource *resource, u32 length, u32 level); |
|
367 |
|
368 void |
|
369 acpi_dm_dword_descriptor(union aml_resource *resource, u32 length, u32 level); |
|
370 |
|
371 void |
|
372 acpi_dm_extended_descriptor(union aml_resource *resource, |
|
373 u32 length, u32 level); |
|
374 |
|
375 void |
|
376 acpi_dm_qword_descriptor(union aml_resource *resource, u32 length, u32 level); |
|
377 |
|
378 void |
|
379 acpi_dm_memory24_descriptor(union aml_resource *resource, |
|
380 u32 length, u32 level); |
|
381 |
|
382 void |
|
383 acpi_dm_memory32_descriptor(union aml_resource *resource, |
|
384 u32 length, u32 level); |
|
385 |
|
386 void |
|
387 acpi_dm_fixed_memory32_descriptor(union aml_resource *resource, |
|
388 u32 length, u32 level); |
|
389 |
|
390 void |
|
391 acpi_dm_generic_register_descriptor(union aml_resource *resource, |
|
392 u32 length, u32 level); |
|
393 |
|
394 void |
|
395 acpi_dm_interrupt_descriptor(union aml_resource *resource, |
|
396 u32 length, u32 level); |
|
397 |
|
398 void |
|
399 acpi_dm_vendor_large_descriptor(union aml_resource *resource, |
|
400 u32 length, u32 level); |
|
401 |
|
402 void acpi_dm_vendor_common(char *name, u8 * byte_data, u32 length, u32 level); |
|
403 |
|
404 /* |
|
405 * dmresrcs |
|
406 */ |
|
407 void |
|
408 acpi_dm_irq_descriptor(union aml_resource *resource, u32 length, u32 level); |
|
409 |
|
410 void |
|
411 acpi_dm_dma_descriptor(union aml_resource *resource, u32 length, u32 level); |
|
412 |
|
413 void acpi_dm_io_descriptor(union aml_resource *resource, u32 length, u32 level); |
|
414 |
|
415 void |
|
416 acpi_dm_fixed_io_descriptor(union aml_resource *resource, |
|
417 u32 length, u32 level); |
|
418 |
|
419 void |
|
420 acpi_dm_start_dependent_descriptor(union aml_resource *resource, |
|
421 u32 length, u32 level); |
|
422 |
|
423 void |
|
424 acpi_dm_end_dependent_descriptor(union aml_resource *resource, |
|
425 u32 length, u32 level); |
|
426 |
|
427 void |
|
428 acpi_dm_vendor_small_descriptor(union aml_resource *resource, |
|
429 u32 length, u32 level); |
|
430 |
|
431 /* |
|
432 * dmutils |
|
433 */ |
|
434 void acpi_dm_add_to_external_list(char *path, u8 type, u32 value); |
|
435 |
|
436 /* |
|
437 * dmrestag |
|
438 */ |
|
439 void acpi_dm_find_resources(union acpi_parse_object *root); |
|
440 |
|
441 void |
|
442 acpi_dm_check_resource_reference(union acpi_parse_object *op, |
|
443 struct acpi_walk_state *walk_state); |
|
444 |
|
445 #endif /* __ACDISASM_H__ */ |