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 (
171 BOOLEAN DisplayErrors);
175 * aslwalks - semantic analysis and parse tree walks
178 AnOtherSemanticAnalysisWalkBegin (
179 ACPI_PARSE_OBJECT *Op,
184 AnOtherSemanticAnalysisWalkEnd (
185 ACPI_PARSE_OBJECT *Op,
190 AnOperandTypecheckWalkEnd (
191 ACPI_PARSE_OBJECT *Op,
196 AnMethodAnalysisWalkBegin (
197 ACPI_PARSE_OBJECT *Op,
202 AnMethodAnalysisWalkEnd (
203 ACPI_PARSE_OBJECT *Op,
208 AnMethodTypingWalkEnd (
209 ACPI_PARSE_OBJECT *Op,
215 * aslbtypes - bitfield data types
218 AnMapObjTypeToBtype (
219 ACPI_PARSE_OBJECT *Op);
222 AnMapArgTypeToBtype (
227 ACPI_PARSE_OBJECT *Op);
236 * aslanalyze - Support functions for parse tree walks
240 ACPI_PARSE_OBJECT *Op,
243 /* Values for Type argument above */
245 #define ASL_TYPE_HID 0
246 #define ASL_TYPE_CID 1
250 ACPI_PARSE_OBJECT *Op);
253 AnGetInternalMethodReturnType (
254 ACPI_PARSE_OBJECT *Op);
257 AnLastStatementIsReturn (
258 ACPI_PARSE_OBJECT *Op);
261 AnCheckMethodReturnValue (
262 ACPI_PARSE_OBJECT *Op,
263 const ACPI_OPCODE_INFO *OpInfo,
264 ACPI_PARSE_OBJECT *ArgOp,
265 UINT32 RequiredBtypes,
266 UINT32 ThisNodeBtype);
270 ACPI_PARSE_OBJECT *Op);
273 ApCheckForGpeNameConflict (
274 ACPI_PARSE_OBJECT *Op);
278 ACPI_PARSE_OBJECT *Op);
282 * aslerror - error handling/reporting
288 ACPI_PARSE_OBJECT *Op,
292 AslCoreSubsystemError (
293 ACPI_PARSE_OBJECT *Op,
306 UINT32 CurrentLineNumber,
307 UINT32 LogicalLineNumber,
308 UINT32 LogicalByteOffset,
326 ASL_ERROR_MSG *Enode,
337 ACPI_PHYSICAL_ADDRESS
338 AeLocalGetRootPointer (
343 * asllisting - generate all "listing" type files
350 LsWriteNodeToAsmListing (
351 ACPI_PARSE_OBJECT *Op);
355 ACPI_PARSE_OBJECT *Op,
367 * aslfold - constant folding
371 ACPI_PARSE_OBJECT *Op,
377 * aslopcodes - generate AML opcodes
381 ACPI_PARSE_OBJECT *Op,
386 OpcAmlOpcodeUpdateWalk (
387 ACPI_PARSE_OBJECT *Op,
392 OpcGenerateAmlOpcode (
393 ACPI_PARSE_OBJECT *Op);
396 OpcSetOptimalIntegerSize (
397 ACPI_PARSE_OBJECT *Op);
401 ACPI_PARSE_OBJECT *Op);
405 * asloperands - generate AML operands for the AML opcodes
409 ACPI_PARSE_OBJECT *Op,
413 OpnGenerateAmlOperands (
414 ACPI_PARSE_OBJECT *Op);
418 ACPI_PARSE_OBJECT *Op);
422 * aslopt - optmization
425 OptOptimizeNamePath (
426 ACPI_PARSE_OBJECT *Op,
428 ACPI_WALK_STATE *WalkState,
430 ACPI_NAMESPACE_NODE *TargetNode);
434 * aslcodegen - code generation
437 CgGenerateAmlOutput (
452 * asllength - calculate/adjust AML package lengths
455 LnPackageLengthWalk (
456 ACPI_PARSE_OBJECT *Op,
462 ACPI_PARSE_OBJECT *Op,
467 CgGenerateAmlLengths (
468 ACPI_PARSE_OBJECT *Op);
472 * aslmap - opcode mappings and reserved method names
475 AslMapNamedOpcodeToDataType (
480 * aslpredef - ACPI predefined names support
483 ApCheckForPredefinedMethod (
484 ACPI_PARSE_OBJECT *Op,
485 ASL_METHOD_INFO *MethodInfo);
488 ApCheckPredefinedReturnValue (
489 ACPI_PARSE_OBJECT *Op,
490 ASL_METHOD_INFO *MethodInfo);
493 ApCheckForPredefinedName (
494 ACPI_PARSE_OBJECT *Op,
498 ApCheckForPredefinedObject (
499 ACPI_PARSE_OBJECT *Op,
503 ApDisplayReservedNames (
508 * asltransform - parse tree transformations
512 ACPI_PARSE_OBJECT *Op,
518 * asltree - parse tree support
522 ACPI_PARSE_OBJECT *Op,
524 ASL_WALK_CALLBACK DescendingCallback,
525 ASL_WALK_CALLBACK AscendingCallback,
528 /* Values for "Visitation" parameter above */
530 #define ASL_WALK_VISIT_DOWNWARD 0x01
531 #define ASL_WALK_VISIT_UPWARD 0x02
532 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
541 ACPI_PARSE_OBJECT *Op);
546 ACPI_PARSE_OBJECT *Op);
559 TrCreateValuedLeafNode (
564 TrCreateConstantLeafNode (
569 ACPI_PARSE_OBJECT *Op,
575 ACPI_PARSE_OBJECT *Op);
583 ACPI_PARSE_OBJECT *Op1,
584 ACPI_PARSE_OBJECT *Op2);
588 ACPI_PARSE_OBJECT *Op1,
589 ACPI_PARSE_OBJECT *Op2);
593 ACPI_PARSE_OBJECT *Op,
603 * aslfiles - File I/O support
610 FlAddIncludeDirectory (
620 ACPI_PARSE_OBJECT *Op);
668 char *InputFilename);
671 FlOpenAmlOutputFile (
672 char *InputFilename);
675 FlOpenMiscOutputFiles (
676 char *InputFilename);
680 * asload - load namespace in prep for cross reference
684 ACPI_PARSE_OBJECT *RootOp);
688 * asllookup - namespace cross reference
691 LkCrossReferenceNamespace (
695 LkFindUnreferencedObjects (
708 * aslutils - common compiler utilites
716 /* Type values for above */
718 #define ASL_DEBUG_OUTPUT 0
719 #define ASL_PARSE_OUTPUT 1
720 #define ASL_TREE_OUTPUT 2
723 UtDisplaySupportedTables (
727 UtDisplayConstantOpcodes (
743 UtPrintFormattedName (
761 UtConvertByteToAsmHex (
771 ACPI_PARSE_OBJECT *Op);
780 char **ConvertedName);
783 UtAttachNamepathToOwner (
784 ACPI_PARSE_OBJECT *Op,
785 ACPI_PARSE_OBJECT *NameNode);
788 UtCheckIntegerRange (
789 ACPI_PARSE_OBJECT *Op,
805 * asluuid - UUID support
812 AuConvertStringToUuid (
817 AuConvertUuidToString (
822 * aslresource - Resource template generation utilities
825 RsSmallAddressCheck (
831 ACPI_PARSE_OBJECT *MinOp,
832 ACPI_PARSE_OBJECT *MaxOp,
833 ACPI_PARSE_OBJECT *LengthOp,
834 ACPI_PARSE_OBJECT *AlignOp,
835 ACPI_PARSE_OBJECT *Op);
838 RsLargeAddressCheck (
844 ACPI_PARSE_OBJECT *MinOp,
845 ACPI_PARSE_OBJECT *MaxOp,
846 ACPI_PARSE_OBJECT *LengthOp,
847 ACPI_PARSE_OBJECT *GranOp,
848 ACPI_PARSE_OBJECT *Op);
851 RsGetStringDataLength (
852 ACPI_PARSE_OBJECT *InitializerOp);
855 RsAllocateResourceNode (
859 RsCreateResourceField (
860 ACPI_PARSE_OBJECT *Op,
869 ACPI_PARSE_OBJECT *Op,
876 ACPI_PARSE_OBJECT *Op,
881 RsCompleteNodeAndGetNext (
882 ACPI_PARSE_OBJECT *Op);
885 RsCheckListForDuplicates (
886 ACPI_PARSE_OBJECT *Op);
889 RsDoOneResourceDescriptor (
890 ACPI_PARSE_OBJECT *DescriptorTypeOp,
891 UINT32 CurrentByteOffset,
894 /* Values for State above */
896 #define ACPI_RSTATE_NORMAL 0
897 #define ACPI_RSTATE_START_DEPENDENT 1
898 #define ACPI_RSTATE_DEPENDENT_LIST 2
901 RsLinkDescriptorChain (
902 ASL_RESOURCE_NODE **PreviousRnode,
903 ASL_RESOURCE_NODE *Rnode);
906 RsDoResourceTemplate (
907 ACPI_PARSE_OBJECT *Op);
911 * aslrestype1 - Miscellaneous Small descriptors
914 RsDoEndTagDescriptor (
915 ACPI_PARSE_OBJECT *Op,
916 UINT32 CurrentByteOffset);
919 RsDoEndDependentDescriptor (
920 ACPI_PARSE_OBJECT *Op,
921 UINT32 CurrentByteOffset);
924 RsDoMemory24Descriptor (
925 ACPI_PARSE_OBJECT *Op,
926 UINT32 CurrentByteOffset);
929 RsDoMemory32Descriptor (
930 ACPI_PARSE_OBJECT *Op,
931 UINT32 CurrentByteOffset);
934 RsDoMemory32FixedDescriptor (
935 ACPI_PARSE_OBJECT *Op,
936 UINT32 CurrentByteOffset);
939 RsDoStartDependentDescriptor (
940 ACPI_PARSE_OBJECT *Op,
941 UINT32 CurrentByteOffset);
944 RsDoStartDependentNoPriDescriptor (
945 ACPI_PARSE_OBJECT *Op,
946 UINT32 CurrentByteOffset);
949 RsDoVendorSmallDescriptor (
950 ACPI_PARSE_OBJECT *Op,
951 UINT32 CurrentByteOffset);
955 * aslrestype1i - I/O-related Small descriptors
959 ACPI_PARSE_OBJECT *Op,
960 UINT32 CurrentByteOffset);
963 RsDoFixedDmaDescriptor (
964 ACPI_PARSE_OBJECT *Op,
965 UINT32 CurrentByteOffset);
968 RsDoFixedIoDescriptor (
969 ACPI_PARSE_OBJECT *Op,
970 UINT32 CurrentByteOffset);
974 ACPI_PARSE_OBJECT *Op,
975 UINT32 CurrentByteOffset);
979 ACPI_PARSE_OBJECT *Op,
980 UINT32 CurrentByteOffset);
983 RsDoIrqNoFlagsDescriptor (
984 ACPI_PARSE_OBJECT *Op,
985 UINT32 CurrentByteOffset);
989 * aslrestype2 - Large resource descriptors
992 RsDoInterruptDescriptor (
993 ACPI_PARSE_OBJECT *Op,
994 UINT32 CurrentByteOffset);
997 RsDoVendorLargeDescriptor (
998 ACPI_PARSE_OBJECT *Op,
999 UINT32 CurrentByteOffset);
1002 RsDoGeneralRegisterDescriptor (
1003 ACPI_PARSE_OBJECT *Op,
1004 UINT32 CurrentByteOffset);
1007 RsDoGpioIntDescriptor (
1008 ACPI_PARSE_OBJECT *Op,
1009 UINT32 CurrentByteOffset);
1012 RsDoGpioIoDescriptor (
1013 ACPI_PARSE_OBJECT *Op,
1014 UINT32 CurrentByteOffset);
1017 RsDoI2cSerialBusDescriptor (
1018 ACPI_PARSE_OBJECT *Op,
1019 UINT32 CurrentByteOffset);
1022 RsDoSpiSerialBusDescriptor (
1023 ACPI_PARSE_OBJECT *Op,
1024 UINT32 CurrentByteOffset);
1027 RsDoUartSerialBusDescriptor (
1028 ACPI_PARSE_OBJECT *Op,
1029 UINT32 CurrentByteOffset);
1032 * aslrestype2d - DWord address descriptors
1035 RsDoDwordIoDescriptor (
1036 ACPI_PARSE_OBJECT *Op,
1037 UINT32 CurrentByteOffset);
1040 RsDoDwordMemoryDescriptor (
1041 ACPI_PARSE_OBJECT *Op,
1042 UINT32 CurrentByteOffset);
1045 RsDoDwordSpaceDescriptor (
1046 ACPI_PARSE_OBJECT *Op,
1047 UINT32 CurrentByteOffset);
1051 * aslrestype2e - Extended address descriptors
1054 RsDoExtendedIoDescriptor (
1055 ACPI_PARSE_OBJECT *Op,
1056 UINT32 CurrentByteOffset);
1059 RsDoExtendedMemoryDescriptor (
1060 ACPI_PARSE_OBJECT *Op,
1061 UINT32 CurrentByteOffset);
1064 RsDoExtendedSpaceDescriptor (
1065 ACPI_PARSE_OBJECT *Op,
1066 UINT32 CurrentByteOffset);
1070 * aslrestype2q - QWord address descriptors
1073 RsDoQwordIoDescriptor (
1074 ACPI_PARSE_OBJECT *Op,
1075 UINT32 CurrentByteOffset);
1078 RsDoQwordMemoryDescriptor (
1079 ACPI_PARSE_OBJECT *Op,
1080 UINT32 CurrentByteOffset);
1083 RsDoQwordSpaceDescriptor (
1084 ACPI_PARSE_OBJECT *Op,
1085 UINT32 CurrentByteOffset);
1089 * aslrestype2w - Word address descriptors
1092 RsDoWordIoDescriptor (
1093 ACPI_PARSE_OBJECT *Op,
1094 UINT32 CurrentByteOffset);
1097 RsDoWordSpaceDescriptor (
1098 ACPI_PARSE_OBJECT *Op,
1099 UINT32 CurrentByteOffset);
1102 RsDoWordBusNumberDescriptor (
1103 ACPI_PARSE_OBJECT *Op,
1104 UINT32 CurrentByteOffset);
1107 * Entry to data table compiler subsystem
1117 #endif /* __ASLCOMPILER_H */