aslcompiler.h revision 1.1.1.5.2.4 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
1032 UtDisplaySummary (
1033 UINT32 FileId);
1034
1035 void
1036 UtConvertByteToHex (
1037 UINT8 RawByte,
1038 UINT8 *Buffer);
1039
1040 void
1041 UtConvertByteToAsmHex (
1042 UINT8 RawByte,
1043 UINT8 *Buffer);
1044
1045 char *
1046 UtGetOpName (
1047 UINT32 ParseOpcode);
1048
1049 void
1050 UtSetParseOpName (
1051 ACPI_PARSE_OBJECT *Op);
1052
1053 char *
1054 UtStringCacheCalloc (
1055 UINT32 Length);
1056
1057 void
1058 UtExpandLineBuffers (
1059 void);
1060
1061 void
1062 UtFreeLineBuffers (
1063 void);
1064
1065 ACPI_STATUS
1066 UtInternalizeName (
1067 char *ExternalName,
1068 char **ConvertedName);
1069
1070 void
1071 UtAttachNamepathToOwner (
1072 ACPI_PARSE_OBJECT *Op,
1073 ACPI_PARSE_OBJECT *NameNode);
1074
1075 ACPI_PARSE_OBJECT *
1076 UtCheckIntegerRange (
1077 ACPI_PARSE_OBJECT *Op,
1078 UINT32 LowValue,
1079 UINT32 HighValue);
1080
1081 UINT64
1082 UtDoConstant (
1083 char *String);
1084
1085
1086 /*
1087 * asluuid - UUID support
1088 */
1089 ACPI_STATUS
1090 AuValidateUuid (
1091 char *InString);
1092
1093 ACPI_STATUS
1094 AuConvertUuidToString (
1095 char *UuIdBuffer,
1096 char *OutString);
1097
1098 /*
1099 * aslresource - Resource template generation utilities
1100 */
1101 void
1102 RsSmallAddressCheck (
1103 UINT8 Type,
1104 UINT32 Minimum,
1105 UINT32 Maximum,
1106 UINT32 Length,
1107 UINT32 Alignment,
1108 ACPI_PARSE_OBJECT *MinOp,
1109 ACPI_PARSE_OBJECT *MaxOp,
1110 ACPI_PARSE_OBJECT *LengthOp,
1111 ACPI_PARSE_OBJECT *AlignOp,
1112 ACPI_PARSE_OBJECT *Op);
1113
1114 void
1115 RsLargeAddressCheck (
1116 UINT64 Minimum,
1117 UINT64 Maximum,
1118 UINT64 Length,
1119 UINT64 Granularity,
1120 UINT8 Flags,
1121 ACPI_PARSE_OBJECT *MinOp,
1122 ACPI_PARSE_OBJECT *MaxOp,
1123 ACPI_PARSE_OBJECT *LengthOp,
1124 ACPI_PARSE_OBJECT *GranOp,
1125 ACPI_PARSE_OBJECT *Op);
1126
1127 UINT16
1128 RsGetStringDataLength (
1129 ACPI_PARSE_OBJECT *InitializerOp);
1130
1131 ASL_RESOURCE_NODE *
1132 RsAllocateResourceNode (
1133 UINT32 Size);
1134
1135 void
1136 RsCreateResourceField (
1137 ACPI_PARSE_OBJECT *Op,
1138 char *Name,
1139 UINT32 ByteOffset,
1140 UINT32 BitOffset,
1141 UINT32 BitLength);
1142
1143 void
1144 RsSetFlagBits (
1145 UINT8 *Flags,
1146 ACPI_PARSE_OBJECT *Op,
1147 UINT8 Position,
1148 UINT8 DefaultBit);
1149
1150 void
1151 RsSetFlagBits16 (
1152 UINT16 *Flags,
1153 ACPI_PARSE_OBJECT *Op,
1154 UINT8 Position,
1155 UINT8 DefaultBit);
1156
1157 ACPI_PARSE_OBJECT *
1158 RsCompleteNodeAndGetNext (
1159 ACPI_PARSE_OBJECT *Op);
1160
1161 void
1162 RsCheckListForDuplicates (
1163 ACPI_PARSE_OBJECT *Op);
1164
1165 ASL_RESOURCE_NODE *
1166 RsDoOneResourceDescriptor (
1167 ASL_RESOURCE_INFO *Info,
1168 UINT8 *State);
1169
1170 /* Values for State above */
1171
1172 #define ACPI_RSTATE_NORMAL 0
1173 #define ACPI_RSTATE_START_DEPENDENT 1
1174 #define ACPI_RSTATE_DEPENDENT_LIST 2
1175
1176 UINT32
1177 RsLinkDescriptorChain (
1178 ASL_RESOURCE_NODE **PreviousRnode,
1179 ASL_RESOURCE_NODE *Rnode);
1180
1181 void
1182 RsDoResourceTemplate (
1183 ACPI_PARSE_OBJECT *Op);
1184
1185
1186 /*
1187 * aslrestype1 - Miscellaneous Small descriptors
1188 */
1189 ASL_RESOURCE_NODE *
1190 RsDoEndTagDescriptor (
1191 ASL_RESOURCE_INFO *Info);
1192
1193 ASL_RESOURCE_NODE *
1194 RsDoEndDependentDescriptor (
1195 ASL_RESOURCE_INFO *Info);
1196
1197 ASL_RESOURCE_NODE *
1198 RsDoMemory24Descriptor (
1199 ASL_RESOURCE_INFO *Info);
1200
1201 ASL_RESOURCE_NODE *
1202 RsDoMemory32Descriptor (
1203 ASL_RESOURCE_INFO *Info);
1204
1205 ASL_RESOURCE_NODE *
1206 RsDoMemory32FixedDescriptor (
1207 ASL_RESOURCE_INFO *Info);
1208
1209 ASL_RESOURCE_NODE *
1210 RsDoStartDependentDescriptor (
1211 ASL_RESOURCE_INFO *Info);
1212
1213 ASL_RESOURCE_NODE *
1214 RsDoStartDependentNoPriDescriptor (
1215 ASL_RESOURCE_INFO *Info);
1216
1217 ASL_RESOURCE_NODE *
1218 RsDoVendorSmallDescriptor (
1219 ASL_RESOURCE_INFO *Info);
1220
1221
1222 /*
1223 * aslrestype1i - I/O-related Small descriptors
1224 */
1225 ASL_RESOURCE_NODE *
1226 RsDoDmaDescriptor (
1227 ASL_RESOURCE_INFO *Info);
1228
1229 ASL_RESOURCE_NODE *
1230 RsDoFixedDmaDescriptor (
1231 ASL_RESOURCE_INFO *Info);
1232
1233 ASL_RESOURCE_NODE *
1234 RsDoFixedIoDescriptor (
1235 ASL_RESOURCE_INFO *Info);
1236
1237 ASL_RESOURCE_NODE *
1238 RsDoIoDescriptor (
1239 ASL_RESOURCE_INFO *Info);
1240
1241 ASL_RESOURCE_NODE *
1242 RsDoIrqDescriptor (
1243 ASL_RESOURCE_INFO *Info);
1244
1245 ASL_RESOURCE_NODE *
1246 RsDoIrqNoFlagsDescriptor (
1247 ASL_RESOURCE_INFO *Info);
1248
1249
1250 /*
1251 * aslrestype2 - Large resource descriptors
1252 */
1253 ASL_RESOURCE_NODE *
1254 RsDoInterruptDescriptor (
1255 ASL_RESOURCE_INFO *Info);
1256
1257 ASL_RESOURCE_NODE *
1258 RsDoVendorLargeDescriptor (
1259 ASL_RESOURCE_INFO *Info);
1260
1261 ASL_RESOURCE_NODE *
1262 RsDoGeneralRegisterDescriptor (
1263 ASL_RESOURCE_INFO *Info);
1264
1265 ASL_RESOURCE_NODE *
1266 RsDoGpioIntDescriptor (
1267 ASL_RESOURCE_INFO *Info);
1268
1269 ASL_RESOURCE_NODE *
1270 RsDoGpioIoDescriptor (
1271 ASL_RESOURCE_INFO *Info);
1272
1273 ASL_RESOURCE_NODE *
1274 RsDoI2cSerialBusDescriptor (
1275 ASL_RESOURCE_INFO *Info);
1276
1277 ASL_RESOURCE_NODE *
1278 RsDoSpiSerialBusDescriptor (
1279 ASL_RESOURCE_INFO *Info);
1280
1281 ASL_RESOURCE_NODE *
1282 RsDoUartSerialBusDescriptor (
1283 ASL_RESOURCE_INFO *Info);
1284
1285 /*
1286 * aslrestype2d - DWord address descriptors
1287 */
1288 ASL_RESOURCE_NODE *
1289 RsDoDwordIoDescriptor (
1290 ASL_RESOURCE_INFO *Info);
1291
1292 ASL_RESOURCE_NODE *
1293 RsDoDwordMemoryDescriptor (
1294 ASL_RESOURCE_INFO *Info);
1295
1296 ASL_RESOURCE_NODE *
1297 RsDoDwordSpaceDescriptor (
1298 ASL_RESOURCE_INFO *Info);
1299
1300
1301 /*
1302 * aslrestype2e - Extended address descriptors
1303 */
1304 ASL_RESOURCE_NODE *
1305 RsDoExtendedIoDescriptor (
1306 ASL_RESOURCE_INFO *Info);
1307
1308 ASL_RESOURCE_NODE *
1309 RsDoExtendedMemoryDescriptor (
1310 ASL_RESOURCE_INFO *Info);
1311
1312 ASL_RESOURCE_NODE *
1313 RsDoExtendedSpaceDescriptor (
1314 ASL_RESOURCE_INFO *Info);
1315
1316
1317 /*
1318 * aslrestype2q - QWord address descriptors
1319 */
1320 ASL_RESOURCE_NODE *
1321 RsDoQwordIoDescriptor (
1322 ASL_RESOURCE_INFO *Info);
1323
1324 ASL_RESOURCE_NODE *
1325 RsDoQwordMemoryDescriptor (
1326 ASL_RESOURCE_INFO *Info);
1327
1328 ASL_RESOURCE_NODE *
1329 RsDoQwordSpaceDescriptor (
1330 ASL_RESOURCE_INFO *Info);
1331
1332
1333 /*
1334 * aslrestype2w - Word address descriptors
1335 */
1336 ASL_RESOURCE_NODE *
1337 RsDoWordIoDescriptor (
1338 ASL_RESOURCE_INFO *Info);
1339
1340 ASL_RESOURCE_NODE *
1341 RsDoWordSpaceDescriptor (
1342 ASL_RESOURCE_INFO *Info);
1343
1344 ASL_RESOURCE_NODE *
1345 RsDoWordBusNumberDescriptor (
1346 ASL_RESOURCE_INFO *Info);
1347
1348
1349 /*
1350 * Entry to data table compiler subsystem
1351 */
1352 ACPI_STATUS
1353 DtDoCompile(
1354 void);
1355
1356 ACPI_STATUS
1357 DtCreateTemplates (
1358 char **argv);
1359
1360 #endif /* __ASLCOMPILER_H */
1361