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 (
833 ACPI_PARSE_OBJECT *Op,
840 ACPI_PARSE_OBJECT *Op,
847 ACPI_PARSE_OBJECT *Op,
852 RsCompleteNodeAndGetNext (
853 ACPI_PARSE_OBJECT *Op);
856 RsCheckListForDuplicates (
857 ACPI_PARSE_OBJECT *Op);
860 RsDoOneResourceDescriptor (
861 ACPI_PARSE_OBJECT *DescriptorTypeOp,
862 UINT32 CurrentByteOffset,
865 /* Values for State above */
867 #define ACPI_RSTATE_NORMAL 0
868 #define ACPI_RSTATE_START_DEPENDENT 1
869 #define ACPI_RSTATE_DEPENDENT_LIST 2
872 RsLinkDescriptorChain (
873 ASL_RESOURCE_NODE **PreviousRnode,
874 ASL_RESOURCE_NODE *Rnode);
877 RsDoResourceTemplate (
878 ACPI_PARSE_OBJECT *Op);
882 * aslrestype1 - Miscellaneous Small descriptors
885 RsDoEndTagDescriptor (
886 ACPI_PARSE_OBJECT *Op,
887 UINT32 CurrentByteOffset);
890 RsDoEndDependentDescriptor (
891 ACPI_PARSE_OBJECT *Op,
892 UINT32 CurrentByteOffset);
895 RsDoMemory24Descriptor (
896 ACPI_PARSE_OBJECT *Op,
897 UINT32 CurrentByteOffset);
900 RsDoMemory32Descriptor (
901 ACPI_PARSE_OBJECT *Op,
902 UINT32 CurrentByteOffset);
905 RsDoMemory32FixedDescriptor (
906 ACPI_PARSE_OBJECT *Op,
907 UINT32 CurrentByteOffset);
910 RsDoStartDependentDescriptor (
911 ACPI_PARSE_OBJECT *Op,
912 UINT32 CurrentByteOffset);
915 RsDoStartDependentNoPriDescriptor (
916 ACPI_PARSE_OBJECT *Op,
917 UINT32 CurrentByteOffset);
920 RsDoVendorSmallDescriptor (
921 ACPI_PARSE_OBJECT *Op,
922 UINT32 CurrentByteOffset);
926 * aslrestype1i - I/O-related Small descriptors
930 ACPI_PARSE_OBJECT *Op,
931 UINT32 CurrentByteOffset);
934 RsDoFixedIoDescriptor (
935 ACPI_PARSE_OBJECT *Op,
936 UINT32 CurrentByteOffset);
940 ACPI_PARSE_OBJECT *Op,
941 UINT32 CurrentByteOffset);
945 ACPI_PARSE_OBJECT *Op,
946 UINT32 CurrentByteOffset);
949 RsDoIrqNoFlagsDescriptor (
950 ACPI_PARSE_OBJECT *Op,
951 UINT32 CurrentByteOffset);
955 * aslrestype2 - Large resource descriptors
958 RsDoInterruptDescriptor (
959 ACPI_PARSE_OBJECT *Op,
960 UINT32 CurrentByteOffset);
963 RsDoVendorLargeDescriptor (
964 ACPI_PARSE_OBJECT *Op,
965 UINT32 CurrentByteOffset);
968 RsDoGeneralRegisterDescriptor (
969 ACPI_PARSE_OBJECT *Op,
970 UINT32 CurrentByteOffset);
974 * aslrestype2d - DWord address descriptors
977 RsDoDwordIoDescriptor (
978 ACPI_PARSE_OBJECT *Op,
979 UINT32 CurrentByteOffset);
982 RsDoDwordMemoryDescriptor (
983 ACPI_PARSE_OBJECT *Op,
984 UINT32 CurrentByteOffset);
987 RsDoDwordSpaceDescriptor (
988 ACPI_PARSE_OBJECT *Op,
989 UINT32 CurrentByteOffset);
993 * aslrestype2e - Extended address descriptors
996 RsDoExtendedIoDescriptor (
997 ACPI_PARSE_OBJECT *Op,
998 UINT32 CurrentByteOffset);
1001 RsDoExtendedMemoryDescriptor (
1002 ACPI_PARSE_OBJECT *Op,
1003 UINT32 CurrentByteOffset);
1006 RsDoExtendedSpaceDescriptor (
1007 ACPI_PARSE_OBJECT *Op,
1008 UINT32 CurrentByteOffset);
1012 * aslrestype2q - QWord address descriptors
1015 RsDoQwordIoDescriptor (
1016 ACPI_PARSE_OBJECT *Op,
1017 UINT32 CurrentByteOffset);
1020 RsDoQwordMemoryDescriptor (
1021 ACPI_PARSE_OBJECT *Op,
1022 UINT32 CurrentByteOffset);
1025 RsDoQwordSpaceDescriptor (
1026 ACPI_PARSE_OBJECT *Op,
1027 UINT32 CurrentByteOffset);
1031 * aslrestype2w - Word address descriptors
1034 RsDoWordIoDescriptor (
1035 ACPI_PARSE_OBJECT *Op,
1036 UINT32 CurrentByteOffset);
1039 RsDoWordSpaceDescriptor (
1040 ACPI_PARSE_OBJECT *Op,
1041 UINT32 CurrentByteOffset);
1044 RsDoWordBusNumberDescriptor (
1045 ACPI_PARSE_OBJECT *Op,
1046 UINT32 CurrentByteOffset);
1049 * Entry to data table compiler subsystem
1059 #endif /* __ASLCOMPILER_H */