Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
0002 /******************************************************************************
0003  *
0004  * Name: acinterp.h - Interpreter subcomponent prototypes and defines
0005  *
0006  * Copyright (C) 2000 - 2022, Intel Corp.
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 /* Macros for tables used for debug output */
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  * If possible, pack the following structures to byte alignment, since we
0023  * don't care about performance for debug output. Two cases where we cannot
0024  * pack the structures:
0025  *
0026  * 1) Hardware does not support misaligned memory transfers
0027  * 2) Compiler does not support pointers within packed structures
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 /* Values for the Opcode field above */
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  /* Operand object list */
0057 #define ACPI_EXD_HDLR_LIST              15  /* Address Handler list */
0058 #define ACPI_EXD_RGN_LIST               16  /* Region list */
0059 #define ACPI_EXD_NODE                   17  /* Namespace Node */
0060 
0061 /* restore default alignment */
0062 
0063 #pragma pack()
0064 
0065 /*
0066  * exconvrt - object conversion
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 /* Types for ->String conversion */
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  * exdebug - AML debug object
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  * exfield - ACPI AML (p-code) execution - field manipulation
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  * exfldio - low level field I/O
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  * exmisc - misc support routines
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  * exconfig - dynamic table load/unload
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  * exmutex - mutex support
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  * exprep - ACPI AML execution - prep utilities
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  * exserial - field_unit support for serial address spaces
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  * exsystem - Interface to OS services
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  * exoparg1 - ACPI AML execution, 1 operand
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  * exoparg2 - ACPI AML execution, 2 operands
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  * exoparg3 - ACPI AML execution, 3 operands
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  * exoparg6 - ACPI AML execution, 6 operands
0350  */
0351 acpi_status acpi_ex_opcode_6A_0T_1R(struct acpi_walk_state *walk_state);
0352 
0353 /*
0354  * exresolv - Object resolution and get value functions
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  * exresnte - resolve namespace node
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  * exresop - resolve operand to value
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  * exdump - Interpreter debug output routines
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  * exnames - AML namestring support
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  * exstore - Object store support
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  * exstoren - resolve/store object
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  * exstorob - store object - buffer/string
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  * excopy - object copy
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  * exutils - interpreter/scanner utilities
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  * exregion - default op_region handlers
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              /* __INTERP_H__ */