1/****************************************************************************** 2 * 3 * Name: acinterp.h - Interpreter subcomponent prototypes and defines 4 * 5 *****************************************************************************/ 6 7/* 8 * Copyright (C) 2000 - 2013, 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#ifndef __ACINTERP_H__ 45#define __ACINTERP_H__ 46 47 48#define ACPI_WALK_OPERANDS (&(WalkState->Operands [WalkState->NumOperands -1])) 49 50/* Macros for tables used for debug output */ 51 52#define ACPI_EXD_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_OPERAND_OBJECT,f) 53#define ACPI_EXD_NSOFFSET(f) (UINT8) ACPI_OFFSET (ACPI_NAMESPACE_NODE,f) 54#define ACPI_EXD_TABLE_SIZE(name) (sizeof(name) / sizeof (ACPI_EXDUMP_INFO)) 55 56/* 57 * If possible, pack the following structures to byte alignment, since we 58 * don't care about performance for debug output. Two cases where we cannot 59 * pack the structures: 60 * 61 * 1) Hardware does not support misaligned memory transfers 62 * 2) Compiler does not support pointers within packed structures 63 */ 64#if (!defined(ACPI_MISALIGNMENT_NOT_SUPPORTED) && !defined(ACPI_PACKED_POINTERS_NOT_SUPPORTED)) 65#pragma pack(1) 66#endif 67 68typedef const struct acpi_exdump_info 69{ 70 UINT8 Opcode; 71 UINT8 Offset; 72 char *Name; 73 74} ACPI_EXDUMP_INFO; 75 76/* Values for the Opcode field above */ 77 78#define ACPI_EXD_INIT 0 79#define ACPI_EXD_TYPE 1 80#define ACPI_EXD_UINT8 2 81#define ACPI_EXD_UINT16 3 82#define ACPI_EXD_UINT32 4 83#define ACPI_EXD_UINT64 5 84#define ACPI_EXD_LITERAL 6 85#define ACPI_EXD_POINTER 7 86#define ACPI_EXD_ADDRESS 8 87#define ACPI_EXD_STRING 9 88#define ACPI_EXD_BUFFER 10 89#define ACPI_EXD_PACKAGE 11 90#define ACPI_EXD_FIELD 12 91#define ACPI_EXD_REFERENCE 13 92 93/* restore default alignment */ 94 95#pragma pack() 96 97 98/* 99 * exconvrt - object conversion 100 */ 101ACPI_STATUS 102AcpiExConvertToInteger ( 103 ACPI_OPERAND_OBJECT *ObjDesc, 104 ACPI_OPERAND_OBJECT **ResultDesc, 105 UINT32 Flags); 106 107ACPI_STATUS 108AcpiExConvertToBuffer ( 109 ACPI_OPERAND_OBJECT *ObjDesc, 110 ACPI_OPERAND_OBJECT **ResultDesc); 111 112ACPI_STATUS 113AcpiExConvertToString ( 114 ACPI_OPERAND_OBJECT *ObjDesc, 115 ACPI_OPERAND_OBJECT **ResultDesc, 116 UINT32 Type); 117 118/* Types for ->String conversion */ 119 120#define ACPI_EXPLICIT_BYTE_COPY 0x00000000 121#define ACPI_EXPLICIT_CONVERT_HEX 0x00000001 122#define ACPI_IMPLICIT_CONVERT_HEX 0x00000002 123#define ACPI_EXPLICIT_CONVERT_DECIMAL 0x00000003 124 125ACPI_STATUS 126AcpiExConvertToTargetType ( 127 ACPI_OBJECT_TYPE DestinationType, 128 ACPI_OPERAND_OBJECT *SourceDesc, 129 ACPI_OPERAND_OBJECT **ResultDesc, 130 ACPI_WALK_STATE *WalkState); 131 132 133/* 134 * exdebug - AML debug object 135 */ 136void 137AcpiExDoDebugObject ( 138 ACPI_OPERAND_OBJECT *SourceDesc, 139 UINT32 Level, 140 UINT32 Index); 141 142 143/* 144 * exfield - ACPI AML (p-code) execution - field manipulation 145 */ 146ACPI_STATUS 147AcpiExCommonBufferSetup ( 148 ACPI_OPERAND_OBJECT *ObjDesc, 149 UINT32 BufferLength, 150 UINT32 *DatumCount); 151 152ACPI_STATUS 153AcpiExWriteWithUpdateRule ( 154 ACPI_OPERAND_OBJECT *ObjDesc, 155 UINT64 Mask, 156 UINT64 FieldValue, 157 UINT32 FieldDatumByteOffset); 158 159void 160AcpiExGetBufferDatum( 161 UINT64 *Datum, 162 void *Buffer, 163 UINT32 BufferLength, 164 UINT32 ByteGranularity, 165 UINT32 BufferOffset); 166 167void 168AcpiExSetBufferDatum ( 169 UINT64 MergedDatum, 170 void *Buffer, 171 UINT32 BufferLength, 172 UINT32 ByteGranularity, 173 UINT32 BufferOffset); 174 175ACPI_STATUS 176AcpiExReadDataFromField ( 177 ACPI_WALK_STATE *WalkState, 178 ACPI_OPERAND_OBJECT *ObjDesc, 179 ACPI_OPERAND_OBJECT **RetBufferDesc); 180 181ACPI_STATUS 182AcpiExWriteDataToField ( 183 ACPI_OPERAND_OBJECT *SourceDesc, 184 ACPI_OPERAND_OBJECT *ObjDesc, 185 ACPI_OPERAND_OBJECT **ResultDesc); 186 187 188/* 189 * exfldio - low level field I/O 190 */ 191ACPI_STATUS 192AcpiExExtractFromField ( 193 ACPI_OPERAND_OBJECT *ObjDesc, 194 void *Buffer, 195 UINT32 BufferLength); 196 197ACPI_STATUS 198AcpiExInsertIntoField ( 199 ACPI_OPERAND_OBJECT *ObjDesc, 200 void *Buffer, 201 UINT32 BufferLength); 202 203ACPI_STATUS 204AcpiExAccessRegion ( 205 ACPI_OPERAND_OBJECT *ObjDesc, 206 UINT32 FieldDatumByteOffset, 207 UINT64 *Value, 208 UINT32 ReadWrite); 209 210 211/* 212 * exmisc - misc support routines 213 */ 214ACPI_STATUS 215AcpiExGetObjectReference ( 216 ACPI_OPERAND_OBJECT *ObjDesc, 217 ACPI_OPERAND_OBJECT **ReturnDesc, 218 ACPI_WALK_STATE *WalkState); 219 220ACPI_STATUS 221AcpiExConcatTemplate ( 222 ACPI_OPERAND_OBJECT *ObjDesc, 223 ACPI_OPERAND_OBJECT *ObjDesc2, 224 ACPI_OPERAND_OBJECT **ActualReturnDesc, 225 ACPI_WALK_STATE *WalkState); 226 227ACPI_STATUS 228AcpiExDoConcatenate ( 229 ACPI_OPERAND_OBJECT *ObjDesc, 230 ACPI_OPERAND_OBJECT *ObjDesc2, 231 ACPI_OPERAND_OBJECT **ActualReturnDesc, 232 ACPI_WALK_STATE *WalkState); 233 234ACPI_STATUS 235AcpiExDoLogicalNumericOp ( 236 UINT16 Opcode, 237 UINT64 Integer0, 238 UINT64 Integer1, 239 BOOLEAN *LogicalResult); 240 241ACPI_STATUS 242AcpiExDoLogicalOp ( 243 UINT16 Opcode, 244 ACPI_OPERAND_OBJECT *Operand0, 245 ACPI_OPERAND_OBJECT *Operand1, 246 BOOLEAN *LogicalResult); 247 248UINT64 249AcpiExDoMathOp ( 250 UINT16 Opcode, 251 UINT64 Operand0, 252 UINT64 Operand1); 253 254ACPI_STATUS 255AcpiExCreateMutex ( 256 ACPI_WALK_STATE *WalkState); 257 258ACPI_STATUS 259AcpiExCreateProcessor ( 260 ACPI_WALK_STATE *WalkState); 261 262ACPI_STATUS 263AcpiExCreatePowerResource ( 264 ACPI_WALK_STATE *WalkState); 265 266ACPI_STATUS 267AcpiExCreateRegion ( 268 UINT8 *AmlStart, 269 UINT32 AmlLength, 270 UINT8 RegionSpace, 271 ACPI_WALK_STATE *WalkState); 272 273ACPI_STATUS 274AcpiExCreateEvent ( 275 ACPI_WALK_STATE *WalkState); 276 277ACPI_STATUS 278AcpiExCreateAlias ( 279 ACPI_WALK_STATE *WalkState); 280 281ACPI_STATUS 282AcpiExCreateMethod ( 283 UINT8 *AmlStart, 284 UINT32 AmlLength, 285 ACPI_WALK_STATE *WalkState); 286 287 288/* 289 * exconfig - dynamic table load/unload 290 */ 291ACPI_STATUS 292AcpiExLoadOp ( 293 ACPI_OPERAND_OBJECT *ObjDesc, 294 ACPI_OPERAND_OBJECT *Target, 295 ACPI_WALK_STATE *WalkState); 296 297ACPI_STATUS 298AcpiExLoadTableOp ( 299 ACPI_WALK_STATE *WalkState, 300 ACPI_OPERAND_OBJECT **ReturnDesc); 301 302ACPI_STATUS 303AcpiExUnloadTable ( 304 ACPI_OPERAND_OBJECT *DdbHandle); 305 306 307/* 308 * exmutex - mutex support 309 */ 310ACPI_STATUS 311AcpiExAcquireMutex ( 312 ACPI_OPERAND_OBJECT *TimeDesc, 313 ACPI_OPERAND_OBJECT *ObjDesc, 314 ACPI_WALK_STATE *WalkState); 315 316ACPI_STATUS 317AcpiExAcquireMutexObject ( 318 UINT16 Timeout, 319 ACPI_OPERAND_OBJECT *ObjDesc, 320 ACPI_THREAD_ID ThreadId); 321 322ACPI_STATUS 323AcpiExReleaseMutex ( 324 ACPI_OPERAND_OBJECT *ObjDesc, 325 ACPI_WALK_STATE *WalkState); 326 327ACPI_STATUS 328AcpiExReleaseMutexObject ( 329 ACPI_OPERAND_OBJECT *ObjDesc); 330 331void 332AcpiExReleaseAllMutexes ( 333 ACPI_THREAD_STATE *Thread); 334 335void 336AcpiExUnlinkMutex ( 337 ACPI_OPERAND_OBJECT *ObjDesc); 338 339 340/* 341 * exprep - ACPI AML execution - prep utilities 342 */ 343ACPI_STATUS 344AcpiExPrepCommonFieldObject ( 345 ACPI_OPERAND_OBJECT *ObjDesc, 346 UINT8 FieldFlags, 347 UINT8 FieldAttribute, 348 UINT32 FieldBitPosition, 349 UINT32 FieldBitLength); 350 351ACPI_STATUS 352AcpiExPrepFieldValue ( 353 ACPI_CREATE_FIELD_INFO *Info); 354 355 356/* 357 * exsystem - Interface to OS services 358 */ 359ACPI_STATUS 360AcpiExSystemDoNotifyOp ( 361 ACPI_OPERAND_OBJECT *Value, 362 ACPI_OPERAND_OBJECT *ObjDesc); 363 364ACPI_STATUS 365AcpiExSystemDoSleep( 366 UINT64 Time); 367 368ACPI_STATUS 369AcpiExSystemDoStall ( 370 UINT32 Time); 371 372ACPI_STATUS 373AcpiExSystemSignalEvent( 374 ACPI_OPERAND_OBJECT *ObjDesc); 375 376ACPI_STATUS 377AcpiExSystemWaitEvent( 378 ACPI_OPERAND_OBJECT *Time, 379 ACPI_OPERAND_OBJECT *ObjDesc); 380 381ACPI_STATUS 382AcpiExSystemResetEvent( 383 ACPI_OPERAND_OBJECT *ObjDesc); 384 385ACPI_STATUS 386AcpiExSystemWaitSemaphore ( 387 ACPI_SEMAPHORE Semaphore, 388 UINT16 Timeout); 389 390ACPI_STATUS 391AcpiExSystemWaitMutex ( 392 ACPI_MUTEX Mutex, 393 UINT16 Timeout); 394 395/* 396 * exoparg1 - ACPI AML execution, 1 operand 397 */ 398ACPI_STATUS 399AcpiExOpcode_0A_0T_1R ( 400 ACPI_WALK_STATE *WalkState); 401 402ACPI_STATUS 403AcpiExOpcode_1A_0T_0R ( 404 ACPI_WALK_STATE *WalkState); 405 406ACPI_STATUS 407AcpiExOpcode_1A_0T_1R ( 408 ACPI_WALK_STATE *WalkState); 409 410ACPI_STATUS 411AcpiExOpcode_1A_1T_1R ( 412 ACPI_WALK_STATE *WalkState); 413 414ACPI_STATUS 415AcpiExOpcode_1A_1T_0R ( 416 ACPI_WALK_STATE *WalkState); 417 418/* 419 * exoparg2 - ACPI AML execution, 2 operands 420 */ 421ACPI_STATUS 422AcpiExOpcode_2A_0T_0R ( 423 ACPI_WALK_STATE *WalkState); 424 425ACPI_STATUS 426AcpiExOpcode_2A_0T_1R ( 427 ACPI_WALK_STATE *WalkState); 428 429ACPI_STATUS 430AcpiExOpcode_2A_1T_1R ( 431 ACPI_WALK_STATE *WalkState); 432 433ACPI_STATUS 434AcpiExOpcode_2A_2T_1R ( 435 ACPI_WALK_STATE *WalkState); 436 437 438/* 439 * exoparg3 - ACPI AML execution, 3 operands 440 */ 441ACPI_STATUS 442AcpiExOpcode_3A_0T_0R ( 443 ACPI_WALK_STATE *WalkState); 444 445ACPI_STATUS 446AcpiExOpcode_3A_1T_1R ( 447 ACPI_WALK_STATE *WalkState); 448 449 450/* 451 * exoparg6 - ACPI AML execution, 6 operands 452 */ 453ACPI_STATUS 454AcpiExOpcode_6A_0T_1R ( 455 ACPI_WALK_STATE *WalkState); 456 457 458/* 459 * exresolv - Object resolution and get value functions 460 */ 461ACPI_STATUS 462AcpiExResolveToValue ( 463 ACPI_OPERAND_OBJECT **StackPtr, 464 ACPI_WALK_STATE *WalkState); 465 466ACPI_STATUS 467AcpiExResolveMultiple ( 468 ACPI_WALK_STATE *WalkState, 469 ACPI_OPERAND_OBJECT *Operand, 470 ACPI_OBJECT_TYPE *ReturnType, 471 ACPI_OPERAND_OBJECT **ReturnDesc); 472 473 474/* 475 * exresnte - resolve namespace node 476 */ 477ACPI_STATUS 478AcpiExResolveNodeToValue ( 479 ACPI_NAMESPACE_NODE **StackPtr, 480 ACPI_WALK_STATE *WalkState); 481 482 483/* 484 * exresop - resolve operand to value 485 */ 486ACPI_STATUS 487AcpiExResolveOperands ( 488 UINT16 Opcode, 489 ACPI_OPERAND_OBJECT **StackPtr, 490 ACPI_WALK_STATE *WalkState); 491 492 493/* 494 * exdump - Interpreter debug output routines 495 */ 496void 497AcpiExDumpOperand ( 498 ACPI_OPERAND_OBJECT *ObjDesc, 499 UINT32 Depth); 500 501void 502AcpiExDumpOperands ( 503 ACPI_OPERAND_OBJECT **Operands, 504 const char *OpcodeName, 505 UINT32 NumOpcodes); 506 507void 508AcpiExDumpObjectDescriptor ( 509 ACPI_OPERAND_OBJECT *Object, 510 UINT32 Flags); 511 512void 513AcpiExDumpNamespaceNode ( 514 ACPI_NAMESPACE_NODE *Node, 515 UINT32 Flags); 516 517 518/* 519 * exnames - AML namestring support 520 */ 521ACPI_STATUS 522AcpiExGetNameString ( 523 ACPI_OBJECT_TYPE DataType, 524 UINT8 *InAmlAddress, 525 char **OutNameString, 526 UINT32 *OutNameLength); 527 528 529/* 530 * exstore - Object store support 531 */ 532ACPI_STATUS 533AcpiExStore ( 534 ACPI_OPERAND_OBJECT *ValDesc, 535 ACPI_OPERAND_OBJECT *DestDesc, 536 ACPI_WALK_STATE *WalkState); 537 538ACPI_STATUS 539AcpiExStoreObjectToNode ( 540 ACPI_OPERAND_OBJECT *SourceDesc, 541 ACPI_NAMESPACE_NODE *Node, 542 ACPI_WALK_STATE *WalkState, 543 UINT8 ImplicitConversion); 544 545#define ACPI_IMPLICIT_CONVERSION TRUE 546#define ACPI_NO_IMPLICIT_CONVERSION FALSE 547 548 549/* 550 * exstoren - resolve/store object 551 */ 552ACPI_STATUS 553AcpiExResolveObject ( 554 ACPI_OPERAND_OBJECT **SourceDescPtr, 555 ACPI_OBJECT_TYPE TargetType, 556 ACPI_WALK_STATE *WalkState); 557 558ACPI_STATUS 559AcpiExStoreObjectToObject ( 560 ACPI_OPERAND_OBJECT *SourceDesc, 561 ACPI_OPERAND_OBJECT *DestDesc, 562 ACPI_OPERAND_OBJECT **NewDesc, 563 ACPI_WALK_STATE *WalkState); 564 565 566/* 567 * exstorob - store object - buffer/string 568 */ 569ACPI_STATUS 570AcpiExStoreBufferToBuffer ( 571 ACPI_OPERAND_OBJECT *SourceDesc, 572 ACPI_OPERAND_OBJECT *TargetDesc); 573 574ACPI_STATUS 575AcpiExStoreStringToString ( 576 ACPI_OPERAND_OBJECT *SourceDesc, 577 ACPI_OPERAND_OBJECT *TargetDesc); 578 579 580/* 581 * excopy - object copy 582 */ 583ACPI_STATUS 584AcpiExCopyIntegerToIndexField ( 585 ACPI_OPERAND_OBJECT *SourceDesc, 586 ACPI_OPERAND_OBJECT *TargetDesc); 587 588ACPI_STATUS 589AcpiExCopyIntegerToBankField ( 590 ACPI_OPERAND_OBJECT *SourceDesc, 591 ACPI_OPERAND_OBJECT *TargetDesc); 592 593ACPI_STATUS 594AcpiExCopyDataToNamedField ( 595 ACPI_OPERAND_OBJECT *SourceDesc, 596 ACPI_NAMESPACE_NODE *Node); 597 598ACPI_STATUS 599AcpiExCopyIntegerToBufferField ( 600 ACPI_OPERAND_OBJECT *SourceDesc, 601 ACPI_OPERAND_OBJECT *TargetDesc); 602 603 604/* 605 * exutils - interpreter/scanner utilities 606 */ 607void 608AcpiExEnterInterpreter ( 609 void); 610 611void 612AcpiExExitInterpreter ( 613 void); 614 615void 616AcpiExReacquireInterpreter ( 617 void); 618 619void 620AcpiExRelinquishInterpreter ( 621 void); 622 623BOOLEAN 624AcpiExTruncateFor32bitTable ( 625 ACPI_OPERAND_OBJECT *ObjDesc); 626 627void 628AcpiExAcquireGlobalLock ( 629 UINT32 Rule); 630 631void 632AcpiExReleaseGlobalLock ( 633 UINT32 Rule); 634 635void 636AcpiExEisaIdToString ( 637 char *Dest, 638 UINT64 CompressedId); 639 640void 641AcpiExIntegerToString ( 642 char *Dest, 643 UINT64 Value); 644 645BOOLEAN 646AcpiIsValidSpaceId ( 647 UINT8 SpaceId); 648 649 650/* 651 * exregion - default OpRegion handlers 652 */ 653ACPI_STATUS 654AcpiExSystemMemorySpaceHandler ( 655 UINT32 Function, 656 ACPI_PHYSICAL_ADDRESS Address, 657 UINT32 BitWidth, 658 UINT64 *Value, 659 void *HandlerContext, 660 void *RegionContext); 661 662ACPI_STATUS 663AcpiExSystemIoSpaceHandler ( 664 UINT32 Function, 665 ACPI_PHYSICAL_ADDRESS Address, 666 UINT32 BitWidth, 667 UINT64 *Value, 668 void *HandlerContext, 669 void *RegionContext); 670 671ACPI_STATUS 672AcpiExPciConfigSpaceHandler ( 673 UINT32 Function, 674 ACPI_PHYSICAL_ADDRESS Address, 675 UINT32 BitWidth, 676 UINT64 *Value, 677 void *HandlerContext, 678 void *RegionContext); 679 680ACPI_STATUS 681AcpiExCmosSpaceHandler ( 682 UINT32 Function, 683 ACPI_PHYSICAL_ADDRESS Address, 684 UINT32 BitWidth, 685 UINT64 *Value, 686 void *HandlerContext, 687 void *RegionContext); 688 689ACPI_STATUS 690AcpiExPciBarSpaceHandler ( 691 UINT32 Function, 692 ACPI_PHYSICAL_ADDRESS Address, 693 UINT32 BitWidth, 694 UINT64 *Value, 695 void *HandlerContext, 696 void *RegionContext); 697 698ACPI_STATUS 699AcpiExEmbeddedControllerSpaceHandler ( 700 UINT32 Function, 701 ACPI_PHYSICAL_ADDRESS Address, 702 UINT32 BitWidth, 703 UINT64 *Value, 704 void *HandlerContext, 705 void *RegionContext); 706 707ACPI_STATUS 708AcpiExSmBusSpaceHandler ( 709 UINT32 Function, 710 ACPI_PHYSICAL_ADDRESS Address, 711 UINT32 BitWidth, 712 UINT64 *Value, 713 void *HandlerContext, 714 void *RegionContext); 715 716 717ACPI_STATUS 718AcpiExDataTableSpaceHandler ( 719 UINT32 Function, 720 ACPI_PHYSICAL_ADDRESS Address, 721 UINT32 BitWidth, 722 UINT64 *Value, 723 void *HandlerContext, 724 void *RegionContext); 725 726#endif /* __INTERP_H__ */ 727