167754Smsmith/******************************************************************************
267754Smsmith *
367754Smsmith * Name: acdispat.h - dispatcher (parser to interpreter interface)
467754Smsmith *
567754Smsmith *****************************************************************************/
667754Smsmith
7217365Sjkim/*
8281075Sdim * Copyright (C) 2000 - 2015, Intel Corp.
970243Smsmith * All rights reserved.
1067754Smsmith *
11217365Sjkim * Redistribution and use in source and binary forms, with or without
12217365Sjkim * modification, are permitted provided that the following conditions
13217365Sjkim * are met:
14217365Sjkim * 1. Redistributions of source code must retain the above copyright
15217365Sjkim *    notice, this list of conditions, and the following disclaimer,
16217365Sjkim *    without modification.
17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18217365Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
19217365Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
20217365Sjkim *    including a substantially similar Disclaimer requirement for further
21217365Sjkim *    binary redistribution.
22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
23217365Sjkim *    of any contributors may be used to endorse or promote products derived
24217365Sjkim *    from this software without specific prior written permission.
2567754Smsmith *
26217365Sjkim * Alternatively, this software may be distributed under the terms of the
27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
28217365Sjkim * Software Foundation.
2967754Smsmith *
30217365Sjkim * NO WARRANTY
31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41217365Sjkim * POSSIBILITY OF SUCH DAMAGES.
42217365Sjkim */
4367754Smsmith
4467754Smsmith#ifndef _ACDISPAT_H_
4567754Smsmith#define _ACDISPAT_H_
4667754Smsmith
4767754Smsmith
4867754Smsmith#define NAMEOF_LOCAL_NTE    "__L0"
4967754Smsmith#define NAMEOF_ARG_NTE      "__A0"
5067754Smsmith
5167754Smsmith
52151937Sjkim/*
53218590Sjkim * dsargs - execution of dynamic arguments for static objects
54151937Sjkim */
5567754SmsmithACPI_STATUS
5677424SmsmithAcpiDsGetBufferFieldArguments (
5767754Smsmith    ACPI_OPERAND_OBJECT     *ObjDesc);
5867754Smsmith
5967754SmsmithACPI_STATUS
60193267SjkimAcpiDsGetBankFieldArguments (
61193267Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc);
62193267Sjkim
63193267SjkimACPI_STATUS
6467754SmsmithAcpiDsGetRegionArguments (
6567754Smsmith    ACPI_OPERAND_OBJECT     *RgnDesc);
6667754Smsmith
6799146SiwasakiACPI_STATUS
6899146SiwasakiAcpiDsGetBufferArguments (
6999146Siwasaki    ACPI_OPERAND_OBJECT     *ObjDesc);
7067754Smsmith
7199146SiwasakiACPI_STATUS
7299146SiwasakiAcpiDsGetPackageArguments (
7399146Siwasaki    ACPI_OPERAND_OBJECT     *ObjDesc);
7499146Siwasaki
75218590Sjkim
76218590Sjkim/*
77218590Sjkim * dscontrol - support for execution control opcodes
78218590Sjkim */
7999679SiwasakiACPI_STATUS
80218590SjkimAcpiDsExecBeginControlOp (
81218590Sjkim    ACPI_WALK_STATE         *WalkState,
82218590Sjkim    ACPI_PARSE_OBJECT       *Op);
83218590Sjkim
84218590SjkimACPI_STATUS
85218590SjkimAcpiDsExecEndControlOp (
86218590Sjkim    ACPI_WALK_STATE         *WalkState,
87218590Sjkim    ACPI_PARSE_OBJECT       *Op);
88218590Sjkim
89218590Sjkim
90218590Sjkim/*
91218590Sjkim * dsopcode - support for late operand evaluation
92218590Sjkim */
93218590SjkimACPI_STATUS
9499679SiwasakiAcpiDsEvalBufferFieldOperands (
9599679Siwasaki    ACPI_WALK_STATE         *WalkState,
9699679Siwasaki    ACPI_PARSE_OBJECT       *Op);
9799679Siwasaki
9899679SiwasakiACPI_STATUS
9999679SiwasakiAcpiDsEvalRegionOperands (
10099679Siwasaki    ACPI_WALK_STATE         *WalkState,
10199679Siwasaki    ACPI_PARSE_OBJECT       *Op);
10299679Siwasaki
10399679SiwasakiACPI_STATUS
104193267SjkimAcpiDsEvalTableRegionOperands (
105193267Sjkim    ACPI_WALK_STATE         *WalkState,
106193267Sjkim    ACPI_PARSE_OBJECT       *Op);
107193267Sjkim
108193267SjkimACPI_STATUS
10999679SiwasakiAcpiDsEvalDataObjectOperands (
11099679Siwasaki    ACPI_WALK_STATE         *WalkState,
11199679Siwasaki    ACPI_PARSE_OBJECT       *Op,
11299679Siwasaki    ACPI_OPERAND_OBJECT     *ObjDesc);
11399679Siwasaki
11499679SiwasakiACPI_STATUS
115193267SjkimAcpiDsEvalBankFieldOperands (
116193267Sjkim    ACPI_WALK_STATE         *WalkState,
117193267Sjkim    ACPI_PARSE_OBJECT       *Op);
118193267Sjkim
119193267SjkimACPI_STATUS
12099679SiwasakiAcpiDsInitializeRegion (
12199679Siwasaki    ACPI_HANDLE             ObjHandle);
12299679Siwasaki
12399679Siwasaki
124151937Sjkim/*
125151937Sjkim * dsexec - Parser/Interpreter interface, method execution callbacks
126151937Sjkim */
12767754SmsmithACPI_STATUS
12867754SmsmithAcpiDsGetPredicateValue (
12967754Smsmith    ACPI_WALK_STATE         *WalkState,
13091116Smsmith    ACPI_OPERAND_OBJECT     *ResultObj);
13167754Smsmith
13267754SmsmithACPI_STATUS
13367754SmsmithAcpiDsExecBeginOp (
13467754Smsmith    ACPI_WALK_STATE         *WalkState,
13567754Smsmith    ACPI_PARSE_OBJECT       **OutOp);
13667754Smsmith
13767754SmsmithACPI_STATUS
13867754SmsmithAcpiDsExecEndOp (
13984491Smsmith    ACPI_WALK_STATE         *State);
14067754Smsmith
14167754Smsmith
142151937Sjkim/*
143151937Sjkim * dsfield - Parser/Interpreter interface for AML fields
144151937Sjkim */
14567754SmsmithACPI_STATUS
14667754SmsmithAcpiDsCreateField (
14767754Smsmith    ACPI_PARSE_OBJECT       *Op,
14867754Smsmith    ACPI_NAMESPACE_NODE     *RegionNode,
14967754Smsmith    ACPI_WALK_STATE         *WalkState);
15067754Smsmith
15167754SmsmithACPI_STATUS
15267754SmsmithAcpiDsCreateBankField (
15367754Smsmith    ACPI_PARSE_OBJECT       *Op,
15467754Smsmith    ACPI_NAMESPACE_NODE     *RegionNode,
15567754Smsmith    ACPI_WALK_STATE         *WalkState);
15667754Smsmith
15767754SmsmithACPI_STATUS
15867754SmsmithAcpiDsCreateIndexField (
15967754Smsmith    ACPI_PARSE_OBJECT       *Op,
16077424Smsmith    ACPI_NAMESPACE_NODE     *RegionNode,
16167754Smsmith    ACPI_WALK_STATE         *WalkState);
16267754Smsmith
16385756SmsmithACPI_STATUS
16485756SmsmithAcpiDsCreateBufferField (
16585756Smsmith    ACPI_PARSE_OBJECT       *Op,
16685756Smsmith    ACPI_WALK_STATE         *WalkState);
16767754Smsmith
16887031SmsmithACPI_STATUS
16987031SmsmithAcpiDsInitFieldObjects (
17087031Smsmith    ACPI_PARSE_OBJECT       *Op,
17187031Smsmith    ACPI_WALK_STATE         *WalkState);
17285756Smsmith
17387031Smsmith
174151937Sjkim/*
175281075Sdim * dsload - Parser/Interpreter interface
176151937Sjkim */
17767754SmsmithACPI_STATUS
178218590SjkimAcpiDsInitCallbacks (
179218590Sjkim    ACPI_WALK_STATE         *WalkState,
180218590Sjkim    UINT32                  PassNumber);
181218590Sjkim
182281075Sdim/* dsload - pass 1 namespace load callbacks */
183281075Sdim
184218590SjkimACPI_STATUS
18567754SmsmithAcpiDsLoad1BeginOp (
18667754Smsmith    ACPI_WALK_STATE         *WalkState,
18767754Smsmith    ACPI_PARSE_OBJECT       **OutOp);
18867754Smsmith
18967754SmsmithACPI_STATUS
19067754SmsmithAcpiDsLoad1EndOp (
19184491Smsmith    ACPI_WALK_STATE         *WalkState);
19267754Smsmith
193218590Sjkim
194281075Sdim/* dsload - pass 2 namespace load callbacks */
195281075Sdim
19667754SmsmithACPI_STATUS
19767754SmsmithAcpiDsLoad2BeginOp (
19867754Smsmith    ACPI_WALK_STATE         *WalkState,
19967754Smsmith    ACPI_PARSE_OBJECT       **OutOp);
20067754Smsmith
20167754SmsmithACPI_STATUS
20267754SmsmithAcpiDsLoad2EndOp (
20384491Smsmith    ACPI_WALK_STATE         *WalkState);
20467754Smsmith
20567754Smsmith
206151937Sjkim/*
207151937Sjkim * dsmthdat - method data (locals/args)
208151937Sjkim */
20967754SmsmithACPI_STATUS
21077424SmsmithAcpiDsStoreObjectToLocal (
211193267Sjkim    UINT8                   Type,
21277424Smsmith    UINT32                  Index,
21377424Smsmith    ACPI_OPERAND_OBJECT     *SrcDesc,
21477424Smsmith    ACPI_WALK_STATE         *WalkState);
21577424Smsmith
21677424SmsmithACPI_STATUS
21767754SmsmithAcpiDsMethodDataGetEntry (
21877424Smsmith    UINT16                  Opcode,
21967754Smsmith    UINT32                  Index,
22067754Smsmith    ACPI_WALK_STATE         *WalkState,
22167754Smsmith    ACPI_OPERAND_OBJECT     ***Node);
22267754Smsmith
22399679Siwasakivoid
22467754SmsmithAcpiDsMethodDataDeleteAll (
22567754Smsmith    ACPI_WALK_STATE         *WalkState);
22667754Smsmith
22767754SmsmithBOOLEAN
22867754SmsmithAcpiDsIsMethodValue (
22967754Smsmith    ACPI_OPERAND_OBJECT     *ObjDesc);
23067754Smsmith
23167754SmsmithACPI_STATUS
23267754SmsmithAcpiDsMethodDataGetValue (
233193267Sjkim    UINT8                   Type,
23467754Smsmith    UINT32                  Index,
23567754Smsmith    ACPI_WALK_STATE         *WalkState,
23667754Smsmith    ACPI_OPERAND_OBJECT     **DestDesc);
23767754Smsmith
23867754SmsmithACPI_STATUS
23967754SmsmithAcpiDsMethodDataInitArgs (
24067754Smsmith    ACPI_OPERAND_OBJECT     **Params,
24167754Smsmith    UINT32                  MaxParamCount,
24267754Smsmith    ACPI_WALK_STATE         *WalkState);
24367754Smsmith
24487031SmsmithACPI_STATUS
24577424SmsmithAcpiDsMethodDataGetNode (
246193267Sjkim    UINT8                   Type,
24767754Smsmith    UINT32                  Index,
24887031Smsmith    ACPI_WALK_STATE         *WalkState,
24987031Smsmith    ACPI_NAMESPACE_NODE     **Node);
25067754Smsmith
25199679Siwasakivoid
25267754SmsmithAcpiDsMethodDataInit (
25367754Smsmith    ACPI_WALK_STATE         *WalkState);
25467754Smsmith
25567754Smsmith
256151937Sjkim/*
257151937Sjkim * dsmethod - Parser/Interpreter interface - control method parsing
258151937Sjkim */
25967754SmsmithACPI_STATUS
260281075SdimAcpiDsAutoSerializeMethod (
261281075Sdim    ACPI_NAMESPACE_NODE     *Node,
262281075Sdim    ACPI_OPERAND_OBJECT     *ObjDesc);
26367754Smsmith
26467754SmsmithACPI_STATUS
26567754SmsmithAcpiDsCallControlMethod (
26687031Smsmith    ACPI_THREAD_STATE       *Thread,
26767754Smsmith    ACPI_WALK_STATE         *WalkState,
26867754Smsmith    ACPI_PARSE_OBJECT       *Op);
26967754Smsmith
27067754SmsmithACPI_STATUS
27167754SmsmithAcpiDsRestartControlMethod (
27267754Smsmith    ACPI_WALK_STATE         *WalkState,
27367754Smsmith    ACPI_OPERAND_OBJECT     *ReturnDesc);
27467754Smsmith
275151937Sjkimvoid
27667754SmsmithAcpiDsTerminateControlMethod (
277167802Sjkim    ACPI_OPERAND_OBJECT     *MethodDesc,
27867754Smsmith    ACPI_WALK_STATE         *WalkState);
27967754Smsmith
28067754SmsmithACPI_STATUS
28167754SmsmithAcpiDsBeginMethodExecution (
28267754Smsmith    ACPI_NAMESPACE_NODE     *MethodNode,
28377424Smsmith    ACPI_OPERAND_OBJECT     *ObjDesc,
284167802Sjkim    ACPI_WALK_STATE         *WalkState);
28567754Smsmith
286167802SjkimACPI_STATUS
287167802SjkimAcpiDsMethodError (
288167802Sjkim    ACPI_STATUS             Status,
289167802Sjkim    ACPI_WALK_STATE         *WalkState);
29067754Smsmith
291151937Sjkim/*
292151937Sjkim * dsinit
293151937Sjkim */
29467754SmsmithACPI_STATUS
29567754SmsmithAcpiDsInitializeObjects (
296193267Sjkim    UINT32                  TableIndex,
29767754Smsmith    ACPI_NAMESPACE_NODE     *StartNode);
29867754Smsmith
299151937Sjkim
300151937Sjkim/*
301151937Sjkim * dsobject - Parser/Interpreter interface - object initialization and conversion
302151937Sjkim */
30367754SmsmithACPI_STATUS
30499146SiwasakiAcpiDsBuildInternalBufferObj (
30599146Siwasaki    ACPI_WALK_STATE         *WalkState,
30699146Siwasaki    ACPI_PARSE_OBJECT       *Op,
30799146Siwasaki    UINT32                  BufferLength,
30899146Siwasaki    ACPI_OPERAND_OBJECT     **ObjDescPtr);
30999146Siwasaki
31099146SiwasakiACPI_STATUS
31167754SmsmithAcpiDsBuildInternalPackageObj (
31267754Smsmith    ACPI_WALK_STATE         *WalkState,
31367754Smsmith    ACPI_PARSE_OBJECT       *op,
31499146Siwasaki    UINT32                  PackageLength,
31567754Smsmith    ACPI_OPERAND_OBJECT     **ObjDesc);
31667754Smsmith
31767754SmsmithACPI_STATUS
31867754SmsmithAcpiDsInitObjectFromOp (
31967754Smsmith    ACPI_WALK_STATE         *WalkState,
32067754Smsmith    ACPI_PARSE_OBJECT       *Op,
32167754Smsmith    UINT16                  Opcode,
32267754Smsmith    ACPI_OPERAND_OBJECT     **ObjDesc);
32367754Smsmith
32467754SmsmithACPI_STATUS
32567754SmsmithAcpiDsCreateNode (
32667754Smsmith    ACPI_WALK_STATE         *WalkState,
32767754Smsmith    ACPI_NAMESPACE_NODE     *Node,
32867754Smsmith    ACPI_PARSE_OBJECT       *Op);
32967754Smsmith
33067754Smsmith
331151937Sjkim/*
332151937Sjkim * dsutils - Parser/Interpreter interface utility routines
333151937Sjkim */
334151937Sjkimvoid
335151937SjkimAcpiDsClearImplicitReturn (
336151937Sjkim    ACPI_WALK_STATE         *WalkState);
33767754Smsmith
33867754SmsmithBOOLEAN
339151937SjkimAcpiDsDoImplicitReturn (
340151937Sjkim    ACPI_OPERAND_OBJECT     *ReturnDesc,
341151937Sjkim    ACPI_WALK_STATE         *WalkState,
342151937Sjkim    BOOLEAN                 AddReference);
343151937Sjkim
344151937SjkimBOOLEAN
34567754SmsmithAcpiDsIsResultUsed (
34667754Smsmith    ACPI_PARSE_OBJECT       *Op,
34767754Smsmith    ACPI_WALK_STATE         *WalkState);
34867754Smsmith
34967754Smsmithvoid
35067754SmsmithAcpiDsDeleteResultIfNotUsed (
35167754Smsmith    ACPI_PARSE_OBJECT       *Op,
35267754Smsmith    ACPI_OPERAND_OBJECT     *ResultObj,
35367754Smsmith    ACPI_WALK_STATE         *WalkState);
35467754Smsmith
35567754SmsmithACPI_STATUS
35667754SmsmithAcpiDsCreateOperand (
35767754Smsmith    ACPI_WALK_STATE         *WalkState,
35869746Smsmith    ACPI_PARSE_OBJECT       *Arg,
35969746Smsmith    UINT32                  ArgsRemaining);
36067754Smsmith
36167754SmsmithACPI_STATUS
36267754SmsmithAcpiDsCreateOperands (
36367754Smsmith    ACPI_WALK_STATE         *WalkState,
36467754Smsmith    ACPI_PARSE_OBJECT       *FirstArg);
36567754Smsmith
36667754SmsmithACPI_STATUS
36767754SmsmithAcpiDsResolveOperands (
36867754Smsmith    ACPI_WALK_STATE         *WalkState);
36967754Smsmith
370107325Siwasakivoid
371107325SiwasakiAcpiDsClearOperands (
372107325Siwasaki    ACPI_WALK_STATE         *WalkState);
37367754Smsmith
374167802SjkimACPI_STATUS
375167802SjkimAcpiDsEvaluateNamePath (
376167802Sjkim    ACPI_WALK_STATE         *WalkState);
377107325Siwasaki
378167802Sjkim
37967754Smsmith/*
38067754Smsmith * dswscope - Scope Stack manipulation
38167754Smsmith */
38267754SmsmithACPI_STATUS
38367754SmsmithAcpiDsScopeStackPush (
38467754Smsmith    ACPI_NAMESPACE_NODE     *Node,
38591116Smsmith    ACPI_OBJECT_TYPE        Type,
38667754Smsmith    ACPI_WALK_STATE         *WalkState);
38767754Smsmith
38867754Smsmith
38967754SmsmithACPI_STATUS
39067754SmsmithAcpiDsScopeStackPop (
39167754Smsmith    ACPI_WALK_STATE         *WalkState);
39267754Smsmith
39367754Smsmithvoid
39467754SmsmithAcpiDsScopeStackClear (
39567754Smsmith    ACPI_WALK_STATE         *WalkState);
39667754Smsmith
39767754Smsmith
398151937Sjkim/*
399151937Sjkim * dswstate - parser WALK_STATE management routines
400151937Sjkim */
401151937SjkimACPI_STATUS
402151937SjkimAcpiDsObjStackPush (
403151937Sjkim    void                    *Object,
404151937Sjkim    ACPI_WALK_STATE         *WalkState);
40567754Smsmith
406151937SjkimACPI_STATUS
407151937SjkimAcpiDsObjStackPop (
408151937Sjkim    UINT32                  PopCount,
409151937Sjkim    ACPI_WALK_STATE         *WalkState);
410151937Sjkim
41167754SmsmithACPI_WALK_STATE *
41267754SmsmithAcpiDsCreateWalkState (
41367754Smsmith    ACPI_OWNER_ID           OwnerId,
41467754Smsmith    ACPI_PARSE_OBJECT       *Origin,
41567754Smsmith    ACPI_OPERAND_OBJECT     *MthDesc,
41687031Smsmith    ACPI_THREAD_STATE       *Thread);
41767754Smsmith
41867754SmsmithACPI_STATUS
41984491SmsmithAcpiDsInitAmlWalk (
42084491Smsmith    ACPI_WALK_STATE         *WalkState,
42184491Smsmith    ACPI_PARSE_OBJECT       *Op,
42284491Smsmith    ACPI_NAMESPACE_NODE     *MethodNode,
42384491Smsmith    UINT8                   *AmlStart,
42484491Smsmith    UINT32                  AmlLength,
425167802Sjkim    ACPI_EVALUATE_INFO      *Info,
426151937Sjkim    UINT8                   PassNumber);
42784491Smsmith
428167802Sjkimvoid
42967754SmsmithAcpiDsObjStackPopAndDelete (
43067754Smsmith    UINT32                  PopCount,
43167754Smsmith    ACPI_WALK_STATE         *WalkState);
43267754Smsmith
43367754Smsmithvoid
43467754SmsmithAcpiDsDeleteWalkState (
43567754Smsmith    ACPI_WALK_STATE         *WalkState);
43667754Smsmith
43767754SmsmithACPI_WALK_STATE *
43867754SmsmithAcpiDsPopWalkState (
43987031Smsmith    ACPI_THREAD_STATE       *Thread);
44067754Smsmith
44184491Smsmithvoid
44284491SmsmithAcpiDsPushWalkState (
44384491Smsmith    ACPI_WALK_STATE         *WalkState,
44487031Smsmith    ACPI_THREAD_STATE       *Thread);
44584491Smsmith
44667754SmsmithACPI_STATUS
44767754SmsmithAcpiDsResultStackClear (
44867754Smsmith    ACPI_WALK_STATE         *WalkState);
44967754Smsmith
45067754SmsmithACPI_WALK_STATE *
45167754SmsmithAcpiDsGetCurrentWalkState (
45287031Smsmith    ACPI_THREAD_STATE       *Thread);
45367754Smsmith
45469746SmsmithACPI_STATUS
45569746SmsmithAcpiDsResultPop (
45669746Smsmith    ACPI_OPERAND_OBJECT     **Object,
45769746Smsmith    ACPI_WALK_STATE         *WalkState);
45869746Smsmith
45969746SmsmithACPI_STATUS
46069746SmsmithAcpiDsResultPush (
46169746Smsmith    ACPI_OPERAND_OBJECT     *Object,
46269746Smsmith    ACPI_WALK_STATE         *WalkState);
46369746Smsmith
46467754Smsmith#endif /* _ACDISPAT_H_ */
465