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