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 ResetCurrentLineBuffer (
111 AslPopInputFileStack (
115 AslPushInputFileStack (
120 * aslstartup - entered from main()
123 AslInitializeGlobals (
127 ACPI_STATUS (*ASL_PATHNAME_CALLBACK) (
133 ASL_PATHNAME_CALLBACK Callback);
140 * aslcompile - compile mainline
147 AslCompilerFileHeader (
164 ASL_FILE_INFO *FileInfo);
168 * aslwalks - semantic analysis and parse tree walks
171 AnOtherSemanticAnalysisWalkBegin (
172 ACPI_PARSE_OBJECT *Op,
177 AnOtherSemanticAnalysisWalkEnd (
178 ACPI_PARSE_OBJECT *Op,
183 AnOperandTypecheckWalkEnd (
184 ACPI_PARSE_OBJECT *Op,
189 AnMethodAnalysisWalkBegin (
190 ACPI_PARSE_OBJECT *Op,
195 AnMethodAnalysisWalkEnd (
196 ACPI_PARSE_OBJECT *Op,
201 AnMethodTypingWalkEnd (
202 ACPI_PARSE_OBJECT *Op,
208 * aslbtypes - bitfield data types
211 AnMapObjTypeToBtype (
212 ACPI_PARSE_OBJECT *Op);
215 AnMapArgTypeToBtype (
220 ACPI_PARSE_OBJECT *Op);
229 * aslanalyze - Support functions for parse tree walks
233 ACPI_PARSE_OBJECT *Op,
236 /* Values for Type argument above */
238 #define ASL_TYPE_HID 0
239 #define ASL_TYPE_CID 1
243 ACPI_PARSE_OBJECT *Op);
246 AnGetInternalMethodReturnType (
247 ACPI_PARSE_OBJECT *Op);
250 AnLastStatementIsReturn (
251 ACPI_PARSE_OBJECT *Op);
254 AnCheckMethodReturnValue (
255 ACPI_PARSE_OBJECT *Op,
256 const ACPI_OPCODE_INFO *OpInfo,
257 ACPI_PARSE_OBJECT *ArgOp,
258 UINT32 RequiredBtypes,
259 UINT32 ThisNodeBtype);
263 ACPI_PARSE_OBJECT *Op);
266 ApCheckForGpeNameConflict (
267 ACPI_PARSE_OBJECT *Op);
271 ACPI_PARSE_OBJECT *Op);
275 * aslerror - error handling/reporting
281 ACPI_PARSE_OBJECT *Op,
285 AslCoreSubsystemError (
286 ACPI_PARSE_OBJECT *Op,
299 UINT32 CurrentLineNumber,
300 UINT32 LogicalLineNumber,
301 UINT32 LogicalByteOffset,
319 ASL_ERROR_MSG *Enode,
330 ACPI_PHYSICAL_ADDRESS
331 AeLocalGetRootPointer (
336 * asllisting - generate all "listing" type files
343 LsWriteNodeToAsmListing (
344 ACPI_PARSE_OBJECT *Op);
348 ACPI_PARSE_OBJECT *Op,
360 * aslfold - constant folding
364 ACPI_PARSE_OBJECT *Op,
370 * aslopcodes - generate AML opcodes
374 ACPI_PARSE_OBJECT *Op,
379 OpcAmlOpcodeUpdateWalk (
380 ACPI_PARSE_OBJECT *Op,
385 OpcGenerateAmlOpcode (
386 ACPI_PARSE_OBJECT *Op);
389 OpcSetOptimalIntegerSize (
390 ACPI_PARSE_OBJECT *Op);
394 ACPI_PARSE_OBJECT *Op);
398 * asloperands - generate AML operands for the AML opcodes
402 ACPI_PARSE_OBJECT *Op,
406 OpnGenerateAmlOperands (
407 ACPI_PARSE_OBJECT *Op);
411 ACPI_PARSE_OBJECT *Op);
415 * aslopt - optmization
418 OptOptimizeNamePath (
419 ACPI_PARSE_OBJECT *Op,
421 ACPI_WALK_STATE *WalkState,
423 ACPI_NAMESPACE_NODE *TargetNode);
427 * aslcodegen - code generation
430 CgGenerateAmlOutput (
445 * asllength - calculate/adjust AML package lengths
448 LnPackageLengthWalk (
449 ACPI_PARSE_OBJECT *Op,
455 ACPI_PARSE_OBJECT *Op,
460 CgGenerateAmlLengths (
461 ACPI_PARSE_OBJECT *Op);
465 * aslmap - opcode mappings and reserved method names
468 AslMapNamedOpcodeToDataType (
473 * aslpredef - ACPI predefined names support
476 ApCheckForPredefinedMethod (
477 ACPI_PARSE_OBJECT *Op,
478 ASL_METHOD_INFO *MethodInfo);
481 ApCheckPredefinedReturnValue (
482 ACPI_PARSE_OBJECT *Op,
483 ASL_METHOD_INFO *MethodInfo);
486 ApCheckForPredefinedName (
487 ACPI_PARSE_OBJECT *Op,
491 ApCheckForPredefinedObject (
492 ACPI_PARSE_OBJECT *Op,
496 ApDisplayReservedNames (
501 * asltransform - parse tree transformations
505 ACPI_PARSE_OBJECT *Op,
511 * asltree - parse tree support
515 ACPI_PARSE_OBJECT *Op,
517 ASL_WALK_CALLBACK DescendingCallback,
518 ASL_WALK_CALLBACK AscendingCallback,
521 /* Values for "Visitation" parameter above */
523 #define ASL_WALK_VISIT_DOWNWARD 0x01
524 #define ASL_WALK_VISIT_UPWARD 0x02
525 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
534 ACPI_PARSE_OBJECT *Op);
539 ACPI_PARSE_OBJECT *Op);
552 TrCreateValuedLeafNode (
557 TrCreateConstantLeafNode (
562 ACPI_PARSE_OBJECT *Op,
568 ACPI_PARSE_OBJECT *Op);
576 ACPI_PARSE_OBJECT *Op1,
577 ACPI_PARSE_OBJECT *Op2);
581 ACPI_PARSE_OBJECT *Op1,
582 ACPI_PARSE_OBJECT *Op2);
586 ACPI_PARSE_OBJECT *Op,
596 * aslfiles - File I/O support
603 FlAddIncludeDirectory (
608 ACPI_PARSE_OBJECT *Op);
648 ACPI_PARSE_OBJECT *Op);
652 char *InputFilename);
655 FlOpenAmlOutputFile (
656 char *InputFilename);
659 FlOpenMiscOutputFiles (
660 char *InputFilename);
664 * asload - load namespace in prep for cross reference
668 ACPI_PARSE_OBJECT *RootOp);
672 * asllookup - namespace cross reference
675 LkCrossReferenceNamespace (
679 LkFindUnreferencedObjects (
692 * aslutils - common compiler utilites
700 /* Type values for above */
702 #define ASL_DEBUG_OUTPUT 0
703 #define ASL_PARSE_OUTPUT 1
704 #define ASL_TREE_OUTPUT 2
707 UtDisplaySupportedTables (
711 UtDisplayConstantOpcodes (
727 UtPrintFormattedName (
745 UtConvertByteToAsmHex (
755 ACPI_PARSE_OBJECT *Op);
764 char **ConvertedName);
767 UtAttachNamepathToOwner (
768 ACPI_PARSE_OBJECT *Op,
769 ACPI_PARSE_OBJECT *NameNode);
772 UtCheckIntegerRange (
773 ACPI_PARSE_OBJECT *Op,
789 * asluuid - UUID support
796 AuConvertStringToUuid (
801 AuConvertUuidToString (
806 * aslresource - Resource template generation utilities
809 RsSmallAddressCheck (
815 ACPI_PARSE_OBJECT *MinOp,
816 ACPI_PARSE_OBJECT *MaxOp,
817 ACPI_PARSE_OBJECT *LengthOp,
818 ACPI_PARSE_OBJECT *AlignOp,
819 ACPI_PARSE_OBJECT *Op);
822 RsLargeAddressCheck (
828 ACPI_PARSE_OBJECT *MinOp,
829 ACPI_PARSE_OBJECT *MaxOp,
830 ACPI_PARSE_OBJECT *LengthOp,
831 ACPI_PARSE_OBJECT *GranOp,
832 ACPI_PARSE_OBJECT *Op);
835 RsGetStringDataLength (
836 ACPI_PARSE_OBJECT *InitializerOp);
839 RsAllocateResourceNode (
843 RsCreateResourceField (
844 ACPI_PARSE_OBJECT *Op,
853 ACPI_PARSE_OBJECT *Op,
860 ACPI_PARSE_OBJECT *Op,
865 RsCompleteNodeAndGetNext (
866 ACPI_PARSE_OBJECT *Op);
869 RsCheckListForDuplicates (
870 ACPI_PARSE_OBJECT *Op);
873 RsDoOneResourceDescriptor (
874 ACPI_PARSE_OBJECT *DescriptorTypeOp,
875 UINT32 CurrentByteOffset,
878 /* Values for State above */
880 #define ACPI_RSTATE_NORMAL 0
881 #define ACPI_RSTATE_START_DEPENDENT 1
882 #define ACPI_RSTATE_DEPENDENT_LIST 2
885 RsLinkDescriptorChain (
886 ASL_RESOURCE_NODE **PreviousRnode,
887 ASL_RESOURCE_NODE *Rnode);
890 RsDoResourceTemplate (
891 ACPI_PARSE_OBJECT *Op);
895 * aslrestype1 - Miscellaneous Small descriptors
898 RsDoEndTagDescriptor (
899 ACPI_PARSE_OBJECT *Op,
900 UINT32 CurrentByteOffset);
903 RsDoEndDependentDescriptor (
904 ACPI_PARSE_OBJECT *Op,
905 UINT32 CurrentByteOffset);
908 RsDoMemory24Descriptor (
909 ACPI_PARSE_OBJECT *Op,
910 UINT32 CurrentByteOffset);
913 RsDoMemory32Descriptor (
914 ACPI_PARSE_OBJECT *Op,
915 UINT32 CurrentByteOffset);
918 RsDoMemory32FixedDescriptor (
919 ACPI_PARSE_OBJECT *Op,
920 UINT32 CurrentByteOffset);
923 RsDoStartDependentDescriptor (
924 ACPI_PARSE_OBJECT *Op,
925 UINT32 CurrentByteOffset);
928 RsDoStartDependentNoPriDescriptor (
929 ACPI_PARSE_OBJECT *Op,
930 UINT32 CurrentByteOffset);
933 RsDoVendorSmallDescriptor (
934 ACPI_PARSE_OBJECT *Op,
935 UINT32 CurrentByteOffset);
939 * aslrestype1i - I/O-related Small descriptors
943 ACPI_PARSE_OBJECT *Op,
944 UINT32 CurrentByteOffset);
947 RsDoFixedDmaDescriptor (
948 ACPI_PARSE_OBJECT *Op,
949 UINT32 CurrentByteOffset);
952 RsDoFixedIoDescriptor (
953 ACPI_PARSE_OBJECT *Op,
954 UINT32 CurrentByteOffset);
958 ACPI_PARSE_OBJECT *Op,
959 UINT32 CurrentByteOffset);
963 ACPI_PARSE_OBJECT *Op,
964 UINT32 CurrentByteOffset);
967 RsDoIrqNoFlagsDescriptor (
968 ACPI_PARSE_OBJECT *Op,
969 UINT32 CurrentByteOffset);
973 * aslrestype2 - Large resource descriptors
976 RsDoInterruptDescriptor (
977 ACPI_PARSE_OBJECT *Op,
978 UINT32 CurrentByteOffset);
981 RsDoVendorLargeDescriptor (
982 ACPI_PARSE_OBJECT *Op,
983 UINT32 CurrentByteOffset);
986 RsDoGeneralRegisterDescriptor (
987 ACPI_PARSE_OBJECT *Op,
988 UINT32 CurrentByteOffset);
991 RsDoGpioIntDescriptor (
992 ACPI_PARSE_OBJECT *Op,
993 UINT32 CurrentByteOffset);
996 RsDoGpioIoDescriptor (
997 ACPI_PARSE_OBJECT *Op,
998 UINT32 CurrentByteOffset);
1001 RsDoI2cSerialBusDescriptor (
1002 ACPI_PARSE_OBJECT *Op,
1003 UINT32 CurrentByteOffset);
1006 RsDoSpiSerialBusDescriptor (
1007 ACPI_PARSE_OBJECT *Op,
1008 UINT32 CurrentByteOffset);
1011 RsDoUartSerialBusDescriptor (
1012 ACPI_PARSE_OBJECT *Op,
1013 UINT32 CurrentByteOffset);
1016 * aslrestype2d - DWord address descriptors
1019 RsDoDwordIoDescriptor (
1020 ACPI_PARSE_OBJECT *Op,
1021 UINT32 CurrentByteOffset);
1024 RsDoDwordMemoryDescriptor (
1025 ACPI_PARSE_OBJECT *Op,
1026 UINT32 CurrentByteOffset);
1029 RsDoDwordSpaceDescriptor (
1030 ACPI_PARSE_OBJECT *Op,
1031 UINT32 CurrentByteOffset);
1035 * aslrestype2e - Extended address descriptors
1038 RsDoExtendedIoDescriptor (
1039 ACPI_PARSE_OBJECT *Op,
1040 UINT32 CurrentByteOffset);
1043 RsDoExtendedMemoryDescriptor (
1044 ACPI_PARSE_OBJECT *Op,
1045 UINT32 CurrentByteOffset);
1048 RsDoExtendedSpaceDescriptor (
1049 ACPI_PARSE_OBJECT *Op,
1050 UINT32 CurrentByteOffset);
1054 * aslrestype2q - QWord address descriptors
1057 RsDoQwordIoDescriptor (
1058 ACPI_PARSE_OBJECT *Op,
1059 UINT32 CurrentByteOffset);
1062 RsDoQwordMemoryDescriptor (
1063 ACPI_PARSE_OBJECT *Op,
1064 UINT32 CurrentByteOffset);
1067 RsDoQwordSpaceDescriptor (
1068 ACPI_PARSE_OBJECT *Op,
1069 UINT32 CurrentByteOffset);
1073 * aslrestype2w - Word address descriptors
1076 RsDoWordIoDescriptor (
1077 ACPI_PARSE_OBJECT *Op,
1078 UINT32 CurrentByteOffset);
1081 RsDoWordSpaceDescriptor (
1082 ACPI_PARSE_OBJECT *Op,
1083 UINT32 CurrentByteOffset);
1086 RsDoWordBusNumberDescriptor (
1087 ACPI_PARSE_OBJECT *Op,
1088 UINT32 CurrentByteOffset);
1091 * Entry to data table compiler subsystem
1101 #endif /* __ASLCOMPILER_H */