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