1 /****************************************************************************** 2 * 3 * Module Name: aslcompiler.h - common include file for iASL 4 * 5 *****************************************************************************/ 6 7 /****************************************************************************** 8 * 9 * 1. Copyright Notice 10 * 11 * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp. 12 * All rights reserved. 13 * 14 * 2. License 15 * 16 * 2.1. This is your license from Intel Corp. under its intellectual property 17 * rights. You may have additional license terms from the party that provided 18 * you this software, covering your right to use that party's intellectual 19 * property rights. 20 * 21 * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 22 * copy of the source code appearing in this file ("Covered Code") an 23 * irrevocable, perpetual, worldwide license under Intel's copyrights in the 24 * base code distributed originally by Intel ("Original Intel Code") to copy, 25 * make derivatives, distribute, use and display any portion of the Covered 26 * Code in any form, with the right to sublicense such rights; and 27 * 28 * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 29 * license (with the right to sublicense), under only those claims of Intel 30 * patents that are infringed by the Original Intel Code, to make, use, sell, 31 * offer to sell, and import the Covered Code and derivative works thereof 32 * solely to the minimum extent necessary to exercise the above copyright 33 * license, and in no event shall the patent license extend to any additions 34 * to or modifications of the Original Intel Code. No other license or right 35 * is granted directly or by implication, estoppel or otherwise; 36 * 37 * The above copyright and patent license is granted only if the following 38 * conditions are met: 39 * 40 * 3. Conditions 41 * 42 * 3.1. Redistribution of Source with Rights to Further Distribute Source. 43 * Redistribution of source code of any substantial portion of the Covered 44 * Code or modification with rights to further distribute source must include 45 * the above Copyright Notice, the above License, this list of Conditions, 46 * and the following Disclaimer and Export Compliance provision. In addition, 47 * Licensee must cause all Covered Code to which Licensee contributes to 48 * contain a file documenting the changes Licensee made to create that Covered 49 * Code and the date of any change. Licensee must include in that file the 50 * documentation of any changes made by any predecessor Licensee. Licensee 51 * must include a prominent statement that the modification is derived, 52 * directly or indirectly, from Original Intel Code. 53 * 54 * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 55 * Redistribution of source code of any substantial portion of the Covered 56 * Code or modification without rights to further distribute source must 57 * include the following Disclaimer and Export Compliance provision in the 58 * documentation and/or other materials provided with distribution. In 59 * addition, Licensee may not authorize further sublicense of source of any 60 * portion of the Covered Code, and must include terms to the effect that the 61 * license from Licensee to its licensee is limited to the intellectual 62 * property embodied in the software Licensee provides to its licensee, and 63 * not to intellectual property embodied in modifications its licensee may 64 * make. 65 * 66 * 3.3. Redistribution of Executable. Redistribution in executable form of any 67 * substantial portion of the Covered Code or modification must reproduce the 68 * above Copyright Notice, and the following Disclaimer and Export Compliance 69 * provision in the documentation and/or other materials provided with the 70 * distribution. 71 * 72 * 3.4. Intel retains all right, title, and interest in and to the Original 73 * Intel Code. 74 * 75 * 3.5. Neither the name Intel nor any other trademark owned or controlled by 76 * Intel shall be used in advertising or otherwise to promote the sale, use or 77 * other dealings in products derived from or relating to the Covered Code 78 * without prior written authorization from Intel. 79 * 80 * 4. Disclaimer and Export Compliance 81 * 82 * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 83 * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 84 * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 85 * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 86 * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 87 * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 88 * PARTICULAR PURPOSE. 89 * 90 * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 91 * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 92 * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 93 * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 94 * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 95 * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 96 * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 97 * LIMITED REMEDY. 98 * 99 * 4.3. Licensee shall not export, either directly or indirectly, any of this 100 * software or system incorporating such software without first obtaining any 101 * required license or other approval from the U. S. Department of Commerce or 102 * any other agency or department of the United States Government. In the 103 * event Licensee exports any such software from the United States or 104 * re-exports any such software from a foreign destination, Licensee shall 105 * ensure that the distribution and export/re-export of the software is in 106 * compliance with all laws, regulations, orders, or other restrictions of the 107 * U.S. Export Administration Regulations. Licensee agrees that neither it nor 108 * any of its subsidiaries will export/re-export any technical data, process, 109 * software, or service, directly or indirectly, to any country for which the 110 * United States government or any agency thereof requires an export license, 111 * other governmental approval, or letter of assurance, without first obtaining 112 * such license, approval or letter. 113 * 114 ***************************************************************************** 115 * 116 * Alternatively, you may choose to be licensed under the terms of the 117 * following license: 118 * 119 * Redistribution and use in source and binary forms, with or without 120 * modification, are permitted provided that the following conditions 121 * are met: 122 * 1. Redistributions of source code must retain the above copyright 123 * notice, this list of conditions, and the following disclaimer, 124 * without modification. 125 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 126 * substantially similar to the "NO WARRANTY" disclaimer below 127 * ("Disclaimer") and any redistribution must be conditioned upon 128 * including a substantially similar Disclaimer requirement for further 129 * binary redistribution. 130 * 3. Neither the names of the above-listed copyright holders nor the names 131 * of any contributors may be used to endorse or promote products derived 132 * from this software without specific prior written permission. 133 * 134 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 135 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 136 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 137 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 138 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 139 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 140 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 141 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 142 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 143 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 144 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 145 * 146 * Alternatively, you may choose to be licensed under the terms of the 147 * GNU General Public License ("GPL") version 2 as published by the Free 148 * Software Foundation. 149 * 150 *****************************************************************************/ 151 152 #ifndef __ASLCOMPILER_H 153 #define __ASLCOMPILER_H 154 155 #include "acpi.h" 156 #include "accommon.h" 157 #include "amlresrc.h" 158 #include "acdebug.h" 159 160 /* Microsoft-specific */ 161 162 #if (defined WIN32 || defined WIN64) 163 164 /* warn : used #pragma pack */ 165 #pragma warning(disable:4103) 166 167 /* warn : named type definition in parentheses */ 168 #pragma warning(disable:4115) 169 #endif 170 171 #include <stdio.h> 172 #include <stdlib.h> 173 #include <string.h> 174 #include <errno.h> 175 #include <ctype.h> 176 177 /* Compiler headers */ 178 179 #include "asldefine.h" 180 #include "asltypes.h" 181 #include "aslmessages.h" 182 #include "aslglobal.h" 183 #include "preprocess.h" 184 #include "dtcompiler.h" 185 186 187 /******************************************************************************* 188 * 189 * Compiler prototypes 190 * 191 ******************************************************************************/ 192 193 /* 194 * Main ASL parser - generated from flex/bison, lex/yacc, etc. 195 */ 196 ACPI_PARSE_OBJECT * 197 AslDoError ( 198 void); 199 200 int 201 AslCompilerlex( 202 void); 203 204 void 205 AslResetCurrentLineBuffer ( 206 void); 207 208 void 209 AslInsertLineBuffer ( 210 int SourceChar); 211 212 int 213 AslPopInputFileStack ( 214 void); 215 216 void 217 AslPushInputFileStack ( 218 FILE *InputFile, 219 char *Filename); 220 221 void 222 AslParserCleanup ( 223 void); 224 225 226 /* 227 * aslstartup - entered from main() 228 */ 229 void 230 AslInitializeGlobals ( 231 void); 232 233 typedef 234 ACPI_STATUS (*ASL_PATHNAME_CALLBACK) ( 235 char *); 236 237 ACPI_STATUS 238 AslDoOneFile ( 239 char *Filename); 240 241 ACPI_STATUS 242 AslCheckForErrorExit ( 243 void); 244 245 246 /* 247 * aslcompile - compile mainline 248 */ 249 void 250 AslCompilerSignon ( 251 UINT32 FileId); 252 253 void 254 AslCompilerFileHeader ( 255 UINT32 FileId); 256 257 int 258 CmDoCompile ( 259 void); 260 261 void 262 CmDoOutputFiles ( 263 void); 264 265 void 266 CmCleanupAndExit ( 267 void); 268 269 270 /* 271 * aslallocate - memory allocation 272 */ 273 void * 274 UtLocalCalloc ( 275 UINT32 Size); 276 277 void 278 UtExpandLineBuffers ( 279 void); 280 281 void 282 UtReallocLineBuffers ( 283 char **Buffer, 284 UINT32 OldSize, 285 UINT32 NewSize); 286 287 void 288 UtFreeLineBuffers ( 289 void); 290 291 292 /* 293 * aslcache - local cache support 294 */ 295 char * 296 UtLocalCacheCalloc ( 297 UINT32 Length); 298 299 ACPI_PARSE_OBJECT * 300 UtParseOpCacheCalloc ( 301 void); 302 303 DT_SUBTABLE * 304 UtSubtableCacheCalloc ( 305 void); 306 307 DT_FIELD * 308 UtFieldCacheCalloc ( 309 void); 310 311 void 312 UtDeleteLocalCaches ( 313 void); 314 315 316 /* 317 * aslascii - ascii support 318 */ 319 ACPI_STATUS 320 FlIsFileAsciiSource ( 321 char *Filename, 322 BOOLEAN DisplayErrors); 323 324 325 /* 326 * aslwalks - semantic analysis and parse tree walks 327 */ 328 ACPI_STATUS 329 AnOtherSemanticAnalysisWalkBegin ( 330 ACPI_PARSE_OBJECT *Op, 331 UINT32 Level, 332 void *Context); 333 334 ACPI_STATUS 335 AnOtherSemanticAnalysisWalkEnd ( 336 ACPI_PARSE_OBJECT *Op, 337 UINT32 Level, 338 void *Context); 339 340 ACPI_STATUS 341 AnOperandTypecheckWalkEnd ( 342 ACPI_PARSE_OBJECT *Op, 343 UINT32 Level, 344 void *Context); 345 346 ACPI_STATUS 347 AnMethodTypingWalkEnd ( 348 ACPI_PARSE_OBJECT *Op, 349 UINT32 Level, 350 void *Context); 351 352 353 /* 354 * aslmethod - Control method analysis walk 355 */ 356 ACPI_STATUS 357 MtMethodAnalysisWalkBegin ( 358 ACPI_PARSE_OBJECT *Op, 359 UINT32 Level, 360 void *Context); 361 362 ACPI_STATUS 363 MtMethodAnalysisWalkEnd ( 364 ACPI_PARSE_OBJECT *Op, 365 UINT32 Level, 366 void *Context); 367 368 369 /* 370 * aslbtypes - bitfield data types 371 */ 372 UINT32 373 AnMapObjTypeToBtype ( 374 ACPI_PARSE_OBJECT *Op); 375 376 UINT32 377 AnMapArgTypeToBtype ( 378 UINT32 ArgType); 379 380 UINT32 381 AnGetBtype ( 382 ACPI_PARSE_OBJECT *Op); 383 384 void 385 AnFormatBtype ( 386 char *Buffer, 387 UINT32 Btype); 388 389 390 /* 391 * aslanalyze - Support functions for parse tree walks 392 */ 393 void 394 AnCheckId ( 395 ACPI_PARSE_OBJECT *Op, 396 ACPI_NAME Type); 397 398 /* Values for Type argument above */ 399 400 #define ASL_TYPE_HID 0 401 #define ASL_TYPE_CID 1 402 403 BOOLEAN 404 AnIsInternalMethod ( 405 ACPI_PARSE_OBJECT *Op); 406 407 UINT32 408 AnGetInternalMethodReturnType ( 409 ACPI_PARSE_OBJECT *Op); 410 411 BOOLEAN 412 AnLastStatementIsReturn ( 413 ACPI_PARSE_OBJECT *Op); 414 415 void 416 AnCheckMethodReturnValue ( 417 ACPI_PARSE_OBJECT *Op, 418 const ACPI_OPCODE_INFO *OpInfo, 419 ACPI_PARSE_OBJECT *ArgOp, 420 UINT32 RequiredBtypes, 421 UINT32 ThisNodeBtype); 422 423 BOOLEAN 424 AnIsResultUsed ( 425 ACPI_PARSE_OBJECT *Op); 426 427 void 428 ApCheckForGpeNameConflict ( 429 ACPI_PARSE_OBJECT *Op); 430 431 void 432 ApCheckRegMethod ( 433 ACPI_PARSE_OBJECT *Op); 434 435 BOOLEAN 436 ApFindNameInScope ( 437 char *Name, 438 ACPI_PARSE_OBJECT *Op); 439 440 BOOLEAN 441 ApFindNameInDeviceTree ( 442 char *Name, 443 ACPI_PARSE_OBJECT *Op); 444 445 /* 446 * aslerror - error handling/reporting 447 */ 448 void 449 AslAbort ( 450 void); 451 452 void 453 AslDualParseOpError ( 454 UINT8 Level, 455 UINT16 MainMessageId, 456 ACPI_PARSE_OBJECT *MainOp, 457 char *MainMessage, 458 UINT16 SecondMessageId, 459 ACPI_PARSE_OBJECT *SecondOp, 460 char *SecondaryMessage); 461 462 void 463 AslError ( 464 UINT8 Level, 465 UINT16 MessageId, 466 ACPI_PARSE_OBJECT *Op, 467 char *ExtraMessage); 468 469 void 470 AslCheckExpectedExceptions ( 471 void); 472 473 ACPI_STATUS 474 AslExpectException ( 475 char *MessageIdString); 476 477 ACPI_STATUS 478 AslDisableException ( 479 char *MessageIdString); 480 481 BOOLEAN 482 AslIsExceptionIgnored ( 483 UINT8 Level, 484 UINT16 MessageId); 485 486 void 487 AslCoreSubsystemError ( 488 ACPI_PARSE_OBJECT *Op, 489 ACPI_STATUS Status, 490 char *ExtraMessage, 491 BOOLEAN Abort); 492 493 int 494 AslCompilererror( 495 const char *s); 496 497 void 498 AslCommonError ( 499 UINT8 Level, 500 UINT16 MessageId, 501 UINT32 CurrentLineNumber, 502 UINT32 LogicalLineNumber, 503 UINT32 LogicalByteOffset, 504 UINT32 Column, 505 char *Filename, 506 char *ExtraMessage); 507 508 void 509 AslCommonError2 ( 510 UINT8 Level, 511 UINT16 MessageId, 512 UINT32 LineNumber, 513 UINT32 Column, 514 char *SourceLine, 515 char *Filename, 516 char *ExtraMessage); 517 518 void 519 AePrintException ( 520 UINT32 FileId, 521 ASL_ERROR_MSG *Enode, 522 char *Header); 523 524 void 525 AePrintErrorLog ( 526 UINT32 FileId); 527 528 void 529 AeClearErrorLog ( 530 void); 531 532 533 /* 534 * asllisting - generate all "listing" type files 535 */ 536 void 537 LsDoListings ( 538 void); 539 540 void 541 LsWriteNodeToAsmListing ( 542 ACPI_PARSE_OBJECT *Op); 543 544 void 545 LsWriteNode ( 546 ACPI_PARSE_OBJECT *Op, 547 UINT32 FileId); 548 549 void 550 LsDumpParseTree ( 551 void); 552 553 554 /* 555 * asllistsup - Listing file support utilities 556 */ 557 void 558 LsDumpAscii ( 559 UINT32 FileId, 560 UINT32 Count, 561 UINT8 *Buffer); 562 563 void 564 LsDumpAsciiInComment ( 565 UINT32 FileId, 566 UINT32 Count, 567 UINT8 *Buffer); 568 569 void 570 LsCheckException ( 571 UINT32 LineNumber, 572 UINT32 FileId); 573 574 void 575 LsFlushListingBuffer ( 576 UINT32 FileId); 577 578 void 579 LsWriteListingHexBytes ( 580 UINT8 *Buffer, 581 UINT32 Length, 582 UINT32 FileId); 583 584 void 585 LsWriteSourceLines ( 586 UINT32 ToLineNumber, 587 UINT32 ToLogicalLineNumber, 588 UINT32 FileId); 589 590 UINT32 591 LsWriteOneSourceLine ( 592 UINT32 FileId); 593 594 void 595 LsPushNode ( 596 char *Filename); 597 598 ASL_LISTING_NODE * 599 LsPopNode ( 600 void); 601 602 603 /* 604 * aslhex - generate all "hex" output files (C, ASM, ASL) 605 */ 606 void 607 HxDoHexOutput ( 608 void); 609 610 611 /* 612 * aslfold - constant folding 613 */ 614 ACPI_STATUS 615 OpcAmlConstantWalk ( 616 ACPI_PARSE_OBJECT *Op, 617 UINT32 Level, 618 void *Context); 619 620 621 /* 622 * aslmessages - exception strings 623 */ 624 const char * 625 AeDecodeMessageId ( 626 UINT16 MessageId); 627 628 const char * 629 AeDecodeExceptionLevel ( 630 UINT8 Level); 631 632 UINT16 633 AeBuildFullExceptionCode ( 634 UINT8 Level, 635 UINT16 MessageId); 636 637 /* 638 * asloffset - generate C offset file for BIOS support 639 */ 640 ACPI_STATUS 641 LsAmlOffsetWalk ( 642 ACPI_PARSE_OBJECT *Op, 643 UINT32 Level, 644 void *Context); 645 646 void 647 LsDoOffsetTableHeader ( 648 UINT32 FileId); 649 650 void 651 LsDoOffsetTableFooter ( 652 UINT32 FileId); 653 654 655 /* 656 * aslopcodes - generate AML opcodes 657 */ 658 ACPI_STATUS 659 OpcAmlOpcodeWalk ( 660 ACPI_PARSE_OBJECT *Op, 661 UINT32 Level, 662 void *Context); 663 664 ACPI_STATUS 665 OpcAmlOpcodeUpdateWalk ( 666 ACPI_PARSE_OBJECT *Op, 667 UINT32 Level, 668 void *Context); 669 670 void 671 OpcGenerateAmlOpcode ( 672 ACPI_PARSE_OBJECT *Op); 673 674 UINT32 675 OpcSetOptimalIntegerSize ( 676 ACPI_PARSE_OBJECT *Op); 677 678 void 679 OpcGetIntegerWidth ( 680 ACPI_PARSE_OBJECT *Op); 681 682 683 /* 684 * asloperands - generate AML operands for the AML opcodes 685 */ 686 ACPI_PARSE_OBJECT * 687 UtGetArg ( 688 ACPI_PARSE_OBJECT *Op, 689 UINT32 Argn); 690 691 void 692 OpnGenerateAmlOperands ( 693 ACPI_PARSE_OBJECT *Op); 694 695 void 696 OpnDoPackage ( 697 ACPI_PARSE_OBJECT *Op); 698 699 700 /* 701 * aslopt - optmization 702 */ 703 void 704 OptOptimizeNamePath ( 705 ACPI_PARSE_OBJECT *Op, 706 UINT32 Flags, 707 ACPI_WALK_STATE *WalkState, 708 char *AmlNameString, 709 ACPI_NAMESPACE_NODE *TargetNode); 710 711 712 /* 713 * aslpld - ToPLD macro support 714 */ 715 void 716 OpcDoPld ( 717 ACPI_PARSE_OBJECT *Op); 718 719 720 /* 721 * aslprintf - Printf/Fprintf macros 722 */ 723 void 724 OpcDoPrintf ( 725 ACPI_PARSE_OBJECT *Op); 726 727 void 728 OpcDoFprintf ( 729 ACPI_PARSE_OBJECT *Op); 730 731 732 /* 733 * aslprune - parse tree pruner 734 */ 735 void 736 AslPruneParseTree ( 737 UINT32 PruneDepth, 738 UINT32 Type); 739 740 741 /* 742 * aslcodegen - code generation 743 */ 744 void 745 CgGenerateAmlOutput ( 746 void); 747 748 void 749 CgLocalWriteAmlData ( 750 ACPI_PARSE_OBJECT *Op, 751 void *Buffer, 752 UINT32 Length); 753 754 755 /* 756 * aslfile 757 */ 758 void 759 FlOpenFile ( 760 UINT32 FileId, 761 char *Filename, 762 char *Mode); 763 764 765 /* 766 * asllength - calculate/adjust AML package lengths 767 */ 768 ACPI_STATUS 769 LnPackageLengthWalk ( 770 ACPI_PARSE_OBJECT *Op, 771 UINT32 Level, 772 void *Context); 773 774 ACPI_STATUS 775 LnInitLengthsWalk ( 776 ACPI_PARSE_OBJECT *Op, 777 UINT32 Level, 778 void *Context); 779 780 void 781 CgGenerateAmlLengths ( 782 ACPI_PARSE_OBJECT *Op); 783 784 785 /* 786 * aslmap - opcode mappings and reserved method names 787 */ 788 ACPI_OBJECT_TYPE 789 AslMapNamedOpcodeToDataType ( 790 UINT16 Opcode); 791 792 793 /* 794 * aslpredef - ACPI predefined names support 795 */ 796 BOOLEAN 797 ApCheckForPredefinedMethod ( 798 ACPI_PARSE_OBJECT *Op, 799 ASL_METHOD_INFO *MethodInfo); 800 801 void 802 ApCheckPredefinedReturnValue ( 803 ACPI_PARSE_OBJECT *Op, 804 ASL_METHOD_INFO *MethodInfo); 805 806 UINT32 807 ApCheckForPredefinedName ( 808 ACPI_PARSE_OBJECT *Op, 809 char *Name); 810 811 void 812 ApCheckForPredefinedObject ( 813 ACPI_PARSE_OBJECT *Op, 814 char *Name); 815 816 ACPI_STATUS 817 ApCheckObjectType ( 818 const char *PredefinedName, 819 ACPI_PARSE_OBJECT *Op, 820 UINT32 ExpectedBtypes, 821 UINT32 PackageIndex); 822 823 void 824 ApDisplayReservedNames ( 825 void); 826 827 828 /* 829 * aslprepkg - ACPI predefined names support for packages 830 */ 831 void 832 ApCheckPackage ( 833 ACPI_PARSE_OBJECT *ParentOp, 834 const ACPI_PREDEFINED_INFO *Predefined); 835 836 837 /* 838 * asltransform - parse tree transformations 839 */ 840 ACPI_STATUS 841 TrAmlTransformWalkBegin ( 842 ACPI_PARSE_OBJECT *Op, 843 UINT32 Level, 844 void *Context); 845 846 ACPI_STATUS 847 TrAmlTransformWalkEnd ( 848 ACPI_PARSE_OBJECT *Op, 849 UINT32 Level, 850 void *Context); 851 852 853 /* 854 * aslexternal - External opcode support 855 */ 856 ACPI_STATUS 857 ExAmlExternalWalkBegin ( 858 ACPI_PARSE_OBJECT *Op, 859 UINT32 Level, 860 void *Context); 861 862 ACPI_STATUS 863 ExAmlExternalWalkEnd ( 864 ACPI_PARSE_OBJECT *Op, 865 UINT32 Level, 866 void *Context); 867 868 void 869 ExDoExternal ( 870 ACPI_PARSE_OBJECT *Op); 871 872 /* Values for "Visitation" parameter above */ 873 874 #define ASL_WALK_VISIT_DOWNWARD 0x01 875 #define ASL_WALK_VISIT_UPWARD 0x02 876 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD) 877 878 879 /* 880 * aslparseop.c - Parse op create/allocate/cache 881 */ 882 ACPI_PARSE_OBJECT * 883 TrCreateOp ( 884 UINT32 ParseOpcode, 885 UINT32 NumChildren, 886 ...); 887 888 ACPI_PARSE_OBJECT * 889 TrCreateLeafOp ( 890 UINT32 ParseOpcode); 891 892 ACPI_PARSE_OBJECT * 893 TrCreateNullTargetOp ( 894 void); 895 896 ACPI_PARSE_OBJECT * 897 TrCreateAssignmentOp ( 898 ACPI_PARSE_OBJECT *Target, 899 ACPI_PARSE_OBJECT *Source); 900 901 ACPI_PARSE_OBJECT * 902 TrCreateTargetOp ( 903 ACPI_PARSE_OBJECT *OriginalOp, 904 ACPI_PARSE_OBJECT *ParentOp); 905 906 ACPI_PARSE_OBJECT * 907 TrCreateValuedLeafOp ( 908 UINT32 ParseOpcode, 909 UINT64 Value); 910 911 ACPI_PARSE_OBJECT * 912 TrCreateConstantLeafOp ( 913 UINT32 ParseOpcode); 914 915 ACPI_PARSE_OBJECT * 916 TrAllocateOp ( 917 UINT32 ParseOpcode); 918 919 void 920 TrPrintOpFlags ( 921 UINT32 Flags, 922 UINT32 OutputLevel); 923 924 925 /* 926 * asltree.c - Parse tree management 927 */ 928 void 929 TrSetOpParent ( 930 ACPI_PARSE_OBJECT *Op, 931 ACPI_PARSE_OBJECT *ParentOp); 932 933 ACPI_PARSE_OBJECT * 934 TrSetOpIntegerValue ( 935 UINT32 ParseOpcode, 936 ACPI_PARSE_OBJECT *Op); 937 938 void 939 TrSetOpEndLineNumber ( 940 ACPI_PARSE_OBJECT *Op); 941 942 void 943 TrSetOpCurrentFilename ( 944 ACPI_PARSE_OBJECT *Op); 945 946 void 947 TrSetOpIntegerWidth ( 948 ACPI_PARSE_OBJECT *TableSignature, 949 ACPI_PARSE_OBJECT *Revision); 950 951 ACPI_PARSE_OBJECT * 952 TrLinkOpChildren ( 953 ACPI_PARSE_OBJECT *Op, 954 UINT32 NumChildren, 955 ...); 956 957 ACPI_PARSE_OBJECT * 958 TrLinkPeerOp ( 959 ACPI_PARSE_OBJECT *Op1, 960 ACPI_PARSE_OBJECT *Op2); 961 962 ACPI_PARSE_OBJECT * 963 TrLinkChildOp ( 964 ACPI_PARSE_OBJECT *Op1, 965 ACPI_PARSE_OBJECT *Op2); 966 967 ACPI_PARSE_OBJECT * 968 TrSetOpFlags ( 969 ACPI_PARSE_OBJECT *Op, 970 UINT32 Flags); 971 972 ACPI_PARSE_OBJECT * 973 TrSetOpAmlLength ( 974 ACPI_PARSE_OBJECT *Op, 975 UINT32 Length); 976 977 ACPI_PARSE_OBJECT * 978 TrLinkPeerOps ( 979 UINT32 NumPeers, 980 ...); 981 982 ACPI_STATUS 983 TrWalkParseTree ( 984 ACPI_PARSE_OBJECT *Op, 985 UINT32 Visitation, 986 ASL_WALK_CALLBACK DescendingCallback, 987 ASL_WALK_CALLBACK AscendingCallback, 988 void *Context); 989 990 991 /* 992 * aslfiles - File I/O support 993 */ 994 void 995 FlAddIncludeDirectory ( 996 char *Dir); 997 998 char * 999 FlMergePathnames ( 1000 char *PrefixDir, 1001 char *FilePathname); 1002 1003 void 1004 FlOpenIncludeFile ( 1005 ACPI_PARSE_OBJECT *Op); 1006 1007 void 1008 FlFileError ( 1009 UINT32 FileId, 1010 UINT8 ErrorId); 1011 1012 UINT32 1013 FlGetFileSize ( 1014 UINT32 FileId); 1015 1016 ACPI_STATUS 1017 FlReadFile ( 1018 UINT32 FileId, 1019 void *Buffer, 1020 UINT32 Length); 1021 1022 void 1023 FlWriteFile ( 1024 UINT32 FileId, 1025 void *Buffer, 1026 UINT32 Length); 1027 1028 void 1029 FlSeekFile ( 1030 UINT32 FileId, 1031 long Offset); 1032 1033 void 1034 FlCloseFile ( 1035 UINT32 FileId); 1036 1037 void 1038 FlPrintFile ( 1039 UINT32 FileId, 1040 char *Format, 1041 ...); 1042 1043 void 1044 FlDeleteFile ( 1045 UINT32 FileId); 1046 1047 void 1048 FlSetLineNumber ( 1049 UINT32 LineNumber); 1050 1051 void 1052 FlSetFilename ( 1053 char *Filename); 1054 1055 ACPI_STATUS 1056 FlOpenInputFile ( 1057 char *InputFilename); 1058 1059 ACPI_STATUS 1060 FlOpenAmlOutputFile ( 1061 char *InputFilename); 1062 1063 ACPI_STATUS 1064 FlOpenMiscOutputFiles ( 1065 char *InputFilename); 1066 1067 /* 1068 * aslhwmap - hardware map summary 1069 */ 1070 void 1071 MpEmitMappingInfo ( 1072 void); 1073 1074 1075 /* 1076 * asload - load namespace in prep for cross reference 1077 */ 1078 ACPI_STATUS 1079 LdLoadNamespace ( 1080 ACPI_PARSE_OBJECT *RootOp); 1081 1082 1083 /* 1084 * asllookup - namespace lookup functions 1085 */ 1086 void 1087 LkFindUnreferencedObjects ( 1088 void); 1089 1090 /* 1091 * aslhelp - help screens 1092 */ 1093 void 1094 Usage ( 1095 void); 1096 1097 void 1098 AslFilenameHelp ( 1099 void); 1100 1101 void 1102 AslDisassemblyHelp ( 1103 void); 1104 1105 1106 /* 1107 * aslnamesp - namespace output file generation 1108 */ 1109 ACPI_STATUS 1110 NsDisplayNamespace ( 1111 void); 1112 1113 void 1114 NsSetupNamespaceListing ( 1115 void *Handle); 1116 1117 /* 1118 * asloptions - command line processing 1119 */ 1120 int 1121 AslCommandLine ( 1122 int argc, 1123 char **argv); 1124 1125 /* 1126 * aslxref - namespace cross reference 1127 */ 1128 ACPI_STATUS 1129 XfCrossReferenceNamespace ( 1130 void); 1131 1132 1133 /* 1134 * aslxrefout 1135 */ 1136 void 1137 OtPrintHeaders ( 1138 char *Message); 1139 1140 void 1141 OtCreateXrefFile ( 1142 void); 1143 1144 void 1145 OtXrefWalkPart1 ( 1146 ACPI_PARSE_OBJECT *Op, 1147 UINT32 Level, 1148 ASL_METHOD_INFO *MethodInfo); 1149 1150 1151 /* 1152 * aslutils - common compiler utilites 1153 */ 1154 void 1155 DbgPrint ( 1156 UINT32 Type, 1157 char *Format, 1158 ...); 1159 1160 /* Type values for above */ 1161 1162 #define ASL_DEBUG_OUTPUT 0 1163 #define ASL_PARSE_OUTPUT 1 1164 #define ASL_TREE_OUTPUT 2 1165 1166 UINT8 1167 UtIsBigEndianMachine ( 1168 void); 1169 1170 BOOLEAN 1171 UtQueryForOverwrite ( 1172 char *Pathname); 1173 1174 void 1175 UtDumpStringOp ( 1176 ACPI_PARSE_OBJECT *Op, 1177 UINT32 Level); 1178 1179 void 1180 UtDumpIntegerOp ( 1181 ACPI_PARSE_OBJECT *Op, 1182 UINT32 Level, 1183 UINT32 IntegerLength); 1184 1185 void 1186 UtDumpBasicOp ( 1187 ACPI_PARSE_OBJECT *Op, 1188 UINT32 Level); 1189 1190 void * 1191 UtGetParentMethod ( 1192 ACPI_NAMESPACE_NODE *Node); 1193 1194 BOOLEAN 1195 UtNodeIsDescendantOf ( 1196 ACPI_NAMESPACE_NODE *Node1, 1197 ACPI_NAMESPACE_NODE *Node2); 1198 1199 void 1200 UtDisplaySupportedTables ( 1201 void); 1202 1203 void 1204 UtDisplayConstantOpcodes ( 1205 void); 1206 1207 UINT8 1208 UtBeginEvent ( 1209 char *Name); 1210 1211 void 1212 UtEndEvent ( 1213 UINT8 Event); 1214 1215 void 1216 UtDisplaySummary ( 1217 UINT32 FileId); 1218 1219 void 1220 UtConvertByteToHex ( 1221 UINT8 RawByte, 1222 UINT8 *Buffer); 1223 1224 void 1225 UtConvertByteToAsmHex ( 1226 UINT8 RawByte, 1227 UINT8 *Buffer); 1228 1229 char * 1230 UtGetOpName ( 1231 UINT32 ParseOpcode); 1232 1233 void 1234 UtSetParseOpName ( 1235 ACPI_PARSE_OBJECT *Op); 1236 1237 ACPI_STATUS 1238 UtInternalizeName ( 1239 char *ExternalName, 1240 char **ConvertedName); 1241 1242 void 1243 UtAttachNamepathToOwner ( 1244 ACPI_PARSE_OBJECT *Op, 1245 ACPI_PARSE_OBJECT *NameNode); 1246 1247 ACPI_PARSE_OBJECT * 1248 UtCheckIntegerRange ( 1249 ACPI_PARSE_OBJECT *Op, 1250 UINT32 LowValue, 1251 UINT32 HighValue); 1252 1253 UINT64 1254 UtDoConstant ( 1255 char *String); 1256 1257 1258 /* 1259 * asluuid - UUID support 1260 */ 1261 ACPI_STATUS 1262 AuValidateUuid ( 1263 char *InString); 1264 1265 ACPI_STATUS 1266 AuConvertUuidToString ( 1267 char *UuIdBuffer, 1268 char *OutString); 1269 1270 /* 1271 * aslresource - Resource template generation utilities 1272 */ 1273 void 1274 RsSmallAddressCheck ( 1275 UINT8 Type, 1276 UINT32 Minimum, 1277 UINT32 Maximum, 1278 UINT32 Length, 1279 UINT32 Alignment, 1280 ACPI_PARSE_OBJECT *MinOp, 1281 ACPI_PARSE_OBJECT *MaxOp, 1282 ACPI_PARSE_OBJECT *LengthOp, 1283 ACPI_PARSE_OBJECT *AlignOp, 1284 ACPI_PARSE_OBJECT *Op); 1285 1286 void 1287 RsLargeAddressCheck ( 1288 UINT64 Minimum, 1289 UINT64 Maximum, 1290 UINT64 Length, 1291 UINT64 Granularity, 1292 UINT8 Flags, 1293 ACPI_PARSE_OBJECT *MinOp, 1294 ACPI_PARSE_OBJECT *MaxOp, 1295 ACPI_PARSE_OBJECT *LengthOp, 1296 ACPI_PARSE_OBJECT *GranOp, 1297 ACPI_PARSE_OBJECT *Op); 1298 1299 UINT16 1300 RsGetStringDataLength ( 1301 ACPI_PARSE_OBJECT *InitializerOp); 1302 1303 ASL_RESOURCE_NODE * 1304 RsAllocateResourceNode ( 1305 UINT32 Size); 1306 1307 void 1308 RsCreateResourceField ( 1309 ACPI_PARSE_OBJECT *Op, 1310 char *Name, 1311 UINT32 ByteOffset, 1312 UINT32 BitOffset, 1313 UINT32 BitLength); 1314 1315 void 1316 RsSetFlagBits ( 1317 UINT8 *Flags, 1318 ACPI_PARSE_OBJECT *Op, 1319 UINT8 Position, 1320 UINT8 DefaultBit); 1321 1322 void 1323 RsSetFlagBits16 ( 1324 UINT16 *Flags, 1325 ACPI_PARSE_OBJECT *Op, 1326 UINT8 Position, 1327 UINT8 DefaultBit); 1328 1329 ACPI_PARSE_OBJECT * 1330 RsCompleteNodeAndGetNext ( 1331 ACPI_PARSE_OBJECT *Op); 1332 1333 void 1334 RsCheckListForDuplicates ( 1335 ACPI_PARSE_OBJECT *Op); 1336 1337 ASL_RESOURCE_NODE * 1338 RsDoOneResourceDescriptor ( 1339 ASL_RESOURCE_INFO *Info, 1340 UINT8 *State); 1341 1342 /* Values for State above */ 1343 1344 #define ACPI_RSTATE_NORMAL 0 1345 #define ACPI_RSTATE_START_DEPENDENT 1 1346 #define ACPI_RSTATE_DEPENDENT_LIST 2 1347 1348 UINT32 1349 RsLinkDescriptorChain ( 1350 ASL_RESOURCE_NODE **PreviousRnode, 1351 ASL_RESOURCE_NODE *Rnode); 1352 1353 void 1354 RsDoResourceTemplate ( 1355 ACPI_PARSE_OBJECT *Op); 1356 1357 1358 /* 1359 * aslrestype1 - Miscellaneous Small descriptors 1360 */ 1361 ASL_RESOURCE_NODE * 1362 RsDoEndTagDescriptor ( 1363 ASL_RESOURCE_INFO *Info); 1364 1365 ASL_RESOURCE_NODE * 1366 RsDoEndDependentDescriptor ( 1367 ASL_RESOURCE_INFO *Info); 1368 1369 ASL_RESOURCE_NODE * 1370 RsDoMemory24Descriptor ( 1371 ASL_RESOURCE_INFO *Info); 1372 1373 ASL_RESOURCE_NODE * 1374 RsDoMemory32Descriptor ( 1375 ASL_RESOURCE_INFO *Info); 1376 1377 ASL_RESOURCE_NODE * 1378 RsDoMemory32FixedDescriptor ( 1379 ASL_RESOURCE_INFO *Info); 1380 1381 ASL_RESOURCE_NODE * 1382 RsDoStartDependentDescriptor ( 1383 ASL_RESOURCE_INFO *Info); 1384 1385 ASL_RESOURCE_NODE * 1386 RsDoStartDependentNoPriDescriptor ( 1387 ASL_RESOURCE_INFO *Info); 1388 1389 ASL_RESOURCE_NODE * 1390 RsDoVendorSmallDescriptor ( 1391 ASL_RESOURCE_INFO *Info); 1392 1393 1394 /* 1395 * aslrestype1i - I/O-related Small descriptors 1396 */ 1397 ASL_RESOURCE_NODE * 1398 RsDoDmaDescriptor ( 1399 ASL_RESOURCE_INFO *Info); 1400 1401 ASL_RESOURCE_NODE * 1402 RsDoFixedDmaDescriptor ( 1403 ASL_RESOURCE_INFO *Info); 1404 1405 ASL_RESOURCE_NODE * 1406 RsDoFixedIoDescriptor ( 1407 ASL_RESOURCE_INFO *Info); 1408 1409 ASL_RESOURCE_NODE * 1410 RsDoIoDescriptor ( 1411 ASL_RESOURCE_INFO *Info); 1412 1413 ASL_RESOURCE_NODE * 1414 RsDoIrqDescriptor ( 1415 ASL_RESOURCE_INFO *Info); 1416 1417 ASL_RESOURCE_NODE * 1418 RsDoIrqNoFlagsDescriptor ( 1419 ASL_RESOURCE_INFO *Info); 1420 1421 1422 /* 1423 * aslrestype2 - Large resource descriptors 1424 */ 1425 ASL_RESOURCE_NODE * 1426 RsDoInterruptDescriptor ( 1427 ASL_RESOURCE_INFO *Info); 1428 1429 ASL_RESOURCE_NODE * 1430 RsDoVendorLargeDescriptor ( 1431 ASL_RESOURCE_INFO *Info); 1432 1433 ASL_RESOURCE_NODE * 1434 RsDoGeneralRegisterDescriptor ( 1435 ASL_RESOURCE_INFO *Info); 1436 1437 ASL_RESOURCE_NODE * 1438 RsDoGpioIntDescriptor ( 1439 ASL_RESOURCE_INFO *Info); 1440 1441 ASL_RESOURCE_NODE * 1442 RsDoGpioIoDescriptor ( 1443 ASL_RESOURCE_INFO *Info); 1444 1445 ASL_RESOURCE_NODE * 1446 RsDoI2cSerialBusDescriptor ( 1447 ASL_RESOURCE_INFO *Info); 1448 1449 ASL_RESOURCE_NODE * 1450 RsDoSpiSerialBusDescriptor ( 1451 ASL_RESOURCE_INFO *Info); 1452 1453 ASL_RESOURCE_NODE * 1454 RsDoUartSerialBusDescriptor ( 1455 ASL_RESOURCE_INFO *Info); 1456 1457 ASL_RESOURCE_NODE * 1458 RsDoPinFunctionDescriptor ( 1459 ASL_RESOURCE_INFO *Info); 1460 1461 ASL_RESOURCE_NODE * 1462 RsDoPinConfigDescriptor ( 1463 ASL_RESOURCE_INFO *Info); 1464 1465 ASL_RESOURCE_NODE * 1466 RsDoPinGroupDescriptor ( 1467 ASL_RESOURCE_INFO *Info); 1468 1469 ASL_RESOURCE_NODE * 1470 RsDoPinGroupFunctionDescriptor ( 1471 ASL_RESOURCE_INFO *Info); 1472 1473 ASL_RESOURCE_NODE * 1474 RsDoPinGroupConfigDescriptor ( 1475 ASL_RESOURCE_INFO *Info); 1476 1477 /* 1478 * aslrestype2d - DWord address descriptors 1479 */ 1480 ASL_RESOURCE_NODE * 1481 RsDoDwordIoDescriptor ( 1482 ASL_RESOURCE_INFO *Info); 1483 1484 ASL_RESOURCE_NODE * 1485 RsDoDwordMemoryDescriptor ( 1486 ASL_RESOURCE_INFO *Info); 1487 1488 ASL_RESOURCE_NODE * 1489 RsDoDwordSpaceDescriptor ( 1490 ASL_RESOURCE_INFO *Info); 1491 1492 1493 /* 1494 * aslrestype2e - Extended address descriptors 1495 */ 1496 ASL_RESOURCE_NODE * 1497 RsDoExtendedIoDescriptor ( 1498 ASL_RESOURCE_INFO *Info); 1499 1500 ASL_RESOURCE_NODE * 1501 RsDoExtendedMemoryDescriptor ( 1502 ASL_RESOURCE_INFO *Info); 1503 1504 ASL_RESOURCE_NODE * 1505 RsDoExtendedSpaceDescriptor ( 1506 ASL_RESOURCE_INFO *Info); 1507 1508 1509 /* 1510 * aslrestype2q - QWord address descriptors 1511 */ 1512 ASL_RESOURCE_NODE * 1513 RsDoQwordIoDescriptor ( 1514 ASL_RESOURCE_INFO *Info); 1515 1516 ASL_RESOURCE_NODE * 1517 RsDoQwordMemoryDescriptor ( 1518 ASL_RESOURCE_INFO *Info); 1519 1520 ASL_RESOURCE_NODE * 1521 RsDoQwordSpaceDescriptor ( 1522 ASL_RESOURCE_INFO *Info); 1523 1524 1525 /* 1526 * aslrestype2w - Word address descriptors 1527 */ 1528 ASL_RESOURCE_NODE * 1529 RsDoWordIoDescriptor ( 1530 ASL_RESOURCE_INFO *Info); 1531 1532 ASL_RESOURCE_NODE * 1533 RsDoWordSpaceDescriptor ( 1534 ASL_RESOURCE_INFO *Info); 1535 1536 ASL_RESOURCE_NODE * 1537 RsDoWordBusNumberDescriptor ( 1538 ASL_RESOURCE_INFO *Info); 1539 1540 1541 /* 1542 * Entry to data table compiler subsystem 1543 */ 1544 ACPI_STATUS 1545 DtDoCompile( 1546 void); 1547 1548 ACPI_STATUS 1549 DtCreateTemplates ( 1550 char **argv); 1551 1552 1553 /* 1554 * ASL/ASL+ converter debug 1555 */ 1556 void 1557 CvDbgPrint ( 1558 char *Fmt, 1559 ...); 1560 1561 1562 #endif /* __ASLCOMPILER_H */ 1563