1 /******************************************************************************
3 * Module Name: aslcompiler.h - common include file for iASL
5 *****************************************************************************/
8 * Copyright (C) 2000 - 2016, 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 FlIsFileAsciiSource (
172 BOOLEAN DisplayErrors);
176 * aslwalks - semantic analysis and parse tree walks
179 AnOtherSemanticAnalysisWalkBegin (
180 ACPI_PARSE_OBJECT *Op,
185 AnOtherSemanticAnalysisWalkEnd (
186 ACPI_PARSE_OBJECT *Op,
191 AnOperandTypecheckWalkEnd (
192 ACPI_PARSE_OBJECT *Op,
197 AnMethodTypingWalkEnd (
198 ACPI_PARSE_OBJECT *Op,
204 * aslmethod - Control method analysis walk
207 MtMethodAnalysisWalkBegin (
208 ACPI_PARSE_OBJECT *Op,
213 MtMethodAnalysisWalkEnd (
214 ACPI_PARSE_OBJECT *Op,
220 * aslbtypes - bitfield data types
223 AnMapObjTypeToBtype (
224 ACPI_PARSE_OBJECT *Op);
227 AnMapArgTypeToBtype (
232 ACPI_PARSE_OBJECT *Op);
241 * aslanalyze - Support functions for parse tree walks
245 ACPI_PARSE_OBJECT *Op,
248 /* Values for Type argument above */
250 #define ASL_TYPE_HID 0
251 #define ASL_TYPE_CID 1
255 ACPI_PARSE_OBJECT *Op);
258 AnGetInternalMethodReturnType (
259 ACPI_PARSE_OBJECT *Op);
262 AnLastStatementIsReturn (
263 ACPI_PARSE_OBJECT *Op);
266 AnCheckMethodReturnValue (
267 ACPI_PARSE_OBJECT *Op,
268 const ACPI_OPCODE_INFO *OpInfo,
269 ACPI_PARSE_OBJECT *ArgOp,
270 UINT32 RequiredBtypes,
271 UINT32 ThisNodeBtype);
275 ACPI_PARSE_OBJECT *Op);
278 ApCheckForGpeNameConflict (
279 ACPI_PARSE_OBJECT *Op);
283 ACPI_PARSE_OBJECT *Op);
288 ACPI_PARSE_OBJECT *Op);
292 * aslerror - error handling/reporting
302 ACPI_PARSE_OBJECT *Op,
306 AslDisableException (
307 char *MessageIdString);
310 AslIsExceptionDisabled (
315 AslCoreSubsystemError (
316 ACPI_PARSE_OBJECT *Op,
329 UINT32 CurrentLineNumber,
330 UINT32 LogicalLineNumber,
331 UINT32 LogicalByteOffset,
349 ASL_ERROR_MSG *Enode,
362 * asllisting - generate all "listing" type files
369 LsWriteNodeToAsmListing (
370 ACPI_PARSE_OBJECT *Op);
374 ACPI_PARSE_OBJECT *Op,
383 * asllistsup - Listing file support utilities
392 LsDumpAsciiInComment (
403 LsFlushListingBuffer (
407 LsWriteListingHexBytes (
415 UINT32 ToLogicalLineNumber,
419 LsWriteOneSourceLine (
432 * aslhex - generate all "hex" output files (C, ASM, ASL)
440 * aslfold - constant folding
444 ACPI_PARSE_OBJECT *Op,
450 * aslmessages - exception strings
457 AeDecodeExceptionLevel (
461 AeBuildFullExceptionCode (
466 * asloffset - generate C offset file for BIOS support
470 ACPI_PARSE_OBJECT *Op,
475 LsDoOffsetTableHeader (
479 LsDoOffsetTableFooter (
484 * aslopcodes - generate AML opcodes
488 ACPI_PARSE_OBJECT *Op,
493 OpcAmlOpcodeUpdateWalk (
494 ACPI_PARSE_OBJECT *Op,
499 OpcGenerateAmlOpcode (
500 ACPI_PARSE_OBJECT *Op);
503 OpcSetOptimalIntegerSize (
504 ACPI_PARSE_OBJECT *Op);
508 ACPI_PARSE_OBJECT *Op);
512 * asloperands - generate AML operands for the AML opcodes
516 ACPI_PARSE_OBJECT *Op,
520 OpnGenerateAmlOperands (
521 ACPI_PARSE_OBJECT *Op);
525 ACPI_PARSE_OBJECT *Op);
529 * aslopt - optmization
532 OptOptimizeNamePath (
533 ACPI_PARSE_OBJECT *Op,
535 ACPI_WALK_STATE *WalkState,
537 ACPI_NAMESPACE_NODE *TargetNode);
541 * aslprintf - Printf/Fprintf macros
545 ACPI_PARSE_OBJECT *Op);
549 ACPI_PARSE_OBJECT *Op);
553 * aslprune - parse tree pruner
562 * aslcodegen - code generation
565 CgGenerateAmlOutput (
580 * asllength - calculate/adjust AML package lengths
583 LnPackageLengthWalk (
584 ACPI_PARSE_OBJECT *Op,
590 ACPI_PARSE_OBJECT *Op,
595 CgGenerateAmlLengths (
596 ACPI_PARSE_OBJECT *Op);
600 * aslmap - opcode mappings and reserved method names
603 AslMapNamedOpcodeToDataType (
608 * aslpredef - ACPI predefined names support
611 ApCheckForPredefinedMethod (
612 ACPI_PARSE_OBJECT *Op,
613 ASL_METHOD_INFO *MethodInfo);
616 ApCheckPredefinedReturnValue (
617 ACPI_PARSE_OBJECT *Op,
618 ASL_METHOD_INFO *MethodInfo);
621 ApCheckForPredefinedName (
622 ACPI_PARSE_OBJECT *Op,
626 ApCheckForPredefinedObject (
627 ACPI_PARSE_OBJECT *Op,
632 const char *PredefinedName,
633 ACPI_PARSE_OBJECT *Op,
634 UINT32 ExpectedBtypes,
635 UINT32 PackageIndex);
638 ApDisplayReservedNames (
643 * aslprepkg - ACPI predefined names support for packages
647 ACPI_PARSE_OBJECT *ParentOp,
648 const ACPI_PREDEFINED_INFO *Predefined);
652 * asltransform - parse tree transformations
656 ACPI_PARSE_OBJECT *Op,
662 * asltree - parse tree support
666 ACPI_PARSE_OBJECT *Op,
668 ASL_WALK_CALLBACK DescendingCallback,
669 ASL_WALK_CALLBACK AscendingCallback,
672 /* Values for "Visitation" parameter above */
674 #define ASL_WALK_VISIT_DOWNWARD 0x01
675 #define ASL_WALK_VISIT_UPWARD 0x02
676 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
684 TrPrintNodeCompileFlags (
689 ACPI_PARSE_OBJECT *Op);
694 ACPI_PARSE_OBJECT *Op);
711 TrCreateAssignmentNode (
712 ACPI_PARSE_OBJECT *Target,
713 ACPI_PARSE_OBJECT *Source);
716 TrCreateTargetOperand (
717 ACPI_PARSE_OBJECT *OriginalOp,
718 ACPI_PARSE_OBJECT *ParentOp);
721 TrCreateValuedLeafNode (
726 TrCreateConstantLeafNode (
731 ACPI_PARSE_OBJECT *Op,
737 ACPI_PARSE_OBJECT *Op);
740 TrSetCurrentFilename (
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 UtQueryForOverwrite (
931 UtDisplaySupportedTables (
935 UtDisplayConstantOpcodes (
951 UtPrintFormattedName (
965 UtConvertByteToAsmHex (
975 ACPI_PARSE_OBJECT *Op);
978 UtStringCacheCalloc (
982 UtExpandLineBuffers (
992 char **ConvertedName);
995 UtAttachNamepathToOwner (
996 ACPI_PARSE_OBJECT *Op,
997 ACPI_PARSE_OBJECT *NameNode);
1000 UtCheckIntegerRange (
1001 ACPI_PARSE_OBJECT *Op,
1013 UINT64 *RetInteger);
1017 * asluuid - UUID support
1024 AuConvertUuidToString (
1029 * aslresource - Resource template generation utilities
1032 RsSmallAddressCheck (
1038 ACPI_PARSE_OBJECT *MinOp,
1039 ACPI_PARSE_OBJECT *MaxOp,
1040 ACPI_PARSE_OBJECT *LengthOp,
1041 ACPI_PARSE_OBJECT *AlignOp,
1042 ACPI_PARSE_OBJECT *Op);
1045 RsLargeAddressCheck (
1051 ACPI_PARSE_OBJECT *MinOp,
1052 ACPI_PARSE_OBJECT *MaxOp,
1053 ACPI_PARSE_OBJECT *LengthOp,
1054 ACPI_PARSE_OBJECT *GranOp,
1055 ACPI_PARSE_OBJECT *Op);
1058 RsGetStringDataLength (
1059 ACPI_PARSE_OBJECT *InitializerOp);
1062 RsAllocateResourceNode (
1066 RsCreateResourceField (
1067 ACPI_PARSE_OBJECT *Op,
1076 ACPI_PARSE_OBJECT *Op,
1083 ACPI_PARSE_OBJECT *Op,
1088 RsCompleteNodeAndGetNext (
1089 ACPI_PARSE_OBJECT *Op);
1092 RsCheckListForDuplicates (
1093 ACPI_PARSE_OBJECT *Op);
1096 RsDoOneResourceDescriptor (
1097 ASL_RESOURCE_INFO *Info,
1100 /* Values for State above */
1102 #define ACPI_RSTATE_NORMAL 0
1103 #define ACPI_RSTATE_START_DEPENDENT 1
1104 #define ACPI_RSTATE_DEPENDENT_LIST 2
1107 RsLinkDescriptorChain (
1108 ASL_RESOURCE_NODE **PreviousRnode,
1109 ASL_RESOURCE_NODE *Rnode);
1112 RsDoResourceTemplate (
1113 ACPI_PARSE_OBJECT *Op);
1117 * aslrestype1 - Miscellaneous Small descriptors
1120 RsDoEndTagDescriptor (
1121 ASL_RESOURCE_INFO *Info);
1124 RsDoEndDependentDescriptor (
1125 ASL_RESOURCE_INFO *Info);
1128 RsDoMemory24Descriptor (
1129 ASL_RESOURCE_INFO *Info);
1132 RsDoMemory32Descriptor (
1133 ASL_RESOURCE_INFO *Info);
1136 RsDoMemory32FixedDescriptor (
1137 ASL_RESOURCE_INFO *Info);
1140 RsDoStartDependentDescriptor (
1141 ASL_RESOURCE_INFO *Info);
1144 RsDoStartDependentNoPriDescriptor (
1145 ASL_RESOURCE_INFO *Info);
1148 RsDoVendorSmallDescriptor (
1149 ASL_RESOURCE_INFO *Info);
1153 * aslrestype1i - I/O-related Small descriptors
1157 ASL_RESOURCE_INFO *Info);
1160 RsDoFixedDmaDescriptor (
1161 ASL_RESOURCE_INFO *Info);
1164 RsDoFixedIoDescriptor (
1165 ASL_RESOURCE_INFO *Info);
1169 ASL_RESOURCE_INFO *Info);
1173 ASL_RESOURCE_INFO *Info);
1176 RsDoIrqNoFlagsDescriptor (
1177 ASL_RESOURCE_INFO *Info);
1181 * aslrestype2 - Large resource descriptors
1184 RsDoInterruptDescriptor (
1185 ASL_RESOURCE_INFO *Info);
1188 RsDoVendorLargeDescriptor (
1189 ASL_RESOURCE_INFO *Info);
1192 RsDoGeneralRegisterDescriptor (
1193 ASL_RESOURCE_INFO *Info);
1196 RsDoGpioIntDescriptor (
1197 ASL_RESOURCE_INFO *Info);
1200 RsDoGpioIoDescriptor (
1201 ASL_RESOURCE_INFO *Info);
1204 RsDoI2cSerialBusDescriptor (
1205 ASL_RESOURCE_INFO *Info);
1208 RsDoSpiSerialBusDescriptor (
1209 ASL_RESOURCE_INFO *Info);
1212 RsDoUartSerialBusDescriptor (
1213 ASL_RESOURCE_INFO *Info);
1216 * aslrestype2d - DWord address descriptors
1219 RsDoDwordIoDescriptor (
1220 ASL_RESOURCE_INFO *Info);
1223 RsDoDwordMemoryDescriptor (
1224 ASL_RESOURCE_INFO *Info);
1227 RsDoDwordSpaceDescriptor (
1228 ASL_RESOURCE_INFO *Info);
1232 * aslrestype2e - Extended address descriptors
1235 RsDoExtendedIoDescriptor (
1236 ASL_RESOURCE_INFO *Info);
1239 RsDoExtendedMemoryDescriptor (
1240 ASL_RESOURCE_INFO *Info);
1243 RsDoExtendedSpaceDescriptor (
1244 ASL_RESOURCE_INFO *Info);
1248 * aslrestype2q - QWord address descriptors
1251 RsDoQwordIoDescriptor (
1252 ASL_RESOURCE_INFO *Info);
1255 RsDoQwordMemoryDescriptor (
1256 ASL_RESOURCE_INFO *Info);
1259 RsDoQwordSpaceDescriptor (
1260 ASL_RESOURCE_INFO *Info);
1264 * aslrestype2w - Word address descriptors
1267 RsDoWordIoDescriptor (
1268 ASL_RESOURCE_INFO *Info);
1271 RsDoWordSpaceDescriptor (
1272 ASL_RESOURCE_INFO *Info);
1275 RsDoWordBusNumberDescriptor (
1276 ASL_RESOURCE_INFO *Info);
1280 * Entry to data table compiler subsystem
1290 #endif /* __ASLCOMPILER_H */