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