acdisasm.h 13.7 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7
/******************************************************************************
 *
 * Name: acdisasm.h - AML disassembler
 *
 *****************************************************************************/

/*
B
Bob Moore 已提交
8
 * Copyright (C) 2000 - 2007, R. Byron Moore
L
Linus Torvalds 已提交
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions, and the following disclaimer,
 *    without modification.
 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
 *    substantially similar to the "NO WARRANTY" disclaimer below
 *    ("Disclaimer") and any redistribution must be conditioned upon
 *    including a substantially similar Disclaimer requirement for further
 *    binary redistribution.
 * 3. Neither the names of the above-listed copyright holders nor the names
 *    of any contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * Alternatively, this software may be distributed under the terms of the
 * GNU General Public License ("GPL") version 2 as published by the Free
 * Software Foundation.
 *
 * NO WARRANTY
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES.
 */

#ifndef __ACDISASM_H__
#define __ACDISASM_H__

#include "amlresrc.h"

#define BLOCK_NONE              0
#define BLOCK_PAREN             1
#define BLOCK_BRACE             2
#define BLOCK_COMMA_LIST        4
B
Bob Moore 已提交
53
#define ACPI_DEFAULT_RESNAME    *(u32 *) "__RD"
L
Linus Torvalds 已提交
54

L
Len Brown 已提交
55 56
struct acpi_external_list {
	char *path;
B
Bob Moore 已提交
57
	char *internal_path;
L
Len Brown 已提交
58
	struct acpi_external_list *next;
B
Bob Moore 已提交
59 60 61
	u32 value;
	u16 length;
	u8 type;
L
Linus Torvalds 已提交
62 63
};

L
Len Brown 已提交
64
extern struct acpi_external_list *acpi_gbl_external_list;
B
Bob Moore 已提交
65

B
Bob Moore 已提交
66 67 68 69
typedef const struct acpi_dmtable_info {
	u8 opcode;
	u8 offset;
	char *name;
B
Bob Moore 已提交
70

B
Bob Moore 已提交
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
} acpi_dmtable_info;

/*
 * Values for Opcode above.
 * Note: 0-7 must not change, used as a flag shift value
 */
#define ACPI_DMT_FLAG0                  0
#define ACPI_DMT_FLAG1                  1
#define ACPI_DMT_FLAG2                  2
#define ACPI_DMT_FLAG3                  3
#define ACPI_DMT_FLAG4                  4
#define ACPI_DMT_FLAG5                  5
#define ACPI_DMT_FLAG6                  6
#define ACPI_DMT_FLAG7                  7
#define ACPI_DMT_FLAGS0                 8
#define ACPI_DMT_FLAGS2                 9
#define ACPI_DMT_UINT8                  10
#define ACPI_DMT_UINT16                 11
#define ACPI_DMT_UINT24                 12
#define ACPI_DMT_UINT32                 13
#define ACPI_DMT_UINT56                 14
#define ACPI_DMT_UINT64                 15
#define ACPI_DMT_STRING                 16
#define ACPI_DMT_NAME4                  17
#define ACPI_DMT_NAME6                  18
#define ACPI_DMT_NAME8                  19
#define ACPI_DMT_CHKSUM                 20
#define ACPI_DMT_SPACEID                21
#define ACPI_DMT_GAS                    22
100 101
#define ACPI_DMT_ASF                    23
#define ACPI_DMT_DMAR                   24
102 103 104 105 106 107 108
#define ACPI_DMT_HEST                   25
#define ACPI_DMT_HESTNTFY               26
#define ACPI_DMT_HESTNTYP               27
#define ACPI_DMT_MADT                   28
#define ACPI_DMT_SRAT                   29
#define ACPI_DMT_EXIT                   30
#define ACPI_DMT_SIG                    31
B
Bob Moore 已提交
109 110

typedef
111
void (*acpi_dmtable_handler) (struct acpi_table_header * table);
B
Bob Moore 已提交
112 113 114 115

struct acpi_dmtable_data {
	char *signature;
	struct acpi_dmtable_info *table_info;
116
	acpi_dmtable_handler table_handler;
117
	char *name;
B
Bob Moore 已提交
118
};
L
Len Brown 已提交
119 120 121

struct acpi_op_walk_info {
	u32 level;
B
Bob Moore 已提交
122 123
	u32 last_level;
	u32 count;
L
Len Brown 已提交
124
	u32 bit_offset;
B
Bob Moore 已提交
125
	u32 flags;
L
Len Brown 已提交
126
	struct acpi_walk_state *walk_state;
L
Linus Torvalds 已提交
127 128 129
};

