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