1 /******************************************************************************
2  *
3  * Name: acdispat.h - dispatcher (parser to interpreter interface)
4  *
5  *****************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2014, 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 
45 #ifndef _ACDISPAT_H_
46 #define _ACDISPAT_H_
47 
48 
49 #pragma pack(push) /* Set default struct packing */
50 
51 #define NAMEOF_LOCAL_NTE    "__L0"
52 #define NAMEOF_ARG_NTE      "__A0"
53 
54 
55 /*
56  * dsargs - execution of dynamic arguments for static objects
57  */
58 ACPI_STATUS
59 AcpiDsGetBufferFieldArguments (
60     ACPI_OPERAND_OBJECT     *ObjDesc);
61 
62 ACPI_STATUS
63 AcpiDsGetBankFieldArguments (
64     ACPI_OPERAND_OBJECT     *ObjDesc);
65 
66 ACPI_STATUS
67 AcpiDsGetRegionArguments (
68     ACPI_OPERAND_OBJECT     *RgnDesc);
69 
70 ACPI_STATUS
71 AcpiDsGetBufferArguments (
72     ACPI_OPERAND_OBJECT     *ObjDesc);
73 
74 ACPI_STATUS
75 AcpiDsGetPackageArguments (
76     ACPI_OPERAND_OBJECT     *ObjDesc);
77 
78 
79 /*
80  * dscontrol - support for execution control opcodes
81  */
82 ACPI_STATUS
83 AcpiDsExecBeginControlOp (
84     ACPI_WALK_STATE         *WalkState,
85     ACPI_PARSE_OBJECT       *Op);
86 
87 ACPI_STATUS
88 AcpiDsExecEndControlOp (
89     ACPI_WALK_STATE         *WalkState,
90     ACPI_PARSE_OBJECT       *Op);
91 
92 
93 /*
94  * dsopcode - support for late operand evaluation
95  */
96 ACPI_STATUS
97 AcpiDsEvalBufferFieldOperands (
98     ACPI_WALK_STATE         *WalkState,
99     ACPI_PARSE_OBJECT       *Op);
100 
101 ACPI_STATUS
102 AcpiDsEvalRegionOperands (
103     ACPI_WALK_STATE         *WalkState,
104     ACPI_PARSE_OBJECT       *Op);
105 
106 ACPI_STATUS
107 AcpiDsEvalTableRegionOperands (
108     ACPI_WALK_STATE         *WalkState,
109     ACPI_PARSE_OBJECT       *Op);
110 
111 ACPI_STATUS
112 AcpiDsEvalDataObjectOperands (
113     ACPI_WALK_STATE         *WalkState,
114     ACPI_PARSE_OBJECT       *Op,
115     ACPI_OPERAND_OBJECT     *ObjDesc);
116 
117 ACPI_STATUS
118 AcpiDsEvalBankFieldOperands (
119     ACPI_WALK_STATE         *WalkState,
120     ACPI_PARSE_OBJECT       *Op);
121 
122 ACPI_STATUS
123 AcpiDsInitializeRegion (
124     ACPI_HANDLE             ObjHandle);
125 
126 
127 /*
128  * dsexec - Parser/Interpreter interface, method execution callbacks
129  */
130 ACPI_STATUS
131 AcpiDsGetPredicateValue (
132     ACPI_WALK_STATE         *WalkState,
133     ACPI_OPERAND_OBJECT     *ResultObj);
134 
135 ACPI_STATUS
136 AcpiDsExecBeginOp (
137     ACPI_WALK_STATE         *WalkState,
138     ACPI_PARSE_OBJECT       **OutOp);
139 
140 ACPI_STATUS
141 AcpiDsExecEndOp (
142     ACPI_WALK_STATE         *State);
143 
144 
145 /*
146  * dsfield - Parser/Interpreter interface for AML fields
147  */
148 ACPI_STATUS
149 AcpiDsCreateField (
150     ACPI_PARSE_OBJECT       *Op,
151     ACPI_NAMESPACE_NODE     *RegionNode,
152     ACPI_WALK_STATE         *WalkState);
153 
154 ACPI_STATUS
155 AcpiDsCreateBankField (
156     ACPI_PARSE_OBJECT       *Op,
157     ACPI_NAMESPACE_NODE     *RegionNode,
158     ACPI_WALK_STATE         *WalkState);
159 
160 ACPI_STATUS
161 AcpiDsCreateIndexField (
162     ACPI_PARSE_OBJECT       *Op,
163     ACPI_NAMESPACE_NODE     *RegionNode,
164     ACPI_WALK_STATE         *WalkState);
165 
166 ACPI_STATUS
167 AcpiDsCreateBufferField (
168     ACPI_PARSE_OBJECT       *Op,
169     ACPI_WALK_STATE         *WalkState);
170 
171 ACPI_STATUS
172 AcpiDsInitFieldObjects (
173     ACPI_PARSE_OBJECT       *Op,
174     ACPI_WALK_STATE         *WalkState);
175 
176 
177 /*
178  * dsload - Parser/Interpreter interface
179  */
180 ACPI_STATUS
181 AcpiDsInitCallbacks (
182     ACPI_WALK_STATE         *WalkState,
183     UINT32                  PassNumber);
184 
185 /* dsload - pass 1 namespace load callbacks */
186 
187 ACPI_STATUS
188 AcpiDsLoad1BeginOp (
189     ACPI_WALK_STATE         *WalkState,
190     ACPI_PARSE_OBJECT       **OutOp);
191 
192 ACPI_STATUS
193 AcpiDsLoad1EndOp (
194     ACPI_WALK_STATE         *WalkState);
195 
196 
197 /* dsload - pass 2 namespace load callbacks */
198 
199 ACPI_STATUS
200 AcpiDsLoad2BeginOp (
201     ACPI_WALK_STATE         *WalkState,
202     ACPI_PARSE_OBJECT       **OutOp);
203 
204 ACPI_STATUS
205 AcpiDsLoad2EndOp (
206     ACPI_WALK_STATE         *WalkState);
207 
208 
209 /*
210  * dsmthdat - method data (locals/args)
211  */
212 ACPI_STATUS
213 AcpiDsStoreObjectToLocal (
214     UINT8                   Type,
215     UINT32                  Index,
216     ACPI_OPERAND_OBJECT     *SrcDesc,
217     ACPI_WALK_STATE         *WalkState);
218 
219 ACPI_STATUS
220 AcpiDsMethodDataGetEntry (
221     UINT16                  Opcode,
222     UINT32                  Index,
223     ACPI_WALK_STATE         *WalkState,
224     ACPI_OPERAND_OBJECT     ***Node);
225 
226 void
227 AcpiDsMethodDataDeleteAll (
228     ACPI_WALK_STATE         *WalkState);
229 
230 BOOLEAN
231 AcpiDsIsMethodValue (
232     ACPI_OPERAND_OBJECT     *ObjDesc);
233 
234 ACPI_STATUS
235 AcpiDsMethodDataGetValue (
236     UINT8                   Type,
237     UINT32                  Index,
238     ACPI_WALK_STATE         *WalkState,
239     ACPI_OPERAND_OBJECT     **DestDesc);
240 
241 ACPI_STATUS
242 AcpiDsMethodDataInitArgs (
243     ACPI_OPERAND_OBJECT     **Params,
244     UINT32                  MaxParamCount,
245     ACPI_WALK_STATE         *WalkState);
246 
247 ACPI_STATUS
248 AcpiDsMethodDataGetNode (
249     UINT8                   Type,
250     UINT32                  Index,
251     ACPI_WALK_STATE         *WalkState,
252     ACPI_NAMESPACE_NODE     **Node);
253 
254 void
255 AcpiDsMethodDataInit (
256     ACPI_WALK_STATE         *WalkState);
257 
258 
259 /*
260  * dsmethod - Parser/Interpreter interface - control method parsing
261  */
262 ACPI_STATUS
263 AcpiDsAutoSerializeMethod (
264     ACPI_NAMESPACE_NODE     *Node,
265     ACPI_OPERAND_OBJECT     *ObjDesc);
266 
267 ACPI_STATUS
268 AcpiDsCallControlMethod (
269     ACPI_THREAD_STATE       *Thread,
270     ACPI_WALK_STATE         *WalkState,
271     ACPI_PARSE_OBJECT       *Op);
272 
273 ACPI_STATUS
274 AcpiDsRestartControlMethod (
275     ACPI_WALK_STATE         *WalkState,
276     ACPI_OPERAND_OBJECT     *ReturnDesc);
277 
278 void
279 AcpiDsTerminateControlMethod (
280     ACPI_OPERAND_OBJECT     *MethodDesc,
281     ACPI_WALK_STATE         *WalkState);
282 
283 ACPI_STATUS
284 AcpiDsBeginMethodExecution (
285     ACPI_NAMESPACE_NODE     *MethodNode,
286     ACPI_OPERAND_OBJECT     *ObjDesc,
287     ACPI_WALK_STATE         *WalkState);
288 
289 ACPI_STATUS
290 AcpiDsMethodError (
291     ACPI_STATUS             Status,
292     ACPI_WALK_STATE         *WalkState);
293 
294 /*
295  * dsinit
296  */
297 ACPI_STATUS
298 AcpiDsInitializeObjects (
299     UINT32                  TableIndex,
300     ACPI_NAMESPACE_NODE     *StartNode);
301 
302 
303 /*
304  * dsobject - Parser/Interpreter interface - object initialization and conversion
305  */
306 ACPI_STATUS
307 AcpiDsBuildInternalBufferObj (
308     ACPI_WALK_STATE         *WalkState,
309     ACPI_PARSE_OBJECT       *Op,
310     UINT32                  BufferLength,
311     ACPI_OPERAND_OBJECT     **ObjDescPtr);
312 
313 ACPI_STATUS
314 AcpiDsBuildInternalPackageObj (
315     ACPI_WALK_STATE         *WalkState,
316     ACPI_PARSE_OBJECT       *op,
317     UINT32                  PackageLength,
318     ACPI_OPERAND_OBJECT     **ObjDesc);
319 
320 ACPI_STATUS
321 AcpiDsInitObjectFromOp (
322     ACPI_WALK_STATE         *WalkState,
323     ACPI_PARSE_OBJECT       *Op,
324     UINT16                  Opcode,
325     ACPI_OPERAND_OBJECT     **ObjDesc);
326 
327 ACPI_STATUS
328 AcpiDsCreateNode (
329     ACPI_WALK_STATE         *WalkState,
330     ACPI_NAMESPACE_NODE     *Node,
331     ACPI_PARSE_OBJECT       *Op);
332 
333 
334 /*
335  * dsutils - Parser/Interpreter interface utility routines
336  */
337 void
338 AcpiDsClearImplicitReturn (
339     ACPI_WALK_STATE         *WalkState);
340 
341 BOOLEAN
342 AcpiDsDoImplicitReturn (
343     ACPI_OPERAND_OBJECT     *ReturnDesc,
344     ACPI_WALK_STATE         *WalkState,
345     BOOLEAN                 AddReference);
346 
347 BOOLEAN
348 AcpiDsIsResultUsed (
349     ACPI_PARSE_OBJECT       *Op,
350     ACPI_WALK_STATE         *WalkState);
351 
352 void
353 AcpiDsDeleteResultIfNotUsed (
354     ACPI_PARSE_OBJECT       *Op,
355     ACPI_OPERAND_OBJECT     *ResultObj,
356     ACPI_WALK_STATE         *WalkState);
357 
358 ACPI_STATUS
359 AcpiDsCreateOperand (
360     ACPI_WALK_STATE         *WalkState,
361     ACPI_PARSE_OBJECT       *Arg,
362     UINT32                  ArgsRemaining);
363 
364 ACPI_STATUS
365 AcpiDsCreateOperands (
366     ACPI_WALK_STATE         *WalkState,
367     ACPI_PARSE_OBJECT       *FirstArg);
368 
369 ACPI_STATUS
370 AcpiDsResolveOperands (
371     ACPI_WALK_STATE         *WalkState);
372 
373 void
374 AcpiDsClearOperands (
375     ACPI_WALK_STATE         *WalkState);
376 
377 ACPI_STATUS
378 AcpiDsEvaluateNamePath (
379     ACPI_WALK_STATE         *WalkState);
380 
381 
382 /*
383  * dswscope - Scope Stack manipulation
384  */
385 ACPI_STATUS
386 AcpiDsScopeStackPush (
387     ACPI_NAMESPACE_NODE     *Node,
388     ACPI_OBJECT_TYPE        Type,
389     ACPI_WALK_STATE         *WalkState);
390 
391 
392 ACPI_STATUS
393 AcpiDsScopeStackPop (
394     ACPI_WALK_STATE         *WalkState);
395 
396 void
397 AcpiDsScopeStackClear (
398     ACPI_WALK_STATE         *WalkState);
399 
400 
401 /*
402  * dswstate - parser WALK_STATE management routines
403  */
404 ACPI_STATUS
405 AcpiDsObjStackPush (
406     void                    *Object,
407     ACPI_WALK_STATE         *WalkState);
408 
409 ACPI_STATUS
410 AcpiDsObjStackPop (
411     UINT32                  PopCount,
412     ACPI_WALK_STATE         *WalkState);
413 
414 ACPI_WALK_STATE *
415 AcpiDsCreateWalkState (
416     ACPI_OWNER_ID           OwnerId,
417     ACPI_PARSE_OBJECT       *Origin,
418     ACPI_OPERAND_OBJECT     *MthDesc,
419     ACPI_THREAD_STATE       *Thread);
420 
421 ACPI_STATUS
422 AcpiDsInitAmlWalk (
423     ACPI_WALK_STATE         *WalkState,
424     ACPI_PARSE_OBJECT       *Op,
425     ACPI_NAMESPACE_NODE     *MethodNode,
426     UINT8                   *AmlStart,
427     UINT32                  AmlLength,
428     ACPI_EVALUATE_INFO      *Info,
429     UINT8                   PassNumber);
430 
431 void
432 AcpiDsObjStackPopAndDelete (
433     UINT32                  PopCount,
434     ACPI_WALK_STATE         *WalkState);
435 
436 void
437 AcpiDsDeleteWalkState (
438     ACPI_WALK_STATE         *WalkState);
439 
440 ACPI_WALK_STATE *
441 AcpiDsPopWalkState (
442     ACPI_THREAD_STATE       *Thread);
443 
444 void
445 AcpiDsPushWalkState (
446     ACPI_WALK_STATE         *WalkState,
447     ACPI_THREAD_STATE       *Thread);
448 
449 ACPI_STATUS
450 AcpiDsResultStackClear (
451     ACPI_WALK_STATE         *WalkState);
452 
453 ACPI_WALK_STATE *
454 AcpiDsGetCurrentWalkState (
455     ACPI_THREAD_STATE       *Thread);
456 
457 ACPI_STATUS
458 AcpiDsResultPop (
459     ACPI_OPERAND_OBJECT     **Object,
460     ACPI_WALK_STATE         *WalkState);
461 
462 ACPI_STATUS
463 AcpiDsResultPush (
464     ACPI_OPERAND_OBJECT     *Object,
465     ACPI_WALK_STATE         *WalkState);
466 
467 #pragma pack(pop) /* Restore original struct packing */
468 
469 #endif /* _ACDISPAT_H_ */
470