acparser.h (6473B)
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 - 2022, 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__ */