acdispat.h revision 229989
1/******************************************************************************
2 *
3 * Name: acdispat.h - dispatcher (parser to interpreter interface)
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2012, 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 * dsargs - execution of dynamic arguments for static objects
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
76
77/*
78 * dscontrol - support for execution control opcodes
79 */
80ACPI_STATUS
81AcpiDsExecBeginControlOp (
82    ACPI_WALK_STATE         *WalkState,
83    ACPI_PARSE_OBJECT       *Op);
84
85ACPI_STATUS
86AcpiDsExecEndControlOp (
87    ACPI_WALK_STATE         *WalkState,
88    ACPI_PARSE_OBJECT       *Op);
89
90
91/*
92 * dsopcode - support for late operand evaluation
93 */
94ACPI_STATUS
95AcpiDsEvalBufferFieldOperands (
96    ACPI_WALK_STATE         *WalkState,
97    ACPI_PARSE_OBJECT       *Op);
98
99ACPI_STATUS
100AcpiDsEvalRegionOperands (
101    ACPI_WALK_STATE         *WalkState,
102    ACPI_PARSE_OBJECT       *Op);
103
104ACPI_STATUS
105AcpiDsEvalTableRegionOperands (
106    ACPI_WALK_STATE         *WalkState,
107    ACPI_PARSE_OBJECT       *Op);
108
109ACPI_STATUS
110AcpiDsEvalDataObjectOperands (
111    ACPI_WALK_STATE         *WalkState,
112    ACPI_PARSE_OBJECT       *Op,
113    ACPI_OPERAND_OBJECT     *ObjDesc);
114
115ACPI_STATUS
116AcpiDsEvalBankFieldOperands (
117    ACPI_WALK_STATE         *WalkState,
118    ACPI_PARSE_OBJECT       *Op);
119
120ACPI_STATUS
121AcpiDsInitializeRegion (
122    ACPI_HANDLE             ObjHandle);
123
124
125/*
126 * dsexec - Parser/Interpreter interface, method execution callbacks
127 */
128ACPI_STATUS
129AcpiDsGetPredicateValue (
130    ACPI_WALK_STATE         *WalkState,
131    ACPI_OPERAND_OBJECT     *ResultObj);
132
133ACPI_STATUS
134AcpiDsExecBeginOp (
135    ACPI_WALK_STATE         *WalkState,
136    ACPI_PARSE_OBJECT       **OutOp);
137
138ACPI_STATUS
139AcpiDsExecEndOp (
140    ACPI_WALK_STATE         *State);
141
142
143/*
144 * dsfield - Parser/Interpreter interface for AML fields
145 */
146ACPI_STATUS
147AcpiDsCreateField (
148    ACPI_PARSE_OBJECT       *Op,
149    ACPI_NAMESPACE_NODE     *RegionNode,
150    ACPI_WALK_STATE         *WalkState);
151
152ACPI_STATUS
153AcpiDsCreateBankField (
154    ACPI_PARSE_OBJECT       *Op,
155    ACPI_NAMESPACE_NODE     *RegionNode,
156    ACPI_WALK_STATE         *WalkState);
157
158ACPI_STATUS
159AcpiDsCreateIndexField (
160    ACPI_PARSE_OBJECT       *Op,
161    ACPI_NAMESPACE_NODE     *RegionNode,
162    ACPI_WALK_STATE         *WalkState);
163
164ACPI_STATUS
165AcpiDsCreateBufferField (
166    ACPI_PARSE_OBJECT       *Op,
167    ACPI_WALK_STATE         *WalkState);
168
169ACPI_STATUS
170AcpiDsInitFieldObjects (
171    ACPI_PARSE_OBJECT       *Op,
172    ACPI_WALK_STATE         *WalkState);
173
174
175/*
176 * dsload - Parser/Interpreter interface, pass 1 namespace load callbacks
177 */
178ACPI_STATUS
179AcpiDsInitCallbacks (
180    ACPI_WALK_STATE         *WalkState,
181    UINT32                  PassNumber);
182
183ACPI_STATUS
184AcpiDsLoad1BeginOp (
185    ACPI_WALK_STATE         *WalkState,
186    ACPI_PARSE_OBJECT       **OutOp);
187
188ACPI_STATUS
189AcpiDsLoad1EndOp (
190    ACPI_WALK_STATE         *WalkState);
191
192
193/*
194 * dsload - Parser/Interpreter interface, 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
260AcpiDsParseMethod (
261    ACPI_NAMESPACE_NODE     *Node);
262
263ACPI_STATUS
264AcpiDsCallControlMethod (
265    ACPI_THREAD_STATE       *Thread,
266    ACPI_WALK_STATE         *WalkState,
267    ACPI_PARSE_OBJECT       *Op);
268
269ACPI_STATUS
270AcpiDsRestartControlMethod (
271    ACPI_WALK_STATE         *WalkState,
272    ACPI_OPERAND_OBJECT     *ReturnDesc);
273
274void
275AcpiDsTerminateControlMethod (
276    ACPI_OPERAND_OBJECT     *MethodDesc,
277    ACPI_WALK_STATE         *WalkState);
278
279ACPI_STATUS
280AcpiDsBeginMethodExecution (
281    ACPI_NAMESPACE_NODE     *MethodNode,
282    ACPI_OPERAND_OBJECT     *ObjDesc,
283    ACPI_WALK_STATE         *WalkState);
284
285ACPI_STATUS
286AcpiDsMethodError (
287    ACPI_STATUS             Status,
288    ACPI_WALK_STATE         *WalkState);
289
290/*
291 * dsinit
292 */
293ACPI_STATUS
294AcpiDsInitializeObjects (
295    UINT32                  TableIndex,
296    ACPI_NAMESPACE_NODE     *StartNode);
297
298
299/*
300 * dsobject - Parser/Interpreter interface - object initialization and conversion
301 */
302ACPI_STATUS
303AcpiDsBuildInternalBufferObj (
304    ACPI_WALK_STATE         *WalkState,
305    ACPI_PARSE_OBJECT       *Op,
306    UINT32                  BufferLength,
307    ACPI_OPERAND_OBJECT     **ObjDescPtr);
308
309ACPI_STATUS
310AcpiDsBuildInternalPackageObj (
311    ACPI_WALK_STATE         *WalkState,
312    ACPI_PARSE_OBJECT       *op,
313    UINT32                  PackageLength,
314    ACPI_OPERAND_OBJECT     **ObjDesc);
315
316ACPI_STATUS
317AcpiDsInitObjectFromOp (
318    ACPI_WALK_STATE         *WalkState,
319    ACPI_PARSE_OBJECT       *Op,
320    UINT16                  Opcode,
321    ACPI_OPERAND_OBJECT     **ObjDesc);
322
323ACPI_STATUS
324AcpiDsCreateNode (
325    ACPI_WALK_STATE         *WalkState,
326    ACPI_NAMESPACE_NODE     *Node,
327    ACPI_PARSE_OBJECT       *Op);
328
329
330/*
331 * dsutils - Parser/Interpreter interface utility routines
332 */
333void
334AcpiDsClearImplicitReturn (
335    ACPI_WALK_STATE         *WalkState);
336
337BOOLEAN
338AcpiDsDoImplicitReturn (
339    ACPI_OPERAND_OBJECT     *ReturnDesc,
340    ACPI_WALK_STATE         *WalkState,
341    BOOLEAN                 AddReference);
342
343BOOLEAN
344AcpiDsIsResultUsed (
345    ACPI_PARSE_OBJECT       *Op,
346    ACPI_WALK_STATE         *WalkState);
347
348void
349AcpiDsDeleteResultIfNotUsed (
350    ACPI_PARSE_OBJECT       *Op,
351    ACPI_OPERAND_OBJECT     *ResultObj,
352    ACPI_WALK_STATE         *WalkState);
353
354ACPI_STATUS
355AcpiDsCreateOperand (
356    ACPI_WALK_STATE         *WalkState,
357    ACPI_PARSE_OBJECT       *Arg,
358    UINT32                  ArgsRemaining);
359
360ACPI_STATUS
361AcpiDsCreateOperands (
362    ACPI_WALK_STATE         *WalkState,
363    ACPI_PARSE_OBJECT       *FirstArg);
364
365ACPI_STATUS
366AcpiDsResolveOperands (
367    ACPI_WALK_STATE         *WalkState);
368
369void
370AcpiDsClearOperands (
371    ACPI_WALK_STATE         *WalkState);
372
373ACPI_STATUS
374AcpiDsEvaluateNamePath (
375    ACPI_WALK_STATE         *WalkState);
376
377
378/*
379 * dswscope - Scope Stack manipulation
380 */
381ACPI_STATUS
382AcpiDsScopeStackPush (
383    ACPI_NAMESPACE_NODE     *Node,
384    ACPI_OBJECT_TYPE        Type,
385    ACPI_WALK_STATE         *WalkState);
386
387
388ACPI_STATUS
389AcpiDsScopeStackPop (
390    ACPI_WALK_STATE         *WalkState);
391
392void
393AcpiDsScopeStackClear (
394    ACPI_WALK_STATE         *WalkState);
395
396
397/*
398 * dswstate - parser WALK_STATE management routines
399 */
400ACPI_STATUS
401AcpiDsObjStackPush (
402    void                    *Object,
403    ACPI_WALK_STATE         *WalkState);
404
405ACPI_STATUS
406AcpiDsObjStackPop (
407    UINT32                  PopCount,
408    ACPI_WALK_STATE         *WalkState);
409
410ACPI_WALK_STATE *
411AcpiDsCreateWalkState (
412    ACPI_OWNER_ID           OwnerId,
413    ACPI_PARSE_OBJECT       *Origin,
414    ACPI_OPERAND_OBJECT     *MthDesc,
415    ACPI_THREAD_STATE       *Thread);
416
417ACPI_STATUS
418AcpiDsInitAmlWalk (
419    ACPI_WALK_STATE         *WalkState,
420    ACPI_PARSE_OBJECT       *Op,
421    ACPI_NAMESPACE_NODE     *MethodNode,
422    UINT8                   *AmlStart,
423    UINT32                  AmlLength,
424    ACPI_EVALUATE_INFO      *Info,
425    UINT8                   PassNumber);
426
427void
428AcpiDsObjStackPopAndDelete (
429    UINT32                  PopCount,
430    ACPI_WALK_STATE         *WalkState);
431
432void
433AcpiDsDeleteWalkState (
434    ACPI_WALK_STATE         *WalkState);
435
436ACPI_WALK_STATE *
437AcpiDsPopWalkState (
438    ACPI_THREAD_STATE       *Thread);
439
440void
441AcpiDsPushWalkState (
442    ACPI_WALK_STATE         *WalkState,
443    ACPI_THREAD_STATE       *Thread);
444
445ACPI_STATUS
446AcpiDsResultStackClear (
447    ACPI_WALK_STATE         *WalkState);
448
449ACPI_WALK_STATE *
450AcpiDsGetCurrentWalkState (
451    ACPI_THREAD_STATE       *Thread);
452
453ACPI_STATUS
454AcpiDsResultPop (
455    ACPI_OPERAND_OBJECT     **Object,
456    ACPI_WALK_STATE         *WalkState);
457
458ACPI_STATUS
459AcpiDsResultPush (
460    ACPI_OPERAND_OBJECT     *Object,
461    ACPI_WALK_STATE         *WalkState);
462
463#endif /* _ACDISPAT_H_ */
464