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);
292 * aslerror - error handling/reporting
302 ACPI_PARSE_OBJECT *Op,
306 AslDisableException (
307 char *MessageIdString);
310 AslIsExceptionDisabled (
315 AslCoreSubsystemError (
316 ACPI_PARSE_OBJECT *Op,
329 UINT32 CurrentLineNumber,
330 UINT32 LogicalLineNumber,
331 UINT32 LogicalByteOffset,
349 ASL_ERROR_MSG *Enode,
362 * asllisting - generate all "listing" type files
369 LsWriteNodeToAsmListing (
370 ACPI_PARSE_OBJECT *Op);
374 ACPI_PARSE_OBJECT *Op,
383 * asllistsup - Listing file support utilities
392 LsDumpAsciiInComment (
403 LsFlushListingBuffer (
407 LsWriteListingHexBytes (
415 UINT32 ToLogicalLineNumber,
419 LsWriteOneSourceLine (
432 * aslhex - generate all "hex" output files (C, ASM, ASL)
440 * aslfold - constant folding
444 ACPI_PARSE_OBJECT *Op,
450 * aslmessages - exception strings
457 AeDecodeExceptionLevel (
461 AeBuildFullExceptionCode (
466 * asloffset - generate C offset file for BIOS support
470 ACPI_PARSE_OBJECT *Op,
475 LsDoOffsetTableHeader (
479 LsDoOffsetTableFooter (
484 * aslopcodes - generate AML opcodes
488 ACPI_PARSE_OBJECT *Op,
493 OpcAmlOpcodeUpdateWalk (
494 ACPI_PARSE_OBJECT *Op,
499 OpcGenerateAmlOpcode (
500 ACPI_PARSE_OBJECT *Op);
503 OpcSetOptimalIntegerSize (
504 ACPI_PARSE_OBJECT *Op);
508 ACPI_PARSE_OBJECT *Op);
512 * asloperands - generate AML operands for the AML opcodes
516 ACPI_PARSE_OBJECT *Op,
520 OpnGenerateAmlOperands (
521 ACPI_PARSE_OBJECT *Op);
525 ACPI_PARSE_OBJECT *Op);
529 * aslopt - optmization
532 OptOptimizeNamePath (
533 ACPI_PARSE_OBJECT *Op,
535 ACPI_WALK_STATE *WalkState,
537 ACPI_NAMESPACE_NODE *TargetNode);
541 * aslpld - ToPLD macro support
545 ACPI_PARSE_OBJECT *Op);
549 * aslprintf - Printf/Fprintf macros
553 ACPI_PARSE_OBJECT *Op);
557 ACPI_PARSE_OBJECT *Op);
561 * aslprune - parse tree pruner
570 * aslcodegen - code generation
573 CgGenerateAmlOutput (
588 * asllength - calculate/adjust AML package lengths
591 LnPackageLengthWalk (
592 ACPI_PARSE_OBJECT *Op,
598 ACPI_PARSE_OBJECT *Op,
603 CgGenerateAmlLengths (
604 ACPI_PARSE_OBJECT *Op);
608 * aslmap - opcode mappings and reserved method names
611 AslMapNamedOpcodeToDataType (
616 * aslpredef - ACPI predefined names support
619 ApCheckForPredefinedMethod (
620 ACPI_PARSE_OBJECT *Op,
621 ASL_METHOD_INFO *MethodInfo);
624 ApCheckPredefinedReturnValue (
625 ACPI_PARSE_OBJECT *Op,
626 ASL_METHOD_INFO *MethodInfo);
629 ApCheckForPredefinedName (
630 ACPI_PARSE_OBJECT *Op,
634 ApCheckForPredefinedObject (
635 ACPI_PARSE_OBJECT *Op,
640 const char *PredefinedName,
641 ACPI_PARSE_OBJECT *Op,
642 UINT32 ExpectedBtypes,
643 UINT32 PackageIndex);
646 ApDisplayReservedNames (
651 * aslprepkg - ACPI predefined names support for packages
655 ACPI_PARSE_OBJECT *ParentOp,
656 const ACPI_PREDEFINED_INFO *Predefined);
660 * asltransform - parse tree transformations
663 TrAmlTransformWalkBegin (
664 ACPI_PARSE_OBJECT *Op,
669 TrAmlTransformWalkEnd (
670 ACPI_PARSE_OBJECT *Op,
676 * asltree - parse tree support
680 ACPI_PARSE_OBJECT *Op,
682 ASL_WALK_CALLBACK DescendingCallback,
683 ASL_WALK_CALLBACK AscendingCallback,
687 * aslexternal - External opcode support
690 ExAmlExternalWalkBegin (
691 ACPI_PARSE_OBJECT *Op,
696 ExAmlExternalWalkEnd (
697 ACPI_PARSE_OBJECT *Op,
703 ACPI_PARSE_OBJECT *Op);
705 /* Values for "Visitation" parameter above */
707 #define ASL_WALK_VISIT_DOWNWARD 0x01
708 #define ASL_WALK_VISIT_UPWARD 0x02
709 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
717 TrPrintNodeCompileFlags (
722 ACPI_PARSE_OBJECT *Op);
727 ACPI_PARSE_OBJECT *Op);
744 TrCreateAssignmentNode (
745 ACPI_PARSE_OBJECT *Target,
746 ACPI_PARSE_OBJECT *Source);
749 TrCreateTargetOperand (
750 ACPI_PARSE_OBJECT *OriginalOp,
751 ACPI_PARSE_OBJECT *ParentOp);
754 TrCreateValuedLeafNode (
759 TrCreateConstantLeafNode (
764 ACPI_PARSE_OBJECT *Op,
770 ACPI_PARSE_OBJECT *Op);
773 TrSetCurrentFilename (
774 ACPI_PARSE_OBJECT *Op);
782 ACPI_PARSE_OBJECT *Op1,
783 ACPI_PARSE_OBJECT *Op2);
787 ACPI_PARSE_OBJECT *Op1,
788 ACPI_PARSE_OBJECT *Op2);
792 ACPI_PARSE_OBJECT *Op,
797 ACPI_PARSE_OBJECT *Op,
807 * aslfiles - File I/O support
810 FlAddIncludeDirectory (
820 ACPI_PARSE_OBJECT *Op);
872 char *InputFilename);
875 FlOpenAmlOutputFile (
876 char *InputFilename);
879 FlOpenMiscOutputFiles (
880 char *InputFilename);
883 * aslhwmap - hardware map summary
891 * asload - load namespace in prep for cross reference
895 ACPI_PARSE_OBJECT *RootOp);
899 * asllookup - namespace lookup functions
902 LkFindUnreferencedObjects (
918 * aslnamesp - namespace output file generation
925 NsSetupNamespaceListing (
929 * asloptions - command line processing
937 * aslxref - namespace cross reference
940 XfCrossReferenceNamespace (
957 ACPI_PARSE_OBJECT *Op,
959 ASL_METHOD_INFO *MethodInfo);
963 * aslutils - common compiler utilites
971 /* Type values for above */
973 #define ASL_DEBUG_OUTPUT 0
974 #define ASL_PARSE_OUTPUT 1
975 #define ASL_TREE_OUTPUT 2
978 UtIsBigEndianMachine (
982 UtQueryForOverwrite (
987 ACPI_PARSE_OBJECT *Op,
992 ACPI_PARSE_OBJECT *Op,
994 UINT32 IntegerLength);
998 ACPI_PARSE_OBJECT *Op,
1002 UtDisplaySupportedTables (
1006 UtDisplayConstantOpcodes (
1026 UtConvertByteToHex (
1031 UtConvertByteToAsmHex (
1037 UINT32 ParseOpcode);
1041 ACPI_PARSE_OBJECT *Op);
1044 UtStringCacheCalloc (
1048 UtExpandLineBuffers (
1058 char **ConvertedName);
1061 UtAttachNamepathToOwner (
1062 ACPI_PARSE_OBJECT *Op,
1063 ACPI_PARSE_OBJECT *NameNode);
1066 UtCheckIntegerRange (
1067 ACPI_PARSE_OBJECT *Op,
1077 * asluuid - UUID support
1084 AuConvertUuidToString (
1089 * aslresource - Resource template generation utilities
1092 RsSmallAddressCheck (
1098 ACPI_PARSE_OBJECT *MinOp,
1099 ACPI_PARSE_OBJECT *MaxOp,
1100 ACPI_PARSE_OBJECT *LengthOp,
1101 ACPI_PARSE_OBJECT *AlignOp,
1102 ACPI_PARSE_OBJECT *Op);
1105 RsLargeAddressCheck (
1111 ACPI_PARSE_OBJECT *MinOp,
1112 ACPI_PARSE_OBJECT *MaxOp,
1113 ACPI_PARSE_OBJECT *LengthOp,
1114 ACPI_PARSE_OBJECT *GranOp,
1115 ACPI_PARSE_OBJECT *Op);
1118 RsGetStringDataLength (
1119 ACPI_PARSE_OBJECT *InitializerOp);
1122 RsAllocateResourceNode (
1126 RsCreateResourceField (
1127 ACPI_PARSE_OBJECT *Op,
1136 ACPI_PARSE_OBJECT *Op,
1143 ACPI_PARSE_OBJECT *Op,
1148 RsCompleteNodeAndGetNext (
1149 ACPI_PARSE_OBJECT *Op);
1152 RsCheckListForDuplicates (
1153 ACPI_PARSE_OBJECT *Op);
1156 RsDoOneResourceDescriptor (
1157 ASL_RESOURCE_INFO *Info,
1160 /* Values for State above */
1162 #define ACPI_RSTATE_NORMAL 0
1163 #define ACPI_RSTATE_START_DEPENDENT 1
1164 #define ACPI_RSTATE_DEPENDENT_LIST 2
1167 RsLinkDescriptorChain (
1168 ASL_RESOURCE_NODE **PreviousRnode,
1169 ASL_RESOURCE_NODE *Rnode);
1172 RsDoResourceTemplate (
1173 ACPI_PARSE_OBJECT *Op);
1177 * aslrestype1 - Miscellaneous Small descriptors
1180 RsDoEndTagDescriptor (
1181 ASL_RESOURCE_INFO *Info);
1184 RsDoEndDependentDescriptor (
1185 ASL_RESOURCE_INFO *Info);
1188 RsDoMemory24Descriptor (
1189 ASL_RESOURCE_INFO *Info);
1192 RsDoMemory32Descriptor (
1193 ASL_RESOURCE_INFO *Info);
1196 RsDoMemory32FixedDescriptor (
1197 ASL_RESOURCE_INFO *Info);
1200 RsDoStartDependentDescriptor (
1201 ASL_RESOURCE_INFO *Info);
1204 RsDoStartDependentNoPriDescriptor (
1205 ASL_RESOURCE_INFO *Info);
1208 RsDoVendorSmallDescriptor (
1209 ASL_RESOURCE_INFO *Info);
1213 * aslrestype1i - I/O-related Small descriptors
1217 ASL_RESOURCE_INFO *Info);
1220 RsDoFixedDmaDescriptor (
1221 ASL_RESOURCE_INFO *Info);
1224 RsDoFixedIoDescriptor (
1225 ASL_RESOURCE_INFO *Info);
1229 ASL_RESOURCE_INFO *Info);
1233 ASL_RESOURCE_INFO *Info);
1236 RsDoIrqNoFlagsDescriptor (
1237 ASL_RESOURCE_INFO *Info);
1241 * aslrestype2 - Large resource descriptors
1244 RsDoInterruptDescriptor (
1245 ASL_RESOURCE_INFO *Info);
1248 RsDoVendorLargeDescriptor (
1249 ASL_RESOURCE_INFO *Info);
1252 RsDoGeneralRegisterDescriptor (
1253 ASL_RESOURCE_INFO *Info);
1256 RsDoGpioIntDescriptor (
1257 ASL_RESOURCE_INFO *Info);
1260 RsDoGpioIoDescriptor (
1261 ASL_RESOURCE_INFO *Info);
1264 RsDoI2cSerialBusDescriptor (
1265 ASL_RESOURCE_INFO *Info);
1268 RsDoSpiSerialBusDescriptor (
1269 ASL_RESOURCE_INFO *Info);
1272 RsDoUartSerialBusDescriptor (
1273 ASL_RESOURCE_INFO *Info);
1276 * aslrestype2d - DWord address descriptors
1279 RsDoDwordIoDescriptor (
1280 ASL_RESOURCE_INFO *Info);
1283 RsDoDwordMemoryDescriptor (
1284 ASL_RESOURCE_INFO *Info);
1287 RsDoDwordSpaceDescriptor (
1288 ASL_RESOURCE_INFO *Info);
1292 * aslrestype2e - Extended address descriptors
1295 RsDoExtendedIoDescriptor (
1296 ASL_RESOURCE_INFO *Info);
1299 RsDoExtendedMemoryDescriptor (
1300 ASL_RESOURCE_INFO *Info);
1303 RsDoExtendedSpaceDescriptor (
1304 ASL_RESOURCE_INFO *Info);
1308 * aslrestype2q - QWord address descriptors
1311 RsDoQwordIoDescriptor (
1312 ASL_RESOURCE_INFO *Info);
1315 RsDoQwordMemoryDescriptor (
1316 ASL_RESOURCE_INFO *Info);
1319 RsDoQwordSpaceDescriptor (
1320 ASL_RESOURCE_INFO *Info);
1324 * aslrestype2w - Word address descriptors
1327 RsDoWordIoDescriptor (
1328 ASL_RESOURCE_INFO *Info);
1331 RsDoWordSpaceDescriptor (
1332 ASL_RESOURCE_INFO *Info);
1335 RsDoWordBusNumberDescriptor (
1336 ASL_RESOURCE_INFO *Info);
1340 * Entry to data table compiler subsystem
1350 #endif /* __ASLCOMPILER_H */