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