2 /******************************************************************************
4 * Module Name: aslcompiler.h - common include file for iASL
6 *****************************************************************************/
9 * Copyright (C) 2000 - 2011, 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>
80 /*******************************************************************************
84 ******************************************************************************/
87 * parser - generated from flex/bison, lex/yacc, etc.
102 ResetCurrentLineBuffer (
110 AslPopInputFileStack (
114 AslPushInputFileStack (
119 * aslstartup - entered from main()
122 AslInitializeGlobals (
126 ACPI_STATUS (*ASL_PATHNAME_CALLBACK) (
132 ASL_PATHNAME_CALLBACK Callback);
139 * aslcompile - compile mainline
146 AslCompilerFileHeader (
163 ASL_FILE_INFO *FileInfo);
167 * aslwalks - semantic analysis and parse tree walks
170 AnOtherSemanticAnalysisWalkBegin (
171 ACPI_PARSE_OBJECT *Op,
176 AnOtherSemanticAnalysisWalkEnd (
177 ACPI_PARSE_OBJECT *Op,
182 AnOperandTypecheckWalkEnd (
183 ACPI_PARSE_OBJECT *Op,
188 AnMethodAnalysisWalkBegin (
189 ACPI_PARSE_OBJECT *Op,
194 AnMethodAnalysisWalkEnd (
195 ACPI_PARSE_OBJECT *Op,
200 AnMethodTypingWalkEnd (
201 ACPI_PARSE_OBJECT *Op,
207 * aslbtypes - bitfield data types
210 AnMapObjTypeToBtype (
211 ACPI_PARSE_OBJECT *Op);
214 AnMapArgTypeToBtype (
219 ACPI_PARSE_OBJECT *Op);
228 * aslanalyze - Support functions for parse tree walks
232 ACPI_PARSE_OBJECT *Op,
235 /* Values for Type argument above */
237 #define ASL_TYPE_HID 0
238 #define ASL_TYPE_CID 1
242 ACPI_PARSE_OBJECT *Op);
245 AnGetInternalMethodReturnType (
246 ACPI_PARSE_OBJECT *Op);
249 AnLastStatementIsReturn (
250 ACPI_PARSE_OBJECT *Op);
253 AnCheckMethodReturnValue (
254 ACPI_PARSE_OBJECT *Op,
255 const ACPI_OPCODE_INFO *OpInfo,
256 ACPI_PARSE_OBJECT *ArgOp,
257 UINT32 RequiredBtypes,
258 UINT32 ThisNodeBtype);
262 ACPI_PARSE_OBJECT *Op);
265 ApCheckForGpeNameConflict (
266 ACPI_PARSE_OBJECT *Op);
270 ACPI_PARSE_OBJECT *Op);
274 * aslerror - error handling/reporting
280 ACPI_PARSE_OBJECT *Op,
284 AslCoreSubsystemError (
285 ACPI_PARSE_OBJECT *Op,
298 UINT32 CurrentLineNumber,
299 UINT32 LogicalLineNumber,
300 UINT32 LogicalByteOffset,
308 ASL_ERROR_MSG *Enode,
319 ACPI_PHYSICAL_ADDRESS
320 AeLocalGetRootPointer (
325 * asllisting - generate all "listing" type files
332 LsWriteNodeToAsmListing (
333 ACPI_PARSE_OBJECT *Op);
337 ACPI_PARSE_OBJECT *Op,
349 * aslfold - constant folding
353 ACPI_PARSE_OBJECT *Op,
359 * aslopcodes - generate AML opcodes
363 ACPI_PARSE_OBJECT *Op,
368 OpcAmlOpcodeUpdateWalk (
369 ACPI_PARSE_OBJECT *Op,
374 OpcGenerateAmlOpcode (
375 ACPI_PARSE_OBJECT *Op);
378 OpcSetOptimalIntegerSize (
379 ACPI_PARSE_OBJECT *Op);
383 ACPI_PARSE_OBJECT *Op);
387 * asloperands - generate AML operands for the AML opcodes
391 ACPI_PARSE_OBJECT *Op,
395 OpnGenerateAmlOperands (
396 ACPI_PARSE_OBJECT *Op);
400 ACPI_PARSE_OBJECT *Op);
404 * aslopt - optmization
407 OptOptimizeNamePath (
408 ACPI_PARSE_OBJECT *Op,
410 ACPI_WALK_STATE *WalkState,
412 ACPI_NAMESPACE_NODE *TargetNode);
416 * aslcodegen - code generation
419 CgGenerateAmlOutput (
434 * asllength - calculate/adjust AML package lengths
437 LnPackageLengthWalk (
438 ACPI_PARSE_OBJECT *Op,
444 ACPI_PARSE_OBJECT *Op,
449 CgGenerateAmlLengths (
450 ACPI_PARSE_OBJECT *Op);
454 * aslmap - opcode mappings and reserved method names
457 AslMapNamedOpcodeToDataType (
462 * aslpredef - ACPI predefined names support
465 ApCheckForPredefinedMethod (
466 ACPI_PARSE_OBJECT *Op,
467 ASL_METHOD_INFO *MethodInfo);
470 ApCheckPredefinedReturnValue (
471 ACPI_PARSE_OBJECT *Op,
472 ASL_METHOD_INFO *MethodInfo);
475 ApCheckForPredefinedName (
476 ACPI_PARSE_OBJECT *Op,
480 ApCheckForPredefinedObject (
481 ACPI_PARSE_OBJECT *Op,
485 ApDisplayReservedNames (
490 * asltransform - parse tree transformations
494 ACPI_PARSE_OBJECT *Op,
500 * asltree - parse tree support
504 ACPI_PARSE_OBJECT *Op,
506 ASL_WALK_CALLBACK DescendingCallback,
507 ASL_WALK_CALLBACK AscendingCallback,
510 /* Values for "Visitation" parameter above */
512 #define ASL_WALK_VISIT_DOWNWARD 0x01
513 #define ASL_WALK_VISIT_UPWARD 0x02
514 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
523 ACPI_PARSE_OBJECT *Op);
528 ACPI_PARSE_OBJECT *Op);
541 TrCreateValuedLeafNode (
546 TrCreateConstantLeafNode (
551 ACPI_PARSE_OBJECT *Op,
557 ACPI_PARSE_OBJECT *Op);
565 ACPI_PARSE_OBJECT *Op1,
566 ACPI_PARSE_OBJECT *Op2);
570 ACPI_PARSE_OBJECT *Op1,
571 ACPI_PARSE_OBJECT *Op2);
575 ACPI_PARSE_OBJECT *Op,
585 * aslfiles - File I/O support
592 FlAddIncludeDirectory (
597 ACPI_PARSE_OBJECT *Op);
637 ACPI_PARSE_OBJECT *Op);
641 char *InputFilename);
644 FlOpenAmlOutputFile (
645 char *InputFilename);
648 FlOpenMiscOutputFiles (
649 char *InputFilename);
653 * asload - load namespace in prep for cross reference
657 ACPI_PARSE_OBJECT *RootOp);
661 * asllookup - namespace cross reference
664 LkCrossReferenceNamespace (
668 LkFindUnreferencedObjects (
681 * aslutils - common compiler utilites
689 /* Type values for above */
691 #define ASL_DEBUG_OUTPUT 0
692 #define ASL_PARSE_OUTPUT 1
693 #define ASL_TREE_OUTPUT 2
696 UtDisplaySupportedTables (
700 UtDisplayConstantOpcodes (
716 UtPrintFormattedName (
734 UtConvertByteToAsmHex (
744 ACPI_PARSE_OBJECT *Op);
753 char **ConvertedName);
756 UtAttachNamepathToOwner (
757 ACPI_PARSE_OBJECT *Op,
758 ACPI_PARSE_OBJECT *NameNode);
761 UtCheckIntegerRange (
762 ACPI_PARSE_OBJECT *Op,
778 * asluuid - UUID support
785 AuConvertStringToUuid (
790 AuConvertUuidToString (
795 * aslresource - Resource template generation utilities
798 RsSmallAddressCheck (
804 ACPI_PARSE_OBJECT *MinOp,
805 ACPI_PARSE_OBJECT *MaxOp,
806 ACPI_PARSE_OBJECT *LengthOp,
807 ACPI_PARSE_OBJECT *AlignOp,
808 ACPI_PARSE_OBJECT *Op);
811 RsLargeAddressCheck (
817 ACPI_PARSE_OBJECT *MinOp,
818 ACPI_PARSE_OBJECT *MaxOp,
819 ACPI_PARSE_OBJECT *LengthOp,
820 ACPI_PARSE_OBJECT *GranOp,
821 ACPI_PARSE_OBJECT *Op);
824 RsGetStringDataLength (
825 ACPI_PARSE_OBJECT *InitializerOp);
828 RsAllocateResourceNode (
832 RsCreateResourceField (
833 ACPI_PARSE_OBJECT *Op,
842 ACPI_PARSE_OBJECT *Op,
849 ACPI_PARSE_OBJECT *Op,
854 RsCompleteNodeAndGetNext (
855 ACPI_PARSE_OBJECT *Op);
858 RsCheckListForDuplicates (
859 ACPI_PARSE_OBJECT *Op);
862 RsDoOneResourceDescriptor (
863 ACPI_PARSE_OBJECT *DescriptorTypeOp,
864 UINT32 CurrentByteOffset,
867 /* Values for State above */
869 #define ACPI_RSTATE_NORMAL 0
870 #define ACPI_RSTATE_START_DEPENDENT 1
871 #define ACPI_RSTATE_DEPENDENT_LIST 2
874 RsLinkDescriptorChain (
875 ASL_RESOURCE_NODE **PreviousRnode,
876 ASL_RESOURCE_NODE *Rnode);
879 RsDoResourceTemplate (
880 ACPI_PARSE_OBJECT *Op);
884 * aslrestype1 - Miscellaneous Small descriptors
887 RsDoEndTagDescriptor (
888 ACPI_PARSE_OBJECT *Op,
889 UINT32 CurrentByteOffset);
892 RsDoEndDependentDescriptor (
893 ACPI_PARSE_OBJECT *Op,
894 UINT32 CurrentByteOffset);
897 RsDoMemory24Descriptor (
898 ACPI_PARSE_OBJECT *Op,
899 UINT32 CurrentByteOffset);
902 RsDoMemory32Descriptor (
903 ACPI_PARSE_OBJECT *Op,
904 UINT32 CurrentByteOffset);
907 RsDoMemory32FixedDescriptor (
908 ACPI_PARSE_OBJECT *Op,
909 UINT32 CurrentByteOffset);
912 RsDoStartDependentDescriptor (
913 ACPI_PARSE_OBJECT *Op,
914 UINT32 CurrentByteOffset);
917 RsDoStartDependentNoPriDescriptor (
918 ACPI_PARSE_OBJECT *Op,
919 UINT32 CurrentByteOffset);
922 RsDoVendorSmallDescriptor (
923 ACPI_PARSE_OBJECT *Op,
924 UINT32 CurrentByteOffset);
928 * aslrestype1i - I/O-related Small descriptors
932 ACPI_PARSE_OBJECT *Op,
933 UINT32 CurrentByteOffset);
936 RsDoFixedDmaDescriptor (
937 ACPI_PARSE_OBJECT *Op,
938 UINT32 CurrentByteOffset);
941 RsDoFixedIoDescriptor (
942 ACPI_PARSE_OBJECT *Op,
943 UINT32 CurrentByteOffset);
947 ACPI_PARSE_OBJECT *Op,
948 UINT32 CurrentByteOffset);
952 ACPI_PARSE_OBJECT *Op,
953 UINT32 CurrentByteOffset);
956 RsDoIrqNoFlagsDescriptor (
957 ACPI_PARSE_OBJECT *Op,
958 UINT32 CurrentByteOffset);
962 * aslrestype2 - Large resource descriptors
965 RsDoInterruptDescriptor (
966 ACPI_PARSE_OBJECT *Op,
967 UINT32 CurrentByteOffset);
970 RsDoVendorLargeDescriptor (
971 ACPI_PARSE_OBJECT *Op,
972 UINT32 CurrentByteOffset);
975 RsDoGeneralRegisterDescriptor (
976 ACPI_PARSE_OBJECT *Op,
977 UINT32 CurrentByteOffset);
980 RsDoGpioIntDescriptor (
981 ACPI_PARSE_OBJECT *Op,
982 UINT32 CurrentByteOffset);
985 RsDoGpioIoDescriptor (
986 ACPI_PARSE_OBJECT *Op,
987 UINT32 CurrentByteOffset);
990 RsDoI2cSerialBusDescriptor (
991 ACPI_PARSE_OBJECT *Op,
992 UINT32 CurrentByteOffset);
995 RsDoSpiSerialBusDescriptor (
996 ACPI_PARSE_OBJECT *Op,
997 UINT32 CurrentByteOffset);
1000 RsDoUartSerialBusDescriptor (
1001 ACPI_PARSE_OBJECT *Op,
1002 UINT32 CurrentByteOffset);
1005 * aslrestype2d - DWord address descriptors
1008 RsDoDwordIoDescriptor (
1009 ACPI_PARSE_OBJECT *Op,
1010 UINT32 CurrentByteOffset);
1013 RsDoDwordMemoryDescriptor (
1014 ACPI_PARSE_OBJECT *Op,
1015 UINT32 CurrentByteOffset);
1018 RsDoDwordSpaceDescriptor (
1019 ACPI_PARSE_OBJECT *Op,
1020 UINT32 CurrentByteOffset);
1024 * aslrestype2e - Extended address descriptors
1027 RsDoExtendedIoDescriptor (
1028 ACPI_PARSE_OBJECT *Op,
1029 UINT32 CurrentByteOffset);
1032 RsDoExtendedMemoryDescriptor (
1033 ACPI_PARSE_OBJECT *Op,
1034 UINT32 CurrentByteOffset);
1037 RsDoExtendedSpaceDescriptor (
1038 ACPI_PARSE_OBJECT *Op,
1039 UINT32 CurrentByteOffset);
1043 * aslrestype2q - QWord address descriptors
1046 RsDoQwordIoDescriptor (
1047 ACPI_PARSE_OBJECT *Op,
1048 UINT32 CurrentByteOffset);
1051 RsDoQwordMemoryDescriptor (
1052 ACPI_PARSE_OBJECT *Op,
1053 UINT32 CurrentByteOffset);
1056 RsDoQwordSpaceDescriptor (
1057 ACPI_PARSE_OBJECT *Op,
1058 UINT32 CurrentByteOffset);
1062 * aslrestype2w - Word address descriptors
1065 RsDoWordIoDescriptor (
1066 ACPI_PARSE_OBJECT *Op,
1067 UINT32 CurrentByteOffset);
1070 RsDoWordSpaceDescriptor (
1071 ACPI_PARSE_OBJECT *Op,
1072 UINT32 CurrentByteOffset);
1075 RsDoWordBusNumberDescriptor (
1076 ACPI_PARSE_OBJECT *Op,
1077 UINT32 CurrentByteOffset);
1080 * Entry to data table compiler subsystem
1090 #endif /* __ASLCOMPILER_H */