acdispat.h revision 302408
1/******************************************************************************
2 *
3 * Name: acdispat.h - dispatcher (parser to interpreter interface)
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2016, Intel Corp.
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 *    notice, this list of conditions, and the following disclaimer,
16 *    without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 *    substantially similar to the "NO WARRANTY" disclaimer below
19 *    ("Disclaimer") and any redistribution must be conditioned upon
20 *    including a substantially similar Disclaimer requirement for further
21 *    binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 *    of any contributors may be used to endorse or promote products derived
24 *    from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef _ACDISPAT_H_
45#define _ACDISPAT_H_
46
47
48#define NAMEOF_LOCAL_NTE    "__L0"
49#define NAMEOF_ARG_NTE      "__A0"
50
51
52/*
53 * dsargs - execution of dynamic arguments for static objects
54 */
55ACPI_STATUS
56AcpiDsGetBufferFieldArguments (
57    ACPI_OPERAND_OBJECT     *ObjDesc);
58
59ACPI_STATUS
60AcpiDsGetBankFieldArguments (
61    ACPI_OPERAND_OBJECT     *ObjDesc);
62
63ACPI_STATUS
64AcpiDsGetRegionArguments (
65    ACPI_OPERAND_OBJECT     *RgnDesc);
66
67ACPI_STATUS
68AcpiDsGetBufferArguments (
69    ACPI_OPERAND_OBJECT     *ObjDesc);
70
71ACPI_STATUS
72AcpiDsGetPackageArguments (
73    ACPI_OPERAND_OBJECT     *ObjDesc);
74
75
76/*
77 * dscontrol - support for execution control opcodes
78 */
79ACPI_STATUS
80AcpiDsExecBeginControlOp (
81    ACPI_WALK_STATE         *WalkState,
82    ACPI_PARSE_OBJECT       *Op);
83
84ACPI_STATUS
85AcpiDsExecEndControlOp (
86    ACPI_WALK_STATE         *WalkState,
87    ACPI_PARSE_OBJECT       *Op);
88
89
90/*
91 * dsopcode - support for late operand evaluation
92 */
93ACPI_STATUS
94AcpiDsEvalBufferFieldOperands (
95    ACPI_WALK_STATE         *WalkState,
96    ACPI_PARSE_OBJECT       *Op);
97
98ACPI_STATUS
99AcpiDsEvalRegionOperands (
100    ACPI_WALK_STATE         *WalkState,
101    ACPI_PARSE_OBJECT       *Op);
102
103ACPI_STATUS
104AcpiDsEvalTableRegionOperands (
105    ACPI_WALK_STATE         *WalkState,
106    ACPI_PARSE_OBJECT       *Op);
107
108ACPI_STATUS
109AcpiDsEvalDataObjectOperands (
110    ACPI_WALK_STATE         *WalkState,
111    ACPI_PARSE_OBJECT       *Op,
112    ACPI_OPERAND_OBJECT     *ObjDesc);
113
114ACPI_STATUS
115AcpiDsEvalBankFieldOperands (
116    ACPI_WALK_STATE         *WalkState,
117    ACPI_PARSE_OBJECT       *Op);
118
119ACPI_STATUS
120AcpiDsInitializeRegion (
121    ACPI_HANDLE             ObjHandle);
122
123
124/*
125 * dsexec - Parser/Interpreter interface, method execution callbacks
126 */
127ACPI_STATUS
128AcpiDsGetPredicateValue (
129    ACPI_WALK_STATE         *WalkState,
130    ACPI_OPERAND_OBJECT     *ResultObj);
131
132ACPI_STATUS
133AcpiDsExecBeginOp (
134    ACPI_WALK_STATE         *WalkState,
135    ACPI_PARSE_OBJECT       **OutOp);
136
137ACPI_STATUS
138AcpiDsExecEndOp (
139    ACPI_WALK_STATE         *State);
140
141
142/*
143 * dsfield - Parser/Interpreter interface for AML fields
144 */
145ACPI_STATUS
146AcpiDsCreateField (
147    ACPI_PARSE_OBJECT       *Op,
148    ACPI_NAMESPACE_NODE     *RegionNode,
149    ACPI_WALK_STATE         *WalkState);
150
151ACPI_STATUS
152AcpiDsCreateBankField (
153    ACPI_PARSE_OBJECT       *Op,
154    ACPI_NAMESPACE_NODE     *RegionNode,
155    ACPI_WALK_STATE         *WalkState);
156
157ACPI_STATUS
158AcpiDsCreateIndexField (
159    ACPI_PARSE_OBJECT       *Op,
160    ACPI_NAMESPACE_NODE     *RegionNode,
161    ACPI_WALK_STATE         *WalkState);
162
163ACPI_STATUS
164AcpiDsCreateBufferField (
165    ACPI_PARSE_OBJECT       *Op,
166    ACPI_WALK_STATE         *WalkState);
167
168ACPI_STATUS
169AcpiDsInitFieldObjects (
170    ACPI_PARSE_OBJECT       *Op,
171    ACPI_WALK_STATE         *WalkState);
172
173
174/*
175 * dsload - Parser/Interpreter interface
176 */
177ACPI_STATUS
178AcpiDsInitCallbacks (
179    ACPI_WALK_STATE         *WalkState,
180    UINT32                  PassNumber);
181
182/* dsload - pass 1 namespace load callbacks */
183
184ACPI_STATUS
185AcpiDsLoad1BeginOp (
186    ACPI_WALK_STATE         *WalkState,
187    ACPI_PARSE_OBJECT       **OutOp);
188
189ACPI_STATUS
190AcpiDsLoad1EndOp (
191    ACPI_WALK_STATE         *WalkState);
192
193
194/* dsload - pass 2 namespace load callbacks */
195
196ACPI_STATUS
197AcpiDsLoad2BeginOp (
198    ACPI_WALK_STATE         *WalkState,
199    ACPI_PARSE_OBJECT       **OutOp);
200
201ACPI_STATUS
202AcpiDsLoad2EndOp (
203    ACPI_WALK_STATE         *WalkState);
204
205
206/*
207 * dsmthdat - method data (locals/args)
208 */
209ACPI_STATUS
210AcpiDsStoreObjectToLocal (
211    UINT8                   Type,
212    UINT32                  Index,
213    ACPI_OPERAND_OBJECT     *SrcDesc,
214    ACPI_WALK_STATE         *WalkState);
215
216ACPI_STATUS
217AcpiDsMethodDataGetEntry (
218    UINT16                  Opcode,
219    UINT32                  Index,
220    ACPI_WALK_STATE         *WalkState,
221    ACPI_OPERAND_OBJECT     ***Node);
222
223void
224AcpiDsMethodDataDeleteAll (
225    ACPI_WALK_STATE         *WalkState);
226
227BOOLEAN
228AcpiDsIsMethodValue (
229    ACPI_OPERAND_OBJECT     *ObjDesc);
230
231ACPI_STATUS
232AcpiDsMethodDataGetValue (
233    UINT8                   Type,
234    UINT32                  Index,
235    ACPI_WALK_STATE         *WalkState,
236    ACPI_OPERAND_OBJECT     **DestDesc);
237
238ACPI_STATUS
239AcpiDsMethodDataInitArgs (
240    ACPI_OPERAND_OBJECT     **Params,
241    UINT32                  MaxParamCount,
242    ACPI_WALK_STATE         *WalkState);
243
244ACPI_STATUS
245AcpiDsMethodDataGetNode (
246    UINT8                   Type,
247    UINT32                  Index,
248    ACPI_WALK_STATE         *WalkState,
249    ACPI_NAMESPACE_NODE     **Node);
250
251void
252AcpiDsMethodDataInit (
253    ACPI_WALK_STATE         *WalkState);
254
255
256/*
257 * dsmethod - Parser/Interpreter interface - control method parsing
258 */
259ACPI_STATUS
260AcpiDsAutoSerializeMethod (
261    ACPI_NAMESPACE_NODE     *Node,
262    ACPI_OPERAND_OBJECT     *ObjDesc);
263
264ACPI_STATUS
265AcpiDsCallControlMethod (
266    ACPI_THREAD_STATE       *Thread,
267    ACPI_WALK_STATE         *WalkState,
268    ACPI_PARSE_OBJECT       *Op);
269
270ACPI_STATUS
271AcpiDsRestartControlMethod (
272    ACPI_WALK_STATE         *WalkState,
273    ACPI_OPERAND_OBJECT     *ReturnDesc);
274
275void
276AcpiDsTerminateControlMethod (
277    ACPI_OPERAND_OBJECT     *MethodDesc,
278    ACPI_WALK_STATE         *WalkState);
279
280ACPI_STATUS
281AcpiDsBeginMethodExecution (
282    ACPI_NAMESPACE_NODE     *MethodNode,
283    ACPI_OPERAND_OBJECT     *ObjDesc,
284    ACPI_WALK_STATE         *WalkState);
285
286ACPI_STATUS
287AcpiDsMethodError (
288    ACPI_STATUS             Status,
289    ACPI_WALK_STATE         *WalkState);
290
291/*
292 * dsinit
293 */
294ACPI_STATUS
295AcpiDsInitializeObjects (
296    UINT32                  TableIndex,
297    ACPI_NAMESPACE_NODE     *StartNode);
298
299
300/*
301 * dsobject - Parser/Interpreter interface - object initialization and conversion
302 */
303ACPI_STATUS
304AcpiDsBuildInternalBufferObj (
305    ACPI_WALK_STATE         *WalkState,
306    ACPI_PARSE_OBJECT       *Op,
307    UINT32                  BufferLength,
308    ACPI_OPERAND_OBJECT     **ObjDescPtr);
309
310ACPI_STATUS
311AcpiDsBuildInternalPackageObj (
312    ACPI_WALK_STATE         *WalkState,
313    ACPI_PARSE_OBJECT       *op,
314    UINT32                  PackageLength,
315    ACPI_OPERAND_OBJECT     **ObjDesc);
316
317ACPI_STATUS
318AcpiDsInitObjectFromOp (
319    ACPI_WALK_STATE         *WalkState,
320    ACPI_PARSE_OBJECT       *Op,
321    UINT16                  Opcode,
322    ACPI_OPERAND_OBJECT     **ObjDesc);
323
324ACPI_STATUS
325AcpiDsCreateNode (
326    ACPI_WALK_STATE         *WalkState,
327    ACPI_NAMESPACE_NODE     *Node,
328    ACPI_PARSE_OBJECT       *Op);
329
330
331/*
332 * dsutils - Parser/Interpreter interface utility routines
333 */
334void
335AcpiDsClearImplicitReturn (
336    ACPI_WALK_STATE         *WalkState);
337
338BOOLEAN
339AcpiDsDoImplicitReturn (
340    ACPI_OPERAND_OBJECT     *ReturnDesc,
341    ACPI_WALK_STATE         *WalkState,
342    BOOLEAN                 AddReference);
343
344BOOLEAN
345AcpiDsIsResultUsed (
346    ACPI_PARSE_OBJECT       *Op,
347    ACPI_WALK_STATE         *WalkState);
348
349void
350AcpiDsDeleteResultIfNotUsed (
351    ACPI_PARSE_OBJECT       *Op,
352    ACPI_OPERAND_OBJECT     *ResultObj,
353    ACPI_WALK_STATE         *WalkState);
354
355ACPI_STATUS
356AcpiDsCreateOperand (
357    ACPI_WALK_STATE         *WalkState,
358    ACPI_PARSE_OBJECT       *Arg,
359    UINT32                  ArgsRemaining);
360
361ACPI_STATUS
362AcpiDsCreateOperands (
363    ACPI_WALK_STATE         *WalkState,
364    ACPI_PARSE_OBJECT       *FirstArg);
365
366ACPI_STATUS
367AcpiDsResolveOperands (
368    ACPI_WALK_STATE         *WalkState);
369
370void
371AcpiDsClearOperands (
372    ACPI_WALK_STATE         *WalkState);
373
374ACPI_STATUS
375AcpiDsEvaluateNamePath (
376    ACPI_WALK_STATE         *WalkState);
377
378
379/*
380 * dswscope - Scope Stack manipulation
381 */
382ACPI_STATUS
383AcpiDsScopeStackPush (
384    ACPI_NAMESPACE_NODE     *Node,
385    ACPI_OBJECT_TYPE        Type,
386    ACPI_WALK_STATE         *WalkState);
387
388
389ACPI_STATUS
390AcpiDsScopeStackPop (
391    ACPI_WALK_STATE         *WalkState);
392
393void
394AcpiDsScopeStackClear (
395    ACPI_WALK_STATE         *WalkState);
396
397
398/*
399 * dswstate - parser WALK_STATE management routines
400 */
401ACPI_STATUS
402AcpiDsObjStackPush (
403    void                    *Object,
404    ACPI_WALK_STATE         *WalkState);
405
406ACPI_STATUS
407AcpiDsObjStackPop (
408    UINT32                  PopCount,
409    ACPI_WALK_STATE         *WalkState);
410
411ACPI_WALK_STATE *
412AcpiDsCreateWalkState (
413    ACPI_OWNER_ID           OwnerId,
414    ACPI_PARSE_OBJECT       *Origin,
415    ACPI_OPERAND_OBJECT     *MthDesc,
416    ACPI_THREAD_STATE       *Thread);
417
418ACPI_STATUS
419AcpiDsInitAmlWalk (
420    ACPI_WALK_STATE         *WalkState,
421    ACPI_PARSE_OBJECT       *Op,
422    ACPI_NAMESPACE_NODE     *MethodNode,
423    UINT8                   *AmlStart,
424    UINT32                  AmlLength,
425    ACPI_EVALUATE_INFO      *Info,
426    UINT8                   PassNumber);
427
428void
429AcpiDsObjStackPopAndDelete (
430    UINT32                  PopCount,
431    ACPI_WALK_STATE         *WalkState);
432
433void
434AcpiDsDeleteWalkState (
435    ACPI_WALK_STATE         *WalkState);
436
437ACPI_WALK_STATE *
438AcpiDsPopWalkState (
439    ACPI_THREAD_STATE       *Thread);
440
441void
442AcpiDsPushWalkState (
443    ACPI_WALK_STATE         *WalkState,
444    ACPI_THREAD_STATE       *Thread);
445
446ACPI_STATUS
447AcpiDsResultStackClear (
448    ACPI_WALK_STATE         *WalkState);
449
450ACPI_WALK_STATE *
451AcpiDsGetCurrentWalkState (
452    ACPI_THREAD_STATE       *Thread);
453
454ACPI_STATUS
455AcpiDsResultPop (
456    ACPI_OPERAND_OBJECT     **Object,
457    ACPI_WALK_STATE         *WalkState);
458
459ACPI_STATUS
460AcpiDsResultPush (
461    ACPI_OPERAND_OBJECT     *Object,
462    ACPI_WALK_STATE         *WalkState);
463
464
465/*
466 * dsdebug - parser debugging routines
467 */
468void
469AcpiDsDumpMethodStack (
470    ACPI_STATUS             Status,
471    ACPI_WALK_STATE         *WalkState,
472    ACPI_PARSE_OBJECT       *Op);
473
474#endif /* _ACDISPAT_H_ */
475