typedef
L
Len Brown 已提交
130 131
acpi_status(*asl_walk_callback) (union acpi_parse_object * op,
				 u32 level, void *context);
L
Linus Torvalds 已提交
132

B
Bob Moore 已提交
133 134 135 136 137
struct acpi_resource_tag {
	u32 bit_index;
	char *tag;
};

B
Bob Moore 已提交
138 139
/* Strings used for decoding flags to ASL keywords */

B
Bob Moore 已提交
140 141 142 143 144 145
extern const char *acpi_gbl_word_decode[];
extern const char *acpi_gbl_irq_decode[];
extern const char *acpi_gbl_lock_rule[];
extern const char *acpi_gbl_access_types[];
extern const char *acpi_gbl_update_rules[];
extern const char *acpi_gbl_match_ops[];
B
Bob Moore 已提交
146 147 148

extern struct acpi_dmtable_info acpi_dm_table_info_asf0[];
extern struct acpi_dmtable_info acpi_dm_table_info_asf1[];
149
extern struct acpi_dmtable_info acpi_dm_table_info_asf1a[];
B
Bob Moore 已提交
150
extern struct acpi_dmtable_info acpi_dm_table_info_asf2[];
151
extern struct acpi_dmtable_info acpi_dm_table_info_asf2a[];
B
Bob Moore 已提交
152 153 154 155
extern struct acpi_dmtable_info acpi_dm_table_info_asf3[];
extern struct acpi_dmtable_info acpi_dm_table_info_asf4[];
extern struct acpi_dmtable_info acpi_dm_table_info_asf_hdr[];
extern struct acpi_dmtable_info acpi_dm_table_info_boot[];
156
extern struct acpi_dmtable_info acpi_dm_table_info_bert[];
B
Bob Moore 已提交
157 158 159
extern struct acpi_dmtable_info acpi_dm_table_info_cpep[];
extern struct acpi_dmtable_info acpi_dm_table_info_cpep0[];
extern struct acpi_dmtable_info acpi_dm_table_info_dbgp[];
B
Bob Moore 已提交
160 161 162 163 164
extern struct acpi_dmtable_info acpi_dm_table_info_dmar[];
extern struct acpi_dmtable_info acpi_dm_table_info_dmar_hdr[];
extern struct acpi_dmtable_info acpi_dm_table_info_dmar_scope[];
extern struct acpi_dmtable_info acpi_dm_table_info_dmar0[];
extern struct acpi_dmtable_info acpi_dm_table_info_dmar1[];
B
Bob Moore 已提交
165
extern struct acpi_dmtable_info acpi_dm_table_info_ecdt[];
166 167 168
extern struct acpi_dmtable_info acpi_dm_table_info_einj[];
extern struct acpi_dmtable_info acpi_dm_table_info_einj0[];
extern struct acpi_dmtable_info acpi_dm_table_info_erst[];
B
Bob Moore 已提交
169 170 171 172 173
extern struct acpi_dmtable_info acpi_dm_table_info_facs[];
extern struct acpi_dmtable_info acpi_dm_table_info_fadt1[];
extern struct acpi_dmtable_info acpi_dm_table_info_fadt2[];
extern struct acpi_dmtable_info acpi_dm_table_info_gas[];
extern struct acpi_dmtable_info acpi_dm_table_info_header[];
174 175 176
extern struct acpi_dmtable_info acpi_dm_table_info_hest[];
extern struct acpi_dmtable_info acpi_dm_table_info_hest9[];
extern struct acpi_dmtable_info acpi_dm_table_info_hest_notify[];
B
Bob Moore 已提交
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
extern struct acpi_dmtable_info acpi_dm_table_info_hpet[];
extern struct acpi_dmtable_info acpi_dm_table_info_madt[];
extern struct acpi_dmtable_info acpi_dm_table_info_madt0[];
extern struct acpi_dmtable_info acpi_dm_table_info_madt1[];
extern struct acpi_dmtable_info acpi_dm_table_info_madt2[];
extern struct acpi_dmtable_info acpi_dm_table_info_madt3[];
extern struct acpi_dmtable_info acpi_dm_table_info_madt4[];
extern struct acpi_dmtable_info acpi_dm_table_info_madt5[];
extern struct acpi_dmtable_info acpi_dm_table_info_madt6[];
extern struct acpi_dmtable_info acpi_dm_table_info_madt7[];
extern struct acpi_dmtable_info acpi_dm_table_info_madt8[];
extern struct acpi_dmtable_info acpi_dm_table_info_madt_hdr[];
extern struct acpi_dmtable_info acpi_dm_table_info_mcfg[];
extern struct acpi_dmtable_info acpi_dm_table_info_mcfg0[];
extern struct acpi_dmtable_info acpi_dm_table_info_rsdp1[];
extern struct acpi_dmtable_info acpi_dm_table_info_rsdp2[];
extern struct acpi_dmtable_info acpi_dm_table_info_sbst[];
194
extern struct acpi_dmtable_info acpi_dm_table_info_slic[];
B
Bob Moore 已提交
195 196 197 198 199 200 201 202 203 204 205 206 207 208
extern struct acpi_dmtable_info acpi_dm_table_info_slit[];
extern struct acpi_dmtable_info acpi_dm_table_info_spcr[];
extern struct acpi_dmtable_info acpi_dm_table_info_spmi[];
extern struct acpi_dmtable_info acpi_dm_table_info_srat[];
extern struct acpi_dmtable_info acpi_dm_table_info_srat0[];
extern struct acpi_dmtable_info acpi_dm_table_info_srat1[];
extern struct acpi_dmtable_info acpi_dm_table_info_tcpa[];
extern struct acpi_dmtable_info acpi_dm_table_info_wdrt[];

