xref: /freebsd/sys/contrib/dev/acpica/include/acparser.h (revision d244b2279c2f63fc930fa1c11a6033b7119d426a)
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 
7*d244b227SJung-uk Kim /*
8*d244b227SJung-uk Kim  * Copyright (C) 2000 - 2011, Intel Corp.
9a9f12690SJung-uk Kim  * All rights reserved.
10a9f12690SJung-uk Kim  *
11*d244b227SJung-uk Kim  * Redistribution and use in source and binary forms, with or without
12*d244b227SJung-uk Kim  * modification, are permitted provided that the following conditions
13*d244b227SJung-uk Kim  * are met:
14*d244b227SJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
15*d244b227SJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
16*d244b227SJung-uk Kim  *    without modification.
17*d244b227SJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18*d244b227SJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
19*d244b227SJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
20*d244b227SJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
21*d244b227SJung-uk Kim  *    binary redistribution.
22*d244b227SJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
23*d244b227SJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
24*d244b227SJung-uk Kim  *    from this software without specific prior written permission.
25a9f12690SJung-uk Kim  *
26*d244b227SJung-uk Kim  * Alternatively, this software may be distributed under the terms of the
27*d244b227SJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
28*d244b227SJung-uk Kim  * Software Foundation.
29a9f12690SJung-uk Kim  *
30*d244b227SJung-uk Kim  * NO WARRANTY
31*d244b227SJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32*d244b227SJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33*d244b227SJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34*d244b227SJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35*d244b227SJung-uk Kim  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36*d244b227SJung-uk Kim  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37*d244b227SJung-uk Kim  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38*d244b227SJung-uk Kim  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39*d244b227SJung-uk Kim  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40*d244b227SJung-uk Kim  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41*d244b227SJung-uk Kim  * POSSIBILITY OF SUCH DAMAGES.
42*d244b227SJung-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 /*
132a9f12690SJung-uk Kim  * psopcode - AML Opcode information
133a9f12690SJung-uk Kim  */
134a9f12690SJung-uk Kim const ACPI_OPCODE_INFO *
135a9f12690SJung-uk Kim AcpiPsGetOpcodeInfo (
136a9f12690SJung-uk Kim     UINT16                  Opcode);
137a9f12690SJung-uk Kim 
138a9f12690SJung-uk Kim char *
139a9f12690SJung-uk Kim AcpiPsGetOpcodeName (
140a9f12690SJung-uk Kim     UINT16                  Opcode);
141a9f12690SJung-uk Kim 
142a9f12690SJung-uk Kim UINT8
143a9f12690SJung-uk Kim AcpiPsGetArgumentCount (
144a9f12690SJung-uk Kim     UINT32                  OpType);
145a9f12690SJung-uk Kim 
146a9f12690SJung-uk Kim 
147a9f12690SJung-uk Kim /*
148a9f12690SJung-uk Kim  * psparse - top level parsing routines
149a9f12690SJung-uk Kim  */
150a9f12690SJung-uk Kim ACPI_STATUS
151a9f12690SJung-uk Kim AcpiPsParseAml (
152a9f12690SJung-uk Kim     ACPI_WALK_STATE         *WalkState);
153a9f12690SJung-uk Kim 
154a9f12690SJung-uk Kim UINT32
155a9f12690SJung-uk Kim AcpiPsGetOpcodeSize (
156a9f12690SJung-uk Kim     UINT32                  Opcode);
157a9f12690SJung-uk Kim 
158a9f12690SJung-uk Kim UINT16
159a9f12690SJung-uk Kim AcpiPsPeekOpcode (
160a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *state);
161a9f12690SJung-uk Kim 
162a9f12690SJung-uk Kim ACPI_STATUS
163a9f12690SJung-uk Kim AcpiPsCompleteThisOp (
164a9f12690SJung-uk Kim     ACPI_WALK_STATE         *WalkState,
165a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op);
166a9f12690SJung-uk Kim 
167a9f12690SJung-uk Kim ACPI_STATUS
168a9f12690SJung-uk Kim AcpiPsNextParseState (
169a9f12690SJung-uk Kim     ACPI_WALK_STATE         *WalkState,
170a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op,
171a9f12690SJung-uk Kim     ACPI_STATUS             CallbackStatus);
172a9f12690SJung-uk Kim 
173a9f12690SJung-uk Kim 
174a9f12690SJung-uk Kim /*
175a9f12690SJung-uk Kim  * psloop - main parse loop
176a9f12690SJung-uk Kim  */
177a9f12690SJung-uk Kim ACPI_STATUS
178a9f12690SJung-uk Kim AcpiPsParseLoop (
179a9f12690SJung-uk Kim     ACPI_WALK_STATE         *WalkState);
180a9f12690SJung-uk Kim 
181a9f12690SJung-uk Kim 
182a9f12690SJung-uk Kim /*
183a9f12690SJung-uk Kim  * psscope - Scope stack management routines
184a9f12690SJung-uk Kim  */
185a9f12690SJung-uk Kim ACPI_STATUS
186a9f12690SJung-uk Kim AcpiPsInitScope (
187a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *ParserState,
188a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Root);
189a9f12690SJung-uk Kim 
190a9f12690SJung-uk Kim ACPI_PARSE_OBJECT *
191a9f12690SJung-uk Kim AcpiPsGetParentScope (
192a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *state);
193a9f12690SJung-uk Kim 
194a9f12690SJung-uk Kim BOOLEAN
195a9f12690SJung-uk Kim AcpiPsHasCompletedScope (
196a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *ParserState);
197a9f12690SJung-uk Kim 
198a9f12690SJung-uk Kim void
199a9f12690SJung-uk Kim AcpiPsPopScope (
200a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *ParserState,
201a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       **Op,
202a9f12690SJung-uk Kim     UINT32                  *ArgList,
203a9f12690SJung-uk Kim     UINT32                  *ArgCount);
204a9f12690SJung-uk Kim 
205a9f12690SJung-uk Kim ACPI_STATUS
206a9f12690SJung-uk Kim AcpiPsPushScope (
207a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *ParserState,
208a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op,
209a9f12690SJung-uk Kim     UINT32                  RemainingArgs,
210a9f12690SJung-uk Kim     UINT32                  ArgCount);
211a9f12690SJung-uk Kim 
212a9f12690SJung-uk Kim void
213a9f12690SJung-uk Kim AcpiPsCleanupScope (
214a9f12690SJung-uk Kim     ACPI_PARSE_STATE        *state);
215a9f12690SJung-uk Kim 
216a9f12690SJung-uk Kim 
217a9f12690SJung-uk Kim /*
218a9f12690SJung-uk Kim  * pstree - parse tree manipulation routines
219a9f12690SJung-uk Kim  */
220a9f12690SJung-uk Kim void
221a9f12690SJung-uk Kim AcpiPsAppendArg(
222a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *op,
223a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *arg);
224a9f12690SJung-uk Kim 
225a9f12690SJung-uk Kim ACPI_PARSE_OBJECT*
226a9f12690SJung-uk Kim AcpiPsFind (
227a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Scope,
228a9f12690SJung-uk Kim     char                    *Path,
229a9f12690SJung-uk Kim     UINT16                  Opcode,
230a9f12690SJung-uk Kim     UINT32                  Create);
231a9f12690SJung-uk Kim 
232a9f12690SJung-uk Kim ACPI_PARSE_OBJECT *
233a9f12690SJung-uk Kim AcpiPsGetArg(
234a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *op,
235a9f12690SJung-uk Kim     UINT32                   argn);
236a9f12690SJung-uk Kim 
237a9f12690SJung-uk Kim ACPI_PARSE_OBJECT *
238a9f12690SJung-uk Kim AcpiPsGetDepthNext (
239a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Origin,
240a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op);
241a9f12690SJung-uk Kim 
242a9f12690SJung-uk Kim 
243a9f12690SJung-uk Kim /*
244a9f12690SJung-uk Kim  * pswalk - parse tree walk routines
245a9f12690SJung-uk Kim  */
246a9f12690SJung-uk Kim ACPI_STATUS
247a9f12690SJung-uk Kim AcpiPsWalkParsedAml (
248a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *StartOp,
249a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *EndOp,
250a9f12690SJung-uk Kim     ACPI_OPERAND_OBJECT     *MthDesc,
251a9f12690SJung-uk Kim     ACPI_NAMESPACE_NODE     *StartNode,
252a9f12690SJung-uk Kim     ACPI_OPERAND_OBJECT     **Params,
253a9f12690SJung-uk Kim     ACPI_OPERAND_OBJECT     **CallerReturnDesc,
254a9f12690SJung-uk Kim     ACPI_OWNER_ID           OwnerId,
255a9f12690SJung-uk Kim     ACPI_PARSE_DOWNWARDS    DescendingCallback,
256a9f12690SJung-uk Kim     ACPI_PARSE_UPWARDS      AscendingCallback);
257a9f12690SJung-uk Kim 
258a9f12690SJung-uk Kim ACPI_STATUS
259a9f12690SJung-uk Kim AcpiPsGetNextWalkOp (
260a9f12690SJung-uk Kim     ACPI_WALK_STATE         *WalkState,
261a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op,
262a9f12690SJung-uk Kim     ACPI_PARSE_UPWARDS      AscendingCallback);
263a9f12690SJung-uk Kim 
264a9f12690SJung-uk Kim ACPI_STATUS
265a9f12690SJung-uk Kim AcpiPsDeleteCompletedOp (
266a9f12690SJung-uk Kim     ACPI_WALK_STATE         *WalkState);
267a9f12690SJung-uk Kim 
268a9f12690SJung-uk Kim void
269a9f12690SJung-uk Kim AcpiPsDeleteParseTree (
270a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *root);
271a9f12690SJung-uk Kim 
272a9f12690SJung-uk Kim 
273a9f12690SJung-uk Kim /*
274a9f12690SJung-uk Kim  * psutils - parser utilities
275a9f12690SJung-uk Kim  */
276a9f12690SJung-uk Kim ACPI_PARSE_OBJECT *
277a9f12690SJung-uk Kim AcpiPsCreateScopeOp (
278a9f12690SJung-uk Kim     void);
279a9f12690SJung-uk Kim 
280a9f12690SJung-uk Kim void
281a9f12690SJung-uk Kim AcpiPsInitOp (
282a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *op,
283a9f12690SJung-uk Kim     UINT16                  opcode);
284a9f12690SJung-uk Kim 
285a9f12690SJung-uk Kim ACPI_PARSE_OBJECT *
286a9f12690SJung-uk Kim AcpiPsAllocOp (
287a9f12690SJung-uk Kim     UINT16                  opcode);
288a9f12690SJung-uk Kim 
289a9f12690SJung-uk Kim void
290a9f12690SJung-uk Kim AcpiPsFreeOp (
291a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op);
292a9f12690SJung-uk Kim 
293a9f12690SJung-uk Kim BOOLEAN
294a9f12690SJung-uk Kim AcpiPsIsLeadingChar (
295a9f12690SJung-uk Kim     UINT32                  c);
296a9f12690SJung-uk Kim 
297a9f12690SJung-uk Kim BOOLEAN
298a9f12690SJung-uk Kim AcpiPsIsPrefixChar (
299a9f12690SJung-uk Kim     UINT32                  c);
300a9f12690SJung-uk Kim 
301a9f12690SJung-uk Kim UINT32
302a9f12690SJung-uk Kim AcpiPsGetName(
303a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *op);
304a9f12690SJung-uk Kim 
305a9f12690SJung-uk Kim void
306a9f12690SJung-uk Kim AcpiPsSetName(
307a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *op,
308a9f12690SJung-uk Kim     UINT32                  name);
309a9f12690SJung-uk Kim 
310a9f12690SJung-uk Kim 
311a9f12690SJung-uk Kim /*
312a9f12690SJung-uk Kim  * psdump - display parser tree
313a9f12690SJung-uk Kim  */
314a9f12690SJung-uk Kim UINT32
315a9f12690SJung-uk Kim AcpiPsSprintPath (
316a9f12690SJung-uk Kim     char                    *BufferStart,
317a9f12690SJung-uk Kim     UINT32                  BufferSize,
318a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op);
319a9f12690SJung-uk Kim 
320a9f12690SJung-uk Kim UINT32
321a9f12690SJung-uk Kim AcpiPsSprintOp (
322a9f12690SJung-uk Kim     char                    *BufferStart,
323a9f12690SJung-uk Kim     UINT32                  BufferSize,
324a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op);
325a9f12690SJung-uk Kim 
326a9f12690SJung-uk Kim void
327a9f12690SJung-uk Kim AcpiPsShow (
328a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *op);
329a9f12690SJung-uk Kim 
330a9f12690SJung-uk Kim 
331a9f12690SJung-uk Kim #endif /* __ACPARSER_H__ */
332