1 /******************************************************************************
3 * Module Name: aslcompiler.h - common include file for iASL
5 *****************************************************************************/
8 * Copyright (C) 2000 - 2013, 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
48 #include <contrib/dev/acpica/include/acpi.h>
49 #include <contrib/dev/acpica/include/accommon.h>
50 #include <contrib/dev/acpica/include/amlresrc.h>
51 #include <contrib/dev/acpica/include/acdebug.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 <contrib/dev/acpica/compiler/asldefine.h>
74 #include <contrib/dev/acpica/compiler/asltypes.h>
75 #include <contrib/dev/acpica/compiler/aslmessages.h>
76 #include <contrib/dev/acpica/compiler/aslglobal.h>
77 #include <contrib/dev/acpica/compiler/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) (
128 ASL_PATHNAME_CALLBACK Callback);
135 AslCheckForErrorExit (
140 * aslcompile - compile mainline
147 AslCompilerFileHeader (
163 FlCheckForAcpiTable (
170 BOOLEAN DisplayErrors);
174 * aslwalks - semantic analysis and parse tree walks
177 AnOtherSemanticAnalysisWalkBegin (
178 ACPI_PARSE_OBJECT *Op,
183 AnOtherSemanticAnalysisWalkEnd (
184 ACPI_PARSE_OBJECT *Op,
189 AnOperandTypecheckWalkEnd (
190 ACPI_PARSE_OBJECT *Op,
195 AnMethodTypingWalkEnd (
196 ACPI_PARSE_OBJECT *Op,
202 * aslmethod - Control method analysis walk
205 MtMethodAnalysisWalkBegin (
206 ACPI_PARSE_OBJECT *Op,
211 MtMethodAnalysisWalkEnd (
212 ACPI_PARSE_OBJECT *Op,
218 * aslbtypes - bitfield data types
221 AnMapObjTypeToBtype (
222 ACPI_PARSE_OBJECT *Op);
225 AnMapArgTypeToBtype (
230 ACPI_PARSE_OBJECT *Op);
239 * aslanalyze - Support functions for parse tree walks
243 ACPI_PARSE_OBJECT *Op,
246 /* Values for Type argument above */
248 #define ASL_TYPE_HID 0
249 #define ASL_TYPE_CID 1
253 ACPI_PARSE_OBJECT *Op);
256 AnGetInternalMethodReturnType (
257 ACPI_PARSE_OBJECT *Op);
260 AnLastStatementIsReturn (
261 ACPI_PARSE_OBJECT *Op);
264 AnCheckMethodReturnValue (
265 ACPI_PARSE_OBJECT *Op,
266 const ACPI_OPCODE_INFO *OpInfo,
267 ACPI_PARSE_OBJECT *ArgOp,
268 UINT32 RequiredBtypes,
269 UINT32 ThisNodeBtype);
273 ACPI_PARSE_OBJECT *Op);
276 ApCheckForGpeNameConflict (
277 ACPI_PARSE_OBJECT *Op);
281 ACPI_PARSE_OBJECT *Op);
285 * aslerror - error handling/reporting
291 ACPI_PARSE_OBJECT *Op,
295 AslDisableException (
296 char *MessageIdString);
299 AslIsExceptionDisabled (
304 AslCoreSubsystemError (
305 ACPI_PARSE_OBJECT *Op,
318 UINT32 CurrentLineNumber,
319 UINT32 LogicalLineNumber,
320 UINT32 LogicalByteOffset,
338 ASL_ERROR_MSG *Enode,
349 ACPI_PHYSICAL_ADDRESS
350 AeLocalGetRootPointer (
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 * asloffset - generate C offset file for BIOS support
447 ACPI_PARSE_OBJECT *Op,
452 LsDoOffsetTableHeader (
456 LsDoOffsetTableFooter (
461 * aslopcodes - generate AML opcodes
465 ACPI_PARSE_OBJECT *Op,
470 OpcAmlOpcodeUpdateWalk (
471 ACPI_PARSE_OBJECT *Op,
476 OpcGenerateAmlOpcode (
477 ACPI_PARSE_OBJECT *Op);
480 OpcSetOptimalIntegerSize (
481 ACPI_PARSE_OBJECT *Op);
485 ACPI_PARSE_OBJECT *Op);
489 * asloperands - generate AML operands for the AML opcodes
493 ACPI_PARSE_OBJECT *Op,
497 OpnGenerateAmlOperands (
498 ACPI_PARSE_OBJECT *Op);
502 ACPI_PARSE_OBJECT *Op);
506 * aslopt - optmization
509 OptOptimizeNamePath (
510 ACPI_PARSE_OBJECT *Op,
512 ACPI_WALK_STATE *WalkState,
514 ACPI_NAMESPACE_NODE *TargetNode);
518 * aslcodegen - code generation
521 CgGenerateAmlOutput (
536 * asllength - calculate/adjust AML package lengths
539 LnPackageLengthWalk (
540 ACPI_PARSE_OBJECT *Op,
546 ACPI_PARSE_OBJECT *Op,
551 CgGenerateAmlLengths (
552 ACPI_PARSE_OBJECT *Op);
556 * aslmap - opcode mappings and reserved method names
559 AslMapNamedOpcodeToDataType (
564 * aslpredef - ACPI predefined names support
567 ApCheckForPredefinedMethod (
568 ACPI_PARSE_OBJECT *Op,
569 ASL_METHOD_INFO *MethodInfo);
572 ApCheckPredefinedReturnValue (
573 ACPI_PARSE_OBJECT *Op,
574 ASL_METHOD_INFO *MethodInfo);
577 ApCheckForPredefinedName (
578 ACPI_PARSE_OBJECT *Op,
582 ApCheckForPredefinedObject (
583 ACPI_PARSE_OBJECT *Op,
588 const char *PredefinedName,
589 ACPI_PARSE_OBJECT *Op,
590 UINT32 ExpectedBtypes,
591 UINT32 PackageIndex);
594 ApDisplayReservedNames (
599 * aslprepkg - ACPI predefined names support for packages
603 ACPI_PARSE_OBJECT *ParentOp,
604 const ACPI_PREDEFINED_INFO *Predefined);
608 * asltransform - parse tree transformations
612 ACPI_PARSE_OBJECT *Op,
618 * asltree - parse tree support
622 ACPI_PARSE_OBJECT *Op,
624 ASL_WALK_CALLBACK DescendingCallback,
625 ASL_WALK_CALLBACK AscendingCallback,
628 /* Values for "Visitation" parameter above */
630 #define ASL_WALK_VISIT_DOWNWARD 0x01
631 #define ASL_WALK_VISIT_UPWARD 0x02
632 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
641 ACPI_PARSE_OBJECT *Op);
646 ACPI_PARSE_OBJECT *Op);
659 TrCreateValuedLeafNode (
664 TrCreateConstantLeafNode (
669 ACPI_PARSE_OBJECT *Op,
675 ACPI_PARSE_OBJECT *Op);
683 ACPI_PARSE_OBJECT *Op1,
684 ACPI_PARSE_OBJECT *Op2);
688 ACPI_PARSE_OBJECT *Op1,
689 ACPI_PARSE_OBJECT *Op2);
693 ACPI_PARSE_OBJECT *Op,
698 ACPI_PARSE_OBJECT *Op,
708 * aslfiles - File I/O support
715 FlAddIncludeDirectory (
725 ACPI_PARSE_OBJECT *Op);
777 char *InputFilename);
780 FlOpenAmlOutputFile (
781 char *InputFilename);
784 FlOpenMiscOutputFiles (
785 char *InputFilename);
789 * asload - load namespace in prep for cross reference
793 ACPI_PARSE_OBJECT *RootOp);
797 * asllookup - namespace lookup functions
800 LkFindUnreferencedObjects (
816 * aslnamesp - namespace output file generation
823 NsSetupNamespaceListing (
827 * asloptions - command line processing
835 * aslxref - namespace cross reference
838 XfCrossReferenceNamespace (
843 * aslutils - common compiler utilites
851 /* Type values for above */
853 #define ASL_DEBUG_OUTPUT 0
854 #define ASL_PARSE_OUTPUT 1
855 #define ASL_TREE_OUTPUT 2
858 UtDisplaySupportedTables (
862 UtDisplayConstantOpcodes (
878 UtPrintFormattedName (
896 UtConvertByteToAsmHex (
906 ACPI_PARSE_OBJECT *Op);
913 UtExpandLineBuffers (
919 char **ConvertedName);
922 UtAttachNamepathToOwner (
923 ACPI_PARSE_OBJECT *Op,
924 ACPI_PARSE_OBJECT *NameNode);
927 UtCheckIntegerRange (
928 ACPI_PARSE_OBJECT *Op,
944 * asluuid - UUID support
951 AuConvertStringToUuid (
956 AuConvertUuidToString (
961 * aslresource - Resource template generation utilities
964 RsSmallAddressCheck (
970 ACPI_PARSE_OBJECT *MinOp,
971 ACPI_PARSE_OBJECT *MaxOp,
972 ACPI_PARSE_OBJECT *LengthOp,
973 ACPI_PARSE_OBJECT *AlignOp,
974 ACPI_PARSE_OBJECT *Op);
977 RsLargeAddressCheck (
983 ACPI_PARSE_OBJECT *MinOp,
984 ACPI_PARSE_OBJECT *MaxOp,
985 ACPI_PARSE_OBJECT *LengthOp,
986 ACPI_PARSE_OBJECT *GranOp,
987 ACPI_PARSE_OBJECT *Op);
990 RsGetStringDataLength (
991 ACPI_PARSE_OBJECT *InitializerOp);
994 RsAllocateResourceNode (
998 RsCreateResourceField (
999 ACPI_PARSE_OBJECT *Op,
1008 ACPI_PARSE_OBJECT *Op,
1015 ACPI_PARSE_OBJECT *Op,
1020 RsCompleteNodeAndGetNext (
1021 ACPI_PARSE_OBJECT *Op);
1024 RsCheckListForDuplicates (
1025 ACPI_PARSE_OBJECT *Op);
1028 RsDoOneResourceDescriptor (
1029 ACPI_PARSE_OBJECT *DescriptorTypeOp,
1030 UINT32 CurrentByteOffset,
1033 /* Values for State above */
1035 #define ACPI_RSTATE_NORMAL 0
1036 #define ACPI_RSTATE_START_DEPENDENT 1
1037 #define ACPI_RSTATE_DEPENDENT_LIST 2
1040 RsLinkDescriptorChain (
1041 ASL_RESOURCE_NODE **PreviousRnode,
1042 ASL_RESOURCE_NODE *Rnode);
1045 RsDoResourceTemplate (
1046 ACPI_PARSE_OBJECT *Op);
1050 * aslrestype1 - Miscellaneous Small descriptors
1053 RsDoEndTagDescriptor (
1054 ACPI_PARSE_OBJECT *Op,
1055 UINT32 CurrentByteOffset);
1058 RsDoEndDependentDescriptor (
1059 ACPI_PARSE_OBJECT *Op,
1060 UINT32 CurrentByteOffset);
1063 RsDoMemory24Descriptor (
1064 ACPI_PARSE_OBJECT *Op,
1065 UINT32 CurrentByteOffset);
1068 RsDoMemory32Descriptor (
1069 ACPI_PARSE_OBJECT *Op,
1070 UINT32 CurrentByteOffset);
1073 RsDoMemory32FixedDescriptor (
1074 ACPI_PARSE_OBJECT *Op,
1075 UINT32 CurrentByteOffset);
1078 RsDoStartDependentDescriptor (
1079 ACPI_PARSE_OBJECT *Op,
1080 UINT32 CurrentByteOffset);
1083 RsDoStartDependentNoPriDescriptor (
1084 ACPI_PARSE_OBJECT *Op,
1085 UINT32 CurrentByteOffset);
1088 RsDoVendorSmallDescriptor (
1089 ACPI_PARSE_OBJECT *Op,
1090 UINT32 CurrentByteOffset);
1094 * aslrestype1i - I/O-related Small descriptors
1098 ACPI_PARSE_OBJECT *Op,
1099 UINT32 CurrentByteOffset);
1102 RsDoFixedDmaDescriptor (
1103 ACPI_PARSE_OBJECT *Op,
1104 UINT32 CurrentByteOffset);
1107 RsDoFixedIoDescriptor (
1108 ACPI_PARSE_OBJECT *Op,
1109 UINT32 CurrentByteOffset);
1113 ACPI_PARSE_OBJECT *Op,
1114 UINT32 CurrentByteOffset);
1118 ACPI_PARSE_OBJECT *Op,
1119 UINT32 CurrentByteOffset);
1122 RsDoIrqNoFlagsDescriptor (
1123 ACPI_PARSE_OBJECT *Op,
1124 UINT32 CurrentByteOffset);
1128 * aslrestype2 - Large resource descriptors
1131 RsDoInterruptDescriptor (
1132 ACPI_PARSE_OBJECT *Op,
1133 UINT32 CurrentByteOffset);
1136 RsDoVendorLargeDescriptor (
1137 ACPI_PARSE_OBJECT *Op,
1138 UINT32 CurrentByteOffset);
1141 RsDoGeneralRegisterDescriptor (
1142 ACPI_PARSE_OBJECT *Op,
1143 UINT32 CurrentByteOffset);
1146 RsDoGpioIntDescriptor (
1147 ACPI_PARSE_OBJECT *Op,
1148 UINT32 CurrentByteOffset);
1151 RsDoGpioIoDescriptor (
1152 ACPI_PARSE_OBJECT *Op,
1153 UINT32 CurrentByteOffset);
1156 RsDoI2cSerialBusDescriptor (
1157 ACPI_PARSE_OBJECT *Op,
1158 UINT32 CurrentByteOffset);
1161 RsDoSpiSerialBusDescriptor (
1162 ACPI_PARSE_OBJECT *Op,
1163 UINT32 CurrentByteOffset);
1166 RsDoUartSerialBusDescriptor (
1167 ACPI_PARSE_OBJECT *Op,
1168 UINT32 CurrentByteOffset);
1171 * aslrestype2d - DWord address descriptors
1174 RsDoDwordIoDescriptor (
1175 ACPI_PARSE_OBJECT *Op,
1176 UINT32 CurrentByteOffset);
1179 RsDoDwordMemoryDescriptor (
1180 ACPI_PARSE_OBJECT *Op,
1181 UINT32 CurrentByteOffset);
1184 RsDoDwordSpaceDescriptor (
1185 ACPI_PARSE_OBJECT *Op,
1186 UINT32 CurrentByteOffset);
1190 * aslrestype2e - Extended address descriptors
1193 RsDoExtendedIoDescriptor (
1194 ACPI_PARSE_OBJECT *Op,
1195 UINT32 CurrentByteOffset);
1198 RsDoExtendedMemoryDescriptor (
1199 ACPI_PARSE_OBJECT *Op,
1200 UINT32 CurrentByteOffset);
1203 RsDoExtendedSpaceDescriptor (
1204 ACPI_PARSE_OBJECT *Op,
1205 UINT32 CurrentByteOffset);
1209 * aslrestype2q - QWord address descriptors
1212 RsDoQwordIoDescriptor (
1213 ACPI_PARSE_OBJECT *Op,
1214 UINT32 CurrentByteOffset);
1217 RsDoQwordMemoryDescriptor (
1218 ACPI_PARSE_OBJECT *Op,
1219 UINT32 CurrentByteOffset);
1222 RsDoQwordSpaceDescriptor (
1223 ACPI_PARSE_OBJECT *Op,
1224 UINT32 CurrentByteOffset);
1228 * aslrestype2w - Word address descriptors
1231 RsDoWordIoDescriptor (
1232 ACPI_PARSE_OBJECT *Op,
1233 UINT32 CurrentByteOffset);
1236 RsDoWordSpaceDescriptor (
1237 ACPI_PARSE_OBJECT *Op,
1238 UINT32 CurrentByteOffset);
1241 RsDoWordBusNumberDescriptor (
1242 ACPI_PARSE_OBJECT *Op,
1243 UINT32 CurrentByteOffset);
1246 * Entry to data table compiler subsystem
1256 #endif /* __ASLCOMPILER_H */