linux/drivers/acpi/acpica/acdispat.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
   2/******************************************************************************
   3 *
   4 * Name: acdispat.h - dispatcher (parser to interpreter interface)
   5 *
   6 * Copyright (C) 2000 - 2021, Intel Corp.
   7 *
   8 *****************************************************************************/
   9
  10#ifndef _ACDISPAT_H_
  11#define _ACDISPAT_H_
  12
  13#define NAMEOF_LOCAL_NTE    "__L0"
  14#define NAMEOF_ARG_NTE      "__A0"
  15
  16/*
  17 * dsargs - execution of dynamic arguments for static objects
  18 */
  19acpi_status
  20acpi_ds_get_buffer_field_arguments(union acpi_operand_object *obj_desc);
  21
  22acpi_status
  23acpi_ds_get_bank_field_arguments(union acpi_operand_object *obj_desc);
  24
  25acpi_status acpi_ds_get_region_arguments(union acpi_operand_object *rgn_desc);
  26
  27acpi_status acpi_ds_get_buffer_arguments(union acpi_operand_object *obj_desc);
  28
  29acpi_status acpi_ds_get_package_arguments(union acpi_operand_object *obj_desc);
  30
  31/*
  32 * dscontrol - support for execution control opcodes
  33 */
  34acpi_status
  35acpi_ds_exec_begin_control_op(struct acpi_walk_state *walk_state,
  36                              union acpi_parse_object *op);
  37
  38acpi_status
  39acpi_ds_exec_end_control_op(struct acpi_walk_state *walk_state,
  40                            union acpi_parse_object *op);
  41
  42/*
  43 * dsopcode - support for late operand evaluation
  44 */
  45acpi_status
  46acpi_ds_eval_buffer_field_operands(struct acpi_walk_state *walk_state,
  47                                   union acpi_parse_object *op);
  48
  49acpi_status
  50acpi_ds_eval_region_operands(struct acpi_walk_state *walk_state,
  51                             union acpi_parse_object *op);
  52
  53acpi_status
  54acpi_ds_eval_table_region_operands(struct acpi_walk_state *walk_state,
  55                                   union acpi_parse_object *op);
  56
  57acpi_status
  58acpi_ds_eval_data_object_operands(struct acpi_walk_state *walk_state,
  59                                  union acpi_parse_object *op,
  60                                  union acpi_operand_object *obj_desc);
  61
  62acpi_status
  63acpi_ds_eval_bank_field_operands(struct acpi_walk_state *walk_state,
  64                                 union acpi_parse_object *op);
  65
  66acpi_status acpi_ds_initialize_region(acpi_handle obj_handle);
  67
  68/*
  69 * dsexec - Parser/Interpreter interface, method execution callbacks
  70 */
  71acpi_status
  72acpi_ds_get_predicate_value(struct acpi_walk_state *walk_state,
  73                            union acpi_operand_object *result_obj);
  74
  75acpi_status
  76acpi_ds_exec_begin_op(struct acpi_walk_state *walk_state,
  77                      union acpi_parse_object **out_op);
  78
  79acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *state);
  80
  81/*
  82 * dsfield - Parser/Interpreter interface for AML fields
  83 */
  84acpi_status
  85acpi_ds_create_field(union acpi_parse_object *op,
  86                     struct acpi_namespace_node *region_node,
  87                     struct acpi_walk_state *walk_state);
  88
  89acpi_status
  90acpi_ds_create_bank_field(union acpi_parse_object *op,
  91                          struct acpi_namespace_node *region_node,
  92                          struct acpi_walk_state *walk_state);
  93
  94acpi_status
  95acpi_ds_create_index_field(union acpi_parse_object *op,
  96                           struct acpi_namespace_node *region_node,
  97                           struct acpi_walk_state *walk_state);
  98
  99acpi_status
 100acpi_ds_create_buffer_field(union acpi_parse_object *op,
 101                            struct acpi_walk_state *walk_state);
 102
 103acpi_status
 104acpi_ds_init_field_objects(union acpi_parse_object *op,
 105                           struct acpi_walk_state *walk_state);
 106
 107/*
 108 * dsload - Parser/Interpreter interface
 109 */
 110acpi_status
 111acpi_ds_init_callbacks(struct acpi_walk_state *walk_state, u32 pass_number);
 112
 113/* dsload - pass 1 namespace load callbacks */
 114
 115acpi_status
 116acpi_ds_load1_begin_op(struct acpi_walk_state *walk_state,
 117                       union acpi_parse_object **out_op);
 118
 119acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state);
 120
 121/* dsload - pass 2 namespace load callbacks */
 122
 123acpi_status
 124acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
 125                       union acpi_parse_object **out_op);
 126
 127acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state);
 128
 129/*
 130 * dsmthdat - method data (locals/args)
 131 */
 132acpi_status
 133acpi_ds_store_object_to_local(u8 type,
 134                              u32 index,
 135                              union acpi_operand_object *src_desc,
 136                              struct acpi_walk_state *walk_state);
 137
 138acpi_status
 139acpi_ds_method_data_get_entry(u16 opcode,
 140                              u32 index,
 141                              struct acpi_walk_state *walk_state,
 142                              union acpi_operand_object ***node);
 143
 144void acpi_ds_method_data_delete_all(struct acpi_walk_state *walk_state);
 145
 146u8 acpi_ds_is_method_value(union acpi_operand_object *obj_desc);
 147
 148acpi_status
 149acpi_ds_method_data_get_value(u8 type,
 150                              u32 index,
 151                              struct acpi_walk_state *walk_state,
 152                              union acpi_operand_object **dest_desc);
 153
 154acpi_status
 155acpi_ds_method_data_init_args(union acpi_operand_object **params,
 156                              u32 max_param_count,
 157                              struct acpi_walk_state *walk_state);
 158
 159acpi_status
 160acpi_ds_method_data_get_node(u8 type,
 161                             u32 index,
 162                             struct acpi_walk_state *walk_state,
 163                             struct acpi_namespace_node **node);
 164
 165void acpi_ds_method_data_init(struct acpi_walk_state *walk_state);
 166
 167/*
 168 * dsmethod - Parser/Interpreter interface - control method parsing
 169 */
 170acpi_status
 171acpi_ds_auto_serialize_method(struct acpi_namespace_node *node,
 172                              union acpi_operand_object *obj_desc);
 173
 174acpi_status
 175acpi_ds_call_control_method(struct acpi_thread_state *thread,
 176                            struct acpi_walk_state *walk_state,
 177                            union acpi_parse_object *op);
 178
 179acpi_status
 180acpi_ds_restart_control_method(struct acpi_walk_state *walk_state,
 181                               union acpi_operand_object *return_desc);
 182
 183void
 184acpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
 185                                 struct acpi_walk_state *walk_state);
 186
 187acpi_status
 188acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
 189                               union acpi_operand_object *obj_desc,
 190                               struct acpi_walk_state *walk_state);
 191
 192acpi_status
 193acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state);
 194
 195/*
 196 * dsinit
 197 */
 198acpi_status
 199acpi_ds_initialize_objects(u32 table_index,
 200                           struct acpi_namespace_node *start_node);
 201
 202/*
 203 * dsobject - Parser/Interpreter interface - object initialization and conversion
 204 */
 205acpi_status
 206acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
 207                              union acpi_parse_object *op,
 208                              union acpi_operand_object **obj_desc_ptr);
 209
 210acpi_status
 211acpi_ds_build_internal_buffer_obj(struct acpi_walk_state *walk_state,
 212                                  union acpi_parse_object *op,
 213                                  u32 buffer_length,
 214                                  union acpi_operand_object **obj_desc_ptr);
 215
 216acpi_status
 217acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
 218                                   union acpi_parse_object *op,
 219                                   u32 package_length,
 220                                   union acpi_operand_object **obj_desc);
 221
 222acpi_status
 223acpi_ds_init_object_from_op(struct acpi_walk_state *walk_state,
 224                            union acpi_parse_object *op,
 225                            u16 opcode, union acpi_operand_object **obj_desc);
 226
 227acpi_status
 228acpi_ds_create_node(struct acpi_walk_state *walk_state,
 229                    struct acpi_namespace_node *node,
 230                    union acpi_parse_object *op);
 231
 232/*
 233 * dspkginit - Package object initialization
 234 */
 235acpi_status
 236acpi_ds_init_package_element(u8 object_type,
 237                             union acpi_operand_object *source_object,
 238                             union acpi_generic_state *state, void *context);
 239
 240/*
 241 * dsutils - Parser/Interpreter interface utility routines
 242 */
 243void acpi_ds_clear_implicit_return(struct acpi_walk_state *walk_state);
 244
 245u8
 246acpi_ds_do_implicit_return(union acpi_operand_object *return_desc,
 247                           struct acpi_walk_state *walk_state,
 248                           u8 add_reference);
 249
 250u8
 251acpi_ds_is_result_used(union acpi_parse_object *op,
 252                       struct acpi_walk_state *walk_state);
 253
 254void
 255acpi_ds_delete_result_if_not_used(union acpi_parse_object *op,
 256                                  union acpi_operand_object *result_obj,
 257                                  struct acpi_walk_state *walk_state);
 258
 259acpi_status
 260acpi_ds_create_operand(struct acpi_walk_state *walk_state,
 261                       union acpi_parse_object *arg, u32 args_remaining);
 262
 263acpi_status
 264acpi_ds_create_operands(struct acpi_walk_state *walk_state,
 265                        union acpi_parse_object *first_arg);
 266
 267acpi_status acpi_ds_resolve_operands(struct acpi_walk_state *walk_state);
 268
 269void acpi_ds_clear_operands(struct acpi_walk_state *walk_state);
 270
 271acpi_status acpi_ds_evaluate_name_path(struct acpi_walk_state *walk_state);
 272
 273/*
 274 * dswscope - Scope Stack manipulation
 275 */
 276acpi_status
 277acpi_ds_scope_stack_push(struct acpi_namespace_node *node,
 278                         acpi_object_type type,
 279                         struct acpi_walk_state *walk_state);
 280
 281acpi_status acpi_ds_scope_stack_pop(struct acpi_walk_state *walk_state);
 282
 283void acpi_ds_scope_stack_clear(struct acpi_walk_state *walk_state);
 284
 285/*
 286 * dswstate - parser WALK_STATE management routines
 287 */
 288acpi_status
 289acpi_ds_obj_stack_push(void *object, struct acpi_walk_state *walk_state);
 290
 291acpi_status
 292acpi_ds_obj_stack_pop(u32 pop_count, struct acpi_walk_state *walk_state);
 293
 294struct acpi_walk_state * acpi_ds_create_walk_state(acpi_owner_id owner_id,
 295                                                   union acpi_parse_object
 296                                                   *origin,
 297                                                   union acpi_operand_object
 298                                                   *mth_desc,
 299                                                   struct acpi_thread_state
 300                                                   *thread);
 301
 302acpi_status
 303acpi_ds_init_aml_walk(struct acpi_walk_state *walk_state,
 304                      union acpi_parse_object *op,
 305                      struct acpi_namespace_node *method_node,
 306                      u8 * aml_start,
 307                      u32 aml_length,
 308                      struct acpi_evaluate_info *info, u8 pass_number);
 309
 310void
 311acpi_ds_obj_stack_pop_and_delete(u32 pop_count,
 312                                 struct acpi_walk_state *walk_state);
 313
 314void acpi_ds_delete_walk_state(struct acpi_walk_state *walk_state);
 315
 316struct acpi_walk_state *acpi_ds_pop_walk_state(struct acpi_thread_state
 317                                               *thread);
 318
 319void
 320acpi_ds_push_walk_state(struct acpi_walk_state *walk_state,
 321                        struct acpi_thread_state *thread);
 322
 323acpi_status acpi_ds_result_stack_clear(struct acpi_walk_state *walk_state);
 324
 325struct acpi_walk_state *acpi_ds_get_current_walk_state(struct acpi_thread_state
 326                                                       *thread);
 327
 328acpi_status
 329acpi_ds_result_pop(union acpi_operand_object **object,
 330                   struct acpi_walk_state *walk_state);
 331
 332acpi_status
 333acpi_ds_result_push(union acpi_operand_object *object,
 334                    struct acpi_walk_state *walk_state);
 335
 336/*
 337 * dsdebug - parser debugging routines
 338 */
 339void
 340acpi_ds_dump_method_stack(acpi_status status,
 341                          struct acpi_walk_state *walk_state,
 342                          union acpi_parse_object *op);
 343
 344#endif                          /* _ACDISPAT_H_ */
 345