Home | History | Annotate | Line # | Download | only in compiler
aslcompiler.h revision 1.7.4.1
      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 
   1041 UtDisplaySummary (
   1042     UINT32                  FileId);
   1043 
   1044 void
   1045 UtConvertByteToHex (
   1046     UINT8                   RawByte,
   1047     UINT8                   *Buffer);
   1048 
   1049 void
   1050 UtConvertByteToAsmHex (
   1051     UINT8                   RawByte,
   1052     UINT8                   *Buffer);
   1053 
   1054 char *
   1055 UtGetOpName (
   1056     UINT32                  ParseOpcode);
   1057 
   1058 void
   1059 UtSetParseOpName (
   1060     ACPI_PARSE_OBJECT       *Op);
   1061 
   1062 char *
   1063 UtStringCacheCalloc (
   1064     UINT32                  Length);
   1065 
   1066 void
   1067 UtExpandLineBuffers (
   1068     void);
   1069 
   1070 void
   1071 UtFreeLineBuffers (
   1072     void);
   1073 
   1074 ACPI_STATUS
   1075 UtInternalizeName (
   1076     char                    *ExternalName,
   1077     char                    **ConvertedName);
   1078 
   1079 void
   1080 UtAttachNamepathToOwner (
   1081     ACPI_PARSE_OBJECT       *Op,
   1082     ACPI_PARSE_OBJECT       *NameNode);
   1083 
   1084 ACPI_PARSE_OBJECT *
   1085 UtCheckIntegerRange (
   1086     ACPI_PARSE_OBJECT       *Op,
   1087     UINT32                  LowValue,
   1088     UINT32                  HighValue);
   1089 
   1090 UINT64
   1091 UtDoConstant (
   1092     char                    *String);
   1093 
   1094 
   1095 /*
   1096  * asluuid - UUID support
   1097  */
   1098 ACPI_STATUS
   1099 AuValidateUuid (
   1100     char                    *InString);
   1101 
   1102 ACPI_STATUS
   1103 AuConvertUuidToString (
   1104     char                    *UuIdBuffer,
   1105     char                    *OutString);
   1106 
   1107 /*
   1108  * aslresource - Resource template generation utilities
   1109  */
   1110 void
   1111 RsSmallAddressCheck (
   1112     UINT8                   Type,
   1113     UINT32                  Minimum,
   1114     UINT32                  Maximum,
   1115     UINT32                  Length,
   1116     UINT32                  Alignment,
   1117     ACPI_PARSE_OBJECT       *MinOp,
   1118     ACPI_PARSE_OBJECT       *MaxOp,
   1119     ACPI_PARSE_OBJECT       *LengthOp,
   1120     ACPI_PARSE_OBJECT       *AlignOp,
   1121     ACPI_PARSE_OBJECT       *Op);
   1122 
   1123 void
   1124 RsLargeAddressCheck (
   1125     UINT64                  Minimum,
   1126     UINT64                  Maximum,
   1127     UINT64                  Length,
   1128     UINT64                  Granularity,
   1129     UINT8                   Flags,
   1130     ACPI_PARSE_OBJECT       *MinOp,
   1131     ACPI_PARSE_OBJECT       *MaxOp,
   1132     ACPI_PARSE_OBJECT       *LengthOp,
   1133     ACPI_PARSE_OBJECT       *GranOp,
   1134     ACPI_PARSE_OBJECT       *Op);
   1135 
   1136 UINT16
   1137 RsGetStringDataLength (
   1138     ACPI_PARSE_OBJECT       *InitializerOp);
   1139 
   1140 ASL_RESOURCE_NODE *
   1141 RsAllocateResourceNode (
   1142     UINT32                  Size);
   1143 
   1144 void
   1145 RsCreateResourceField (
   1146     ACPI_PARSE_OBJECT       *Op,
   1147     char                    *Name,
   1148     UINT32                  ByteOffset,
   1149     UINT32                  BitOffset,
   1150     UINT32                  BitLength);
   1151 
   1152 void
   1153 RsSetFlagBits (
   1154     UINT8                   *Flags,
   1155     ACPI_PARSE_OBJECT       *Op,
   1156     UINT8                   Position,
   1157     UINT8                   DefaultBit);
   1158 
   1159 void
   1160 RsSetFlagBits16 (
   1161     UINT16                  *Flags,
   1162     ACPI_PARSE_OBJECT       *Op,
   1163     UINT8                   Position,
   1164     UINT8                   DefaultBit);
   1165 
   1166 ACPI_PARSE_OBJECT *
   1167 RsCompleteNodeAndGetNext (
   1168     ACPI_PARSE_OBJECT       *Op);
   1169 
   1170 void
   1171 RsCheckListForDuplicates (
   1172     ACPI_PARSE_OBJECT       *Op);
   1173 
   1174 ASL_RESOURCE_NODE *
   1175 RsDoOneResourceDescriptor (
   1176     ASL_RESOURCE_INFO       *Info,
   1177     UINT8                   *State);
   1178 
   1179 /* Values for State above */
   1180 
   1181 #define ACPI_RSTATE_NORMAL              0
   1182 #define ACPI_RSTATE_START_DEPENDENT     1
   1183 #define ACPI_RSTATE_DEPENDENT_LIST      2
   1184 
   1185 UINT32
   1186 RsLinkDescriptorChain (
   1187     ASL_RESOURCE_NODE       **PreviousRnode,
   1188     ASL_RESOURCE_NODE       *Rnode);
   1189 
   1190 void
   1191 RsDoResourceTemplate (
   1192     ACPI_PARSE_OBJECT       *Op);
   1193 
   1194 
   1195 /*
   1196  * aslrestype1 - Miscellaneous Small descriptors
   1197  */
   1198 ASL_RESOURCE_NODE *
   1199 RsDoEndTagDescriptor (
   1200     ASL_RESOURCE_INFO       *Info);
   1201 
   1202 ASL_RESOURCE_NODE *
   1203 RsDoEndDependentDescriptor (
   1204     ASL_RESOURCE_INFO       *Info);
   1205 
   1206 ASL_RESOURCE_NODE *
   1207 RsDoMemory24Descriptor (
   1208     ASL_RESOURCE_INFO       *Info);
   1209 
   1210 ASL_RESOURCE_NODE *
   1211 RsDoMemory32Descriptor (
   1212     ASL_RESOURCE_INFO       *Info);
   1213 
   1214 ASL_RESOURCE_NODE *
   1215 RsDoMemory32FixedDescriptor (
   1216     ASL_RESOURCE_INFO       *Info);
   1217 
   1218 ASL_RESOURCE_NODE *
   1219 RsDoStartDependentDescriptor (
   1220     ASL_RESOURCE_INFO       *Info);
   1221 
   1222 ASL_RESOURCE_NODE *
   1223 RsDoStartDependentNoPriDescriptor (
   1224     ASL_RESOURCE_INFO       *Info);
   1225 
   1226 ASL_RESOURCE_NODE *
   1227 RsDoVendorSmallDescriptor (
   1228     ASL_RESOURCE_INFO       *Info);
   1229 
   1230 
   1231 /*
   1232  * aslrestype1i - I/O-related Small descriptors
   1233  */
   1234 ASL_RESOURCE_NODE *
   1235 RsDoDmaDescriptor (
   1236     ASL_RESOURCE_INFO       *Info);
   1237 
   1238 ASL_RESOURCE_NODE *
   1239 RsDoFixedDmaDescriptor (
   1240     ASL_RESOURCE_INFO       *Info);
   1241 
   1242 ASL_RESOURCE_NODE *
   1243 RsDoFixedIoDescriptor (
   1244     ASL_RESOURCE_INFO       *Info);
   1245 
   1246 ASL_RESOURCE_NODE *
   1247 RsDoIoDescriptor (
   1248     ASL_RESOURCE_INFO       *Info);
   1249 
   1250 ASL_RESOURCE_NODE *
   1251 RsDoIrqDescriptor (
   1252     ASL_RESOURCE_INFO       *Info);
   1253 
   1254 ASL_RESOURCE_NODE *
   1255 RsDoIrqNoFlagsDescriptor (
   1256     ASL_RESOURCE_INFO       *Info);
   1257 
   1258 
   1259 /*
   1260  * aslrestype2 - Large resource descriptors
   1261  */
   1262 ASL_RESOURCE_NODE *
   1263 RsDoInterruptDescriptor (
   1264     ASL_RESOURCE_INFO       *Info);
   1265 
   1266 ASL_RESOURCE_NODE *
   1267 RsDoVendorLargeDescriptor (
   1268     ASL_RESOURCE_INFO       *Info);
   1269 
   1270 ASL_RESOURCE_NODE *
   1271 RsDoGeneralRegisterDescriptor (
   1272     ASL_RESOURCE_INFO       *Info);
   1273 
   1274 ASL_RESOURCE_NODE *
   1275 RsDoGpioIntDescriptor (
   1276     ASL_RESOURCE_INFO       *Info);
   1277 
   1278 ASL_RESOURCE_NODE *
   1279 RsDoGpioIoDescriptor (
   1280     ASL_RESOURCE_INFO       *Info);
   1281 
   1282 ASL_RESOURCE_NODE *
   1283 RsDoI2cSerialBusDescriptor (
   1284     ASL_RESOURCE_INFO       *Info);
   1285 
   1286 ASL_RESOURCE_NODE *
   1287 RsDoSpiSerialBusDescriptor (
   1288     ASL_RESOURCE_INFO       *Info);
   1289 
   1290 ASL_RESOURCE_NODE *
   1291 RsDoUartSerialBusDescriptor (
   1292     ASL_RESOURCE_INFO       *Info);
   1293 
   1294 /*
   1295  * aslrestype2d - DWord address descriptors
   1296  */
   1297 ASL_RESOURCE_NODE *
   1298 RsDoDwordIoDescriptor (
   1299     ASL_RESOURCE_INFO       *Info);
   1300 
   1301 ASL_RESOURCE_NODE *
   1302 RsDoDwordMemoryDescriptor (
   1303     ASL_RESOURCE_INFO       *Info);
   1304 
   1305 ASL_RESOURCE_NODE *
   1306 RsDoDwordSpaceDescriptor (
   1307     ASL_RESOURCE_INFO       *Info);
   1308 
   1309 
   1310 /*
   1311  * aslrestype2e - Extended address descriptors
   1312  */
   1313 ASL_RESOURCE_NODE *
   1314 RsDoExtendedIoDescriptor (
   1315     ASL_RESOURCE_INFO       *Info);
   1316 
   1317 ASL_RESOURCE_NODE *
   1318 RsDoExtendedMemoryDescriptor (
   1319     ASL_RESOURCE_INFO       *Info);
   1320 
   1321 ASL_RESOURCE_NODE *
   1322 RsDoExtendedSpaceDescriptor (
   1323     ASL_RESOURCE_INFO       *Info);
   1324 
   1325 
   1326 /*
   1327  * aslrestype2q - QWord address descriptors
   1328  */
   1329 ASL_RESOURCE_NODE *
   1330 RsDoQwordIoDescriptor (
   1331     ASL_RESOURCE_INFO       *Info);
   1332 
   1333 ASL_RESOURCE_NODE *
   1334 RsDoQwordMemoryDescriptor (
   1335     ASL_RESOURCE_INFO       *Info);
   1336 
   1337 ASL_RESOURCE_NODE *
   1338 RsDoQwordSpaceDescriptor (
   1339     ASL_RESOURCE_INFO       *Info);
   1340 
   1341 
   1342 /*
   1343  * aslrestype2w - Word address descriptors
   1344  */
   1345 ASL_RESOURCE_NODE *
   1346 RsDoWordIoDescriptor (
   1347     ASL_RESOURCE_INFO       *Info);
   1348 
   1349 ASL_RESOURCE_NODE *
   1350 RsDoWordSpaceDescriptor (
   1351     ASL_RESOURCE_INFO       *Info);
   1352 
   1353 ASL_RESOURCE_NODE *
   1354 RsDoWordBusNumberDescriptor (
   1355     ASL_RESOURCE_INFO       *Info);
   1356 
   1357 
   1358 /*
   1359  * Entry to data table compiler subsystem
   1360  */
   1361 ACPI_STATUS
   1362 DtDoCompile(
   1363     void);
   1364 
   1365 ACPI_STATUS
   1366 DtCreateTemplates (
   1367     char                    **argv);
   1368 
   1369 
   1370 /*
   1371  * ASL/ASL+ converter debug
   1372  */
   1373 void
   1374 CvDbgPrint (
   1375     char                    *Fmt,
   1376     ...);
   1377 
   1378 
   1379 #endif /*  __ASLCOMPILER_H */
   1380