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