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