linux/drivers/acpi/acpica/acparser.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
   2/******************************************************************************
   3 *
   4 * Module Name: acparser.h - AML Parser subcomponent prototypes and defines
   5 *
   6 * Copyright (C) 2000 - 2021, Intel Corp.
   7 *
   8 *****************************************************************************/
   9
  10#ifndef __ACPARSER_H__
  11#define __ACPARSER_H__
  12
  13#define OP_HAS_RETURN_VALUE             1
  14
  15/* Variable number of arguments. This field must be 32 bits */
  16
  17#define ACPI_VAR_ARGS                   ACPI_UINT32_MAX
  18
  19#define ACPI_PARSE_DELETE_TREE          0x0001
  20#define ACPI_PARSE_NO_TREE_DELETE       0x0000
  21#define ACPI_PARSE_TREE_MASK            0x0001
  22
  23#define ACPI_PARSE_LOAD_PASS1           0x0010
  24#define ACPI_PARSE_LOAD_PASS2           0x0020
  25#define ACPI_PARSE_EXECUTE              0x0030
  26#define ACPI_PARSE_MODE_MASK            0x0030
  27
  28#define ACPI_PARSE_DEFERRED_OP          0x0100
  29#define ACPI_PARSE_DISASSEMBLE          0x0200
  30
  31#define ACPI_PARSE_MODULE_LEVEL         0x0400
  32
  33/******************************************************************************
  34 *
  35 * Parser interfaces
  36 *
  37 *****************************************************************************/
  38
  39extern const u8 acpi_gbl_short_op_index[];
  40extern const u8 acpi_gbl_long_op_index[];
  41
  42/*
  43 * psxface - Parser external interfaces
  44 */
  45acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info);
  46
  47acpi_status acpi_ps_execute_table(struct acpi_evaluate_info *info);
  48
  49/*
  50 * psargs - Parse AML opcode arguments
  51 */
  52u8 *acpi_ps_get_next_package_end(struct acpi_parse_state *parser_state);
  53
  54char *acpi_ps_get_next_namestring(struct acpi_parse_state *parser_state);
  55
  56void
  57acpi_ps_get_next_simple_arg(struct acpi_parse_state *parser_state,
  58                            u32 arg_type, union acpi_parse_object *arg);
  59
  60acpi_status
  61acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state,
  62                          struct acpi_parse_state *parser_state,
  63                          union acpi_parse_object *arg,
  64                          u8 possible_method_call);
  65
  66/* Values for u8 above */
  67
  68#define ACPI_NOT_METHOD_CALL            FALSE
  69#define ACPI_POSSIBLE_METHOD_CALL       TRUE
  70
  71acpi_status
  72acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
  73                     struct acpi_parse_state *parser_state,
  74                     u32 arg_type, union acpi_parse_object **return_arg);
  75
  76/*
  77 * psfind
  78 */
  79union acpi_parse_object *acpi_ps_find_name(union acpi_parse_object *scope,
  80                                           u32 name, u32 opcode);
  81
  82union acpi_parse_object *acpi_ps_get_parent(union acpi_parse_object *op);
  83
  84/*
  85 * psobject - support for parse object processing
  86 */
  87acpi_status
  88acpi_ps_build_named_op(struct acpi_walk_state *walk_state,
  89                       u8 *aml_op_start,
  90                       union acpi_parse_object *unnamed_op,
  91                       union acpi_parse_object **op);
  92
  93acpi_status
  94acpi_ps_create_op(struct acpi_walk_state *walk_state,
  95                  u8 *aml_op_start, union acpi_parse_object **new_op);
  96
  97acpi_status
  98acpi_ps_complete_op(struct acpi_walk_state *walk_state,
  99                    union acpi_parse_object **op, acpi_status status);
 100
 101acpi_status
 102acpi_ps_complete_final_op(struct acpi_walk_state *walk_state,
 103                          union acpi_parse_object *op, acpi_status status);
 104
 105/*
 106 * psopinfo - AML Opcode information
 107 */
 108const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode);
 109
 110const char *acpi_ps_get_opcode_name(u16 opcode);
 111
 112u8 acpi_ps_get_argument_count(u32 op_type);
 113
 114/*
 115 * psparse - top level parsing routines
 116 */
 117acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state);
 118
 119u32 acpi_ps_get_opcode_size(u32 opcode);
 120
 121u16 acpi_ps_peek_opcode(struct acpi_parse_state *state);
 122
 123acpi_status
 124acpi_ps_complete_this_op(struct acpi_walk_state *walk_state,
 125                         union acpi_parse_object *op);
 126
 127acpi_status
 128acpi_ps_next_parse_state(struct acpi_walk_state *walk_state,
 129                         union acpi_parse_object *op,
 130                         acpi_status callback_status);
 131
 132/*
 133 * psloop - main parse loop
 134 */
 135acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state);
 136
 137/*
 138 * psscope - Scope stack management routines
 139 */
 140acpi_status
 141acpi_ps_init_scope(struct acpi_parse_state *parser_state,
 142                   union acpi_parse_object *root);
 143
 144union acpi_parse_object *acpi_ps_get_parent_scope(struct acpi_parse_state
 145                                                  *state);
 146
 147u8 acpi_ps_has_completed_scope(struct acpi_parse_state *parser_state);
 148
 149void
 150acpi_ps_pop_scope(struct acpi_parse_state *parser_state,
 151                  union acpi_parse_object **op, u32 *arg_list, u32 *arg_count);
 152
 153acpi_status
 154acpi_ps_push_scope(struct acpi_parse_state *parser_state,
 155                   union acpi_parse_object *op,
 156                   u32 remaining_args, u32 arg_count);
 157
 158void acpi_ps_cleanup_scope(struct acpi_parse_state *state);
 159
 160/*
 161 * pstree - parse tree manipulation routines
 162 */
 163void
 164acpi_ps_append_arg(union acpi_parse_object *op, union acpi_parse_object *arg);
 165
 166union acpi_parse_object *acpi_ps_find(union acpi_parse_object *scope,
 167                                      char *path, u16 opcode, u32 create);
 168
 169union acpi_parse_object *acpi_ps_get_arg(union acpi_parse_object *op, u32 argn);
 170
 171union acpi_parse_object *acpi_ps_get_depth_next(union acpi_parse_object *origin,
 172                                                union acpi_parse_object *op);
 173
 174/*
 175 * pswalk - parse tree walk routines
 176 */
 177acpi_status
 178acpi_ps_walk_parsed_aml(union acpi_parse_object *start_op,
 179                        union acpi_parse_object *end_op,
 180                        union acpi_operand_object *mth_desc,
 181                        struct acpi_namespace_node *start_node,
 182                        union acpi_operand_object **params,
 183                        union acpi_operand_object **caller_return_desc,
 184                        acpi_owner_id owner_id,
 185                        acpi_parse_downwards descending_callback,
 186                        acpi_parse_upwards ascending_callback);
 187
 188acpi_status
 189acpi_ps_get_next_walk_op(struct acpi_walk_state *walk_state,
 190                         union acpi_parse_object *op,
 191                         acpi_parse_upwards ascending_callback);
 192
 193acpi_status acpi_ps_delete_completed_op(struct acpi_walk_state *walk_state);
 194
 195void acpi_ps_delete_parse_tree(union acpi_parse_object *root);
 196
 197/*
 198 * psutils - parser utilities
 199 */
 200union acpi_parse_object *acpi_ps_create_scope_op(u8 *aml);
 201
 202void acpi_ps_init_op(union acpi_parse_object *op, u16 opcode);
 203
 204union acpi_parse_object *acpi_ps_alloc_op(u16 opcode, u8 *aml);
 205
 206void acpi_ps_free_op(union acpi_parse_object *op);
 207
 208u8 acpi_ps_is_leading_char(u32 c);
 209
 210u32 acpi_ps_get_name(union acpi_parse_object *op);
 211
 212void acpi_ps_set_name(union acpi_parse_object *op, u32 name);
 213
 214/*
 215 * psdump - display parser tree
 216 */
 217u32
 218acpi_ps_sprint_path(char *buffer_start,
 219                    u32 buffer_size, union acpi_parse_object *op);
 220
 221u32
 222acpi_ps_sprint_op(char *buffer_start,
 223                  u32 buffer_size, union acpi_parse_object *op);
 224
 225void acpi_ps_show(union acpi_parse_object *op);
 226
 227#endif                          /* __ACPARSER_H__ */
 228