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