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