acparser.h revision 217365
1/******************************************************************************
2 *
3 * Module Name: acparser.h - AML Parser subcomponent prototypes and defines
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2011, Intel Corp.
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
45#ifndef __ACPARSER_H__
46#define __ACPARSER_H__
47
48
49#define OP_HAS_RETURN_VALUE             1
50
51/* Variable number of arguments. This field must be 32 bits */
52
53#define ACPI_VAR_ARGS                   ACPI_UINT32_MAX
54
55
56#define ACPI_PARSE_DELETE_TREE          0x0001
57#define ACPI_PARSE_NO_TREE_DELETE       0x0000
58#define ACPI_PARSE_TREE_MASK            0x0001
59
60#define ACPI_PARSE_LOAD_PASS1           0x0010
61#define ACPI_PARSE_LOAD_PASS2           0x0020
62#define ACPI_PARSE_EXECUTE              0x0030
63#define ACPI_PARSE_MODE_MASK            0x0030
64
65#define ACPI_PARSE_DEFERRED_OP          0x0100
66#define ACPI_PARSE_DISASSEMBLE          0x0200
67
68#define ACPI_PARSE_MODULE_LEVEL         0x0400
69
70/******************************************************************************
71 *
72 * Parser interfaces
73 *
74 *****************************************************************************/
75
76
77/*
78 * psxface - Parser external interfaces
79 */
80ACPI_STATUS
81AcpiPsExecuteMethod (
82    ACPI_EVALUATE_INFO      *Info);
83
84
85/*
86 * psargs - Parse AML opcode arguments
87 */
88UINT8 *
89AcpiPsGetNextPackageEnd (
90    ACPI_PARSE_STATE        *ParserState);
91
92char *
93AcpiPsGetNextNamestring (
94    ACPI_PARSE_STATE        *ParserState);
95
96void
97AcpiPsGetNextSimpleArg (
98    ACPI_PARSE_STATE        *ParserState,
99    UINT32                  ArgType,
100    ACPI_PARSE_OBJECT       *Arg);
101
102ACPI_STATUS
103AcpiPsGetNextNamepath (
104    ACPI_WALK_STATE         *WalkState,
105    ACPI_PARSE_STATE        *ParserState,
106    ACPI_PARSE_OBJECT       *Arg,
107    BOOLEAN                 MethodCall);
108
109ACPI_STATUS
110AcpiPsGetNextArg (
111    ACPI_WALK_STATE         *WalkState,
112    ACPI_PARSE_STATE        *ParserState,
113    UINT32                  ArgType,
114    ACPI_PARSE_OBJECT       **ReturnArg);
115
116
117/*
118 * psfind
119 */
120ACPI_PARSE_OBJECT *
121AcpiPsFindName (
122    ACPI_PARSE_OBJECT       *Scope,
123    UINT32                  Name,
124    UINT32                  Opcode);
125
126ACPI_PARSE_OBJECT*
127AcpiPsGetParent (
128    ACPI_PARSE_OBJECT       *Op);
129
130
131/*
132 * psopcode - AML Opcode information
133 */
134const ACPI_OPCODE_INFO *
135AcpiPsGetOpcodeInfo (
136    UINT16                  Opcode);
137
138char *
139AcpiPsGetOpcodeName (
140    UINT16                  Opcode);
141
142UINT8
143AcpiPsGetArgumentCount (
144    UINT32                  OpType);
145
146
147/*
148 * psparse - top level parsing routines
149 */
150ACPI_STATUS
151AcpiPsParseAml (
152    ACPI_WALK_STATE         *WalkState);
153
154UINT32
155AcpiPsGetOpcodeSize (
156    UINT32                  Opcode);
157
158UINT16
159AcpiPsPeekOpcode (
160    ACPI_PARSE_STATE        *state);
161
162ACPI_STATUS
163AcpiPsCompleteThisOp (
164    ACPI_WALK_STATE         *WalkState,
165    ACPI_PARSE_OBJECT       *Op);
166
167ACPI_STATUS
168AcpiPsNextParseState (
169    ACPI_WALK_STATE         *WalkState,
170    ACPI_PARSE_OBJECT       *Op,
171    ACPI_STATUS             CallbackStatus);
172
173
174/*
175 * psloop - main parse loop
176 */
177ACPI_STATUS
178AcpiPsParseLoop (
179    ACPI_WALK_STATE         *WalkState);
180
181
182/*
183 * psscope - Scope stack management routines
184 */
185ACPI_STATUS
186AcpiPsInitScope (
187    ACPI_PARSE_STATE        *ParserState,
188    ACPI_PARSE_OBJECT       *Root);
189
190ACPI_PARSE_OBJECT *
191AcpiPsGetParentScope (
192    ACPI_PARSE_STATE        *state);
193
194BOOLEAN
195AcpiPsHasCompletedScope (
196    ACPI_PARSE_STATE        *ParserState);
197
198void
199AcpiPsPopScope (
200    ACPI_PARSE_STATE        *ParserState,
201    ACPI_PARSE_OBJECT       **Op,
202    UINT32                  *ArgList,
203    UINT32                  *ArgCount);
204
205ACPI_STATUS
206AcpiPsPushScope (
207    ACPI_PARSE_STATE        *ParserState,
208    ACPI_PARSE_OBJECT       *Op,
209    UINT32                  RemainingArgs,
210    UINT32                  ArgCount);
211
212void
213AcpiPsCleanupScope (
214    ACPI_PARSE_STATE        *state);
215
216
217/*
218 * pstree - parse tree manipulation routines
219 */
220void
221AcpiPsAppendArg(
222    ACPI_PARSE_OBJECT       *op,
223    ACPI_PARSE_OBJECT       *arg);
224
225ACPI_PARSE_OBJECT*
226AcpiPsFind (
227    ACPI_PARSE_OBJECT       *Scope,
228    char                    *Path,
229    UINT16                  Opcode,
230    UINT32                  Create);
231
232ACPI_PARSE_OBJECT *
233AcpiPsGetArg(
234    ACPI_PARSE_OBJECT       *op,
235    UINT32                   argn);
236
237ACPI_PARSE_OBJECT *
238AcpiPsGetDepthNext (
239    ACPI_PARSE_OBJECT       *Origin,
240    ACPI_PARSE_OBJECT       *Op);
241
242
243/*
244 * pswalk - parse tree walk routines
245 */
246ACPI_STATUS
247AcpiPsWalkParsedAml (
248    ACPI_PARSE_OBJECT       *StartOp,
249    ACPI_PARSE_OBJECT       *EndOp,
250    ACPI_OPERAND_OBJECT     *MthDesc,
251    ACPI_NAMESPACE_NODE     *StartNode,
252    ACPI_OPERAND_OBJECT     **Params,
253    ACPI_OPERAND_OBJECT     **CallerReturnDesc,
254    ACPI_OWNER_ID           OwnerId,
255    ACPI_PARSE_DOWNWARDS    DescendingCallback,
256    ACPI_PARSE_UPWARDS      AscendingCallback);
257
258ACPI_STATUS
259AcpiPsGetNextWalkOp (
260    ACPI_WALK_STATE         *WalkState,
261    ACPI_PARSE_OBJECT       *Op,
262    ACPI_PARSE_UPWARDS      AscendingCallback);
263
264ACPI_STATUS
265AcpiPsDeleteCompletedOp (
266    ACPI_WALK_STATE         *WalkState);
267
268void
269AcpiPsDeleteParseTree (
270    ACPI_PARSE_OBJECT       *root);
271
272
273/*
274 * psutils - parser utilities
275 */
276ACPI_PARSE_OBJECT *
277AcpiPsCreateScopeOp (
278    void);
279
280void
281AcpiPsInitOp (
282    ACPI_PARSE_OBJECT       *op,
283    UINT16                  opcode);
284
285ACPI_PARSE_OBJECT *
286AcpiPsAllocOp (
287    UINT16                  opcode);
288
289void
290AcpiPsFreeOp (
291    ACPI_PARSE_OBJECT       *Op);
292
293BOOLEAN
294AcpiPsIsLeadingChar (
295    UINT32                  c);
296
297BOOLEAN
298AcpiPsIsPrefixChar (
299    UINT32                  c);
300
301UINT32
302AcpiPsGetName(
303    ACPI_PARSE_OBJECT       *op);
304
305void
306AcpiPsSetName(
307    ACPI_PARSE_OBJECT       *op,
308    UINT32                  name);
309
310
311/*
312 * psdump - display parser tree
313 */
314UINT32
315AcpiPsSprintPath (
316    char                    *BufferStart,
317    UINT32                  BufferSize,
318    ACPI_PARSE_OBJECT       *Op);
319
320UINT32
321AcpiPsSprintOp (
322    char                    *BufferStart,
323    UINT32                  BufferSize,
324    ACPI_PARSE_OBJECT       *Op);
325
326void
327AcpiPsShow (
328    ACPI_PARSE_OBJECT       *op);
329
330
331#endif /* __ACPARSER_H__ */
332