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