/*
 * dmtable
 */
void acpi_dm_dump_data_table(struct acpi_table_header *table);

209
acpi_status
B
Bob Moore 已提交
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225
acpi_dm_dump_table(u32 table_length,
		   u32 table_offset,
		   void *table,
		   u32 sub_table_length, struct acpi_dmtable_info *info);

void acpi_dm_line_header(u32 offset, u32 byte_length, char *name);

void acpi_dm_line_header2(u32 offset, u32 byte_length, char *name, u32 value);

/*
 * dmtbdump
 */
void acpi_dm_dump_asf(struct acpi_table_header *table);

void acpi_dm_dump_cpep(struct acpi_table_header *table);

B
Bob Moore 已提交
226 227
void acpi_dm_dump_dmar(struct acpi_table_header *table);

228 229 230 231
void acpi_dm_dump_einj(struct acpi_table_header *table);

void acpi_dm_dump_erst(struct acpi_table_header *table);

B
Bob Moore 已提交
232 233
void acpi_dm_dump_fadt(struct acpi_table_header *table);

234
void acpi_dm_dump_hest(struct acpi_table_header *table);
B
Bob Moore 已提交
235 236 237 238 239 240 241 242 243 244 245

void acpi_dm_dump_mcfg(struct acpi_table_header *table);

void acpi_dm_dump_madt(struct acpi_table_header *table);

u32 acpi_dm_dump_rsdp(struct acpi_table_header *table);

void acpi_dm_dump_rsdt(struct acpi_table_header *table);

void acpi_dm_dump_slit(struct acpi_table_header *table);

246 247
void acpi_dm_dump_srat(struct acpi_table_header *table);

B
Bob Moore 已提交
248 249
void acpi_dm_dump_xsdt(struct acpi_table_header *table);

L
Linus Torvalds 已提交
250 251 252 253
/*
 * dmwalk
 */
void
L
Len Brown 已提交
254 255
acpi_dm_disassemble(struct acpi_walk_state *walk_state,
		    union acpi_parse_object *origin, u32 num_opcodes);
L
Linus Torvalds 已提交
256

B
Bob Moore 已提交
257 258 259 260 261
void
acpi_dm_walk_parse_tree(union acpi_parse_object *op,
			asl_walk_callback descending_callback,
			asl_walk_callback ascending_callback, void *context);

R
Robert Moore 已提交
262 263 264
/*
 * dmopcode
 */
L
Linus Torvalds 已提交
265
void
L
Len Brown 已提交
266 267 268
acpi_dm_disassemble_one_op(struct acpi_walk_state *walk_state,
			   struct acpi_op_walk_info *info,
			   union acpi_parse_object *op);
L
Linus Torvalds 已提交
269

L
Len Brown 已提交
270
void acpi_dm_decode_internal_object(union acpi_operand_object *obj_desc);
L
Linus Torvalds 已提交
271

L
Len Brown 已提交
272
u32 acpi_dm_list_type(union acpi_parse_object *op);
L
Linus Torvalds 已提交
273

L
Len Brown 已提交
274
void acpi_dm_method_flags(union acpi_parse_object *op);
L
Linus Torvalds 已提交
275

L
Len Brown 已提交
276
void acpi_dm_field_flags(union acpi_parse_object *op);
L
Linus Torvalds 已提交
277

