Home | History | Annotate | Line # | Download | only in compiler
aslcompiler.h revision 1.12.2.2
      1 /******************************************************************************
      2  *
      3  * Module Name: aslcompiler.h - common include file for iASL
      4  *
      5  *****************************************************************************/
      6 
      7 /*
      8  * Copyright (C) 2000 - 2020, Intel Corp.
      9  * All rights reserved.
     10  *
     11  * Redistribution and use in source and binary forms, with or without
     12  * modification, are permitted provided that the following conditions
     13  * are met:
     14  * 1. Redistributions of source code must retain the above copyright
     15  *    notice, this list of conditions, and the following disclaimer,
     16  *    without modification.
     17  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     18  *    substantially similar to the "NO WARRANTY" disclaimer below
     19  *    ("Disclaimer") and any redistribution must be conditioned upon
     20  *    including a substantially similar Disclaimer requirement for further
     21  *    binary redistribution.
     22  * 3. Neither the names of the above-listed copyright holders nor the names
     23  *    of any contributors may be used to endorse or promote products derived
     24  *    from this software without specific prior written permission.
     25  *
     26  * Alternatively, this software may be distributed under the terms of the
     27  * GNU General Public License ("GPL") version 2 as published by the Free
     28  * Software Foundation.
     29  *
     30  * NO WARRANTY
     31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     35  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     40  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     41  * POSSIBILITY OF SUCH DAMAGES.
     42  */
     43 
     44 #ifndef __ASLCOMPILER_H
     45 #define __ASLCOMPILER_H
     46 
     47 #include "acpi.h"
     48 #include "accommon.h"
     49 #include "amlresrc.h"
     50 #include "acdebug.h"
     51 
     52 /* Microsoft-specific */
     53 
     54 #if (defined WIN32 || defined WIN64)
     55 
     56 /* warn : used #pragma pack */
     57 #pragma warning(disable:4103)
     58 
     59 /* warn : named type definition in parentheses */
     60 #pragma warning(disable:4115)
     61 #endif
     62 
     63 #include <stdio.h>
     64 #include <stdlib.h>
     65 #include <string.h>
     66 #include <errno.h>
     67 #include <ctype.h>
     68 
     69 /* Compiler headers */
     70 
     71 #include "asldefine.h"
     72 #include "asltypes.h"
     73 #include "aslmessages.h"
     74 #include "aslglobal.h"
     75 #include "preprocess.h"
     76 #include "dtcompiler.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 ACPI_STATUS
    150 CmDoCompile (
    151     void);
    152 
    153 int
    154 CmDoAslMiddleAndBackEnd (
    155     void);
    156 
    157 void
    158 CmDoOutputFiles (
    159     void);
    160 
    161 void
    162 CmCleanupAndExit (
    163     void);
    164 
    165 ACPI_STATUS
    166 AslDoDisassembly (
    167     void);
    168 
    169 
    170 /*
    171  * aslallocate - memory allocation
    172  */
    173 void *
    174 UtLocalCalloc (
    175     UINT32                  Size);
    176 
    177 void
    178 UtExpandLineBuffers (
    179     void);
    180 
    181 void
    182 UtReallocLineBuffers (
    183     char                    **Buffer,
    184     UINT32                  OldSize,
    185     UINT32                  NewSize);
    186 
    187 void
    188 UtFreeLineBuffers (
    189     void);
    190 
    191 
    192 /*
    193  * aslcache - local cache support
    194  */
    195 char *
    196 UtLocalCacheCalloc (
    197     UINT32                  Length);
    198 
    199 ACPI_PARSE_OBJECT *
    200 UtParseOpCacheCalloc (
    201     void);
    202 
    203 DT_SUBTABLE *
    204 UtSubtableCacheCalloc (
    205     void);
    206 
    207 DT_FIELD *
    208 UtFieldCacheCalloc (
    209     void);
    210 
    211 void
    212 UtDeleteLocalCaches (
    213     void);
    214 
    215 
    216 /*
    217  * aslascii - ascii support
    218  */
    219 ACPI_STATUS
    220 FlIsFileAsciiSource (
    221     char                    *Filename,
    222     BOOLEAN                 DisplayErrors);
    223 
    224 
    225 /*
    226  * aslwalks - semantic analysis and parse tree walks
    227  */
    228 ACPI_STATUS
    229 AnOtherSemanticAnalysisWalkBegin (
    230     ACPI_PARSE_OBJECT       *Op,
    231     UINT32                  Level,
    232     void                    *Context);
    233 
    234 ACPI_STATUS
    235 AnOtherSemanticAnalysisWalkEnd (
    236     ACPI_PARSE_OBJECT       *Op,
    237     UINT32                  Level,
    238     void                    *Context);
    239 
    240 ACPI_STATUS
    241 AnOperandTypecheckWalkEnd (
    242     ACPI_PARSE_OBJECT       *Op,
    243     UINT32                  Level,
    244     void                    *Context);
    245 
    246 ACPI_STATUS
    247 AnMethodTypingWalkEnd (
    248     ACPI_PARSE_OBJECT       *Op,
    249     UINT32                  Level,
    250     void                    *Context);
    251 
    252 
    253 /*
    254  * aslmethod - Control method analysis walk
    255  */
    256 ACPI_STATUS
    257 MtMethodAnalysisWalkBegin (
    258     ACPI_PARSE_OBJECT       *Op,
    259     UINT32                  Level,
    260     void                    *Context);
    261 
    262 ACPI_STATUS
    263 MtMethodAnalysisWalkEnd (
    264     ACPI_PARSE_OBJECT       *Op,
    265     UINT32                  Level,
    266     void                    *Context);
    267 
    268 UINT32
    269 MtProcessTypeOp (
    270     ACPI_PARSE_OBJECT       *TypeOp);
    271 
    272 UINT8
    273 MtProcessParameterTypeList (
    274     ACPI_PARSE_OBJECT       *ParamTypeOp,
    275     UINT32                  *TypeList);
    276 
    277 
    278 /*
    279  * aslbtypes - bitfield data types
    280  */
    281 UINT32
    282 AnMapObjTypeToBtype (
    283     ACPI_PARSE_OBJECT       *Op);
    284 
    285 UINT32
    286 AnMapArgTypeToBtype (
    287     UINT32                  ArgType);
    288 
    289 UINT32
    290 AnGetBtype (
    291     ACPI_PARSE_OBJECT       *Op);
    292 
    293 void
    294 AnFormatBtype (
    295     char                    *Buffer,
    296     UINT32                  Btype);
    297 
    298 
    299 /*
    300  * aslanalyze - Support functions for parse tree walks
    301  */
    302 void
    303 AnCheckId (
    304     ACPI_PARSE_OBJECT       *Op,
    305     ACPI_NAME               Type);
    306 
    307 /* Values for Type argument above */
    308 
    309 #define ASL_TYPE_HID        0
    310 #define ASL_TYPE_CID        1
    311 
    312 BOOLEAN
    313 AnIsInternalMethod (
    314     ACPI_PARSE_OBJECT       *Op);
    315 
    316 UINT32
    317 AnGetInternalMethodReturnType (
    318     ACPI_PARSE_OBJECT       *Op);
    319 
    320 BOOLEAN
    321 AnLastStatementIsReturn (
    322     ACPI_PARSE_OBJECT       *Op);
    323 
    324 void
    325 AnCheckMethodReturnValue (
    326     ACPI_PARSE_OBJECT       *Op,
    327     const ACPI_OPCODE_INFO  *OpInfo,
    328     ACPI_PARSE_OBJECT       *ArgOp,
    329     UINT32                  RequiredBtypes,
    330     UINT32                  ThisNodeBtype);
    331 
    332 BOOLEAN
    333 AnIsResultUsed (
    334     ACPI_PARSE_OBJECT       *Op);
    335 
    336 void
    337 ApCheckForGpeNameConflict (
    338     ACPI_PARSE_OBJECT       *Op);
    339 
    340 void
    341 ApCheckRegMethod (
    342     ACPI_PARSE_OBJECT       *Op);
    343 
    344 BOOLEAN
    345 ApFindNameInScope (
    346     char                    *Name,
    347     ACPI_PARSE_OBJECT       *Op);
    348 
    349 BOOLEAN
    350 ApFindNameInDeviceTree (
    351     char                    *Name,
    352     ACPI_PARSE_OBJECT       *Op);
    353 
    354 /*
    355  * aslerror - error handling/reporting
    356  */
    357 void
    358 AslAbort (
    359     void);
    360 
    361 void
    362 AslDualParseOpError (
    363     UINT8                   Level,
    364     UINT16                  MainMessageId,
    365     ACPI_PARSE_OBJECT       *MainOp,
    366     char                    *MainMessage,
    367     UINT16                  SecondMessageId,
    368     ACPI_PARSE_OBJECT       *SecondOp,
    369     char                    *SecondaryMessage);
    370 
    371 void
    372 AslError (
    373     UINT8                   Level,
    374     UINT16                  MessageId,
    375     ACPI_PARSE_OBJECT       *Op,
    376     char                    *ExtraMessage);
    377 
    378 void
    379 AslCheckExpectedExceptions (
    380     void);
    381 
    382 ACPI_STATUS
    383 AslLogExpectedException (
    384     char                    *MessageIdString);
    385 
    386 ACPI_STATUS
    387 AslElevateException (
    388     char                    *MessageIdString);
    389 
    390 ACPI_STATUS
    391 AslDisableException (
    392     char                    *MessageIdString);
    393 
    394 BOOLEAN
    395 AslIsExceptionIgnored (
    396     char                    *Filename,
    397     UINT32                  LineNumber,
    398     UINT8                   Level,
    399     UINT16                  MessageId);
    400 
    401 void
    402 AslLogExpectedExceptionByLine (
    403     char                    *MessageIdString);
    404 
    405 void
    406 AslCoreSubsystemError (
    407     ACPI_PARSE_OBJECT       *Op,
    408     ACPI_STATUS             Status,
    409     char                    *ExtraMessage,
    410     BOOLEAN                 Abort);
    411 
    412 int
    413 AslCompilererror(
    414     const char              *s);
    415 
    416 void
    417 AslCommonError (
    418     UINT8                   Level,
    419     UINT16                  MessageId,
    420     UINT32                  CurrentLineNumber,
    421     UINT32                  LogicalLineNumber,
    422     UINT32                  LogicalByteOffset,
    423     UINT32                  Column,
    424     char                    *Filename,
    425     char                    *ExtraMessage);
    426 
    427 void
    428 AslCommonError2 (
    429     UINT8                   Level,
    430     UINT16                  MessageId,
    431     UINT32                  LineNumber,
    432     UINT32                  Column,
    433     char                    *SourceLine,
    434     char                    *Filename,
    435     char                    *ExtraMessage);
    436 
    437 void
    438 AePrintException (
    439     UINT32                  FileId,
    440     ASL_ERROR_MSG           *Enode,
    441     char                    *Header);
    442 
    443 void
    444 AePrintErrorLog (
    445     UINT32                  FileId);
    446 
    447 void
    448 AeClearErrorLog (
    449     void);
    450 
    451 
    452 /*
    453  * asllisting - generate all "listing" type files
    454  */
    455 void
    456 LsDoListings (
    457     void);
    458 
    459 void
    460 LsWriteNodeToAsmListing (
    461     ACPI_PARSE_OBJECT       *Op);
    462 
    463 void
    464 LsWriteNode (
    465     ACPI_PARSE_OBJECT       *Op,
    466     UINT32                  FileId);
    467 
    468 void
    469 LsDumpParseTree (
    470     void);
    471 
    472 
    473 /*
    474  * asllistsup - Listing file support utilities
    475  */
    476 void
    477 LsDumpAscii (
    478     UINT32                  FileId,
    479     UINT32                  Count,
    480     UINT8                   *Buffer);
    481 
    482 void
    483 LsDumpAsciiInComment (
    484     UINT32                  FileId,
    485     UINT32                  Count,
    486     UINT8                   *Buffer);
    487 
    488 void
    489 LsCheckException (
    490     UINT32                  LineNumber,
    491     UINT32                  FileId);
    492 
    493 void
    494 LsFlushListingBuffer (
    495     UINT32                  FileId);
    496 
    497 void
    498 LsWriteListingHexBytes (
    499     UINT8                   *Buffer,
    500     UINT32                  Length,
    501     UINT32                  FileId);
    502 
    503 void
    504 LsWriteSourceLines (
    505     UINT32                  ToLineNumber,
    506     UINT32                  ToLogicalLineNumber,
    507     UINT32                  FileId);
    508 
    509 UINT32
    510 LsWriteOneSourceLine (
    511     UINT32                  FileId);
    512 
    513 void
    514 LsPushNode (
    515     char                    *Filename);
    516 
    517 ASL_LISTING_NODE *
    518 LsPopNode (
    519     void);
    520 
    521 
    522 /*
    523  * aslhex - generate all "hex" output files (C, ASM, ASL)
    524  */
    525 void
    526 HxDoHexOutput (
    527     void);
    528 
    529 
    530 /*
    531  * aslfold - constant folding
    532  */
    533 ACPI_STATUS
    534 OpcAmlConstantWalk (
    535     ACPI_PARSE_OBJECT       *Op,
    536     UINT32                  Level,
    537     void                    *Context);
    538 
    539 
    540 /*
    541  * aslmessages - exception strings
    542  */
    543 const char *
    544 AeDecodeMessageId (
    545     UINT16                  MessageId);
    546 
    547 const char *
    548 AeDecodeExceptionLevel (
    549     UINT8                   Level);
    550 
    551 UINT16
    552 AeBuildFullExceptionCode (
    553     UINT8                   Level,
    554     UINT16                  MessageId);
    555 
    556 /*
    557  * asloffset - generate C offset file for BIOS support
    558  */
    559 ACPI_STATUS
    560 LsAmlOffsetWalk (
    561     ACPI_PARSE_OBJECT       *Op,
    562     UINT32                  Level,
    563     void                    *Context);
    564 
    565 void
    566 LsDoOffsetTableHeader (
    567     UINT32                  FileId);
    568 
    569 void
    570 LsDoOffsetTableFooter (
    571     UINT32                  FileId);
    572 
    573 
    574 /*
    575  * aslopcodes - generate AML opcodes
    576  */
    577 ACPI_STATUS
    578 OpcAmlOpcodeWalk (
    579     ACPI_PARSE_OBJECT       *Op,
    580     UINT32                  Level,
    581     void                    *Context);
    582 
    583 ACPI_STATUS
    584 OpcAmlOpcodeUpdateWalk (
    585     ACPI_PARSE_OBJECT       *Op,
    586     UINT32                  Level,
    587     void                    *Context);
    588 
    589 void
    590 OpcGenerateAmlOpcode (
    591     ACPI_PARSE_OBJECT       *Op);
    592 
    593 UINT32
    594 OpcSetOptimalIntegerSize (
    595     ACPI_PARSE_OBJECT       *Op);
    596 
    597 void
    598 OpcGetIntegerWidth (
    599     ACPI_PARSE_OBJECT       *Op);
    600 
    601 
    602 /*
    603  * asloperands - generate AML operands for the AML opcodes
    604  */
    605 ACPI_PARSE_OBJECT  *
    606 UtGetArg (
    607     ACPI_PARSE_OBJECT       *Op,
    608     UINT32                  Argn);
    609 
    610 void
    611 OpnGenerateAmlOperands (
    612     ACPI_PARSE_OBJECT       *Op);
    613 
    614 void
    615 OpnDoPackage (
    616     ACPI_PARSE_OBJECT       *Op);
    617 
    618 
    619 /*
    620  * aslopt - optimization
    621  */
    622 void
    623 OptOptimizeNamePath (
    624     ACPI_PARSE_OBJECT       *Op,
    625     UINT32                  Flags,
    626     ACPI_WALK_STATE         *WalkState,
    627     char                    *AmlNameString,
    628     ACPI_NAMESPACE_NODE     *TargetNode);
    629 
    630 
    631 /*
    632  * aslpld - ToPLD macro support
    633  */
    634 void
    635 OpcDoPld (
    636     ACPI_PARSE_OBJECT       *Op);
    637 
    638 
    639 /*
    640  * aslprintf - Printf/Fprintf macros
    641  */
    642 void
    643 OpcDoPrintf (
    644     ACPI_PARSE_OBJECT       *Op);
    645 
    646 void
    647 OpcDoFprintf (
    648     ACPI_PARSE_OBJECT       *Op);
    649 
    650 
    651 /*
    652  * aslprune - parse tree pruner
    653  */
    654 void
    655 AslPruneParseTree (
    656     UINT32                  PruneDepth,
    657     UINT32                  Type);
    658 
    659 
    660 /*
    661  * aslcodegen - code generation
    662  */
    663 void
    664 CgGenerateAmlOutput (
    665     void);
    666 
    667 void
    668 CgLocalWriteAmlData (
    669     ACPI_PARSE_OBJECT       *Op,
    670     void                    *Buffer,
    671     UINT32                  Length);
    672 
    673 
    674 /*
    675  * aslfile
    676  */
    677 void
    678 FlOpenFile (
    679     UINT32                  FileId,
    680     char                    *Filename,
    681     char                    *Mode);
    682 
    683 
    684 /*
    685  * asllength - calculate/adjust AML package lengths
    686  */
    687 ACPI_STATUS
    688 LnPackageLengthWalk (
    689     ACPI_PARSE_OBJECT       *Op,
    690     UINT32                  Level,
    691     void                    *Context);
    692 
    693 ACPI_STATUS
    694 LnInitLengthsWalk (
    695     ACPI_PARSE_OBJECT       *Op,
    696     UINT32                  Level,
    697     void                    *Context);
    698 
    699 void
    700 CgGenerateAmlLengths (
    701     ACPI_PARSE_OBJECT       *Op);
    702 
    703 
    704 /*
    705  * aslmap - opcode mappings and reserved method names
    706  */
    707 ACPI_OBJECT_TYPE
    708 AslMapNamedOpcodeToDataType (
    709     UINT16                  Opcode);
    710 
    711 
    712 /*
    713  * aslpredef - ACPI predefined names support
    714  */
    715 BOOLEAN
    716 ApCheckForPredefinedMethod (
    717     ACPI_PARSE_OBJECT       *Op,
    718     ASL_METHOD_INFO         *MethodInfo);
    719 
    720 void
    721 ApCheckPredefinedReturnValue (
    722     ACPI_PARSE_OBJECT       *Op,
    723     ASL_METHOD_INFO         *MethodInfo);
    724 
    725 UINT32
    726 ApCheckForPredefinedName (
    727     ACPI_PARSE_OBJECT       *Op,
    728     char                    *Name);
    729 
    730 void
    731 ApCheckForPredefinedObject (
    732     ACPI_PARSE_OBJECT       *Op,
    733     char                    *Name);
    734 
    735 ACPI_STATUS
    736 ApCheckObjectType (
    737     const char              *PredefinedName,
    738     ACPI_PARSE_OBJECT       *Op,
    739     UINT32                  ExpectedBtypes,
    740     UINT32                  PackageIndex);
    741 
    742 void
    743 ApDisplayReservedNames (
    744     void);
    745 
    746 
    747 /*
    748  * aslprepkg - ACPI predefined names support for packages
    749  */
    750 void
    751 ApCheckPackage (
    752     ACPI_PARSE_OBJECT           *ParentOp,
    753     const ACPI_PREDEFINED_INFO  *Predefined);
    754 
    755 
    756 /*
    757  * asltransform - parse tree transformations
    758  */
    759 ACPI_STATUS
    760 TrAmlTransformWalkBegin (
    761     ACPI_PARSE_OBJECT       *Op,
    762     UINT32                  Level,
    763     void                    *Context);
    764 
    765 ACPI_STATUS
    766 TrAmlTransformWalkEnd (
    767     ACPI_PARSE_OBJECT       *Op,
    768     UINT32                  Level,
    769     void                    *Context);
    770 
    771 
    772 /*
    773  * aslexternal - External opcode support
    774  */
    775 ACPI_STATUS
    776 ExAmlExternalWalkBegin (
    777     ACPI_PARSE_OBJECT       *Op,
    778     UINT32                  Level,
    779     void                    *Context);
    780 
    781 ACPI_STATUS
    782 ExAmlExternalWalkEnd (
    783     ACPI_PARSE_OBJECT       *Op,
    784     UINT32                  Level,
    785     void                    *Context);
    786 
    787 void
    788 ExDoExternal (
    789     ACPI_PARSE_OBJECT       *Op);
    790 
    791 /* Values for "Visitation" parameter above */
    792 
    793 #define ASL_WALK_VISIT_DOWNWARD         0x01
    794 #define ASL_WALK_VISIT_UPWARD           0x02
    795 #define ASL_WALK_VISIT_DB_SEPARATELY    0x04
    796 #define ASL_WALK_VISIT_TWICE            (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
    797 
    798 
    799 /*
    800  * aslparseop.c - Parse op create/allocate/cache
    801  */
    802 ACPI_PARSE_OBJECT *
    803 TrCreateOp (
    804     UINT32                  ParseOpcode,
    805     UINT32                  NumChildren,
    806     ...);
    807 
    808 ACPI_PARSE_OBJECT *
    809 TrCreateLeafOp (
    810     UINT32                  ParseOpcode);
    811 
    812 ACPI_PARSE_OBJECT *
    813 TrCreateNullTargetOp (
    814     void);
    815 
    816 ACPI_PARSE_OBJECT *
    817 TrCreateAssignmentOp (
    818     ACPI_PARSE_OBJECT       *Target,
    819     ACPI_PARSE_OBJECT       *Source);
    820 
    821 ACPI_PARSE_OBJECT *
    822 TrCreateTargetOp (
    823     ACPI_PARSE_OBJECT       *OriginalOp,
    824     ACPI_PARSE_OBJECT       *ParentOp);
    825 
    826 ACPI_PARSE_OBJECT *
    827 TrCreateValuedLeafOp (
    828     UINT32                  ParseOpcode,
    829     UINT64                  Value);
    830 
    831 ACPI_PARSE_OBJECT *
    832 TrCreateConstantLeafOp (
    833     UINT32                  ParseOpcode);
    834 
    835 ACPI_PARSE_OBJECT *
    836 TrAllocateOp (
    837     UINT32                  ParseOpcode);
    838 
    839 void
    840 TrPrintOpFlags (
    841     UINT32                  Flags,
    842     UINT32                  OutputLevel);
    843 
    844 
    845 /*
    846  * asltree.c - Parse tree management
    847  */
    848 void
    849 TrSetOpParent (
    850     ACPI_PARSE_OBJECT       *Op,
    851     ACPI_PARSE_OBJECT       *ParentOp);
    852 
    853 ACPI_PARSE_OBJECT *
    854 TrSetOpIntegerValue (
    855     UINT32                  ParseOpcode,
    856     ACPI_PARSE_OBJECT       *Op);
    857 
    858 void
    859 TrSetOpEndLineNumber (
    860     ACPI_PARSE_OBJECT       *Op);
    861 
    862 void
    863 TrSetOpCurrentFilename (
    864     ACPI_PARSE_OBJECT       *Op);
    865 
    866 void
    867 TrSetOpIntegerWidth (
    868     ACPI_PARSE_OBJECT       *TableSignature,
    869     ACPI_PARSE_OBJECT       *Revision);
    870 
    871 ACPI_PARSE_OBJECT *
    872 TrLinkOpChildren (
    873     ACPI_PARSE_OBJECT       *Op,
    874     UINT32                  NumChildren,
    875     ...);
    876 
    877 ACPI_PARSE_OBJECT *
    878 TrLinkPeerOp (
    879     ACPI_PARSE_OBJECT       *Op1,
    880     ACPI_PARSE_OBJECT       *Op2);
    881 
    882 ACPI_PARSE_OBJECT *
    883 TrLinkChildOp (
    884     ACPI_PARSE_OBJECT       *Op1,
    885     ACPI_PARSE_OBJECT       *Op2);
    886 
    887 ACPI_PARSE_OBJECT *
    888 TrSetOpFlags (
    889     ACPI_PARSE_OBJECT       *Op,
    890     UINT32                  Flags);
    891 
    892 ACPI_PARSE_OBJECT *
    893 TrSetOpAmlLength (
    894     ACPI_PARSE_OBJECT       *Op,
    895     UINT32                  Length);
    896 
    897 ACPI_PARSE_OBJECT *
    898 TrLinkPeerOps (
    899     UINT32                  NumPeers,
    900     ...);
    901 
    902 ACPI_STATUS
    903 TrWalkParseTree (
    904     ACPI_PARSE_OBJECT       *Op,
    905     UINT32                  Visitation,
    906     ASL_WALK_CALLBACK       DescendingCallback,
    907     ASL_WALK_CALLBACK       AscendingCallback,
    908     void                    *Context);
    909 
    910 
    911 /*
    912  * aslfiles - File I/O support
    913  */
    914 void
    915 FlAddIncludeDirectory (
    916     char                    *Dir);
    917 
    918 char *
    919 FlMergePathnames (
    920     char                    *PrefixDir,
    921     char                    *FilePathname);
    922 
    923 void
    924 FlOpenIncludeFile (
    925     ACPI_PARSE_OBJECT       *Op);
    926 
    927 void
    928 FlFileError (
    929     UINT32                  FileId,
    930     UINT8                   ErrorId);
    931 
    932 UINT32
    933 FlGetFileSize (
    934     UINT32                  FileId);
    935 
    936 ACPI_STATUS
    937 FlReadFile (
    938     UINT32                  FileId,
    939     void                    *Buffer,
    940     UINT32                  Length);
    941 
    942 void
    943 FlWriteFile (
    944     UINT32                  FileId,
    945     void                    *Buffer,
    946     UINT32                  Length);
    947 
    948 void
    949 FlSeekFile (
    950     UINT32                  FileId,
    951     long                    Offset);
    952 
    953 void
    954 FlSeekFileSet (
    955     UINT32                  FileId,
    956     long                    Offset);
    957 
    958 void
    959 FlCloseFile (
    960     UINT32                  FileId);
    961 
    962 void
    963 FlPrintFile (
    964     UINT32                  FileId,
    965     char                    *Format,
    966     ...);
    967 
    968 void
    969 FlDeleteFile (
    970     UINT32                  FileId);
    971 
    972 void
    973 FlSetLineNumber (
    974     UINT32                  LineNumber);
    975 
    976 void
    977 FlSetFilename (
    978     char                    *Filename);
    979 
    980 ACPI_STATUS
    981 FlOpenInputFile (
    982     char                    *InputFilename);
    983 
    984 ACPI_STATUS
    985 FlOpenAmlOutputFile (
    986     char                    *InputFilename);
    987 
    988 ACPI_STATUS
    989 FlOpenMiscOutputFiles (
    990     char                    *InputFilename);
    991 
    992 ACPI_STATUS
    993 FlInitOneFile (
    994     char                    *InputFilename);
    995 
    996 ASL_FILE_SWITCH_STATUS
    997 FlSwitchFileSet (
    998     char                    *InputFilename);
    999 
   1000 FILE *
   1001 FlGetFileHandle (
   1002     UINT32                  OutFileId,
   1003     UINT32                  InFileId,
   1004     char                    *Filename);
   1005 
   1006 ASL_GLOBAL_FILE_NODE *
   1007 FlGetFileNode (
   1008     UINT32                  FileId,
   1009     char                    *Filename);
   1010 
   1011 ASL_GLOBAL_FILE_NODE *
   1012 FlGetCurrentFileNode (
   1013     void);
   1014 
   1015 BOOLEAN
   1016 FlInputFileExists (
   1017     char                    *InputFilename);
   1018 
   1019 
   1020 /*
   1021  * aslhwmap - hardware map summary
   1022  */
   1023 void
   1024 MpEmitMappingInfo (
   1025     void);
   1026 
   1027 
   1028 /*
   1029  * asload - load namespace in prep for cross reference
   1030  */
   1031 ACPI_STATUS
   1032 LdLoadNamespace (
   1033     ACPI_PARSE_OBJECT       *RootOp);
   1034 
   1035 /*
   1036  * asllookup - namespace lookup functions
   1037  */
   1038 void
   1039 LkFindUnreferencedObjects (
   1040     void);
   1041 
   1042 
   1043 /*
   1044  * aslhelp - help screens
   1045  */
   1046 void
   1047 Usage (
   1048     void);
   1049 
   1050 void
   1051 AslFilenameHelp (
   1052     void);
   1053 
   1054 void
   1055 AslDisassemblyHelp (
   1056     void);
   1057 
   1058 
   1059 /*
   1060  * aslnamesp - namespace output file generation
   1061  */
   1062 ACPI_STATUS
   1063 NsDisplayNamespace (
   1064     void);
   1065 
   1066 void
   1067 NsSetupNamespaceListing (
   1068     void                    *Handle);
   1069 
   1070 
   1071 /*
   1072  * asloptions - command line processing
   1073  */
   1074 int
   1075 AslCommandLine (
   1076     int                     argc,
   1077     char                    **argv);
   1078 
   1079 
   1080 /*
   1081  * aslxref - namespace cross reference
   1082  */
   1083 ACPI_STATUS
   1084 XfCrossReferenceNamespace (
   1085     void);
   1086 
   1087 
   1088 /*
   1089  * aslxrefout
   1090  */
   1091 void
   1092 OtPrintHeaders (
   1093     char                    *Message);
   1094 
   1095 void
   1096 OtCreateXrefFile (
   1097     void);
   1098 
   1099 void
   1100 OtXrefWalkPart1 (
   1101     ACPI_PARSE_OBJECT       *Op,
   1102     UINT32                  Level,
   1103     ASL_METHOD_INFO         *MethodInfo);
   1104 
   1105 
   1106 /*
   1107  * aslutils - common compiler utilities
   1108  */
   1109 void
   1110 DbgPrint (
   1111     UINT32                  Type,
   1112     char                    *Format,
   1113     ...);
   1114 
   1115 /* Type values for above */
   1116 
   1117 #define ASL_DEBUG_OUTPUT    0
   1118 #define ASL_PARSE_OUTPUT    1
   1119 #define ASL_TREE_OUTPUT     2
   1120 
   1121 UINT8
   1122 UtIsBigEndianMachine (
   1123     void);
   1124 
   1125 BOOLEAN
   1126 UtQueryForOverwrite (
   1127     char                    *Pathname);
   1128 
   1129 void
   1130 UtDumpStringOp (
   1131     ACPI_PARSE_OBJECT       *Op,
   1132     UINT32                  Level);
   1133 
   1134 void
   1135 UtDumpIntegerOp (
   1136     ACPI_PARSE_OBJECT       *Op,
   1137     UINT32                  Level,
   1138     UINT32                  IntegerLength);
   1139 
   1140 void
   1141 UtDumpBasicOp (
   1142     ACPI_PARSE_OBJECT       *Op,
   1143     UINT32                  Level);
   1144 
   1145 ACPI_NAMESPACE_NODE *
   1146 UtGetParentMethodNode (
   1147     ACPI_NAMESPACE_NODE     *Node);
   1148 
   1149 ACPI_PARSE_OBJECT *
   1150 UtGetParentMethodOp (
   1151     ACPI_PARSE_OBJECT       *Op);
   1152 
   1153 BOOLEAN
   1154 UtNodeIsDescendantOf (
   1155     ACPI_NAMESPACE_NODE     *Node1,
   1156     ACPI_NAMESPACE_NODE     *Node2);
   1157 
   1158 void
   1159 UtDisplaySupportedTables (
   1160     void);
   1161 
   1162 void
   1163 UtDisplayConstantOpcodes (
   1164     void);
   1165 
   1166 UINT8
   1167 UtBeginEvent (
   1168     char                    *Name);
   1169 
   1170 void
   1171 UtEndEvent (
   1172     UINT8                   Event);
   1173 
   1174 void
   1175 
   1176 UtDisplaySummary (
   1177     UINT32                  FileId);
   1178 
   1179 void
   1180 UtDisplayOneSummary (
   1181     UINT32                  FileId,
   1182     BOOLEAN                 DisplayErrorSummary);
   1183 
   1184 void
   1185 UtConvertByteToHex (
   1186     UINT8                   RawByte,
   1187     UINT8                   *Buffer);
   1188 
   1189 void
   1190 UtConvertByteToAsmHex (
   1191     UINT8                   RawByte,
   1192     UINT8                   *Buffer);
   1193 
   1194 char *
   1195 UtGetOpName (
   1196     UINT32                  ParseOpcode);
   1197 
   1198 void
   1199 UtSetParseOpName (
   1200     ACPI_PARSE_OBJECT       *Op);
   1201 
   1202 ACPI_STATUS
   1203 UtInternalizeName (
   1204     char                    *ExternalName,
   1205     char                    **ConvertedName);
   1206 
   1207 void
   1208 UtAttachNamepathToOwner (
   1209     ACPI_PARSE_OBJECT       *Op,
   1210     ACPI_PARSE_OBJECT       *NameNode);
   1211 
   1212 ACPI_PARSE_OBJECT *
   1213 UtCheckIntegerRange (
   1214     ACPI_PARSE_OBJECT       *Op,
   1215     UINT32                  LowValue,
   1216     UINT32                  HighValue);
   1217 
   1218 UINT64
   1219 UtDoConstant (
   1220     char                    *String);
   1221 
   1222 
   1223 /*
   1224  * asluuid - UUID support
   1225  */
   1226 ACPI_STATUS
   1227 AuValidateUuid (
   1228     char                    *InString);
   1229 
   1230 ACPI_STATUS
   1231 AuConvertUuidToString (
   1232     char                    *UuIdBuffer,
   1233     char                    *OutString);
   1234 
   1235 
   1236 /*
   1237  * aslresource - Resource template generation utilities
   1238  */
   1239 void
   1240 RsSmallAddressCheck (
   1241     UINT8                   Type,
   1242     UINT32                  Minimum,
   1243     UINT32                  Maximum,
   1244     UINT32                  Length,
   1245     UINT32                  Alignment,
   1246     ACPI_PARSE_OBJECT       *MinOp,
   1247     ACPI_PARSE_OBJECT       *MaxOp,
   1248     ACPI_PARSE_OBJECT       *LengthOp,
   1249     ACPI_PARSE_OBJECT       *AlignOp,
   1250     ACPI_PARSE_OBJECT       *Op);
   1251 
   1252 void
   1253 RsLargeAddressCheck (
   1254     UINT64                  Minimum,
   1255     UINT64                  Maximum,
   1256     UINT64                  Length,
   1257     UINT64                  Granularity,
   1258     UINT8                   Flags,
   1259     ACPI_PARSE_OBJECT       *MinOp,
   1260     ACPI_PARSE_OBJECT       *MaxOp,
   1261     ACPI_PARSE_OBJECT       *LengthOp,
   1262     ACPI_PARSE_OBJECT       *GranOp,
   1263     ACPI_PARSE_OBJECT       *Op);
   1264 
   1265 UINT16
   1266 RsGetStringDataLength (
   1267     ACPI_PARSE_OBJECT       *InitializerOp);
   1268 
   1269 ASL_RESOURCE_NODE *
   1270 RsAllocateResourceNode (
   1271     UINT32                  Size);
   1272 
   1273 void
   1274 RsCreateResourceField (
   1275     ACPI_PARSE_OBJECT       *Op,
   1276     char                    *Name,
   1277     UINT32                  ByteOffset,
   1278     UINT32                  BitOffset,
   1279     UINT32                  BitLength);
   1280 
   1281 void
   1282 RsSetFlagBits (
   1283     UINT8                   *Flags,
   1284     ACPI_PARSE_OBJECT       *Op,
   1285     UINT8                   Position,
   1286     UINT8                   DefaultBit);
   1287 
   1288 void
   1289 RsSetFlagBits16 (
   1290     UINT16                  *Flags,
   1291     ACPI_PARSE_OBJECT       *Op,
   1292     UINT8                   Position,
   1293     UINT8                   DefaultBit);
   1294 
   1295 ACPI_PARSE_OBJECT *
   1296 RsCompleteNodeAndGetNext (
   1297     ACPI_PARSE_OBJECT       *Op);
   1298 
   1299 void
   1300 RsCheckListForDuplicates (
   1301     ACPI_PARSE_OBJECT       *Op);
   1302 
   1303 ASL_RESOURCE_NODE *
   1304 RsDoOneResourceDescriptor (
   1305     ASL_RESOURCE_INFO       *Info,
   1306     UINT8                   *State);
   1307 
   1308 /* Values for State above */
   1309 
   1310 #define ACPI_RSTATE_NORMAL              0
   1311 #define ACPI_RSTATE_START_DEPENDENT     1
   1312 #define ACPI_RSTATE_DEPENDENT_LIST      2
   1313 
   1314 UINT32
   1315 RsLinkDescriptorChain (
   1316     ASL_RESOURCE_NODE       **PreviousRnode,
   1317     ASL_RESOURCE_NODE       *Rnode);
   1318 
   1319 void
   1320 RsDoResourceTemplate (
   1321     ACPI_PARSE_OBJECT       *Op);
   1322 
   1323 
   1324 /*
   1325  * aslrestype1 - Miscellaneous Small descriptors
   1326  */
   1327 ASL_RESOURCE_NODE *
   1328 RsDoEndTagDescriptor (
   1329     ASL_RESOURCE_INFO       *Info);
   1330 
   1331 ASL_RESOURCE_NODE *
   1332 RsDoEndDependentDescriptor (
   1333     ASL_RESOURCE_INFO       *Info);
   1334 
   1335 ASL_RESOURCE_NODE *
   1336 RsDoMemory24Descriptor (
   1337     ASL_RESOURCE_INFO       *Info);
   1338 
   1339 ASL_RESOURCE_NODE *
   1340 RsDoMemory32Descriptor (
   1341     ASL_RESOURCE_INFO       *Info);
   1342 
   1343 ASL_RESOURCE_NODE *
   1344 RsDoMemory32FixedDescriptor (
   1345     ASL_RESOURCE_INFO       *Info);
   1346 
   1347 ASL_RESOURCE_NODE *
   1348 RsDoStartDependentDescriptor (
   1349     ASL_RESOURCE_INFO       *Info);
   1350 
   1351 ASL_RESOURCE_NODE *
   1352 RsDoStartDependentNoPriDescriptor (
   1353     ASL_RESOURCE_INFO       *Info);
   1354 
   1355 ASL_RESOURCE_NODE *
   1356 RsDoVendorSmallDescriptor (
   1357     ASL_RESOURCE_INFO       *Info);
   1358 
   1359 
   1360 /*
   1361  * aslrestype1i - I/O-related Small descriptors
   1362  */
   1363 ASL_RESOURCE_NODE *
   1364 RsDoDmaDescriptor (
   1365     ASL_RESOURCE_INFO       *Info);
   1366 
   1367 ASL_RESOURCE_NODE *
   1368 RsDoFixedDmaDescriptor (
   1369     ASL_RESOURCE_INFO       *Info);
   1370 
   1371 ASL_RESOURCE_NODE *
   1372 RsDoFixedIoDescriptor (
   1373     ASL_RESOURCE_INFO       *Info);
   1374 
   1375 ASL_RESOURCE_NODE *
   1376 RsDoIoDescriptor (
   1377     ASL_RESOURCE_INFO       *Info);
   1378 
   1379 ASL_RESOURCE_NODE *
   1380 RsDoIrqDescriptor (
   1381     ASL_RESOURCE_INFO       *Info);
   1382 
   1383 ASL_RESOURCE_NODE *
   1384 RsDoIrqNoFlagsDescriptor (
   1385     ASL_RESOURCE_INFO       *Info);
   1386 
   1387 
   1388 /*
   1389  * aslrestype2 - Large resource descriptors
   1390  */
   1391 ASL_RESOURCE_NODE *
   1392 RsDoInterruptDescriptor (
   1393     ASL_RESOURCE_INFO       *Info);
   1394 
   1395 ASL_RESOURCE_NODE *
   1396 RsDoVendorLargeDescriptor (
   1397     ASL_RESOURCE_INFO       *Info);
   1398 
   1399 ASL_RESOURCE_NODE *
   1400 RsDoGeneralRegisterDescriptor (
   1401     ASL_RESOURCE_INFO       *Info);
   1402 
   1403 ASL_RESOURCE_NODE *
   1404 RsDoGpioIntDescriptor (
   1405     ASL_RESOURCE_INFO       *Info);
   1406 
   1407 ASL_RESOURCE_NODE *
   1408 RsDoGpioIoDescriptor (
   1409     ASL_RESOURCE_INFO       *Info);
   1410 
   1411 ASL_RESOURCE_NODE *
   1412 RsDoI2cSerialBusDescriptor (
   1413     ASL_RESOURCE_INFO       *Info);
   1414 
   1415 ASL_RESOURCE_NODE *
   1416 RsDoSpiSerialBusDescriptor (
   1417     ASL_RESOURCE_INFO       *Info);
   1418 
   1419 ASL_RESOURCE_NODE *
   1420 RsDoUartSerialBusDescriptor (
   1421     ASL_RESOURCE_INFO       *Info);
   1422 
   1423 ASL_RESOURCE_NODE *
   1424 RsDoPinFunctionDescriptor (
   1425     ASL_RESOURCE_INFO       *Info);
   1426 
   1427 ASL_RESOURCE_NODE *
   1428 RsDoPinConfigDescriptor (
   1429     ASL_RESOURCE_INFO       *Info);
   1430 
   1431 ASL_RESOURCE_NODE *
   1432 RsDoPinGroupDescriptor (
   1433     ASL_RESOURCE_INFO       *Info);
   1434 
   1435 ASL_RESOURCE_NODE *
   1436 RsDoPinGroupFunctionDescriptor (
   1437     ASL_RESOURCE_INFO       *Info);
   1438 
   1439 ASL_RESOURCE_NODE *
   1440 RsDoPinGroupConfigDescriptor (
   1441     ASL_RESOURCE_INFO       *Info);
   1442 
   1443 
   1444 /*
   1445  * aslrestype2d - DWord address descriptors
   1446  */
   1447 ASL_RESOURCE_NODE *
   1448 RsDoDwordIoDescriptor (
   1449     ASL_RESOURCE_INFO       *Info);
   1450 
   1451 ASL_RESOURCE_NODE *
   1452 RsDoDwordMemoryDescriptor (
   1453     ASL_RESOURCE_INFO       *Info);
   1454 
   1455 ASL_RESOURCE_NODE *
   1456 RsDoDwordSpaceDescriptor (
   1457     ASL_RESOURCE_INFO       *Info);
   1458 
   1459 
   1460 /*
   1461  * aslrestype2e - Extended address descriptors
   1462  */
   1463 ASL_RESOURCE_NODE *
   1464 RsDoExtendedIoDescriptor (
   1465     ASL_RESOURCE_INFO       *Info);
   1466 
   1467 ASL_RESOURCE_NODE *
   1468 RsDoExtendedMemoryDescriptor (
   1469     ASL_RESOURCE_INFO       *Info);
   1470 
   1471 ASL_RESOURCE_NODE *
   1472 RsDoExtendedSpaceDescriptor (
   1473     ASL_RESOURCE_INFO       *Info);
   1474 
   1475 
   1476 /*
   1477  * aslrestype2q - QWord address descriptors
   1478  */
   1479 ASL_RESOURCE_NODE *
   1480 RsDoQwordIoDescriptor (
   1481     ASL_RESOURCE_INFO       *Info);
   1482 
   1483 ASL_RESOURCE_NODE *
   1484 RsDoQwordMemoryDescriptor (
   1485     ASL_RESOURCE_INFO       *Info);
   1486 
   1487 ASL_RESOURCE_NODE *
   1488 RsDoQwordSpaceDescriptor (
   1489     ASL_RESOURCE_INFO       *Info);
   1490 
   1491 
   1492 /*
   1493  * aslrestype2w - Word address descriptors
   1494  */
   1495 ASL_RESOURCE_NODE *
   1496 RsDoWordIoDescriptor (
   1497     ASL_RESOURCE_INFO       *Info);
   1498 
   1499 ASL_RESOURCE_NODE *
   1500 RsDoWordSpaceDescriptor (
   1501     ASL_RESOURCE_INFO       *Info);
   1502 
   1503 ASL_RESOURCE_NODE *
   1504 RsDoWordBusNumberDescriptor (
   1505     ASL_RESOURCE_INFO       *Info);
   1506 
   1507 
   1508 /*
   1509  * Entry to data table compiler subsystem
   1510  */
   1511 ACPI_STATUS
   1512 DtDoCompile(
   1513     void);
   1514 
   1515 ACPI_STATUS
   1516 DtCreateTemplates (
   1517     char                    **argv);
   1518 
   1519 
   1520 /*
   1521  * ASL/ASL+ converter debug
   1522  */
   1523 void
   1524 CvDbgPrint (
   1525     char                    *Fmt,
   1526     ...);
   1527 
   1528 
   1529 #endif /*  __ASLCOMPILER_H */
   1530