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,
355 * asllisting - generate all "listing" type files
362 LsWriteNodeToAsmListing (
363 ACPI_PARSE_OBJECT *Op);
367 ACPI_PARSE_OBJECT *Op,
376 * asllistsup - Listing file support utilities
385 LsDumpAsciiInComment (
396 LsFlushListingBuffer (
400 LsWriteListingHexBytes (
408 UINT32 ToLogicalLineNumber,
412 LsWriteOneSourceLine (
425 * aslhex - generate all "hex" output files (C, ASM, ASL)
433 * aslfold - constant folding
437 ACPI_PARSE_OBJECT *Op,
443 * aslmessages - exception strings
450 AeDecodeExceptionLevel (
454 AeBuildFullExceptionCode (
459 * asloffset - generate C offset file for BIOS support
463 ACPI_PARSE_OBJECT *Op,
468 LsDoOffsetTableHeader (
472 LsDoOffsetTableFooter (
477 * aslopcodes - generate AML opcodes
481 ACPI_PARSE_OBJECT *Op,
486 OpcAmlOpcodeUpdateWalk (
487 ACPI_PARSE_OBJECT *Op,
492 OpcGenerateAmlOpcode (
493 ACPI_PARSE_OBJECT *Op);
496 OpcSetOptimalIntegerSize (
497 ACPI_PARSE_OBJECT *Op);
501 ACPI_PARSE_OBJECT *Op);
505 * asloperands - generate AML operands for the AML opcodes
509 ACPI_PARSE_OBJECT *Op,
513 OpnGenerateAmlOperands (
514 ACPI_PARSE_OBJECT *Op);
518 ACPI_PARSE_OBJECT *Op);
522 * aslopt - optmization
525 OptOptimizeNamePath (
526 ACPI_PARSE_OBJECT *Op,
528 ACPI_WALK_STATE *WalkState,
530 ACPI_NAMESPACE_NODE *TargetNode);
534 * aslcodegen - code generation
537 CgGenerateAmlOutput (
552 * asllength - calculate/adjust AML package lengths
555 LnPackageLengthWalk (
556 ACPI_PARSE_OBJECT *Op,
562 ACPI_PARSE_OBJECT *Op,
567 CgGenerateAmlLengths (
568 ACPI_PARSE_OBJECT *Op);
572 * aslmap - opcode mappings and reserved method names
575 AslMapNamedOpcodeToDataType (
580 * aslpredef - ACPI predefined names support
583 ApCheckForPredefinedMethod (
584 ACPI_PARSE_OBJECT *Op,
585 ASL_METHOD_INFO *MethodInfo);
588 ApCheckPredefinedReturnValue (
589 ACPI_PARSE_OBJECT *Op,
590 ASL_METHOD_INFO *MethodInfo);
593 ApCheckForPredefinedName (
594 ACPI_PARSE_OBJECT *Op,
598 ApCheckForPredefinedObject (
599 ACPI_PARSE_OBJECT *Op,
604 const char *PredefinedName,
605 ACPI_PARSE_OBJECT *Op,
606 UINT32 ExpectedBtypes,
607 UINT32 PackageIndex);
610 ApDisplayReservedNames (
615 * aslprepkg - ACPI predefined names support for packages
619 ACPI_PARSE_OBJECT *ParentOp,
620 const ACPI_PREDEFINED_INFO *Predefined);
624 * asltransform - parse tree transformations
628 ACPI_PARSE_OBJECT *Op,
634 * asltree - parse tree support
638 ACPI_PARSE_OBJECT *Op,
640 ASL_WALK_CALLBACK DescendingCallback,
641 ASL_WALK_CALLBACK AscendingCallback,
644 /* Values for "Visitation" parameter above */
646 #define ASL_WALK_VISIT_DOWNWARD 0x01
647 #define ASL_WALK_VISIT_UPWARD 0x02
648 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
657 ACPI_PARSE_OBJECT *Op);
662 ACPI_PARSE_OBJECT *Op);
675 TrCreateValuedLeafNode (
680 TrCreateConstantLeafNode (
685 ACPI_PARSE_OBJECT *Op,
691 ACPI_PARSE_OBJECT *Op);
699 ACPI_PARSE_OBJECT *Op1,
700 ACPI_PARSE_OBJECT *Op2);
704 ACPI_PARSE_OBJECT *Op1,
705 ACPI_PARSE_OBJECT *Op2);
709 ACPI_PARSE_OBJECT *Op,
714 ACPI_PARSE_OBJECT *Op,
724 * aslfiles - File I/O support
727 FlAddIncludeDirectory (
737 ACPI_PARSE_OBJECT *Op);
789 char *InputFilename);
792 FlOpenAmlOutputFile (
793 char *InputFilename);
796 FlOpenMiscOutputFiles (
797 char *InputFilename);
801 * asload - load namespace in prep for cross reference
805 ACPI_PARSE_OBJECT *RootOp);
809 * asllookup - namespace lookup functions
812 LkFindUnreferencedObjects (
828 * aslnamesp - namespace output file generation
835 NsSetupNamespaceListing (
839 * asloptions - command line processing
847 * aslxref - namespace cross reference
850 XfCrossReferenceNamespace (
855 * aslutils - common compiler utilites
863 /* Type values for above */
865 #define ASL_DEBUG_OUTPUT 0
866 #define ASL_PARSE_OUTPUT 1
867 #define ASL_TREE_OUTPUT 2
870 UtDisplaySupportedTables (
874 UtDisplayConstantOpcodes (
890 UtPrintFormattedName (
904 UtConvertByteToAsmHex (
914 ACPI_PARSE_OBJECT *Op);
921 UtExpandLineBuffers (
927 char **ConvertedName);
930 UtAttachNamepathToOwner (
931 ACPI_PARSE_OBJECT *Op,
932 ACPI_PARSE_OBJECT *NameNode);
935 UtCheckIntegerRange (
936 ACPI_PARSE_OBJECT *Op,
952 * asluuid - UUID support
959 AuConvertUuidToString (
964 * aslresource - Resource template generation utilities
967 RsSmallAddressCheck (
973 ACPI_PARSE_OBJECT *MinOp,
974 ACPI_PARSE_OBJECT *MaxOp,
975 ACPI_PARSE_OBJECT *LengthOp,
976 ACPI_PARSE_OBJECT *AlignOp,
977 ACPI_PARSE_OBJECT *Op);
980 RsLargeAddressCheck (
986 ACPI_PARSE_OBJECT *MinOp,
987 ACPI_PARSE_OBJECT *MaxOp,
988 ACPI_PARSE_OBJECT *LengthOp,
989 ACPI_PARSE_OBJECT *GranOp,
990 ACPI_PARSE_OBJECT *Op);
993 RsGetStringDataLength (
994 ACPI_PARSE_OBJECT *InitializerOp);
997 RsAllocateResourceNode (
1001 RsCreateResourceField (
1002 ACPI_PARSE_OBJECT *Op,
1011 ACPI_PARSE_OBJECT *Op,
1018 ACPI_PARSE_OBJECT *Op,
1023 RsCompleteNodeAndGetNext (
1024 ACPI_PARSE_OBJECT *Op);
1027 RsCheckListForDuplicates (
1028 ACPI_PARSE_OBJECT *Op);
1031 RsDoOneResourceDescriptor (
1032 ACPI_PARSE_OBJECT *DescriptorTypeOp,
1033 UINT32 CurrentByteOffset,
1036 /* Values for State above */
1038 #define ACPI_RSTATE_NORMAL 0
1039 #define ACPI_RSTATE_START_DEPENDENT 1
1040 #define ACPI_RSTATE_DEPENDENT_LIST 2
1043 RsLinkDescriptorChain (
1044 ASL_RESOURCE_NODE **PreviousRnode,
1045 ASL_RESOURCE_NODE *Rnode);
1048 RsDoResourceTemplate (
1049 ACPI_PARSE_OBJECT *Op);
1053 * aslrestype1 - Miscellaneous Small descriptors
1056 RsDoEndTagDescriptor (
1057 ACPI_PARSE_OBJECT *Op,
1058 UINT32 CurrentByteOffset);
1061 RsDoEndDependentDescriptor (
1062 ACPI_PARSE_OBJECT *Op,
1063 UINT32 CurrentByteOffset);
1066 RsDoMemory24Descriptor (
1067 ACPI_PARSE_OBJECT *Op,
1068 UINT32 CurrentByteOffset);
1071 RsDoMemory32Descriptor (
1072 ACPI_PARSE_OBJECT *Op,
1073 UINT32 CurrentByteOffset);
1076 RsDoMemory32FixedDescriptor (
1077 ACPI_PARSE_OBJECT *Op,
1078 UINT32 CurrentByteOffset);
1081 RsDoStartDependentDescriptor (
1082 ACPI_PARSE_OBJECT *Op,
1083 UINT32 CurrentByteOffset);
1086 RsDoStartDependentNoPriDescriptor (
1087 ACPI_PARSE_OBJECT *Op,
1088 UINT32 CurrentByteOffset);
1091 RsDoVendorSmallDescriptor (
1092 ACPI_PARSE_OBJECT *Op,
1093 UINT32 CurrentByteOffset);
1097 * aslrestype1i - I/O-related Small descriptors
1101 ACPI_PARSE_OBJECT *Op,
1102 UINT32 CurrentByteOffset);
1105 RsDoFixedDmaDescriptor (
1106 ACPI_PARSE_OBJECT *Op,
1107 UINT32 CurrentByteOffset);
1110 RsDoFixedIoDescriptor (
1111 ACPI_PARSE_OBJECT *Op,
1112 UINT32 CurrentByteOffset);
1116 ACPI_PARSE_OBJECT *Op,
1117 UINT32 CurrentByteOffset);
1121 ACPI_PARSE_OBJECT *Op,
1122 UINT32 CurrentByteOffset);
1125 RsDoIrqNoFlagsDescriptor (
1126 ACPI_PARSE_OBJECT *Op,
1127 UINT32 CurrentByteOffset);
1131 * aslrestype2 - Large resource descriptors
1134 RsDoInterruptDescriptor (
1135 ACPI_PARSE_OBJECT *Op,
1136 UINT32 CurrentByteOffset);
1139 RsDoVendorLargeDescriptor (
1140 ACPI_PARSE_OBJECT *Op,
1141 UINT32 CurrentByteOffset);
1144 RsDoGeneralRegisterDescriptor (
1145 ACPI_PARSE_OBJECT *Op,
1146 UINT32 CurrentByteOffset);
1149 RsDoGpioIntDescriptor (
1150 ACPI_PARSE_OBJECT *Op,
1151 UINT32 CurrentByteOffset);
1154 RsDoGpioIoDescriptor (
1155 ACPI_PARSE_OBJECT *Op,
1156 UINT32 CurrentByteOffset);
1159 RsDoI2cSerialBusDescriptor (
1160 ACPI_PARSE_OBJECT *Op,
1161 UINT32 CurrentByteOffset);
1164 RsDoSpiSerialBusDescriptor (
1165 ACPI_PARSE_OBJECT *Op,
1166 UINT32 CurrentByteOffset);
1169 RsDoUartSerialBusDescriptor (
1170 ACPI_PARSE_OBJECT *Op,
1171 UINT32 CurrentByteOffset);
1174 * aslrestype2d - DWord address descriptors
1177 RsDoDwordIoDescriptor (
1178 ACPI_PARSE_OBJECT *Op,
1179 UINT32 CurrentByteOffset);
1182 RsDoDwordMemoryDescriptor (
1183 ACPI_PARSE_OBJECT *Op,
1184 UINT32 CurrentByteOffset);
1187 RsDoDwordSpaceDescriptor (
1188 ACPI_PARSE_OBJECT *Op,
1189 UINT32 CurrentByteOffset);
1193 * aslrestype2e - Extended address descriptors
1196 RsDoExtendedIoDescriptor (
1197 ACPI_PARSE_OBJECT *Op,
1198 UINT32 CurrentByteOffset);
1201 RsDoExtendedMemoryDescriptor (
1202 ACPI_PARSE_OBJECT *Op,
1203 UINT32 CurrentByteOffset);
1206 RsDoExtendedSpaceDescriptor (
1207 ACPI_PARSE_OBJECT *Op,
1208 UINT32 CurrentByteOffset);
1212 * aslrestype2q - QWord address descriptors
1215 RsDoQwordIoDescriptor (
1216 ACPI_PARSE_OBJECT *Op,
1217 UINT32 CurrentByteOffset);
1220 RsDoQwordMemoryDescriptor (
1221 ACPI_PARSE_OBJECT *Op,
1222 UINT32 CurrentByteOffset);
1225 RsDoQwordSpaceDescriptor (
1226 ACPI_PARSE_OBJECT *Op,
1227 UINT32 CurrentByteOffset);
1231 * aslrestype2w - Word address descriptors
1234 RsDoWordIoDescriptor (
1235 ACPI_PARSE_OBJECT *Op,
1236 UINT32 CurrentByteOffset);
1239 RsDoWordSpaceDescriptor (
1240 ACPI_PARSE_OBJECT *Op,
1241 UINT32 CurrentByteOffset);
1244 RsDoWordBusNumberDescriptor (
1245 ACPI_PARSE_OBJECT *Op,
1246 UINT32 CurrentByteOffset);
1249 * Entry to data table compiler subsystem
1259 #endif /* __ASLCOMPILER_H */