1/******************************************************************************
2 *
3 * Name: acdispat.h - dispatcher (parser to interpreter interface)
4 *
5 *****************************************************************************/
6
7/******************************************************************************
8 *
9 * 1. Copyright Notice
10 *
11 * Some or all of this work - Copyright (c) 1999 - 2012, 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
117#ifndef _ACDISPAT_H_
118#define _ACDISPAT_H_
119
120
121#define NAMEOF_LOCAL_NTE    "__L0"
122#define NAMEOF_ARG_NTE      "__A0"
123
124
125/*
126 * dsargs - execution of dynamic arguments for static objects
127 */
128ACPI_STATUS
129AcpiDsGetBufferFieldArguments (
130    ACPI_OPERAND_OBJECT     *ObjDesc);
131
132ACPI_STATUS
133AcpiDsGetBankFieldArguments (
134    ACPI_OPERAND_OBJECT     *ObjDesc);
135
136ACPI_STATUS
137AcpiDsGetRegionArguments (
138    ACPI_OPERAND_OBJECT     *RgnDesc);
139
140ACPI_STATUS
141AcpiDsGetBufferArguments (
142    ACPI_OPERAND_OBJECT     *ObjDesc);
143
144ACPI_STATUS
145AcpiDsGetPackageArguments (
146    ACPI_OPERAND_OBJECT     *ObjDesc);
147
148
149/*
150 * dscontrol - support for execution control opcodes
151 */
152ACPI_STATUS
153AcpiDsExecBeginControlOp (
154    ACPI_WALK_STATE         *WalkState,
155    ACPI_PARSE_OBJECT       *Op);
156
157ACPI_STATUS
158AcpiDsExecEndControlOp (
159    ACPI_WALK_STATE         *WalkState,
160    ACPI_PARSE_OBJECT       *Op);
161
162
163/*
164 * dsopcode - support for late operand evaluation
165 */
166ACPI_STATUS
167AcpiDsEvalBufferFieldOperands (
168    ACPI_WALK_STATE         *WalkState,
169    ACPI_PARSE_OBJECT       *Op);
170
171ACPI_STATUS
172AcpiDsEvalRegionOperands (
173    ACPI_WALK_STATE         *WalkState,
174    ACPI_PARSE_OBJECT       *Op);
175
176ACPI_STATUS
177AcpiDsEvalTableRegionOperands (
178    ACPI_WALK_STATE         *WalkState,
179    ACPI_PARSE_OBJECT       *Op);
180
181ACPI_STATUS
182AcpiDsEvalDataObjectOperands (
183    ACPI_WALK_STATE         *WalkState,
184    ACPI_PARSE_OBJECT       *Op,
185    ACPI_OPERAND_OBJECT     *ObjDesc);
186
187ACPI_STATUS
188AcpiDsEvalBankFieldOperands (
189    ACPI_WALK_STATE         *WalkState,
190    ACPI_PARSE_OBJECT       *Op);
191
192ACPI_STATUS
193AcpiDsInitializeRegion (
194    ACPI_HANDLE             ObjHandle);
195
196
197/*
198 * dsexec - Parser/Interpreter interface, method execution callbacks
199 */
200ACPI_STATUS
201AcpiDsGetPredicateValue (
202    ACPI_WALK_STATE         *WalkState,
203    ACPI_OPERAND_OBJECT     *ResultObj);
204
205ACPI_STATUS
206AcpiDsExecBeginOp (
207    ACPI_WALK_STATE         *WalkState,
208    ACPI_PARSE_OBJECT       **OutOp);
209
210ACPI_STATUS
211AcpiDsExecEndOp (
212    ACPI_WALK_STATE         *State);
213
214
215/*
216 * dsfield - Parser/Interpreter interface for AML fields
217 */
218ACPI_STATUS
219AcpiDsCreateField (
220    ACPI_PARSE_OBJECT       *Op,
221    ACPI_NAMESPACE_NODE     *RegionNode,
222    ACPI_WALK_STATE         *WalkState);
223
224ACPI_STATUS
225AcpiDsCreateBankField (
226    ACPI_PARSE_OBJECT       *Op,
227    ACPI_NAMESPACE_NODE     *RegionNode,
228    ACPI_WALK_STATE         *WalkState);
229
230ACPI_STATUS
231AcpiDsCreateIndexField (
232    ACPI_PARSE_OBJECT       *Op,
233    ACPI_NAMESPACE_NODE     *RegionNode,
234    ACPI_WALK_STATE         *WalkState);
235
236ACPI_STATUS
237AcpiDsCreateBufferField (
238    ACPI_PARSE_OBJECT       *Op,
239    ACPI_WALK_STATE         *WalkState);
240
241ACPI_STATUS
242AcpiDsInitFieldObjects (
243    ACPI_PARSE_OBJECT       *Op,
244    ACPI_WALK_STATE         *WalkState);
245
246
247/*
248 * dsload - Parser/Interpreter interface, pass 1 namespace load callbacks
249 */
250ACPI_STATUS
251AcpiDsInitCallbacks (
252    ACPI_WALK_STATE         *WalkState,
253    UINT32                  PassNumber);
254
255ACPI_STATUS
256AcpiDsLoad1BeginOp (
257    ACPI_WALK_STATE         *WalkState,
258    ACPI_PARSE_OBJECT       **OutOp);
259
260ACPI_STATUS
261AcpiDsLoad1EndOp (
262    ACPI_WALK_STATE         *WalkState);
263
264
265/*
266 * dsload - Parser/Interpreter interface, pass 2 namespace load callbacks
267 */
268ACPI_STATUS
269AcpiDsLoad2BeginOp (
270    ACPI_WALK_STATE         *WalkState,
271    ACPI_PARSE_OBJECT       **OutOp);
272
273ACPI_STATUS
274AcpiDsLoad2EndOp (
275    ACPI_WALK_STATE         *WalkState);
276
277
278/*
279 * dsmthdat - method data (locals/args)
280 */
281ACPI_STATUS
282AcpiDsStoreObjectToLocal (
283    UINT8                   Type,
284    UINT32                  Index,
285    ACPI_OPERAND_OBJECT     *SrcDesc,
286    ACPI_WALK_STATE         *WalkState);
287
288ACPI_STATUS
289AcpiDsMethodDataGetEntry (
290    UINT16                  Opcode,
291    UINT32                  Index,
292    ACPI_WALK_STATE         *WalkState,
293    ACPI_OPERAND_OBJECT     ***Node);
294
295void
296AcpiDsMethodDataDeleteAll (
297    ACPI_WALK_STATE         *WalkState);
298
299BOOLEAN
300AcpiDsIsMethodValue (
301    ACPI_OPERAND_OBJECT     *ObjDesc);
302
303ACPI_STATUS
304AcpiDsMethodDataGetValue (
305    UINT8                   Type,
306    UINT32                  Index,
307    ACPI_WALK_STATE         *WalkState,
308    ACPI_OPERAND_OBJECT     **DestDesc);
309
310ACPI_STATUS
311AcpiDsMethodDataInitArgs (
312    ACPI_OPERAND_OBJECT     **Params,
313    UINT32                  MaxParamCount,
314    ACPI_WALK_STATE         *WalkState);
315
316ACPI_STATUS
317AcpiDsMethodDataGetNode (
318    UINT8                   Type,
319    UINT32                  Index,
320    ACPI_WALK_STATE         *WalkState,
321    ACPI_NAMESPACE_NODE     **Node);
322
323void
324AcpiDsMethodDataInit (
325    ACPI_WALK_STATE         *WalkState);
326
327
328/*
329 * dsmethod - Parser/Interpreter interface - control method parsing
330 */
331ACPI_STATUS
332AcpiDsParseMethod (
333    ACPI_NAMESPACE_NODE     *Node);
334
335ACPI_STATUS
336AcpiDsCallControlMethod (
337    ACPI_THREAD_STATE       *Thread,
338    ACPI_WALK_STATE         *WalkState,
339    ACPI_PARSE_OBJECT       *Op);
340
341ACPI_STATUS
342AcpiDsRestartControlMethod (
343    ACPI_WALK_STATE         *WalkState,
344    ACPI_OPERAND_OBJECT     *ReturnDesc);
345
346void
347AcpiDsTerminateControlMethod (
348    ACPI_OPERAND_OBJECT     *MethodDesc,
349    ACPI_WALK_STATE         *WalkState);
350
351ACPI_STATUS
352AcpiDsBeginMethodExecution (
353    ACPI_NAMESPACE_NODE     *MethodNode,
354    ACPI_OPERAND_OBJECT     *ObjDesc,
355    ACPI_WALK_STATE         *WalkState);
356
357ACPI_STATUS
358AcpiDsMethodError (
359    ACPI_STATUS             Status,
360    ACPI_WALK_STATE         *WalkState);
361
362/*
363 * dsinit
364 */
365ACPI_STATUS
366AcpiDsInitializeObjects (
367    UINT32                  TableIndex,
368    ACPI_NAMESPACE_NODE     *StartNode);
369
370
371/*
372 * dsobject - Parser/Interpreter interface - object initialization and conversion
373 */
374ACPI_STATUS
375AcpiDsBuildInternalBufferObj (
376    ACPI_WALK_STATE         *WalkState,
377    ACPI_PARSE_OBJECT       *Op,
378    UINT32                  BufferLength,
379    ACPI_OPERAND_OBJECT     **ObjDescPtr);
380
381ACPI_STATUS
382AcpiDsBuildInternalPackageObj (
383    ACPI_WALK_STATE         *WalkState,
384    ACPI_PARSE_OBJECT       *op,
385    UINT32                  PackageLength,
386    ACPI_OPERAND_OBJECT     **ObjDesc);
387
388ACPI_STATUS
389AcpiDsInitObjectFromOp (
390    ACPI_WALK_STATE         *WalkState,
391    ACPI_PARSE_OBJECT       *Op,
392    UINT16                  Opcode,
393    ACPI_OPERAND_OBJECT     **ObjDesc);
394
395ACPI_STATUS
396AcpiDsCreateNode (
397    ACPI_WALK_STATE         *WalkState,
398    ACPI_NAMESPACE_NODE     *Node,
399    ACPI_PARSE_OBJECT       *Op);
400
401
402/*
403 * dsutils - Parser/Interpreter interface utility routines
404 */
405void
406AcpiDsClearImplicitReturn (
407    ACPI_WALK_STATE         *WalkState);
408
409BOOLEAN
410AcpiDsDoImplicitReturn (
411    ACPI_OPERAND_OBJECT     *ReturnDesc,
412    ACPI_WALK_STATE         *WalkState,
413    BOOLEAN                 AddReference);
414
415BOOLEAN
416AcpiDsIsResultUsed (
417    ACPI_PARSE_OBJECT       *Op,
418    ACPI_WALK_STATE         *WalkState);
419
420void
421AcpiDsDeleteResultIfNotUsed (
422    ACPI_PARSE_OBJECT       *Op,
423    ACPI_OPERAND_OBJECT     *ResultObj,
424    ACPI_WALK_STATE         *WalkState);
425
426ACPI_STATUS
427AcpiDsCreateOperand (
428    ACPI_WALK_STATE         *WalkState,
429    ACPI_PARSE_OBJECT       *Arg,
430    UINT32                  ArgsRemaining);
431
432ACPI_STATUS
433AcpiDsCreateOperands (
434    ACPI_WALK_STATE         *WalkState,
435    ACPI_PARSE_OBJECT       *FirstArg);
436
437ACPI_STATUS
438AcpiDsResolveOperands (
439    ACPI_WALK_STATE         *WalkState);
440
441void
442AcpiDsClearOperands (
443    ACPI_WALK_STATE         *WalkState);
444
445ACPI_STATUS
446AcpiDsEvaluateNamePath (
447    ACPI_WALK_STATE         *WalkState);
448
449
450/*
451 * dswscope - Scope Stack manipulation
452 */
453ACPI_STATUS
454AcpiDsScopeStackPush (
455    ACPI_NAMESPACE_NODE     *Node,
456    ACPI_OBJECT_TYPE        Type,
457    ACPI_WALK_STATE         *WalkState);
458
459
460ACPI_STATUS
461AcpiDsScopeStackPop (
462    ACPI_WALK_STATE         *WalkState);
463
464void
465AcpiDsScopeStackClear (
466    ACPI_WALK_STATE         *WalkState);
467
468
469/*
470 * dswstate - parser WALK_STATE management routines
471 */
472ACPI_STATUS
473AcpiDsObjStackPush (
474    void                    *Object,
475    ACPI_WALK_STATE         *WalkState);
476
477ACPI_STATUS
478AcpiDsObjStackPop (
479    UINT32                  PopCount,
480    ACPI_WALK_STATE         *WalkState);
481
482ACPI_WALK_STATE *
483AcpiDsCreateWalkState (
484    ACPI_OWNER_ID           OwnerId,
485    ACPI_PARSE_OBJECT       *Origin,
486    ACPI_OPERAND_OBJECT     *MthDesc,
487    ACPI_THREAD_STATE       *Thread);
488
489ACPI_STATUS
490AcpiDsInitAmlWalk (
491    ACPI_WALK_STATE         *WalkState,
492    ACPI_PARSE_OBJECT       *Op,
493    ACPI_NAMESPACE_NODE     *MethodNode,
494    UINT8                   *AmlStart,
495    UINT32                  AmlLength,
496    ACPI_EVALUATE_INFO      *Info,
497    UINT8                   PassNumber);
498
499void
500AcpiDsObjStackPopAndDelete (
501    UINT32                  PopCount,
502    ACPI_WALK_STATE         *WalkState);
503
504void
505AcpiDsDeleteWalkState (
506    ACPI_WALK_STATE         *WalkState);
507
508ACPI_WALK_STATE *
509AcpiDsPopWalkState (
510    ACPI_THREAD_STATE       *Thread);
511
512void
513AcpiDsPushWalkState (
514    ACPI_WALK_STATE         *WalkState,
515    ACPI_THREAD_STATE       *Thread);
516
517ACPI_STATUS
518AcpiDsResultStackClear (
519    ACPI_WALK_STATE         *WalkState);
520
521ACPI_WALK_STATE *
522AcpiDsGetCurrentWalkState (
523    ACPI_THREAD_STATE       *Thread);
524
525ACPI_STATUS
526AcpiDsResultPop (
527    ACPI_OPERAND_OBJECT     **Object,
528    ACPI_WALK_STATE         *WalkState);
529
530ACPI_STATUS
531AcpiDsResultPush (
532    ACPI_OPERAND_OBJECT     *Object,
533    ACPI_WALK_STATE         *WalkState);
534
535#endif /* _ACDISPAT_H_ */
536