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