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