0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef __ACINTERP_H__
0011 #define __ACINTERP_H__
0012
0013 #define ACPI_WALK_OPERANDS (&(walk_state->operands [walk_state->num_operands -1]))
0014
0015
0016
0017 #define ACPI_EXD_OFFSET(f) (u8) ACPI_OFFSET (union acpi_operand_object,f)
0018 #define ACPI_EXD_NSOFFSET(f) (u8) ACPI_OFFSET (struct acpi_namespace_node,f)
0019 #define ACPI_EXD_TABLE_SIZE(name) (sizeof(name) / sizeof (struct acpi_exdump_info))
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #if (!defined(ACPI_MISALIGNMENT_NOT_SUPPORTED) && !defined(ACPI_PACKED_POINTERS_NOT_SUPPORTED))
0030 #pragma pack(1)
0031 #endif
0032
0033 typedef const struct acpi_exdump_info {
0034 u8 opcode;
0035 u8 offset;
0036 const char *name;
0037
0038 } acpi_exdump_info;
0039
0040
0041
0042 #define ACPI_EXD_INIT 0
0043 #define ACPI_EXD_TYPE 1
0044 #define ACPI_EXD_UINT8 2
0045 #define ACPI_EXD_UINT16 3
0046 #define ACPI_EXD_UINT32 4
0047 #define ACPI_EXD_UINT64 5
0048 #define ACPI_EXD_LITERAL 6
0049 #define ACPI_EXD_POINTER 7
0050 #define ACPI_EXD_ADDRESS 8
0051 #define ACPI_EXD_STRING 9
0052 #define ACPI_EXD_BUFFER 10
0053 #define ACPI_EXD_PACKAGE 11
0054 #define ACPI_EXD_FIELD 12
0055 #define ACPI_EXD_REFERENCE 13
0056 #define ACPI_EXD_LIST 14
0057 #define ACPI_EXD_HDLR_LIST 15
0058 #define ACPI_EXD_RGN_LIST 16
0059 #define ACPI_EXD_NODE 17
0060
0061
0062
0063 #pragma pack()
0064
0065
0066
0067
0068 acpi_status
0069 acpi_ex_convert_to_integer(union acpi_operand_object *obj_desc,
0070 union acpi_operand_object **result_desc,
0071 u32 implicit_conversion);
0072
0073 acpi_status
0074 acpi_ex_convert_to_buffer(union acpi_operand_object *obj_desc,
0075 union acpi_operand_object **result_desc);
0076
0077 acpi_status
0078 acpi_ex_convert_to_string(union acpi_operand_object *obj_desc,
0079 union acpi_operand_object **result_desc, u32 type);
0080
0081
0082
0083 #define ACPI_EXPLICIT_BYTE_COPY 0x00000000
0084 #define ACPI_EXPLICIT_CONVERT_HEX 0x00000001
0085 #define ACPI_IMPLICIT_CONVERT_HEX 0x00000002
0086 #define ACPI_EXPLICIT_CONVERT_DECIMAL 0x00000003
0087
0088 acpi_status
0089 acpi_ex_convert_to_target_type(acpi_object_type destination_type,
0090 union acpi_operand_object *source_desc,
0091 union acpi_operand_object **result_desc,
0092 struct acpi_walk_state *walk_state);
0093
0094
0095
0096
0097 void
0098 acpi_ex_do_debug_object(union acpi_operand_object *source_desc,
0099 u32 level, u32 index);
0100
0101 void
0102 acpi_ex_start_trace_method(struct acpi_namespace_node *method_node,
0103 union acpi_operand_object *obj_desc,
0104 struct acpi_walk_state *walk_state);
0105
0106 void
0107 acpi_ex_stop_trace_method(struct acpi_namespace_node *method_node,
0108 union acpi_operand_object *obj_desc,
0109 struct acpi_walk_state *walk_state);
0110
0111 void
0112 acpi_ex_start_trace_opcode(union acpi_parse_object *op,
0113 struct acpi_walk_state *walk_state);
0114
0115 void
0116 acpi_ex_stop_trace_opcode(union acpi_parse_object *op,
0117 struct acpi_walk_state *walk_state);
0118
0119 void
0120 acpi_ex_trace_point(acpi_trace_event_type type,
0121 u8 begin, u8 *aml, char *pathname);
0122
0123
0124
0125
0126 acpi_status
0127 acpi_ex_get_protocol_buffer_length(u32 protocol_id, u32 *return_length);
0128
0129 acpi_status
0130 acpi_ex_common_buffer_setup(union acpi_operand_object *obj_desc,
0131 u32 buffer_length, u32 * datum_count);
0132
0133 acpi_status
0134 acpi_ex_write_with_update_rule(union acpi_operand_object *obj_desc,
0135 u64 mask,
0136 u64 field_value, u32 field_datum_byte_offset);
0137
0138 void
0139 acpi_ex_get_buffer_datum(u64 *datum,
0140 void *buffer,
0141 u32 buffer_length,
0142 u32 byte_granularity, u32 buffer_offset);
0143
0144 void
0145 acpi_ex_set_buffer_datum(u64 merged_datum,
0146 void *buffer,
0147 u32 buffer_length,
0148 u32 byte_granularity, u32 buffer_offset);
0149
0150 acpi_status
0151 acpi_ex_read_data_from_field(struct acpi_walk_state *walk_state,
0152 union acpi_operand_object *obj_desc,
0153 union acpi_operand_object **ret_buffer_desc);
0154
0155 acpi_status
0156 acpi_ex_write_data_to_field(union acpi_operand_object *source_desc,
0157 union acpi_operand_object *obj_desc,
0158 union acpi_operand_object **result_desc);
0159
0160
0161
0162
0163 acpi_status
0164 acpi_ex_extract_from_field(union acpi_operand_object *obj_desc,
0165 void *buffer, u32 buffer_length);
0166
0167 acpi_status
0168 acpi_ex_insert_into_field(union acpi_operand_object *obj_desc,
0169 void *buffer, u32 buffer_length);
0170
0171 acpi_status
0172 acpi_ex_access_region(union acpi_operand_object *obj_desc,
0173 u32 field_datum_byte_offset, u64 *value, u32 read_write);
0174
0175
0176
0177
0178 acpi_status
0179 acpi_ex_get_object_reference(union acpi_operand_object *obj_desc,
0180 union acpi_operand_object **return_desc,
0181 struct acpi_walk_state *walk_state);
0182
0183 acpi_status
0184 acpi_ex_concat_template(union acpi_operand_object *obj_desc,
0185 union acpi_operand_object *obj_desc2,
0186 union acpi_operand_object **actual_return_desc,
0187 struct acpi_walk_state *walk_state);
0188
0189 acpi_status
0190 acpi_ex_do_concatenate(union acpi_operand_object *obj_desc,
0191 union acpi_operand_object *obj_desc2,
0192 union acpi_operand_object **actual_return_desc,
0193 struct acpi_walk_state *walk_state);
0194
0195 acpi_status
0196 acpi_ex_do_logical_numeric_op(u16 opcode,
0197 u64 integer0, u64 integer1, u8 *logical_result);
0198
0199 acpi_status
0200 acpi_ex_do_logical_op(u16 opcode,
0201 union acpi_operand_object *operand0,
0202 union acpi_operand_object *operand1, u8 *logical_result);
0203
0204 u64 acpi_ex_do_math_op(u16 opcode, u64 operand0, u64 operand1);
0205
0206 acpi_status acpi_ex_create_mutex(struct acpi_walk_state *walk_state);
0207
0208 acpi_status acpi_ex_create_processor(struct acpi_walk_state *walk_state);
0209
0210 acpi_status acpi_ex_create_power_resource(struct acpi_walk_state *walk_state);
0211
0212 acpi_status
0213 acpi_ex_create_region(u8 * aml_start,
0214 u32 aml_length,
0215 u8 region_space, struct acpi_walk_state *walk_state);
0216
0217 acpi_status acpi_ex_create_event(struct acpi_walk_state *walk_state);
0218
0219 acpi_status acpi_ex_create_alias(struct acpi_walk_state *walk_state);
0220
0221 acpi_status
0222 acpi_ex_create_method(u8 * aml_start,
0223 u32 aml_length, struct acpi_walk_state *walk_state);
0224
0225
0226
0227
0228 acpi_status
0229 acpi_ex_load_op(union acpi_operand_object *obj_desc,
0230 union acpi_operand_object *target,
0231 struct acpi_walk_state *walk_state);
0232
0233 acpi_status
0234 acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
0235 union acpi_operand_object **return_desc);
0236
0237 acpi_status acpi_ex_unload_table(union acpi_operand_object *ddb_handle);
0238
0239
0240
0241
0242 acpi_status
0243 acpi_ex_acquire_mutex(union acpi_operand_object *time_desc,
0244 union acpi_operand_object *obj_desc,
0245 struct acpi_walk_state *walk_state);
0246
0247 acpi_status
0248 acpi_ex_acquire_mutex_object(u16 timeout,
0249 union acpi_operand_object *obj_desc,
0250 acpi_thread_id thread_id);
0251
0252 acpi_status
0253 acpi_ex_release_mutex(union acpi_operand_object *obj_desc,
0254 struct acpi_walk_state *walk_state);
0255
0256 acpi_status acpi_ex_release_mutex_object(union acpi_operand_object *obj_desc);
0257
0258 void acpi_ex_release_all_mutexes(struct acpi_thread_state *thread);
0259
0260 void acpi_ex_unlink_mutex(union acpi_operand_object *obj_desc);
0261
0262
0263
0264
0265 acpi_status
0266 acpi_ex_prep_common_field_object(union acpi_operand_object *obj_desc,
0267 u8 field_flags,
0268 u8 field_attribute,
0269 u32 field_bit_position, u32 field_bit_length);
0270
0271 acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info);
0272
0273
0274
0275
0276 acpi_status
0277 acpi_ex_read_serial_bus(union acpi_operand_object *obj_desc,
0278 union acpi_operand_object **return_buffer);
0279
0280 acpi_status
0281 acpi_ex_write_serial_bus(union acpi_operand_object *source_desc,
0282 union acpi_operand_object *obj_desc,
0283 union acpi_operand_object **return_buffer);
0284
0285 acpi_status
0286 acpi_ex_read_gpio(union acpi_operand_object *obj_desc, void *buffer);
0287
0288 acpi_status
0289 acpi_ex_write_gpio(union acpi_operand_object *source_desc,
0290 union acpi_operand_object *obj_desc,
0291 union acpi_operand_object **return_buffer);
0292
0293
0294
0295
0296 acpi_status
0297 acpi_ex_system_do_notify_op(union acpi_operand_object *value,
0298 union acpi_operand_object *obj_desc);
0299
0300 acpi_status acpi_ex_system_do_sleep(u64 time);
0301
0302 acpi_status acpi_ex_system_do_stall(u32 time);
0303
0304 acpi_status acpi_ex_system_signal_event(union acpi_operand_object *obj_desc);
0305
0306 acpi_status
0307 acpi_ex_system_wait_event(union acpi_operand_object *time,
0308 union acpi_operand_object *obj_desc);
0309
0310 acpi_status acpi_ex_system_reset_event(union acpi_operand_object *obj_desc);
0311
0312 acpi_status
0313 acpi_ex_system_wait_semaphore(acpi_semaphore semaphore, u16 timeout);
0314
0315 acpi_status acpi_ex_system_wait_mutex(acpi_mutex mutex, u16 timeout);
0316
0317
0318
0319
0320 acpi_status acpi_ex_opcode_0A_0T_1R(struct acpi_walk_state *walk_state);
0321
0322 acpi_status acpi_ex_opcode_1A_0T_0R(struct acpi_walk_state *walk_state);
0323
0324 acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state);
0325
0326 acpi_status acpi_ex_opcode_1A_1T_1R(struct acpi_walk_state *walk_state);
0327
0328 acpi_status acpi_ex_opcode_1A_1T_0R(struct acpi_walk_state *walk_state);
0329
0330
0331
0332
0333 acpi_status acpi_ex_opcode_2A_0T_0R(struct acpi_walk_state *walk_state);
0334
0335 acpi_status acpi_ex_opcode_2A_0T_1R(struct acpi_walk_state *walk_state);
0336
0337 acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state);
0338
0339 acpi_status acpi_ex_opcode_2A_2T_1R(struct acpi_walk_state *walk_state);
0340
0341
0342
0343
0344 acpi_status acpi_ex_opcode_3A_0T_0R(struct acpi_walk_state *walk_state);
0345
0346 acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state);
0347
0348
0349
0350
0351 acpi_status acpi_ex_opcode_6A_0T_1R(struct acpi_walk_state *walk_state);
0352
0353
0354
0355
0356 acpi_status
0357 acpi_ex_resolve_to_value(union acpi_operand_object **stack_ptr,
0358 struct acpi_walk_state *walk_state);
0359
0360 acpi_status
0361 acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
0362 union acpi_operand_object *operand,
0363 acpi_object_type *return_type,
0364 union acpi_operand_object **return_desc);
0365
0366
0367
0368
0369 acpi_status
0370 acpi_ex_resolve_node_to_value(struct acpi_namespace_node **stack_ptr,
0371 struct acpi_walk_state *walk_state);
0372
0373
0374
0375
0376 acpi_status
0377 acpi_ex_resolve_operands(u16 opcode,
0378 union acpi_operand_object **stack_ptr,
0379 struct acpi_walk_state *walk_state);
0380
0381
0382
0383
0384 void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth);
0385
0386 void
0387 acpi_ex_dump_operands(union acpi_operand_object **operands,
0388 const char *opcode_name, u32 num_opcodes);
0389
0390 void
0391 acpi_ex_dump_object_descriptor(union acpi_operand_object *object, u32 flags);
0392
0393 void acpi_ex_dump_namespace_node(struct acpi_namespace_node *node, u32 flags);
0394
0395
0396
0397
0398 acpi_status
0399 acpi_ex_get_name_string(acpi_object_type data_type,
0400 u8 * in_aml_address,
0401 char **out_name_string, u32 * out_name_length);
0402
0403
0404
0405
0406 acpi_status
0407 acpi_ex_store(union acpi_operand_object *val_desc,
0408 union acpi_operand_object *dest_desc,
0409 struct acpi_walk_state *walk_state);
0410
0411 acpi_status
0412 acpi_ex_store_object_to_node(union acpi_operand_object *source_desc,
0413 struct acpi_namespace_node *node,
0414 struct acpi_walk_state *walk_state,
0415 u8 implicit_conversion);
0416
0417
0418
0419
0420 acpi_status
0421 acpi_ex_resolve_object(union acpi_operand_object **source_desc_ptr,
0422 acpi_object_type target_type,
0423 struct acpi_walk_state *walk_state);
0424
0425 acpi_status
0426 acpi_ex_store_object_to_object(union acpi_operand_object *source_desc,
0427 union acpi_operand_object *dest_desc,
0428 union acpi_operand_object **new_desc,
0429 struct acpi_walk_state *walk_state);
0430
0431
0432
0433
0434 acpi_status
0435 acpi_ex_store_buffer_to_buffer(union acpi_operand_object *source_desc,
0436 union acpi_operand_object *target_desc);
0437
0438 acpi_status
0439 acpi_ex_store_string_to_string(union acpi_operand_object *source_desc,
0440 union acpi_operand_object *target_desc);
0441
0442
0443
0444
0445 acpi_status
0446 acpi_ex_copy_integer_to_index_field(union acpi_operand_object *source_desc,
0447 union acpi_operand_object *target_desc);
0448
0449 acpi_status
0450 acpi_ex_copy_integer_to_bank_field(union acpi_operand_object *source_desc,
0451 union acpi_operand_object *target_desc);
0452
0453 acpi_status
0454 acpi_ex_copy_data_to_named_field(union acpi_operand_object *source_desc,
0455 struct acpi_namespace_node *node);
0456
0457 acpi_status
0458 acpi_ex_copy_integer_to_buffer_field(union acpi_operand_object *source_desc,
0459 union acpi_operand_object *target_desc);
0460
0461
0462
0463
0464 void acpi_ex_enter_interpreter(void);
0465
0466 void acpi_ex_exit_interpreter(void);
0467
0468 u8 acpi_ex_truncate_for32bit_table(union acpi_operand_object *obj_desc);
0469
0470 void acpi_ex_acquire_global_lock(u32 rule);
0471
0472 void acpi_ex_release_global_lock(u32 rule);
0473
0474 void acpi_ex_eisa_id_to_string(char *dest, u64 compressed_id);
0475
0476 void acpi_ex_integer_to_string(char *dest, u64 value);
0477
0478 void acpi_ex_pci_cls_to_string(char *dest, u8 class_code[3]);
0479
0480 u8 acpi_is_valid_space_id(u8 space_id);
0481
0482
0483
0484
0485 acpi_status
0486 acpi_ex_system_memory_space_handler(u32 function,
0487 acpi_physical_address address,
0488 u32 bit_width,
0489 u64 *value,
0490 void *handler_context,
0491 void *region_context);
0492
0493 acpi_status
0494 acpi_ex_system_io_space_handler(u32 function,
0495 acpi_physical_address address,
0496 u32 bit_width,
0497 u64 *value,
0498 void *handler_context, void *region_context);
0499
0500 acpi_status
0501 acpi_ex_pci_config_space_handler(u32 function,
0502 acpi_physical_address address,
0503 u32 bit_width,
0504 u64 *value,
0505 void *handler_context, void *region_context);
0506
0507 acpi_status
0508 acpi_ex_cmos_space_handler(u32 function,
0509 acpi_physical_address address,
0510 u32 bit_width,
0511 u64 *value,
0512 void *handler_context, void *region_context);
0513
0514 acpi_status
0515 acpi_ex_pci_bar_space_handler(u32 function,
0516 acpi_physical_address address,
0517 u32 bit_width,
0518 u64 *value,
0519 void *handler_context, void *region_context);
0520
0521 acpi_status
0522 acpi_ex_embedded_controller_space_handler(u32 function,
0523 acpi_physical_address address,
0524 u32 bit_width,
0525 u64 *value,
0526 void *handler_context,
0527 void *region_context);
0528
0529 acpi_status
0530 acpi_ex_sm_bus_space_handler(u32 function,
0531 acpi_physical_address address,
0532 u32 bit_width,
0533 u64 *value,
0534 void *handler_context, void *region_context);
0535
0536 acpi_status
0537 acpi_ex_data_table_space_handler(u32 function,
0538 acpi_physical_address address,
0539 u32 bit_width,
0540 u64 *value,
0541 void *handler_context, void *region_context);
0542
0543 #endif