acdispat.h revision 1.1.1.12
1/******************************************************************************
2 *
3 * Name: acdispat.h - dispatcher (parser to interpreter interface)
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2020, 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
304AcpiDsBuildInternalObject (
305    ACPI_WALK_STATE         *WalkState,
306    ACPI_PARSE_OBJECT       *Op,
307    ACPI_OPERAND_OBJECT     **ObjDescPtr);
308
309ACPI_STATUS
310AcpiDsBuildInternalBufferObj (
311    ACPI_WALK_STATE         *WalkState,
312    ACPI_PARSE_OBJECT       *Op,
313    UINT32                  BufferLength,
314    ACPI_OPERAND_OBJECT     **ObjDescPtr);
315
316ACPI_STATUS
317AcpiDsBuildInternalPackageObj (
318    ACPI_WALK_STATE         *WalkState,
319    ACPI_PARSE_OBJECT       *op,
320    UINT32                  PackageLength,
321    ACPI_OPERAND_OBJECT     **ObjDesc);
322
323ACPI_STATUS
324AcpiDsInitObjectFromOp (
325    ACPI_WALK_STATE         *WalkState,
326    ACPI_PARSE_OBJECT       *Op,
327    UINT16                  Opcode,
328    ACPI_OPERAND_OBJECT     **ObjDesc);
329
330ACPI_STATUS
331AcpiDsCreateNode (
332    ACPI_WALK_STATE         *WalkState,
333    ACPI_NAMESPACE_NODE     *Node,
334    ACPI_PARSE_OBJECT       *Op);
335
336
337/*
338 * dspkginit - Package object initialization
339 */
340ACPI_STATUS
341AcpiDsInitPackageElement (
342    UINT8                   ObjectType,
343    ACPI_OPERAND_OBJECT     *SourceObject,
344    ACPI_GENERIC_STATE      *State,
345    void                    *Context);
346
347
348/*
349 * dsutils - Parser/Interpreter interface utility routines
350 */
351void
352AcpiDsClearImplicitReturn (
353    ACPI_WALK_STATE         *WalkState);
354
355BOOLEAN
356AcpiDsDoImplicitReturn (
357    ACPI_OPERAND_OBJECT     *ReturnDesc,
358    ACPI_WALK_STATE         *WalkState,
359    BOOLEAN                 AddReference);
360
361BOOLEAN
362AcpiDsIsResultUsed (
363    ACPI_PARSE_OBJECT       *Op,
364    ACPI_WALK_STATE         *WalkState);
365
366void
367AcpiDsDeleteResultIfNotUsed (
368    ACPI_PARSE_OBJECT       *Op,
369    ACPI_OPERAND_OBJECT     *ResultObj,
370    ACPI_WALK_STATE         *WalkState);
371
372ACPI_STATUS
373AcpiDsCreateOperand (
374    ACPI_WALK_STATE         *WalkState,
375    ACPI_PARSE_OBJECT       *Arg,
376    UINT32                  ArgsRemaining);
377
378ACPI_STATUS
379AcpiDsCreateOperands (
380    ACPI_WALK_STATE         *WalkState,
381    ACPI_PARSE_OBJECT       *FirstArg);
382
383ACPI_STATUS
384AcpiDsResolveOperands (
385    ACPI_WALK_STATE         *WalkState);
386
387void
388AcpiDsClearOperands (
389    ACPI_WALK_STATE         *WalkState);
390
391ACPI_STATUS
392AcpiDsEvaluateNamePath (
393    ACPI_WALK_STATE         *WalkState);
394
395
396/*
397 * dswscope - Scope Stack manipulation
398 */
399ACPI_STATUS
400AcpiDsScopeStackPush (
401    ACPI_NAMESPACE_NODE     *Node,
402    ACPI_OBJECT_TYPE        Type,
403    ACPI_WALK_STATE         *WalkState);
404
405
406ACPI_STATUS
407AcpiDsScopeStackPop (
408    ACPI_WALK_STATE         *WalkState);
409
410void
411AcpiDsScopeStackClear (
412    ACPI_WALK_STATE         *WalkState);
413
414
415/*
416 * dswstate - parser WALK_STATE management routines
417 */
418ACPI_STATUS
419AcpiDsObjStackPush (
420    void                    *Object,
421    ACPI_WALK_STATE         *WalkState);
422
423ACPI_STATUS
424AcpiDsObjStackPop (
425    UINT32                  PopCount,
426    ACPI_WALK_STATE         *WalkState);
427
428ACPI_WALK_STATE *
429AcpiDsCreateWalkState (
430    ACPI_OWNER_ID           OwnerId,
431    ACPI_PARSE_OBJECT       *Origin,
432    ACPI_OPERAND_OBJECT     *MthDesc,
433    ACPI_THREAD_STATE       *Thread);
434
435ACPI_STATUS
436AcpiDsInitAmlWalk (
437    ACPI_WALK_STATE         *WalkState,
438    ACPI_PARSE_OBJECT       *Op,
439    ACPI_NAMESPACE_NODE     *MethodNode,
440    UINT8                   *AmlStart,
441    UINT32                  AmlLength,
442    ACPI_EVALUATE_INFO      *Info,
443    UINT8                   PassNumber);
444
445void
446AcpiDsObjStackPopAndDelete (
447    UINT32                  PopCount,
448    ACPI_WALK_STATE         *WalkState);
449
450void
451AcpiDsDeleteWalkState (
452    ACPI_WALK_STATE         *WalkState);
453
454ACPI_WALK_STATE *
455AcpiDsPopWalkState (
456    ACPI_THREAD_STATE       *Thread);
457
458void
459AcpiDsPushWalkState (
460    ACPI_WALK_STATE         *WalkState,
461    ACPI_THREAD_STATE       *Thread);
462
463ACPI_STATUS
464AcpiDsResultStackClear (
465    ACPI_WALK_STATE         *WalkState);
466
467ACPI_WALK_STATE *
468AcpiDsGetCurrentWalkState (
469    ACPI_THREAD_STATE       *Thread);
470
471ACPI_STATUS
472AcpiDsResultPop (
473    ACPI_OPERAND_OBJECT     **Object,
474    ACPI_WALK_STATE         *WalkState);
475
476ACPI_STATUS
477AcpiDsResultPush (
478    ACPI_OPERAND_OBJECT     *Object,
479    ACPI_WALK_STATE         *WalkState);
480
481
482/*
483 * dsdebug - parser debugging routines
484 */
485void
486AcpiDsDumpMethodStack (
487    ACPI_STATUS             Status,
488    ACPI_WALK_STATE         *WalkState,
489    ACPI_PARSE_OBJECT       *Op);
490
491#endif /* _ACDISPAT_H_ */
492