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