Home | History | Annotate | Line # | Download | only in compiler
aslcompiler.h revision 1.6
      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 <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 
    580 /*
    581  * aslfile
    582  */
    583 void
    584 FlOpenFile (
    585     UINT32                  FileId,
    586     char                    *Filename,
    587     char                    *Mode);
    588 
    589 
    590 /*
    591  * asllength - calculate/adjust AML package lengths
    592  */
    593 ACPI_STATUS
    594 LnPackageLengthWalk (
    595     ACPI_PARSE_OBJECT       *Op,
    596     UINT32                  Level,
    597     void                    *Context);
    598 
    599 ACPI_STATUS
    600 LnInitLengthsWalk (
    601     ACPI_PARSE_OBJECT       *Op,
    602     UINT32                  Level,
    603     void                    *Context);
    604 
    605 void
    606 CgGenerateAmlLengths (
    607     ACPI_PARSE_OBJECT       *Op);
    608 
    609 
    610 /*
    611  * aslmap - opcode mappings and reserved method names
    612  */
    613 ACPI_OBJECT_TYPE
    614 AslMapNamedOpcodeToDataType (
    615     UINT16                  Opcode);
    616 
    617 
    618 /*
    619  * aslpredef - ACPI predefined names support
    620  */
    621 BOOLEAN
    622 ApCheckForPredefinedMethod (
    623     ACPI_PARSE_OBJECT       *Op,
    624     ASL_METHOD_INFO         *MethodInfo);
    625 
    626 void
    627 ApCheckPredefinedReturnValue (
    628     ACPI_PARSE_OBJECT       *Op,
    629     ASL_METHOD_INFO         *MethodInfo);
    630 
    631 UINT32
    632 ApCheckForPredefinedName (
    633     ACPI_PARSE_OBJECT       *Op,
    634     char                    *Name);
    635 
    636 void
    637 ApCheckForPredefinedObject (
    638     ACPI_PARSE_OBJECT       *Op,
    639     char                    *Name);
    640 
    641 ACPI_STATUS
    642 ApCheckObjectType (
    643     const char              *PredefinedName,
    644     ACPI_PARSE_OBJECT       *Op,
    645     UINT32                  ExpectedBtypes,
    646     UINT32                  PackageIndex);
    647 
    648 void
    649 ApDisplayReservedNames (
    650     void);
    651 
    652 
    653 /*
    654  * aslprepkg - ACPI predefined names support for packages
    655  */
    656 void
    657 ApCheckPackage (
    658     ACPI_PARSE_OBJECT           *ParentOp,
    659     const ACPI_PREDEFINED_INFO  *Predefined);
    660 
    661 
    662 /*
    663  * asltransform - parse tree transformations
    664  */
    665 ACPI_STATUS
    666 TrAmlTransformWalkBegin (
    667     ACPI_PARSE_OBJECT       *Op,
    668     UINT32                  Level,
    669     void                    *Context);
    670 
    671 ACPI_STATUS
    672 TrAmlTransformWalkEnd (
    673     ACPI_PARSE_OBJECT       *Op,
    674     UINT32                  Level,
    675     void                    *Context);
    676 
    677 
    678 /*
    679  * asltree - parse tree support
    680  */
    681 ACPI_STATUS
    682 TrWalkParseTree (
    683     ACPI_PARSE_OBJECT       *Op,
    684     UINT32                  Visitation,
    685     ASL_WALK_CALLBACK       DescendingCallback,
    686     ASL_WALK_CALLBACK       AscendingCallback,
    687     void                    *Context);
    688 
    689 /*
    690  * aslexternal - External opcode support
    691  */
    692 ACPI_STATUS
    693 ExAmlExternalWalkBegin (
    694     ACPI_PARSE_OBJECT       *Op,
    695     UINT32                  Level,
    696     void                    *Context);
    697 
    698 ACPI_STATUS
    699 ExAmlExternalWalkEnd (
    700     ACPI_PARSE_OBJECT       *Op,
    701     UINT32                  Level,
    702     void                    *Context);
    703 
    704 void
    705 ExDoExternal (
    706     ACPI_PARSE_OBJECT       *Op);
    707 
    708 /* Values for "Visitation" parameter above */
    709 
    710 #define ASL_WALK_VISIT_DOWNWARD     0x01
    711 #define ASL_WALK_VISIT_UPWARD       0x02
    712 #define ASL_WALK_VISIT_TWICE        (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
    713 
    714 
    715 void
    716 TrSetParent (
    717     ACPI_PARSE_OBJECT       *Op,
    718     ACPI_PARSE_OBJECT       *ParentOp);
    719 
    720 ACPI_PARSE_OBJECT *
    721 TrAllocateNode (
    722     UINT32                  ParseOpcode);
    723 
    724 void
    725 TrPrintNodeCompileFlags (
    726     UINT32                  Flags);
    727 
    728 void
    729 TrReleaseNode (
    730     ACPI_PARSE_OBJECT       *Op);
    731 
    732 ACPI_PARSE_OBJECT *
    733 TrUpdateNode (
    734     UINT32                  ParseOpcode,
    735     ACPI_PARSE_OBJECT       *Op);
    736 
    737 ACPI_PARSE_OBJECT *
    738 TrCreateNode (
    739     UINT32                  ParseOpcode,
    740     UINT32                  NumChildren,
    741     ...);
    742 
    743 ACPI_PARSE_OBJECT *
    744 TrCreateLeafNode (
    745     UINT32                  ParseOpcode);
    746 
    747 ACPI_PARSE_OBJECT *
    748 TrCreateNullTarget (
    749     void);
    750 
    751 ACPI_PARSE_OBJECT *
    752 TrCreateAssignmentNode (
    753     ACPI_PARSE_OBJECT       *Target,
    754     ACPI_PARSE_OBJECT       *Source);
    755 
    756 ACPI_PARSE_OBJECT *
    757 TrCreateTargetOperand (
    758     ACPI_PARSE_OBJECT       *OriginalOp,
    759     ACPI_PARSE_OBJECT       *ParentOp);
    760 
    761 ACPI_PARSE_OBJECT *
    762 TrCreateValuedLeafNode (
    763     UINT32                  ParseOpcode,
    764     UINT64                  Value);
    765 
    766 ACPI_PARSE_OBJECT *
    767 TrCreateConstantLeafNode (
    768     UINT32                  ParseOpcode);
    769 
    770 ACPI_PARSE_OBJECT *
    771 TrLinkChildren (
    772     ACPI_PARSE_OBJECT       *Op,
    773     UINT32                  NumChildren,
    774     ...);
    775 
    776 void
    777 TrSetEndLineNumber (
    778     ACPI_PARSE_OBJECT       *Op);
    779 
    780 void
    781 TrSetCurrentFilename (
    782     ACPI_PARSE_OBJECT       *Op);
    783 
    784 void
    785 TrWalkTree (
    786     void);
    787 
    788 ACPI_PARSE_OBJECT *
    789 TrLinkPeerNode (
    790     ACPI_PARSE_OBJECT       *Op1,
    791     ACPI_PARSE_OBJECT       *Op2);
    792 
    793 ACPI_PARSE_OBJECT *
    794 TrLinkChildNode (
    795     ACPI_PARSE_OBJECT       *Op1,
    796     ACPI_PARSE_OBJECT       *Op2);
    797 
    798 ACPI_PARSE_OBJECT *
    799 TrSetNodeFlags (
    800     ACPI_PARSE_OBJECT       *Op,
    801     UINT32                  Flags);
    802 
    803 ACPI_PARSE_OBJECT *
    804 TrSetNodeAmlLength (
    805     ACPI_PARSE_OBJECT       *Op,
    806     UINT32                  Length);
    807 
    808 ACPI_PARSE_OBJECT *
    809 TrLinkPeerNodes (
    810     UINT32                  NumPeers,
    811     ...);
    812 
    813 
    814 /*
    815  * aslfiles - File I/O support
    816  */
    817 void
    818 FlAddIncludeDirectory (
    819     char                    *Dir);
    820 
    821 char *
    822 FlMergePathnames (
    823     char                    *PrefixDir,
    824     char                    *FilePathname);
    825 
    826 void
    827 FlOpenIncludeFile (
    828     ACPI_PARSE_OBJECT       *Op);
    829 
    830 void
    831 FlFileError (
    832     UINT32                  FileId,
    833     UINT8                   ErrorId);
    834 
    835 UINT32
    836 FlGetFileSize (
    837     UINT32                  FileId);
    838 
    839 ACPI_STATUS
    840 FlReadFile (
    841     UINT32                  FileId,
    842     void                    *Buffer,
    843     UINT32                  Length);
    844 
    845 void
    846 FlWriteFile (
    847     UINT32                  FileId,
    848     void                    *Buffer,
    849     UINT32                  Length);
    850 
    851 void
    852 FlSeekFile (
    853     UINT32                  FileId,
    854     long                    Offset);
    855 
    856 void
    857 FlCloseFile (
    858     UINT32                  FileId);
    859 
    860 void
    861 FlPrintFile (
    862     UINT32                  FileId,
    863     char                    *Format,
    864     ...);
    865 
    866 void
    867 FlDeleteFile (
    868     UINT32                  FileId);
    869 
    870 void
    871 FlSetLineNumber (
    872     UINT32                  LineNumber);
    873 
    874 void
    875 FlSetFilename (
    876     char                    *Filename);
    877 
    878 ACPI_STATUS
    879 FlOpenInputFile (
    880     char                    *InputFilename);
    881 
    882 ACPI_STATUS
    883 FlOpenAmlOutputFile (
    884     char                    *InputFilename);
    885 
    886 ACPI_STATUS
    887 FlOpenMiscOutputFiles (
    888     char                    *InputFilename);
    889 
    890 /*
    891  * aslhwmap - hardware map summary
    892  */
    893 void
    894 MpEmitMappingInfo (
    895     void);
    896 
    897 
    898 /*
    899  * asload - load namespace in prep for cross reference
    900  */
    901 ACPI_STATUS
    902 LdLoadNamespace (
    903     ACPI_PARSE_OBJECT       *RootOp);
    904 
    905 
    906 /*
    907  * asllookup - namespace lookup functions
    908  */
    909 void
    910 LkFindUnreferencedObjects (
    911     void);
    912 
    913 /*
    914  * aslhelp - help screens
    915  */
    916 void
    917 Usage (
    918     void);
    919 
    920 void
    921 AslFilenameHelp (
    922     void);
    923 
    924 void
    925 AslDisassemblyHelp (
    926     void);
    927 
    928 
    929 /*
    930  * aslnamesp - namespace output file generation
    931  */
    932 ACPI_STATUS
    933 NsDisplayNamespace (
    934     void);
    935 
    936 void
    937 NsSetupNamespaceListing (
    938     void                    *Handle);
    939 
    940 /*
    941  * asloptions - command line processing
    942  */
    943 int
    944 AslCommandLine (
    945     int                     argc,
    946     char                    **argv);
    947 
    948 /*
    949  * aslxref - namespace cross reference
    950  */
    951 ACPI_STATUS
    952 XfCrossReferenceNamespace (
    953     void);
    954 
    955 
    956 /*
    957  * aslxrefout
    958  */
    959 void
    960 OtPrintHeaders (
    961     char                    *Message);
    962 
    963 void
    964 OtCreateXrefFile (
    965     void);
    966 
    967 void
    968 OtXrefWalkPart1 (
    969     ACPI_PARSE_OBJECT       *Op,
    970     UINT32                  Level,
    971     ASL_METHOD_INFO         *MethodInfo);
    972 
    973 
    974 /*
    975  * aslutils - common compiler utilites
    976  */
    977 void
    978 DbgPrint (
    979     UINT32                  Type,
    980     char                    *Format,
    981     ...);
    982 
    983 /* Type values for above */
    984 
    985 #define ASL_DEBUG_OUTPUT    0
    986 #define ASL_PARSE_OUTPUT    1
    987 #define ASL_TREE_OUTPUT     2
    988 
    989 UINT8
    990 UtIsBigEndianMachine (
    991     void);
    992 
    993 BOOLEAN
    994 UtQueryForOverwrite (
    995     char                    *Pathname);
    996 
    997 void
    998 UtDumpStringOp (
    999     ACPI_PARSE_OBJECT       *Op,
   1000     UINT32                  Level);
   1001 
   1002 void
   1003 UtDumpIntegerOp (
   1004     ACPI_PARSE_OBJECT       *Op,
   1005     UINT32                  Level,
   1006     UINT32                  IntegerLength);
   1007 
   1008 void
   1009 UtDumpBasicOp (
   1010     ACPI_PARSE_OBJECT       *Op,
   1011     UINT32                  Level);
   1012 
   1013 void
   1014 UtDisplaySupportedTables (
   1015     void);
   1016 
   1017 void
   1018 UtDisplayConstantOpcodes (
   1019     void);
   1020 
   1021 UINT8
   1022 UtBeginEvent (
   1023     char                    *Name);
   1024 
   1025 void
   1026 UtEndEvent (
   1027     UINT8                   Event);
   1028 
   1029 void *
   1030 UtLocalCalloc (
   1031     UINT32                  Size);
   1032 
   1033 void
   1034 
   1035 UtDisplaySummary (
   1036     UINT32                  FileId);
   1037 
   1038 void
   1039 UtConvertByteToHex (
   1040     UINT8                   RawByte,
   1041     UINT8                   *Buffer);
   1042 
   1043 void
   1044 UtConvertByteToAsmHex (
   1045     UINT8                   RawByte,
   1046     UINT8                   *Buffer);
   1047 
   1048 char *
   1049 UtGetOpName (
   1050     UINT32                  ParseOpcode);
   1051 
   1052 void
   1053 UtSetParseOpName (
   1054     ACPI_PARSE_OBJECT       *Op);
   1055 
   1056 char *
   1057 UtStringCacheCalloc (
   1058     UINT32                  Length);
   1059 
   1060 void
   1061 UtExpandLineBuffers (
   1062     void);
   1063 
   1064 void
   1065 UtFreeLineBuffers (
   1066     void);
   1067 
   1068 ACPI_STATUS
   1069 UtInternalizeName (
   1070     char                    *ExternalName,
   1071     char                    **ConvertedName);
   1072 
   1073 void
   1074 UtAttachNamepathToOwner (
   1075     ACPI_PARSE_OBJECT       *Op,
   1076     ACPI_PARSE_OBJECT       *NameNode);
   1077 
   1078 ACPI_PARSE_OBJECT *
   1079 UtCheckIntegerRange (
   1080     ACPI_PARSE_OBJECT       *Op,
   1081     UINT32                  LowValue,
   1082     UINT32                  HighValue);
   1083 
   1084 UINT64
   1085 UtDoConstant (
   1086     char                    *String);
   1087 
   1088 
   1089 /*
   1090  * asluuid - UUID support
   1091  */
   1092 ACPI_STATUS
   1093 AuValidateUuid (
   1094     char                    *InString);
   1095 
   1096 ACPI_STATUS
   1097 AuConvertUuidToString (
   1098     char                    *UuIdBuffer,
   1099     char                    *OutString);
   1100 
   1101 /*
   1102  * aslresource - Resource template generation utilities
   1103  */
   1104 void
   1105 RsSmallAddressCheck (
   1106     UINT8                   Type,
   1107     UINT32                  Minimum,
   1108     UINT32                  Maximum,
   1109     UINT32                  Length,
   1110     UINT32                  Alignment,
   1111     ACPI_PARSE_OBJECT       *MinOp,
   1112     ACPI_PARSE_OBJECT       *MaxOp,
   1113     ACPI_PARSE_OBJECT       *LengthOp,
   1114     ACPI_PARSE_OBJECT       *AlignOp,
   1115     ACPI_PARSE_OBJECT       *Op);
   1116 
   1117 void
   1118 RsLargeAddressCheck (
   1119     UINT64                  Minimum,
   1120     UINT64                  Maximum,
   1121     UINT64                  Length,
   1122     UINT64                  Granularity,
   1123     UINT8                   Flags,
   1124     ACPI_PARSE_OBJECT       *MinOp,
   1125     ACPI_PARSE_OBJECT       *MaxOp,
   1126     ACPI_PARSE_OBJECT       *LengthOp,
   1127     ACPI_PARSE_OBJECT       *GranOp,
   1128     ACPI_PARSE_OBJECT       *Op);
   1129 
   1130 UINT16
   1131 RsGetStringDataLength (
   1132     ACPI_PARSE_OBJECT       *InitializerOp);
   1133 
   1134 ASL_RESOURCE_NODE *
   1135 RsAllocateResourceNode (
   1136     UINT32                  Size);
   1137 
   1138 void
   1139 RsCreateResourceField (
   1140     ACPI_PARSE_OBJECT       *Op,
   1141     char                    *Name,
   1142     UINT32                  ByteOffset,
   1143     UINT32                  BitOffset,
   1144     UINT32                  BitLength);
   1145 
   1146 void
   1147 RsSetFlagBits (
   1148     UINT8                   *Flags,
   1149     ACPI_PARSE_OBJECT       *Op,
   1150     UINT8                   Position,
   1151     UINT8                   DefaultBit);
   1152 
   1153 void
   1154 RsSetFlagBits16 (
   1155     UINT16                  *Flags,
   1156     ACPI_PARSE_OBJECT       *Op,
   1157     UINT8                   Position,
   1158     UINT8                   DefaultBit);
   1159 
   1160 ACPI_PARSE_OBJECT *
   1161 RsCompleteNodeAndGetNext (
   1162     ACPI_PARSE_OBJECT       *Op);
   1163 
   1164 void
   1165 RsCheckListForDuplicates (
   1166     ACPI_PARSE_OBJECT       *Op);
   1167 
   1168 ASL_RESOURCE_NODE *
   1169 RsDoOneResourceDescriptor (
   1170     ASL_RESOURCE_INFO       *Info,
   1171     UINT8                   *State);
   1172 
   1173 /* Values for State above */
   1174 
   1175 #define ACPI_RSTATE_NORMAL              0
   1176 #define ACPI_RSTATE_START_DEPENDENT     1
   1177 #define ACPI_RSTATE_DEPENDENT_LIST      2
   1178 
   1179 UINT32
   1180 RsLinkDescriptorChain (
   1181     ASL_RESOURCE_NODE       **PreviousRnode,
   1182     ASL_RESOURCE_NODE       *Rnode);
   1183 
   1184 void
   1185 RsDoResourceTemplate (
   1186     ACPI_PARSE_OBJECT       *Op);
   1187 
   1188 
   1189 /*
   1190  * aslrestype1 - Miscellaneous Small descriptors
   1191  */
   1192 ASL_RESOURCE_NODE *
   1193 RsDoEndTagDescriptor (
   1194     ASL_RESOURCE_INFO       *Info);
   1195 
   1196 ASL_RESOURCE_NODE *
   1197 RsDoEndDependentDescriptor (
   1198     ASL_RESOURCE_INFO       *Info);
   1199 
   1200 ASL_RESOURCE_NODE *
   1201 RsDoMemory24Descriptor (
   1202     ASL_RESOURCE_INFO       *Info);
   1203 
   1204 ASL_RESOURCE_NODE *
   1205 RsDoMemory32Descriptor (
   1206     ASL_RESOURCE_INFO       *Info);
   1207 
   1208 ASL_RESOURCE_NODE *
   1209 RsDoMemory32FixedDescriptor (
   1210     ASL_RESOURCE_INFO       *Info);
   1211 
   1212 ASL_RESOURCE_NODE *
   1213 RsDoStartDependentDescriptor (
   1214     ASL_RESOURCE_INFO       *Info);
   1215 
   1216 ASL_RESOURCE_NODE *
   1217 RsDoStartDependentNoPriDescriptor (
   1218     ASL_RESOURCE_INFO       *Info);
   1219 
   1220 ASL_RESOURCE_NODE *
   1221 RsDoVendorSmallDescriptor (
   1222     ASL_RESOURCE_INFO       *Info);
   1223 
   1224 
   1225 /*
   1226  * aslrestype1i - I/O-related Small descriptors
   1227  */
   1228 ASL_RESOURCE_NODE *
   1229 RsDoDmaDescriptor (
   1230     ASL_RESOURCE_INFO       *Info);
   1231 
   1232 ASL_RESOURCE_NODE *
   1233 RsDoFixedDmaDescriptor (
   1234     ASL_RESOURCE_INFO       *Info);
   1235 
   1236 ASL_RESOURCE_NODE *
   1237 RsDoFixedIoDescriptor (
   1238     ASL_RESOURCE_INFO       *Info);
   1239 
   1240 ASL_RESOURCE_NODE *
   1241 RsDoIoDescriptor (
   1242     ASL_RESOURCE_INFO       *Info);
   1243 
   1244 ASL_RESOURCE_NODE *
   1245 RsDoIrqDescriptor (
   1246     ASL_RESOURCE_INFO       *Info);
   1247 
   1248 ASL_RESOURCE_NODE *
   1249 RsDoIrqNoFlagsDescriptor (
   1250     ASL_RESOURCE_INFO       *Info);
   1251 
   1252 
   1253 /*
   1254  * aslrestype2 - Large resource descriptors
   1255  */
   1256 ASL_RESOURCE_NODE *
   1257 RsDoInterruptDescriptor (
   1258     ASL_RESOURCE_INFO       *Info);
   1259 
   1260 ASL_RESOURCE_NODE *
   1261 RsDoVendorLargeDescriptor (
   1262     ASL_RESOURCE_INFO       *Info);
   1263 
   1264 ASL_RESOURCE_NODE *
   1265 RsDoGeneralRegisterDescriptor (
   1266     ASL_RESOURCE_INFO       *Info);
   1267 
   1268 ASL_RESOURCE_NODE *
   1269 RsDoGpioIntDescriptor (
   1270     ASL_RESOURCE_INFO       *Info);
   1271 
   1272 ASL_RESOURCE_NODE *
   1273 RsDoGpioIoDescriptor (
   1274     ASL_RESOURCE_INFO       *Info);
   1275 
   1276 ASL_RESOURCE_NODE *
   1277 RsDoI2cSerialBusDescriptor (
   1278     ASL_RESOURCE_INFO       *Info);
   1279 
   1280 ASL_RESOURCE_NODE *
   1281 RsDoSpiSerialBusDescriptor (
   1282     ASL_RESOURCE_INFO       *Info);
   1283 
   1284 ASL_RESOURCE_NODE *
   1285 RsDoUartSerialBusDescriptor (
   1286     ASL_RESOURCE_INFO       *Info);
   1287 
   1288 /*
   1289  * aslrestype2d - DWord address descriptors
   1290  */
   1291 ASL_RESOURCE_NODE *
   1292 RsDoDwordIoDescriptor (
   1293     ASL_RESOURCE_INFO       *Info);
   1294 
   1295 ASL_RESOURCE_NODE *
   1296 RsDoDwordMemoryDescriptor (
   1297     ASL_RESOURCE_INFO       *Info);
   1298 
   1299 ASL_RESOURCE_NODE *
   1300 RsDoDwordSpaceDescriptor (
   1301     ASL_RESOURCE_INFO       *Info);
   1302 
   1303 
   1304 /*
   1305  * aslrestype2e - Extended address descriptors
   1306  */
   1307 ASL_RESOURCE_NODE *
   1308 RsDoExtendedIoDescriptor (
   1309     ASL_RESOURCE_INFO       *Info);
   1310 
   1311 ASL_RESOURCE_NODE *
   1312 RsDoExtendedMemoryDescriptor (
   1313     ASL_RESOURCE_INFO       *Info);
   1314 
   1315 ASL_RESOURCE_NODE *
   1316 RsDoExtendedSpaceDescriptor (
   1317     ASL_RESOURCE_INFO       *Info);
   1318 
   1319 
   1320 /*
   1321  * aslrestype2q - QWord address descriptors
   1322  */
   1323 ASL_RESOURCE_NODE *
   1324 RsDoQwordIoDescriptor (
   1325     ASL_RESOURCE_INFO       *Info);
   1326 
   1327 ASL_RESOURCE_NODE *
   1328 RsDoQwordMemoryDescriptor (
   1329     ASL_RESOURCE_INFO       *Info);
   1330 
   1331 ASL_RESOURCE_NODE *
   1332 RsDoQwordSpaceDescriptor (
   1333     ASL_RESOURCE_INFO       *Info);
   1334 
   1335 
   1336 /*
   1337  * aslrestype2w - Word address descriptors
   1338  */
   1339 ASL_RESOURCE_NODE *
   1340 RsDoWordIoDescriptor (
   1341     ASL_RESOURCE_INFO       *Info);
   1342 
   1343 ASL_RESOURCE_NODE *
   1344 RsDoWordSpaceDescriptor (
   1345     ASL_RESOURCE_INFO       *Info);
   1346 
   1347 ASL_RESOURCE_NODE *
   1348 RsDoWordBusNumberDescriptor (
   1349     ASL_RESOURCE_INFO       *Info);
   1350 
   1351 
   1352 /*
   1353  * Entry to data table compiler subsystem
   1354  */
   1355 ACPI_STATUS
   1356 DtDoCompile(
   1357     void);
   1358 
   1359 ACPI_STATUS
   1360 DtCreateTemplates (
   1361     char                    **argv);
   1362 
   1363 #endif /*  __ASLCOMPILER_H */
   1364