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