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