aslcompiler.h revision 1.10 1 /******************************************************************************
2 *
3 * Module Name: aslcompiler.h - common include file for iASL
4 *
5 *****************************************************************************/
6
7 /*
8 * Copyright (C) 2000 - 2017, Intel Corp.
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44 #ifndef __ASLCOMPILER_H
45 #define __ASLCOMPILER_H
46
47 #include "acpi.h"
48 #include "accommon.h"
49 #include "amlresrc.h"
50 #include "acdebug.h"
51
52 /* Microsoft-specific */
53
54 #if (defined WIN32 || defined WIN64)
55
56 /* warn : used #pragma pack */
57 #pragma warning(disable:4103)
58
59 /* warn : named type definition in parentheses */
60 #pragma warning(disable:4115)
61 #endif
62
63 #include <stdio.h>
64 #include <stdlib.h>
65 #include <string.h>
66 #include <errno.h>
67 #include <ctype.h>
68
69 /* Compiler headers */
70
71 #include "asldefine.h"
72 #include "asltypes.h"
73 #include "aslmessages.h"
74 #include "aslglobal.h"
75 #include "preprocess.h"
76 #include "dtcompiler.h"
77
78
79 /*******************************************************************************
80 *
81 * Compiler prototypes
82 *
83 ******************************************************************************/
84
85 /*
86 * Main ASL parser - generated from flex/bison, lex/yacc, etc.
87 */
88 ACPI_PARSE_OBJECT *
89 AslDoError (
90 void);
91
92 int
93 AslCompilerlex(
94 void);
95
96 void
97 AslResetCurrentLineBuffer (
98 void);
99
100 void
101 AslInsertLineBuffer (
102 int SourceChar);
103
104 int
105 AslPopInputFileStack (
106 void);
107
108 void
109 AslPushInputFileStack (
110 FILE *InputFile,
111 char *Filename);
112
113 void
114 AslParserCleanup (
115 void);
116
117
118 /*
119 * aslstartup - entered from main()
120 */
121 void
122 AslInitializeGlobals (
123 void);
124
125 typedef
126 ACPI_STATUS (*ASL_PATHNAME_CALLBACK) (
127 char *);
128
129 ACPI_STATUS
130 AslDoOneFile (
131 char *Filename);
132
133 ACPI_STATUS
134 AslCheckForErrorExit (
135 void);
136
137
138 /*
139 * aslcompile - compile mainline
140 */
141 void
142 AslCompilerSignon (
143 UINT32 FileId);
144
145 void
146 AslCompilerFileHeader (
147 UINT32 FileId);
148
149 int
150 CmDoCompile (
151 void);
152
153 void
154 CmDoOutputFiles (
155 void);
156
157 void
158 CmCleanupAndExit (
159 void);
160
161
162 /*
163 * aslallocate - memory allocation
164 */
165 void *
166 UtLocalCalloc (
167 UINT32 Size);
168
169 void
170 UtExpandLineBuffers (
171 void);
172
173 void
174 UtReallocLineBuffers (
175 char **Buffer,
176 UINT32 OldSize,
177 UINT32 NewSize);
178
179 void
180 UtFreeLineBuffers (
181 void);
182
183
184 /*
185 * aslcache - local cache support
186 */
187 char *
188 UtLocalCacheCalloc (
189 UINT32 Length);
190
191 ACPI_PARSE_OBJECT *
192 UtParseOpCacheCalloc (
193 void);
194
195 DT_SUBTABLE *
196 UtSubtableCacheCalloc (
197 void);
198
199 DT_FIELD *
200 UtFieldCacheCalloc (
201 void);
202
203 void
204 UtDeleteLocalCaches (
205 void);
206
207
208 /*
209 * aslascii - ascii support
210 */
211 ACPI_STATUS
212 FlIsFileAsciiSource (
213 char *Filename,
214 BOOLEAN DisplayErrors);
215
216
217 /*
218 * aslwalks - semantic analysis and parse tree walks
219 */
220 ACPI_STATUS
221 AnOtherSemanticAnalysisWalkBegin (
222 ACPI_PARSE_OBJECT *Op,
223 UINT32 Level,
224 void *Context);
225
226 ACPI_STATUS
227 AnOtherSemanticAnalysisWalkEnd (
228 ACPI_PARSE_OBJECT *Op,
229 UINT32 Level,
230 void *Context);
231
232 ACPI_STATUS
233 AnOperandTypecheckWalkEnd (
234 ACPI_PARSE_OBJECT *Op,
235 UINT32 Level,
236 void *Context);
237
238 ACPI_STATUS
239 AnMethodTypingWalkEnd (
240 ACPI_PARSE_OBJECT *Op,
241 UINT32 Level,
242 void *Context);
243
244
245 /*
246 * aslmethod - Control method analysis walk
247 */
248 ACPI_STATUS
249 MtMethodAnalysisWalkBegin (
250 ACPI_PARSE_OBJECT *Op,
251 UINT32 Level,
252 void *Context);
253
254 ACPI_STATUS
255 MtMethodAnalysisWalkEnd (
256 ACPI_PARSE_OBJECT *Op,
257 UINT32 Level,
258 void *Context);
259
260
261 /*
262 * aslbtypes - bitfield data types
263 */
264 UINT32
265 AnMapObjTypeToBtype (
266 ACPI_PARSE_OBJECT *Op);
267
268 UINT32
269 AnMapArgTypeToBtype (
270 UINT32 ArgType);
271
272 UINT32
273 AnGetBtype (
274 ACPI_PARSE_OBJECT *Op);
275
276 void
277 AnFormatBtype (
278 char *Buffer,
279 UINT32 Btype);
280
281
282 /*
283 * aslanalyze - Support functions for parse tree walks
284 */
285 void
286 AnCheckId (
287 ACPI_PARSE_OBJECT *Op,
288 ACPI_NAME Type);
289
290 /* Values for Type argument above */
291
292 #define ASL_TYPE_HID 0
293 #define ASL_TYPE_CID 1
294
295 BOOLEAN
296 AnIsInternalMethod (
297 ACPI_PARSE_OBJECT *Op);
298
299 UINT32
300 AnGetInternalMethodReturnType (
301 ACPI_PARSE_OBJECT *Op);
302
303 BOOLEAN
304 AnLastStatementIsReturn (
305 ACPI_PARSE_OBJECT *Op);
306
307 void
308 AnCheckMethodReturnValue (
309 ACPI_PARSE_OBJECT *Op,
310 const ACPI_OPCODE_INFO *OpInfo,
311 ACPI_PARSE_OBJECT *ArgOp,
312 UINT32 RequiredBtypes,
313 UINT32 ThisNodeBtype);
314
315 BOOLEAN
316 AnIsResultUsed (
317 ACPI_PARSE_OBJECT *Op);
318
319 void
320 ApCheckForGpeNameConflict (
321 ACPI_PARSE_OBJECT *Op);
322
323 void
324 ApCheckRegMethod (
325 ACPI_PARSE_OBJECT *Op);
326
327 BOOLEAN
328 ApFindNameInScope (
329 char *Name,
330 ACPI_PARSE_OBJECT *Op);
331
332 BOOLEAN
333 ApFindNameInDeviceTree (
334 char *Name,
335 ACPI_PARSE_OBJECT *Op);
336
337 /*
338 * aslerror - error handling/reporting
339 */
340 void
341 AslAbort (
342 void);
343
344 void
345 AslDualParseOpError (
346 UINT8 Level,
347 UINT16 MainMessageId,
348 ACPI_PARSE_OBJECT *MainOp,
349 char *MainMessage,
350 UINT16 SecondMessageId,
351 ACPI_PARSE_OBJECT *SecondOp,
352 char *SecondaryMessage);
353
354 void
355 AslError (
356 UINT8 Level,
357 UINT16 MessageId,
358 ACPI_PARSE_OBJECT *Op,
359 char *ExtraMessage);
360
361 void
362 AslCheckExpectedExceptions (
363 void);
364
365 ACPI_STATUS
366 AslExpectException (
367 char *MessageIdString);
368
369 ACPI_STATUS
370 AslDisableException (
371 char *MessageIdString);
372
373 BOOLEAN
374 AslIsExceptionIgnored (
375 UINT8 Level,
376 UINT16 MessageId);
377
378 void
379 AslCoreSubsystemError (
380 ACPI_PARSE_OBJECT *Op,
381 ACPI_STATUS Status,
382 char *ExtraMessage,
383 BOOLEAN Abort);
384
385 int
386 AslCompilererror(
387 const char *s);
388
389 void
390 AslCommonError (
391 UINT8 Level,
392 UINT16 MessageId,
393 UINT32 CurrentLineNumber,
394 UINT32 LogicalLineNumber,
395 UINT32 LogicalByteOffset,
396 UINT32 Column,
397 char *Filename,
398 char *ExtraMessage);
399
400 void
401 AslCommonError2 (
402 UINT8 Level,
403 UINT16 MessageId,
404 UINT32 LineNumber,
405 UINT32 Column,
406 char *SourceLine,
407 char *Filename,
408 char *ExtraMessage);
409
410 void
411 AePrintException (
412 UINT32 FileId,
413 ASL_ERROR_MSG *Enode,
414 char *Header);
415
416 void
417 AePrintErrorLog (
418 UINT32 FileId);
419
420 void
421 AeClearErrorLog (
422 void);
423
424
425 /*
426 * asllisting - generate all "listing" type files
427 */
428 void
429 LsDoListings (
430 void);
431
432 void
433 LsWriteNodeToAsmListing (
434 ACPI_PARSE_OBJECT *Op);
435
436 void
437 LsWriteNode (
438 ACPI_PARSE_OBJECT *Op,
439 UINT32 FileId);
440
441 void
442 LsDumpParseTree (
443 void);
444
445
446 /*
447 * asllistsup - Listing file support utilities
448 */
449 void
450 LsDumpAscii (
451 UINT32 FileId,
452 UINT32 Count,
453 UINT8 *Buffer);
454
455 void
456 LsDumpAsciiInComment (
457 UINT32 FileId,
458 UINT32 Count,
459 UINT8 *Buffer);
460
461 void
462 LsCheckException (
463 UINT32 LineNumber,
464 UINT32 FileId);
465
466 void
467 LsFlushListingBuffer (
468 UINT32 FileId);
469
470 void
471 LsWriteListingHexBytes (
472 UINT8 *Buffer,
473 UINT32 Length,
474 UINT32 FileId);
475
476 void
477 LsWriteSourceLines (
478 UINT32 ToLineNumber,
479 UINT32 ToLogicalLineNumber,
480 UINT32 FileId);
481
482 UINT32
483 LsWriteOneSourceLine (
484 UINT32 FileId);
485
486 void
487 LsPushNode (
488 char *Filename);
489
490 ASL_LISTING_NODE *
491 LsPopNode (
492 void);
493
494
495 /*
496 * aslhex - generate all "hex" output files (C, ASM, ASL)
497 */
498 void
499 HxDoHexOutput (
500 void);
501
502
503 /*
504 * aslfold - constant folding
505 */
506 ACPI_STATUS
507 OpcAmlConstantWalk (
508 ACPI_PARSE_OBJECT *Op,
509 UINT32 Level,
510 void *Context);
511
512
513 /*
514 * aslmessages - exception strings
515 */
516 const char *
517 AeDecodeMessageId (
518 UINT16 MessageId);
519
520 const char *
521 AeDecodeExceptionLevel (
522 UINT8 Level);
523
524 UINT16
525 AeBuildFullExceptionCode (
526 UINT8 Level,
527 UINT16 MessageId);
528
529 /*
530 * asloffset - generate C offset file for BIOS support
531 */
532 ACPI_STATUS
533 LsAmlOffsetWalk (
534 ACPI_PARSE_OBJECT *Op,
535 UINT32 Level,
536 void *Context);
537
538 void
539 LsDoOffsetTableHeader (
540 UINT32 FileId);
541
542 void
543 LsDoOffsetTableFooter (
544 UINT32 FileId);
545
546
547 /*
548 * aslopcodes - generate AML opcodes
549 */
550 ACPI_STATUS
551 OpcAmlOpcodeWalk (
552 ACPI_PARSE_OBJECT *Op,
553 UINT32 Level,
554 void *Context);
555
556 ACPI_STATUS
557 OpcAmlOpcodeUpdateWalk (
558 ACPI_PARSE_OBJECT *Op,
559 UINT32 Level,
560 void *Context);
561
562 void
563 OpcGenerateAmlOpcode (
564 ACPI_PARSE_OBJECT *Op);
565
566 UINT32
567 OpcSetOptimalIntegerSize (
568 ACPI_PARSE_OBJECT *Op);
569
570 void
571 OpcGetIntegerWidth (
572 ACPI_PARSE_OBJECT *Op);
573
574
575 /*
576 * asloperands - generate AML operands for the AML opcodes
577 */
578 ACPI_PARSE_OBJECT *
579 UtGetArg (
580 ACPI_PARSE_OBJECT *Op,
581 UINT32 Argn);
582
583 void
584 OpnGenerateAmlOperands (
585 ACPI_PARSE_OBJECT *Op);
586
587 void
588 OpnDoPackage (
589 ACPI_PARSE_OBJECT *Op);
590
591
592 /*
593 * aslopt - optmization
594 */
595 void
596 OptOptimizeNamePath (
597 ACPI_PARSE_OBJECT *Op,
598 UINT32 Flags,
599 ACPI_WALK_STATE *WalkState,
600 char *AmlNameString,
601 ACPI_NAMESPACE_NODE *TargetNode);
602
603
604 /*
605 * aslpld - ToPLD macro support
606 */
607 void
608 OpcDoPld (
609 ACPI_PARSE_OBJECT *Op);
610
611
612 /*
613 * aslprintf - Printf/Fprintf macros
614 */
615 void
616 OpcDoPrintf (
617 ACPI_PARSE_OBJECT *Op);
618
619 void
620 OpcDoFprintf (
621 ACPI_PARSE_OBJECT *Op);
622
623
624 /*
625 * aslprune - parse tree pruner
626 */
627 void
628 AslPruneParseTree (
629 UINT32 PruneDepth,
630 UINT32 Type);
631
632
633 /*
634 * aslcodegen - code generation
635 */
636 void
637 CgGenerateAmlOutput (
638 void);
639
640 void
641 CgLocalWriteAmlData (
642 ACPI_PARSE_OBJECT *Op,
643 void *Buffer,
644 UINT32 Length);
645
646
647 /*
648 * aslfile
649 */
650 void
651 FlOpenFile (
652 UINT32 FileId,
653 char *Filename,
654 char *Mode);
655
656
657 /*
658 * asllength - calculate/adjust AML package lengths
659 */
660 ACPI_STATUS
661 LnPackageLengthWalk (
662 ACPI_PARSE_OBJECT *Op,
663 UINT32 Level,
664 void *Context);
665
666 ACPI_STATUS
667 LnInitLengthsWalk (
668 ACPI_PARSE_OBJECT *Op,
669 UINT32 Level,
670 void *Context);
671
672 void
673 CgGenerateAmlLengths (
674 ACPI_PARSE_OBJECT *Op);
675
676
677 /*
678 * aslmap - opcode mappings and reserved method names
679 */
680 ACPI_OBJECT_TYPE
681 AslMapNamedOpcodeToDataType (
682 UINT16 Opcode);
683
684
685 /*
686 * aslpredef - ACPI predefined names support
687 */
688 BOOLEAN
689 ApCheckForPredefinedMethod (
690 ACPI_PARSE_OBJECT *Op,
691 ASL_METHOD_INFO *MethodInfo);
692
693 void
694 ApCheckPredefinedReturnValue (
695 ACPI_PARSE_OBJECT *Op,
696 ASL_METHOD_INFO *MethodInfo);
697
698 UINT32
699 ApCheckForPredefinedName (
700 ACPI_PARSE_OBJECT *Op,
701 char *Name);
702
703 void
704 ApCheckForPredefinedObject (
705 ACPI_PARSE_OBJECT *Op,
706 char *Name);
707
708 ACPI_STATUS
709 ApCheckObjectType (
710 const char *PredefinedName,
711 ACPI_PARSE_OBJECT *Op,
712 UINT32 ExpectedBtypes,
713 UINT32 PackageIndex);
714
715 void
716 ApDisplayReservedNames (
717 void);
718
719
720 /*
721 * aslprepkg - ACPI predefined names support for packages
722 */
723 void
724 ApCheckPackage (
725 ACPI_PARSE_OBJECT *ParentOp,
726 const ACPI_PREDEFINED_INFO *Predefined);
727
728
729 /*
730 * asltransform - parse tree transformations
731 */
732 ACPI_STATUS
733 TrAmlTransformWalkBegin (
734 ACPI_PARSE_OBJECT *Op,
735 UINT32 Level,
736 void *Context);
737
738 ACPI_STATUS
739 TrAmlTransformWalkEnd (
740 ACPI_PARSE_OBJECT *Op,
741 UINT32 Level,
742 void *Context);
743
744
745 /*
746 * aslexternal - External opcode support
747 */
748 ACPI_STATUS
749 ExAmlExternalWalkBegin (
750 ACPI_PARSE_OBJECT *Op,
751 UINT32 Level,
752 void *Context);
753
754 ACPI_STATUS
755 ExAmlExternalWalkEnd (
756 ACPI_PARSE_OBJECT *Op,
757 UINT32 Level,
758 void *Context);
759
760 void
761 ExDoExternal (
762 ACPI_PARSE_OBJECT *Op);
763
764 /* Values for "Visitation" parameter above */
765
766 #define ASL_WALK_VISIT_DOWNWARD 0x01
767 #define ASL_WALK_VISIT_UPWARD 0x02
768 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
769
770
771 /*
772 * aslparseop.c - Parse op create/allocate/cache
773 */
774 ACPI_PARSE_OBJECT *
775 TrCreateOp (
776 UINT32 ParseOpcode,
777 UINT32 NumChildren,
778 ...);
779
780 ACPI_PARSE_OBJECT *
781 TrCreateLeafOp (
782 UINT32 ParseOpcode);
783
784 ACPI_PARSE_OBJECT *
785 TrCreateNullTargetOp (
786 void);
787
788 ACPI_PARSE_OBJECT *
789 TrCreateAssignmentOp (
790 ACPI_PARSE_OBJECT *Target,
791 ACPI_PARSE_OBJECT *Source);
792
793 ACPI_PARSE_OBJECT *
794 TrCreateTargetOp (
795 ACPI_PARSE_OBJECT *OriginalOp,
796 ACPI_PARSE_OBJECT *ParentOp);
797
798 ACPI_PARSE_OBJECT *
799 TrCreateValuedLeafOp (
800 UINT32 ParseOpcode,
801 UINT64 Value);
802
803 ACPI_PARSE_OBJECT *
804 TrCreateConstantLeafOp (
805 UINT32 ParseOpcode);
806
807 ACPI_PARSE_OBJECT *
808 TrAllocateOp (
809 UINT32 ParseOpcode);
810
811 void
812 TrPrintOpFlags (
813 UINT32 Flags,
814 UINT32 OutputLevel);
815
816
817 /*
818 * asltree.c - Parse tree management
819 */
820 void
821 TrSetOpParent (
822 ACPI_PARSE_OBJECT *Op,
823 ACPI_PARSE_OBJECT *ParentOp);
824
825 ACPI_PARSE_OBJECT *
826 TrSetOpIntegerValue (
827 UINT32 ParseOpcode,
828 ACPI_PARSE_OBJECT *Op);
829
830 void
831 TrSetOpEndLineNumber (
832 ACPI_PARSE_OBJECT *Op);
833
834 void
835 TrSetOpCurrentFilename (
836 ACPI_PARSE_OBJECT *Op);
837
838 void
839 TrSetOpIntegerWidth (
840 ACPI_PARSE_OBJECT *TableSignature,
841 ACPI_PARSE_OBJECT *Revision);
842
843 ACPI_PARSE_OBJECT *
844 TrLinkOpChildren (
845 ACPI_PARSE_OBJECT *Op,
846 UINT32 NumChildren,
847 ...);
848
849 ACPI_PARSE_OBJECT *
850 TrLinkPeerOp (
851 ACPI_PARSE_OBJECT *Op1,
852 ACPI_PARSE_OBJECT *Op2);
853
854 ACPI_PARSE_OBJECT *
855 TrLinkChildOp (
856 ACPI_PARSE_OBJECT *Op1,
857 ACPI_PARSE_OBJECT *Op2);
858
859 ACPI_PARSE_OBJECT *
860 TrSetOpFlags (
861 ACPI_PARSE_OBJECT *Op,
862 UINT32 Flags);
863
864 ACPI_PARSE_OBJECT *
865 TrSetOpAmlLength (
866 ACPI_PARSE_OBJECT *Op,
867 UINT32 Length);
868
869 ACPI_PARSE_OBJECT *
870 TrLinkPeerOps (
871 UINT32 NumPeers,
872 ...);
873
874 ACPI_STATUS
875 TrWalkParseTree (
876 ACPI_PARSE_OBJECT *Op,
877 UINT32 Visitation,
878 ASL_WALK_CALLBACK DescendingCallback,
879 ASL_WALK_CALLBACK AscendingCallback,
880 void *Context);
881
882
883 /*
884 * aslfiles - File I/O support
885 */
886 void
887 FlAddIncludeDirectory (
888 char *Dir);
889
890 char *
891 FlMergePathnames (
892 char *PrefixDir,
893 char *FilePathname);
894
895 void
896 FlOpenIncludeFile (
897 ACPI_PARSE_OBJECT *Op);
898
899 void
900 FlFileError (
901 UINT32 FileId,
902 UINT8 ErrorId);
903
904 UINT32
905 FlGetFileSize (
906 UINT32 FileId);
907
908 ACPI_STATUS
909 FlReadFile (
910 UINT32 FileId,
911 void *Buffer,
912 UINT32 Length);
913
914 void
915 FlWriteFile (
916 UINT32 FileId,
917 void *Buffer,
918 UINT32 Length);
919
920 void
921 FlSeekFile (
922 UINT32 FileId,
923 long Offset);
924
925 void
926 FlCloseFile (
927 UINT32 FileId);
928
929 void
930 FlPrintFile (
931 UINT32 FileId,
932 char *Format,
933 ...);
934
935 void
936 FlDeleteFile (
937 UINT32 FileId);
938
939 void
940 FlSetLineNumber (
941 UINT32 LineNumber);
942
943 void
944 FlSetFilename (
945 char *Filename);
946
947 ACPI_STATUS
948 FlOpenInputFile (
949 char *InputFilename);
950
951 ACPI_STATUS
952 FlOpenAmlOutputFile (
953 char *InputFilename);
954
955 ACPI_STATUS
956 FlOpenMiscOutputFiles (
957 char *InputFilename);
958
959 /*
960 * aslhwmap - hardware map summary
961 */
962 void
963 MpEmitMappingInfo (
964 void);
965
966
967 /*
968 * asload - load namespace in prep for cross reference
969 */
970 ACPI_STATUS
971 LdLoadNamespace (
972 ACPI_PARSE_OBJECT *RootOp);
973
974
975 /*
976 * asllookup - namespace lookup functions
977 */
978 void
979 LkFindUnreferencedObjects (
980 void);
981
982 /*
983 * aslhelp - help screens
984 */
985 void
986 Usage (
987 void);
988
989 void
990 AslFilenameHelp (
991 void);
992
993 void
994 AslDisassemblyHelp (
995 void);
996
997
998 /*
999 * aslnamesp - namespace output file generation
1000 */
1001 ACPI_STATUS
1002 NsDisplayNamespace (
1003 void);
1004
1005 void
1006 NsSetupNamespaceListing (
1007 void *Handle);
1008
1009 /*
1010 * asloptions - command line processing
1011 */
1012 int
1013 AslCommandLine (
1014 int argc,
1015 char **argv);
1016
1017 /*
1018 * aslxref - namespace cross reference
1019 */
1020 ACPI_STATUS
1021 XfCrossReferenceNamespace (
1022 void);
1023
1024
1025 /*
1026 * aslxrefout
1027 */
1028 void
1029 OtPrintHeaders (
1030 char *Message);
1031
1032 void
1033 OtCreateXrefFile (
1034 void);
1035
1036 void
1037 OtXrefWalkPart1 (
1038 ACPI_PARSE_OBJECT *Op,
1039 UINT32 Level,
1040 ASL_METHOD_INFO *MethodInfo);
1041
1042
1043 /*
1044 * aslutils - common compiler utilites
1045 */
1046 void
1047 DbgPrint (
1048 UINT32 Type,
1049 char *Format,
1050 ...);
1051
1052 /* Type values for above */
1053
1054 #define ASL_DEBUG_OUTPUT 0
1055 #define ASL_PARSE_OUTPUT 1
1056 #define ASL_TREE_OUTPUT 2
1057
1058 UINT8
1059 UtIsBigEndianMachine (
1060 void);
1061
1062 BOOLEAN
1063 UtQueryForOverwrite (
1064 char *Pathname);
1065
1066 void
1067 UtDumpStringOp (
1068 ACPI_PARSE_OBJECT *Op,
1069 UINT32 Level);
1070
1071 void
1072 UtDumpIntegerOp (
1073 ACPI_PARSE_OBJECT *Op,
1074 UINT32 Level,
1075 UINT32 IntegerLength);
1076
1077 void
1078 UtDumpBasicOp (
1079 ACPI_PARSE_OBJECT *Op,
1080 UINT32 Level);
1081
1082 void
1083 UtDisplaySupportedTables (
1084 void);
1085
1086 void
1087 UtDisplayConstantOpcodes (
1088 void);
1089
1090 UINT8
1091 UtBeginEvent (
1092 char *Name);
1093
1094 void
1095 UtEndEvent (
1096 UINT8 Event);
1097
1098 void
1099
1100 UtDisplaySummary (
1101 UINT32 FileId);
1102
1103 void
1104 UtConvertByteToHex (
1105 UINT8 RawByte,
1106 UINT8 *Buffer);
1107
1108 void
1109 UtConvertByteToAsmHex (
1110 UINT8 RawByte,
1111 UINT8 *Buffer);
1112
1113 char *
1114 UtGetOpName (
1115 UINT32 ParseOpcode);
1116
1117 void
1118 UtSetParseOpName (
1119 ACPI_PARSE_OBJECT *Op);
1120
1121 ACPI_STATUS
1122 UtInternalizeName (
1123 char *ExternalName,
1124 char **ConvertedName);
1125
1126 void
1127 UtAttachNamepathToOwner (
1128 ACPI_PARSE_OBJECT *Op,
1129 ACPI_PARSE_OBJECT *NameNode);
1130
1131 ACPI_PARSE_OBJECT *
1132 UtCheckIntegerRange (
1133 ACPI_PARSE_OBJECT *Op,
1134 UINT32 LowValue,
1135 UINT32 HighValue);
1136
1137 UINT64
1138 UtDoConstant (
1139 char *String);
1140
1141
1142 /*
1143 * asluuid - UUID support
1144 */
1145 ACPI_STATUS
1146 AuValidateUuid (
1147 char *InString);
1148
1149 ACPI_STATUS
1150 AuConvertUuidToString (
1151 char *UuIdBuffer,
1152 char *OutString);
1153
1154 /*
1155 * aslresource - Resource template generation utilities
1156 */
1157 void
1158 RsSmallAddressCheck (
1159 UINT8 Type,
1160 UINT32 Minimum,
1161 UINT32 Maximum,
1162 UINT32 Length,
1163 UINT32 Alignment,
1164 ACPI_PARSE_OBJECT *MinOp,
1165 ACPI_PARSE_OBJECT *MaxOp,
1166 ACPI_PARSE_OBJECT *LengthOp,
1167 ACPI_PARSE_OBJECT *AlignOp,
1168 ACPI_PARSE_OBJECT *Op);
1169
1170 void
1171 RsLargeAddressCheck (
1172 UINT64 Minimum,
1173 UINT64 Maximum,
1174 UINT64 Length,
1175 UINT64 Granularity,
1176 UINT8 Flags,
1177 ACPI_PARSE_OBJECT *MinOp,
1178 ACPI_PARSE_OBJECT *MaxOp,
1179 ACPI_PARSE_OBJECT *LengthOp,
1180 ACPI_PARSE_OBJECT *GranOp,
1181 ACPI_PARSE_OBJECT *Op);
1182
1183 UINT16
1184 RsGetStringDataLength (
1185 ACPI_PARSE_OBJECT *InitializerOp);
1186
1187 ASL_RESOURCE_NODE *
1188 RsAllocateResourceNode (
1189 UINT32 Size);
1190
1191 void
1192 RsCreateResourceField (
1193 ACPI_PARSE_OBJECT *Op,
1194 char *Name,
1195 UINT32 ByteOffset,
1196 UINT32 BitOffset,
1197 UINT32 BitLength);
1198
1199 void
1200 RsSetFlagBits (
1201 UINT8 *Flags,
1202 ACPI_PARSE_OBJECT *Op,
1203 UINT8 Position,
1204 UINT8 DefaultBit);
1205
1206 void
1207 RsSetFlagBits16 (
1208 UINT16 *Flags,
1209 ACPI_PARSE_OBJECT *Op,
1210 UINT8 Position,
1211 UINT8 DefaultBit);
1212
1213 ACPI_PARSE_OBJECT *
1214 RsCompleteNodeAndGetNext (
1215 ACPI_PARSE_OBJECT *Op);
1216
1217 void
1218 RsCheckListForDuplicates (
1219 ACPI_PARSE_OBJECT *Op);
1220
1221 ASL_RESOURCE_NODE *
1222 RsDoOneResourceDescriptor (
1223 ASL_RESOURCE_INFO *Info,
1224 UINT8 *State);
1225
1226 /* Values for State above */
1227
1228 #define ACPI_RSTATE_NORMAL 0
1229 #define ACPI_RSTATE_START_DEPENDENT 1
1230 #define ACPI_RSTATE_DEPENDENT_LIST 2
1231
1232 UINT32
1233 RsLinkDescriptorChain (
1234 ASL_RESOURCE_NODE **PreviousRnode,
1235 ASL_RESOURCE_NODE *Rnode);
1236
1237 void
1238 RsDoResourceTemplate (
1239 ACPI_PARSE_OBJECT *Op);
1240
1241
1242 /*
1243 * aslrestype1 - Miscellaneous Small descriptors
1244 */
1245 ASL_RESOURCE_NODE *
1246 RsDoEndTagDescriptor (
1247 ASL_RESOURCE_INFO *Info);
1248
1249 ASL_RESOURCE_NODE *
1250 RsDoEndDependentDescriptor (
1251 ASL_RESOURCE_INFO *Info);
1252
1253 ASL_RESOURCE_NODE *
1254 RsDoMemory24Descriptor (
1255 ASL_RESOURCE_INFO *Info);
1256
1257 ASL_RESOURCE_NODE *
1258 RsDoMemory32Descriptor (
1259 ASL_RESOURCE_INFO *Info);
1260
1261 ASL_RESOURCE_NODE *
1262 RsDoMemory32FixedDescriptor (
1263 ASL_RESOURCE_INFO *Info);
1264
1265 ASL_RESOURCE_NODE *
1266 RsDoStartDependentDescriptor (
1267 ASL_RESOURCE_INFO *Info);
1268
1269 ASL_RESOURCE_NODE *
1270 RsDoStartDependentNoPriDescriptor (
1271 ASL_RESOURCE_INFO *Info);
1272
1273 ASL_RESOURCE_NODE *
1274 RsDoVendorSmallDescriptor (
1275 ASL_RESOURCE_INFO *Info);
1276
1277
1278 /*
1279 * aslrestype1i - I/O-related Small descriptors
1280 */
1281 ASL_RESOURCE_NODE *
1282 RsDoDmaDescriptor (
1283 ASL_RESOURCE_INFO *Info);
1284
1285 ASL_RESOURCE_NODE *
1286 RsDoFixedDmaDescriptor (
1287 ASL_RESOURCE_INFO *Info);
1288
1289 ASL_RESOURCE_NODE *
1290 RsDoFixedIoDescriptor (
1291 ASL_RESOURCE_INFO *Info);
1292
1293 ASL_RESOURCE_NODE *
1294 RsDoIoDescriptor (
1295 ASL_RESOURCE_INFO *Info);
1296
1297 ASL_RESOURCE_NODE *
1298 RsDoIrqDescriptor (
1299 ASL_RESOURCE_INFO *Info);
1300
1301 ASL_RESOURCE_NODE *
1302 RsDoIrqNoFlagsDescriptor (
1303 ASL_RESOURCE_INFO *Info);
1304
1305
1306 /*
1307 * aslrestype2 - Large resource descriptors
1308 */
1309 ASL_RESOURCE_NODE *
1310 RsDoInterruptDescriptor (
1311 ASL_RESOURCE_INFO *Info);
1312
1313 ASL_RESOURCE_NODE *
1314 RsDoVendorLargeDescriptor (
1315 ASL_RESOURCE_INFO *Info);
1316
1317 ASL_RESOURCE_NODE *
1318 RsDoGeneralRegisterDescriptor (
1319 ASL_RESOURCE_INFO *Info);
1320
1321 ASL_RESOURCE_NODE *
1322 RsDoGpioIntDescriptor (
1323 ASL_RESOURCE_INFO *Info);
1324
1325 ASL_RESOURCE_NODE *
1326 RsDoGpioIoDescriptor (
1327 ASL_RESOURCE_INFO *Info);
1328
1329 ASL_RESOURCE_NODE *
1330 RsDoI2cSerialBusDescriptor (
1331 ASL_RESOURCE_INFO *Info);
1332
1333 ASL_RESOURCE_NODE *
1334 RsDoSpiSerialBusDescriptor (
1335 ASL_RESOURCE_INFO *Info);
1336
1337 ASL_RESOURCE_NODE *
1338 RsDoUartSerialBusDescriptor (
1339 ASL_RESOURCE_INFO *Info);
1340
1341 ASL_RESOURCE_NODE *
1342 RsDoPinFunctionDescriptor (
1343 ASL_RESOURCE_INFO *Info);
1344
1345 ASL_RESOURCE_NODE *
1346 RsDoPinConfigDescriptor (
1347 ASL_RESOURCE_INFO *Info);
1348
1349 ASL_RESOURCE_NODE *
1350 RsDoPinGroupDescriptor (
1351 ASL_RESOURCE_INFO *Info);
1352
1353 ASL_RESOURCE_NODE *
1354 RsDoPinGroupFunctionDescriptor (
1355 ASL_RESOURCE_INFO *Info);
1356
1357 ASL_RESOURCE_NODE *
1358 RsDoPinGroupConfigDescriptor (
1359 ASL_RESOURCE_INFO *Info);
1360
1361 /*
1362 * aslrestype2d - DWord address descriptors
1363 */
1364 ASL_RESOURCE_NODE *
1365 RsDoDwordIoDescriptor (
1366 ASL_RESOURCE_INFO *Info);
1367
1368 ASL_RESOURCE_NODE *
1369 RsDoDwordMemoryDescriptor (
1370 ASL_RESOURCE_INFO *Info);
1371
1372 ASL_RESOURCE_NODE *
1373 RsDoDwordSpaceDescriptor (
1374 ASL_RESOURCE_INFO *Info);
1375
1376
1377 /*
1378 * aslrestype2e - Extended address descriptors
1379 */
1380 ASL_RESOURCE_NODE *
1381 RsDoExtendedIoDescriptor (
1382 ASL_RESOURCE_INFO *Info);
1383
1384 ASL_RESOURCE_NODE *
1385 RsDoExtendedMemoryDescriptor (
1386 ASL_RESOURCE_INFO *Info);
1387
1388 ASL_RESOURCE_NODE *
1389 RsDoExtendedSpaceDescriptor (
1390 ASL_RESOURCE_INFO *Info);
1391
1392
1393 /*
1394 * aslrestype2q - QWord address descriptors
1395 */
1396 ASL_RESOURCE_NODE *
1397 RsDoQwordIoDescriptor (
1398 ASL_RESOURCE_INFO *Info);
1399
1400 ASL_RESOURCE_NODE *
1401 RsDoQwordMemoryDescriptor (
1402 ASL_RESOURCE_INFO *Info);
1403
1404 ASL_RESOURCE_NODE *
1405 RsDoQwordSpaceDescriptor (
1406 ASL_RESOURCE_INFO *Info);
1407
1408
1409 /*
1410 * aslrestype2w - Word address descriptors
1411 */
1412 ASL_RESOURCE_NODE *
1413 RsDoWordIoDescriptor (
1414 ASL_RESOURCE_INFO *Info);
1415
1416 ASL_RESOURCE_NODE *
1417 RsDoWordSpaceDescriptor (
1418 ASL_RESOURCE_INFO *Info);
1419
1420 ASL_RESOURCE_NODE *
1421 RsDoWordBusNumberDescriptor (
1422 ASL_RESOURCE_INFO *Info);
1423
1424
1425 /*
1426 * Entry to data table compiler subsystem
1427 */
1428 ACPI_STATUS
1429 DtDoCompile(
1430 void);
1431
1432 ACPI_STATUS
1433 DtCreateTemplates (
1434 char **argv);
1435
1436
1437 /*
1438 * ASL/ASL+ converter debug
1439 */
1440 void
1441 CvDbgPrint (
1442 char *Fmt,
1443 ...);
1444
1445
1446 #endif /* __ASLCOMPILER_H */
1447