162306a36Sopenharmony_ci/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 262306a36Sopenharmony_ci/****************************************************************************** 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Module Name: acparser.h - AML Parser subcomponent prototypes and defines 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (C) 2000 - 2023, Intel Corp. 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci *****************************************************************************/ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef __ACPARSER_H__ 1162306a36Sopenharmony_ci#define __ACPARSER_H__ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#define OP_HAS_RETURN_VALUE 1 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci/* Variable number of arguments. This field must be 32 bits */ 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define ACPI_VAR_ARGS ACPI_UINT32_MAX 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci#define ACPI_PARSE_DELETE_TREE 0x0001 2062306a36Sopenharmony_ci#define ACPI_PARSE_NO_TREE_DELETE 0x0000 2162306a36Sopenharmony_ci#define ACPI_PARSE_TREE_MASK 0x0001 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#define ACPI_PARSE_LOAD_PASS1 0x0010 2462306a36Sopenharmony_ci#define ACPI_PARSE_LOAD_PASS2 0x0020 2562306a36Sopenharmony_ci#define ACPI_PARSE_EXECUTE 0x0030 2662306a36Sopenharmony_ci#define ACPI_PARSE_MODE_MASK 0x0030 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci#define ACPI_PARSE_DEFERRED_OP 0x0100 2962306a36Sopenharmony_ci#define ACPI_PARSE_DISASSEMBLE 0x0200 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci#define ACPI_PARSE_MODULE_LEVEL 0x0400 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci/****************************************************************************** 3462306a36Sopenharmony_ci * 3562306a36Sopenharmony_ci * Parser interfaces 3662306a36Sopenharmony_ci * 3762306a36Sopenharmony_ci *****************************************************************************/ 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ciextern const u8 acpi_gbl_short_op_index[]; 4062306a36Sopenharmony_ciextern const u8 acpi_gbl_long_op_index[]; 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci/* 4362306a36Sopenharmony_ci * psxface - Parser external interfaces 4462306a36Sopenharmony_ci */ 4562306a36Sopenharmony_ciacpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info); 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ciacpi_status acpi_ps_execute_table(struct acpi_evaluate_info *info); 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci/* 5062306a36Sopenharmony_ci * psargs - Parse AML opcode arguments 5162306a36Sopenharmony_ci */ 5262306a36Sopenharmony_ciu8 *acpi_ps_get_next_package_end(struct acpi_parse_state *parser_state); 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_cichar *acpi_ps_get_next_namestring(struct acpi_parse_state *parser_state); 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_civoid 5762306a36Sopenharmony_ciacpi_ps_get_next_simple_arg(struct acpi_parse_state *parser_state, 5862306a36Sopenharmony_ci u32 arg_type, union acpi_parse_object *arg); 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ciacpi_status 6162306a36Sopenharmony_ciacpi_ps_get_next_namepath(struct acpi_walk_state *walk_state, 6262306a36Sopenharmony_ci struct acpi_parse_state *parser_state, 6362306a36Sopenharmony_ci union acpi_parse_object *arg, 6462306a36Sopenharmony_ci u8 possible_method_call); 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci/* Values for u8 above */ 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci#define ACPI_NOT_METHOD_CALL FALSE 6962306a36Sopenharmony_ci#define ACPI_POSSIBLE_METHOD_CALL TRUE 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ciacpi_status 7262306a36Sopenharmony_ciacpi_ps_get_next_arg(struct acpi_walk_state *walk_state, 7362306a36Sopenharmony_ci struct acpi_parse_state *parser_state, 7462306a36Sopenharmony_ci u32 arg_type, union acpi_parse_object **return_arg); 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci/* 7762306a36Sopenharmony_ci * psfind 7862306a36Sopenharmony_ci */ 7962306a36Sopenharmony_ciunion acpi_parse_object *acpi_ps_find_name(union acpi_parse_object *scope, 8062306a36Sopenharmony_ci u32 name, u32 opcode); 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ciunion acpi_parse_object *acpi_ps_get_parent(union acpi_parse_object *op); 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci/* 8562306a36Sopenharmony_ci * psobject - support for parse object processing 8662306a36Sopenharmony_ci */ 8762306a36Sopenharmony_ciacpi_status 8862306a36Sopenharmony_ciacpi_ps_build_named_op(struct acpi_walk_state *walk_state, 8962306a36Sopenharmony_ci u8 *aml_op_start, 9062306a36Sopenharmony_ci union acpi_parse_object *unnamed_op, 9162306a36Sopenharmony_ci union acpi_parse_object **op); 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ciacpi_status 9462306a36Sopenharmony_ciacpi_ps_create_op(struct acpi_walk_state *walk_state, 9562306a36Sopenharmony_ci u8 *aml_op_start, union acpi_parse_object **new_op); 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ciacpi_status 9862306a36Sopenharmony_ciacpi_ps_complete_op(struct acpi_walk_state *walk_state, 9962306a36Sopenharmony_ci union acpi_parse_object **op, acpi_status status); 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ciacpi_status 10262306a36Sopenharmony_ciacpi_ps_complete_final_op(struct acpi_walk_state *walk_state, 10362306a36Sopenharmony_ci union acpi_parse_object *op, acpi_status status); 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci/* 10662306a36Sopenharmony_ci * psopinfo - AML Opcode information 10762306a36Sopenharmony_ci */ 10862306a36Sopenharmony_ciconst struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode); 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ciconst char *acpi_ps_get_opcode_name(u16 opcode); 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ciu8 acpi_ps_get_argument_count(u32 op_type); 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci/* 11562306a36Sopenharmony_ci * psparse - top level parsing routines 11662306a36Sopenharmony_ci */ 11762306a36Sopenharmony_ciacpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state); 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ciu32 acpi_ps_get_opcode_size(u32 opcode); 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ciu16 acpi_ps_peek_opcode(struct acpi_parse_state *state); 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ciacpi_status 12462306a36Sopenharmony_ciacpi_ps_complete_this_op(struct acpi_walk_state *walk_state, 12562306a36Sopenharmony_ci union acpi_parse_object *op); 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ciacpi_status 12862306a36Sopenharmony_ciacpi_ps_next_parse_state(struct acpi_walk_state *walk_state, 12962306a36Sopenharmony_ci union acpi_parse_object *op, 13062306a36Sopenharmony_ci acpi_status callback_status); 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci/* 13362306a36Sopenharmony_ci * psloop - main parse loop 13462306a36Sopenharmony_ci */ 13562306a36Sopenharmony_ciacpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state); 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ci/* 13862306a36Sopenharmony_ci * psscope - Scope stack management routines 13962306a36Sopenharmony_ci */ 14062306a36Sopenharmony_ciacpi_status 14162306a36Sopenharmony_ciacpi_ps_init_scope(struct acpi_parse_state *parser_state, 14262306a36Sopenharmony_ci union acpi_parse_object *root); 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ciunion acpi_parse_object *acpi_ps_get_parent_scope(struct acpi_parse_state 14562306a36Sopenharmony_ci *state); 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ciu8 acpi_ps_has_completed_scope(struct acpi_parse_state *parser_state); 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_civoid 15062306a36Sopenharmony_ciacpi_ps_pop_scope(struct acpi_parse_state *parser_state, 15162306a36Sopenharmony_ci union acpi_parse_object **op, u32 *arg_list, u32 *arg_count); 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ciacpi_status 15462306a36Sopenharmony_ciacpi_ps_push_scope(struct acpi_parse_state *parser_state, 15562306a36Sopenharmony_ci union acpi_parse_object *op, 15662306a36Sopenharmony_ci u32 remaining_args, u32 arg_count); 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_civoid acpi_ps_cleanup_scope(struct acpi_parse_state *state); 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci/* 16162306a36Sopenharmony_ci * pstree - parse tree manipulation routines 16262306a36Sopenharmony_ci */ 16362306a36Sopenharmony_civoid 16462306a36Sopenharmony_ciacpi_ps_append_arg(union acpi_parse_object *op, union acpi_parse_object *arg); 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ciunion acpi_parse_object *acpi_ps_find(union acpi_parse_object *scope, 16762306a36Sopenharmony_ci char *path, u16 opcode, u32 create); 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ciunion acpi_parse_object *acpi_ps_get_arg(union acpi_parse_object *op, u32 argn); 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ciunion acpi_parse_object *acpi_ps_get_depth_next(union acpi_parse_object *origin, 17262306a36Sopenharmony_ci union acpi_parse_object *op); 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_ci/* 17562306a36Sopenharmony_ci * pswalk - parse tree walk routines 17662306a36Sopenharmony_ci */ 17762306a36Sopenharmony_ciacpi_status 17862306a36Sopenharmony_ciacpi_ps_walk_parsed_aml(union acpi_parse_object *start_op, 17962306a36Sopenharmony_ci union acpi_parse_object *end_op, 18062306a36Sopenharmony_ci union acpi_operand_object *mth_desc, 18162306a36Sopenharmony_ci struct acpi_namespace_node *start_node, 18262306a36Sopenharmony_ci union acpi_operand_object **params, 18362306a36Sopenharmony_ci union acpi_operand_object **caller_return_desc, 18462306a36Sopenharmony_ci acpi_owner_id owner_id, 18562306a36Sopenharmony_ci acpi_parse_downwards descending_callback, 18662306a36Sopenharmony_ci acpi_parse_upwards ascending_callback); 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ciacpi_status 18962306a36Sopenharmony_ciacpi_ps_get_next_walk_op(struct acpi_walk_state *walk_state, 19062306a36Sopenharmony_ci union acpi_parse_object *op, 19162306a36Sopenharmony_ci acpi_parse_upwards ascending_callback); 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ciacpi_status acpi_ps_delete_completed_op(struct acpi_walk_state *walk_state); 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_civoid acpi_ps_delete_parse_tree(union acpi_parse_object *root); 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ci/* 19862306a36Sopenharmony_ci * psutils - parser utilities 19962306a36Sopenharmony_ci */ 20062306a36Sopenharmony_ciunion acpi_parse_object *acpi_ps_create_scope_op(u8 *aml); 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_civoid acpi_ps_init_op(union acpi_parse_object *op, u16 opcode); 20362306a36Sopenharmony_ci 20462306a36Sopenharmony_ciunion acpi_parse_object *acpi_ps_alloc_op(u16 opcode, u8 *aml); 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_civoid acpi_ps_free_op(union acpi_parse_object *op); 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_ciu8 acpi_ps_is_leading_char(u32 c); 20962306a36Sopenharmony_ci 21062306a36Sopenharmony_ciu32 acpi_ps_get_name(union acpi_parse_object *op); 21162306a36Sopenharmony_ci 21262306a36Sopenharmony_civoid acpi_ps_set_name(union acpi_parse_object *op, u32 name); 21362306a36Sopenharmony_ci 21462306a36Sopenharmony_ci/* 21562306a36Sopenharmony_ci * psdump - display parser tree 21662306a36Sopenharmony_ci */ 21762306a36Sopenharmony_ciu32 21862306a36Sopenharmony_ciacpi_ps_sprint_path(char *buffer_start, 21962306a36Sopenharmony_ci u32 buffer_size, union acpi_parse_object *op); 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_ciu32 22262306a36Sopenharmony_ciacpi_ps_sprint_op(char *buffer_start, 22362306a36Sopenharmony_ci u32 buffer_size, union acpi_parse_object *op); 22462306a36Sopenharmony_ci 22562306a36Sopenharmony_civoid acpi_ps_show(union acpi_parse_object *op); 22662306a36Sopenharmony_ci 22762306a36Sopenharmony_ci#endif /* __ACPARSER_H__ */ 228