1 /******************************************************************************
3 * Module Name: aslcompiler.h - common include file for iASL
5 *****************************************************************************/
8 * Copyright (C) 2000 - 2016, Intel Corp.
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
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.
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.
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.
44 #ifndef __ASLCOMPILER_H
45 #define __ASLCOMPILER_H
52 /* Microsoft-specific */
54 #if (defined WIN32 || defined WIN64)
56 /* warn : used #pragma pack */
57 #pragma warning(disable:4103)
59 /* warn : named type definition in parentheses */
60 #pragma warning(disable:4115)
70 /* Compiler headers */
72 #include "asldefine.h"
74 #include "aslmessages.h"
75 #include "aslglobal.h"
76 #include "preprocess.h"
79 /*******************************************************************************
83 ******************************************************************************/
86 * Main ASL parser - generated from flex/bison, lex/yacc, etc.
97 AslResetCurrentLineBuffer (
101 AslInsertLineBuffer (
105 AslPopInputFileStack (
109 AslPushInputFileStack (
119 * aslstartup - entered from main()
122 AslInitializeGlobals (
126 ACPI_STATUS (*ASL_PATHNAME_CALLBACK) (
134 AslCheckForErrorExit (
139 * aslcompile - compile mainline
146 AslCompilerFileHeader (
167 * aslascii - ascii support
170 FlIsFileAsciiSource (
172 BOOLEAN DisplayErrors);
176 * aslwalks - semantic analysis and parse tree walks
179 AnOtherSemanticAnalysisWalkBegin (
180 ACPI_PARSE_OBJECT *Op,
185 AnOtherSemanticAnalysisWalkEnd (
186 ACPI_PARSE_OBJECT *Op,
191 AnOperandTypecheckWalkEnd (
192 ACPI_PARSE_OBJECT *Op,
197 AnMethodTypingWalkEnd (
198 ACPI_PARSE_OBJECT *Op,
204 * aslmethod - Control method analysis walk
207 MtMethodAnalysisWalkBegin (
208 ACPI_PARSE_OBJECT *Op,
213 MtMethodAnalysisWalkEnd (
214 ACPI_PARSE_OBJECT *Op,
220 * aslbtypes - bitfield data types
223 AnMapObjTypeToBtype (
224 ACPI_PARSE_OBJECT *Op);
227 AnMapArgTypeToBtype (
232 ACPI_PARSE_OBJECT *Op);
241 * aslanalyze - Support functions for parse tree walks
245 ACPI_PARSE_OBJECT *Op,
248 /* Values for Type argument above */
250 #define ASL_TYPE_HID 0
251 #define ASL_TYPE_CID 1
255 ACPI_PARSE_OBJECT *Op);
258 AnGetInternalMethodReturnType (
259 ACPI_PARSE_OBJECT *Op);
262 AnLastStatementIsReturn (
263 ACPI_PARSE_OBJECT *Op);
266 AnCheckMethodReturnValue (
267 ACPI_PARSE_OBJECT *Op,
268 const ACPI_OPCODE_INFO *OpInfo,
269 ACPI_PARSE_OBJECT *ArgOp,
270 UINT32 RequiredBtypes,
271 UINT32 ThisNodeBtype);
275 ACPI_PARSE_OBJECT *Op);
278 ApCheckForGpeNameConflict (
279 ACPI_PARSE_OBJECT *Op);
283 ACPI_PARSE_OBJECT *Op);
288 ACPI_PARSE_OBJECT *Op);
291 ApFindNameInDeviceTree (
293 ACPI_PARSE_OBJECT *Op);
296 * aslerror - error handling/reporting
306 ACPI_PARSE_OBJECT *Op,
310 AslDisableException (
311 char *MessageIdString);
314 AslIsExceptionDisabled (
319 AslCoreSubsystemError (
320 ACPI_PARSE_OBJECT *Op,
333 UINT32 CurrentLineNumber,
334 UINT32 LogicalLineNumber,
335 UINT32 LogicalByteOffset,
353 ASL_ERROR_MSG *Enode,
366 * asllisting - generate all "listing" type files
373 LsWriteNodeToAsmListing (
374 ACPI_PARSE_OBJECT *Op);
378 ACPI_PARSE_OBJECT *Op,
387 * asllistsup - Listing file support utilities
396 LsDumpAsciiInComment (
407 LsFlushListingBuffer (
411 LsWriteListingHexBytes (
419 UINT32 ToLogicalLineNumber,
423 LsWriteOneSourceLine (
436 * aslhex - generate all "hex" output files (C, ASM, ASL)
444 * aslfold - constant folding
448 ACPI_PARSE_OBJECT *Op,
454 * aslmessages - exception strings
461 AeDecodeExceptionLevel (
465 AeBuildFullExceptionCode (
470 * asloffset - generate C offset file for BIOS support
474 ACPI_PARSE_OBJECT *Op,
479 LsDoOffsetTableHeader (
483 LsDoOffsetTableFooter (
488 * aslopcodes - generate AML opcodes
492 ACPI_PARSE_OBJECT *Op,
497 OpcAmlOpcodeUpdateWalk (
498 ACPI_PARSE_OBJECT *Op,
503 OpcGenerateAmlOpcode (
504 ACPI_PARSE_OBJECT *Op);
507 OpcSetOptimalIntegerSize (
508 ACPI_PARSE_OBJECT *Op);
512 ACPI_PARSE_OBJECT *Op);
516 * asloperands - generate AML operands for the AML opcodes
520 ACPI_PARSE_OBJECT *Op,
524 OpnGenerateAmlOperands (
525 ACPI_PARSE_OBJECT *Op);
529 ACPI_PARSE_OBJECT *Op);
533 * aslopt - optmization
536 OptOptimizeNamePath (
537 ACPI_PARSE_OBJECT *Op,
539 ACPI_WALK_STATE *WalkState,
541 ACPI_NAMESPACE_NODE *TargetNode);
545 * aslpld - ToPLD macro support
549 ACPI_PARSE_OBJECT *Op);
553 * aslprintf - Printf/Fprintf macros
557 ACPI_PARSE_OBJECT *Op);
561 ACPI_PARSE_OBJECT *Op);
565 * aslprune - parse tree pruner
574 * aslcodegen - code generation
577 CgGenerateAmlOutput (
592 * asllength - calculate/adjust AML package lengths
595 LnPackageLengthWalk (
596 ACPI_PARSE_OBJECT *Op,
602 ACPI_PARSE_OBJECT *Op,
607 CgGenerateAmlLengths (
608 ACPI_PARSE_OBJECT *Op);
612 * aslmap - opcode mappings and reserved method names
615 AslMapNamedOpcodeToDataType (
620 * aslpredef - ACPI predefined names support
623 ApCheckForPredefinedMethod (
624 ACPI_PARSE_OBJECT *Op,
625 ASL_METHOD_INFO *MethodInfo);
628 ApCheckPredefinedReturnValue (
629 ACPI_PARSE_OBJECT *Op,
630 ASL_METHOD_INFO *MethodInfo);
633 ApCheckForPredefinedName (
634 ACPI_PARSE_OBJECT *Op,
638 ApCheckForPredefinedObject (
639 ACPI_PARSE_OBJECT *Op,
644 const char *PredefinedName,
645 ACPI_PARSE_OBJECT *Op,
646 UINT32 ExpectedBtypes,
647 UINT32 PackageIndex);
650 ApDisplayReservedNames (
655 * aslprepkg - ACPI predefined names support for packages
659 ACPI_PARSE_OBJECT *ParentOp,
660 const ACPI_PREDEFINED_INFO *Predefined);
664 * asltransform - parse tree transformations
667 TrAmlTransformWalkBegin (
668 ACPI_PARSE_OBJECT *Op,
673 TrAmlTransformWalkEnd (
674 ACPI_PARSE_OBJECT *Op,
680 * asltree - parse tree support
684 ACPI_PARSE_OBJECT *Op,
686 ASL_WALK_CALLBACK DescendingCallback,
687 ASL_WALK_CALLBACK AscendingCallback,
691 * aslexternal - External opcode support
694 ExAmlExternalWalkBegin (
695 ACPI_PARSE_OBJECT *Op,
700 ExAmlExternalWalkEnd (
701 ACPI_PARSE_OBJECT *Op,
707 ACPI_PARSE_OBJECT *Op);
709 /* Values for "Visitation" parameter above */
711 #define ASL_WALK_VISIT_DOWNWARD 0x01
712 #define ASL_WALK_VISIT_UPWARD 0x02
713 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
718 ACPI_PARSE_OBJECT *Op,
719 ACPI_PARSE_OBJECT *ParentOp);
726 TrPrintNodeCompileFlags (
731 ACPI_PARSE_OBJECT *Op);
736 ACPI_PARSE_OBJECT *Op);
753 TrCreateAssignmentNode (
754 ACPI_PARSE_OBJECT *Target,
755 ACPI_PARSE_OBJECT *Source);
758 TrCreateTargetOperand (
759 ACPI_PARSE_OBJECT *OriginalOp,
760 ACPI_PARSE_OBJECT *ParentOp);
763 TrCreateValuedLeafNode (
768 TrCreateConstantLeafNode (
773 ACPI_PARSE_OBJECT *Op,
779 ACPI_PARSE_OBJECT *Op);
782 TrSetCurrentFilename (
783 ACPI_PARSE_OBJECT *Op);
791 ACPI_PARSE_OBJECT *Op1,
792 ACPI_PARSE_OBJECT *Op2);
796 ACPI_PARSE_OBJECT *Op1,
797 ACPI_PARSE_OBJECT *Op2);
801 ACPI_PARSE_OBJECT *Op,
806 ACPI_PARSE_OBJECT *Op,
816 * aslfiles - File I/O support
819 FlAddIncludeDirectory (
829 ACPI_PARSE_OBJECT *Op);
881 char *InputFilename);
884 FlOpenAmlOutputFile (
885 char *InputFilename);
888 FlOpenMiscOutputFiles (
889 char *InputFilename);
892 * aslhwmap - hardware map summary
900 * asload - load namespace in prep for cross reference
904 ACPI_PARSE_OBJECT *RootOp);
908 * asllookup - namespace lookup functions
911 LkFindUnreferencedObjects (
927 * aslnamesp - namespace output file generation
934 NsSetupNamespaceListing (
938 * asloptions - command line processing
946 * aslxref - namespace cross reference
949 XfCrossReferenceNamespace (
966 ACPI_PARSE_OBJECT *Op,
968 ASL_METHOD_INFO *MethodInfo);
972 * aslutils - common compiler utilites
980 /* Type values for above */
982 #define ASL_DEBUG_OUTPUT 0
983 #define ASL_PARSE_OUTPUT 1
984 #define ASL_TREE_OUTPUT 2
987 UtIsBigEndianMachine (
991 UtQueryForOverwrite (
996 ACPI_PARSE_OBJECT *Op,
1001 ACPI_PARSE_OBJECT *Op,
1003 UINT32 IntegerLength);
1007 ACPI_PARSE_OBJECT *Op,
1011 UtDisplaySupportedTables (
1015 UtDisplayConstantOpcodes (
1035 UtConvertByteToHex (
1040 UtConvertByteToAsmHex (
1046 UINT32 ParseOpcode);
1050 ACPI_PARSE_OBJECT *Op);
1053 UtStringCacheCalloc (
1057 UtExpandLineBuffers (
1067 char **ConvertedName);
1070 UtAttachNamepathToOwner (
1071 ACPI_PARSE_OBJECT *Op,
1072 ACPI_PARSE_OBJECT *NameNode);
1075 UtCheckIntegerRange (
1076 ACPI_PARSE_OBJECT *Op,
1086 * asluuid - UUID support
1093 AuConvertUuidToString (
1098 * aslresource - Resource template generation utilities
1101 RsSmallAddressCheck (
1107 ACPI_PARSE_OBJECT *MinOp,
1108 ACPI_PARSE_OBJECT *MaxOp,
1109 ACPI_PARSE_OBJECT *LengthOp,
1110 ACPI_PARSE_OBJECT *AlignOp,
1111 ACPI_PARSE_OBJECT *Op);
1114 RsLargeAddressCheck (
1120 ACPI_PARSE_OBJECT *MinOp,
1121 ACPI_PARSE_OBJECT *MaxOp,
1122 ACPI_PARSE_OBJECT *LengthOp,
1123 ACPI_PARSE_OBJECT *GranOp,
1124 ACPI_PARSE_OBJECT *Op);
1127 RsGetStringDataLength (
1128 ACPI_PARSE_OBJECT *InitializerOp);
1131 RsAllocateResourceNode (
1135 RsCreateResourceField (
1136 ACPI_PARSE_OBJECT *Op,
1145 ACPI_PARSE_OBJECT *Op,
1152 ACPI_PARSE_OBJECT *Op,
1157 RsCompleteNodeAndGetNext (
1158 ACPI_PARSE_OBJECT *Op);
1161 RsCheckListForDuplicates (
1162 ACPI_PARSE_OBJECT *Op);
1165 RsDoOneResourceDescriptor (
1166 ASL_RESOURCE_INFO *Info,
1169 /* Values for State above */
1171 #define ACPI_RSTATE_NORMAL 0
1172 #define ACPI_RSTATE_START_DEPENDENT 1
1173 #define ACPI_RSTATE_DEPENDENT_LIST 2
1176 RsLinkDescriptorChain (
1177 ASL_RESOURCE_NODE **PreviousRnode,
1178 ASL_RESOURCE_NODE *Rnode);
1181 RsDoResourceTemplate (
1182 ACPI_PARSE_OBJECT *Op);
1186 * aslrestype1 - Miscellaneous Small descriptors
1189 RsDoEndTagDescriptor (
1190 ASL_RESOURCE_INFO *Info);
1193 RsDoEndDependentDescriptor (
1194 ASL_RESOURCE_INFO *Info);
1197 RsDoMemory24Descriptor (
1198 ASL_RESOURCE_INFO *Info);
1201 RsDoMemory32Descriptor (
1202 ASL_RESOURCE_INFO *Info);
1205 RsDoMemory32FixedDescriptor (
1206 ASL_RESOURCE_INFO *Info);
1209 RsDoStartDependentDescriptor (
1210 ASL_RESOURCE_INFO *Info);
1213 RsDoStartDependentNoPriDescriptor (
1214 ASL_RESOURCE_INFO *Info);
1217 RsDoVendorSmallDescriptor (
1218 ASL_RESOURCE_INFO *Info);
1222 * aslrestype1i - I/O-related Small descriptors
1226 ASL_RESOURCE_INFO *Info);
1229 RsDoFixedDmaDescriptor (
1230 ASL_RESOURCE_INFO *Info);
1233 RsDoFixedIoDescriptor (
1234 ASL_RESOURCE_INFO *Info);
1238 ASL_RESOURCE_INFO *Info);
1242 ASL_RESOURCE_INFO *Info);
1245 RsDoIrqNoFlagsDescriptor (
1246 ASL_RESOURCE_INFO *Info);
1250 * aslrestype2 - Large resource descriptors
1253 RsDoInterruptDescriptor (
1254 ASL_RESOURCE_INFO *Info);
1257 RsDoVendorLargeDescriptor (
1258 ASL_RESOURCE_INFO *Info);
1261 RsDoGeneralRegisterDescriptor (
1262 ASL_RESOURCE_INFO *Info);
1265 RsDoGpioIntDescriptor (
1266 ASL_RESOURCE_INFO *Info);
1269 RsDoGpioIoDescriptor (
1270 ASL_RESOURCE_INFO *Info);
1273 RsDoI2cSerialBusDescriptor (
1274 ASL_RESOURCE_INFO *Info);
1277 RsDoSpiSerialBusDescriptor (
1278 ASL_RESOURCE_INFO *Info);
1281 RsDoUartSerialBusDescriptor (
1282 ASL_RESOURCE_INFO *Info);
1285 * aslrestype2d - DWord address descriptors
1288 RsDoDwordIoDescriptor (
1289 ASL_RESOURCE_INFO *Info);
1292 RsDoDwordMemoryDescriptor (
1293 ASL_RESOURCE_INFO *Info);
1296 RsDoDwordSpaceDescriptor (
1297 ASL_RESOURCE_INFO *Info);
1301 * aslrestype2e - Extended address descriptors
1304 RsDoExtendedIoDescriptor (
1305 ASL_RESOURCE_INFO *Info);
1308 RsDoExtendedMemoryDescriptor (
1309 ASL_RESOURCE_INFO *Info);
1312 RsDoExtendedSpaceDescriptor (
1313 ASL_RESOURCE_INFO *Info);
1317 * aslrestype2q - QWord address descriptors
1320 RsDoQwordIoDescriptor (
1321 ASL_RESOURCE_INFO *Info);
1324 RsDoQwordMemoryDescriptor (
1325 ASL_RESOURCE_INFO *Info);
1328 RsDoQwordSpaceDescriptor (
1329 ASL_RESOURCE_INFO *Info);
1333 * aslrestype2w - Word address descriptors
1336 RsDoWordIoDescriptor (
1337 ASL_RESOURCE_INFO *Info);
1340 RsDoWordSpaceDescriptor (
1341 ASL_RESOURCE_INFO *Info);
1344 RsDoWordBusNumberDescriptor (
1345 ASL_RESOURCE_INFO *Info);
1349 * Entry to data table compiler subsystem
1359 #endif /* __ASLCOMPILER_H */