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