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 (
176 BOOLEAN DisplayErrors);
180 * aslwalks - semantic analysis and parse tree walks
183 AnOtherSemanticAnalysisWalkBegin (
184 ACPI_PARSE_OBJECT *Op,
189 AnOtherSemanticAnalysisWalkEnd (
190 ACPI_PARSE_OBJECT *Op,
195 AnOperandTypecheckWalkEnd (
196 ACPI_PARSE_OBJECT *Op,
201 AnMethodTypingWalkEnd (
202 ACPI_PARSE_OBJECT *Op,
208 * aslmethod - Control method analysis walk
211 MtMethodAnalysisWalkBegin (
212 ACPI_PARSE_OBJECT *Op,
217 MtMethodAnalysisWalkEnd (
218 ACPI_PARSE_OBJECT *Op,
224 * aslbtypes - bitfield data types
227 AnMapObjTypeToBtype (
228 ACPI_PARSE_OBJECT *Op);
231 AnMapArgTypeToBtype (
236 ACPI_PARSE_OBJECT *Op);
245 * aslanalyze - Support functions for parse tree walks
249 ACPI_PARSE_OBJECT *Op,
252 /* Values for Type argument above */
254 #define ASL_TYPE_HID 0
255 #define ASL_TYPE_CID 1
259 ACPI_PARSE_OBJECT *Op);
262 AnGetInternalMethodReturnType (
263 ACPI_PARSE_OBJECT *Op);
266 AnLastStatementIsReturn (
267 ACPI_PARSE_OBJECT *Op);
270 AnCheckMethodReturnValue (
271 ACPI_PARSE_OBJECT *Op,
272 const ACPI_OPCODE_INFO *OpInfo,
273 ACPI_PARSE_OBJECT *ArgOp,
274 UINT32 RequiredBtypes,
275 UINT32 ThisNodeBtype);
279 ACPI_PARSE_OBJECT *Op);
282 ApCheckForGpeNameConflict (
283 ACPI_PARSE_OBJECT *Op);
287 ACPI_PARSE_OBJECT *Op);
292 ACPI_PARSE_OBJECT *Op);
296 * aslerror - error handling/reporting
306 ACPI_PARSE_OBJECT *Op,
310 AslDisableException (
311 char *MessageIdString);
314 AslIsExceptionDisabled (
319 AslCoreSubsystemError (
320 ACPI_PARSE_OBJECT *Op,
333 UINT32 CurrentLineNumber,
334 UINT32 LogicalLineNumber,
335 UINT32 LogicalByteOffset,
353 ASL_ERROR_MSG *Enode,
366 * asllisting - generate all "listing" type files
373 LsWriteNodeToAsmListing (
374 ACPI_PARSE_OBJECT *Op);
378 ACPI_PARSE_OBJECT *Op,
387 * asllistsup - Listing file support utilities
396 LsDumpAsciiInComment (
407 LsFlushListingBuffer (
411 LsWriteListingHexBytes (
419 UINT32 ToLogicalLineNumber,
423 LsWriteOneSourceLine (
436 * aslhex - generate all "hex" output files (C, ASM, ASL)
444 * aslfold - constant folding
448 ACPI_PARSE_OBJECT *Op,
454 * aslmessages - exception strings
461 AeDecodeExceptionLevel (
465 AeBuildFullExceptionCode (
470 * asloffset - generate C offset file for BIOS support
474 ACPI_PARSE_OBJECT *Op,
479 LsDoOffsetTableHeader (
483 LsDoOffsetTableFooter (
488 * aslopcodes - generate AML opcodes
492 ACPI_PARSE_OBJECT *Op,
497 OpcAmlOpcodeUpdateWalk (
498 ACPI_PARSE_OBJECT *Op,
503 OpcGenerateAmlOpcode (
504 ACPI_PARSE_OBJECT *Op);
507 OpcSetOptimalIntegerSize (
508 ACPI_PARSE_OBJECT *Op);
512 ACPI_PARSE_OBJECT *Op);
516 * asloperands - generate AML operands for the AML opcodes
520 ACPI_PARSE_OBJECT *Op,
524 OpnGenerateAmlOperands (
525 ACPI_PARSE_OBJECT *Op);
529 ACPI_PARSE_OBJECT *Op);
533 * aslopt - optmization
536 OptOptimizeNamePath (
537 ACPI_PARSE_OBJECT *Op,
539 ACPI_WALK_STATE *WalkState,
541 ACPI_NAMESPACE_NODE *TargetNode);
545 * aslprintf - Printf/Fprintf macros
549 ACPI_PARSE_OBJECT *Op);
553 ACPI_PARSE_OBJECT *Op);
557 * aslprune - parse tree pruner
566 * aslcodegen - code generation
569 CgGenerateAmlOutput (
584 * asllength - calculate/adjust AML package lengths
587 LnPackageLengthWalk (
588 ACPI_PARSE_OBJECT *Op,
594 ACPI_PARSE_OBJECT *Op,
599 CgGenerateAmlLengths (
600 ACPI_PARSE_OBJECT *Op);
604 * aslmap - opcode mappings and reserved method names
607 AslMapNamedOpcodeToDataType (
612 * aslpredef - ACPI predefined names support
615 ApCheckForPredefinedMethod (
616 ACPI_PARSE_OBJECT *Op,
617 ASL_METHOD_INFO *MethodInfo);
620 ApCheckPredefinedReturnValue (
621 ACPI_PARSE_OBJECT *Op,
622 ASL_METHOD_INFO *MethodInfo);
625 ApCheckForPredefinedName (
626 ACPI_PARSE_OBJECT *Op,
630 ApCheckForPredefinedObject (
631 ACPI_PARSE_OBJECT *Op,
636 const char *PredefinedName,
637 ACPI_PARSE_OBJECT *Op,
638 UINT32 ExpectedBtypes,
639 UINT32 PackageIndex);
642 ApDisplayReservedNames (
647 * aslprepkg - ACPI predefined names support for packages
651 ACPI_PARSE_OBJECT *ParentOp,
652 const ACPI_PREDEFINED_INFO *Predefined);
656 * asltransform - parse tree transformations
660 ACPI_PARSE_OBJECT *Op,
666 * asltree - parse tree support
670 ACPI_PARSE_OBJECT *Op,
672 ASL_WALK_CALLBACK DescendingCallback,
673 ASL_WALK_CALLBACK AscendingCallback,
676 /* Values for "Visitation" parameter above */
678 #define ASL_WALK_VISIT_DOWNWARD 0x01
679 #define ASL_WALK_VISIT_UPWARD 0x02
680 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
688 TrPrintNodeCompileFlags (
693 ACPI_PARSE_OBJECT *Op);
698 ACPI_PARSE_OBJECT *Op);
715 TrCreateAssignmentNode (
716 ACPI_PARSE_OBJECT *Target,
717 ACPI_PARSE_OBJECT *Source);
720 TrCreateTargetOperand (
721 ACPI_PARSE_OBJECT *OriginalOp,
722 ACPI_PARSE_OBJECT *ParentOp);
725 TrCreateValuedLeafNode (
730 TrCreateConstantLeafNode (
735 ACPI_PARSE_OBJECT *Op,
741 ACPI_PARSE_OBJECT *Op);
749 ACPI_PARSE_OBJECT *Op1,
750 ACPI_PARSE_OBJECT *Op2);
754 ACPI_PARSE_OBJECT *Op1,
755 ACPI_PARSE_OBJECT *Op2);
759 ACPI_PARSE_OBJECT *Op,
764 ACPI_PARSE_OBJECT *Op,
774 * aslfiles - File I/O support
777 FlAddIncludeDirectory (
787 ACPI_PARSE_OBJECT *Op);
839 char *InputFilename);
842 FlOpenAmlOutputFile (
843 char *InputFilename);
846 FlOpenMiscOutputFiles (
847 char *InputFilename);
850 * aslhwmap - hardware map summary
858 * asload - load namespace in prep for cross reference
862 ACPI_PARSE_OBJECT *RootOp);
866 * asllookup - namespace lookup functions
869 LkFindUnreferencedObjects (
885 * aslnamesp - namespace output file generation
892 NsSetupNamespaceListing (
896 * asloptions - command line processing
904 * aslxref - namespace cross reference
907 XfCrossReferenceNamespace (
912 * aslutils - common compiler utilites
920 /* Type values for above */
922 #define ASL_DEBUG_OUTPUT 0
923 #define ASL_PARSE_OUTPUT 1
924 #define ASL_TREE_OUTPUT 2
927 UtDisplaySupportedTables (
931 UtDisplayConstantOpcodes (
947 UtPrintFormattedName (
961 UtConvertByteToAsmHex (
971 ACPI_PARSE_OBJECT *Op);
974 UtStringCacheCalloc (
978 UtExpandLineBuffers (
988 char **ConvertedName);
991 UtAttachNamepathToOwner (
992 ACPI_PARSE_OBJECT *Op,
993 ACPI_PARSE_OBJECT *NameNode);
996 UtCheckIntegerRange (
997 ACPI_PARSE_OBJECT *Op,
1009 UINT64 *RetInteger);
1013 * asluuid - UUID support
1020 AuConvertUuidToString (
1025 * aslresource - Resource template generation utilities
1028 RsSmallAddressCheck (
1034 ACPI_PARSE_OBJECT *MinOp,
1035 ACPI_PARSE_OBJECT *MaxOp,
1036 ACPI_PARSE_OBJECT *LengthOp,
1037 ACPI_PARSE_OBJECT *AlignOp,
1038 ACPI_PARSE_OBJECT *Op);
1041 RsLargeAddressCheck (
1047 ACPI_PARSE_OBJECT *MinOp,
1048 ACPI_PARSE_OBJECT *MaxOp,
1049 ACPI_PARSE_OBJECT *LengthOp,
1050 ACPI_PARSE_OBJECT *GranOp,
1051 ACPI_PARSE_OBJECT *Op);
1054 RsGetStringDataLength (
1055 ACPI_PARSE_OBJECT *InitializerOp);
1058 RsAllocateResourceNode (
1062 RsCreateResourceField (
1063 ACPI_PARSE_OBJECT *Op,
1072 ACPI_PARSE_OBJECT *Op,
1079 ACPI_PARSE_OBJECT *Op,
1084 RsCompleteNodeAndGetNext (
1085 ACPI_PARSE_OBJECT *Op);
1088 RsCheckListForDuplicates (
1089 ACPI_PARSE_OBJECT *Op);
1092 RsDoOneResourceDescriptor (
1093 ASL_RESOURCE_INFO *Info,
1096 /* Values for State above */
1098 #define ACPI_RSTATE_NORMAL 0
1099 #define ACPI_RSTATE_START_DEPENDENT 1
1100 #define ACPI_RSTATE_DEPENDENT_LIST 2
1103 RsLinkDescriptorChain (
1104 ASL_RESOURCE_NODE **PreviousRnode,
1105 ASL_RESOURCE_NODE *Rnode);
1108 RsDoResourceTemplate (
1109 ACPI_PARSE_OBJECT *Op);
1113 * aslrestype1 - Miscellaneous Small descriptors
1116 RsDoEndTagDescriptor (
1117 ASL_RESOURCE_INFO *Info);
1120 RsDoEndDependentDescriptor (
1121 ASL_RESOURCE_INFO *Info);
1124 RsDoMemory24Descriptor (
1125 ASL_RESOURCE_INFO *Info);
1128 RsDoMemory32Descriptor (
1129 ASL_RESOURCE_INFO *Info);
1132 RsDoMemory32FixedDescriptor (
1133 ASL_RESOURCE_INFO *Info);
1136 RsDoStartDependentDescriptor (
1137 ASL_RESOURCE_INFO *Info);
1140 RsDoStartDependentNoPriDescriptor (
1141 ASL_RESOURCE_INFO *Info);
1144 RsDoVendorSmallDescriptor (
1145 ASL_RESOURCE_INFO *Info);
1149 * aslrestype1i - I/O-related Small descriptors
1153 ASL_RESOURCE_INFO *Info);
1156 RsDoFixedDmaDescriptor (
1157 ASL_RESOURCE_INFO *Info);
1160 RsDoFixedIoDescriptor (
1161 ASL_RESOURCE_INFO *Info);
1165 ASL_RESOURCE_INFO *Info);
1169 ASL_RESOURCE_INFO *Info);
1172 RsDoIrqNoFlagsDescriptor (
1173 ASL_RESOURCE_INFO *Info);
1177 * aslrestype2 - Large resource descriptors
1180 RsDoInterruptDescriptor (
1181 ASL_RESOURCE_INFO *Info);
1184 RsDoVendorLargeDescriptor (
1185 ASL_RESOURCE_INFO *Info);
1188 RsDoGeneralRegisterDescriptor (
1189 ASL_RESOURCE_INFO *Info);
1192 RsDoGpioIntDescriptor (
1193 ASL_RESOURCE_INFO *Info);
1196 RsDoGpioIoDescriptor (
1197 ASL_RESOURCE_INFO *Info);
1200 RsDoI2cSerialBusDescriptor (
1201 ASL_RESOURCE_INFO *Info);
1204 RsDoSpiSerialBusDescriptor (
1205 ASL_RESOURCE_INFO *Info);
1208 RsDoUartSerialBusDescriptor (
1209 ASL_RESOURCE_INFO *Info);
1212 * aslrestype2d - DWord address descriptors
1215 RsDoDwordIoDescriptor (
1216 ASL_RESOURCE_INFO *Info);
1219 RsDoDwordMemoryDescriptor (
1220 ASL_RESOURCE_INFO *Info);
1223 RsDoDwordSpaceDescriptor (
1224 ASL_RESOURCE_INFO *Info);
1228 * aslrestype2e - Extended address descriptors
1231 RsDoExtendedIoDescriptor (
1232 ASL_RESOURCE_INFO *Info);
1235 RsDoExtendedMemoryDescriptor (
1236 ASL_RESOURCE_INFO *Info);
1239 RsDoExtendedSpaceDescriptor (
1240 ASL_RESOURCE_INFO *Info);
1244 * aslrestype2q - QWord address descriptors
1247 RsDoQwordIoDescriptor (
1248 ASL_RESOURCE_INFO *Info);
1251 RsDoQwordMemoryDescriptor (
1252 ASL_RESOURCE_INFO *Info);
1255 RsDoQwordSpaceDescriptor (
1256 ASL_RESOURCE_INFO *Info);
1260 * aslrestype2w - Word address descriptors
1263 RsDoWordIoDescriptor (
1264 ASL_RESOURCE_INFO *Info);
1267 RsDoWordSpaceDescriptor (
1268 ASL_RESOURCE_INFO *Info);
1271 RsDoWordBusNumberDescriptor (
1272 ASL_RESOURCE_INFO *Info);
1276 * Entry to data table compiler subsystem
1286 #endif /* __ASLCOMPILER_H */