xref: /freebsd/sys/contrib/dev/acpica/include/acparser.h (revision efcc2a30547c400649a351e85e6cd97dab8f3817)
1a9f12690SJung-uk Kim /******************************************************************************
2a9f12690SJung-uk Kim  *
3a9f12690SJung-uk Kim  * Module Name: acparser.h - AML Parser subcomponent prototypes and defines
4a9f12690SJung-uk Kim  *
5a9f12690SJung-uk Kim  *****************************************************************************/
6a9f12690SJung-uk Kim 
7d244b227SJung-uk Kim /*
8*efcc2a30SJung-uk Kim  * Copyright (C) 2000 - 2013, Intel Corp.
9a9f12690SJung-uk Kim  * All rights reserved.
10a9f12690SJung-uk Kim  *
11d244b227SJung-uk Kim  * Redistribution and use in source and binary forms, with or without
12d244b227SJung-uk Kim  * modification, are permitted provided that the following conditions
13d244b227SJung-uk Kim  * are met:
14d244b227SJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
15d244b227SJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
16d244b227SJung-uk Kim  *    without modification.
17d244b227SJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18d244b227SJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
19d244b227SJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
20d244b227SJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
21d244b227SJung-uk Kim  *    binary redistribution.
22d244b227SJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
23d244b227SJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
24d244b227SJung-uk Kim  *    from this software without specific prior written permission.
25a9f12690SJung-uk Kim  *
26d244b227SJung-uk Kim  * Alternatively, this software may be distributed under the terms of the
27d244b227SJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
28d244b227SJung-uk Kim  * Software Foundation.
29a9f12690SJung-uk Kim  *
30d244b227SJung-uk Kim  * NO WARRANTY
31d244b227SJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32d244b227SJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33d244b227SJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34d244b227SJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35d244b227SJung-uk Kim  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36d244b227SJung-uk Kim  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37d244b227SJung-uk Kim  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38d244b227SJung-uk Kim  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39d244b227SJung-uk Kim  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40d244b227SJung-uk Kim  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41d244b227SJung-uk Kim  * POSSIBILITY OF SUCH DAMAGES.
42d244b227SJung-uk Kim  */
43a9f12690SJung-uk Kim 
44a9f12690SJung-uk Kim 
45a9f12690SJung-uk Kim #ifndef __ACPARSER_H__
46a9f12690SJung-uk Kim #define __ACPARSER_H__
47a9f12690SJung-uk Kim 
48a9f12690SJung-uk Kim 
49a9f12690SJung-uk Kim #define OP_HAS_RETURN_VALUE             1
50a9f12690SJung-uk Kim 
51a9f12690SJung-uk Kim /* Variable number of arguments. This field must be 32 bits */
52a9f12690SJung-uk Kim 
53a9f12690SJung-uk Kim #define ACPI_VAR_ARGS                   ACPI_UINT32_MAX
54a9f12690SJung-uk Kim 
55a9f12690SJung-uk Kim 
56a9f12690SJung-uk Kim #define ACPI_PARSE_DELETE_TREE          0x0001
57a9f12690SJung-uk Kim #define ACPI_PARSE_NO_TREE_DELETE       0x0000
58a9f12690SJung-uk Kim #define ACPI_PARSE_TREE_MASK            0x0001
59a9f12690SJung-uk Kim 
60a9f12690SJung-uk Kim #define ACPI_PARSE_LOAD_PASS1           0x0010
61a9f12690SJung-uk Kim #define ACPI_PARSE_LOAD_PASS2           0x0020
62a9f12690SJung-uk Kim #define ACPI_PARSE_EXECUTE              0x0030
63a9f12690SJung-uk Kim #define ACPI_PARSE_MODE_MASK            0x0030
64a9f12690SJung-uk Kim 
65a9f12690SJung-uk Kim #define ACPI_PARSE_DEFERRED_OP          0x0100
66a9f12690SJung-uk Kim #define ACPI_PARSE_DISASSEMBLE          0x0200
67a9f12690SJung-uk Kim 
68d6dd1baeSJung-uk Kim #define ACPI_PARSE_MODULE_LEVEL         0x0400
69a9f12690SJung-uk Kim 
70a9f12690SJung-uk Kim /******************************************************************************
71a9f12690SJung-uk Kim  *
72a9f12690SJung-uk Kim  * Parser interfaces
73a9f12690SJung-uk Kim  *
74a9f12690SJung-uk Kim  *****************************************************************************/
75a9f12690SJung-uk Kim 
76a9f12690SJung-uk Kim 
77a9f12690SJung-uk Kim /*
78a9f12690SJung-uk Kim  * psxface - Parser external interfaces
79a9f12690SJung-uk Kim  */
80a9f12690SJung-uk Kim ACPI_STATUS
81a9f12690SJung-uk Kim AcpiPsExecuteMethod (
82a9f12690SJung-uk Kim     ACPI_EVALUATE_INFO      *Info);
83a9f12690SJung-uk Kim 
84a9f12690SJung-uk Kim 
85a9f12690SJung-uk Kim /*
86a9f12690SJung-uk Kim  * psargs - Parse AML opcode arguments
87a9f12690SJung-uk Kim  */
88a9f12690SJung-uk Kim UINT8 *
89a9f12690SJung-uk Kim AcpiPsGetNextPackageEnd (
90a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *ParserState);
91a9f12690SJung-uk Kim 
92a9f12690SJung-uk Kim char *
93a9f12690SJung-uk Kim AcpiPsGetNextNamestring (
94a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *ParserState);
95a9f12690SJung-uk Kim 
96a9f12690SJung-uk Kim void
97a9f12690SJung-uk Kim AcpiPsGetNextSimpleArg (
98a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *ParserState,
99a9f12690SJung-uk Kim     UINT32                  ArgType,
100a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Arg);
101a9f12690SJung-uk Kim 
102a9f12690SJung-uk Kim ACPI_STATUS
103a9f12690SJung-uk Kim AcpiPsGetNextNamepath (
104a9f12690SJung-uk Kim     ACPI_WALK_STATE         *WalkState,
105a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *ParserState,
106a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Arg,
107a9f12690SJung-uk Kim     BOOLEAN                 MethodCall);
108a9f12690SJung-uk Kim 
109a9f12690SJung-uk Kim ACPI_STATUS
110a9f12690SJung-uk Kim AcpiPsGetNextArg (
111a9f12690SJung-uk Kim     ACPI_WALK_STATE         *WalkState,
112a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *ParserState,
113a9f12690SJung-uk Kim     UINT32                  ArgType,
114a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       **ReturnArg);
115a9f12690SJung-uk Kim 
116a9f12690SJung-uk Kim 
117a9f12690SJung-uk Kim /*
118a9f12690SJung-uk Kim  * psfind
119a9f12690SJung-uk Kim  */
120a9f12690SJung-uk Kim ACPI_PARSE_OBJECT *
121a9f12690SJung-uk Kim AcpiPsFindName (
122a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Scope,
123a9f12690SJung-uk Kim     UINT32                  Name,
124a9f12690SJung-uk Kim     UINT32                  Opcode);
125a9f12690SJung-uk Kim 
126a9f12690SJung-uk Kim ACPI_PARSE_OBJECT*
127a9f12690SJung-uk Kim AcpiPsGetParent (
128a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op);
129a9f12690SJung-uk Kim 
130a9f12690SJung-uk Kim 
131a9f12690SJung-uk Kim /*
132*efcc2a30SJung-uk Kim  * psobject - support for parse object processing
133*efcc2a30SJung-uk Kim  */
134*efcc2a30SJung-uk Kim ACPI_STATUS
135*efcc2a30SJung-uk Kim AcpiPsBuildNamedOp (
136*efcc2a30SJung-uk Kim     ACPI_WALK_STATE         *WalkState,
137*efcc2a30SJung-uk Kim     UINT8                   *AmlOpStart,
138*efcc2a30SJung-uk Kim     ACPI_PARSE_OBJECT       *UnnamedOp,
139*efcc2a30SJung-uk Kim     ACPI_PARSE_OBJECT       **Op);
140*efcc2a30SJung-uk Kim 
141*efcc2a30SJung-uk Kim ACPI_STATUS
142*efcc2a30SJung-uk Kim AcpiPsCreateOp (
143*efcc2a30SJung-uk Kim     ACPI_WALK_STATE         *WalkState,
144*efcc2a30SJung-uk Kim     UINT8                   *AmlOpStart,
145*efcc2a30SJung-uk Kim     ACPI_PARSE_OBJECT       **NewOp);
146*efcc2a30SJung-uk Kim 
147*efcc2a30SJung-uk Kim ACPI_STATUS
148*efcc2a30SJung-uk Kim AcpiPsCompleteOp (
149*efcc2a30SJung-uk Kim     ACPI_WALK_STATE         *WalkState,
150*efcc2a30SJung-uk Kim     ACPI_PARSE_OBJECT       **Op,
151*efcc2a30SJung-uk Kim     ACPI_STATUS             Status);
152*efcc2a30SJung-uk Kim 
153*efcc2a30SJung-uk Kim ACPI_STATUS
154*efcc2a30SJung-uk Kim AcpiPsCompleteFinalOp (
155*efcc2a30SJung-uk Kim     ACPI_WALK_STATE         *WalkState,
156*efcc2a30SJung-uk Kim     ACPI_PARSE_OBJECT       *Op,
157*efcc2a30SJung-uk Kim     ACPI_STATUS             Status);
158*efcc2a30SJung-uk Kim 
159*efcc2a30SJung-uk Kim 
160*efcc2a30SJung-uk Kim /*
161*efcc2a30SJung-uk Kim  * psopinfo - AML Opcode information
162a9f12690SJung-uk Kim  */
163a9f12690SJung-uk Kim const ACPI_OPCODE_INFO *
164a9f12690SJung-uk Kim AcpiPsGetOpcodeInfo (
165a9f12690SJung-uk Kim     UINT16                  Opcode);
166a9f12690SJung-uk Kim 
167a9f12690SJung-uk Kim char *
168a9f12690SJung-uk Kim AcpiPsGetOpcodeName (
169a9f12690SJung-uk Kim     UINT16                  Opcode);
170a9f12690SJung-uk Kim 
171a9f12690SJung-uk Kim UINT8
172a9f12690SJung-uk Kim AcpiPsGetArgumentCount (
173a9f12690SJung-uk Kim     UINT32                  OpType);
174a9f12690SJung-uk Kim 
175a9f12690SJung-uk Kim 
176a9f12690SJung-uk Kim /*
177a9f12690SJung-uk Kim  * psparse - top level parsing routines
178a9f12690SJung-uk Kim  */
179a9f12690SJung-uk Kim ACPI_STATUS
180a9f12690SJung-uk Kim AcpiPsParseAml (
181a9f12690SJung-uk Kim     ACPI_WALK_STATE         *WalkState);
182a9f12690SJung-uk Kim 
183a9f12690SJung-uk Kim UINT32
184a9f12690SJung-uk Kim AcpiPsGetOpcodeSize (
185a9f12690SJung-uk Kim     UINT32                  Opcode);
186a9f12690SJung-uk Kim 
187a9f12690SJung-uk Kim UINT16
188a9f12690SJung-uk Kim AcpiPsPeekOpcode (
189a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *state);
190a9f12690SJung-uk Kim 
191a9f12690SJung-uk Kim ACPI_STATUS
192a9f12690SJung-uk Kim AcpiPsCompleteThisOp (
193a9f12690SJung-uk Kim     ACPI_WALK_STATE         *WalkState,
194a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op);
195a9f12690SJung-uk Kim 
196a9f12690SJung-uk Kim ACPI_STATUS
197a9f12690SJung-uk Kim AcpiPsNextParseState (
198a9f12690SJung-uk Kim     ACPI_WALK_STATE         *WalkState,
199a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op,
200a9f12690SJung-uk Kim     ACPI_STATUS             CallbackStatus);
201a9f12690SJung-uk Kim 
202a9f12690SJung-uk Kim 
203a9f12690SJung-uk Kim /*
204a9f12690SJung-uk Kim  * psloop - main parse loop
205a9f12690SJung-uk Kim  */
206a9f12690SJung-uk Kim ACPI_STATUS
207a9f12690SJung-uk Kim AcpiPsParseLoop (
208a9f12690SJung-uk Kim     ACPI_WALK_STATE         *WalkState);
209a9f12690SJung-uk Kim 
210a9f12690SJung-uk Kim 
211a9f12690SJung-uk Kim /*
212a9f12690SJung-uk Kim  * psscope - Scope stack management routines
213a9f12690SJung-uk Kim  */
214a9f12690SJung-uk Kim ACPI_STATUS
215a9f12690SJung-uk Kim AcpiPsInitScope (
216a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *ParserState,
217a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Root);
218a9f12690SJung-uk Kim 
219a9f12690SJung-uk Kim ACPI_PARSE_OBJECT *
220a9f12690SJung-uk Kim AcpiPsGetParentScope (
221a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *state);
222a9f12690SJung-uk Kim 
223a9f12690SJung-uk Kim BOOLEAN
224a9f12690SJung-uk Kim AcpiPsHasCompletedScope (
225a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *ParserState);
226a9f12690SJung-uk Kim 
227a9f12690SJung-uk Kim void
228a9f12690SJung-uk Kim AcpiPsPopScope (
229a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *ParserState,
230a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       **Op,
231a9f12690SJung-uk Kim     UINT32                  *ArgList,
232a9f12690SJung-uk Kim     UINT32                  *ArgCount);
233a9f12690SJung-uk Kim 
234a9f12690SJung-uk Kim ACPI_STATUS
235a9f12690SJung-uk Kim AcpiPsPushScope (
236a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *ParserState,
237a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op,
238a9f12690SJung-uk Kim     UINT32                  RemainingArgs,
239a9f12690SJung-uk Kim     UINT32                  ArgCount);
240a9f12690SJung-uk Kim 
241a9f12690SJung-uk Kim void
242a9f12690SJung-uk Kim AcpiPsCleanupScope (
243a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *state);
244a9f12690SJung-uk Kim 
245a9f12690SJung-uk Kim 
246a9f12690SJung-uk Kim /*
247a9f12690SJung-uk Kim  * pstree - parse tree manipulation routines
248a9f12690SJung-uk Kim  */
249a9f12690SJung-uk Kim void
250a9f12690SJung-uk Kim AcpiPsAppendArg(
251a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *op,
252a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *arg);
253a9f12690SJung-uk Kim 
254a9f12690SJung-uk Kim ACPI_PARSE_OBJECT*
255a9f12690SJung-uk Kim AcpiPsFind (
256a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Scope,
257a9f12690SJung-uk Kim     char                    *Path,
258a9f12690SJung-uk Kim     UINT16                  Opcode,
259a9f12690SJung-uk Kim     UINT32                  Create);
260a9f12690SJung-uk Kim 
261a9f12690SJung-uk Kim ACPI_PARSE_OBJECT *
262a9f12690SJung-uk Kim AcpiPsGetArg(
263a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *op,
264a9f12690SJung-uk Kim     UINT32                   argn);
265a9f12690SJung-uk Kim 
266a9f12690SJung-uk Kim ACPI_PARSE_OBJECT *
267a9f12690SJung-uk Kim AcpiPsGetDepthNext (
268a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Origin,
269a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op);
270a9f12690SJung-uk Kim 
271a9f12690SJung-uk Kim 
272a9f12690SJung-uk Kim /*
273a9f12690SJung-uk Kim  * pswalk - parse tree walk routines
274a9f12690SJung-uk Kim  */
275a9f12690SJung-uk Kim ACPI_STATUS
276a9f12690SJung-uk Kim AcpiPsWalkParsedAml (
277a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *StartOp,
278a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *EndOp,
279a9f12690SJung-uk Kim     ACPI_OPERAND_OBJECT     *MthDesc,
280a9f12690SJung-uk Kim     ACPI_NAMESPACE_NODE     *StartNode,
281a9f12690SJung-uk Kim     ACPI_OPERAND_OBJECT     **Params,
282a9f12690SJung-uk Kim     ACPI_OPERAND_OBJECT     **CallerReturnDesc,
283a9f12690SJung-uk Kim     ACPI_OWNER_ID           OwnerId,
284a9f12690SJung-uk Kim     ACPI_PARSE_DOWNWARDS    DescendingCallback,
285a9f12690SJung-uk Kim     ACPI_PARSE_UPWARDS      AscendingCallback);
286a9f12690SJung-uk Kim 
287a9f12690SJung-uk Kim ACPI_STATUS
288a9f12690SJung-uk Kim AcpiPsGetNextWalkOp (
289a9f12690SJung-uk Kim     ACPI_WALK_STATE         *WalkState,
290a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op,
291a9f12690SJung-uk Kim     ACPI_PARSE_UPWARDS      AscendingCallback);
292a9f12690SJung-uk Kim 
293a9f12690SJung-uk Kim ACPI_STATUS
294a9f12690SJung-uk Kim AcpiPsDeleteCompletedOp (
295a9f12690SJung-uk Kim     ACPI_WALK_STATE         *WalkState);
296a9f12690SJung-uk Kim 
297a9f12690SJung-uk Kim void
298a9f12690SJung-uk Kim AcpiPsDeleteParseTree (
299a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *root);
300a9f12690SJung-uk Kim 
301a9f12690SJung-uk Kim 
302a9f12690SJung-uk Kim /*
303a9f12690SJung-uk Kim  * psutils - parser utilities
304a9f12690SJung-uk Kim  */
305a9f12690SJung-uk Kim ACPI_PARSE_OBJECT *
306a9f12690SJung-uk Kim AcpiPsCreateScopeOp (
307a9f12690SJung-uk Kim     void);
308a9f12690SJung-uk Kim 
309a9f12690SJung-uk Kim void
310a9f12690SJung-uk Kim AcpiPsInitOp (
311a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *op,
312a9f12690SJung-uk Kim     UINT16                  opcode);
313a9f12690SJung-uk Kim 
314a9f12690SJung-uk Kim ACPI_PARSE_OBJECT *
315a9f12690SJung-uk Kim AcpiPsAllocOp (
316a9f12690SJung-uk Kim     UINT16                  opcode);
317a9f12690SJung-uk Kim 
318a9f12690SJung-uk Kim void
319a9f12690SJung-uk Kim AcpiPsFreeOp (
320a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op);
321a9f12690SJung-uk Kim 
322a9f12690SJung-uk Kim BOOLEAN
323a9f12690SJung-uk Kim AcpiPsIsLeadingChar (
324a9f12690SJung-uk Kim     UINT32                  c);
325a9f12690SJung-uk Kim 
326a9f12690SJung-uk Kim UINT32
327a9f12690SJung-uk Kim AcpiPsGetName(
328a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *op);
329a9f12690SJung-uk Kim 
330a9f12690SJung-uk Kim void
331a9f12690SJung-uk Kim AcpiPsSetName(
332a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *op,
333a9f12690SJung-uk Kim     UINT32                  name);
334a9f12690SJung-uk Kim 
335a9f12690SJung-uk Kim 
336a9f12690SJung-uk Kim /*
337a9f12690SJung-uk Kim  * psdump - display parser tree
338a9f12690SJung-uk Kim  */
339a9f12690SJung-uk Kim UINT32
340a9f12690SJung-uk Kim AcpiPsSprintPath (
341a9f12690SJung-uk Kim     char                    *BufferStart,
342a9f12690SJung-uk Kim     UINT32                  BufferSize,
343a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op);
344a9f12690SJung-uk Kim 
345a9f12690SJung-uk Kim UINT32
346a9f12690SJung-uk Kim AcpiPsSprintOp (
347a9f12690SJung-uk Kim     char                    *BufferStart,
348a9f12690SJung-uk Kim     UINT32                  BufferSize,
349a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op);
350a9f12690SJung-uk Kim 
351a9f12690SJung-uk Kim void
352a9f12690SJung-uk Kim AcpiPsShow (
353a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *op);
354a9f12690SJung-uk Kim 
355a9f12690SJung-uk Kim 
356a9f12690SJung-uk Kim #endif /* __ACPARSER_H__ */
357