aslcompiler.h revision 1.12.2.2 1 /******************************************************************************
2 *
3 * Module Name: aslcompiler.h - common include file for iASL
4 *
5 *****************************************************************************/
6
7 /*
8 * Copyright (C) 2000 - 2020, 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 ACPI_STATUS
150 CmDoCompile (
151 void);
152
153 int
154 CmDoAslMiddleAndBackEnd (
155 void);
156
157 void
158 CmDoOutputFiles (
159 void);
160
161 void
162 CmCleanupAndExit (
163 void);
164
165 ACPI_STATUS
166 AslDoDisassembly (
167 void);
168
169
170 /*
171 * aslallocate - memory allocation
172 */
173 void *
174 UtLocalCalloc (
175 UINT32 Size);
176
177 void
178 UtExpandLineBuffers (
179 void);
180
181 void
182 UtReallocLineBuffers (
183 char **Buffer,
184 UINT32 OldSize,
185 UINT32 NewSize);
186
187 void
188 UtFreeLineBuffers (
189 void);
190
191
192 /*
193 * aslcache - local cache support
194 */
195 char *
196 UtLocalCacheCalloc (
197 UINT32 Length);
198
199 ACPI_PARSE_OBJECT *
200 UtParseOpCacheCalloc (
201 void);
202
203 DT_SUBTABLE *
204 UtSubtableCacheCalloc (
205 void);
206
207 DT_FIELD *
208 UtFieldCacheCalloc (
209 void);
210
211 void
212 UtDeleteLocalCaches (
213 void);
214
215
216 /*
217 * aslascii - ascii support
218 */
219 ACPI_STATUS
220 FlIsFileAsciiSource (
221 char *Filename,
222 BOOLEAN DisplayErrors);
223
224
225 /*
226 * aslwalks - semantic analysis and parse tree walks
227 */
228 ACPI_STATUS
229 AnOtherSemanticAnalysisWalkBegin (
230 ACPI_PARSE_OBJECT *Op,
231 UINT32 Level,
232 void *Context);
233
234 ACPI_STATUS
235 AnOtherSemanticAnalysisWalkEnd (
236 ACPI_PARSE_OBJECT *Op,
237 UINT32 Level,
238 void *Context);
239
240 ACPI_STATUS
241 AnOperandTypecheckWalkEnd (
242 ACPI_PARSE_OBJECT *Op,
243 UINT32 Level,
244 void *Context);
245
246 ACPI_STATUS
247 AnMethodTypingWalkEnd (
248 ACPI_PARSE_OBJECT *Op,
249 UINT32 Level,
250 void *Context);
251
252
253 /*
254 * aslmethod - Control method analysis walk
255 */
256 ACPI_STATUS
257 MtMethodAnalysisWalkBegin (
258 ACPI_PARSE_OBJECT *Op,
259 UINT32 Level,
260 void *Context);
261
262 ACPI_STATUS
263 MtMethodAnalysisWalkEnd (
264 ACPI_PARSE_OBJECT *Op,
265 UINT32 Level,
266 void *Context);
267
268 UINT32
269 MtProcessTypeOp (
270 ACPI_PARSE_OBJECT *TypeOp);
271
272 UINT8
273 MtProcessParameterTypeList (
274 ACPI_PARSE_OBJECT *ParamTypeOp,
275 UINT32 *TypeList);
276
277
278 /*
279 * aslbtypes - bitfield data types
280 */
281 UINT32
282 AnMapObjTypeToBtype (
283 ACPI_PARSE_OBJECT *Op);
284
285 UINT32
286 AnMapArgTypeToBtype (
287 UINT32 ArgType);
288
289 UINT32
290 AnGetBtype (
291 ACPI_PARSE_OBJECT *Op);
292
293 void
294 AnFormatBtype (
295 char *Buffer,
296 UINT32 Btype);
297
298
299 /*
300 * aslanalyze - Support functions for parse tree walks
301 */
302 void
303 AnCheckId (
304 ACPI_PARSE_OBJECT *Op,
305 ACPI_NAME Type);
306
307 /* Values for Type argument above */
308
309 #define ASL_TYPE_HID 0
310 #define ASL_TYPE_CID 1
311
312 BOOLEAN
313 AnIsInternalMethod (
314 ACPI_PARSE_OBJECT *Op);
315
316 UINT32
317 AnGetInternalMethodReturnType (
318 ACPI_PARSE_OBJECT *Op);
319
320 BOOLEAN
321 AnLastStatementIsReturn (
322 ACPI_PARSE_OBJECT *Op);
323
324 void
325 AnCheckMethodReturnValue (
326 ACPI_PARSE_OBJECT *Op,
327 const ACPI_OPCODE_INFO *OpInfo,
328 ACPI_PARSE_OBJECT *ArgOp,
329 UINT32 RequiredBtypes,
330 UINT32 ThisNodeBtype);
331
332 BOOLEAN
333 AnIsResultUsed (
334 ACPI_PARSE_OBJECT *Op);
335
336 void
337 ApCheckForGpeNameConflict (
338 ACPI_PARSE_OBJECT *Op);
339
340 void
341 ApCheckRegMethod (
342 ACPI_PARSE_OBJECT *Op);
343
344 BOOLEAN
345 ApFindNameInScope (
346 char *Name,
347 ACPI_PARSE_OBJECT *Op);
348
349 BOOLEAN
350 ApFindNameInDeviceTree (
351 char *Name,
352 ACPI_PARSE_OBJECT *Op);
353
354 /*
355 * aslerror - error handling/reporting
356 */
357 void
358 AslAbort (
359 void);
360
361 void
362 AslDualParseOpError (
363 UINT8 Level,
364 UINT16 MainMessageId,
365 ACPI_PARSE_OBJECT *MainOp,
366 char *MainMessage,
367 UINT16 SecondMessageId,
368 ACPI_PARSE_OBJECT *SecondOp,
369 char *SecondaryMessage);
370
371 void
372 AslError (
373 UINT8 Level,
374 UINT16 MessageId,
375 ACPI_PARSE_OBJECT *Op,
376 char *ExtraMessage);
377
378 void
379 AslCheckExpectedExceptions (
380 void);
381
382 ACPI_STATUS
383 AslLogExpectedException (
384 char *MessageIdString);
385
386 ACPI_STATUS
387 AslElevateException (
388 char *MessageIdString);
389
390 ACPI_STATUS
391 AslDisableException (
392 char *MessageIdString);
393
394 BOOLEAN
395 AslIsExceptionIgnored (
396 char *Filename,
397 UINT32 LineNumber,
398 UINT8 Level,
399 UINT16 MessageId);
400
401 void
402 AslLogExpectedExceptionByLine (
403 char *MessageIdString);
404
405 void
406 AslCoreSubsystemError (
407 ACPI_PARSE_OBJECT *Op,
408 ACPI_STATUS Status,
409 char *ExtraMessage,
410 BOOLEAN Abort);
411
412 int
413 AslCompilererror(
414 const char *s);
415
416 void
417 AslCommonError (
418 UINT8 Level,
419 UINT16 MessageId,
420 UINT32 CurrentLineNumber,
421 UINT32 LogicalLineNumber,
422 UINT32 LogicalByteOffset,
423 UINT32 Column,
424 char *Filename,
425 char *ExtraMessage);
426
427 void
428 AslCommonError2 (
429 UINT8 Level,
430 UINT16 MessageId,
431 UINT32 LineNumber,
432 UINT32 Column,
433 char *SourceLine,
434 char *Filename,
435 char *ExtraMessage);
436
437 void
438 AePrintException (
439 UINT32 FileId,
440 ASL_ERROR_MSG *Enode,
441 char *Header);
442
443 void
444 AePrintErrorLog (
445 UINT32 FileId);
446
447 void
448 AeClearErrorLog (
449 void);
450
451
452 /*
453 * asllisting - generate all "listing" type files
454 */
455 void
456 LsDoListings (
457 void);
458
459 void
460 LsWriteNodeToAsmListing (
461 ACPI_PARSE_OBJECT *Op);
462
463 void
464 LsWriteNode (
465 ACPI_PARSE_OBJECT *Op,
466 UINT32 FileId);
467
468 void
469 LsDumpParseTree (
470 void);
471
472
473 /*
474 * asllistsup - Listing file support utilities
475 */
476 void
477 LsDumpAscii (
478 UINT32 FileId,
479 UINT32 Count,
480 UINT8 *Buffer);
481
482 void
483 LsDumpAsciiInComment (
484 UINT32 FileId,
485 UINT32 Count,
486 UINT8 *Buffer);
487
488 void
489 LsCheckException (
490 UINT32 LineNumber,
491 UINT32 FileId);
492
493 void
494 LsFlushListingBuffer (
495 UINT32 FileId);
496
497 void
498 LsWriteListingHexBytes (
499 UINT8 *Buffer,
500 UINT32 Length,
501 UINT32 FileId);
502
503 void
504 LsWriteSourceLines (
505 UINT32 ToLineNumber,
506 UINT32 ToLogicalLineNumber,
507 UINT32 FileId);
508
509 UINT32
510 LsWriteOneSourceLine (
511 UINT32 FileId);
512
513 void
514 LsPushNode (
515 char *Filename);
516
517 ASL_LISTING_NODE *
518 LsPopNode (
519 void);
520
521
522 /*
523 * aslhex - generate all "hex" output files (C, ASM, ASL)
524 */
525 void
526 HxDoHexOutput (
527 void);
528
529
530 /*
531 * aslfold - constant folding
532 */
533 ACPI_STATUS
534 OpcAmlConstantWalk (
535 ACPI_PARSE_OBJECT *Op,
536 UINT32 Level,
537 void *Context);
538
539
540 /*
541 * aslmessages - exception strings
542 */
543 const char *
544 AeDecodeMessageId (
545 UINT16 MessageId);
546
547 const char *
548 AeDecodeExceptionLevel (
549 UINT8 Level);
550
551 UINT16
552 AeBuildFullExceptionCode (
553 UINT8 Level,
554 UINT16 MessageId);
555
556 /*
557 * asloffset - generate C offset file for BIOS support
558 */
559 ACPI_STATUS
560 LsAmlOffsetWalk (
561 ACPI_PARSE_OBJECT *Op,
562 UINT32 Level,
563 void *Context);
564
565 void
566 LsDoOffsetTableHeader (
567 UINT32 FileId);
568
569 void
570 LsDoOffsetTableFooter (
571 UINT32 FileId);
572
573
574 /*
575 * aslopcodes - generate AML opcodes
576 */
577 ACPI_STATUS
578 OpcAmlOpcodeWalk (
579 ACPI_PARSE_OBJECT *Op,
580 UINT32 Level,
581 void *Context);
582
583 ACPI_STATUS
584 OpcAmlOpcodeUpdateWalk (
585 ACPI_PARSE_OBJECT *Op,
586 UINT32 Level,
587 void *Context);
588
589 void
590 OpcGenerateAmlOpcode (
591 ACPI_PARSE_OBJECT *Op);
592
593 UINT32
594 OpcSetOptimalIntegerSize (
595 ACPI_PARSE_OBJECT *Op);
596
597 void
598 OpcGetIntegerWidth (
599 ACPI_PARSE_OBJECT *Op);
600
601
602 /*
603 * asloperands - generate AML operands for the AML opcodes
604 */
605 ACPI_PARSE_OBJECT *
606 UtGetArg (
607 ACPI_PARSE_OBJECT *Op,
608 UINT32 Argn);
609
610 void
611 OpnGenerateAmlOperands (
612 ACPI_PARSE_OBJECT *Op);
613
614 void
615 OpnDoPackage (
616 ACPI_PARSE_OBJECT *Op);
617
618
619 /*
620 * aslopt - optimization
621 */
622 void
623 OptOptimizeNamePath (
624 ACPI_PARSE_OBJECT *Op,
625 UINT32 Flags,
626 ACPI_WALK_STATE *WalkState,
627 char *AmlNameString,
628 ACPI_NAMESPACE_NODE *TargetNode);
629
630
631 /*
632 * aslpld - ToPLD macro support
633 */
634 void
635 OpcDoPld (
636 ACPI_PARSE_OBJECT *Op);
637
638
639 /*
640 * aslprintf - Printf/Fprintf macros
641 */
642 void
643 OpcDoPrintf (
644 ACPI_PARSE_OBJECT *Op);
645
646 void
647 OpcDoFprintf (
648 ACPI_PARSE_OBJECT *Op);
649
650
651 /*
652 * aslprune - parse tree pruner
653 */
654 void
655 AslPruneParseTree (
656 UINT32 PruneDepth,
657 UINT32 Type);
658
659
660 /*
661 * aslcodegen - code generation
662 */
663 void
664 CgGenerateAmlOutput (
665 void);
666
667 void
668 CgLocalWriteAmlData (
669 ACPI_PARSE_OBJECT *Op,
670 void *Buffer,
671 UINT32 Length);
672
673
674 /*
675 * aslfile
676 */
677 void
678 FlOpenFile (
679 UINT32 FileId,
680 char *Filename,
681 char *Mode);
682
683
684 /*
685 * asllength - calculate/adjust AML package lengths
686 */
687 ACPI_STATUS
688 LnPackageLengthWalk (
689 ACPI_PARSE_OBJECT *Op,
690 UINT32 Level,
691 void *Context);
692
693 ACPI_STATUS
694 LnInitLengthsWalk (
695 ACPI_PARSE_OBJECT *Op,
696 UINT32 Level,
697 void *Context);
698
699 void
700 CgGenerateAmlLengths (
701 ACPI_PARSE_OBJECT *Op);
702
703
704 /*
705 * aslmap - opcode mappings and reserved method names
706 */
707 ACPI_OBJECT_TYPE
708 AslMapNamedOpcodeToDataType (
709 UINT16 Opcode);
710
711
712 /*
713 * aslpredef - ACPI predefined names support
714 */
715 BOOLEAN
716 ApCheckForPredefinedMethod (
717 ACPI_PARSE_OBJECT *Op,
718 ASL_METHOD_INFO *MethodInfo);
719
720 void
721 ApCheckPredefinedReturnValue (
722 ACPI_PARSE_OBJECT *Op,
723 ASL_METHOD_INFO *MethodInfo);
724
725 UINT32
726 ApCheckForPredefinedName (
727 ACPI_PARSE_OBJECT *Op,
728 char *Name);
729
730 void
731 ApCheckForPredefinedObject (
732 ACPI_PARSE_OBJECT *Op,
733 char *Name);
734
735 ACPI_STATUS
736 ApCheckObjectType (
737 const char *PredefinedName,
738 ACPI_PARSE_OBJECT *Op,
739 UINT32 ExpectedBtypes,
740 UINT32 PackageIndex);
741
742 void
743 ApDisplayReservedNames (
744 void);
745
746
747 /*
748 * aslprepkg - ACPI predefined names support for packages
749 */
750 void
751 ApCheckPackage (
752 ACPI_PARSE_OBJECT *ParentOp,
753 const ACPI_PREDEFINED_INFO *Predefined);
754
755
756 /*
757 * asltransform - parse tree transformations
758 */
759 ACPI_STATUS
760 TrAmlTransformWalkBegin (
761 ACPI_PARSE_OBJECT *Op,
762 UINT32 Level,
763 void *Context);
764
765 ACPI_STATUS
766 TrAmlTransformWalkEnd (
767 ACPI_PARSE_OBJECT *Op,
768 UINT32 Level,
769 void *Context);
770
771
772 /*
773 * aslexternal - External opcode support
774 */
775 ACPI_STATUS
776 ExAmlExternalWalkBegin (
777 ACPI_PARSE_OBJECT *Op,
778 UINT32 Level,
779 void *Context);
780
781 ACPI_STATUS
782 ExAmlExternalWalkEnd (
783 ACPI_PARSE_OBJECT *Op,
784 UINT32 Level,
785 void *Context);
786
787 void
788 ExDoExternal (
789 ACPI_PARSE_OBJECT *Op);
790
791 /* Values for "Visitation" parameter above */
792
793 #define ASL_WALK_VISIT_DOWNWARD 0x01
794 #define ASL_WALK_VISIT_UPWARD 0x02
795 #define ASL_WALK_VISIT_DB_SEPARATELY 0x04
796 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
797
798
799 /*
800 * aslparseop.c - Parse op create/allocate/cache
801 */
802 ACPI_PARSE_OBJECT *
803 TrCreateOp (
804 UINT32 ParseOpcode,
805 UINT32 NumChildren,
806 ...);
807
808 ACPI_PARSE_OBJECT *
809 TrCreateLeafOp (
810 UINT32 ParseOpcode);
811
812 ACPI_PARSE_OBJECT *
813 TrCreateNullTargetOp (
814 void);
815
816 ACPI_PARSE_OBJECT *
817 TrCreateAssignmentOp (
818 ACPI_PARSE_OBJECT *Target,
819 ACPI_PARSE_OBJECT *Source);
820
821 ACPI_PARSE_OBJECT *
822 TrCreateTargetOp (
823 ACPI_PARSE_OBJECT *OriginalOp,
824 ACPI_PARSE_OBJECT *ParentOp);
825
826 ACPI_PARSE_OBJECT *
827 TrCreateValuedLeafOp (
828 UINT32 ParseOpcode,
829 UINT64 Value);
830
831 ACPI_PARSE_OBJECT *
832 TrCreateConstantLeafOp (
833 UINT32 ParseOpcode);
834
835 ACPI_PARSE_OBJECT *
836 TrAllocateOp (
837 UINT32 ParseOpcode);
838
839 void
840 TrPrintOpFlags (
841 UINT32 Flags,
842 UINT32 OutputLevel);
843
844
845 /*
846 * asltree.c - Parse tree management
847 */
848 void
849 TrSetOpParent (
850 ACPI_PARSE_OBJECT *Op,
851 ACPI_PARSE_OBJECT *ParentOp);
852
853 ACPI_PARSE_OBJECT *
854 TrSetOpIntegerValue (
855 UINT32 ParseOpcode,
856 ACPI_PARSE_OBJECT *Op);
857
858 void
859 TrSetOpEndLineNumber (
860 ACPI_PARSE_OBJECT *Op);
861
862 void
863 TrSetOpCurrentFilename (
864 ACPI_PARSE_OBJECT *Op);
865
866 void
867 TrSetOpIntegerWidth (
868 ACPI_PARSE_OBJECT *TableSignature,
869 ACPI_PARSE_OBJECT *Revision);
870
871 ACPI_PARSE_OBJECT *
872 TrLinkOpChildren (
873 ACPI_PARSE_OBJECT *Op,
874 UINT32 NumChildren,
875 ...);
876
877 ACPI_PARSE_OBJECT *
878 TrLinkPeerOp (
879 ACPI_PARSE_OBJECT *Op1,
880 ACPI_PARSE_OBJECT *Op2);
881
882 ACPI_PARSE_OBJECT *
883 TrLinkChildOp (
884 ACPI_PARSE_OBJECT *Op1,
885 ACPI_PARSE_OBJECT *Op2);
886
887 ACPI_PARSE_OBJECT *
888 TrSetOpFlags (
889 ACPI_PARSE_OBJECT *Op,
890 UINT32 Flags);
891
892 ACPI_PARSE_OBJECT *
893 TrSetOpAmlLength (
894 ACPI_PARSE_OBJECT *Op,
895 UINT32 Length);
896
897 ACPI_PARSE_OBJECT *
898 TrLinkPeerOps (
899 UINT32 NumPeers,
900 ...);
901
902 ACPI_STATUS
903 TrWalkParseTree (
904 ACPI_PARSE_OBJECT *Op,
905 UINT32 Visitation,
906 ASL_WALK_CALLBACK DescendingCallback,
907 ASL_WALK_CALLBACK AscendingCallback,
908 void *Context);
909
910
911 /*
912 * aslfiles - File I/O support
913 */
914 void
915 FlAddIncludeDirectory (
916 char *Dir);
917
918 char *
919 FlMergePathnames (
920 char *PrefixDir,
921 char *FilePathname);
922
923 void
924 FlOpenIncludeFile (
925 ACPI_PARSE_OBJECT *Op);
926
927 void
928 FlFileError (
929 UINT32 FileId,
930 UINT8 ErrorId);
931
932 UINT32
933 FlGetFileSize (
934 UINT32 FileId);
935
936 ACPI_STATUS
937 FlReadFile (
938 UINT32 FileId,
939 void *Buffer,
940 UINT32 Length);
941
942 void
943 FlWriteFile (
944 UINT32 FileId,
945 void *Buffer,
946 UINT32 Length);
947
948 void
949 FlSeekFile (
950 UINT32 FileId,
951 long Offset);
952
953 void
954 FlSeekFileSet (
955 UINT32 FileId,
956 long Offset);
957
958 void
959 FlCloseFile (
960 UINT32 FileId);
961
962 void
963 FlPrintFile (
964 UINT32 FileId,
965 char *Format,
966 ...);
967
968 void
969 FlDeleteFile (
970 UINT32 FileId);
971
972 void
973 FlSetLineNumber (
974 UINT32 LineNumber);
975
976 void
977 FlSetFilename (
978 char *Filename);
979
980 ACPI_STATUS
981 FlOpenInputFile (
982 char *InputFilename);
983
984 ACPI_STATUS
985 FlOpenAmlOutputFile (
986 char *InputFilename);
987
988 ACPI_STATUS
989 FlOpenMiscOutputFiles (
990 char *InputFilename);
991
992 ACPI_STATUS
993 FlInitOneFile (
994 char *InputFilename);
995
996 ASL_FILE_SWITCH_STATUS
997 FlSwitchFileSet (
998 char *InputFilename);
999
1000 FILE *
1001 FlGetFileHandle (
1002 UINT32 OutFileId,
1003 UINT32 InFileId,
1004 char *Filename);
1005
1006 ASL_GLOBAL_FILE_NODE *
1007 FlGetFileNode (
1008 UINT32 FileId,
1009 char *Filename);
1010
1011 ASL_GLOBAL_FILE_NODE *
1012 FlGetCurrentFileNode (
1013 void);
1014
1015 BOOLEAN
1016 FlInputFileExists (
1017 char *InputFilename);
1018
1019
1020 /*
1021 * aslhwmap - hardware map summary
1022 */
1023 void
1024 MpEmitMappingInfo (
1025 void);
1026
1027
1028 /*
1029 * asload - load namespace in prep for cross reference
1030 */
1031 ACPI_STATUS
1032 LdLoadNamespace (
1033 ACPI_PARSE_OBJECT *RootOp);
1034
1035 /*
1036 * asllookup - namespace lookup functions
1037 */
1038 void
1039 LkFindUnreferencedObjects (
1040 void);
1041
1042
1043 /*
1044 * aslhelp - help screens
1045 */
1046 void
1047 Usage (
1048 void);
1049
1050 void
1051 AslFilenameHelp (
1052 void);
1053
1054 void
1055 AslDisassemblyHelp (
1056 void);
1057
1058
1059 /*
1060 * aslnamesp - namespace output file generation
1061 */
1062 ACPI_STATUS
1063 NsDisplayNamespace (
1064 void);
1065
1066 void
1067 NsSetupNamespaceListing (
1068 void *Handle);
1069
1070
1071 /*
1072 * asloptions - command line processing
1073 */
1074 int
1075 AslCommandLine (
1076 int argc,
1077 char **argv);
1078
1079
1080 /*
1081 * aslxref - namespace cross reference
1082 */
1083 ACPI_STATUS
1084 XfCrossReferenceNamespace (
1085 void);
1086
1087
1088 /*
1089 * aslxrefout
1090 */
1091 void
1092 OtPrintHeaders (
1093 char *Message);
1094
1095 void
1096 OtCreateXrefFile (
1097 void);
1098
1099 void
1100 OtXrefWalkPart1 (
1101 ACPI_PARSE_OBJECT *Op,
1102 UINT32 Level,
1103 ASL_METHOD_INFO *MethodInfo);
1104
1105
1106 /*
1107 * aslutils - common compiler utilities
1108 */
1109 void
1110 DbgPrint (
1111 UINT32 Type,
1112 char *Format,
1113 ...);
1114
1115 /* Type values for above */
1116
1117 #define ASL_DEBUG_OUTPUT 0
1118 #define ASL_PARSE_OUTPUT 1
1119 #define ASL_TREE_OUTPUT 2
1120
1121 UINT8
1122 UtIsBigEndianMachine (
1123 void);
1124
1125 BOOLEAN
1126 UtQueryForOverwrite (
1127 char *Pathname);
1128
1129 void
1130 UtDumpStringOp (
1131 ACPI_PARSE_OBJECT *Op,
1132 UINT32 Level);
1133
1134 void
1135 UtDumpIntegerOp (
1136 ACPI_PARSE_OBJECT *Op,
1137 UINT32 Level,
1138 UINT32 IntegerLength);
1139
1140 void
1141 UtDumpBasicOp (
1142 ACPI_PARSE_OBJECT *Op,
1143 UINT32 Level);
1144
1145 ACPI_NAMESPACE_NODE *
1146 UtGetParentMethodNode (
1147 ACPI_NAMESPACE_NODE *Node);
1148
1149 ACPI_PARSE_OBJECT *
1150 UtGetParentMethodOp (
1151 ACPI_PARSE_OBJECT *Op);
1152
1153 BOOLEAN
1154 UtNodeIsDescendantOf (
1155 ACPI_NAMESPACE_NODE *Node1,
1156 ACPI_NAMESPACE_NODE *Node2);
1157
1158 void
1159 UtDisplaySupportedTables (
1160 void);
1161
1162 void
1163 UtDisplayConstantOpcodes (
1164 void);
1165
1166 UINT8
1167 UtBeginEvent (
1168 char *Name);
1169
1170 void
1171 UtEndEvent (
1172 UINT8 Event);
1173
1174 void
1175
1176 UtDisplaySummary (
1177 UINT32 FileId);
1178
1179 void
1180 UtDisplayOneSummary (
1181 UINT32 FileId,
1182 BOOLEAN DisplayErrorSummary);
1183
1184 void
1185 UtConvertByteToHex (
1186 UINT8 RawByte,
1187 UINT8 *Buffer);
1188
1189 void
1190 UtConvertByteToAsmHex (
1191 UINT8 RawByte,
1192 UINT8 *Buffer);
1193
1194 char *
1195 UtGetOpName (
1196 UINT32 ParseOpcode);
1197
1198 void
1199 UtSetParseOpName (
1200 ACPI_PARSE_OBJECT *Op);
1201
1202 ACPI_STATUS
1203 UtInternalizeName (
1204 char *ExternalName,
1205 char **ConvertedName);
1206
1207 void
1208 UtAttachNamepathToOwner (
1209 ACPI_PARSE_OBJECT *Op,
1210 ACPI_PARSE_OBJECT *NameNode);
1211
1212 ACPI_PARSE_OBJECT *
1213 UtCheckIntegerRange (
1214 ACPI_PARSE_OBJECT *Op,
1215 UINT32 LowValue,
1216 UINT32 HighValue);
1217
1218 UINT64
1219 UtDoConstant (
1220 char *String);
1221
1222
1223 /*
1224 * asluuid - UUID support
1225 */
1226 ACPI_STATUS
1227 AuValidateUuid (
1228 char *InString);
1229
1230 ACPI_STATUS
1231 AuConvertUuidToString (
1232 char *UuIdBuffer,
1233 char *OutString);
1234
1235
1236 /*
1237 * aslresource - Resource template generation utilities
1238 */
1239 void
1240 RsSmallAddressCheck (
1241 UINT8 Type,
1242 UINT32 Minimum,
1243 UINT32 Maximum,
1244 UINT32 Length,
1245 UINT32 Alignment,
1246 ACPI_PARSE_OBJECT *MinOp,
1247 ACPI_PARSE_OBJECT *MaxOp,
1248 ACPI_PARSE_OBJECT *LengthOp,
1249 ACPI_PARSE_OBJECT *AlignOp,
1250 ACPI_PARSE_OBJECT *Op);
1251
1252 void
1253 RsLargeAddressCheck (
1254 UINT64 Minimum,
1255 UINT64 Maximum,
1256 UINT64 Length,
1257 UINT64 Granularity,
1258 UINT8 Flags,
1259 ACPI_PARSE_OBJECT *MinOp,
1260 ACPI_PARSE_OBJECT *MaxOp,
1261 ACPI_PARSE_OBJECT *LengthOp,
1262 ACPI_PARSE_OBJECT *GranOp,
1263 ACPI_PARSE_OBJECT *Op);
1264
1265 UINT16
1266 RsGetStringDataLength (
1267 ACPI_PARSE_OBJECT *InitializerOp);
1268
1269 ASL_RESOURCE_NODE *
1270 RsAllocateResourceNode (
1271 UINT32 Size);
1272
1273 void
1274 RsCreateResourceField (
1275 ACPI_PARSE_OBJECT *Op,
1276 char *Name,
1277 UINT32 ByteOffset,
1278 UINT32 BitOffset,
1279 UINT32 BitLength);
1280
1281 void
1282 RsSetFlagBits (
1283 UINT8 *Flags,
1284 ACPI_PARSE_OBJECT *Op,
1285 UINT8 Position,
1286 UINT8 DefaultBit);
1287
1288 void
1289 RsSetFlagBits16 (
1290 UINT16 *Flags,
1291 ACPI_PARSE_OBJECT *Op,
1292 UINT8 Position,
1293 UINT8 DefaultBit);
1294
1295 ACPI_PARSE_OBJECT *
1296 RsCompleteNodeAndGetNext (
1297 ACPI_PARSE_OBJECT *Op);
1298
1299 void
1300 RsCheckListForDuplicates (
1301 ACPI_PARSE_OBJECT *Op);
1302
1303 ASL_RESOURCE_NODE *
1304 RsDoOneResourceDescriptor (
1305 ASL_RESOURCE_INFO *Info,
1306 UINT8 *State);
1307
1308 /* Values for State above */
1309
1310 #define ACPI_RSTATE_NORMAL 0
1311 #define ACPI_RSTATE_START_DEPENDENT 1
1312 #define ACPI_RSTATE_DEPENDENT_LIST 2
1313
1314 UINT32
1315 RsLinkDescriptorChain (
1316 ASL_RESOURCE_NODE **PreviousRnode,
1317 ASL_RESOURCE_NODE *Rnode);
1318
1319 void
1320 RsDoResourceTemplate (
1321 ACPI_PARSE_OBJECT *Op);
1322
1323
1324 /*
1325 * aslrestype1 - Miscellaneous Small descriptors
1326 */
1327 ASL_RESOURCE_NODE *
1328 RsDoEndTagDescriptor (
1329 ASL_RESOURCE_INFO *Info);
1330
1331 ASL_RESOURCE_NODE *
1332 RsDoEndDependentDescriptor (
1333 ASL_RESOURCE_INFO *Info);
1334
1335 ASL_RESOURCE_NODE *
1336 RsDoMemory24Descriptor (
1337 ASL_RESOURCE_INFO *Info);
1338
1339 ASL_RESOURCE_NODE *
1340 RsDoMemory32Descriptor (
1341 ASL_RESOURCE_INFO *Info);
1342
1343 ASL_RESOURCE_NODE *
1344 RsDoMemory32FixedDescriptor (
1345 ASL_RESOURCE_INFO *Info);
1346
1347 ASL_RESOURCE_NODE *
1348 RsDoStartDependentDescriptor (
1349 ASL_RESOURCE_INFO *Info);
1350
1351 ASL_RESOURCE_NODE *
1352 RsDoStartDependentNoPriDescriptor (
1353 ASL_RESOURCE_INFO *Info);
1354
1355 ASL_RESOURCE_NODE *
1356 RsDoVendorSmallDescriptor (
1357 ASL_RESOURCE_INFO *Info);
1358
1359
1360 /*
1361 * aslrestype1i - I/O-related Small descriptors
1362 */
1363 ASL_RESOURCE_NODE *
1364 RsDoDmaDescriptor (
1365 ASL_RESOURCE_INFO *Info);
1366
1367 ASL_RESOURCE_NODE *
1368 RsDoFixedDmaDescriptor (
1369 ASL_RESOURCE_INFO *Info);
1370
1371 ASL_RESOURCE_NODE *
1372 RsDoFixedIoDescriptor (
1373 ASL_RESOURCE_INFO *Info);
1374
1375 ASL_RESOURCE_NODE *
1376 RsDoIoDescriptor (
1377 ASL_RESOURCE_INFO *Info);
1378
1379 ASL_RESOURCE_NODE *
1380 RsDoIrqDescriptor (
1381 ASL_RESOURCE_INFO *Info);
1382
1383 ASL_RESOURCE_NODE *
1384 RsDoIrqNoFlagsDescriptor (
1385 ASL_RESOURCE_INFO *Info);
1386
1387
1388 /*
1389 * aslrestype2 - Large resource descriptors
1390 */
1391 ASL_RESOURCE_NODE *
1392 RsDoInterruptDescriptor (
1393 ASL_RESOURCE_INFO *Info);
1394
1395 ASL_RESOURCE_NODE *
1396 RsDoVendorLargeDescriptor (
1397 ASL_RESOURCE_INFO *Info);
1398
1399 ASL_RESOURCE_NODE *
1400 RsDoGeneralRegisterDescriptor (
1401 ASL_RESOURCE_INFO *Info);
1402
1403 ASL_RESOURCE_NODE *
1404 RsDoGpioIntDescriptor (
1405 ASL_RESOURCE_INFO *Info);
1406
1407 ASL_RESOURCE_NODE *
1408 RsDoGpioIoDescriptor (
1409 ASL_RESOURCE_INFO *Info);
1410
1411 ASL_RESOURCE_NODE *
1412 RsDoI2cSerialBusDescriptor (
1413 ASL_RESOURCE_INFO *Info);
1414
1415 ASL_RESOURCE_NODE *
1416 RsDoSpiSerialBusDescriptor (
1417 ASL_RESOURCE_INFO *Info);
1418
1419 ASL_RESOURCE_NODE *
1420 RsDoUartSerialBusDescriptor (
1421 ASL_RESOURCE_INFO *Info);
1422
1423 ASL_RESOURCE_NODE *
1424 RsDoPinFunctionDescriptor (
1425 ASL_RESOURCE_INFO *Info);
1426
1427 ASL_RESOURCE_NODE *
1428 RsDoPinConfigDescriptor (
1429 ASL_RESOURCE_INFO *Info);
1430
1431 ASL_RESOURCE_NODE *
1432 RsDoPinGroupDescriptor (
1433 ASL_RESOURCE_INFO *Info);
1434
1435 ASL_RESOURCE_NODE *
1436 RsDoPinGroupFunctionDescriptor (
1437 ASL_RESOURCE_INFO *Info);
1438
1439 ASL_RESOURCE_NODE *
1440 RsDoPinGroupConfigDescriptor (
1441 ASL_RESOURCE_INFO *Info);
1442
1443
1444 /*
1445 * aslrestype2d - DWord address descriptors
1446 */
1447 ASL_RESOURCE_NODE *
1448 RsDoDwordIoDescriptor (
1449 ASL_RESOURCE_INFO *Info);
1450
1451 ASL_RESOURCE_NODE *
1452 RsDoDwordMemoryDescriptor (
1453 ASL_RESOURCE_INFO *Info);
1454
1455 ASL_RESOURCE_NODE *
1456 RsDoDwordSpaceDescriptor (
1457 ASL_RESOURCE_INFO *Info);
1458
1459
1460 /*
1461 * aslrestype2e - Extended address descriptors
1462 */
1463 ASL_RESOURCE_NODE *
1464 RsDoExtendedIoDescriptor (
1465 ASL_RESOURCE_INFO *Info);
1466
1467 ASL_RESOURCE_NODE *
1468 RsDoExtendedMemoryDescriptor (
1469 ASL_RESOURCE_INFO *Info);
1470
1471 ASL_RESOURCE_NODE *
1472 RsDoExtendedSpaceDescriptor (
1473 ASL_RESOURCE_INFO *Info);
1474
1475
1476 /*
1477 * aslrestype2q - QWord address descriptors
1478 */
1479 ASL_RESOURCE_NODE *
1480 RsDoQwordIoDescriptor (
1481 ASL_RESOURCE_INFO *Info);
1482
1483 ASL_RESOURCE_NODE *
1484 RsDoQwordMemoryDescriptor (
1485 ASL_RESOURCE_INFO *Info);
1486
1487 ASL_RESOURCE_NODE *
1488 RsDoQwordSpaceDescriptor (
1489 ASL_RESOURCE_INFO *Info);
1490
1491
1492 /*
1493 * aslrestype2w - Word address descriptors
1494 */
1495 ASL_RESOURCE_NODE *
1496 RsDoWordIoDescriptor (
1497 ASL_RESOURCE_INFO *Info);
1498
1499 ASL_RESOURCE_NODE *
1500 RsDoWordSpaceDescriptor (
1501 ASL_RESOURCE_INFO *Info);
1502
1503 ASL_RESOURCE_NODE *
1504 RsDoWordBusNumberDescriptor (
1505 ASL_RESOURCE_INFO *Info);
1506
1507
1508 /*
1509 * Entry to data table compiler subsystem
1510 */
1511 ACPI_STATUS
1512 DtDoCompile(
1513 void);
1514
1515 ACPI_STATUS
1516 DtCreateTemplates (
1517 char **argv);
1518
1519
1520 /*
1521 * ASL/ASL+ converter debug
1522 */
1523 void
1524 CvDbgPrint (
1525 char *Fmt,
1526 ...);
1527
1528
1529 #endif /* __ASLCOMPILER_H */
1530