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