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 - 2020, 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 39 extern const u8 acpi_gbl_short_op_index[]; 40 extern const u8 acpi_gbl_long_op_index[]; 41 42 /* 43 * psxface - Parser external interfaces 44 */ 45 acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info); 46 47 acpi_status acpi_ps_execute_table(struct acpi_evaluate_info *info); 48 49 /* 50 * psargs - Parse AML opcode arguments 51 */ 52 u8 *acpi_ps_get_next_package_end(struct acpi_parse_state *parser_state); 53 54 char *acpi_ps_get_next_namestring(struct acpi_parse_state *parser_state); 55 56 void 57 acpi_ps_get_next_simple_arg(struct acpi_parse_state *parser_state, 58 u32 arg_type, union acpi_parse_object *arg); 59 60 acpi_status 61 acpi_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 71 acpi_status 72 acpi_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 */ 79 union acpi_parse_object *acpi_ps_find_name(union acpi_parse_object *scope, 80 u32 name, u32 opcode); 81 82 union acpi_parse_object *acpi_ps_get_parent(union acpi_parse_object *op); 83 84 /* 85 * psobject - support for parse object processing 86 */ 87 acpi_status 88 acpi_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 93 acpi_status 94 acpi_ps_create_op(struct acpi_walk_state *walk_state, 95 u8 *aml_op_start, union acpi_parse_object **new_op); 96 97 acpi_status 98 acpi_ps_complete_op(struct acpi_walk_state *walk_state, 99 union acpi_parse_object **op, acpi_status status); 100 101 acpi_status 102 acpi_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 */ 108 const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode); 109 110 const char *acpi_ps_get_opcode_name(u16 opcode); 111 112 u8 acpi_ps_get_argument_count(u32 op_type); 113 114 /* 115 * psparse - top level parsing routines 116 */ 117 acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state); 118 119 u32 acpi_ps_get_opcode_size(u32 opcode); 120 121 u16 acpi_ps_peek_opcode(struct acpi_parse_state *state); 122 123 acpi_status 124 acpi_ps_complete_this_op(struct acpi_walk_state *walk_state, 125 union acpi_parse_object *op); 126 127 acpi_status 128 acpi_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 */ 135 acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state); 136 137 /* 138 * psscope - Scope stack management routines 139 */ 140 acpi_status 141 acpi_ps_init_scope(struct acpi_parse_state *parser_state, 142 union acpi_parse_object *root); 143 144 union acpi_parse_object *acpi_ps_get_parent_scope(struct acpi_parse_state 145 *state); 146 147 u8 acpi_ps_has_completed_scope(struct acpi_parse_state *parser_state); 148 149 void 150 acpi_ps_pop_scope(struct acpi_parse_state *parser_state, 151 union acpi_parse_object **op, u32 *arg_list, u32 *arg_count); 152 153 acpi_status 154 acpi_ps_push_scope(struct acpi_parse_state *parser_state, 155 union acpi_parse_object *op, 156 u32 remaining_args, u32 arg_count); 157 158 void acpi_ps_cleanup_scope(struct acpi_parse_state *state); 159 160 /* 161 * pstree - parse tree manipulation routines 162 */ 163 void 164 acpi_ps_append_arg(union acpi_parse_object *op, union acpi_parse_object *arg); 165 166 union acpi_parse_object *acpi_ps_find(union acpi_parse_object *scope, 167 char *path, u16 opcode, u32 create); 168 169 union acpi_parse_object *acpi_ps_get_arg(union acpi_parse_object *op, u32 argn); 170 171 union 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 */ 177 acpi_status 178 acpi_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 188 acpi_status 189 acpi_ps_get_next_walk_op(struct acpi_walk_state *walk_state, 190 union acpi_parse_object *op, 191 acpi_parse_upwards ascending_callback); 192 193 acpi_status acpi_ps_delete_completed_op(struct acpi_walk_state *walk_state); 194 195 void acpi_ps_delete_parse_tree(union acpi_parse_object *root); 196 197 /* 198 * psutils - parser utilities 199 */ 200 union acpi_parse_object *acpi_ps_create_scope_op(u8 *aml); 201 202 void acpi_ps_init_op(union acpi_parse_object *op, u16 opcode); 203 204 union acpi_parse_object *acpi_ps_alloc_op(u16 opcode, u8 *aml); 205 206 void acpi_ps_free_op(union acpi_parse_object *op); 207 208 u8 acpi_ps_is_leading_char(u32 c); 209 210 u32 acpi_ps_get_name(union acpi_parse_object *op); 211 212 void acpi_ps_set_name(union acpi_parse_object *op, u32 name); 213 214 /* 215 * psdump - display parser tree 216 */ 217 u32 218 acpi_ps_sprint_path(char *buffer_start, 219 u32 buffer_size, union acpi_parse_object *op); 220 221 u32 222 acpi_ps_sprint_op(char *buffer_start, 223 u32 buffer_size, union acpi_parse_object *op); 224 225 void acpi_ps_show(union acpi_parse_object *op); 226 227 #endif /* __ACPARSER_H__ */ 228