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