1 /******************************************************************************
3 * Module Name: aslcompiler.h - common include file for iASL
5 *****************************************************************************/
8 * Copyright (C) 2000 - 2014, 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.
45 #ifndef __ASLCOMPILER_H
46 #define __ASLCOMPILER_H
53 /* Microsoft-specific */
55 #if (defined WIN32 || defined WIN64)
57 /* warn : used #pragma pack */
58 #pragma warning(disable:4103)
60 /* warn : named type definition in parentheses */
61 #pragma warning(disable:4115)
71 /* Compiler headers */
73 #include "asldefine.h"
75 #include "aslmessages.h"
76 #include "aslglobal.h"
77 #include "preprocess.h"
80 /*******************************************************************************
84 ******************************************************************************/
87 * Main ASL parser - generated from flex/bison, lex/yacc, etc.
98 AslResetCurrentLineBuffer (
102 AslInsertLineBuffer (
106 AslPopInputFileStack (
110 AslPushInputFileStack (
115 * aslstartup - entered from main()
118 AslInitializeGlobals (
122 ACPI_STATUS (*ASL_PATHNAME_CALLBACK) (
130 AslCheckForErrorExit (
135 * aslcompile - compile mainline
142 AslCompilerFileHeader (
158 FlCheckForAcpiTable (
165 BOOLEAN DisplayErrors);
169 * aslwalks - semantic analysis and parse tree walks
172 AnOtherSemanticAnalysisWalkBegin (
173 ACPI_PARSE_OBJECT *Op,
178 AnOtherSemanticAnalysisWalkEnd (
179 ACPI_PARSE_OBJECT *Op,
184 AnOperandTypecheckWalkEnd (
185 ACPI_PARSE_OBJECT *Op,
190 AnMethodTypingWalkEnd (
191 ACPI_PARSE_OBJECT *Op,
197 * aslmethod - Control method analysis walk
200 MtMethodAnalysisWalkBegin (
201 ACPI_PARSE_OBJECT *Op,
206 MtMethodAnalysisWalkEnd (
207 ACPI_PARSE_OBJECT *Op,
213 * aslbtypes - bitfield data types
216 AnMapObjTypeToBtype (
217 ACPI_PARSE_OBJECT *Op);
220 AnMapArgTypeToBtype (
225 ACPI_PARSE_OBJECT *Op);
234 * aslanalyze - Support functions for parse tree walks
238 ACPI_PARSE_OBJECT *Op,
241 /* Values for Type argument above */
243 #define ASL_TYPE_HID 0
244 #define ASL_TYPE_CID 1
248 ACPI_PARSE_OBJECT *Op);
251 AnGetInternalMethodReturnType (
252 ACPI_PARSE_OBJECT *Op);
255 AnLastStatementIsReturn (
256 ACPI_PARSE_OBJECT *Op);
259 AnCheckMethodReturnValue (
260 ACPI_PARSE_OBJECT *Op,
261 const ACPI_OPCODE_INFO *OpInfo,
262 ACPI_PARSE_OBJECT *ArgOp,
263 UINT32 RequiredBtypes,
264 UINT32 ThisNodeBtype);
268 ACPI_PARSE_OBJECT *Op);
271 ApCheckForGpeNameConflict (
272 ACPI_PARSE_OBJECT *Op);
276 ACPI_PARSE_OBJECT *Op);
281 ACPI_PARSE_OBJECT *Op);
285 * aslerror - error handling/reporting
295 ACPI_PARSE_OBJECT *Op,
299 AslDisableException (
300 char *MessageIdString);
303 AslIsExceptionDisabled (
308 AslCoreSubsystemError (
309 ACPI_PARSE_OBJECT *Op,
322 UINT32 CurrentLineNumber,
323 UINT32 LogicalLineNumber,
324 UINT32 LogicalByteOffset,
342 ASL_ERROR_MSG *Enode,
353 ACPI_PHYSICAL_ADDRESS
354 AeLocalGetRootPointer (
359 * asllisting - generate all "listing" type files
366 LsWriteNodeToAsmListing (
367 ACPI_PARSE_OBJECT *Op);
371 ACPI_PARSE_OBJECT *Op,
380 * asllistsup - Listing file support utilities
389 LsDumpAsciiInComment (
400 LsFlushListingBuffer (
404 LsWriteListingHexBytes (
412 UINT32 ToLogicalLineNumber,
416 LsWriteOneSourceLine (
429 * aslhex - generate all "hex" output files (C, ASM, ASL)
437 * aslfold - constant folding
441 ACPI_PARSE_OBJECT *Op,
447 * aslmessages - exception strings
454 AeDecodeExceptionLevel (
458 AeBuildFullExceptionCode (
463 * asloffset - generate C offset file for BIOS support
467 ACPI_PARSE_OBJECT *Op,
472 LsDoOffsetTableHeader (
476 LsDoOffsetTableFooter (
481 * aslopcodes - generate AML opcodes
485 ACPI_PARSE_OBJECT *Op,
490 OpcAmlOpcodeUpdateWalk (
491 ACPI_PARSE_OBJECT *Op,
496 OpcGenerateAmlOpcode (
497 ACPI_PARSE_OBJECT *Op);
500 OpcSetOptimalIntegerSize (
501 ACPI_PARSE_OBJECT *Op);
505 ACPI_PARSE_OBJECT *Op);
509 * asloperands - generate AML operands for the AML opcodes
513 ACPI_PARSE_OBJECT *Op,
517 OpnGenerateAmlOperands (
518 ACPI_PARSE_OBJECT *Op);
522 ACPI_PARSE_OBJECT *Op);
526 * aslopt - optmization
529 OptOptimizeNamePath (
530 ACPI_PARSE_OBJECT *Op,
532 ACPI_WALK_STATE *WalkState,
534 ACPI_NAMESPACE_NODE *TargetNode);
538 * aslcodegen - code generation
541 CgGenerateAmlOutput (
556 * asllength - calculate/adjust AML package lengths
559 LnPackageLengthWalk (
560 ACPI_PARSE_OBJECT *Op,
566 ACPI_PARSE_OBJECT *Op,
571 CgGenerateAmlLengths (
572 ACPI_PARSE_OBJECT *Op);
576 * aslmap - opcode mappings and reserved method names
579 AslMapNamedOpcodeToDataType (
584 * aslpredef - ACPI predefined names support
587 ApCheckForPredefinedMethod (
588 ACPI_PARSE_OBJECT *Op,
589 ASL_METHOD_INFO *MethodInfo);
592 ApCheckPredefinedReturnValue (
593 ACPI_PARSE_OBJECT *Op,
594 ASL_METHOD_INFO *MethodInfo);
597 ApCheckForPredefinedName (
598 ACPI_PARSE_OBJECT *Op,
602 ApCheckForPredefinedObject (
603 ACPI_PARSE_OBJECT *Op,
608 const char *PredefinedName,
609 ACPI_PARSE_OBJECT *Op,
610 UINT32 ExpectedBtypes,
611 UINT32 PackageIndex);
614 ApDisplayReservedNames (
619 * aslprepkg - ACPI predefined names support for packages
623 ACPI_PARSE_OBJECT *ParentOp,
624 const ACPI_PREDEFINED_INFO *Predefined);
628 * asltransform - parse tree transformations
632 ACPI_PARSE_OBJECT *Op,
638 * asltree - parse tree support
642 ACPI_PARSE_OBJECT *Op,
644 ASL_WALK_CALLBACK DescendingCallback,
645 ASL_WALK_CALLBACK AscendingCallback,
648 /* Values for "Visitation" parameter above */
650 #define ASL_WALK_VISIT_DOWNWARD 0x01
651 #define ASL_WALK_VISIT_UPWARD 0x02
652 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
661 ACPI_PARSE_OBJECT *Op);
666 ACPI_PARSE_OBJECT *Op);
679 TrCreateValuedLeafNode (
684 TrCreateConstantLeafNode (
689 ACPI_PARSE_OBJECT *Op,
695 ACPI_PARSE_OBJECT *Op);
703 ACPI_PARSE_OBJECT *Op1,
704 ACPI_PARSE_OBJECT *Op2);
708 ACPI_PARSE_OBJECT *Op1,
709 ACPI_PARSE_OBJECT *Op2);
713 ACPI_PARSE_OBJECT *Op,
718 ACPI_PARSE_OBJECT *Op,
728 * aslfiles - File I/O support
731 FlAddIncludeDirectory (
741 ACPI_PARSE_OBJECT *Op);
793 char *InputFilename);
796 FlOpenAmlOutputFile (
797 char *InputFilename);
800 FlOpenMiscOutputFiles (
801 char *InputFilename);
805 * asload - load namespace in prep for cross reference
809 ACPI_PARSE_OBJECT *RootOp);
813 * asllookup - namespace lookup functions
816 LkFindUnreferencedObjects (
832 * aslnamesp - namespace output file generation
839 NsSetupNamespaceListing (
843 * asloptions - command line processing
851 * aslxref - namespace cross reference
854 XfCrossReferenceNamespace (
859 * aslutils - common compiler utilites
867 /* Type values for above */
869 #define ASL_DEBUG_OUTPUT 0
870 #define ASL_PARSE_OUTPUT 1
871 #define ASL_TREE_OUTPUT 2
874 UtDisplaySupportedTables (
878 UtDisplayConstantOpcodes (
894 UtPrintFormattedName (
912 UtConvertByteToAsmHex (
922 ACPI_PARSE_OBJECT *Op);
929 UtExpandLineBuffers (
935 char **ConvertedName);
938 UtAttachNamepathToOwner (
939 ACPI_PARSE_OBJECT *Op,
940 ACPI_PARSE_OBJECT *NameNode);
943 UtCheckIntegerRange (
944 ACPI_PARSE_OBJECT *Op,
960 * asluuid - UUID support
967 AuConvertStringToUuid (
972 AuConvertUuidToString (
977 * aslresource - Resource template generation utilities
980 RsSmallAddressCheck (
986 ACPI_PARSE_OBJECT *MinOp,
987 ACPI_PARSE_OBJECT *MaxOp,
988 ACPI_PARSE_OBJECT *LengthOp,
989 ACPI_PARSE_OBJECT *AlignOp,
990 ACPI_PARSE_OBJECT *Op);
993 RsLargeAddressCheck (
999 ACPI_PARSE_OBJECT *MinOp,
1000 ACPI_PARSE_OBJECT *MaxOp,
1001 ACPI_PARSE_OBJECT *LengthOp,
1002 ACPI_PARSE_OBJECT *GranOp,
1003 ACPI_PARSE_OBJECT *Op);
1006 RsGetStringDataLength (
1007 ACPI_PARSE_OBJECT *InitializerOp);
1010 RsAllocateResourceNode (
1014 RsCreateResourceField (
1015 ACPI_PARSE_OBJECT *Op,
1024 ACPI_PARSE_OBJECT *Op,
1031 ACPI_PARSE_OBJECT *Op,
1036 RsCompleteNodeAndGetNext (
1037 ACPI_PARSE_OBJECT *Op);
1040 RsCheckListForDuplicates (
1041 ACPI_PARSE_OBJECT *Op);
1044 RsDoOneResourceDescriptor (
1045 ACPI_PARSE_OBJECT *DescriptorTypeOp,
1046 UINT32 CurrentByteOffset,
1049 /* Values for State above */
1051 #define ACPI_RSTATE_NORMAL 0
1052 #define ACPI_RSTATE_START_DEPENDENT 1
1053 #define ACPI_RSTATE_DEPENDENT_LIST 2
1056 RsLinkDescriptorChain (
1057 ASL_RESOURCE_NODE **PreviousRnode,
1058 ASL_RESOURCE_NODE *Rnode);
1061 RsDoResourceTemplate (
1062 ACPI_PARSE_OBJECT *Op);
1066 * aslrestype1 - Miscellaneous Small descriptors
1069 RsDoEndTagDescriptor (
1070 ACPI_PARSE_OBJECT *Op,
1071 UINT32 CurrentByteOffset);
1074 RsDoEndDependentDescriptor (
1075 ACPI_PARSE_OBJECT *Op,
1076 UINT32 CurrentByteOffset);
1079 RsDoMemory24Descriptor (
1080 ACPI_PARSE_OBJECT *Op,
1081 UINT32 CurrentByteOffset);
1084 RsDoMemory32Descriptor (
1085 ACPI_PARSE_OBJECT *Op,
1086 UINT32 CurrentByteOffset);
1089 RsDoMemory32FixedDescriptor (
1090 ACPI_PARSE_OBJECT *Op,
1091 UINT32 CurrentByteOffset);
1094 RsDoStartDependentDescriptor (
1095 ACPI_PARSE_OBJECT *Op,
1096 UINT32 CurrentByteOffset);
1099 RsDoStartDependentNoPriDescriptor (
1100 ACPI_PARSE_OBJECT *Op,
1101 UINT32 CurrentByteOffset);
1104 RsDoVendorSmallDescriptor (
1105 ACPI_PARSE_OBJECT *Op,
1106 UINT32 CurrentByteOffset);
1110 * aslrestype1i - I/O-related Small descriptors
1114 ACPI_PARSE_OBJECT *Op,
1115 UINT32 CurrentByteOffset);
1118 RsDoFixedDmaDescriptor (
1119 ACPI_PARSE_OBJECT *Op,
1120 UINT32 CurrentByteOffset);
1123 RsDoFixedIoDescriptor (
1124 ACPI_PARSE_OBJECT *Op,
1125 UINT32 CurrentByteOffset);
1129 ACPI_PARSE_OBJECT *Op,
1130 UINT32 CurrentByteOffset);
1134 ACPI_PARSE_OBJECT *Op,
1135 UINT32 CurrentByteOffset);
1138 RsDoIrqNoFlagsDescriptor (
1139 ACPI_PARSE_OBJECT *Op,
1140 UINT32 CurrentByteOffset);
1144 * aslrestype2 - Large resource descriptors
1147 RsDoInterruptDescriptor (
1148 ACPI_PARSE_OBJECT *Op,
1149 UINT32 CurrentByteOffset);
1152 RsDoVendorLargeDescriptor (
1153 ACPI_PARSE_OBJECT *Op,
1154 UINT32 CurrentByteOffset);
1157 RsDoGeneralRegisterDescriptor (
1158 ACPI_PARSE_OBJECT *Op,
1159 UINT32 CurrentByteOffset);
1162 RsDoGpioIntDescriptor (
1163 ACPI_PARSE_OBJECT *Op,
1164 UINT32 CurrentByteOffset);
1167 RsDoGpioIoDescriptor (
1168 ACPI_PARSE_OBJECT *Op,
1169 UINT32 CurrentByteOffset);
1172 RsDoI2cSerialBusDescriptor (
1173 ACPI_PARSE_OBJECT *Op,
1174 UINT32 CurrentByteOffset);
1177 RsDoSpiSerialBusDescriptor (
1178 ACPI_PARSE_OBJECT *Op,
1179 UINT32 CurrentByteOffset);
1182 RsDoUartSerialBusDescriptor (
1183 ACPI_PARSE_OBJECT *Op,
1184 UINT32 CurrentByteOffset);
1187 * aslrestype2d - DWord address descriptors
1190 RsDoDwordIoDescriptor (
1191 ACPI_PARSE_OBJECT *Op,
1192 UINT32 CurrentByteOffset);
1195 RsDoDwordMemoryDescriptor (
1196 ACPI_PARSE_OBJECT *Op,
1197 UINT32 CurrentByteOffset);
1200 RsDoDwordSpaceDescriptor (
1201 ACPI_PARSE_OBJECT *Op,
1202 UINT32 CurrentByteOffset);
1206 * aslrestype2e - Extended address descriptors
1209 RsDoExtendedIoDescriptor (
1210 ACPI_PARSE_OBJECT *Op,
1211 UINT32 CurrentByteOffset);
1214 RsDoExtendedMemoryDescriptor (
1215 ACPI_PARSE_OBJECT *Op,
1216 UINT32 CurrentByteOffset);
1219 RsDoExtendedSpaceDescriptor (
1220 ACPI_PARSE_OBJECT *Op,
1221 UINT32 CurrentByteOffset);
1225 * aslrestype2q - QWord address descriptors
1228 RsDoQwordIoDescriptor (
1229 ACPI_PARSE_OBJECT *Op,
1230 UINT32 CurrentByteOffset);
1233 RsDoQwordMemoryDescriptor (
1234 ACPI_PARSE_OBJECT *Op,
1235 UINT32 CurrentByteOffset);
1238 RsDoQwordSpaceDescriptor (
1239 ACPI_PARSE_OBJECT *Op,
1240 UINT32 CurrentByteOffset);
1244 * aslrestype2w - Word address descriptors
1247 RsDoWordIoDescriptor (
1248 ACPI_PARSE_OBJECT *Op,
1249 UINT32 CurrentByteOffset);
1252 RsDoWordSpaceDescriptor (
1253 ACPI_PARSE_OBJECT *Op,
1254 UINT32 CurrentByteOffset);
1257 RsDoWordBusNumberDescriptor (
1258 ACPI_PARSE_OBJECT *Op,
1259 UINT32 CurrentByteOffset);
1262 * Entry to data table compiler subsystem
1272 #endif /* __ASLCOMPILER_H */