2 /******************************************************************************
4 * Module Name: aslcompiler.h - common include file for iASL
6 *****************************************************************************/
9 * Copyright (C) 2000 - 2012, Intel Corp.
10 * All rights reserved.
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
15 * 1. Redistributions of source code must retain the above copyright
16 * notice, this list of conditions, and the following disclaimer,
17 * without modification.
18 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19 * substantially similar to the "NO WARRANTY" disclaimer below
20 * ("Disclaimer") and any redistribution must be conditioned upon
21 * including a substantially similar Disclaimer requirement for further
22 * binary redistribution.
23 * 3. Neither the names of the above-listed copyright holders nor the names
24 * of any contributors may be used to endorse or promote products derived
25 * from this software without specific prior written permission.
27 * Alternatively, this software may be distributed under the terms of the
28 * GNU General Public License ("GPL") version 2 as published by the Free
29 * Software Foundation.
32 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42 * POSSIBILITY OF SUCH DAMAGES.
46 #ifndef __ASLCOMPILER_H
47 #define __ASLCOMPILER_H
49 #include <contrib/dev/acpica/include/acpi.h>
50 #include <contrib/dev/acpica/include/accommon.h>
51 #include <contrib/dev/acpica/include/amlresrc.h>
52 #include <contrib/dev/acpica/include/acdebug.h>
54 /* Microsoft-specific */
56 #if (defined WIN32 || defined WIN64)
58 /* warn : used #pragma pack */
59 #pragma warning(disable:4103)
61 /* warn : named type definition in parentheses */
62 #pragma warning(disable:4115)
72 /* Compiler headers */
74 #include <contrib/dev/acpica/compiler/asldefine.h>
75 #include <contrib/dev/acpica/compiler/asltypes.h>
76 #include <contrib/dev/acpica/compiler/aslmessages.h>
77 #include <contrib/dev/acpica/compiler/aslglobal.h>
78 #include <contrib/dev/acpica/compiler/preprocess.h>
81 /*******************************************************************************
85 ******************************************************************************/
88 * Main ASL parser - generated from flex/bison, lex/yacc, etc.
103 AslResetCurrentLineBuffer (
107 AslInsertLineBuffer (
111 AslPopInputFileStack (
115 AslPushInputFileStack (
120 * aslstartup - entered from main()
123 AslInitializeGlobals (
127 ACPI_STATUS (*ASL_PATHNAME_CALLBACK) (
133 ASL_PATHNAME_CALLBACK Callback);
140 AslCheckForErrorExit (
145 * aslcompile - compile mainline
152 AslCompilerFileHeader (
169 ASL_FILE_INFO *FileInfo);
173 * aslwalks - semantic analysis and parse tree walks
176 AnOtherSemanticAnalysisWalkBegin (
177 ACPI_PARSE_OBJECT *Op,
182 AnOtherSemanticAnalysisWalkEnd (
183 ACPI_PARSE_OBJECT *Op,
188 AnOperandTypecheckWalkEnd (
189 ACPI_PARSE_OBJECT *Op,
194 AnMethodAnalysisWalkBegin (
195 ACPI_PARSE_OBJECT *Op,
200 AnMethodAnalysisWalkEnd (
201 ACPI_PARSE_OBJECT *Op,
206 AnMethodTypingWalkEnd (
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
286 ACPI_PARSE_OBJECT *Op,
290 AslCoreSubsystemError (
291 ACPI_PARSE_OBJECT *Op,
304 UINT32 CurrentLineNumber,
305 UINT32 LogicalLineNumber,
306 UINT32 LogicalByteOffset,
324 ASL_ERROR_MSG *Enode,
335 ACPI_PHYSICAL_ADDRESS
336 AeLocalGetRootPointer (
341 * asllisting - generate all "listing" type files
348 LsWriteNodeToAsmListing (
349 ACPI_PARSE_OBJECT *Op);
353 ACPI_PARSE_OBJECT *Op,
365 * aslfold - constant folding
369 ACPI_PARSE_OBJECT *Op,
375 * aslopcodes - generate AML opcodes
379 ACPI_PARSE_OBJECT *Op,
384 OpcAmlOpcodeUpdateWalk (
385 ACPI_PARSE_OBJECT *Op,
390 OpcGenerateAmlOpcode (
391 ACPI_PARSE_OBJECT *Op);
394 OpcSetOptimalIntegerSize (
395 ACPI_PARSE_OBJECT *Op);
399 ACPI_PARSE_OBJECT *Op);
403 * asloperands - generate AML operands for the AML opcodes
407 ACPI_PARSE_OBJECT *Op,
411 OpnGenerateAmlOperands (
412 ACPI_PARSE_OBJECT *Op);
416 ACPI_PARSE_OBJECT *Op);
420 * aslopt - optmization
423 OptOptimizeNamePath (
424 ACPI_PARSE_OBJECT *Op,
426 ACPI_WALK_STATE *WalkState,
428 ACPI_NAMESPACE_NODE *TargetNode);
432 * aslcodegen - code generation
435 CgGenerateAmlOutput (
450 * asllength - calculate/adjust AML package lengths
453 LnPackageLengthWalk (
454 ACPI_PARSE_OBJECT *Op,
460 ACPI_PARSE_OBJECT *Op,
465 CgGenerateAmlLengths (
466 ACPI_PARSE_OBJECT *Op);
470 * aslmap - opcode mappings and reserved method names
473 AslMapNamedOpcodeToDataType (
478 * aslpredef - ACPI predefined names support
481 ApCheckForPredefinedMethod (
482 ACPI_PARSE_OBJECT *Op,
483 ASL_METHOD_INFO *MethodInfo);
486 ApCheckPredefinedReturnValue (
487 ACPI_PARSE_OBJECT *Op,
488 ASL_METHOD_INFO *MethodInfo);
491 ApCheckForPredefinedName (
492 ACPI_PARSE_OBJECT *Op,
496 ApCheckForPredefinedObject (
497 ACPI_PARSE_OBJECT *Op,
501 ApDisplayReservedNames (
506 * asltransform - parse tree transformations
510 ACPI_PARSE_OBJECT *Op,
516 * asltree - parse tree support
520 ACPI_PARSE_OBJECT *Op,
522 ASL_WALK_CALLBACK DescendingCallback,
523 ASL_WALK_CALLBACK AscendingCallback,
526 /* Values for "Visitation" parameter above */
528 #define ASL_WALK_VISIT_DOWNWARD 0x01
529 #define ASL_WALK_VISIT_UPWARD 0x02
530 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
539 ACPI_PARSE_OBJECT *Op);
544 ACPI_PARSE_OBJECT *Op);
557 TrCreateValuedLeafNode (
562 TrCreateConstantLeafNode (
567 ACPI_PARSE_OBJECT *Op,
573 ACPI_PARSE_OBJECT *Op);
581 ACPI_PARSE_OBJECT *Op1,
582 ACPI_PARSE_OBJECT *Op2);
586 ACPI_PARSE_OBJECT *Op1,
587 ACPI_PARSE_OBJECT *Op2);
591 ACPI_PARSE_OBJECT *Op,
601 * aslfiles - File I/O support
608 FlAddIncludeDirectory (
613 ACPI_PARSE_OBJECT *Op);
661 char *InputFilename);
664 FlOpenAmlOutputFile (
665 char *InputFilename);
668 FlOpenMiscOutputFiles (
669 char *InputFilename);
673 * asload - load namespace in prep for cross reference
677 ACPI_PARSE_OBJECT *RootOp);
681 * asllookup - namespace cross reference
684 LkCrossReferenceNamespace (
688 LkFindUnreferencedObjects (
701 * aslutils - common compiler utilites
709 /* Type values for above */
711 #define ASL_DEBUG_OUTPUT 0
712 #define ASL_PARSE_OUTPUT 1
713 #define ASL_TREE_OUTPUT 2
716 UtDisplaySupportedTables (
720 UtDisplayConstantOpcodes (
736 UtPrintFormattedName (
754 UtConvertByteToAsmHex (
764 ACPI_PARSE_OBJECT *Op);
773 char **ConvertedName);
776 UtAttachNamepathToOwner (
777 ACPI_PARSE_OBJECT *Op,
778 ACPI_PARSE_OBJECT *NameNode);
781 UtCheckIntegerRange (
782 ACPI_PARSE_OBJECT *Op,
798 * asluuid - UUID support
805 AuConvertStringToUuid (
810 AuConvertUuidToString (
815 * aslresource - Resource template generation utilities
818 RsSmallAddressCheck (
824 ACPI_PARSE_OBJECT *MinOp,
825 ACPI_PARSE_OBJECT *MaxOp,
826 ACPI_PARSE_OBJECT *LengthOp,
827 ACPI_PARSE_OBJECT *AlignOp,
828 ACPI_PARSE_OBJECT *Op);
831 RsLargeAddressCheck (
837 ACPI_PARSE_OBJECT *MinOp,
838 ACPI_PARSE_OBJECT *MaxOp,
839 ACPI_PARSE_OBJECT *LengthOp,
840 ACPI_PARSE_OBJECT *GranOp,
841 ACPI_PARSE_OBJECT *Op);
844 RsGetStringDataLength (
845 ACPI_PARSE_OBJECT *InitializerOp);
848 RsAllocateResourceNode (
852 RsCreateResourceField (
853 ACPI_PARSE_OBJECT *Op,
862 ACPI_PARSE_OBJECT *Op,
869 ACPI_PARSE_OBJECT *Op,
874 RsCompleteNodeAndGetNext (
875 ACPI_PARSE_OBJECT *Op);
878 RsCheckListForDuplicates (
879 ACPI_PARSE_OBJECT *Op);
882 RsDoOneResourceDescriptor (
883 ACPI_PARSE_OBJECT *DescriptorTypeOp,
884 UINT32 CurrentByteOffset,
887 /* Values for State above */
889 #define ACPI_RSTATE_NORMAL 0
890 #define ACPI_RSTATE_START_DEPENDENT 1
891 #define ACPI_RSTATE_DEPENDENT_LIST 2
894 RsLinkDescriptorChain (
895 ASL_RESOURCE_NODE **PreviousRnode,
896 ASL_RESOURCE_NODE *Rnode);
899 RsDoResourceTemplate (
900 ACPI_PARSE_OBJECT *Op);
904 * aslrestype1 - Miscellaneous Small descriptors
907 RsDoEndTagDescriptor (
908 ACPI_PARSE_OBJECT *Op,
909 UINT32 CurrentByteOffset);
912 RsDoEndDependentDescriptor (
913 ACPI_PARSE_OBJECT *Op,
914 UINT32 CurrentByteOffset);
917 RsDoMemory24Descriptor (
918 ACPI_PARSE_OBJECT *Op,
919 UINT32 CurrentByteOffset);
922 RsDoMemory32Descriptor (
923 ACPI_PARSE_OBJECT *Op,
924 UINT32 CurrentByteOffset);
927 RsDoMemory32FixedDescriptor (
928 ACPI_PARSE_OBJECT *Op,
929 UINT32 CurrentByteOffset);
932 RsDoStartDependentDescriptor (
933 ACPI_PARSE_OBJECT *Op,
934 UINT32 CurrentByteOffset);
937 RsDoStartDependentNoPriDescriptor (
938 ACPI_PARSE_OBJECT *Op,
939 UINT32 CurrentByteOffset);
942 RsDoVendorSmallDescriptor (
943 ACPI_PARSE_OBJECT *Op,
944 UINT32 CurrentByteOffset);
948 * aslrestype1i - I/O-related Small descriptors
952 ACPI_PARSE_OBJECT *Op,
953 UINT32 CurrentByteOffset);
956 RsDoFixedDmaDescriptor (
957 ACPI_PARSE_OBJECT *Op,
958 UINT32 CurrentByteOffset);
961 RsDoFixedIoDescriptor (
962 ACPI_PARSE_OBJECT *Op,
963 UINT32 CurrentByteOffset);
967 ACPI_PARSE_OBJECT *Op,
968 UINT32 CurrentByteOffset);
972 ACPI_PARSE_OBJECT *Op,
973 UINT32 CurrentByteOffset);
976 RsDoIrqNoFlagsDescriptor (
977 ACPI_PARSE_OBJECT *Op,
978 UINT32 CurrentByteOffset);
982 * aslrestype2 - Large resource descriptors
985 RsDoInterruptDescriptor (
986 ACPI_PARSE_OBJECT *Op,
987 UINT32 CurrentByteOffset);
990 RsDoVendorLargeDescriptor (
991 ACPI_PARSE_OBJECT *Op,
992 UINT32 CurrentByteOffset);
995 RsDoGeneralRegisterDescriptor (
996 ACPI_PARSE_OBJECT *Op,
997 UINT32 CurrentByteOffset);
1000 RsDoGpioIntDescriptor (
1001 ACPI_PARSE_OBJECT *Op,
1002 UINT32 CurrentByteOffset);
1005 RsDoGpioIoDescriptor (
1006 ACPI_PARSE_OBJECT *Op,
1007 UINT32 CurrentByteOffset);
1010 RsDoI2cSerialBusDescriptor (
1011 ACPI_PARSE_OBJECT *Op,
1012 UINT32 CurrentByteOffset);
1015 RsDoSpiSerialBusDescriptor (
1016 ACPI_PARSE_OBJECT *Op,
1017 UINT32 CurrentByteOffset);
1020 RsDoUartSerialBusDescriptor (
1021 ACPI_PARSE_OBJECT *Op,
1022 UINT32 CurrentByteOffset);
1025 * aslrestype2d - DWord address descriptors
1028 RsDoDwordIoDescriptor (
1029 ACPI_PARSE_OBJECT *Op,
1030 UINT32 CurrentByteOffset);
1033 RsDoDwordMemoryDescriptor (
1034 ACPI_PARSE_OBJECT *Op,
1035 UINT32 CurrentByteOffset);
1038 RsDoDwordSpaceDescriptor (
1039 ACPI_PARSE_OBJECT *Op,
1040 UINT32 CurrentByteOffset);
1044 * aslrestype2e - Extended address descriptors
1047 RsDoExtendedIoDescriptor (
1048 ACPI_PARSE_OBJECT *Op,
1049 UINT32 CurrentByteOffset);
1052 RsDoExtendedMemoryDescriptor (
1053 ACPI_PARSE_OBJECT *Op,
1054 UINT32 CurrentByteOffset);
1057 RsDoExtendedSpaceDescriptor (
1058 ACPI_PARSE_OBJECT *Op,
1059 UINT32 CurrentByteOffset);
1063 * aslrestype2q - QWord address descriptors
1066 RsDoQwordIoDescriptor (
1067 ACPI_PARSE_OBJECT *Op,
1068 UINT32 CurrentByteOffset);
1071 RsDoQwordMemoryDescriptor (
1072 ACPI_PARSE_OBJECT *Op,
1073 UINT32 CurrentByteOffset);
1076 RsDoQwordSpaceDescriptor (
1077 ACPI_PARSE_OBJECT *Op,
1078 UINT32 CurrentByteOffset);
1082 * aslrestype2w - Word address descriptors
1085 RsDoWordIoDescriptor (
1086 ACPI_PARSE_OBJECT *Op,
1087 UINT32 CurrentByteOffset);
1090 RsDoWordSpaceDescriptor (
1091 ACPI_PARSE_OBJECT *Op,
1092 UINT32 CurrentByteOffset);
1095 RsDoWordBusNumberDescriptor (
1096 ACPI_PARSE_OBJECT *Op,
1097 UINT32 CurrentByteOffset);
1100 * Entry to data table compiler subsystem
1110 #endif /* __ASLCOMPILER_H */