aslcompiler.h revision 1.21 1 /******************************************************************************
2 *
3 * Module Name: aslcompiler.h - common include file for iASL
4 *
5 *****************************************************************************/
6
7 /*
8 * Copyright (C) 2000 - 2023, 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 BOOLEAN
1120 UtIsIdInteger (
1121 UINT8 *Target);
1122
1123 UINT8
1124 UtIsBigEndianMachine (
1125 void);
1126
1127 BOOLEAN
1128 UtQueryForOverwrite (
1129 char *Pathname);
1130
1131 void
1132 UtDumpStringOp (
1133 ACPI_PARSE_OBJECT *Op,
1134 UINT32 Level);
1135
1136 void
1137 UtDumpIntegerOp (
1138 ACPI_PARSE_OBJECT *Op,
1139 UINT32 Level,
1140 UINT32 IntegerLength);
1141
1142 void
1143 UtDumpBasicOp (
1144 ACPI_PARSE_OBJECT *Op,
1145 UINT32 Level);
1146
1147 ACPI_NAMESPACE_NODE *
1148 UtGetParentMethodNode (
1149 ACPI_NAMESPACE_NODE *Node);
1150
1151 ACPI_PARSE_OBJECT *
1152 UtGetParentMethodOp (
1153 ACPI_PARSE_OBJECT *Op);
1154
1155 BOOLEAN
1156 UtNodeIsDescendantOf (
1157 ACPI_NAMESPACE_NODE *Node1,
1158 ACPI_NAMESPACE_NODE *Node2);
1159
1160 void
1161 UtDisplaySupportedTables (
1162 void);
1163
1164 void
1165 UtDisplayConstantOpcodes (
1166 void);
1167
1168 UINT8
1169 UtBeginEvent (
1170 char *Name);
1171
1172 void
1173 UtEndEvent (
1174 UINT8 Event);
1175
1176 void
1177 UtDisplaySummary (
1178 UINT32 FileId);
1179
1180 void
1181 UtDisplayOneSummary (
1182 UINT32 FileId,
1183 BOOLEAN DisplayErrorSummary);
1184
1185 void
1186 UtConvertByteToHex (
1187 UINT8 RawByte,
1188 UINT8 *Buffer);
1189
1190 void
1191 UtConvertByteToAsmHex (
1192 UINT8 RawByte,
1193 UINT8 *Buffer);
1194
1195 char *
1196 UtGetOpName (
1197 UINT32 ParseOpcode);
1198
1199 void
1200 UtSetParseOpName (
1201 ACPI_PARSE_OBJECT *Op);
1202
1203 ACPI_STATUS
1204 UtInternalizeName (
1205 char *ExternalName,
1206 char **ConvertedName);
1207
1208 BOOLEAN
1209 UtNameContainsAllPrefix (
1210 ACPI_PARSE_OBJECT *Op);
1211
1212 void
1213 UtAttachNamepathToOwner (
1214 ACPI_PARSE_OBJECT *Op,
1215 ACPI_PARSE_OBJECT *NameNode);
1216
1217 ACPI_PARSE_OBJECT *
1218 UtCheckIntegerRange (
1219 ACPI_PARSE_OBJECT *Op,
1220 UINT32 LowValue,
1221 UINT32 HighValue);
1222
1223 UINT64
1224 UtDoConstant (
1225 char *String);
1226
1227 char *
1228 AcpiUtStrdup (
1229 char *String);
1230
1231 char *
1232 AcpiUtStrcat (
1233 char *String1,
1234 char *String2);
1235
1236
1237 /*
1238 * asluuid - UUID support
1239 */
1240 ACPI_STATUS
1241 AuValidateUuid (
1242 char *InString);
1243
1244 ACPI_STATUS
1245 AuConvertUuidToString (
1246 char *UuIdBuffer,
1247 char *OutString);
1248
1249
1250 /*
1251 * aslresource - Resource template generation utilities
1252 */
1253 void
1254 RsSmallAddressCheck (
1255 UINT8 Type,
1256 UINT32 Minimum,
1257 UINT32 Maximum,
1258 UINT32 Length,
1259 UINT32 Alignment,
1260 ACPI_PARSE_OBJECT *MinOp,
1261 ACPI_PARSE_OBJECT *MaxOp,
1262 ACPI_PARSE_OBJECT *LengthOp,
1263 ACPI_PARSE_OBJECT *AlignOp,
1264 ACPI_PARSE_OBJECT *Op);
1265
1266 void
1267 RsLargeAddressCheck (
1268 UINT64 Minimum,
1269 UINT64 Maximum,
1270 UINT64 Length,
1271 UINT64 Granularity,
1272 UINT8 Flags,
1273 ACPI_PARSE_OBJECT *MinOp,
1274 ACPI_PARSE_OBJECT *MaxOp,
1275 ACPI_PARSE_OBJECT *LengthOp,
1276 ACPI_PARSE_OBJECT *GranOp,
1277 ACPI_PARSE_OBJECT *Op);
1278
1279 UINT16
1280 RsGetStringDataLength (
1281 ACPI_PARSE_OBJECT *InitializerOp);
1282
1283 ASL_RESOURCE_NODE *
1284 RsAllocateResourceNode (
1285 UINT32 Size);
1286
1287 void
1288 RsCreateResourceField (
1289 ACPI_PARSE_OBJECT *Op,
1290 char *Name,
1291 UINT32 ByteOffset,
1292 UINT32 BitOffset,
1293 UINT32 BitLength);
1294
1295 void
1296 RsSetFlagBits (
1297 UINT8 *Flags,
1298 ACPI_PARSE_OBJECT *Op,
1299 UINT8 Position,
1300 UINT8 DefaultBit);
1301
1302 void
1303 RsSetFlagBits16 (
1304 UINT16 *Flags,
1305 ACPI_PARSE_OBJECT *Op,
1306 UINT8 Position,
1307 UINT8 DefaultBit);
1308
1309 ACPI_PARSE_OBJECT *
1310 RsCompleteNodeAndGetNext (
1311 ACPI_PARSE_OBJECT *Op);
1312
1313 void
1314 RsCheckListForDuplicates (
1315 ACPI_PARSE_OBJECT *Op);
1316
1317 ASL_RESOURCE_NODE *
1318 RsDoOneResourceDescriptor (
1319 ASL_RESOURCE_INFO *Info,
1320 UINT8 *State);
1321
1322 /* Values for State above */
1323
1324 #define ACPI_RSTATE_NORMAL 0
1325 #define ACPI_RSTATE_START_DEPENDENT 1
1326 #define ACPI_RSTATE_DEPENDENT_LIST 2
1327
1328 UINT32
1329 RsLinkDescriptorChain (
1330 ASL_RESOURCE_NODE **PreviousRnode,
1331 ASL_RESOURCE_NODE *Rnode);
1332
1333 void
1334 RsDoResourceTemplate (
1335 ACPI_PARSE_OBJECT *Op);
1336
1337
1338 /*
1339 * aslrestype1 - Miscellaneous Small descriptors
1340 */
1341 ASL_RESOURCE_NODE *
1342 RsDoEndTagDescriptor (
1343 ASL_RESOURCE_INFO *Info);
1344
1345 ASL_RESOURCE_NODE *
1346 RsDoEndDependentDescriptor (
1347 ASL_RESOURCE_INFO *Info);
1348
1349 ASL_RESOURCE_NODE *
1350 RsDoMemory24Descriptor (
1351 ASL_RESOURCE_INFO *Info);
1352
1353 ASL_RESOURCE_NODE *
1354 RsDoMemory32Descriptor (
1355 ASL_RESOURCE_INFO *Info);
1356
1357 ASL_RESOURCE_NODE *
1358 RsDoMemory32FixedDescriptor (
1359 ASL_RESOURCE_INFO *Info);
1360
1361 ASL_RESOURCE_NODE *
1362 RsDoStartDependentDescriptor (
1363 ASL_RESOURCE_INFO *Info);
1364
1365 ASL_RESOURCE_NODE *
1366 RsDoStartDependentNoPriDescriptor (
1367 ASL_RESOURCE_INFO *Info);
1368
1369 ASL_RESOURCE_NODE *
1370 RsDoVendorSmallDescriptor (
1371 ASL_RESOURCE_INFO *Info);
1372
1373
1374 /*
1375 * aslrestype1i - I/O-related Small descriptors
1376 */
1377 ASL_RESOURCE_NODE *
1378 RsDoDmaDescriptor (
1379 ASL_RESOURCE_INFO *Info);
1380
1381 ASL_RESOURCE_NODE *
1382 RsDoFixedDmaDescriptor (
1383 ASL_RESOURCE_INFO *Info);
1384
1385 ASL_RESOURCE_NODE *
1386 RsDoFixedIoDescriptor (
1387 ASL_RESOURCE_INFO *Info);
1388
1389 ASL_RESOURCE_NODE *
1390 RsDoIoDescriptor (
1391 ASL_RESOURCE_INFO *Info);
1392
1393 ASL_RESOURCE_NODE *
1394 RsDoIrqDescriptor (
1395 ASL_RESOURCE_INFO *Info);
1396
1397 ASL_RESOURCE_NODE *
1398 RsDoIrqNoFlagsDescriptor (
1399 ASL_RESOURCE_INFO *Info);
1400
1401
1402 /*
1403 * aslrestype2 - Large resource descriptors
1404 */
1405 ASL_RESOURCE_NODE *
1406 RsDoInterruptDescriptor (
1407 ASL_RESOURCE_INFO *Info);
1408
1409 ASL_RESOURCE_NODE *
1410 RsDoVendorLargeDescriptor (
1411 ASL_RESOURCE_INFO *Info);
1412
1413 ASL_RESOURCE_NODE *
1414 RsDoGeneralRegisterDescriptor (
1415 ASL_RESOURCE_INFO *Info);
1416
1417 ASL_RESOURCE_NODE *
1418 RsDoGpioIntDescriptor (
1419 ASL_RESOURCE_INFO *Info);
1420
1421 ASL_RESOURCE_NODE *
1422 RsDoGpioIoDescriptor (
1423 ASL_RESOURCE_INFO *Info);
1424
1425 ASL_RESOURCE_NODE *
1426 RsDoI2cSerialBusDescriptor (
1427 ASL_RESOURCE_INFO *Info);
1428
1429 ASL_RESOURCE_NODE *
1430 RsDoSpiSerialBusDescriptor (
1431 ASL_RESOURCE_INFO *Info);
1432
1433 ASL_RESOURCE_NODE *
1434 RsDoUartSerialBusDescriptor (
1435 ASL_RESOURCE_INFO *Info);
1436
1437 ASL_RESOURCE_NODE *
1438 RsDoCsi2SerialBusDescriptor (
1439 ASL_RESOURCE_INFO *Info);
1440
1441 ASL_RESOURCE_NODE *
1442 RsDoPinFunctionDescriptor (
1443 ASL_RESOURCE_INFO *Info);
1444
1445 ASL_RESOURCE_NODE *
1446 RsDoPinConfigDescriptor (
1447 ASL_RESOURCE_INFO *Info);
1448
1449 ASL_RESOURCE_NODE *
1450 RsDoPinGroupDescriptor (
1451 ASL_RESOURCE_INFO *Info);
1452
1453 ASL_RESOURCE_NODE *
1454 RsDoPinGroupFunctionDescriptor (
1455 ASL_RESOURCE_INFO *Info);
1456
1457 ASL_RESOURCE_NODE *
1458 RsDoPinGroupConfigDescriptor (
1459 ASL_RESOURCE_INFO *Info);
1460
1461 ASL_RESOURCE_NODE *
1462 RsDoClockInputDescriptor (
1463 ASL_RESOURCE_INFO *Info);
1464
1465 /*
1466 * aslrestype2d - DWord address descriptors
1467 */
1468 ASL_RESOURCE_NODE *
1469 RsDoDwordIoDescriptor (
1470 ASL_RESOURCE_INFO *Info);
1471
1472 ASL_RESOURCE_NODE *
1473 RsDoDwordMemoryDescriptor (
1474 ASL_RESOURCE_INFO *Info);
1475
1476 ASL_RESOURCE_NODE *
1477 RsDoDwordSpaceDescriptor (
1478 ASL_RESOURCE_INFO *Info);
1479
1480
1481 /*
1482 * aslrestype2e - Extended address descriptors
1483 */
1484 ASL_RESOURCE_NODE *
1485 RsDoExtendedIoDescriptor (
1486 ASL_RESOURCE_INFO *Info);
1487
1488 ASL_RESOURCE_NODE *
1489 RsDoExtendedMemoryDescriptor (
1490 ASL_RESOURCE_INFO *Info);
1491
1492 ASL_RESOURCE_NODE *
1493 RsDoExtendedSpaceDescriptor (
1494 ASL_RESOURCE_INFO *Info);
1495
1496
1497 /*
1498 * aslrestype2q - QWord address descriptors
1499 */
1500 ASL_RESOURCE_NODE *
1501 RsDoQwordIoDescriptor (
1502 ASL_RESOURCE_INFO *Info);
1503
1504 ASL_RESOURCE_NODE *
1505 RsDoQwordMemoryDescriptor (
1506 ASL_RESOURCE_INFO *Info);
1507
1508 ASL_RESOURCE_NODE *
1509 RsDoQwordSpaceDescriptor (
1510 ASL_RESOURCE_INFO *Info);
1511
1512
1513 /*
1514 * aslrestype2w - Word address descriptors
1515 */
1516 ASL_RESOURCE_NODE *
1517 RsDoWordIoDescriptor (
1518 ASL_RESOURCE_INFO *Info);
1519
1520 ASL_RESOURCE_NODE *
1521 RsDoWordSpaceDescriptor (
1522 ASL_RESOURCE_INFO *Info);
1523
1524 ASL_RESOURCE_NODE *
1525 RsDoWordBusNumberDescriptor (
1526 ASL_RESOURCE_INFO *Info);
1527
1528
1529 /*
1530 * Entry to data table compiler subsystem
1531 */
1532 ACPI_STATUS
1533 DtDoCompile(
1534 void);
1535
1536 ACPI_STATUS
1537 DtCreateTemplates (
1538 char **argv);
1539
1540
1541 /*
1542 * ASL/ASL+ converter debug
1543 */
1544 ACPI_PRINTF_LIKE (1)
1545 void
1546 CvDbgPrint (
1547 char *Fmt,
1548 ...);
1549
1550
1551 #endif /* __ASLCOMPILER_H */
1552