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