xref: /haiku/src/add-ons/kernel/bus_managers/acpi/acpica/include/acparser.h (revision 6c2abee2f5e73c3fc81c33da51ac610f8bf1117a)
1 /******************************************************************************
2  *
3  * Module Name: acparser.h - AML Parser subcomponent prototypes and defines
4  *
5  *****************************************************************************/
6 
7 /******************************************************************************
8  *
9  * 1. Copyright Notice
10  *
11  * Some or all of this work - Copyright (c) 1999 - 2016, Intel Corp.
12  * All rights reserved.
13  *
14  * 2. License
15  *
16  * 2.1. This is your license from Intel Corp. under its intellectual property
17  * rights. You may have additional license terms from the party that provided
18  * you this software, covering your right to use that party's intellectual
19  * property rights.
20  *
21  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22  * copy of the source code appearing in this file ("Covered Code") an
23  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24  * base code distributed originally by Intel ("Original Intel Code") to copy,
25  * make derivatives, distribute, use and display any portion of the Covered
26  * Code in any form, with the right to sublicense such rights; and
27  *
28  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29  * license (with the right to sublicense), under only those claims of Intel
30  * patents that are infringed by the Original Intel Code, to make, use, sell,
31  * offer to sell, and import the Covered Code and derivative works thereof
32  * solely to the minimum extent necessary to exercise the above copyright
33  * license, and in no event shall the patent license extend to any additions
34  * to or modifications of the Original Intel Code. No other license or right
35  * is granted directly or by implication, estoppel or otherwise;
36  *
37  * The above copyright and patent license is granted only if the following
38  * conditions are met:
39  *
40  * 3. Conditions
41  *
42  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43  * Redistribution of source code of any substantial portion of the Covered
44  * Code or modification with rights to further distribute source must include
45  * the above Copyright Notice, the above License, this list of Conditions,
46  * and the following Disclaimer and Export Compliance provision. In addition,
47  * Licensee must cause all Covered Code to which Licensee contributes to
48  * contain a file documenting the changes Licensee made to create that Covered
49  * Code and the date of any change. Licensee must include in that file the
50  * documentation of any changes made by any predecessor Licensee. Licensee
51  * must include a prominent statement that the modification is derived,
52  * directly or indirectly, from Original Intel Code.
53  *
54  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55  * Redistribution of source code of any substantial portion of the Covered
56  * Code or modification without rights to further distribute source must
57  * include the following Disclaimer and Export Compliance provision in the
58  * documentation and/or other materials provided with distribution. In
59  * addition, Licensee may not authorize further sublicense of source of any
60  * portion of the Covered Code, and must include terms to the effect that the
61  * license from Licensee to its licensee is limited to the intellectual
62  * property embodied in the software Licensee provides to its licensee, and
63  * not to intellectual property embodied in modifications its licensee may
64  * make.
65  *
66  * 3.3. Redistribution of Executable. Redistribution in executable form of any
67  * substantial portion of the Covered Code or modification must reproduce the
68  * above Copyright Notice, and the following Disclaimer and Export Compliance
69  * provision in the documentation and/or other materials provided with the
70  * distribution.
71  *
72  * 3.4. Intel retains all right, title, and interest in and to the Original
73  * Intel Code.
74  *
75  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76  * Intel shall be used in advertising or otherwise to promote the sale, use or
77  * other dealings in products derived from or relating to the Covered Code
78  * without prior written authorization from Intel.
79  *
80  * 4. Disclaimer and Export Compliance
81  *
82  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88  * PARTICULAR PURPOSE.
89  *
90  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97  * LIMITED REMEDY.
98  *
99  * 4.3. Licensee shall not export, either directly or indirectly, any of this
100  * software or system incorporating such software without first obtaining any
101  * required license or other approval from the U. S. Department of Commerce or
102  * any other agency or department of the United States Government. In the
103  * event Licensee exports any such software from the United States or
104  * re-exports any such software from a foreign destination, Licensee shall
105  * ensure that the distribution and export/re-export of the software is in
106  * compliance with all laws, regulations, orders, or other restrictions of the
107  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108  * any of its subsidiaries will export/re-export any technical data, process,
109  * software, or service, directly or indirectly, to any country for which the
110  * United States government or any agency thereof requires an export license,
111  * other governmental approval, or letter of assurance, without first obtaining
112  * such license, approval or letter.
113  *
114  *****************************************************************************/
115 
116 #ifndef __ACPARSER_H__
117 #define __ACPARSER_H__
118 
119 
120 #define OP_HAS_RETURN_VALUE             1
121 
122 /* Variable number of arguments. This field must be 32 bits */
123 
124 #define ACPI_VAR_ARGS                   ACPI_UINT32_MAX
125 
126 
127 #define ACPI_PARSE_DELETE_TREE          0x0001
128 #define ACPI_PARSE_NO_TREE_DELETE       0x0000
129 #define ACPI_PARSE_TREE_MASK            0x0001
130 
131 #define ACPI_PARSE_LOAD_PASS1           0x0010
132 #define ACPI_PARSE_LOAD_PASS2           0x0020
133 #define ACPI_PARSE_EXECUTE              0x0030
134 #define ACPI_PARSE_MODE_MASK            0x0030
135 
136 #define ACPI_PARSE_DEFERRED_OP          0x0100
137 #define ACPI_PARSE_DISASSEMBLE          0x0200
138 
139 #define ACPI_PARSE_MODULE_LEVEL         0x0400
140 
141 /******************************************************************************
142  *
143  * Parser interfaces
144  *
145  *****************************************************************************/
146 
147 extern const UINT8      AcpiGbl_ShortOpIndex[];
148 extern const UINT8      AcpiGbl_LongOpIndex[];
149 
150 
151 /*
152  * psxface - Parser external interfaces
153  */
154 ACPI_STATUS
155 AcpiPsExecuteMethod (
156     ACPI_EVALUATE_INFO      *Info);
157 
158 
159 /*
160  * psargs - Parse AML opcode arguments
161  */
162 UINT8 *
163 AcpiPsGetNextPackageEnd (
164     ACPI_PARSE_STATE        *ParserState);
165 
166 char *
167 AcpiPsGetNextNamestring (
168     ACPI_PARSE_STATE        *ParserState);
169 
170 void
171 AcpiPsGetNextSimpleArg (
172     ACPI_PARSE_STATE        *ParserState,
173     UINT32                  ArgType,
174     ACPI_PARSE_OBJECT       *Arg);
175 
176 ACPI_STATUS
177 AcpiPsGetNextNamepath (
178     ACPI_WALK_STATE         *WalkState,
179     ACPI_PARSE_STATE        *ParserState,
180     ACPI_PARSE_OBJECT       *Arg,
181     BOOLEAN                 PossibleMethodCall);
182 
183 /* Values for BOOLEAN above */
184 
185 #define ACPI_NOT_METHOD_CALL            FALSE
186 #define ACPI_POSSIBLE_METHOD_CALL       TRUE
187 
188 ACPI_STATUS
189 AcpiPsGetNextArg (
190     ACPI_WALK_STATE         *WalkState,
191     ACPI_PARSE_STATE        *ParserState,
192     UINT32                  ArgType,
193     ACPI_PARSE_OBJECT       **ReturnArg);
194 
195 
196 /*
197  * psfind
198  */
199 ACPI_PARSE_OBJECT *
200 AcpiPsFindName (
201     ACPI_PARSE_OBJECT       *Scope,
202     UINT32                  Name,
203     UINT32                  Opcode);
204 
205 ACPI_PARSE_OBJECT*
206 AcpiPsGetParent (
207     ACPI_PARSE_OBJECT       *Op);
208 
209 
210 /*
211  * psobject - support for parse object processing
212  */
213 ACPI_STATUS
214 AcpiPsBuildNamedOp (
215     ACPI_WALK_STATE         *WalkState,
216     UINT8                   *AmlOpStart,
217     ACPI_PARSE_OBJECT       *UnnamedOp,
218     ACPI_PARSE_OBJECT       **Op);
219 
220 ACPI_STATUS
221 AcpiPsCreateOp (
222     ACPI_WALK_STATE         *WalkState,
223     UINT8                   *AmlOpStart,
224     ACPI_PARSE_OBJECT       **NewOp);
225 
226 ACPI_STATUS
227 AcpiPsCompleteOp (
228     ACPI_WALK_STATE         *WalkState,
229     ACPI_PARSE_OBJECT       **Op,
230     ACPI_STATUS             Status);
231 
232 ACPI_STATUS
233 AcpiPsCompleteFinalOp (
234     ACPI_WALK_STATE         *WalkState,
235     ACPI_PARSE_OBJECT       *Op,
236     ACPI_STATUS             Status);
237 
238 
239 /*
240  * psopinfo - AML Opcode information
241  */
242 const ACPI_OPCODE_INFO *
243 AcpiPsGetOpcodeInfo (
244     UINT16                  Opcode);
245 
246 const char *
247 AcpiPsGetOpcodeName (
248     UINT16                  Opcode);
249 
250 UINT8
251 AcpiPsGetArgumentCount (
252     UINT32                  OpType);
253 
254 
255 /*
256  * psparse - top level parsing routines
257  */
258 ACPI_STATUS
259 AcpiPsParseAml (
260     ACPI_WALK_STATE         *WalkState);
261 
262 UINT32
263 AcpiPsGetOpcodeSize (
264     UINT32                  Opcode);
265 
266 UINT16
267 AcpiPsPeekOpcode (
268     ACPI_PARSE_STATE        *state);
269 
270 ACPI_STATUS
271 AcpiPsCompleteThisOp (
272     ACPI_WALK_STATE         *WalkState,
273     ACPI_PARSE_OBJECT       *Op);
274 
275 ACPI_STATUS
276 AcpiPsNextParseState (
277     ACPI_WALK_STATE         *WalkState,
278     ACPI_PARSE_OBJECT       *Op,
279     ACPI_STATUS             CallbackStatus);
280 
281 
282 /*
283  * psloop - main parse loop
284  */
285 ACPI_STATUS
286 AcpiPsParseLoop (
287     ACPI_WALK_STATE         *WalkState);
288 
289 
290 /*
291  * psscope - Scope stack management routines
292  */
293 ACPI_STATUS
294 AcpiPsInitScope (
295     ACPI_PARSE_STATE        *ParserState,
296     ACPI_PARSE_OBJECT       *Root);
297 
298 ACPI_PARSE_OBJECT *
299 AcpiPsGetParentScope (
300     ACPI_PARSE_STATE        *state);
301 
302 BOOLEAN
303 AcpiPsHasCompletedScope (
304     ACPI_PARSE_STATE        *ParserState);
305 
306 void
307 AcpiPsPopScope (
308     ACPI_PARSE_STATE        *ParserState,
309     ACPI_PARSE_OBJECT       **Op,
310     UINT32                  *ArgList,
311     UINT32                  *ArgCount);
312 
313 ACPI_STATUS
314 AcpiPsPushScope (
315     ACPI_PARSE_STATE        *ParserState,
316     ACPI_PARSE_OBJECT       *Op,
317     UINT32                  RemainingArgs,
318     UINT32                  ArgCount);
319 
320 void
321 AcpiPsCleanupScope (
322     ACPI_PARSE_STATE        *state);
323 
324 
325 /*
326  * pstree - parse tree manipulation routines
327  */
328 void
329 AcpiPsAppendArg(
330     ACPI_PARSE_OBJECT       *op,
331     ACPI_PARSE_OBJECT       *arg);
332 
333 ACPI_PARSE_OBJECT*
334 AcpiPsFind (
335     ACPI_PARSE_OBJECT       *Scope,
336     char                    *Path,
337     UINT16                  Opcode,
338     UINT32                  Create);
339 
340 ACPI_PARSE_OBJECT *
341 AcpiPsGetArg(
342     ACPI_PARSE_OBJECT       *op,
343     UINT32                   argn);
344 
345 ACPI_PARSE_OBJECT *
346 AcpiPsGetDepthNext (
347     ACPI_PARSE_OBJECT       *Origin,
348     ACPI_PARSE_OBJECT       *Op);
349 
350 
351 /*
352  * pswalk - parse tree walk routines
353  */
354 ACPI_STATUS
355 AcpiPsWalkParsedAml (
356     ACPI_PARSE_OBJECT       *StartOp,
357     ACPI_PARSE_OBJECT       *EndOp,
358     ACPI_OPERAND_OBJECT     *MthDesc,
359     ACPI_NAMESPACE_NODE     *StartNode,
360     ACPI_OPERAND_OBJECT     **Params,
361     ACPI_OPERAND_OBJECT     **CallerReturnDesc,
362     ACPI_OWNER_ID           OwnerId,
363     ACPI_PARSE_DOWNWARDS    DescendingCallback,
364     ACPI_PARSE_UPWARDS      AscendingCallback);
365 
366 ACPI_STATUS
367 AcpiPsGetNextWalkOp (
368     ACPI_WALK_STATE         *WalkState,
369     ACPI_PARSE_OBJECT       *Op,
370     ACPI_PARSE_UPWARDS      AscendingCallback);
371 
372 ACPI_STATUS
373 AcpiPsDeleteCompletedOp (
374     ACPI_WALK_STATE         *WalkState);
375 
376 void
377 AcpiPsDeleteParseTree (
378     ACPI_PARSE_OBJECT       *root);
379 
380 
381 /*
382  * psutils - parser utilities
383  */
384 ACPI_PARSE_OBJECT *
385 AcpiPsCreateScopeOp (
386     UINT8                   *Aml);
387 
388 void
389 AcpiPsInitOp (
390     ACPI_PARSE_OBJECT       *op,
391     UINT16                  opcode);
392 
393 ACPI_PARSE_OBJECT *
394 AcpiPsAllocOp (
395     UINT16                  Opcode,
396     UINT8                   *Aml);
397 
398 void
399 AcpiPsFreeOp (
400     ACPI_PARSE_OBJECT       *Op);
401 
402 BOOLEAN
403 AcpiPsIsLeadingChar (
404     UINT32                  c);
405 
406 UINT32
407 AcpiPsGetName(
408     ACPI_PARSE_OBJECT       *op);
409 
410 void
411 AcpiPsSetName(
412     ACPI_PARSE_OBJECT       *op,
413     UINT32                  name);
414 
415 
416 /*
417  * psdump - display parser tree
418  */
419 UINT32
420 AcpiPsSprintPath (
421     char                    *BufferStart,
422     UINT32                  BufferSize,
423     ACPI_PARSE_OBJECT       *Op);
424 
425 UINT32
426 AcpiPsSprintOp (
427     char                    *BufferStart,
428     UINT32                  BufferSize,
429     ACPI_PARSE_OBJECT       *Op);
430 
431 void
432 AcpiPsShow (
433     ACPI_PARSE_OBJECT       *op);
434 
435 
436 #endif /* __ACPARSER_H__ */
437