Home | History | Annotate | Line # | Download | only in compiler
aslcompiler.h revision 1.12.2.3
      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 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 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 ACPI_PRINTF_LIKE (2)
    963 void
    964 FlPrintFile (
    965     UINT32                  FileId,
    966     char                    *Format,
    967     ...);
    968 
    969 void
    970 FlDeleteFile (
    971     UINT32                  FileId);
    972 
    973 void
    974 FlSetLineNumber (
    975     UINT32                  LineNumber);
    976 
    977 void
    978 FlSetFilename (
    979     char                    *Filename);
    980 
    981 ACPI_STATUS
    982 FlOpenInputFile (
    983     char                    *InputFilename);
    984 
    985 ACPI_STATUS
    986 FlOpenAmlOutputFile (
    987     char                    *InputFilename);
    988 
    989 ACPI_STATUS
    990 FlOpenMiscOutputFiles (
    991     char                    *InputFilename);
    992 
    993 ACPI_STATUS
    994 FlInitOneFile (
    995     char                    *InputFilename);
    996 
    997 ASL_FILE_SWITCH_STATUS
    998 FlSwitchFileSet (
    999     char                    *InputFilename);
   1000 
   1001 FILE *
   1002 FlGetFileHandle (
   1003     UINT32                  OutFileId,
   1004     UINT32                  InFileId,
   1005     char                    *Filename);
   1006 
   1007 ASL_GLOBAL_FILE_NODE *
   1008 FlGetFileNode (
   1009     UINT32                  FileId,
   1010     char                    *Filename);
   1011 
   1012 ASL_GLOBAL_FILE_NODE *
   1013 FlGetCurrentFileNode (
   1014     void);
   1015 
   1016 
   1017 /*
   1018  * aslhwmap - hardware map summary
   1019  */
   1020 void
   1021 MpEmitMappingInfo (
   1022     void);
   1023 
   1024 
   1025 /*
   1026  * asload - load namespace in prep for cross reference
   1027  */
   1028 ACPI_STATUS
   1029 LdLoadNamespace (
   1030     ACPI_PARSE_OBJECT       *RootOp);
   1031 
   1032 /*
   1033  * asllookup - namespace lookup functions
   1034  */
   1035 void
   1036 LkFindUnreferencedObjects (
   1037     void);
   1038 
   1039 
   1040 /*
   1041  * aslhelp - help screens
   1042  */
   1043 void
   1044 Usage (
   1045     void);
   1046 
   1047 void
   1048 AslFilenameHelp (
   1049     void);
   1050 
   1051 void
   1052 AslDisassemblyHelp (
   1053     void);
   1054 
   1055 
   1056 /*
   1057  * aslnamesp - namespace output file generation
   1058  */
   1059 ACPI_STATUS
   1060 NsDisplayNamespace (
   1061     void);
   1062 
   1063 void
   1064 NsSetupNamespaceListing (
   1065     void                    *Handle);
   1066 
   1067 
   1068 /*
   1069  * asloptions - command line processing
   1070  */
   1071 int
   1072 AslCommandLine (
   1073     int                     argc,
   1074     char                    **argv);
   1075 
   1076 
   1077 /*
   1078  * aslxref - namespace cross reference
   1079  */
   1080 ACPI_STATUS
   1081 XfCrossReferenceNamespace (
   1082     void);
   1083 
   1084 
   1085 /*
   1086  * aslxrefout
   1087  */
   1088 void
   1089 OtPrintHeaders (
   1090     char                    *Message);
   1091 
   1092 void
   1093 OtCreateXrefFile (
   1094     void);
   1095 
   1096 void
   1097 OtXrefWalkPart1 (
   1098     ACPI_PARSE_OBJECT       *Op,
   1099     UINT32                  Level,
   1100     ASL_METHOD_INFO         *MethodInfo);
   1101 
   1102 
   1103 /*
   1104  * aslutils - common compiler utilities
   1105  */
   1106 ACPI_PRINTF_LIKE(2)
   1107 void
   1108 DbgPrint (
   1109     UINT32                  Type,
   1110     char                    *Format,
   1111     ...);
   1112 
   1113 /* Type values for above */
   1114 
   1115 #define ASL_DEBUG_OUTPUT    0
   1116 #define ASL_PARSE_OUTPUT    1
   1117 #define ASL_TREE_OUTPUT     2
   1118 
   1119 UINT8
   1120 UtIsBigEndianMachine (
   1121     void);
   1122 
   1123 BOOLEAN
   1124 UtQueryForOverwrite (
   1125     char                    *Pathname);
   1126 
   1127 void
   1128 UtDumpStringOp (
   1129     ACPI_PARSE_OBJECT       *Op,
   1130     UINT32                  Level);
   1131 
   1132 void
   1133 UtDumpIntegerOp (
   1134     ACPI_PARSE_OBJECT       *Op,
   1135     UINT32                  Level,
   1136     UINT32                  IntegerLength);
   1137 
   1138 void
   1139 UtDumpBasicOp (
   1140     ACPI_PARSE_OBJECT       *Op,
   1141     UINT32                  Level);
   1142 
   1143 ACPI_NAMESPACE_NODE *
   1144 UtGetParentMethodNode (
   1145     ACPI_NAMESPACE_NODE     *Node);
   1146 
   1147 ACPI_PARSE_OBJECT *
   1148 UtGetParentMethodOp (
   1149     ACPI_PARSE_OBJECT       *Op);
   1150 
   1151 BOOLEAN
   1152 UtNodeIsDescendantOf (
   1153     ACPI_NAMESPACE_NODE     *Node1,
   1154     ACPI_NAMESPACE_NODE     *Node2);
   1155 
   1156 void
   1157 UtDisplaySupportedTables (
   1158     void);
   1159 
   1160 void
   1161 UtDisplayConstantOpcodes (
   1162     void);
   1163 
   1164 UINT8
   1165 UtBeginEvent (
   1166     char                    *Name);
   1167 
   1168 void
   1169 UtEndEvent (
   1170     UINT8                   Event);
   1171 
   1172 void
   1173 
   1174 UtDisplaySummary (
   1175     UINT32                  FileId);
   1176 
   1177 void
   1178 UtDisplayOneSummary (
   1179     UINT32                  FileId,
   1180     BOOLEAN                 DisplayErrorSummary);
   1181 
   1182 void
   1183 UtConvertByteToHex (
   1184     UINT8                   RawByte,
   1185     UINT8                   *Buffer);
   1186 
   1187 void
   1188 UtConvertByteToAsmHex (
   1189     UINT8                   RawByte,
   1190     UINT8                   *Buffer);
   1191 
   1192 char *
   1193 UtGetOpName (
   1194     UINT32                  ParseOpcode);
   1195 
   1196 void
   1197 UtSetParseOpName (
   1198     ACPI_PARSE_OBJECT       *Op);
   1199 
   1200 ACPI_STATUS
   1201 UtInternalizeName (
   1202     char                    *ExternalName,
   1203     char                    **ConvertedName);
   1204 
   1205 BOOLEAN
   1206 UtNameContainsAllPrefix (
   1207     ACPI_PARSE_OBJECT       *Op);
   1208 
   1209 void
   1210 UtAttachNamepathToOwner (
   1211     ACPI_PARSE_OBJECT       *Op,
   1212     ACPI_PARSE_OBJECT       *NameNode);
   1213 
   1214 ACPI_PARSE_OBJECT *
   1215 UtCheckIntegerRange (
   1216     ACPI_PARSE_OBJECT       *Op,
   1217     UINT32                  LowValue,
   1218     UINT32                  HighValue);
   1219 
   1220 UINT64
   1221 UtDoConstant (
   1222     char                    *String);
   1223 
   1224 char *
   1225 AcpiUtStrdup (
   1226     char                    *String);
   1227 
   1228 char *
   1229 AcpiUtStrcat (
   1230     char                    *String1,
   1231     char                    *String2);
   1232 
   1233 
   1234 /*
   1235  * asluuid - UUID support
   1236  */
   1237 ACPI_STATUS
   1238 AuValidateUuid (
   1239     char                    *InString);
   1240 
   1241 ACPI_STATUS
   1242 AuConvertUuidToString (
   1243     char                    *UuIdBuffer,
   1244     char                    *OutString);
   1245 
   1246 
   1247 /*
   1248  * aslresource - Resource template generation utilities
   1249  */
   1250 void
   1251 RsSmallAddressCheck (
   1252     UINT8                   Type,
   1253     UINT32                  Minimum,
   1254     UINT32                  Maximum,
   1255     UINT32                  Length,
   1256     UINT32                  Alignment,
   1257     ACPI_PARSE_OBJECT       *MinOp,
   1258     ACPI_PARSE_OBJECT       *MaxOp,
   1259     ACPI_PARSE_OBJECT       *LengthOp,
   1260     ACPI_PARSE_OBJECT       *AlignOp,
   1261     ACPI_PARSE_OBJECT       *Op);
   1262 
   1263 void
   1264 RsLargeAddressCheck (
   1265     UINT64                  Minimum,
   1266     UINT64                  Maximum,
   1267     UINT64                  Length,
   1268     UINT64                  Granularity,
   1269     UINT8                   Flags,
   1270     ACPI_PARSE_OBJECT       *MinOp,
   1271     ACPI_PARSE_OBJECT       *MaxOp,
   1272     ACPI_PARSE_OBJECT       *LengthOp,
   1273     ACPI_PARSE_OBJECT       *GranOp,
   1274     ACPI_PARSE_OBJECT       *Op);
   1275 
   1276 UINT16
   1277 RsGetStringDataLength (
   1278     ACPI_PARSE_OBJECT       *InitializerOp);
   1279 
   1280 ASL_RESOURCE_NODE *
   1281 RsAllocateResourceNode (
   1282     UINT32                  Size);
   1283 
   1284 void
   1285 RsCreateResourceField (
   1286     ACPI_PARSE_OBJECT       *Op,
   1287     char                    *Name,
   1288     UINT32                  ByteOffset,
   1289     UINT32                  BitOffset,
   1290     UINT32                  BitLength);
   1291 
   1292 void
   1293 RsSetFlagBits (
   1294     UINT8                   *Flags,
   1295     ACPI_PARSE_OBJECT       *Op,
   1296     UINT8                   Position,
   1297     UINT8                   DefaultBit);
   1298 
   1299 void
   1300 RsSetFlagBits16 (
   1301     UINT16                  *Flags,
   1302     ACPI_PARSE_OBJECT       *Op,
   1303     UINT8                   Position,
   1304     UINT8                   DefaultBit);
   1305 
   1306 ACPI_PARSE_OBJECT *
   1307 RsCompleteNodeAndGetNext (
   1308     ACPI_PARSE_OBJECT       *Op);
   1309 
   1310 void
   1311 RsCheckListForDuplicates (
   1312     ACPI_PARSE_OBJECT       *Op);
   1313 
   1314 ASL_RESOURCE_NODE *
   1315 RsDoOneResourceDescriptor (
   1316     ASL_RESOURCE_INFO       *Info,
   1317     UINT8                   *State);
   1318 
   1319 /* Values for State above */
   1320 
   1321 #define ACPI_RSTATE_NORMAL              0
   1322 #define ACPI_RSTATE_START_DEPENDENT     1
   1323 #define ACPI_RSTATE_DEPENDENT_LIST      2
   1324 
   1325 UINT32
   1326 RsLinkDescriptorChain (
   1327     ASL_RESOURCE_NODE       **PreviousRnode,
   1328     ASL_RESOURCE_NODE       *Rnode);
   1329 
   1330 void
   1331 RsDoResourceTemplate (
   1332     ACPI_PARSE_OBJECT       *Op);
   1333 
   1334 
   1335 /*
   1336  * aslrestype1 - Miscellaneous Small descriptors
   1337  */
   1338 ASL_RESOURCE_NODE *
   1339 RsDoEndTagDescriptor (
   1340     ASL_RESOURCE_INFO       *Info);
   1341 
   1342 ASL_RESOURCE_NODE *
   1343 RsDoEndDependentDescriptor (
   1344     ASL_RESOURCE_INFO       *Info);
   1345 
   1346 ASL_RESOURCE_NODE *
   1347 RsDoMemory24Descriptor (
   1348     ASL_RESOURCE_INFO       *Info);
   1349 
   1350 ASL_RESOURCE_NODE *
   1351 RsDoMemory32Descriptor (
   1352     ASL_RESOURCE_INFO       *Info);
   1353 
   1354 ASL_RESOURCE_NODE *
   1355 RsDoMemory32FixedDescriptor (
   1356     ASL_RESOURCE_INFO       *Info);
   1357 
   1358 ASL_RESOURCE_NODE *
   1359 RsDoStartDependentDescriptor (
   1360     ASL_RESOURCE_INFO       *Info);
   1361 
   1362 ASL_RESOURCE_NODE *
   1363 RsDoStartDependentNoPriDescriptor (
   1364     ASL_RESOURCE_INFO       *Info);
   1365 
   1366 ASL_RESOURCE_NODE *
   1367 RsDoVendorSmallDescriptor (
   1368     ASL_RESOURCE_INFO       *Info);
   1369 
   1370 
   1371 /*
   1372  * aslrestype1i - I/O-related Small descriptors
   1373  */
   1374 ASL_RESOURCE_NODE *
   1375 RsDoDmaDescriptor (
   1376     ASL_RESOURCE_INFO       *Info);
   1377 
   1378 ASL_RESOURCE_NODE *
   1379 RsDoFixedDmaDescriptor (
   1380     ASL_RESOURCE_INFO       *Info);
   1381 
   1382 ASL_RESOURCE_NODE *
   1383 RsDoFixedIoDescriptor (
   1384     ASL_RESOURCE_INFO       *Info);
   1385 
   1386 ASL_RESOURCE_NODE *
   1387 RsDoIoDescriptor (
   1388     ASL_RESOURCE_INFO       *Info);
   1389 
   1390 ASL_RESOURCE_NODE *
   1391 RsDoIrqDescriptor (
   1392     ASL_RESOURCE_INFO       *Info);
   1393 
   1394 ASL_RESOURCE_NODE *
   1395 RsDoIrqNoFlagsDescriptor (
   1396     ASL_RESOURCE_INFO       *Info);
   1397 
   1398 
   1399 /*
   1400  * aslrestype2 - Large resource descriptors
   1401  */
   1402 ASL_RESOURCE_NODE *
   1403 RsDoInterruptDescriptor (
   1404     ASL_RESOURCE_INFO       *Info);
   1405 
   1406 ASL_RESOURCE_NODE *
   1407 RsDoVendorLargeDescriptor (
   1408     ASL_RESOURCE_INFO       *Info);
   1409 
   1410 ASL_RESOURCE_NODE *
   1411 RsDoGeneralRegisterDescriptor (
   1412     ASL_RESOURCE_INFO       *Info);
   1413 
   1414 ASL_RESOURCE_NODE *
   1415 RsDoGpioIntDescriptor (
   1416     ASL_RESOURCE_INFO       *Info);
   1417 
   1418 ASL_RESOURCE_NODE *
   1419 RsDoGpioIoDescriptor (
   1420     ASL_RESOURCE_INFO       *Info);
   1421 
   1422 ASL_RESOURCE_NODE *
   1423 RsDoI2cSerialBusDescriptor (
   1424     ASL_RESOURCE_INFO       *Info);
   1425 
   1426 ASL_RESOURCE_NODE *
   1427 RsDoSpiSerialBusDescriptor (
   1428     ASL_RESOURCE_INFO       *Info);
   1429 
   1430 ASL_RESOURCE_NODE *
   1431 RsDoUartSerialBusDescriptor (
   1432     ASL_RESOURCE_INFO       *Info);
   1433 
   1434 ASL_RESOURCE_NODE *
   1435 RsDoPinFunctionDescriptor (
   1436     ASL_RESOURCE_INFO       *Info);
   1437 
   1438 ASL_RESOURCE_NODE *
   1439 RsDoPinConfigDescriptor (
   1440     ASL_RESOURCE_INFO       *Info);
   1441 
   1442 ASL_RESOURCE_NODE *
   1443 RsDoPinGroupDescriptor (
   1444     ASL_RESOURCE_INFO       *Info);
   1445 
   1446 ASL_RESOURCE_NODE *
   1447 RsDoPinGroupFunctionDescriptor (
   1448     ASL_RESOURCE_INFO       *Info);
   1449 
   1450 ASL_RESOURCE_NODE *
   1451 RsDoPinGroupConfigDescriptor (
   1452     ASL_RESOURCE_INFO       *Info);
   1453 
   1454 
   1455 /*
   1456  * aslrestype2d - DWord address descriptors
   1457  */
   1458 ASL_RESOURCE_NODE *
   1459 RsDoDwordIoDescriptor (
   1460     ASL_RESOURCE_INFO       *Info);
   1461 
   1462 ASL_RESOURCE_NODE *
   1463 RsDoDwordMemoryDescriptor (
   1464     ASL_RESOURCE_INFO       *Info);
   1465 
   1466 ASL_RESOURCE_NODE *
   1467 RsDoDwordSpaceDescriptor (
   1468     ASL_RESOURCE_INFO       *Info);
   1469 
   1470 
   1471 /*
   1472  * aslrestype2e - Extended address descriptors
   1473  */
   1474 ASL_RESOURCE_NODE *
   1475 RsDoExtendedIoDescriptor (
   1476     ASL_RESOURCE_INFO       *Info);
   1477 
   1478 ASL_RESOURCE_NODE *
   1479 RsDoExtendedMemoryDescriptor (
   1480     ASL_RESOURCE_INFO       *Info);
   1481 
   1482 ASL_RESOURCE_NODE *
   1483 RsDoExtendedSpaceDescriptor (
   1484     ASL_RESOURCE_INFO       *Info);
   1485 
   1486 
   1487 /*
   1488  * aslrestype2q - QWord address descriptors
   1489  */
   1490 ASL_RESOURCE_NODE *
   1491 RsDoQwordIoDescriptor (
   1492     ASL_RESOURCE_INFO       *Info);
   1493 
   1494 ASL_RESOURCE_NODE *
   1495 RsDoQwordMemoryDescriptor (
   1496     ASL_RESOURCE_INFO       *Info);
   1497 
   1498 ASL_RESOURCE_NODE *
   1499 RsDoQwordSpaceDescriptor (
   1500     ASL_RESOURCE_INFO       *Info);
   1501 
   1502 
   1503 /*
   1504  * aslrestype2w - Word address descriptors
   1505  */
   1506 ASL_RESOURCE_NODE *
   1507 RsDoWordIoDescriptor (
   1508     ASL_RESOURCE_INFO       *Info);
   1509 
   1510 ASL_RESOURCE_NODE *
   1511 RsDoWordSpaceDescriptor (
   1512     ASL_RESOURCE_INFO       *Info);
   1513 
   1514 ASL_RESOURCE_NODE *
   1515 RsDoWordBusNumberDescriptor (
   1516     ASL_RESOURCE_INFO       *Info);
   1517 
   1518 
   1519 /*
   1520  * Entry to data table compiler subsystem
   1521  */
   1522 ACPI_STATUS
   1523 DtDoCompile(
   1524     void);
   1525 
   1526 ACPI_STATUS
   1527 DtCreateTemplates (
   1528     char                    **argv);
   1529 
   1530 
   1531 /*
   1532  * ASL/ASL+ converter debug
   1533  */
   1534 ACPI_PRINTF_LIKE (1)
   1535 void
   1536 CvDbgPrint (
   1537     char                    *Fmt,
   1538     ...);
   1539 
   1540 
   1541 #endif /*  __ASLCOMPILER_H */
   1542