aslcompiler.h revision 1.1.1.16 1 /******************************************************************************
2 *
3 * Module Name: aslcompiler.h - common include file for iASL
4 *
5 *****************************************************************************/
6
7 /*
8 * Copyright (C) 2000 - 2018, 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 UtGetParentMethod (
1084 ACPI_NAMESPACE_NODE *Node);
1085
1086 BOOLEAN
1087 UtNodeIsDescendantOf (
1088 ACPI_NAMESPACE_NODE *Node1,
1089 ACPI_NAMESPACE_NODE *Node2);
1090
1091 void
1092 UtDisplaySupportedTables (
1093 void);
1094
1095 void
1096 UtDisplayConstantOpcodes (
1097 void);
1098
1099 UINT8
1100 UtBeginEvent (
1101 char *Name);
1102
1103 void
1104 UtEndEvent (
1105 UINT8 Event);
1106
1107 void
1108 UtDisplaySummary (
1109 UINT32 FileId);
1110
1111 void
1112 UtConvertByteToHex (
1113 UINT8 RawByte,
1114 UINT8 *Buffer);
1115
1116 void
1117 UtConvertByteToAsmHex (
1118 UINT8 RawByte,
1119 UINT8 *Buffer);
1120
1121 char *
1122 UtGetOpName (
1123 UINT32 ParseOpcode);
1124
1125 void
1126 UtSetParseOpName (
1127 ACPI_PARSE_OBJECT *Op);
1128
1129 ACPI_STATUS
1130 UtInternalizeName (
1131 char *ExternalName,
1132 char **ConvertedName);
1133
1134 void
1135 UtAttachNamepathToOwner (
1136 ACPI_PARSE_OBJECT *Op,
1137 ACPI_PARSE_OBJECT *NameNode);
1138
1139 ACPI_PARSE_OBJECT *
1140 UtCheckIntegerRange (
1141 ACPI_PARSE_OBJECT *Op,
1142 UINT32 LowValue,
1143 UINT32 HighValue);
1144
1145 UINT64
1146 UtDoConstant (
1147 char *String);
1148
1149
1150 /*
1151 * asluuid - UUID support
1152 */
1153 ACPI_STATUS
1154 AuValidateUuid (
1155 char *InString);
1156
1157 ACPI_STATUS
1158 AuConvertUuidToString (
1159 char *UuIdBuffer,
1160 char *OutString);
1161
1162 /*
1163 * aslresource - Resource template generation utilities
1164 */
1165 void
1166 RsSmallAddressCheck (
1167 UINT8 Type,
1168 UINT32 Minimum,
1169 UINT32 Maximum,
1170 UINT32 Length,
1171 UINT32 Alignment,
1172 ACPI_PARSE_OBJECT *MinOp,
1173 ACPI_PARSE_OBJECT *MaxOp,
1174 ACPI_PARSE_OBJECT *LengthOp,
1175 ACPI_PARSE_OBJECT *AlignOp,
1176 ACPI_PARSE_OBJECT *Op);
1177
1178 void
1179 RsLargeAddressCheck (
1180 UINT64 Minimum,
1181 UINT64 Maximum,
1182 UINT64 Length,
1183 UINT64 Granularity,
1184 UINT8 Flags,
1185 ACPI_PARSE_OBJECT *MinOp,
1186 ACPI_PARSE_OBJECT *MaxOp,
1187 ACPI_PARSE_OBJECT *LengthOp,
1188 ACPI_PARSE_OBJECT *GranOp,
1189 ACPI_PARSE_OBJECT *Op);
1190
1191 UINT16
1192 RsGetStringDataLength (
1193 ACPI_PARSE_OBJECT *InitializerOp);
1194
1195 ASL_RESOURCE_NODE *
1196 RsAllocateResourceNode (
1197 UINT32 Size);
1198
1199 void
1200 RsCreateResourceField (
1201 ACPI_PARSE_OBJECT *Op,
1202 char *Name,
1203 UINT32 ByteOffset,
1204 UINT32 BitOffset,
1205 UINT32 BitLength);
1206
1207 void
1208 RsSetFlagBits (
1209 UINT8 *Flags,
1210 ACPI_PARSE_OBJECT *Op,
1211 UINT8 Position,
1212 UINT8 DefaultBit);
1213
1214 void
1215 RsSetFlagBits16 (
1216 UINT16 *Flags,
1217 ACPI_PARSE_OBJECT *Op,
1218 UINT8 Position,
1219 UINT8 DefaultBit);
1220
1221 ACPI_PARSE_OBJECT *
1222 RsCompleteNodeAndGetNext (
1223 ACPI_PARSE_OBJECT *Op);
1224
1225 void
1226 RsCheckListForDuplicates (
1227 ACPI_PARSE_OBJECT *Op);
1228
1229 ASL_RESOURCE_NODE *
1230 RsDoOneResourceDescriptor (
1231 ASL_RESOURCE_INFO *Info,
1232 UINT8 *State);
1233
1234 /* Values for State above */
1235
1236 #define ACPI_RSTATE_NORMAL 0
1237 #define ACPI_RSTATE_START_DEPENDENT 1
1238 #define ACPI_RSTATE_DEPENDENT_LIST 2
1239
1240 UINT32
1241 RsLinkDescriptorChain (
1242 ASL_RESOURCE_NODE **PreviousRnode,
1243 ASL_RESOURCE_NODE *Rnode);
1244
1245 void
1246 RsDoResourceTemplate (
1247 ACPI_PARSE_OBJECT *Op);
1248
1249
1250 /*
1251 * aslrestype1 - Miscellaneous Small descriptors
1252 */
1253 ASL_RESOURCE_NODE *
1254 RsDoEndTagDescriptor (
1255 ASL_RESOURCE_INFO *Info);
1256
1257 ASL_RESOURCE_NODE *
1258 RsDoEndDependentDescriptor (
1259 ASL_RESOURCE_INFO *Info);
1260
1261 ASL_RESOURCE_NODE *
1262 RsDoMemory24Descriptor (
1263 ASL_RESOURCE_INFO *Info);
1264
1265 ASL_RESOURCE_NODE *
1266 RsDoMemory32Descriptor (
1267 ASL_RESOURCE_INFO *Info);
1268
1269 ASL_RESOURCE_NODE *
1270 RsDoMemory32FixedDescriptor (
1271 ASL_RESOURCE_INFO *Info);
1272
1273 ASL_RESOURCE_NODE *
1274 RsDoStartDependentDescriptor (
1275 ASL_RESOURCE_INFO *Info);
1276
1277 ASL_RESOURCE_NODE *
1278 RsDoStartDependentNoPriDescriptor (
1279 ASL_RESOURCE_INFO *Info);
1280
1281 ASL_RESOURCE_NODE *
1282 RsDoVendorSmallDescriptor (
1283 ASL_RESOURCE_INFO *Info);
1284
1285
1286 /*
1287 * aslrestype1i - I/O-related Small descriptors
1288 */
1289 ASL_RESOURCE_NODE *
1290 RsDoDmaDescriptor (
1291 ASL_RESOURCE_INFO *Info);
1292
1293 ASL_RESOURCE_NODE *
1294 RsDoFixedDmaDescriptor (
1295 ASL_RESOURCE_INFO *Info);
1296
1297 ASL_RESOURCE_NODE *
1298 RsDoFixedIoDescriptor (
1299 ASL_RESOURCE_INFO *Info);
1300
1301 ASL_RESOURCE_NODE *
1302 RsDoIoDescriptor (
1303 ASL_RESOURCE_INFO *Info);
1304
1305 ASL_RESOURCE_NODE *
1306 RsDoIrqDescriptor (
1307 ASL_RESOURCE_INFO *Info);
1308
1309 ASL_RESOURCE_NODE *
1310 RsDoIrqNoFlagsDescriptor (
1311 ASL_RESOURCE_INFO *Info);
1312
1313
1314 /*
1315 * aslrestype2 - Large resource descriptors
1316 */
1317 ASL_RESOURCE_NODE *
1318 RsDoInterruptDescriptor (
1319 ASL_RESOURCE_INFO *Info);
1320
1321 ASL_RESOURCE_NODE *
1322 RsDoVendorLargeDescriptor (
1323 ASL_RESOURCE_INFO *Info);
1324
1325 ASL_RESOURCE_NODE *
1326 RsDoGeneralRegisterDescriptor (
1327 ASL_RESOURCE_INFO *Info);
1328
1329 ASL_RESOURCE_NODE *
1330 RsDoGpioIntDescriptor (
1331 ASL_RESOURCE_INFO *Info);
1332
1333 ASL_RESOURCE_NODE *
1334 RsDoGpioIoDescriptor (
1335 ASL_RESOURCE_INFO *Info);
1336
1337 ASL_RESOURCE_NODE *
1338 RsDoI2cSerialBusDescriptor (
1339 ASL_RESOURCE_INFO *Info);
1340
1341 ASL_RESOURCE_NODE *
1342 RsDoSpiSerialBusDescriptor (
1343 ASL_RESOURCE_INFO *Info);
1344
1345 ASL_RESOURCE_NODE *
1346 RsDoUartSerialBusDescriptor (
1347 ASL_RESOURCE_INFO *Info);
1348
1349 ASL_RESOURCE_NODE *
1350 RsDoPinFunctionDescriptor (
1351 ASL_RESOURCE_INFO *Info);
1352
1353 ASL_RESOURCE_NODE *
1354 RsDoPinConfigDescriptor (
1355 ASL_RESOURCE_INFO *Info);
1356
1357 ASL_RESOURCE_NODE *
1358 RsDoPinGroupDescriptor (
1359 ASL_RESOURCE_INFO *Info);
1360
1361 ASL_RESOURCE_NODE *
1362 RsDoPinGroupFunctionDescriptor (
1363 ASL_RESOURCE_INFO *Info);
1364
1365 ASL_RESOURCE_NODE *
1366 RsDoPinGroupConfigDescriptor (
1367 ASL_RESOURCE_INFO *Info);
1368
1369 /*
1370 * aslrestype2d - DWord address descriptors
1371 */
1372 ASL_RESOURCE_NODE *
1373 RsDoDwordIoDescriptor (
1374 ASL_RESOURCE_INFO *Info);
1375
1376 ASL_RESOURCE_NODE *
1377 RsDoDwordMemoryDescriptor (
1378 ASL_RESOURCE_INFO *Info);
1379
1380 ASL_RESOURCE_NODE *
1381 RsDoDwordSpaceDescriptor (
1382 ASL_RESOURCE_INFO *Info);
1383
1384
1385 /*
1386 * aslrestype2e - Extended address descriptors
1387 */
1388 ASL_RESOURCE_NODE *
1389 RsDoExtendedIoDescriptor (
1390 ASL_RESOURCE_INFO *Info);
1391
1392 ASL_RESOURCE_NODE *
1393 RsDoExtendedMemoryDescriptor (
1394 ASL_RESOURCE_INFO *Info);
1395
1396 ASL_RESOURCE_NODE *
1397 RsDoExtendedSpaceDescriptor (
1398 ASL_RESOURCE_INFO *Info);
1399
1400
1401 /*
1402 * aslrestype2q - QWord address descriptors
1403 */
1404 ASL_RESOURCE_NODE *
1405 RsDoQwordIoDescriptor (
1406 ASL_RESOURCE_INFO *Info);
1407
1408 ASL_RESOURCE_NODE *
1409 RsDoQwordMemoryDescriptor (
1410 ASL_RESOURCE_INFO *Info);
1411
1412 ASL_RESOURCE_NODE *
1413 RsDoQwordSpaceDescriptor (
1414 ASL_RESOURCE_INFO *Info);
1415
1416
1417 /*
1418 * aslrestype2w - Word address descriptors
1419 */
1420 ASL_RESOURCE_NODE *
1421 RsDoWordIoDescriptor (
1422 ASL_RESOURCE_INFO *Info);
1423
1424 ASL_RESOURCE_NODE *
1425 RsDoWordSpaceDescriptor (
1426 ASL_RESOURCE_INFO *Info);
1427
1428 ASL_RESOURCE_NODE *
1429 RsDoWordBusNumberDescriptor (
1430 ASL_RESOURCE_INFO *Info);
1431
1432
1433 /*
1434 * Entry to data table compiler subsystem
1435 */
1436 ACPI_STATUS
1437 DtDoCompile(
1438 void);
1439
1440 ACPI_STATUS
1441 DtCreateTemplates (
1442 char **argv);
1443
1444
1445 /*
1446 * ASL/ASL+ converter debug
1447 */
1448 void
1449 CvDbgPrint (
1450 char *Fmt,
1451 ...);
1452
1453
1454 #endif /* __ASLCOMPILER_H */
1455