1 /******************************************************************************
3 * Module Name: aslcompiler.h - common include file for iASL
5 *****************************************************************************/
8 * Copyright (C) 2000 - 2015, 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 * aslprintf - Printf/Fprintf macros
550 ACPI_PARSE_OBJECT *Op);
554 ACPI_PARSE_OBJECT *Op);
558 * aslprune - parse tree pruner
567 * aslcodegen - code generation
570 CgGenerateAmlOutput (
585 * asllength - calculate/adjust AML package lengths
588 LnPackageLengthWalk (
589 ACPI_PARSE_OBJECT *Op,
595 ACPI_PARSE_OBJECT *Op,
600 CgGenerateAmlLengths (
601 ACPI_PARSE_OBJECT *Op);
605 * aslmap - opcode mappings and reserved method names
608 AslMapNamedOpcodeToDataType (
613 * aslpredef - ACPI predefined names support
616 ApCheckForPredefinedMethod (
617 ACPI_PARSE_OBJECT *Op,
618 ASL_METHOD_INFO *MethodInfo);
621 ApCheckPredefinedReturnValue (
622 ACPI_PARSE_OBJECT *Op,
623 ASL_METHOD_INFO *MethodInfo);
626 ApCheckForPredefinedName (
627 ACPI_PARSE_OBJECT *Op,
631 ApCheckForPredefinedObject (
632 ACPI_PARSE_OBJECT *Op,
637 const char *PredefinedName,
638 ACPI_PARSE_OBJECT *Op,
639 UINT32 ExpectedBtypes,
640 UINT32 PackageIndex);
643 ApDisplayReservedNames (
648 * aslprepkg - ACPI predefined names support for packages
652 ACPI_PARSE_OBJECT *ParentOp,
653 const ACPI_PREDEFINED_INFO *Predefined);
657 * asltransform - parse tree transformations
661 ACPI_PARSE_OBJECT *Op,
667 * asltree - parse tree support
671 ACPI_PARSE_OBJECT *Op,
673 ASL_WALK_CALLBACK DescendingCallback,
674 ASL_WALK_CALLBACK AscendingCallback,
677 /* Values for "Visitation" parameter above */
679 #define ASL_WALK_VISIT_DOWNWARD 0x01
680 #define ASL_WALK_VISIT_UPWARD 0x02
681 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
689 TrPrintNodeCompileFlags (
694 ACPI_PARSE_OBJECT *Op);
699 ACPI_PARSE_OBJECT *Op);
716 TrCreateAssignmentNode (
717 ACPI_PARSE_OBJECT *Target,
718 ACPI_PARSE_OBJECT *Source);
721 TrCreateTargetOperand (
722 ACPI_PARSE_OBJECT *OriginalOp,
723 ACPI_PARSE_OBJECT *ParentOp);
726 TrCreateValuedLeafNode (
731 TrCreateConstantLeafNode (
736 ACPI_PARSE_OBJECT *Op,
742 ACPI_PARSE_OBJECT *Op);
750 ACPI_PARSE_OBJECT *Op1,
751 ACPI_PARSE_OBJECT *Op2);
755 ACPI_PARSE_OBJECT *Op1,
756 ACPI_PARSE_OBJECT *Op2);
760 ACPI_PARSE_OBJECT *Op,
765 ACPI_PARSE_OBJECT *Op,
775 * aslfiles - File I/O support
778 FlAddIncludeDirectory (
788 ACPI_PARSE_OBJECT *Op);
840 char *InputFilename);
843 FlOpenAmlOutputFile (
844 char *InputFilename);
847 FlOpenMiscOutputFiles (
848 char *InputFilename);
851 * aslhwmap - hardware map summary
859 * asload - load namespace in prep for cross reference
863 ACPI_PARSE_OBJECT *RootOp);
867 * asllookup - namespace lookup functions
870 LkFindUnreferencedObjects (
886 * aslnamesp - namespace output file generation
893 NsSetupNamespaceListing (
897 * asloptions - command line processing
905 * aslxref - namespace cross reference
908 XfCrossReferenceNamespace (
913 * aslutils - common compiler utilites
921 /* Type values for above */
923 #define ASL_DEBUG_OUTPUT 0
924 #define ASL_PARSE_OUTPUT 1
925 #define ASL_TREE_OUTPUT 2
928 UtDisplaySupportedTables (
932 UtDisplayConstantOpcodes (
948 UtPrintFormattedName (
962 UtConvertByteToAsmHex (
972 ACPI_PARSE_OBJECT *Op);
975 UtStringCacheCalloc (
979 UtExpandLineBuffers (
989 char **ConvertedName);
992 UtAttachNamepathToOwner (
993 ACPI_PARSE_OBJECT *Op,
994 ACPI_PARSE_OBJECT *NameNode);
997 UtCheckIntegerRange (
998 ACPI_PARSE_OBJECT *Op,
1010 UINT64 *RetInteger);
1014 * asluuid - UUID support
1021 AuConvertUuidToString (
1026 * aslresource - Resource template generation utilities
1029 RsSmallAddressCheck (
1035 ACPI_PARSE_OBJECT *MinOp,
1036 ACPI_PARSE_OBJECT *MaxOp,
1037 ACPI_PARSE_OBJECT *LengthOp,
1038 ACPI_PARSE_OBJECT *AlignOp,
1039 ACPI_PARSE_OBJECT *Op);
1042 RsLargeAddressCheck (
1048 ACPI_PARSE_OBJECT *MinOp,
1049 ACPI_PARSE_OBJECT *MaxOp,
1050 ACPI_PARSE_OBJECT *LengthOp,
1051 ACPI_PARSE_OBJECT *GranOp,
1052 ACPI_PARSE_OBJECT *Op);
1055 RsGetStringDataLength (
1056 ACPI_PARSE_OBJECT *InitializerOp);
1059 RsAllocateResourceNode (
1063 RsCreateResourceField (
1064 ACPI_PARSE_OBJECT *Op,
1073 ACPI_PARSE_OBJECT *Op,
1080 ACPI_PARSE_OBJECT *Op,
1085 RsCompleteNodeAndGetNext (
1086 ACPI_PARSE_OBJECT *Op);
1089 RsCheckListForDuplicates (
1090 ACPI_PARSE_OBJECT *Op);
1093 RsDoOneResourceDescriptor (
1094 ASL_RESOURCE_INFO *Info,
1097 /* Values for State above */
1099 #define ACPI_RSTATE_NORMAL 0
1100 #define ACPI_RSTATE_START_DEPENDENT 1
1101 #define ACPI_RSTATE_DEPENDENT_LIST 2
1104 RsLinkDescriptorChain (
1105 ASL_RESOURCE_NODE **PreviousRnode,
1106 ASL_RESOURCE_NODE *Rnode);
1109 RsDoResourceTemplate (
1110 ACPI_PARSE_OBJECT *Op);
1114 * aslrestype1 - Miscellaneous Small descriptors
1117 RsDoEndTagDescriptor (
1118 ASL_RESOURCE_INFO *Info);
1121 RsDoEndDependentDescriptor (
1122 ASL_RESOURCE_INFO *Info);
1125 RsDoMemory24Descriptor (
1126 ASL_RESOURCE_INFO *Info);
1129 RsDoMemory32Descriptor (
1130 ASL_RESOURCE_INFO *Info);
1133 RsDoMemory32FixedDescriptor (
1134 ASL_RESOURCE_INFO *Info);
1137 RsDoStartDependentDescriptor (
1138 ASL_RESOURCE_INFO *Info);
1141 RsDoStartDependentNoPriDescriptor (
1142 ASL_RESOURCE_INFO *Info);
1145 RsDoVendorSmallDescriptor (
1146 ASL_RESOURCE_INFO *Info);
1150 * aslrestype1i - I/O-related Small descriptors
1154 ASL_RESOURCE_INFO *Info);
1157 RsDoFixedDmaDescriptor (
1158 ASL_RESOURCE_INFO *Info);
1161 RsDoFixedIoDescriptor (
1162 ASL_RESOURCE_INFO *Info);
1166 ASL_RESOURCE_INFO *Info);
1170 ASL_RESOURCE_INFO *Info);
1173 RsDoIrqNoFlagsDescriptor (
1174 ASL_RESOURCE_INFO *Info);
1178 * aslrestype2 - Large resource descriptors
1181 RsDoInterruptDescriptor (
1182 ASL_RESOURCE_INFO *Info);
1185 RsDoVendorLargeDescriptor (
1186 ASL_RESOURCE_INFO *Info);
1189 RsDoGeneralRegisterDescriptor (
1190 ASL_RESOURCE_INFO *Info);
1193 RsDoGpioIntDescriptor (
1194 ASL_RESOURCE_INFO *Info);
1197 RsDoGpioIoDescriptor (
1198 ASL_RESOURCE_INFO *Info);
1201 RsDoI2cSerialBusDescriptor (
1202 ASL_RESOURCE_INFO *Info);
1205 RsDoSpiSerialBusDescriptor (
1206 ASL_RESOURCE_INFO *Info);
1209 RsDoUartSerialBusDescriptor (
1210 ASL_RESOURCE_INFO *Info);
1213 * aslrestype2d - DWord address descriptors
1216 RsDoDwordIoDescriptor (
1217 ASL_RESOURCE_INFO *Info);
1220 RsDoDwordMemoryDescriptor (
1221 ASL_RESOURCE_INFO *Info);
1224 RsDoDwordSpaceDescriptor (
1225 ASL_RESOURCE_INFO *Info);
1229 * aslrestype2e - Extended address descriptors
1232 RsDoExtendedIoDescriptor (
1233 ASL_RESOURCE_INFO *Info);
1236 RsDoExtendedMemoryDescriptor (
1237 ASL_RESOURCE_INFO *Info);
1240 RsDoExtendedSpaceDescriptor (
1241 ASL_RESOURCE_INFO *Info);
1245 * aslrestype2q - QWord address descriptors
1248 RsDoQwordIoDescriptor (
1249 ASL_RESOURCE_INFO *Info);
1252 RsDoQwordMemoryDescriptor (
1253 ASL_RESOURCE_INFO *Info);
1256 RsDoQwordSpaceDescriptor (
1257 ASL_RESOURCE_INFO *Info);
1261 * aslrestype2w - Word address descriptors
1264 RsDoWordIoDescriptor (
1265 ASL_RESOURCE_INFO *Info);
1268 RsDoWordSpaceDescriptor (
1269 ASL_RESOURCE_INFO *Info);
1272 RsDoWordBusNumberDescriptor (
1273 ASL_RESOURCE_INFO *Info);
1277 * Entry to data table compiler subsystem
1287 #endif /* __ASLCOMPILER_H */