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