xref: /netbsd-src/sys/external/bsd/acpica/dist/compiler/aslcompiler.h (revision e89934bbf778a6d6d6894877c4da59d0c7835b0f)
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 
580 /*
581  * aslfile
582  */
583 void
584 FlOpenFile (
585     UINT32                  FileId,
586     char                    *Filename,
587     char                    *Mode);
588 
589 
590 /*
591  * asllength - calculate/adjust AML package lengths
592  */
593 ACPI_STATUS
594 LnPackageLengthWalk (
595     ACPI_PARSE_OBJECT       *Op,
596     UINT32                  Level,
597     void                    *Context);
598 
599 ACPI_STATUS
600 LnInitLengthsWalk (
601     ACPI_PARSE_OBJECT       *Op,
602     UINT32                  Level,
603     void                    *Context);
604 
605 void
606 CgGenerateAmlLengths (
607     ACPI_PARSE_OBJECT       *Op);
608 
609 
610 /*
611  * aslmap - opcode mappings and reserved method names
612  */
613 ACPI_OBJECT_TYPE
614 AslMapNamedOpcodeToDataType (
615     UINT16                  Opcode);
616 
617 
618 /*
619  * aslpredef - ACPI predefined names support
620  */
621 BOOLEAN
622 ApCheckForPredefinedMethod (
623     ACPI_PARSE_OBJECT       *Op,
624     ASL_METHOD_INFO         *MethodInfo);
625 
626 void
627 ApCheckPredefinedReturnValue (
628     ACPI_PARSE_OBJECT       *Op,
629     ASL_METHOD_INFO         *MethodInfo);
630 
631 UINT32
632 ApCheckForPredefinedName (
633     ACPI_PARSE_OBJECT       *Op,
634     char                    *Name);
635 
636 void
637 ApCheckForPredefinedObject (
638     ACPI_PARSE_OBJECT       *Op,
639     char                    *Name);
640 
641 ACPI_STATUS
642 ApCheckObjectType (
643     const char              *PredefinedName,
644     ACPI_PARSE_OBJECT       *Op,
645     UINT32                  ExpectedBtypes,
646     UINT32                  PackageIndex);
647 
648 void
649 ApDisplayReservedNames (
650     void);
651 
652 
653 /*
654  * aslprepkg - ACPI predefined names support for packages
655  */
656 void
657 ApCheckPackage (
658     ACPI_PARSE_OBJECT           *ParentOp,
659     const ACPI_PREDEFINED_INFO  *Predefined);
660 
661 
662 /*
663  * asltransform - parse tree transformations
664  */
665 ACPI_STATUS
666 TrAmlTransformWalkBegin (
667     ACPI_PARSE_OBJECT       *Op,
668     UINT32                  Level,
669     void                    *Context);
670 
671 ACPI_STATUS
672 TrAmlTransformWalkEnd (
673     ACPI_PARSE_OBJECT       *Op,
674     UINT32                  Level,
675     void                    *Context);
676 
677 
678 /*
679  * asltree - parse tree support
680  */
681 ACPI_STATUS
682 TrWalkParseTree (
683     ACPI_PARSE_OBJECT       *Op,
684     UINT32                  Visitation,
685     ASL_WALK_CALLBACK       DescendingCallback,
686     ASL_WALK_CALLBACK       AscendingCallback,
687     void                    *Context);
688 
689 /*
690  * aslexternal - External opcode support
691  */
692 ACPI_STATUS
693 ExAmlExternalWalkBegin (
694     ACPI_PARSE_OBJECT       *Op,
695     UINT32                  Level,
696     void                    *Context);
697 
698 ACPI_STATUS
699 ExAmlExternalWalkEnd (
700     ACPI_PARSE_OBJECT       *Op,
701     UINT32                  Level,
702     void                    *Context);
703 
704 void
705 ExDoExternal (
706     ACPI_PARSE_OBJECT       *Op);
707 
708 /* Values for "Visitation" parameter above */
709 
710 #define ASL_WALK_VISIT_DOWNWARD     0x01
711 #define ASL_WALK_VISIT_UPWARD       0x02
712 #define ASL_WALK_VISIT_TWICE        (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
713 
714 
715 void
716 TrSetParent (
717     ACPI_PARSE_OBJECT       *Op,
718     ACPI_PARSE_OBJECT       *ParentOp);
719 
720 ACPI_PARSE_OBJECT *
721 TrAllocateNode (
722     UINT32                  ParseOpcode);
723 
724 void
725 TrPrintNodeCompileFlags (
726     UINT32                  Flags);
727 
728 void
729 TrReleaseNode (
730     ACPI_PARSE_OBJECT       *Op);
731 
732 ACPI_PARSE_OBJECT *
733 TrUpdateNode (
734     UINT32                  ParseOpcode,
735     ACPI_PARSE_OBJECT       *Op);
736 
737 ACPI_PARSE_OBJECT *
738 TrCreateNode (
739     UINT32                  ParseOpcode,
740     UINT32                  NumChildren,
741     ...);
742 
743 ACPI_PARSE_OBJECT *
744 TrCreateLeafNode (
745     UINT32                  ParseOpcode);
746 
747 ACPI_PARSE_OBJECT *
748 TrCreateNullTarget (
749     void);
750 
751 ACPI_PARSE_OBJECT *
752 TrCreateAssignmentNode (
753     ACPI_PARSE_OBJECT       *Target,
754     ACPI_PARSE_OBJECT       *Source);
755 
756 ACPI_PARSE_OBJECT *
757 TrCreateTargetOperand (
758     ACPI_PARSE_OBJECT       *OriginalOp,
759     ACPI_PARSE_OBJECT       *ParentOp);
760 
761 ACPI_PARSE_OBJECT *
762 TrCreateValuedLeafNode (
763     UINT32                  ParseOpcode,
764     UINT64                  Value);
765 
766 ACPI_PARSE_OBJECT *
767 TrCreateConstantLeafNode (
768     UINT32                  ParseOpcode);
769 
770 ACPI_PARSE_OBJECT *
771 TrLinkChildren (
772     ACPI_PARSE_OBJECT       *Op,
773     UINT32                  NumChildren,
774     ...);
775 
776 void
777 TrSetEndLineNumber (
778     ACPI_PARSE_OBJECT       *Op);
779 
780 void
781 TrSetCurrentFilename (
782     ACPI_PARSE_OBJECT       *Op);
783 
784 void
785 TrWalkTree (
786     void);
787 
788 ACPI_PARSE_OBJECT *
789 TrLinkPeerNode (
790     ACPI_PARSE_OBJECT       *Op1,
791     ACPI_PARSE_OBJECT       *Op2);
792 
793 ACPI_PARSE_OBJECT *
794 TrLinkChildNode (
795     ACPI_PARSE_OBJECT       *Op1,
796     ACPI_PARSE_OBJECT       *Op2);
797 
798 ACPI_PARSE_OBJECT *
799 TrSetNodeFlags (
800     ACPI_PARSE_OBJECT       *Op,
801     UINT32                  Flags);
802 
803 ACPI_PARSE_OBJECT *
804 TrSetNodeAmlLength (
805     ACPI_PARSE_OBJECT       *Op,
806     UINT32                  Length);
807 
808 ACPI_PARSE_OBJECT *
809 TrLinkPeerNodes (
810     UINT32                  NumPeers,
811     ...);
812 
813 
814 /*
815  * aslfiles - File I/O support
816  */
817 void
818 FlAddIncludeDirectory (
819     char                    *Dir);
820 
821 char *
822 FlMergePathnames (
823     char                    *PrefixDir,
824     char                    *FilePathname);
825 
826 void
827 FlOpenIncludeFile (
828     ACPI_PARSE_OBJECT       *Op);
829 
830 void
831 FlFileError (
832     UINT32                  FileId,
833     UINT8                   ErrorId);
834 
835 UINT32
836 FlGetFileSize (
837     UINT32                  FileId);
838 
839 ACPI_STATUS
840 FlReadFile (
841     UINT32                  FileId,
842     void                    *Buffer,
843     UINT32                  Length);
844 
845 void
846 FlWriteFile (
847     UINT32                  FileId,
848     void                    *Buffer,
849     UINT32                  Length);
850 
851 void
852 FlSeekFile (
853     UINT32                  FileId,
854     long                    Offset);
855 
856 void
857 FlCloseFile (
858     UINT32                  FileId);
859 
860 void
861 FlPrintFile (
862     UINT32                  FileId,
863     char                    *Format,
864     ...);
865 
866 void
867 FlDeleteFile (
868     UINT32                  FileId);
869 
870 void
871 FlSetLineNumber (
872     UINT32                  LineNumber);
873 
874 void
875 FlSetFilename (
876     char                    *Filename);
877 
878 ACPI_STATUS
879 FlOpenInputFile (
880     char                    *InputFilename);
881 
882 ACPI_STATUS
883 FlOpenAmlOutputFile (
884     char                    *InputFilename);
885 
886 ACPI_STATUS
887 FlOpenMiscOutputFiles (
888     char                    *InputFilename);
889 
890 /*
891  * aslhwmap - hardware map summary
892  */
893 void
894 MpEmitMappingInfo (
895     void);
896 
897 
898 /*
899  * asload - load namespace in prep for cross reference
900  */
901 ACPI_STATUS
902 LdLoadNamespace (
903     ACPI_PARSE_OBJECT       *RootOp);
904 
905 
906 /*
907  * asllookup - namespace lookup functions
908  */
909 void
910 LkFindUnreferencedObjects (
911     void);
912 
913 /*
914  * aslhelp - help screens
915  */
916 void
917 Usage (
918     void);
919 
920 void
921 AslFilenameHelp (
922     void);
923 
924 void
925 AslDisassemblyHelp (
926     void);
927 
928 
929 /*
930  * aslnamesp - namespace output file generation
931  */
932 ACPI_STATUS
933 NsDisplayNamespace (
934     void);
935 
936 void
937 NsSetupNamespaceListing (
938     void                    *Handle);
939 
940 /*
941  * asloptions - command line processing
942  */
943 int
944 AslCommandLine (
945     int                     argc,
946     char                    **argv);
947 
948 /*
949  * aslxref - namespace cross reference
950  */
951 ACPI_STATUS
952 XfCrossReferenceNamespace (
953     void);
954 
955 
956 /*
957  * aslxrefout
958  */
959 void
960 OtPrintHeaders (
961     char                    *Message);
962 
963 void
964 OtCreateXrefFile (
965     void);
966 
967 void
968 OtXrefWalkPart1 (
969     ACPI_PARSE_OBJECT       *Op,
970     UINT32                  Level,
971     ASL_METHOD_INFO         *MethodInfo);
972 
973 
974 /*
975  * aslutils - common compiler utilites
976  */
977 void
978 DbgPrint (
979     UINT32                  Type,
980     char                    *Format,
981     ...);
982 
983 /* Type values for above */
984 
985 #define ASL_DEBUG_OUTPUT    0
986 #define ASL_PARSE_OUTPUT    1
987 #define ASL_TREE_OUTPUT     2
988 
989 UINT8
990 UtIsBigEndianMachine (
991     void);
992 
993 BOOLEAN
994 UtQueryForOverwrite (
995     char                    *Pathname);
996 
997 void
998 UtDumpStringOp (
999     ACPI_PARSE_OBJECT       *Op,
1000     UINT32                  Level);
1001 
1002 void
1003 UtDumpIntegerOp (
1004     ACPI_PARSE_OBJECT       *Op,
1005     UINT32                  Level,
1006     UINT32                  IntegerLength);
1007 
1008 void
1009 UtDumpBasicOp (
1010     ACPI_PARSE_OBJECT       *Op,
1011     UINT32                  Level);
1012 
1013 void
1014 UtDisplaySupportedTables (
1015     void);
1016 
1017 void
1018 UtDisplayConstantOpcodes (
1019     void);
1020 
1021 UINT8
1022 UtBeginEvent (
1023     char                    *Name);
1024 
1025 void
1026 UtEndEvent (
1027     UINT8                   Event);
1028 
1029 void *
1030 UtLocalCalloc (
1031     UINT32                  Size);
1032 
1033 void
1034 
1035 UtDisplaySummary (
1036     UINT32                  FileId);
1037 
1038 void
1039 UtConvertByteToHex (
1040     UINT8                   RawByte,
1041     UINT8                   *Buffer);
1042 
1043 void
1044 UtConvertByteToAsmHex (
1045     UINT8                   RawByte,
1046     UINT8                   *Buffer);
1047 
1048 char *
1049 UtGetOpName (
1050     UINT32                  ParseOpcode);
1051 
1052 void
1053 UtSetParseOpName (
1054     ACPI_PARSE_OBJECT       *Op);
1055 
1056 char *
1057 UtStringCacheCalloc (
1058     UINT32                  Length);
1059 
1060 void
1061 UtExpandLineBuffers (
1062     void);
1063 
1064 void
1065 UtFreeLineBuffers (
1066     void);
1067 
1068 ACPI_STATUS
1069 UtInternalizeName (
1070     char                    *ExternalName,
1071     char                    **ConvertedName);
1072 
1073 void
1074 UtAttachNamepathToOwner (
1075     ACPI_PARSE_OBJECT       *Op,
1076     ACPI_PARSE_OBJECT       *NameNode);
1077 
1078 ACPI_PARSE_OBJECT *
1079 UtCheckIntegerRange (
1080     ACPI_PARSE_OBJECT       *Op,
1081     UINT32                  LowValue,
1082     UINT32                  HighValue);
1083 
1084 UINT64
1085 UtDoConstant (
1086     char                    *String);
1087 
1088 
1089 /*
1090  * asluuid - UUID support
1091  */
1092 ACPI_STATUS
1093 AuValidateUuid (
1094     char                    *InString);
1095 
1096 ACPI_STATUS
1097 AuConvertUuidToString (
1098     char                    *UuIdBuffer,
1099     char                    *OutString);
1100 
1101 /*
1102  * aslresource - Resource template generation utilities
1103  */
1104 void
1105 RsSmallAddressCheck (
1106     UINT8                   Type,
1107     UINT32                  Minimum,
1108     UINT32                  Maximum,
1109     UINT32                  Length,
1110     UINT32                  Alignment,
1111     ACPI_PARSE_OBJECT       *MinOp,
1112     ACPI_PARSE_OBJECT       *MaxOp,
1113     ACPI_PARSE_OBJECT       *LengthOp,
1114     ACPI_PARSE_OBJECT       *AlignOp,
1115     ACPI_PARSE_OBJECT       *Op);
1116 
1117 void
1118 RsLargeAddressCheck (
1119     UINT64                  Minimum,
1120     UINT64                  Maximum,
1121     UINT64                  Length,
1122     UINT64                  Granularity,
1123     UINT8                   Flags,
1124     ACPI_PARSE_OBJECT       *MinOp,
1125     ACPI_PARSE_OBJECT       *MaxOp,
1126     ACPI_PARSE_OBJECT       *LengthOp,
1127     ACPI_PARSE_OBJECT       *GranOp,
1128     ACPI_PARSE_OBJECT       *Op);
1129 
1130 UINT16
1131 RsGetStringDataLength (
1132     ACPI_PARSE_OBJECT       *InitializerOp);
1133 
1134 ASL_RESOURCE_NODE *
1135 RsAllocateResourceNode (
1136     UINT32                  Size);
1137 
1138 void
1139 RsCreateResourceField (
1140     ACPI_PARSE_OBJECT       *Op,
1141     char                    *Name,
1142     UINT32                  ByteOffset,
1143     UINT32                  BitOffset,
1144     UINT32                  BitLength);
1145 
1146 void
1147 RsSetFlagBits (
1148     UINT8                   *Flags,
1149     ACPI_PARSE_OBJECT       *Op,
1150     UINT8                   Position,
1151     UINT8                   DefaultBit);
1152 
1153 void
1154 RsSetFlagBits16 (
1155     UINT16                  *Flags,
1156     ACPI_PARSE_OBJECT       *Op,
1157     UINT8                   Position,
1158     UINT8                   DefaultBit);
1159 
1160 ACPI_PARSE_OBJECT *
1161 RsCompleteNodeAndGetNext (
1162     ACPI_PARSE_OBJECT       *Op);
1163 
1164 void
1165 RsCheckListForDuplicates (
1166     ACPI_PARSE_OBJECT       *Op);
1167 
1168 ASL_RESOURCE_NODE *
1169 RsDoOneResourceDescriptor (
1170     ASL_RESOURCE_INFO       *Info,
1171     UINT8                   *State);
1172 
1173 /* Values for State above */
1174 
1175 #define ACPI_RSTATE_NORMAL              0
1176 #define ACPI_RSTATE_START_DEPENDENT     1
1177 #define ACPI_RSTATE_DEPENDENT_LIST      2
1178 
1179 UINT32
1180 RsLinkDescriptorChain (
1181     ASL_RESOURCE_NODE       **PreviousRnode,
1182     ASL_RESOURCE_NODE       *Rnode);
1183 
1184 void
1185 RsDoResourceTemplate (
1186     ACPI_PARSE_OBJECT       *Op);
1187 
1188 
1189 /*
1190  * aslrestype1 - Miscellaneous Small descriptors
1191  */
1192 ASL_RESOURCE_NODE *
1193 RsDoEndTagDescriptor (
1194     ASL_RESOURCE_INFO       *Info);
1195 
1196 ASL_RESOURCE_NODE *
1197 RsDoEndDependentDescriptor (
1198     ASL_RESOURCE_INFO       *Info);
1199 
1200 ASL_RESOURCE_NODE *
1201 RsDoMemory24Descriptor (
1202     ASL_RESOURCE_INFO       *Info);
1203 
1204 ASL_RESOURCE_NODE *
1205 RsDoMemory32Descriptor (
1206     ASL_RESOURCE_INFO       *Info);
1207 
1208 ASL_RESOURCE_NODE *
1209 RsDoMemory32FixedDescriptor (
1210     ASL_RESOURCE_INFO       *Info);
1211 
1212 ASL_RESOURCE_NODE *
1213 RsDoStartDependentDescriptor (
1214     ASL_RESOURCE_INFO       *Info);
1215 
1216 ASL_RESOURCE_NODE *
1217 RsDoStartDependentNoPriDescriptor (
1218     ASL_RESOURCE_INFO       *Info);
1219 
1220 ASL_RESOURCE_NODE *
1221 RsDoVendorSmallDescriptor (
1222     ASL_RESOURCE_INFO       *Info);
1223 
1224 
1225 /*
1226  * aslrestype1i - I/O-related Small descriptors
1227  */
1228 ASL_RESOURCE_NODE *
1229 RsDoDmaDescriptor (
1230     ASL_RESOURCE_INFO       *Info);
1231 
1232 ASL_RESOURCE_NODE *
1233 RsDoFixedDmaDescriptor (
1234     ASL_RESOURCE_INFO       *Info);
1235 
1236 ASL_RESOURCE_NODE *
1237 RsDoFixedIoDescriptor (
1238     ASL_RESOURCE_INFO       *Info);
1239 
1240 ASL_RESOURCE_NODE *
1241 RsDoIoDescriptor (
1242     ASL_RESOURCE_INFO       *Info);
1243 
1244 ASL_RESOURCE_NODE *
1245 RsDoIrqDescriptor (
1246     ASL_RESOURCE_INFO       *Info);
1247 
1248 ASL_RESOURCE_NODE *
1249 RsDoIrqNoFlagsDescriptor (
1250     ASL_RESOURCE_INFO       *Info);
1251 
1252 
1253 /*
1254  * aslrestype2 - Large resource descriptors
1255  */
1256 ASL_RESOURCE_NODE *
1257 RsDoInterruptDescriptor (
1258     ASL_RESOURCE_INFO       *Info);
1259 
1260 ASL_RESOURCE_NODE *
1261 RsDoVendorLargeDescriptor (
1262     ASL_RESOURCE_INFO       *Info);
1263 
1264 ASL_RESOURCE_NODE *
1265 RsDoGeneralRegisterDescriptor (
1266     ASL_RESOURCE_INFO       *Info);
1267 
1268 ASL_RESOURCE_NODE *
1269 RsDoGpioIntDescriptor (
1270     ASL_RESOURCE_INFO       *Info);
1271 
1272 ASL_RESOURCE_NODE *
1273 RsDoGpioIoDescriptor (
1274     ASL_RESOURCE_INFO       *Info);
1275 
1276 ASL_RESOURCE_NODE *
1277 RsDoI2cSerialBusDescriptor (
1278     ASL_RESOURCE_INFO       *Info);
1279 
1280 ASL_RESOURCE_NODE *
1281 RsDoSpiSerialBusDescriptor (
1282     ASL_RESOURCE_INFO       *Info);
1283 
1284 ASL_RESOURCE_NODE *
1285 RsDoUartSerialBusDescriptor (
1286     ASL_RESOURCE_INFO       *Info);
1287 
1288 /*
1289  * aslrestype2d - DWord address descriptors
1290  */
1291 ASL_RESOURCE_NODE *
1292 RsDoDwordIoDescriptor (
1293     ASL_RESOURCE_INFO       *Info);
1294 
1295 ASL_RESOURCE_NODE *
1296 RsDoDwordMemoryDescriptor (
1297     ASL_RESOURCE_INFO       *Info);
1298 
1299 ASL_RESOURCE_NODE *
1300 RsDoDwordSpaceDescriptor (
1301     ASL_RESOURCE_INFO       *Info);
1302 
1303 
1304 /*
1305  * aslrestype2e - Extended address descriptors
1306  */
1307 ASL_RESOURCE_NODE *
1308 RsDoExtendedIoDescriptor (
1309     ASL_RESOURCE_INFO       *Info);
1310 
1311 ASL_RESOURCE_NODE *
1312 RsDoExtendedMemoryDescriptor (
1313     ASL_RESOURCE_INFO       *Info);
1314 
1315 ASL_RESOURCE_NODE *
1316 RsDoExtendedSpaceDescriptor (
1317     ASL_RESOURCE_INFO       *Info);
1318 
1319 
1320 /*
1321  * aslrestype2q - QWord address descriptors
1322  */
1323 ASL_RESOURCE_NODE *
1324 RsDoQwordIoDescriptor (
1325     ASL_RESOURCE_INFO       *Info);
1326 
1327 ASL_RESOURCE_NODE *
1328 RsDoQwordMemoryDescriptor (
1329     ASL_RESOURCE_INFO       *Info);
1330 
1331 ASL_RESOURCE_NODE *
1332 RsDoQwordSpaceDescriptor (
1333     ASL_RESOURCE_INFO       *Info);
1334 
1335 
1336 /*
1337  * aslrestype2w - Word address descriptors
1338  */
1339 ASL_RESOURCE_NODE *
1340 RsDoWordIoDescriptor (
1341     ASL_RESOURCE_INFO       *Info);
1342 
1343 ASL_RESOURCE_NODE *
1344 RsDoWordSpaceDescriptor (
1345     ASL_RESOURCE_INFO       *Info);
1346 
1347 ASL_RESOURCE_NODE *
1348 RsDoWordBusNumberDescriptor (
1349     ASL_RESOURCE_INFO       *Info);
1350 
1351 
1352 /*
1353  * Entry to data table compiler subsystem
1354  */
1355 ACPI_STATUS
1356 DtDoCompile(
1357     void);
1358 
1359 ACPI_STATUS
1360 DtCreateTemplates (
1361     char                    **argv);
1362 
1363 #endif /*  __ASLCOMPILER_H */
1364