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