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