L
Len Brown 已提交
278
void acpi_dm_address_space(u8 space_id);
L
Linus Torvalds 已提交
279

L
Len Brown 已提交
280
void acpi_dm_region_flags(union acpi_parse_object *op);
L
Linus Torvalds 已提交
281

L
Len Brown 已提交
282
void acpi_dm_match_op(union acpi_parse_object *op);
L
Linus Torvalds 已提交
283

L
Len Brown 已提交
284
u8 acpi_dm_comma_if_list_member(union acpi_parse_object *op);
L
Linus Torvalds 已提交
285

L
Len Brown 已提交
286
void acpi_dm_comma_if_field_member(union acpi_parse_object *op);
L
Linus Torvalds 已提交
287 288

/*
R
Robert Moore 已提交
289
 * dmnames
L
Linus Torvalds 已提交
290
 */
L
Len Brown 已提交
291
u32 acpi_dm_dump_name(char *name);
R
Robert Moore 已提交
292 293

acpi_status
L
Len Brown 已提交
294 295
acpi_ps_display_object_pathname(struct acpi_walk_state *walk_state,
				union acpi_parse_object *op);
R
Robert Moore 已提交
296

L
Len Brown 已提交
297
void acpi_dm_namestring(char *name);
L
Linus Torvalds 已提交
298

R
Robert Moore 已提交
299 300 301
/*
 * dmobject
 */
L
Linus Torvalds 已提交
302
void
L
Len Brown 已提交
303 304
acpi_dm_display_internal_object(union acpi_operand_object *obj_desc,
				struct acpi_walk_state *walk_state);
L
Linus Torvalds 已提交
305

L
Len Brown 已提交
306
void acpi_dm_display_arguments(struct acpi_walk_state *walk_state);
L
Linus Torvalds 已提交
307

L
Len Brown 已提交
308
void acpi_dm_display_locals(struct acpi_walk_state *walk_state);
L
Linus Torvalds 已提交
309 310

void
L
Len Brown 已提交
311 312 313
acpi_dm_dump_method_info(acpi_status status,
			 struct acpi_walk_state *walk_state,
			 union acpi_parse_object *op);
L
Linus Torvalds 已提交
314 315 316 317

/*
 * dmbuffer
 */
L
Len Brown 已提交
318
void acpi_dm_disasm_byte_list(u32 level, u8 * byte_data, u32 byte_count);
R
Robert Moore 已提交
319 320

void
L
Len Brown 已提交
321
acpi_dm_byte_list(struct acpi_op_walk_info *info, union acpi_parse_object *op);
L
Linus Torvalds 已提交
322

L
Len Brown 已提交
323
void acpi_dm_is_eisa_id(union acpi_parse_object *op);
L
Linus Torvalds 已提交
324

L
Len Brown 已提交
325
void acpi_dm_eisa_id(u32 encoded_id);
L
Linus Torvalds 已提交
326

L
Len Brown 已提交
327
u8 acpi_dm_is_unicode_buffer(union acpi_parse_object *op);
L
Linus Torvalds 已提交
328

L
Len Brown 已提交
329
u8 acpi_dm_is_string_buffer(union acpi_parse_object *op);
L
Linus Torvalds 已提交
330 331 332 333

/*
 * dmresrc
 */
B
Bob Moore 已提交
334 335 336 337 338 339 340 341
void acpi_dm_dump_integer8(u8 value, char *name);

void acpi_dm_dump_integer16(u16 value, char *name);

void acpi_dm_dump_integer32(u32 value, char *name);

void acpi_dm_dump_integer64(u64 value, char *name);

L
Linus Torvalds 已提交
342
void
B
Bob Moore 已提交
343
acpi_dm_resource_template(struct acpi_op_walk_info *info,
B
Bob Moore 已提交
344
			  union acpi_parse_object *op,
B
Bob Moore 已提交
345
			  u8 * byte_data, u32 byte_count);
L
Linus Torvalds 已提交
346

347
acpi_status acpi_dm_is_resource_template(union acpi_parse_object *op);
L
Linus Torvalds 已提交
348

L
Len Brown 已提交
349
void acpi_dm_indent(u32 level);
L
Linus Torvalds 已提交
350

L
Len Brown 已提交
351
void acpi_dm_bit_list(u16 mask);
L
Linus Torvalds 已提交
352

L
Len Brown 已提交
353
void acpi_dm_decode_attribute(u8 attribute);
R
Robert Moore 已提交
354

B
Bob Moore 已提交
355 356
void acpi_dm_descriptor_name(void);

