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