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