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