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.
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 FlCheckForAcpiTable (
177 BOOLEAN DisplayErrors);
181 * aslwalks - semantic analysis and parse tree walks
184 AnOtherSemanticAnalysisWalkBegin (
185 ACPI_PARSE_OBJECT *Op,
190 AnOtherSemanticAnalysisWalkEnd (
191 ACPI_PARSE_OBJECT *Op,
196 AnOperandTypecheckWalkEnd (
197 ACPI_PARSE_OBJECT *Op,
202 AnMethodTypingWalkEnd (
203 ACPI_PARSE_OBJECT *Op,
209 * aslmethod - Control method analysis walk
212 MtMethodAnalysisWalkBegin (
213 ACPI_PARSE_OBJECT *Op,
218 MtMethodAnalysisWalkEnd (
219 ACPI_PARSE_OBJECT *Op,
225 * aslbtypes - bitfield data types
228 AnMapObjTypeToBtype (
229 ACPI_PARSE_OBJECT *Op);
232 AnMapArgTypeToBtype (
237 ACPI_PARSE_OBJECT *Op);
246 * aslanalyze - Support functions for parse tree walks
250 ACPI_PARSE_OBJECT *Op,
253 /* Values for Type argument above */
255 #define ASL_TYPE_HID 0
256 #define ASL_TYPE_CID 1
260 ACPI_PARSE_OBJECT *Op);
263 AnGetInternalMethodReturnType (
264 ACPI_PARSE_OBJECT *Op);
267 AnLastStatementIsReturn (
268 ACPI_PARSE_OBJECT *Op);
271 AnCheckMethodReturnValue (
272 ACPI_PARSE_OBJECT *Op,
273 const ACPI_OPCODE_INFO *OpInfo,
274 ACPI_PARSE_OBJECT *ArgOp,
275 UINT32 RequiredBtypes,
276 UINT32 ThisNodeBtype);
280 ACPI_PARSE_OBJECT *Op);
283 ApCheckForGpeNameConflict (
284 ACPI_PARSE_OBJECT *Op);
288 ACPI_PARSE_OBJECT *Op);
293 ACPI_PARSE_OBJECT *Op);
297 * aslerror - error handling/reporting
307 ACPI_PARSE_OBJECT *Op,
311 AslDisableException (
312 char *MessageIdString);
315 AslIsExceptionDisabled (
320 AslCoreSubsystemError (
321 ACPI_PARSE_OBJECT *Op,
334 UINT32 CurrentLineNumber,
335 UINT32 LogicalLineNumber,
336 UINT32 LogicalByteOffset,
354 ASL_ERROR_MSG *Enode,
367 * asllisting - generate all "listing" type files
374 LsWriteNodeToAsmListing (
375 ACPI_PARSE_OBJECT *Op);
379 ACPI_PARSE_OBJECT *Op,
388 * asllistsup - Listing file support utilities
397 LsDumpAsciiInComment (
408 LsFlushListingBuffer (
412 LsWriteListingHexBytes (
420 UINT32 ToLogicalLineNumber,
424 LsWriteOneSourceLine (
437 * aslhex - generate all "hex" output files (C, ASM, ASL)
445 * aslfold - constant folding
449 ACPI_PARSE_OBJECT *Op,
455 * aslmessages - exception strings
462 AeDecodeExceptionLevel (
466 AeBuildFullExceptionCode (
471 * asloffset - generate C offset file for BIOS support
475 ACPI_PARSE_OBJECT *Op,
480 LsDoOffsetTableHeader (
484 LsDoOffsetTableFooter (
489 * aslopcodes - generate AML opcodes
493 ACPI_PARSE_OBJECT *Op,
498 OpcAmlOpcodeUpdateWalk (
499 ACPI_PARSE_OBJECT *Op,
504 OpcGenerateAmlOpcode (
505 ACPI_PARSE_OBJECT *Op);
508 OpcSetOptimalIntegerSize (
509 ACPI_PARSE_OBJECT *Op);
513 ACPI_PARSE_OBJECT *Op);
517 * asloperands - generate AML operands for the AML opcodes
521 ACPI_PARSE_OBJECT *Op,
525 OpnGenerateAmlOperands (
526 ACPI_PARSE_OBJECT *Op);
530 ACPI_PARSE_OBJECT *Op);
534 * aslopt - optmization
537 OptOptimizeNamePath (
538 ACPI_PARSE_OBJECT *Op,
540 ACPI_WALK_STATE *WalkState,
542 ACPI_NAMESPACE_NODE *TargetNode);
546 * aslcodegen - code generation
549 CgGenerateAmlOutput (
564 * asllength - calculate/adjust AML package lengths
567 LnPackageLengthWalk (
568 ACPI_PARSE_OBJECT *Op,
574 ACPI_PARSE_OBJECT *Op,
579 CgGenerateAmlLengths (
580 ACPI_PARSE_OBJECT *Op);
584 * aslmap - opcode mappings and reserved method names
587 AslMapNamedOpcodeToDataType (
592 * aslpredef - ACPI predefined names support
595 ApCheckForPredefinedMethod (
596 ACPI_PARSE_OBJECT *Op,
597 ASL_METHOD_INFO *MethodInfo);
600 ApCheckPredefinedReturnValue (
601 ACPI_PARSE_OBJECT *Op,
602 ASL_METHOD_INFO *MethodInfo);
605 ApCheckForPredefinedName (
606 ACPI_PARSE_OBJECT *Op,
610 ApCheckForPredefinedObject (
611 ACPI_PARSE_OBJECT *Op,
616 const char *PredefinedName,
617 ACPI_PARSE_OBJECT *Op,
618 UINT32 ExpectedBtypes,
619 UINT32 PackageIndex);
622 ApDisplayReservedNames (
627 * aslprepkg - ACPI predefined names support for packages
631 ACPI_PARSE_OBJECT *ParentOp,
632 const ACPI_PREDEFINED_INFO *Predefined);
636 * asltransform - parse tree transformations
640 ACPI_PARSE_OBJECT *Op,
646 * asltree - parse tree support
650 ACPI_PARSE_OBJECT *Op,
652 ASL_WALK_CALLBACK DescendingCallback,
653 ASL_WALK_CALLBACK AscendingCallback,
656 /* Values for "Visitation" parameter above */
658 #define ASL_WALK_VISIT_DOWNWARD 0x01
659 #define ASL_WALK_VISIT_UPWARD 0x02
660 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
669 ACPI_PARSE_OBJECT *Op);
674 ACPI_PARSE_OBJECT *Op);
687 TrCreateValuedLeafNode (
692 TrCreateConstantLeafNode (
697 ACPI_PARSE_OBJECT *Op,
703 ACPI_PARSE_OBJECT *Op);
711 ACPI_PARSE_OBJECT *Op1,
712 ACPI_PARSE_OBJECT *Op2);
716 ACPI_PARSE_OBJECT *Op1,
717 ACPI_PARSE_OBJECT *Op2);
721 ACPI_PARSE_OBJECT *Op,
726 ACPI_PARSE_OBJECT *Op,
736 * aslfiles - File I/O support
739 FlAddIncludeDirectory (
749 ACPI_PARSE_OBJECT *Op);
801 char *InputFilename);
804 FlOpenAmlOutputFile (
805 char *InputFilename);
808 FlOpenMiscOutputFiles (
809 char *InputFilename);
813 * asload - load namespace in prep for cross reference
817 ACPI_PARSE_OBJECT *RootOp);
821 * asllookup - namespace lookup functions
824 LkFindUnreferencedObjects (
840 * aslnamesp - namespace output file generation
847 NsSetupNamespaceListing (
851 * asloptions - command line processing
859 * aslxref - namespace cross reference
862 XfCrossReferenceNamespace (
867 * aslutils - common compiler utilites
875 /* Type values for above */
877 #define ASL_DEBUG_OUTPUT 0
878 #define ASL_PARSE_OUTPUT 1
879 #define ASL_TREE_OUTPUT 2
882 UtDisplaySupportedTables (
886 UtDisplayConstantOpcodes (
902 UtPrintFormattedName (
916 UtConvertByteToAsmHex (
926 ACPI_PARSE_OBJECT *Op);
929 UtStringCacheCalloc (
933 UtExpandLineBuffers (
943 char **ConvertedName);
946 UtAttachNamepathToOwner (
947 ACPI_PARSE_OBJECT *Op,
948 ACPI_PARSE_OBJECT *NameNode);
951 UtCheckIntegerRange (
952 ACPI_PARSE_OBJECT *Op,
968 * asluuid - UUID support
975 AuConvertUuidToString (
980 * aslresource - Resource template generation utilities
983 RsSmallAddressCheck (
989 ACPI_PARSE_OBJECT *MinOp,
990 ACPI_PARSE_OBJECT *MaxOp,
991 ACPI_PARSE_OBJECT *LengthOp,
992 ACPI_PARSE_OBJECT *AlignOp,
993 ACPI_PARSE_OBJECT *Op);
996 RsLargeAddressCheck (
1002 ACPI_PARSE_OBJECT *MinOp,
1003 ACPI_PARSE_OBJECT *MaxOp,
1004 ACPI_PARSE_OBJECT *LengthOp,
1005 ACPI_PARSE_OBJECT *GranOp,
1006 ACPI_PARSE_OBJECT *Op);
1009 RsGetStringDataLength (
1010 ACPI_PARSE_OBJECT *InitializerOp);
1013 RsAllocateResourceNode (
1017 RsCreateResourceField (
1018 ACPI_PARSE_OBJECT *Op,
1027 ACPI_PARSE_OBJECT *Op,
1034 ACPI_PARSE_OBJECT *Op,
1039 RsCompleteNodeAndGetNext (
1040 ACPI_PARSE_OBJECT *Op);
1043 RsCheckListForDuplicates (
1044 ACPI_PARSE_OBJECT *Op);
1047 RsDoOneResourceDescriptor (
1048 ACPI_PARSE_OBJECT *DescriptorTypeOp,
1049 UINT32 CurrentByteOffset,
1052 /* Values for State above */
1054 #define ACPI_RSTATE_NORMAL 0
1055 #define ACPI_RSTATE_START_DEPENDENT 1
1056 #define ACPI_RSTATE_DEPENDENT_LIST 2
1059 RsLinkDescriptorChain (
1060 ASL_RESOURCE_NODE **PreviousRnode,
1061 ASL_RESOURCE_NODE *Rnode);
1064 RsDoResourceTemplate (
1065 ACPI_PARSE_OBJECT *Op);
1069 * aslrestype1 - Miscellaneous Small descriptors
1072 RsDoEndTagDescriptor (
1073 ACPI_PARSE_OBJECT *Op,
1074 UINT32 CurrentByteOffset);
1077 RsDoEndDependentDescriptor (
1078 ACPI_PARSE_OBJECT *Op,
1079 UINT32 CurrentByteOffset);
1082 RsDoMemory24Descriptor (
1083 ACPI_PARSE_OBJECT *Op,
1084 UINT32 CurrentByteOffset);
1087 RsDoMemory32Descriptor (
1088 ACPI_PARSE_OBJECT *Op,
1089 UINT32 CurrentByteOffset);
1092 RsDoMemory32FixedDescriptor (
1093 ACPI_PARSE_OBJECT *Op,
1094 UINT32 CurrentByteOffset);
1097 RsDoStartDependentDescriptor (
1098 ACPI_PARSE_OBJECT *Op,
1099 UINT32 CurrentByteOffset);
1102 RsDoStartDependentNoPriDescriptor (
1103 ACPI_PARSE_OBJECT *Op,
1104 UINT32 CurrentByteOffset);
1107 RsDoVendorSmallDescriptor (
1108 ACPI_PARSE_OBJECT *Op,
1109 UINT32 CurrentByteOffset);
1113 * aslrestype1i - I/O-related Small descriptors
1117 ACPI_PARSE_OBJECT *Op,
1118 UINT32 CurrentByteOffset);
1121 RsDoFixedDmaDescriptor (
1122 ACPI_PARSE_OBJECT *Op,
1123 UINT32 CurrentByteOffset);
1126 RsDoFixedIoDescriptor (
1127 ACPI_PARSE_OBJECT *Op,
1128 UINT32 CurrentByteOffset);
1132 ACPI_PARSE_OBJECT *Op,
1133 UINT32 CurrentByteOffset);
1137 ACPI_PARSE_OBJECT *Op,
1138 UINT32 CurrentByteOffset);
1141 RsDoIrqNoFlagsDescriptor (
1142 ACPI_PARSE_OBJECT *Op,
1143 UINT32 CurrentByteOffset);
1147 * aslrestype2 - Large resource descriptors
1150 RsDoInterruptDescriptor (
1151 ACPI_PARSE_OBJECT *Op,
1152 UINT32 CurrentByteOffset);
1155 RsDoVendorLargeDescriptor (
1156 ACPI_PARSE_OBJECT *Op,
1157 UINT32 CurrentByteOffset);
1160 RsDoGeneralRegisterDescriptor (
1161 ACPI_PARSE_OBJECT *Op,
1162 UINT32 CurrentByteOffset);
1165 RsDoGpioIntDescriptor (
1166 ACPI_PARSE_OBJECT *Op,
1167 UINT32 CurrentByteOffset);
1170 RsDoGpioIoDescriptor (
1171 ACPI_PARSE_OBJECT *Op,
1172 UINT32 CurrentByteOffset);
1175 RsDoI2cSerialBusDescriptor (
1176 ACPI_PARSE_OBJECT *Op,
1177 UINT32 CurrentByteOffset);
1180 RsDoSpiSerialBusDescriptor (
1181 ACPI_PARSE_OBJECT *Op,
1182 UINT32 CurrentByteOffset);
1185 RsDoUartSerialBusDescriptor (
1186 ACPI_PARSE_OBJECT *Op,
1187 UINT32 CurrentByteOffset);
1190 * aslrestype2d - DWord address descriptors
1193 RsDoDwordIoDescriptor (
1194 ACPI_PARSE_OBJECT *Op,
1195 UINT32 CurrentByteOffset);
1198 RsDoDwordMemoryDescriptor (
1199 ACPI_PARSE_OBJECT *Op,
1200 UINT32 CurrentByteOffset);
1203 RsDoDwordSpaceDescriptor (
1204 ACPI_PARSE_OBJECT *Op,
1205 UINT32 CurrentByteOffset);
1209 * aslrestype2e - Extended address descriptors
1212 RsDoExtendedIoDescriptor (
1213 ACPI_PARSE_OBJECT *Op,
1214 UINT32 CurrentByteOffset);
1217 RsDoExtendedMemoryDescriptor (
1218 ACPI_PARSE_OBJECT *Op,
1219 UINT32 CurrentByteOffset);
1222 RsDoExtendedSpaceDescriptor (
1223 ACPI_PARSE_OBJECT *Op,
1224 UINT32 CurrentByteOffset);
1228 * aslrestype2q - QWord address descriptors
1231 RsDoQwordIoDescriptor (
1232 ACPI_PARSE_OBJECT *Op,
1233 UINT32 CurrentByteOffset);
1236 RsDoQwordMemoryDescriptor (
1237 ACPI_PARSE_OBJECT *Op,
1238 UINT32 CurrentByteOffset);
1241 RsDoQwordSpaceDescriptor (
1242 ACPI_PARSE_OBJECT *Op,
1243 UINT32 CurrentByteOffset);
1247 * aslrestype2w - Word address descriptors
1250 RsDoWordIoDescriptor (
1251 ACPI_PARSE_OBJECT *Op,
1252 UINT32 CurrentByteOffset);
1255 RsDoWordSpaceDescriptor (
1256 ACPI_PARSE_OBJECT *Op,
1257 UINT32 CurrentByteOffset);
1260 RsDoWordBusNumberDescriptor (
1261 ACPI_PARSE_OBJECT *Op,
1262 UINT32 CurrentByteOffset);
1265 * Entry to data table compiler subsystem
1275 #endif /* __ASLCOMPILER_H */