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