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