aslcompiler.h revision 1.17.2.1 1 /******************************************************************************
2 *
3 * Module Name: aslcompiler.h - common include file for iASL
4 *
5 *****************************************************************************/
6
7 /*
8 * Copyright (C) 2000 - 2021, 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 MERCHANTABILITY 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 int
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 ACPI_PRINTF_LIKE (2)
963 void
964 FlPrintFile (
965 UINT32 FileId,
966 char *Format,
967 ...);
968
969 void
970 FlDeleteFile (
971 UINT32 FileId);
972
973 void
974 FlSetLineNumber (
975 UINT32 LineNumber);
976
977 void
978 FlSetFilename (
979 char *Filename);
980
981 ACPI_STATUS
982 FlOpenInputFile (
983 char *InputFilename);
984
985 ACPI_STATUS
986 FlOpenAmlOutputFile (
987 char *InputFilename);
988
989 ACPI_STATUS
990 FlOpenMiscOutputFiles (
991 char *InputFilename);
992
993 ACPI_STATUS
994 FlInitOneFile (
995 char *InputFilename);
996
997 ASL_FILE_SWITCH_STATUS
998 FlSwitchFileSet (
999 char *InputFilename);
1000
1001 FILE *
1002 FlGetFileHandle (
1003 UINT32 OutFileId,
1004 UINT32 InFileId,
1005 char *Filename);
1006
1007 ASL_GLOBAL_FILE_NODE *
1008 FlGetFileNode (
1009 UINT32 FileId,
1010 char *Filename);
1011
1012 ASL_GLOBAL_FILE_NODE *
1013 FlGetCurrentFileNode (
1014 void);
1015
1016
1017 /*
1018 * aslhwmap - hardware map summary
1019 */
1020 void
1021 MpEmitMappingInfo (
1022 void);
1023
1024
1025 /*
1026 * asload - load namespace in prep for cross reference
1027 */
1028 ACPI_STATUS
1029 LdLoadNamespace (
1030 ACPI_PARSE_OBJECT *RootOp);
1031
1032 /*
1033 * asllookup - namespace lookup functions
1034 */
1035 void
1036 LkFindUnreferencedObjects (
1037 void);
1038
1039
1040 /*
1041 * aslhelp - help screens
1042 */
1043 void
1044 Usage (
1045 void);
1046
1047 void
1048 AslFilenameHelp (
1049 void);
1050
1051 void
1052 AslDisassemblyHelp (
1053 void);
1054
1055
1056 /*
1057 * aslnamesp - namespace output file generation
1058 */
1059 ACPI_STATUS
1060 NsDisplayNamespace (
1061 void);
1062
1063 void
1064 NsSetupNamespaceListing (
1065 void *Handle);
1066
1067
1068 /*
1069 * asloptions - command line processing
1070 */
1071 int
1072 AslCommandLine (
1073 int argc,
1074 char **argv);
1075
1076
1077 /*
1078 * aslxref - namespace cross reference
1079 */
1080 ACPI_STATUS
1081 XfCrossReferenceNamespace (
1082 void);
1083
1084
1085 /*
1086 * aslxrefout
1087 */
1088 void
1089 OtPrintHeaders (
1090 char *Message);
1091
1092 void
1093 OtCreateXrefFile (
1094 void);
1095
1096 void
1097 OtXrefWalkPart1 (
1098 ACPI_PARSE_OBJECT *Op,
1099 UINT32 Level,
1100 ASL_METHOD_INFO *MethodInfo);
1101
1102
1103 /*
1104 * aslutils - common compiler utilities
1105 */
1106 ACPI_PRINTF_LIKE(2)
1107 void
1108 DbgPrint (
1109 UINT32 Type,
1110 char *Format,
1111 ...);
1112
1113 /* Type values for above */
1114
1115 #define ASL_DEBUG_OUTPUT 0
1116 #define ASL_PARSE_OUTPUT 1
1117 #define ASL_TREE_OUTPUT 2
1118
1119 UINT8
1120 UtIsBigEndianMachine (
1121 void);
1122
1123 BOOLEAN
1124 UtQueryForOverwrite (
1125 char *Pathname);
1126
1127 void
1128 UtDumpStringOp (
1129 ACPI_PARSE_OBJECT *Op,
1130 UINT32 Level);
1131
1132 void
1133 UtDumpIntegerOp (
1134 ACPI_PARSE_OBJECT *Op,
1135 UINT32 Level,
1136 UINT32 IntegerLength);
1137
1138 void
1139 UtDumpBasicOp (
1140 ACPI_PARSE_OBJECT *Op,
1141 UINT32 Level);
1142
1143 ACPI_NAMESPACE_NODE *
1144 UtGetParentMethodNode (
1145 ACPI_NAMESPACE_NODE *Node);
1146
1147 ACPI_PARSE_OBJECT *
1148 UtGetParentMethodOp (
1149 ACPI_PARSE_OBJECT *Op);
1150
1151 BOOLEAN
1152 UtNodeIsDescendantOf (
1153 ACPI_NAMESPACE_NODE *Node1,
1154 ACPI_NAMESPACE_NODE *Node2);
1155
1156 void
1157 UtDisplaySupportedTables (
1158 void);
1159
1160 void
1161 UtDisplayConstantOpcodes (
1162 void);
1163
1164 UINT8
1165 UtBeginEvent (
1166 char *Name);
1167
1168 void
1169 UtEndEvent (
1170 UINT8 Event);
1171
1172 void
1173 UtDisplaySummary (
1174 UINT32 FileId);
1175
1176 void
1177 UtDisplayOneSummary (
1178 UINT32 FileId,
1179 BOOLEAN DisplayErrorSummary);
1180
1181 void
1182 UtConvertByteToHex (
1183 UINT8 RawByte,
1184 UINT8 *Buffer);
1185
1186 void
1187 UtConvertByteToAsmHex (
1188 UINT8 RawByte,
1189 UINT8 *Buffer);
1190
1191 char *
1192 UtGetOpName (
1193 UINT32 ParseOpcode);
1194
1195 void
1196 UtSetParseOpName (
1197 ACPI_PARSE_OBJECT *Op);
1198
1199 ACPI_STATUS
1200 UtInternalizeName (
1201 char *ExternalName,
1202 char **ConvertedName);
1203
1204 BOOLEAN
1205 UtNameContainsAllPrefix (
1206 ACPI_PARSE_OBJECT *Op);
1207
1208 void
1209 UtAttachNamepathToOwner (
1210 ACPI_PARSE_OBJECT *Op,
1211 ACPI_PARSE_OBJECT *NameNode);
1212
1213 ACPI_PARSE_OBJECT *
1214 UtCheckIntegerRange (
1215 ACPI_PARSE_OBJECT *Op,
1216 UINT32 LowValue,
1217 UINT32 HighValue);
1218
1219 UINT64
1220 UtDoConstant (
1221 char *String);
1222
1223 char *
1224 AcpiUtStrdup (
1225 char *String);
1226
1227 char *
1228 AcpiUtStrcat (
1229 char *String1,
1230 char *String2);
1231
1232
1233 /*
1234 * asluuid - UUID support
1235 */
1236 ACPI_STATUS
1237 AuValidateUuid (
1238 char *InString);
1239
1240 ACPI_STATUS
1241 AuConvertUuidToString (
1242 char *UuIdBuffer,
1243 char *OutString);
1244
1245
1246 /*
1247 * aslresource - Resource template generation utilities
1248 */
1249 void
1250 RsSmallAddressCheck (
1251 UINT8 Type,
1252 UINT32 Minimum,
1253 UINT32 Maximum,
1254 UINT32 Length,
1255 UINT32 Alignment,
1256 ACPI_PARSE_OBJECT *MinOp,
1257 ACPI_PARSE_OBJECT *MaxOp,
1258 ACPI_PARSE_OBJECT *LengthOp,
1259 ACPI_PARSE_OBJECT *AlignOp,
1260 ACPI_PARSE_OBJECT *Op);
1261
1262 void
1263 RsLargeAddressCheck (
1264 UINT64 Minimum,
1265 UINT64 Maximum,
1266 UINT64 Length,
1267 UINT64 Granularity,
1268 UINT8 Flags,
1269 ACPI_PARSE_OBJECT *MinOp,
1270 ACPI_PARSE_OBJECT *MaxOp,
1271 ACPI_PARSE_OBJECT *LengthOp,
1272 ACPI_PARSE_OBJECT *GranOp,
1273 ACPI_PARSE_OBJECT *Op);
1274
1275 UINT16
1276 RsGetStringDataLength (
1277 ACPI_PARSE_OBJECT *InitializerOp);
1278
1279 ASL_RESOURCE_NODE *
1280 RsAllocateResourceNode (
1281 UINT32 Size);
1282
1283 void
1284 RsCreateResourceField (
1285 ACPI_PARSE_OBJECT *Op,
1286 char *Name,
1287 UINT32 ByteOffset,
1288 UINT32 BitOffset,
1289 UINT32 BitLength);
1290
1291 void
1292 RsSetFlagBits (
1293 UINT8 *Flags,
1294 ACPI_PARSE_OBJECT *Op,
1295 UINT8 Position,
1296 UINT8 DefaultBit);
1297
1298 void
1299 RsSetFlagBits16 (
1300 UINT16 *Flags,
1301 ACPI_PARSE_OBJECT *Op,
1302 UINT8 Position,
1303 UINT8 DefaultBit);
1304
1305 ACPI_PARSE_OBJECT *
1306 RsCompleteNodeAndGetNext (
1307 ACPI_PARSE_OBJECT *Op);
1308
1309 void
1310 RsCheckListForDuplicates (
1311 ACPI_PARSE_OBJECT *Op);
1312
1313 ASL_RESOURCE_NODE *
1314 RsDoOneResourceDescriptor (
1315 ASL_RESOURCE_INFO *Info,
1316 UINT8 *State);
1317
1318 /* Values for State above */
1319
1320 #define ACPI_RSTATE_NORMAL 0
1321 #define ACPI_RSTATE_START_DEPENDENT 1
1322 #define ACPI_RSTATE_DEPENDENT_LIST 2
1323
1324 UINT32
1325 RsLinkDescriptorChain (
1326 ASL_RESOURCE_NODE **PreviousRnode,
1327 ASL_RESOURCE_NODE *Rnode);
1328
1329 void
1330 RsDoResourceTemplate (
1331 ACPI_PARSE_OBJECT *Op);
1332
1333
1334 /*
1335 * aslrestype1 - Miscellaneous Small descriptors
1336 */
1337 ASL_RESOURCE_NODE *
1338 RsDoEndTagDescriptor (
1339 ASL_RESOURCE_INFO *Info);
1340
1341 ASL_RESOURCE_NODE *
1342 RsDoEndDependentDescriptor (
1343 ASL_RESOURCE_INFO *Info);
1344
1345 ASL_RESOURCE_NODE *
1346 RsDoMemory24Descriptor (
1347 ASL_RESOURCE_INFO *Info);
1348
1349 ASL_RESOURCE_NODE *
1350 RsDoMemory32Descriptor (
1351 ASL_RESOURCE_INFO *Info);
1352
1353 ASL_RESOURCE_NODE *
1354 RsDoMemory32FixedDescriptor (
1355 ASL_RESOURCE_INFO *Info);
1356
1357 ASL_RESOURCE_NODE *
1358 RsDoStartDependentDescriptor (
1359 ASL_RESOURCE_INFO *Info);
1360
1361 ASL_RESOURCE_NODE *
1362 RsDoStartDependentNoPriDescriptor (
1363 ASL_RESOURCE_INFO *Info);
1364
1365 ASL_RESOURCE_NODE *
1366 RsDoVendorSmallDescriptor (
1367 ASL_RESOURCE_INFO *Info);
1368
1369
1370 /*
1371 * aslrestype1i - I/O-related Small descriptors
1372 */
1373 ASL_RESOURCE_NODE *
1374 RsDoDmaDescriptor (
1375 ASL_RESOURCE_INFO *Info);
1376
1377 ASL_RESOURCE_NODE *
1378 RsDoFixedDmaDescriptor (
1379 ASL_RESOURCE_INFO *Info);
1380
1381 ASL_RESOURCE_NODE *
1382 RsDoFixedIoDescriptor (
1383 ASL_RESOURCE_INFO *Info);
1384
1385 ASL_RESOURCE_NODE *
1386 RsDoIoDescriptor (
1387 ASL_RESOURCE_INFO *Info);
1388
1389 ASL_RESOURCE_NODE *
1390 RsDoIrqDescriptor (
1391 ASL_RESOURCE_INFO *Info);
1392
1393 ASL_RESOURCE_NODE *
1394 RsDoIrqNoFlagsDescriptor (
1395 ASL_RESOURCE_INFO *Info);
1396
1397
1398 /*
1399 * aslrestype2 - Large resource descriptors
1400 */
1401 ASL_RESOURCE_NODE *
1402 RsDoInterruptDescriptor (
1403 ASL_RESOURCE_INFO *Info);
1404
1405 ASL_RESOURCE_NODE *
1406 RsDoVendorLargeDescriptor (
1407 ASL_RESOURCE_INFO *Info);
1408
1409 ASL_RESOURCE_NODE *
1410 RsDoGeneralRegisterDescriptor (
1411 ASL_RESOURCE_INFO *Info);
1412
1413 ASL_RESOURCE_NODE *
1414 RsDoGpioIntDescriptor (
1415 ASL_RESOURCE_INFO *Info);
1416
1417 ASL_RESOURCE_NODE *
1418 RsDoGpioIoDescriptor (
1419 ASL_RESOURCE_INFO *Info);
1420
1421 ASL_RESOURCE_NODE *
1422 RsDoI2cSerialBusDescriptor (
1423 ASL_RESOURCE_INFO *Info);
1424
1425 ASL_RESOURCE_NODE *
1426 RsDoSpiSerialBusDescriptor (
1427 ASL_RESOURCE_INFO *Info);
1428
1429 ASL_RESOURCE_NODE *
1430 RsDoUartSerialBusDescriptor (
1431 ASL_RESOURCE_INFO *Info);
1432
1433 ASL_RESOURCE_NODE *
1434 RsDoCsi2SerialBusDescriptor (
1435 ASL_RESOURCE_INFO *Info);
1436
1437 ASL_RESOURCE_NODE *
1438 RsDoPinFunctionDescriptor (
1439 ASL_RESOURCE_INFO *Info);
1440
1441 ASL_RESOURCE_NODE *
1442 RsDoPinConfigDescriptor (
1443 ASL_RESOURCE_INFO *Info);
1444
1445 ASL_RESOURCE_NODE *
1446 RsDoPinGroupDescriptor (
1447 ASL_RESOURCE_INFO *Info);
1448
1449 ASL_RESOURCE_NODE *
1450 RsDoPinGroupFunctionDescriptor (
1451 ASL_RESOURCE_INFO *Info);
1452
1453 ASL_RESOURCE_NODE *
1454 RsDoPinGroupConfigDescriptor (
1455 ASL_RESOURCE_INFO *Info);
1456
1457
1458 /*
1459 * aslrestype2d - DWord address descriptors
1460 */
1461 ASL_RESOURCE_NODE *
1462 RsDoDwordIoDescriptor (
1463 ASL_RESOURCE_INFO *Info);
1464
1465 ASL_RESOURCE_NODE *
1466 RsDoDwordMemoryDescriptor (
1467 ASL_RESOURCE_INFO *Info);
1468
1469 ASL_RESOURCE_NODE *
1470 RsDoDwordSpaceDescriptor (
1471 ASL_RESOURCE_INFO *Info);
1472
1473
1474 /*
1475 * aslrestype2e - Extended address descriptors
1476 */
1477 ASL_RESOURCE_NODE *
1478 RsDoExtendedIoDescriptor (
1479 ASL_RESOURCE_INFO *Info);
1480
1481 ASL_RESOURCE_NODE *
1482 RsDoExtendedMemoryDescriptor (
1483 ASL_RESOURCE_INFO *Info);
1484
1485 ASL_RESOURCE_NODE *
1486 RsDoExtendedSpaceDescriptor (
1487 ASL_RESOURCE_INFO *Info);
1488
1489
1490 /*
1491 * aslrestype2q - QWord address descriptors
1492 */
1493 ASL_RESOURCE_NODE *
1494 RsDoQwordIoDescriptor (
1495 ASL_RESOURCE_INFO *Info);
1496
1497 ASL_RESOURCE_NODE *
1498 RsDoQwordMemoryDescriptor (
1499 ASL_RESOURCE_INFO *Info);
1500
1501 ASL_RESOURCE_NODE *
1502 RsDoQwordSpaceDescriptor (
1503 ASL_RESOURCE_INFO *Info);
1504
1505
1506 /*
1507 * aslrestype2w - Word address descriptors
1508 */
1509 ASL_RESOURCE_NODE *
1510 RsDoWordIoDescriptor (
1511 ASL_RESOURCE_INFO *Info);
1512
1513 ASL_RESOURCE_NODE *
1514 RsDoWordSpaceDescriptor (
1515 ASL_RESOURCE_INFO *Info);
1516
1517 ASL_RESOURCE_NODE *
1518 RsDoWordBusNumberDescriptor (
1519 ASL_RESOURCE_INFO *Info);
1520
1521
1522 /*
1523 * Entry to data table compiler subsystem
1524 */
1525 ACPI_STATUS
1526 DtDoCompile(
1527 void);
1528
1529 ACPI_STATUS
1530 DtCreateTemplates (
1531 char **argv);
1532
1533
1534 /*
1535 * ASL/ASL+ converter debug
1536 */
1537 ACPI_PRINTF_LIKE (1)
1538 void
1539 CvDbgPrint (
1540 char *Fmt,
1541 ...);
1542
1543
1544 #endif /* __ASLCOMPILER_H */
1545