aslcompiler.h revision 1.1.1.6 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 "acpi.h"
48 #include "accommon.h"
49 #include "amlresrc.h"
50 #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 "asldefine.h"
73 #include "asltypes.h"
74 #include "aslmessages.h"
75 #include "aslglobal.h"
76 #include "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 * aslprintf - Printf/Fprintf macros
547 */
548 void
549 OpcDoPrintf (
550 ACPI_PARSE_OBJECT *Op);
551
552 void
553 OpcDoFprintf (
554 ACPI_PARSE_OBJECT *Op);
555
556
557 /*
558 * aslprune - parse tree pruner
559 */
560 void
561 AslPruneParseTree (
562 UINT32 PruneDepth,
563 UINT32 Type);
564
565
566 /*
567 * aslcodegen - code generation
568 */
569 void
570 CgGenerateAmlOutput (
571 void);
572
573
574 /*
575 * aslfile
576 */
577 void
578 FlOpenFile (
579 UINT32 FileId,
580 char *Filename,
581 char *Mode);
582
583
584 /*
585 * asllength - calculate/adjust AML package lengths
586 */
587 ACPI_STATUS
588 LnPackageLengthWalk (
589 ACPI_PARSE_OBJECT *Op,
590 UINT32 Level,
591 void *Context);
592
593 ACPI_STATUS
594 LnInitLengthsWalk (
595 ACPI_PARSE_OBJECT *Op,
596 UINT32 Level,
597 void *Context);
598
599 void
600 CgGenerateAmlLengths (
601 ACPI_PARSE_OBJECT *Op);
602
603
604 /*
605 * aslmap - opcode mappings and reserved method names
606 */
607 ACPI_OBJECT_TYPE
608 AslMapNamedOpcodeToDataType (
609 UINT16 Opcode);
610
611
612 /*
613 * aslpredef - ACPI predefined names support
614 */
615 BOOLEAN
616 ApCheckForPredefinedMethod (
617 ACPI_PARSE_OBJECT *Op,
618 ASL_METHOD_INFO *MethodInfo);
619
620 void
621 ApCheckPredefinedReturnValue (
622 ACPI_PARSE_OBJECT *Op,
623 ASL_METHOD_INFO *MethodInfo);
624
625 UINT32
626 ApCheckForPredefinedName (
627 ACPI_PARSE_OBJECT *Op,
628 char *Name);
629
630 void
631 ApCheckForPredefinedObject (
632 ACPI_PARSE_OBJECT *Op,
633 char *Name);
634
635 ACPI_STATUS
636 ApCheckObjectType (
637 const char *PredefinedName,
638 ACPI_PARSE_OBJECT *Op,
639 UINT32 ExpectedBtypes,
640 UINT32 PackageIndex);
641
642 void
643 ApDisplayReservedNames (
644 void);
645
646
647 /*
648 * aslprepkg - ACPI predefined names support for packages
649 */
650 void
651 ApCheckPackage (
652 ACPI_PARSE_OBJECT *ParentOp,
653 const ACPI_PREDEFINED_INFO *Predefined);
654
655
656 /*
657 * asltransform - parse tree transformations
658 */
659 ACPI_STATUS
660 TrAmlTransformWalk (
661 ACPI_PARSE_OBJECT *Op,
662 UINT32 Level,
663 void *Context);
664
665
666 /*
667 * asltree - parse tree support
668 */
669 ACPI_STATUS
670 TrWalkParseTree (
671 ACPI_PARSE_OBJECT *Op,
672 UINT32 Visitation,
673 ASL_WALK_CALLBACK DescendingCallback,
674 ASL_WALK_CALLBACK AscendingCallback,
675 void *Context);
676
677 /* Values for "Visitation" parameter above */
678
679 #define ASL_WALK_VISIT_DOWNWARD 0x01
680 #define ASL_WALK_VISIT_UPWARD 0x02
681 #define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
682
683
684 ACPI_PARSE_OBJECT *
685 TrAllocateNode (
686 UINT32 ParseOpcode);
687
688 void
689 TrPrintNodeCompileFlags (
690 UINT32 Flags);
691
692 void
693 TrReleaseNode (
694 ACPI_PARSE_OBJECT *Op);
695
696 ACPI_PARSE_OBJECT *
697 TrUpdateNode (
698 UINT32 ParseOpcode,
699 ACPI_PARSE_OBJECT *Op);
700
701 ACPI_PARSE_OBJECT *
702 TrCreateNode (
703 UINT32 ParseOpcode,
704 UINT32 NumChildren,
705 ...);
706
707 ACPI_PARSE_OBJECT *
708 TrCreateLeafNode (
709 UINT32 ParseOpcode);
710
711 ACPI_PARSE_OBJECT *
712 TrCreateNullTarget (
713 void);
714
715 ACPI_PARSE_OBJECT *
716 TrCreateAssignmentNode (
717 ACPI_PARSE_OBJECT *Target,
718 ACPI_PARSE_OBJECT *Source);
719
720 ACPI_PARSE_OBJECT *
721 TrCreateTargetOperand (
722 ACPI_PARSE_OBJECT *OriginalOp,
723 ACPI_PARSE_OBJECT *ParentOp);
724
725 ACPI_PARSE_OBJECT *
726 TrCreateValuedLeafNode (
727 UINT32 ParseOpcode,
728 UINT64 Value);
729
730 ACPI_PARSE_OBJECT *
731 TrCreateConstantLeafNode (
732 UINT32 ParseOpcode);
733
734 ACPI_PARSE_OBJECT *
735 TrLinkChildren (
736 ACPI_PARSE_OBJECT *Op,
737 UINT32 NumChildren,
738 ...);
739
740 void
741 TrSetEndLineNumber (
742 ACPI_PARSE_OBJECT *Op);
743
744 void
745 TrWalkTree (
746 void);
747
748 ACPI_PARSE_OBJECT *
749 TrLinkPeerNode (
750 ACPI_PARSE_OBJECT *Op1,
751 ACPI_PARSE_OBJECT *Op2);
752
753 ACPI_PARSE_OBJECT *
754 TrLinkChildNode (
755 ACPI_PARSE_OBJECT *Op1,
756 ACPI_PARSE_OBJECT *Op2);
757
758 ACPI_PARSE_OBJECT *
759 TrSetNodeFlags (
760 ACPI_PARSE_OBJECT *Op,
761 UINT32 Flags);
762
763 ACPI_PARSE_OBJECT *
764 TrSetNodeAmlLength (
765 ACPI_PARSE_OBJECT *Op,
766 UINT32 Length);
767
768 ACPI_PARSE_OBJECT *
769 TrLinkPeerNodes (
770 UINT32 NumPeers,
771 ...);
772
773
774 /*
775 * aslfiles - File I/O support
776 */
777 void
778 FlAddIncludeDirectory (
779 char *Dir);
780
781 char *
782 FlMergePathnames (
783 char *PrefixDir,
784 char *FilePathname);
785
786 void
787 FlOpenIncludeFile (
788 ACPI_PARSE_OBJECT *Op);
789
790 void
791 FlFileError (
792 UINT32 FileId,
793 UINT8 ErrorId);
794
795 UINT32
796 FlGetFileSize (
797 UINT32 FileId);
798
799 ACPI_STATUS
800 FlReadFile (
801 UINT32 FileId,
802 void *Buffer,
803 UINT32 Length);
804
805 void
806 FlWriteFile (
807 UINT32 FileId,
808 void *Buffer,
809 UINT32 Length);
810
811 void
812 FlSeekFile (
813 UINT32 FileId,
814 long Offset);
815
816 void
817 FlCloseFile (
818 UINT32 FileId);
819
820 void
821 FlPrintFile (
822 UINT32 FileId,
823 char *Format,
824 ...);
825
826 void
827 FlDeleteFile (
828 UINT32 FileId);
829
830 void
831 FlSetLineNumber (
832 UINT32 LineNumber);
833
834 void
835 FlSetFilename (
836 char *Filename);
837
838 ACPI_STATUS
839 FlOpenInputFile (
840 char *InputFilename);
841
842 ACPI_STATUS
843 FlOpenAmlOutputFile (
844 char *InputFilename);
845
846 ACPI_STATUS
847 FlOpenMiscOutputFiles (
848 char *InputFilename);
849
850 /*
851 * aslhwmap - hardware map summary
852 */
853 void
854 MpEmitMappingInfo (
855 void);
856
857
858 /*
859 * asload - load namespace in prep for cross reference
860 */
861 ACPI_STATUS
862 LdLoadNamespace (
863 ACPI_PARSE_OBJECT *RootOp);
864
865
866 /*
867 * asllookup - namespace lookup functions
868 */
869 void
870 LkFindUnreferencedObjects (
871 void);
872
873 /*
874 * aslmain - startup
875 */
876 void
877 Usage (
878 void);
879
880 void
881 AslFilenameHelp (
882 void);
883
884
885 /*
886 * aslnamesp - namespace output file generation
887 */
888 ACPI_STATUS
889 NsDisplayNamespace (
890 void);
891
892 void
893 NsSetupNamespaceListing (
894 void *Handle);
895
896 /*
897 * asloptions - command line processing
898 */
899 int
900 AslCommandLine (
901 int argc,
902 char **argv);
903
904 /*
905 * aslxref - namespace cross reference
906 */
907 ACPI_STATUS
908 XfCrossReferenceNamespace (
909 void);
910
911
912 /*
913 * aslutils - common compiler utilites
914 */
915 void
916 DbgPrint (
917 UINT32 Type,
918 char *Format,
919 ...);
920
921 /* Type values for above */
922
923 #define ASL_DEBUG_OUTPUT 0
924 #define ASL_PARSE_OUTPUT 1
925 #define ASL_TREE_OUTPUT 2
926
927 void
928 UtDisplaySupportedTables (
929 void);
930
931 void
932 UtDisplayConstantOpcodes (
933 void);
934
935 UINT8
936 UtBeginEvent (
937 char *Name);
938
939 void
940 UtEndEvent (
941 UINT8 Event);
942
943 void *
944 UtLocalCalloc (
945 UINT32 Size);
946
947 void
948 UtPrintFormattedName (
949 UINT16 ParseOpcode,
950 UINT32 Level);
951
952 void
953 UtDisplaySummary (
954 UINT32 FileId);
955
956 void
957 UtConvertByteToHex (
958 UINT8 RawByte,
959 UINT8 *Buffer);
960
961 void
962 UtConvertByteToAsmHex (
963 UINT8 RawByte,
964 UINT8 *Buffer);
965
966 char *
967 UtGetOpName (
968 UINT32 ParseOpcode);
969
970 void
971 UtSetParseOpName (
972 ACPI_PARSE_OBJECT *Op);
973
974 char *
975 UtStringCacheCalloc (
976 UINT32 Length);
977
978 void
979 UtExpandLineBuffers (
980 void);
981
982 void
983 UtFreeLineBuffers (
984 void);
985
986 ACPI_STATUS
987 UtInternalizeName (
988 char *ExternalName,
989 char **ConvertedName);
990
991 void
992 UtAttachNamepathToOwner (
993 ACPI_PARSE_OBJECT *Op,
994 ACPI_PARSE_OBJECT *NameNode);
995
996 ACPI_PARSE_OBJECT *
997 UtCheckIntegerRange (
998 ACPI_PARSE_OBJECT *Op,
999 UINT32 LowValue,
1000 UINT32 HighValue);
1001
1002 UINT64
1003 UtDoConstant (
1004 char *String);
1005
1006 ACPI_STATUS
1007 UtStrtoul64 (
1008 char *String,
1009 UINT32 Base,
1010 UINT64 *RetInteger);
1011
1012
1013 /*
1014 * asluuid - UUID support
1015 */
1016 ACPI_STATUS
1017 AuValidateUuid (
1018 char *InString);
1019
1020 ACPI_STATUS
1021 AuConvertUuidToString (
1022 char *UuIdBuffer,
1023 char *OutString);
1024
1025 /*
1026 * aslresource - Resource template generation utilities
1027 */
1028 void
1029 RsSmallAddressCheck (
1030 UINT8 Type,
1031 UINT32 Minimum,
1032 UINT32 Maximum,
1033 UINT32 Length,
1034 UINT32 Alignment,
1035 ACPI_PARSE_OBJECT *MinOp,
1036 ACPI_PARSE_OBJECT *MaxOp,
1037 ACPI_PARSE_OBJECT *LengthOp,
1038 ACPI_PARSE_OBJECT *AlignOp,
1039 ACPI_PARSE_OBJECT *Op);
1040
1041 void
1042 RsLargeAddressCheck (
1043 UINT64 Minimum,
1044 UINT64 Maximum,
1045 UINT64 Length,
1046 UINT64 Granularity,
1047 UINT8 Flags,
1048 ACPI_PARSE_OBJECT *MinOp,
1049 ACPI_PARSE_OBJECT *MaxOp,
1050 ACPI_PARSE_OBJECT *LengthOp,
1051 ACPI_PARSE_OBJECT *GranOp,
1052 ACPI_PARSE_OBJECT *Op);
1053
1054 UINT16
1055 RsGetStringDataLength (
1056 ACPI_PARSE_OBJECT *InitializerOp);
1057
1058 ASL_RESOURCE_NODE *
1059 RsAllocateResourceNode (
1060 UINT32 Size);
1061
1062 void
1063 RsCreateResourceField (
1064 ACPI_PARSE_OBJECT *Op,
1065 char *Name,
1066 UINT32 ByteOffset,
1067 UINT32 BitOffset,
1068 UINT32 BitLength);
1069
1070 void
1071 RsSetFlagBits (
1072 UINT8 *Flags,
1073 ACPI_PARSE_OBJECT *Op,
1074 UINT8 Position,
1075 UINT8 DefaultBit);
1076
1077 void
1078 RsSetFlagBits16 (
1079 UINT16 *Flags,
1080 ACPI_PARSE_OBJECT *Op,
1081 UINT8 Position,
1082 UINT8 DefaultBit);
1083
1084 ACPI_PARSE_OBJECT *
1085 RsCompleteNodeAndGetNext (
1086 ACPI_PARSE_OBJECT *Op);
1087
1088 void
1089 RsCheckListForDuplicates (
1090 ACPI_PARSE_OBJECT *Op);
1091
1092 ASL_RESOURCE_NODE *
1093 RsDoOneResourceDescriptor (
1094 ASL_RESOURCE_INFO *Info,
1095 UINT8 *State);
1096
1097 /* Values for State above */
1098
1099 #define ACPI_RSTATE_NORMAL 0
1100 #define ACPI_RSTATE_START_DEPENDENT 1
1101 #define ACPI_RSTATE_DEPENDENT_LIST 2
1102
1103 UINT32
1104 RsLinkDescriptorChain (
1105 ASL_RESOURCE_NODE **PreviousRnode,
1106 ASL_RESOURCE_NODE *Rnode);
1107
1108 void
1109 RsDoResourceTemplate (
1110 ACPI_PARSE_OBJECT *Op);
1111
1112
1113 /*
1114 * aslrestype1 - Miscellaneous Small descriptors
1115 */
1116 ASL_RESOURCE_NODE *
1117 RsDoEndTagDescriptor (
1118 ASL_RESOURCE_INFO *Info);
1119
1120 ASL_RESOURCE_NODE *
1121 RsDoEndDependentDescriptor (
1122 ASL_RESOURCE_INFO *Info);
1123
1124 ASL_RESOURCE_NODE *
1125 RsDoMemory24Descriptor (
1126 ASL_RESOURCE_INFO *Info);
1127
1128 ASL_RESOURCE_NODE *
1129 RsDoMemory32Descriptor (
1130 ASL_RESOURCE_INFO *Info);
1131
1132 ASL_RESOURCE_NODE *
1133 RsDoMemory32FixedDescriptor (
1134 ASL_RESOURCE_INFO *Info);
1135
1136 ASL_RESOURCE_NODE *
1137 RsDoStartDependentDescriptor (
1138 ASL_RESOURCE_INFO *Info);
1139
1140 ASL_RESOURCE_NODE *
1141 RsDoStartDependentNoPriDescriptor (
1142 ASL_RESOURCE_INFO *Info);
1143
1144 ASL_RESOURCE_NODE *
1145 RsDoVendorSmallDescriptor (
1146 ASL_RESOURCE_INFO *Info);
1147
1148
1149 /*
1150 * aslrestype1i - I/O-related Small descriptors
1151 */
1152 ASL_RESOURCE_NODE *
1153 RsDoDmaDescriptor (
1154 ASL_RESOURCE_INFO *Info);
1155
1156 ASL_RESOURCE_NODE *
1157 RsDoFixedDmaDescriptor (
1158 ASL_RESOURCE_INFO *Info);
1159
1160 ASL_RESOURCE_NODE *
1161 RsDoFixedIoDescriptor (
1162 ASL_RESOURCE_INFO *Info);
1163
1164 ASL_RESOURCE_NODE *
1165 RsDoIoDescriptor (
1166 ASL_RESOURCE_INFO *Info);
1167
1168 ASL_RESOURCE_NODE *
1169 RsDoIrqDescriptor (
1170 ASL_RESOURCE_INFO *Info);
1171
1172 ASL_RESOURCE_NODE *
1173 RsDoIrqNoFlagsDescriptor (
1174 ASL_RESOURCE_INFO *Info);
1175
1176
1177 /*
1178 * aslrestype2 - Large resource descriptors
1179 */
1180 ASL_RESOURCE_NODE *
1181 RsDoInterruptDescriptor (
1182 ASL_RESOURCE_INFO *Info);
1183
1184 ASL_RESOURCE_NODE *
1185 RsDoVendorLargeDescriptor (
1186 ASL_RESOURCE_INFO *Info);
1187
1188 ASL_RESOURCE_NODE *
1189 RsDoGeneralRegisterDescriptor (
1190 ASL_RESOURCE_INFO *Info);
1191
1192 ASL_RESOURCE_NODE *
1193 RsDoGpioIntDescriptor (
1194 ASL_RESOURCE_INFO *Info);
1195
1196 ASL_RESOURCE_NODE *
1197 RsDoGpioIoDescriptor (
1198 ASL_RESOURCE_INFO *Info);
1199
1200 ASL_RESOURCE_NODE *
1201 RsDoI2cSerialBusDescriptor (
1202 ASL_RESOURCE_INFO *Info);
1203
1204 ASL_RESOURCE_NODE *
1205 RsDoSpiSerialBusDescriptor (
1206 ASL_RESOURCE_INFO *Info);
1207
1208 ASL_RESOURCE_NODE *
1209 RsDoUartSerialBusDescriptor (
1210 ASL_RESOURCE_INFO *Info);
1211
1212 /*
1213 * aslrestype2d - DWord address descriptors
1214 */
1215 ASL_RESOURCE_NODE *
1216 RsDoDwordIoDescriptor (
1217 ASL_RESOURCE_INFO *Info);
1218
1219 ASL_RESOURCE_NODE *
1220 RsDoDwordMemoryDescriptor (
1221 ASL_RESOURCE_INFO *Info);
1222
1223 ASL_RESOURCE_NODE *
1224 RsDoDwordSpaceDescriptor (
1225 ASL_RESOURCE_INFO *Info);
1226
1227
1228 /*
1229 * aslrestype2e - Extended address descriptors
1230 */
1231 ASL_RESOURCE_NODE *
1232 RsDoExtendedIoDescriptor (
1233 ASL_RESOURCE_INFO *Info);
1234
1235 ASL_RESOURCE_NODE *
1236 RsDoExtendedMemoryDescriptor (
1237 ASL_RESOURCE_INFO *Info);
1238
1239 ASL_RESOURCE_NODE *
1240 RsDoExtendedSpaceDescriptor (
1241 ASL_RESOURCE_INFO *Info);
1242
1243
1244 /*
1245 * aslrestype2q - QWord address descriptors
1246 */
1247 ASL_RESOURCE_NODE *
1248 RsDoQwordIoDescriptor (
1249 ASL_RESOURCE_INFO *Info);
1250
1251 ASL_RESOURCE_NODE *
1252 RsDoQwordMemoryDescriptor (
1253 ASL_RESOURCE_INFO *Info);
1254
1255 ASL_RESOURCE_NODE *
1256 RsDoQwordSpaceDescriptor (
1257 ASL_RESOURCE_INFO *Info);
1258
1259
1260 /*
1261 * aslrestype2w - Word address descriptors
1262 */
1263 ASL_RESOURCE_NODE *
1264 RsDoWordIoDescriptor (
1265 ASL_RESOURCE_INFO *Info);
1266
1267 ASL_RESOURCE_NODE *
1268 RsDoWordSpaceDescriptor (
1269 ASL_RESOURCE_INFO *Info);
1270
1271 ASL_RESOURCE_NODE *
1272 RsDoWordBusNumberDescriptor (
1273 ASL_RESOURCE_INFO *Info);
1274
1275
1276 /*
1277 * Entry to data table compiler subsystem
1278 */
1279 ACPI_STATUS
1280 DtDoCompile(
1281 void);
1282
1283 ACPI_STATUS
1284 DtCreateTemplates (
1285 char *Signature);
1286
1287 #endif /* __ASLCOMPILER_H */
1288