L
Linus Torvalds 已提交
357 358 359 360
/*
 * dmresrcl
 */
void
B
Bob Moore 已提交
361
acpi_dm_word_descriptor(union aml_resource *resource, u32 length, u32 level);
L
Linus Torvalds 已提交
362 363

void
B
Bob Moore 已提交
364
acpi_dm_dword_descriptor(union aml_resource *resource, u32 length, u32 level);
L
Linus Torvalds 已提交
365 366

void
B
Bob Moore 已提交
367
acpi_dm_extended_descriptor(union aml_resource *resource,
L
Len Brown 已提交
368
			    u32 length, u32 level);
L
Linus Torvalds 已提交
369 370

void
B
Bob Moore 已提交
371
acpi_dm_qword_descriptor(union aml_resource *resource, u32 length, u32 level);
L
Linus Torvalds 已提交
372 373

void
B
Bob Moore 已提交
374
acpi_dm_memory24_descriptor(union aml_resource *resource,
L
Len Brown 已提交
375
			    u32 length, u32 level);
L
Linus Torvalds 已提交
376 377

void
B
Bob Moore 已提交
378
acpi_dm_memory32_descriptor(union aml_resource *resource,
L
Len Brown 已提交
379
			    u32 length, u32 level);
L
Linus Torvalds 已提交
380 381

void
B
Bob Moore 已提交
382
acpi_dm_fixed_memory32_descriptor(union aml_resource *resource,
R
Robert Moore 已提交
383
				  u32 length, u32 level);
L
Linus Torvalds 已提交
384 385

void
B
Bob Moore 已提交
386
acpi_dm_generic_register_descriptor(union aml_resource *resource,
L
Len Brown 已提交
387
				    u32 length, u32 level);
L
Linus Torvalds 已提交
388 389

void
B
Bob Moore 已提交
390
acpi_dm_interrupt_descriptor(union aml_resource *resource,
L
Len Brown 已提交
391
			     u32 length, u32 level);
L
Linus Torvalds 已提交
392 393

void
B
Bob Moore 已提交
394
acpi_dm_vendor_large_descriptor(union aml_resource *resource,
L
Len Brown 已提交
395
				u32 length, u32 level);
L
Linus Torvalds 已提交
396

B
Bob Moore 已提交
397 398
void acpi_dm_vendor_common(char *name, u8 * byte_data, u32 length, u32 level);

L
Linus Torvalds 已提交
399 400 401 402
/*
 * dmresrcs
 */
void
B
Bob Moore 已提交
403
acpi_dm_irq_descriptor(union aml_resource *resource, u32 length, u32 level);
L
Linus Torvalds 已提交
404 405

void
B
Bob Moore 已提交
406
acpi_dm_dma_descriptor(union aml_resource *resource, u32 length, u32 level);
L
Linus Torvalds 已提交
407

B
Bob Moore 已提交
408
void acpi_dm_io_descriptor(union aml_resource *resource, u32 length, u32 level);
L
Linus Torvalds 已提交
409 410

void
B
Bob Moore 已提交
411
acpi_dm_fixed_io_descriptor(union aml_resource *resource,
L
Len Brown 已提交
412
			    u32 length, u32 level);
L
Linus Torvalds 已提交
413 414

void
B
Bob Moore 已提交
415
acpi_dm_start_dependent_descriptor(union aml_resource *resource,
L
Len Brown 已提交
416
				   u32 length, u32 level);
L
Linus Torvalds 已提交
417 418

void
B
Bob Moore 已提交
419
acpi_dm_end_dependent_descriptor(union aml_resource *resource,
L
Len Brown 已提交
420
				 u32 length, u32 level);
L
Linus Torvalds 已提交
421 422

void
B
Bob Moore 已提交
423
acpi_dm_vendor_small_descriptor(union aml_resource *resource,
L
Len Brown 已提交
424
				u32 length, u32 level);
L
Linus Torvalds 已提交
425 426 427 428

/*
 * dmutils
 */
B
Bob Moore 已提交
429
void acpi_dm_add_to_external_list(char *path, u8 type, u32 value);
L
Linus Torvalds 已提交
430

B
Bob Moore 已提交
431 432 433 434 435 436 437 438 439
/*
 * dmrestag
 */
void acpi_dm_find_resources(union acpi_parse_object *root);

void
acpi_dm_check_resource_reference(union acpi_parse_object *op,
				 struct acpi_walk_state *walk_state);

L
Len Brown 已提交
440
#endif				/* __ACDISASM_H__ */