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