Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


9d49d3c41cd924ed6c768cd3701e5da3a4d73232
[palacios-OLD.git] / kitten / include / acpi / acparser.h
1 /******************************************************************************
2  *
3  * Module Name: acparser.h - AML Parser subcomponent prototypes and defines
4  *
5  *****************************************************************************/
6
7 /*
8  * Copyright (C) 2000 - 2006, R. Byron Moore
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions, and the following disclaimer,
16  *    without modification.
17  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18  *    substantially similar to the "NO WARRANTY" disclaimer below
19  *    ("Disclaimer") and any redistribution must be conditioned upon
20  *    including a substantially similar Disclaimer requirement for further
21  *    binary redistribution.
22  * 3. Neither the names of the above-listed copyright holders nor the names
23  *    of any contributors may be used to endorse or promote products derived
24  *    from this software without specific prior written permission.
25  *
26  * Alternatively, this software may be distributed under the terms of the
27  * GNU General Public License ("GPL") version 2 as published by the Free
28  * Software Foundation.
29  *
30  * NO WARRANTY
31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41  * POSSIBILITY OF SUCH DAMAGES.
42  */
43
44 #ifndef __ACPARSER_H__
45 #define __ACPARSER_H__
46
47 #define OP_HAS_RETURN_VALUE             1
48
49 /* Variable number of arguments. This field must be 32 bits */
50
51 #define ACPI_VAR_ARGS                   ACPI_UINT32_MAX
52
53 #define ACPI_PARSE_DELETE_TREE          0x0001
54 #define ACPI_PARSE_NO_TREE_DELETE       0x0000
55 #define ACPI_PARSE_TREE_MASK            0x0001
56
57 #define ACPI_PARSE_LOAD_PASS1           0x0010
58 #define ACPI_PARSE_LOAD_PASS2           0x0020
59 #define ACPI_PARSE_EXECUTE              0x0030
60 #define ACPI_PARSE_MODE_MASK            0x0030
61
62 #define ACPI_PARSE_DEFERRED_OP          0x0100
63 #define ACPI_PARSE_DISASSEMBLE          0x0200
64
65 /******************************************************************************
66  *
67  * Parser interfaces
68  *
69  *****************************************************************************/
70
71 /*
72  * psxface - Parser external interfaces
73  */
74 acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info);
75
76 /*
77  * psargs - Parse AML opcode arguments
78  */
79 u8 *acpi_ps_get_next_package_end(struct acpi_parse_state *parser_state);
80
81 char *acpi_ps_get_next_namestring(struct acpi_parse_state *parser_state);
82
83 void
84 acpi_ps_get_next_simple_arg(struct acpi_parse_state *parser_state,
85                             u32 arg_type, union acpi_parse_object *arg);
86
87 acpi_status
88 acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state,
89                           struct acpi_parse_state *parser_state,
90                           union acpi_parse_object *arg, u8 method_call);
91
92 acpi_status
93 acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
94                      struct acpi_parse_state *parser_state,
95                      u32 arg_type, union acpi_parse_object **return_arg);
96
97 /*
98  * psfind
99  */
100 union acpi_parse_object *acpi_ps_find_name(union acpi_parse_object *scope,
101                                            u32 name, u32 opcode);
102
103 union acpi_parse_object *acpi_ps_get_parent(union acpi_parse_object *op);
104
105 /*
106  * psopcode - AML Opcode information
107  */
108 const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode);
109
110 char *acpi_ps_get_opcode_name(u16 opcode);
111
112 /*
113  * psparse - top level parsing routines
114  */
115 acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state);
116
117 u32 acpi_ps_get_opcode_size(u32 opcode);
118
119 u16 acpi_ps_peek_opcode(struct acpi_parse_state *state);
120
121 acpi_status
122 acpi_ps_complete_this_op(struct acpi_walk_state *walk_state,
123                          union acpi_parse_object *op);
124
125 acpi_status
126 acpi_ps_next_parse_state(struct acpi_walk_state *walk_state,
127                          union acpi_parse_object *op,
128                          acpi_status callback_status);
129
130 /*
131  * psloop - main parse loop
132  */
133 acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state);
134
135 /*
136  * psscope - Scope stack management routines
137  */
138 acpi_status
139 acpi_ps_init_scope(struct acpi_parse_state *parser_state,
140                    union acpi_parse_object *root);
141
142 union acpi_parse_object *acpi_ps_get_parent_scope(struct acpi_parse_state
143                                                   *state);
144
145 u8 acpi_ps_has_completed_scope(struct acpi_parse_state *parser_state);
146
147 void
148 acpi_ps_pop_scope(struct acpi_parse_state *parser_state,
149                   union acpi_parse_object **op,
150                   u32 * arg_list, u32 * arg_count);
151
152 acpi_status
153 acpi_ps_push_scope(struct acpi_parse_state *parser_state,
154                    union acpi_parse_object *op,
155                    u32 remaining_args, u32 arg_count);
156
157 void acpi_ps_cleanup_scope(struct acpi_parse_state *state);
158
159 /*
160  * pstree - parse tree manipulation routines
161  */
162 void
163 acpi_ps_append_arg(union acpi_parse_object *op, union acpi_parse_object *arg);
164
165 union acpi_parse_object *acpi_ps_find(union acpi_parse_object *scope,
166                                       char *path, u16 opcode, u32 create);
167
168 union acpi_parse_object *acpi_ps_get_arg(union acpi_parse_object *op, u32 argn);
169
170 #ifdef  ACPI_FUTURE_USAGE
171 union acpi_parse_object *acpi_ps_get_depth_next(union acpi_parse_object *origin,
172                                                 union acpi_parse_object *op);
173 #endif                          /* ACPI_FUTURE_USAGE */
174
175 /*
176  * pswalk - parse tree walk routines
177  */
178 acpi_status
179 acpi_ps_walk_parsed_aml(union acpi_parse_object *start_op,
180                         union acpi_parse_object *end_op,
181                         union acpi_operand_object *mth_desc,
182                         struct acpi_namespace_node *start_node,
183                         union acpi_operand_object **params,
184                         union acpi_operand_object **caller_return_desc,
185                         acpi_owner_id owner_id,
186                         acpi_parse_downwards descending_callback,
187                         acpi_parse_upwards ascending_callback);
188
189 acpi_status
190 acpi_ps_get_next_walk_op(struct acpi_walk_state *walk_state,
191                          union acpi_parse_object *op,
192                          acpi_parse_upwards ascending_callback);
193
194 acpi_status acpi_ps_delete_completed_op(struct acpi_walk_state *walk_state);
195
196 void acpi_ps_delete_parse_tree(union acpi_parse_object *root);
197
198 /*
199  * psutils - parser utilities
200  */
201 union acpi_parse_object *acpi_ps_create_scope_op(void);
202
203 void acpi_ps_init_op(union acpi_parse_object *op, u16 opcode);
204
205 union acpi_parse_object *acpi_ps_alloc_op(u16 opcode);
206
207 void acpi_ps_free_op(union acpi_parse_object *op);
208
209 u8 acpi_ps_is_leading_char(u32 c);
210
211 u8 acpi_ps_is_prefix_char(u32 c);
212
213 #ifdef  ACPI_FUTURE_USAGE
214 u32 acpi_ps_get_name(union acpi_parse_object *op);
215 #endif                          /* ACPI_FUTURE_USAGE */
216
217 void acpi_ps_set_name(union acpi_parse_object *op, u32 name);
218
219 /*
220  * psdump - display parser tree
221  */
222 u32
223 acpi_ps_sprint_path(char *buffer_start,
224                     u32 buffer_size, union acpi_parse_object *op);
225
226 u32
227 acpi_ps_sprint_op(char *buffer_start,
228                   u32 buffer_size, union acpi_parse_object *op);
229
230 void acpi_ps_show(union acpi_parse_object *op);
231
232 #endif                          /* __ACPARSER_H__ */