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