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