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