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)
690 ACPI_PARSE_OBJECT *Op);
695 ACPI_PARSE_OBJECT *Op);
708 TrCreateAssignmentNode (
709 ACPI_PARSE_OBJECT *Target,
710 ACPI_PARSE_OBJECT *Source);
713 TrCreateTargetOperand (
714 ACPI_PARSE_OBJECT *OriginalOp,
715 ACPI_PARSE_OBJECT *ParentOp);
718 TrCreateValuedLeafNode (
723 TrCreateConstantLeafNode (
728 ACPI_PARSE_OBJECT *Op,
734 ACPI_PARSE_OBJECT *Op);
742 ACPI_PARSE_OBJECT *Op1,
743 ACPI_PARSE_OBJECT *Op2);
747 ACPI_PARSE_OBJECT *Op1,
748 ACPI_PARSE_OBJECT *Op2);
752 ACPI_PARSE_OBJECT *Op,
757 ACPI_PARSE_OBJECT *Op,
767 * aslfiles - File I/O support
770 FlAddIncludeDirectory (
780 ACPI_PARSE_OBJECT *Op);
832 char *InputFilename);
835 FlOpenAmlOutputFile (
836 char *InputFilename);
839 FlOpenMiscOutputFiles (
840 char *InputFilename);
843 * aslhwmap - hardware map summary
851 * asload - load namespace in prep for cross reference
855 ACPI_PARSE_OBJECT *RootOp);
859 * asllookup - namespace lookup functions
862 LkFindUnreferencedObjects (
878 * aslnamesp - namespace output file generation
885 NsSetupNamespaceListing (
889 * asloptions - command line processing
897 * aslxref - namespace cross reference
900 XfCrossReferenceNamespace (
905 * aslutils - common compiler utilites
913 /* Type values for above */
915 #define ASL_DEBUG_OUTPUT 0
916 #define ASL_PARSE_OUTPUT 1
917 #define ASL_TREE_OUTPUT 2
920 UtDisplaySupportedTables (
924 UtDisplayConstantOpcodes (
940 UtPrintFormattedName (
954 UtConvertByteToAsmHex (
964 ACPI_PARSE_OBJECT *Op);
967 UtStringCacheCalloc (
971 UtExpandLineBuffers (
981 char **ConvertedName);
984 UtAttachNamepathToOwner (
985 ACPI_PARSE_OBJECT *Op,
986 ACPI_PARSE_OBJECT *NameNode);
989 UtCheckIntegerRange (
990 ACPI_PARSE_OBJECT *Op,
1002 UINT64 *RetInteger);
1006 * asluuid - UUID support
1013 AuConvertUuidToString (
1018 * aslresource - Resource template generation utilities
1021 RsSmallAddressCheck (
1027 ACPI_PARSE_OBJECT *MinOp,
1028 ACPI_PARSE_OBJECT *MaxOp,
1029 ACPI_PARSE_OBJECT *LengthOp,
1030 ACPI_PARSE_OBJECT *AlignOp,
1031 ACPI_PARSE_OBJECT *Op);
1034 RsLargeAddressCheck (
1040 ACPI_PARSE_OBJECT *MinOp,
1041 ACPI_PARSE_OBJECT *MaxOp,
1042 ACPI_PARSE_OBJECT *LengthOp,
1043 ACPI_PARSE_OBJECT *GranOp,
1044 ACPI_PARSE_OBJECT *Op);
1047 RsGetStringDataLength (
1048 ACPI_PARSE_OBJECT *InitializerOp);
1051 RsAllocateResourceNode (
1055 RsCreateResourceField (
1056 ACPI_PARSE_OBJECT *Op,
1065 ACPI_PARSE_OBJECT *Op,
1072 ACPI_PARSE_OBJECT *Op,
1077 RsCompleteNodeAndGetNext (
1078 ACPI_PARSE_OBJECT *Op);
1081 RsCheckListForDuplicates (
1082 ACPI_PARSE_OBJECT *Op);
1085 RsDoOneResourceDescriptor (
1086 ASL_RESOURCE_INFO *Info,
1089 /* Values for State above */
1091 #define ACPI_RSTATE_NORMAL 0
1092 #define ACPI_RSTATE_START_DEPENDENT 1
1093 #define ACPI_RSTATE_DEPENDENT_LIST 2
1096 RsLinkDescriptorChain (
1097 ASL_RESOURCE_NODE **PreviousRnode,
1098 ASL_RESOURCE_NODE *Rnode);
1101 RsDoResourceTemplate (
1102 ACPI_PARSE_OBJECT *Op);
1106 * aslrestype1 - Miscellaneous Small descriptors
1109 RsDoEndTagDescriptor (
1110 ASL_RESOURCE_INFO *Info);
1113 RsDoEndDependentDescriptor (
1114 ASL_RESOURCE_INFO *Info);
1117 RsDoMemory24Descriptor (
1118 ASL_RESOURCE_INFO *Info);
1121 RsDoMemory32Descriptor (
1122 ASL_RESOURCE_INFO *Info);
1125 RsDoMemory32FixedDescriptor (
1126 ASL_RESOURCE_INFO *Info);
1129 RsDoStartDependentDescriptor (
1130 ASL_RESOURCE_INFO *Info);
1133 RsDoStartDependentNoPriDescriptor (
1134 ASL_RESOURCE_INFO *Info);
1137 RsDoVendorSmallDescriptor (
1138 ASL_RESOURCE_INFO *Info);
1142 * aslrestype1i - I/O-related Small descriptors
1146 ASL_RESOURCE_INFO *Info);
1149 RsDoFixedDmaDescriptor (
1150 ASL_RESOURCE_INFO *Info);
1153 RsDoFixedIoDescriptor (
1154 ASL_RESOURCE_INFO *Info);
1158 ASL_RESOURCE_INFO *Info);
1162 ASL_RESOURCE_INFO *Info);
1165 RsDoIrqNoFlagsDescriptor (
1166 ASL_RESOURCE_INFO *Info);
1170 * aslrestype2 - Large resource descriptors
1173 RsDoInterruptDescriptor (
1174 ASL_RESOURCE_INFO *Info);
1177 RsDoVendorLargeDescriptor (
1178 ASL_RESOURCE_INFO *Info);
1181 RsDoGeneralRegisterDescriptor (
1182 ASL_RESOURCE_INFO *Info);
1185 RsDoGpioIntDescriptor (
1186 ASL_RESOURCE_INFO *Info);
1189 RsDoGpioIoDescriptor (
1190 ASL_RESOURCE_INFO *Info);
1193 RsDoI2cSerialBusDescriptor (
1194 ASL_RESOURCE_INFO *Info);
1197 RsDoSpiSerialBusDescriptor (
1198 ASL_RESOURCE_INFO *Info);
1201 RsDoUartSerialBusDescriptor (
1202 ASL_RESOURCE_INFO *Info);
1205 * aslrestype2d - DWord address descriptors
1208 RsDoDwordIoDescriptor (
1209 ASL_RESOURCE_INFO *Info);
1212 RsDoDwordMemoryDescriptor (
1213 ASL_RESOURCE_INFO *Info);
1216 RsDoDwordSpaceDescriptor (
1217 ASL_RESOURCE_INFO *Info);
1221 * aslrestype2e - Extended address descriptors
1224 RsDoExtendedIoDescriptor (
1225 ASL_RESOURCE_INFO *Info);
1228 RsDoExtendedMemoryDescriptor (
1229 ASL_RESOURCE_INFO *Info);
1232 RsDoExtendedSpaceDescriptor (
1233 ASL_RESOURCE_INFO *Info);
1237 * aslrestype2q - QWord address descriptors
1240 RsDoQwordIoDescriptor (
1241 ASL_RESOURCE_INFO *Info);
1244 RsDoQwordMemoryDescriptor (
1245 ASL_RESOURCE_INFO *Info);
1248 RsDoQwordSpaceDescriptor (
1249 ASL_RESOURCE_INFO *Info);
1253 * aslrestype2w - Word address descriptors
1256 RsDoWordIoDescriptor (
1257 ASL_RESOURCE_INFO *Info);
1260 RsDoWordSpaceDescriptor (
1261 ASL_RESOURCE_INFO *Info);
1264 RsDoWordBusNumberDescriptor (
1265 ASL_RESOURCE_INFO *Info);
1269 * Entry to data table compiler subsystem
1279 #endif /* __ASLCOMPILER_H */