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.
45 #ifndef __ASLCOMPILER_H
46 #define __ASLCOMPILER_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 "asldefine.h"
75 #include "aslmessages.h"
76 #include "aslglobal.h"
77 #include "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) (
130 AslCheckForErrorExit (
135 * aslcompile - compile mainline
142 AslCompilerFileHeader (
158 FlCheckForAcpiTable (
165 BOOLEAN DisplayErrors);
169 * aslwalks - semantic analysis and parse tree walks
172 AnOtherSemanticAnalysisWalkBegin (
173 ACPI_PARSE_OBJECT *Op,
178 AnOtherSemanticAnalysisWalkEnd (
179 ACPI_PARSE_OBJECT *Op,
184 AnOperandTypecheckWalkEnd (
185 ACPI_PARSE_OBJECT *Op,
190 AnMethodTypingWalkEnd (
191 ACPI_PARSE_OBJECT *Op,
197 * aslmethod - Control method analysis walk
200 MtMethodAnalysisWalkBegin (
201 ACPI_PARSE_OBJECT *Op,
206 MtMethodAnalysisWalkEnd (
207 ACPI_PARSE_OBJECT *Op,
213 * aslbtypes - bitfield data types
216 AnMapObjTypeToBtype (
217 ACPI_PARSE_OBJECT *Op);
220 AnMapArgTypeToBtype (
225 ACPI_PARSE_OBJECT *Op);
234 * aslanalyze - Support functions for parse tree walks
238 ACPI_PARSE_OBJECT *Op,
241 /* Values for Type argument above */
243 #define ASL_TYPE_HID 0
244 #define ASL_TYPE_CID 1
248 ACPI_PARSE_OBJECT *Op);
251 AnGetInternalMethodReturnType (
252 ACPI_PARSE_OBJECT *Op);
255 AnLastStatementIsReturn (
256 ACPI_PARSE_OBJECT *Op);
259 AnCheckMethodReturnValue (
260 ACPI_PARSE_OBJECT *Op,
261 const ACPI_OPCODE_INFO *OpInfo,
262 ACPI_PARSE_OBJECT *ArgOp,
263 UINT32 RequiredBtypes,
264 UINT32 ThisNodeBtype);
268 ACPI_PARSE_OBJECT *Op);
271 ApCheckForGpeNameConflict (
272 ACPI_PARSE_OBJECT *Op);
276 ACPI_PARSE_OBJECT *Op);
280 * aslerror - error handling/reporting
290 ACPI_PARSE_OBJECT *Op,
294 AslDisableException (
295 char *MessageIdString);
298 AslIsExceptionDisabled (
303 AslCoreSubsystemError (
304 ACPI_PARSE_OBJECT *Op,
317 UINT32 CurrentLineNumber,
318 UINT32 LogicalLineNumber,
319 UINT32 LogicalByteOffset,
337 ASL_ERROR_MSG *Enode,
350 * asllisting - generate all "listing" type files
357 LsWriteNodeToAsmListing (
358 ACPI_PARSE_OBJECT *Op);
362 ACPI_PARSE_OBJECT *Op,
371 * asllistsup - Listing file support utilities
380 LsDumpAsciiInComment (
391 LsFlushListingBuffer (
395 LsWriteListingHexBytes (
403 UINT32 ToLogicalLineNumber,
407 LsWriteOneSourceLine (
420 * aslhex - generate all "hex" output files (C, ASM, ASL)
428 * aslfold - constant folding
432 ACPI_PARSE_OBJECT *Op,
438 * aslmessages - exception strings
445 AeDecodeExceptionLevel (
449 AeBuildFullExceptionCode (
454 * asloffset - generate C offset file for BIOS support
458 ACPI_PARSE_OBJECT *Op,
463 LsDoOffsetTableHeader (
467 LsDoOffsetTableFooter (
472 * aslopcodes - generate AML opcodes
476 ACPI_PARSE_OBJECT *Op,
481 OpcAmlOpcodeUpdateWalk (
482 ACPI_PARSE_OBJECT *Op,
487 OpcGenerateAmlOpcode (
488 ACPI_PARSE_OBJECT *Op);
491 OpcSetOptimalIntegerSize (
492 ACPI_PARSE_OBJECT *Op);
496 ACPI_PARSE_OBJECT *Op);
500 * asloperands - generate AML operands for the AML opcodes
504 ACPI_PARSE_OBJECT *Op,
508 OpnGenerateAmlOperands (
509 ACPI_PARSE_OBJECT *Op);
513 ACPI_PARSE_OBJECT *Op);
517 * aslopt - optmization
520 OptOptimizeNamePath (
521 ACPI_PARSE_OBJECT *Op,
523 ACPI_WALK_STATE *WalkState,
525 ACPI_NAMESPACE_NODE *TargetNode);
529 * aslcodegen - code generation
532 CgGenerateAmlOutput (
547 * asllength - calculate/adjust AML package lengths
550 LnPackageLengthWalk (
551 ACPI_PARSE_OBJECT *Op,
557 ACPI_PARSE_OBJECT *Op,
562 CgGenerateAmlLengths (
563 ACPI_PARSE_OBJECT *Op);
567 * aslmap - opcode mappings and reserved method names
570 AslMapNamedOpcodeToDataType (
575 * aslpredef - ACPI predefined names support
578 ApCheckForPredefinedMethod (
579 ACPI_PARSE_OBJECT *Op,
580 ASL_METHOD_INFO *MethodInfo);
583 ApCheckPredefinedReturnValue (
584 ACPI_PARSE_OBJECT *Op,
585 ASL_METHOD_INFO *MethodInfo);
588 ApCheckForPredefinedName (
589 ACPI_PARSE_OBJECT *Op,
593 ApCheckForPredefinedObject (
594 ACPI_PARSE_OBJECT *Op,
599 const char *PredefinedName,
600 ACPI_PARSE_OBJECT *Op,
601 UINT32 ExpectedBtypes,
602 UINT32 PackageIndex);
605 ApDisplayReservedNames (
610 * aslprepkg - ACPI predefined names support for packages
614 ACPI_PARSE_OBJECT *ParentOp,
615 const ACPI_PREDEFINED_INFO *Predefined);
619 * asltransform - parse tree transformations
623 ACPI_PARSE_OBJECT *Op,
629 * asltree - parse tree support
633 ACPI_PARSE_OBJECT *Op,
635 ASL_WALK_CALLBACK DescendingCallback,
636 ASL_WALK_CALLBACK AscendingCallback,
639 /* Values for "Visitation" parameter above */
641 #define ASL_WALK_VISIT_DOWNWARD 0x01
642 #define ASL_WALK_VISIT_UPWARD 0x02
643 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
652 ACPI_PARSE_OBJECT *Op);
657 ACPI_PARSE_OBJECT *Op);
670 TrCreateValuedLeafNode (
675 TrCreateConstantLeafNode (
680 ACPI_PARSE_OBJECT *Op,
686 ACPI_PARSE_OBJECT *Op);
694 ACPI_PARSE_OBJECT *Op1,
695 ACPI_PARSE_OBJECT *Op2);
699 ACPI_PARSE_OBJECT *Op1,
700 ACPI_PARSE_OBJECT *Op2);
704 ACPI_PARSE_OBJECT *Op,
709 ACPI_PARSE_OBJECT *Op,
719 * aslfiles - File I/O support
722 FlAddIncludeDirectory (
732 ACPI_PARSE_OBJECT *Op);
784 char *InputFilename);
787 FlOpenAmlOutputFile (
788 char *InputFilename);
791 FlOpenMiscOutputFiles (
792 char *InputFilename);
796 * asload - load namespace in prep for cross reference
800 ACPI_PARSE_OBJECT *RootOp);
804 * asllookup - namespace lookup functions
807 LkFindUnreferencedObjects (
823 * aslnamesp - namespace output file generation
830 NsSetupNamespaceListing (
834 * asloptions - command line processing
842 * aslxref - namespace cross reference
845 XfCrossReferenceNamespace (
850 * aslutils - common compiler utilites
858 /* Type values for above */
860 #define ASL_DEBUG_OUTPUT 0
861 #define ASL_PARSE_OUTPUT 1
862 #define ASL_TREE_OUTPUT 2
865 UtDisplaySupportedTables (
869 UtDisplayConstantOpcodes (
885 UtPrintFormattedName (
903 UtConvertByteToAsmHex (
913 ACPI_PARSE_OBJECT *Op);
920 UtExpandLineBuffers (
926 char **ConvertedName);
929 UtAttachNamepathToOwner (
930 ACPI_PARSE_OBJECT *Op,
931 ACPI_PARSE_OBJECT *NameNode);
934 UtCheckIntegerRange (
935 ACPI_PARSE_OBJECT *Op,
951 * asluuid - UUID support
958 AuConvertStringToUuid (
963 AuConvertUuidToString (
968 * aslresource - Resource template generation utilities
971 RsSmallAddressCheck (
977 ACPI_PARSE_OBJECT *MinOp,
978 ACPI_PARSE_OBJECT *MaxOp,
979 ACPI_PARSE_OBJECT *LengthOp,
980 ACPI_PARSE_OBJECT *AlignOp,
981 ACPI_PARSE_OBJECT *Op);
984 RsLargeAddressCheck (
990 ACPI_PARSE_OBJECT *MinOp,
991 ACPI_PARSE_OBJECT *MaxOp,
992 ACPI_PARSE_OBJECT *LengthOp,
993 ACPI_PARSE_OBJECT *GranOp,
994 ACPI_PARSE_OBJECT *Op);
997 RsGetStringDataLength (
998 ACPI_PARSE_OBJECT *InitializerOp);
1001 RsAllocateResourceNode (
1005 RsCreateResourceField (
1006 ACPI_PARSE_OBJECT *Op,
1015 ACPI_PARSE_OBJECT *Op,
1022 ACPI_PARSE_OBJECT *Op,
1027 RsCompleteNodeAndGetNext (
1028 ACPI_PARSE_OBJECT *Op);
1031 RsCheckListForDuplicates (
1032 ACPI_PARSE_OBJECT *Op);
1035 RsDoOneResourceDescriptor (
1036 ACPI_PARSE_OBJECT *DescriptorTypeOp,
1037 UINT32 CurrentByteOffset,
1040 /* Values for State above */
1042 #define ACPI_RSTATE_NORMAL 0
1043 #define ACPI_RSTATE_START_DEPENDENT 1
1044 #define ACPI_RSTATE_DEPENDENT_LIST 2
1047 RsLinkDescriptorChain (
1048 ASL_RESOURCE_NODE **PreviousRnode,
1049 ASL_RESOURCE_NODE *Rnode);
1052 RsDoResourceTemplate (
1053 ACPI_PARSE_OBJECT *Op);
1057 * aslrestype1 - Miscellaneous Small descriptors
1060 RsDoEndTagDescriptor (
1061 ACPI_PARSE_OBJECT *Op,
1062 UINT32 CurrentByteOffset);
1065 RsDoEndDependentDescriptor (
1066 ACPI_PARSE_OBJECT *Op,
1067 UINT32 CurrentByteOffset);
1070 RsDoMemory24Descriptor (
1071 ACPI_PARSE_OBJECT *Op,
1072 UINT32 CurrentByteOffset);
1075 RsDoMemory32Descriptor (
1076 ACPI_PARSE_OBJECT *Op,
1077 UINT32 CurrentByteOffset);
1080 RsDoMemory32FixedDescriptor (
1081 ACPI_PARSE_OBJECT *Op,
1082 UINT32 CurrentByteOffset);
1085 RsDoStartDependentDescriptor (
1086 ACPI_PARSE_OBJECT *Op,
1087 UINT32 CurrentByteOffset);
1090 RsDoStartDependentNoPriDescriptor (
1091 ACPI_PARSE_OBJECT *Op,
1092 UINT32 CurrentByteOffset);
1095 RsDoVendorSmallDescriptor (
1096 ACPI_PARSE_OBJECT *Op,
1097 UINT32 CurrentByteOffset);
1101 * aslrestype1i - I/O-related Small descriptors
1105 ACPI_PARSE_OBJECT *Op,
1106 UINT32 CurrentByteOffset);
1109 RsDoFixedDmaDescriptor (
1110 ACPI_PARSE_OBJECT *Op,
1111 UINT32 CurrentByteOffset);
1114 RsDoFixedIoDescriptor (
1115 ACPI_PARSE_OBJECT *Op,
1116 UINT32 CurrentByteOffset);
1120 ACPI_PARSE_OBJECT *Op,
1121 UINT32 CurrentByteOffset);
1125 ACPI_PARSE_OBJECT *Op,
1126 UINT32 CurrentByteOffset);
1129 RsDoIrqNoFlagsDescriptor (
1130 ACPI_PARSE_OBJECT *Op,
1131 UINT32 CurrentByteOffset);
1135 * aslrestype2 - Large resource descriptors
1138 RsDoInterruptDescriptor (
1139 ACPI_PARSE_OBJECT *Op,
1140 UINT32 CurrentByteOffset);
1143 RsDoVendorLargeDescriptor (
1144 ACPI_PARSE_OBJECT *Op,
1145 UINT32 CurrentByteOffset);
1148 RsDoGeneralRegisterDescriptor (
1149 ACPI_PARSE_OBJECT *Op,
1150 UINT32 CurrentByteOffset);
1153 RsDoGpioIntDescriptor (
1154 ACPI_PARSE_OBJECT *Op,
1155 UINT32 CurrentByteOffset);
1158 RsDoGpioIoDescriptor (
1159 ACPI_PARSE_OBJECT *Op,
1160 UINT32 CurrentByteOffset);
1163 RsDoI2cSerialBusDescriptor (
1164 ACPI_PARSE_OBJECT *Op,
1165 UINT32 CurrentByteOffset);
1168 RsDoSpiSerialBusDescriptor (
1169 ACPI_PARSE_OBJECT *Op,
1170 UINT32 CurrentByteOffset);
1173 RsDoUartSerialBusDescriptor (
1174 ACPI_PARSE_OBJECT *Op,
1175 UINT32 CurrentByteOffset);
1178 * aslrestype2d - DWord address descriptors
1181 RsDoDwordIoDescriptor (
1182 ACPI_PARSE_OBJECT *Op,
1183 UINT32 CurrentByteOffset);
1186 RsDoDwordMemoryDescriptor (
1187 ACPI_PARSE_OBJECT *Op,
1188 UINT32 CurrentByteOffset);
1191 RsDoDwordSpaceDescriptor (
1192 ACPI_PARSE_OBJECT *Op,
1193 UINT32 CurrentByteOffset);
1197 * aslrestype2e - Extended address descriptors
1200 RsDoExtendedIoDescriptor (
1201 ACPI_PARSE_OBJECT *Op,
1202 UINT32 CurrentByteOffset);
1205 RsDoExtendedMemoryDescriptor (
1206 ACPI_PARSE_OBJECT *Op,
1207 UINT32 CurrentByteOffset);
1210 RsDoExtendedSpaceDescriptor (
1211 ACPI_PARSE_OBJECT *Op,
1212 UINT32 CurrentByteOffset);
1216 * aslrestype2q - QWord address descriptors
1219 RsDoQwordIoDescriptor (
1220 ACPI_PARSE_OBJECT *Op,
1221 UINT32 CurrentByteOffset);
1224 RsDoQwordMemoryDescriptor (
1225 ACPI_PARSE_OBJECT *Op,
1226 UINT32 CurrentByteOffset);
1229 RsDoQwordSpaceDescriptor (
1230 ACPI_PARSE_OBJECT *Op,
1231 UINT32 CurrentByteOffset);
1235 * aslrestype2w - Word address descriptors
1238 RsDoWordIoDescriptor (
1239 ACPI_PARSE_OBJECT *Op,
1240 UINT32 CurrentByteOffset);
1243 RsDoWordSpaceDescriptor (
1244 ACPI_PARSE_OBJECT *Op,
1245 UINT32 CurrentByteOffset);
1248 RsDoWordBusNumberDescriptor (
1249 ACPI_PARSE_OBJECT *Op,
1250 UINT32 CurrentByteOffset);
1253 * Entry to data table compiler subsystem
1263 #endif /* __ASLCOMPILER_H */