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