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