11556Srgrimes/******************************************************************************
21556Srgrimes *
31556Srgrimes * Module Name: aslcompiler.h - common include file for iASL
41556Srgrimes *
51556Srgrimes *****************************************************************************/
61556Srgrimes
71556Srgrimes/*
81556Srgrimes * Copyright (C) 2000 - 2023, Intel Corp.
91556Srgrimes * All rights reserved.
101556Srgrimes *
111556Srgrimes * Redistribution and use in source and binary forms, with or without
121556Srgrimes * modification, are permitted provided that the following conditions
131556Srgrimes * are met:
141556Srgrimes * 1. Redistributions of source code must retain the above copyright
151556Srgrimes *    notice, this list of conditions, and the following disclaimer,
161556Srgrimes *    without modification.
171556Srgrimes * 2. Redistributions in binary form must reproduce at minimum a disclaimer
181556Srgrimes *    substantially similar to the "NO WARRANTY" disclaimer below
191556Srgrimes *    ("Disclaimer") and any redistribution must be conditioned upon
201556Srgrimes *    including a substantially similar Disclaimer requirement for further
211556Srgrimes *    binary redistribution.
221556Srgrimes * 3. Neither the names of the above-listed copyright holders nor the names
231556Srgrimes *    of any contributors may be used to endorse or promote products derived
241556Srgrimes *    from this software without specific prior written permission.
251556Srgrimes *
261556Srgrimes * Alternatively, this software may be distributed under the terms of the
271556Srgrimes * GNU General Public License ("GPL") version 2 as published by the Free
281556Srgrimes * Software Foundation.
291556Srgrimes *
301556Srgrimes * NO WARRANTY
311556Srgrimes * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
321556Srgrimes * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
331556Srgrimes * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
3436150Scharnier * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
3536150Scharnier * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
3636150Scharnier * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
371556Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3899110Sobrien * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
3999110Sobrien * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
401556Srgrimes * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
411556Srgrimes * POSSIBILITY OF SUCH DAMAGES.
421556Srgrimes */
431556Srgrimes
441556Srgrimes#ifndef __ASLCOMPILER_H
451556Srgrimes#define __ASLCOMPILER_H
461556Srgrimes
471556Srgrimes#include "acpi.h"
481556Srgrimes#include "accommon.h"
491556Srgrimes#include "amlresrc.h"
5053891Scracauer#include "acdebug.h"
5117987Speter
5238521Scracauer/* Microsoft-specific */
531556Srgrimes
5478732Sdd#if (defined WIN32 || defined WIN64)
5517987Speter
561556Srgrimes/* warn : used #pragma pack */
571556Srgrimes#pragma warning(disable:4103)
581556Srgrimes
591556Srgrimes/* warn : named type definition in parentheses */
601556Srgrimes#pragma warning(disable:4115)
611556Srgrimes#endif
621556Srgrimes
631556Srgrimes#include <stdio.h>
6438521Scracauer#include <stdlib.h>
6538530Scracauer#include <string.h>
6638521Scracauer#include <errno.h>
671556Srgrimes#include <ctype.h>
681556Srgrimes
691556Srgrimes/* Compiler headers */
70213811Sobrien
7120425Ssteve#include "asldefine.h"
721556Srgrimes#include "asltypes.h"
731556Srgrimes#include "aslmessages.h"
741556Srgrimes#include "aslglobal.h"
751556Srgrimes#include "preprocess.h"
76199660Sjilles#include "dtcompiler.h"
77199660Sjilles
78199660Sjilles
791556Srgrimes/*******************************************************************************
801556Srgrimes *
811556Srgrimes * Compiler prototypes
8290111Simp *
8317987Speter ******************************************************************************/
84199660Sjilles
851556Srgrimes/*
861556Srgrimes * Main ASL parser - generated from flex/bison, lex/yacc, etc.
871556Srgrimes */
881556SrgrimesACPI_PARSE_OBJECT *
891556SrgrimesAslDoError (
901556Srgrimes    void);
911556Srgrimes
921556Srgrimesint
93276038SjillesAslCompilerlex(
94276038Sjilles    void);
95276038Sjilles
96276038Sjillesvoid
97276038SjillesAslResetCurrentLineBuffer (
98276038Sjilles    void);
99276038Sjilles
100276038Sjillesvoid
1011556SrgrimesAslInsertLineBuffer (
1021556Srgrimes    int                     SourceChar);
1031556Srgrimes
10490111Simpint
10590111SimpAslPopInputFileStack (
106211281Sjilles    void);
10717987Speter
1081556Srgrimesvoid
109211281SjillesAslPushInputFileStack (
110211281Sjilles    FILE                    *InputFile,
11138521Scracauer    char                    *Filename);
11238536Scracauer
11338536Scracauervoid
11438536ScracauerAslParserCleanup (
11538521Scracauer    void);
116155301Sschweikh
11738521Scracauer
11838521Scracauer/*
1191556Srgrimes * aslstartup - entered from main()
1201556Srgrimes */
12138521Scracauervoid
12238521ScracauerAslInitializeGlobals (
12338521Scracauer    void);
124276038Sjilles
12538521Scracauertypedef
1261556SrgrimesACPI_STATUS (*ASL_PATHNAME_CALLBACK) (
1271556Srgrimes    char *);
1281556Srgrimes
129216622SjillesACPI_STATUS
130216622SjillesAslDoOneFile (
131216622Sjilles    char                    *Filename);
132216622Sjilles
133216622SjillesACPI_STATUS
134274899SjillesAslCheckForErrorExit (
135274899Sjilles    void);
136216622Sjilles
137216622Sjilles
138216622Sjilles/*
139216622Sjilles * aslcompile - compile mainline
140216622Sjilles */
141216622Sjillesvoid
142216622SjillesAslCompilerSignon (
143216622Sjilles    UINT32                  FileId);
144216622Sjilles
145216622Sjillesvoid
146216622SjillesAslCompilerFileHeader (
147216622Sjilles    UINT32                  FileId);
148216622Sjilles
149216622SjillesACPI_STATUS
150216622SjillesCmDoCompile (
1511556Srgrimes    void);
15220425Ssteve
1531556Srgrimesint
1541556SrgrimesCmDoAslMiddleAndBackEnd (
1551556Srgrimes    void);
156213811Sobrien
15790111Simpvoid
15820425SsteveCmDoOutputFiles (
159199660Sjilles    void);
160199660Sjilles
161199660Sjillesint
162199660SjillesCmCleanupAndExit (
163199660Sjilles    void);
164199660Sjilles
165199660SjillesACPI_STATUS
166199660SjillesAslDoDisassembly (
167199660Sjilles    void);
1681556Srgrimes
16920425Ssteve
17020425Ssteve/*
17120425Ssteve * aslallocate - memory allocation
17220425Ssteve */
17320425Sstevevoid *
17420425SsteveUtLocalCalloc (
175216622Sjilles    UINT32                  Size);
176216622Sjilles
17720425Sstevevoid
17820425SsteveUtExpandLineBuffers (
17920425Ssteve    void);
18020425Ssteve
18120425Sstevevoid
1821556SrgrimesUtReallocLineBuffers (
18375577Skris    char                    **Buffer,
18417987Speter    UINT32                  OldSize,
1851556Srgrimes    UINT32                  NewSize);
18620425Ssteve
18720425Sstevevoid
18820425SsteveUtFreeLineBuffers (
18920425Ssteve    void);
19017987Speter
19120425Ssteve
19220425Ssteve/*
19375577Skris * aslcache - local cache support
19420425Ssteve */
19520425Sstevechar *
1961556SrgrimesUtLocalCacheCalloc (
19720425Ssteve    UINT32                  Length);
1981556Srgrimes
1991556SrgrimesACPI_PARSE_OBJECT *
200UtParseOpCacheCalloc (
201    void);
202
203DT_SUBTABLE *
204UtSubtableCacheCalloc (
205    void);
206
207DT_FIELD *
208UtFieldCacheCalloc (
209    void);
210
211void
212UtDeleteLocalCaches (
213    void);
214
215
216/*
217 * aslascii - ascii support
218 */
219ACPI_STATUS
220FlIsFileAsciiSource (
221    char                    *Filename,
222    BOOLEAN                 DisplayErrors);
223
224
225/*
226 * aslwalks - semantic analysis and parse tree walks
227 */
228ACPI_STATUS
229AnOtherSemanticAnalysisWalkBegin (
230    ACPI_PARSE_OBJECT       *Op,
231    UINT32                  Level,
232    void                    *Context);
233
234ACPI_STATUS
235AnOtherSemanticAnalysisWalkEnd (
236    ACPI_PARSE_OBJECT       *Op,
237    UINT32                  Level,
238    void                    *Context);
239
240ACPI_STATUS
241AnOperandTypecheckWalkEnd (
242    ACPI_PARSE_OBJECT       *Op,
243    UINT32                  Level,
244    void                    *Context);
245
246ACPI_STATUS
247AnMethodTypingWalkEnd (
248    ACPI_PARSE_OBJECT       *Op,
249    UINT32                  Level,
250    void                    *Context);
251
252
253/*
254 * aslmethod - Control method analysis walk
255 */
256ACPI_STATUS
257MtMethodAnalysisWalkBegin (
258    ACPI_PARSE_OBJECT       *Op,
259    UINT32                  Level,
260    void                    *Context);
261
262ACPI_STATUS
263MtMethodAnalysisWalkEnd (
264    ACPI_PARSE_OBJECT       *Op,
265    UINT32                  Level,
266    void                    *Context);
267
268UINT32
269MtProcessTypeOp (
270    ACPI_PARSE_OBJECT       *TypeOp);
271
272UINT8
273MtProcessParameterTypeList (
274    ACPI_PARSE_OBJECT       *ParamTypeOp,
275    UINT32                  *TypeList);
276
277
278/*
279 * aslbtypes - bitfield data types
280 */
281UINT32
282AnMapObjTypeToBtype (
283    ACPI_PARSE_OBJECT       *Op);
284
285UINT32
286AnMapArgTypeToBtype (
287    UINT32                  ArgType);
288
289UINT32
290AnGetBtype (
291    ACPI_PARSE_OBJECT       *Op);
292
293void
294AnFormatBtype (
295    char                    *Buffer,
296    UINT32                  Btype);
297
298
299/*
300 * aslanalyze - Support functions for parse tree walks
301 */
302void
303AnCheckId (
304    ACPI_PARSE_OBJECT       *Op,
305    ACPI_NAME               Type);
306
307/* Values for Type argument above */
308
309#define ASL_TYPE_HID        0
310#define ASL_TYPE_CID        1
311
312BOOLEAN
313AnIsInternalMethod (
314    ACPI_PARSE_OBJECT       *Op);
315
316UINT32
317AnGetInternalMethodReturnType (
318    ACPI_PARSE_OBJECT       *Op);
319
320BOOLEAN
321AnLastStatementIsReturn (
322    ACPI_PARSE_OBJECT       *Op);
323
324void
325AnCheckMethodReturnValue (
326    ACPI_PARSE_OBJECT       *Op,
327    const ACPI_OPCODE_INFO  *OpInfo,
328    ACPI_PARSE_OBJECT       *ArgOp,
329    UINT32                  RequiredBtypes,
330    UINT32                  ThisNodeBtype);
331
332BOOLEAN
333AnIsResultUsed (
334    ACPI_PARSE_OBJECT       *Op);
335
336void
337ApCheckForGpeNameConflict (
338    ACPI_PARSE_OBJECT       *Op);
339
340void
341ApCheckRegMethod (
342    ACPI_PARSE_OBJECT       *Op);
343
344BOOLEAN
345ApFindNameInScope (
346    char                    *Name,
347    ACPI_PARSE_OBJECT       *Op);
348
349BOOLEAN
350ApFindNameInDeviceTree (
351    char                    *Name,
352    ACPI_PARSE_OBJECT       *Op);
353
354/*
355 * aslerror - error handling/reporting
356 */
357void
358AslAbort (
359    void);
360
361void
362AslDualParseOpError (
363    UINT8                   Level,
364    UINT16                  MainMessageId,
365    ACPI_PARSE_OBJECT       *MainOp,
366    char                    *MainMessage,
367    UINT16                  SecondMessageId,
368    ACPI_PARSE_OBJECT       *SecondOp,
369    char                    *SecondaryMessage);
370
371void
372AslError (
373    UINT8                   Level,
374    UINT16                  MessageId,
375    ACPI_PARSE_OBJECT       *Op,
376    char                    *ExtraMessage);
377
378void
379AslCheckExpectedExceptions (
380    void);
381
382ACPI_STATUS
383AslLogExpectedException (
384    char                    *MessageIdString);
385
386ACPI_STATUS
387AslElevateException (
388    char                    *MessageIdString);
389
390ACPI_STATUS
391AslDisableException (
392    char                    *MessageIdString);
393
394BOOLEAN
395AslIsExceptionIgnored (
396    char                    *Filename,
397    UINT32                  LineNumber,
398    UINT8                   Level,
399    UINT16                  MessageId);
400
401void
402AslLogExpectedExceptionByLine (
403    char                    *MessageIdString);
404
405void
406AslCoreSubsystemError (
407    ACPI_PARSE_OBJECT       *Op,
408    ACPI_STATUS             Status,
409    char                    *ExtraMessage,
410    BOOLEAN                 Abort);
411
412int
413AslCompilererror(
414    const char              *s);
415
416void
417AslCommonError (
418    UINT8                   Level,
419    UINT16                  MessageId,
420    UINT32                  CurrentLineNumber,
421    UINT32                  LogicalLineNumber,
422    UINT32                  LogicalByteOffset,
423    UINT32                  Column,
424    char                    *Filename,
425    char                    *ExtraMessage);
426
427void
428AslCommonError2 (
429    UINT8                   Level,
430    UINT16                  MessageId,
431    UINT32                  LineNumber,
432    UINT32                  Column,
433    char                    *SourceLine,
434    char                    *Filename,
435    char                    *ExtraMessage);
436
437void
438AePrintException (
439    UINT32                  FileId,
440    ASL_ERROR_MSG           *Enode,
441    char                    *Header);
442
443void
444AePrintErrorLog (
445    UINT32                  FileId);
446
447void
448AeClearErrorLog (
449    void);
450
451
452/*
453 * asllisting - generate all "listing" type files
454 */
455void
456LsDoListings (
457    void);
458
459void
460LsWriteNodeToAsmListing (
461    ACPI_PARSE_OBJECT       *Op);
462
463void
464LsWriteNode (
465    ACPI_PARSE_OBJECT       *Op,
466    UINT32                  FileId);
467
468void
469LsDumpParseTree (
470    void);
471
472
473/*
474 * asllistsup - Listing file support utilities
475 */
476void
477LsDumpAscii (
478    UINT32                  FileId,
479    UINT32                  Count,
480    UINT8                   *Buffer);
481
482void
483LsDumpAsciiInComment (
484    UINT32                  FileId,
485    UINT32                  Count,
486    UINT8                   *Buffer);
487
488void
489LsCheckException (
490    UINT32                  LineNumber,
491    UINT32                  FileId);
492
493void
494LsFlushListingBuffer (
495    UINT32                  FileId);
496
497void
498LsWriteListingHexBytes (
499    UINT8                   *Buffer,
500    UINT32                  Length,
501    UINT32                  FileId);
502
503void
504LsWriteSourceLines (
505    UINT32                  ToLineNumber,
506    UINT32                  ToLogicalLineNumber,
507    UINT32                  FileId);
508
509UINT32
510LsWriteOneSourceLine (
511    UINT32                  FileId);
512
513void
514LsPushNode (
515    char                    *Filename);
516
517ASL_LISTING_NODE *
518LsPopNode (
519    void);
520
521
522/*
523 * aslhex - generate all "hex" output files (C, ASM, ASL)
524 */
525void
526HxDoHexOutput (
527    void);
528
529
530/*
531 * aslfold - constant folding
532 */
533ACPI_STATUS
534OpcAmlConstantWalk (
535    ACPI_PARSE_OBJECT       *Op,
536    UINT32                  Level,
537    void                    *Context);
538
539
540/*
541 * aslmessages - exception strings
542 */
543const char *
544AeDecodeMessageId (
545    UINT16                  MessageId);
546
547const char *
548AeDecodeExceptionLevel (
549    UINT8                   Level);
550
551UINT16
552AeBuildFullExceptionCode (
553    UINT8                   Level,
554    UINT16                  MessageId);
555
556/*
557 * asloffset - generate C offset file for BIOS support
558 */
559ACPI_STATUS
560LsAmlOffsetWalk (
561    ACPI_PARSE_OBJECT       *Op,
562    UINT32                  Level,
563    void                    *Context);
564
565void
566LsDoOffsetTableHeader (
567    UINT32                  FileId);
568
569void
570LsDoOffsetTableFooter (
571    UINT32                  FileId);
572
573
574/*
575 * aslopcodes - generate AML opcodes
576 */
577ACPI_STATUS
578OpcAmlOpcodeWalk (
579    ACPI_PARSE_OBJECT       *Op,
580    UINT32                  Level,
581    void                    *Context);
582
583ACPI_STATUS
584OpcAmlOpcodeUpdateWalk (
585    ACPI_PARSE_OBJECT       *Op,
586    UINT32                  Level,
587    void                    *Context);
588
589void
590OpcGenerateAmlOpcode (
591    ACPI_PARSE_OBJECT       *Op);
592
593UINT32
594OpcSetOptimalIntegerSize (
595    ACPI_PARSE_OBJECT       *Op);
596
597void
598OpcGetIntegerWidth (
599    ACPI_PARSE_OBJECT       *Op);
600
601
602/*
603 * asloperands - generate AML operands for the AML opcodes
604 */
605ACPI_PARSE_OBJECT  *
606UtGetArg (
607    ACPI_PARSE_OBJECT       *Op,
608    UINT32                  Argn);
609
610void
611OpnGenerateAmlOperands (
612    ACPI_PARSE_OBJECT       *Op);
613
614void
615OpnDoPackage (
616    ACPI_PARSE_OBJECT       *Op);
617
618
619/*
620 * aslopt - optimization
621 */
622void
623OptOptimizeNamePath (
624    ACPI_PARSE_OBJECT       *Op,
625    UINT32                  Flags,
626    ACPI_WALK_STATE         *WalkState,
627    char                    *AmlNameString,
628    ACPI_NAMESPACE_NODE     *TargetNode);
629
630
631/*
632 * aslpld - ToPLD macro support
633 */
634void
635OpcDoPld (
636    ACPI_PARSE_OBJECT       *Op);
637
638
639/*
640 * aslprintf - Printf/Fprintf macros
641 */
642void
643OpcDoPrintf (
644    ACPI_PARSE_OBJECT       *Op);
645
646void
647OpcDoFprintf (
648    ACPI_PARSE_OBJECT       *Op);
649
650
651/*
652 * aslprune - parse tree pruner
653 */
654void
655AslPruneParseTree (
656    UINT32                  PruneDepth,
657    UINT32                  Type);
658
659
660/*
661 * aslcodegen - code generation
662 */
663void
664CgGenerateAmlOutput (
665    void);
666
667void
668CgLocalWriteAmlData (
669    ACPI_PARSE_OBJECT       *Op,
670    void                    *Buffer,
671    UINT32                  Length);
672
673
674/*
675 * aslfile
676 */
677void
678FlOpenFile (
679    UINT32                  FileId,
680    char                    *Filename,
681    char                    *Mode);
682
683
684/*
685 * asllength - calculate/adjust AML package lengths
686 */
687ACPI_STATUS
688LnPackageLengthWalk (
689    ACPI_PARSE_OBJECT       *Op,
690    UINT32                  Level,
691    void                    *Context);
692
693ACPI_STATUS
694LnInitLengthsWalk (
695    ACPI_PARSE_OBJECT       *Op,
696    UINT32                  Level,
697    void                    *Context);
698
699void
700CgGenerateAmlLengths (
701    ACPI_PARSE_OBJECT       *Op);
702
703
704/*
705 * aslmap - opcode mappings and reserved method names
706 */
707ACPI_OBJECT_TYPE
708AslMapNamedOpcodeToDataType (
709    UINT16                  Opcode);
710
711
712/*
713 * aslpredef - ACPI predefined names support
714 */
715BOOLEAN
716ApCheckForPredefinedMethod (
717    ACPI_PARSE_OBJECT       *Op,
718    ASL_METHOD_INFO         *MethodInfo);
719
720void
721ApCheckPredefinedReturnValue (
722    ACPI_PARSE_OBJECT       *Op,
723    ASL_METHOD_INFO         *MethodInfo);
724
725UINT32
726ApCheckForPredefinedName (
727    ACPI_PARSE_OBJECT       *Op,
728    char                    *Name);
729
730void
731ApCheckForPredefinedObject (
732    ACPI_PARSE_OBJECT       *Op,
733    char                    *Name);
734
735ACPI_STATUS
736ApCheckObjectType (
737    const char              *PredefinedName,
738    ACPI_PARSE_OBJECT       *Op,
739    UINT32                  ExpectedBtypes,
740    UINT32                  PackageIndex);
741
742void
743ApDisplayReservedNames (
744    void);
745
746
747/*
748 * aslprepkg - ACPI predefined names support for packages
749 */
750void
751ApCheckPackage (
752    ACPI_PARSE_OBJECT           *ParentOp,
753    const ACPI_PREDEFINED_INFO  *Predefined);
754
755
756/*
757 * asltransform - parse tree transformations
758 */
759ACPI_STATUS
760TrAmlTransformWalkBegin (
761    ACPI_PARSE_OBJECT       *Op,
762    UINT32                  Level,
763    void                    *Context);
764
765ACPI_STATUS
766TrAmlTransformWalkEnd (
767    ACPI_PARSE_OBJECT       *Op,
768    UINT32                  Level,
769    void                    *Context);
770
771
772/*
773 * aslexternal - External opcode support
774 */
775ACPI_STATUS
776ExAmlExternalWalkBegin (
777    ACPI_PARSE_OBJECT       *Op,
778    UINT32                  Level,
779    void                    *Context);
780
781ACPI_STATUS
782ExAmlExternalWalkEnd (
783    ACPI_PARSE_OBJECT       *Op,
784    UINT32                  Level,
785    void                    *Context);
786
787void
788ExDoExternal (
789    ACPI_PARSE_OBJECT       *Op);
790
791/* Values for "Visitation" parameter above */
792
793#define ASL_WALK_VISIT_DOWNWARD         0x01
794#define ASL_WALK_VISIT_UPWARD           0x02
795#define ASL_WALK_VISIT_DB_SEPARATELY    0x04
796#define ASL_WALK_VISIT_TWICE            (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
797
798
799/*
800 * aslparseop.c - Parse op create/allocate/cache
801 */
802ACPI_PARSE_OBJECT *
803TrCreateOp (
804    UINT32                  ParseOpcode,
805    UINT32                  NumChildren,
806    ...);
807
808ACPI_PARSE_OBJECT *
809TrCreateLeafOp (
810    UINT32                  ParseOpcode);
811
812ACPI_PARSE_OBJECT *
813TrCreateNullTargetOp (
814    void);
815
816ACPI_PARSE_OBJECT *
817TrCreateAssignmentOp (
818    ACPI_PARSE_OBJECT       *Target,
819    ACPI_PARSE_OBJECT       *Source);
820
821ACPI_PARSE_OBJECT *
822TrCreateTargetOp (
823    ACPI_PARSE_OBJECT       *OriginalOp,
824    ACPI_PARSE_OBJECT       *ParentOp);
825
826ACPI_PARSE_OBJECT *
827TrCreateValuedLeafOp (
828    UINT32                  ParseOpcode,
829    UINT64                  Value);
830
831ACPI_PARSE_OBJECT *
832TrCreateConstantLeafOp (
833    UINT32                  ParseOpcode);
834
835ACPI_PARSE_OBJECT *
836TrAllocateOp (
837    UINT32                  ParseOpcode);
838
839void
840TrPrintOpFlags (
841    UINT32                  Flags,
842    UINT32                  OutputLevel);
843
844
845/*
846 * asltree.c - Parse tree management
847 */
848void
849TrSetOpParent (
850    ACPI_PARSE_OBJECT       *Op,
851    ACPI_PARSE_OBJECT       *ParentOp);
852
853ACPI_PARSE_OBJECT *
854TrSetOpIntegerValue (
855    UINT32                  ParseOpcode,
856    ACPI_PARSE_OBJECT       *Op);
857
858void
859TrSetOpEndLineNumber (
860    ACPI_PARSE_OBJECT       *Op);
861
862void
863TrSetOpCurrentFilename (
864    ACPI_PARSE_OBJECT       *Op);
865
866void
867TrSetOpIntegerWidth (
868    ACPI_PARSE_OBJECT       *TableSignature,
869    ACPI_PARSE_OBJECT       *Revision);
870
871ACPI_PARSE_OBJECT *
872TrLinkOpChildren (
873    ACPI_PARSE_OBJECT       *Op,
874    UINT32                  NumChildren,
875    ...);
876
877ACPI_PARSE_OBJECT *
878TrLinkPeerOp (
879    ACPI_PARSE_OBJECT       *Op1,
880    ACPI_PARSE_OBJECT       *Op2);
881
882ACPI_PARSE_OBJECT *
883TrLinkChildOp (
884    ACPI_PARSE_OBJECT       *Op1,
885    ACPI_PARSE_OBJECT       *Op2);
886
887ACPI_PARSE_OBJECT *
888TrSetOpFlags (
889    ACPI_PARSE_OBJECT       *Op,
890    UINT32                  Flags);
891
892ACPI_PARSE_OBJECT *
893TrSetOpAmlLength (
894    ACPI_PARSE_OBJECT       *Op,
895    UINT32                  Length);
896
897ACPI_PARSE_OBJECT *
898TrLinkPeerOps (
899    UINT32                  NumPeers,
900    ...);
901
902ACPI_STATUS
903TrWalkParseTree (
904    ACPI_PARSE_OBJECT       *Op,
905    UINT32                  Visitation,
906    ASL_WALK_CALLBACK       DescendingCallback,
907    ASL_WALK_CALLBACK       AscendingCallback,
908    void                    *Context);
909
910
911/*
912 * aslfiles - File I/O support
913 */
914void
915FlAddIncludeDirectory (
916    char                    *Dir);
917
918char *
919FlMergePathnames (
920    char                    *PrefixDir,
921    char                    *FilePathname);
922
923void
924FlOpenIncludeFile (
925    ACPI_PARSE_OBJECT       *Op);
926
927void
928FlFileError (
929    UINT32                  FileId,
930    UINT8                   ErrorId);
931
932UINT32
933FlGetFileSize (
934    UINT32                  FileId);
935
936ACPI_STATUS
937FlReadFile (
938    UINT32                  FileId,
939    void                    *Buffer,
940    UINT32                  Length);
941
942void
943FlWriteFile (
944    UINT32                  FileId,
945    void                    *Buffer,
946    UINT32                  Length);
947
948void
949FlSeekFile (
950    UINT32                  FileId,
951    long                    Offset);
952
953void
954FlSeekFileSet (
955    UINT32                  FileId,
956    long                    Offset);
957
958void
959FlCloseFile (
960    UINT32                  FileId);
961
962ACPI_PRINTF_LIKE (2)
963void
964FlPrintFile (
965    UINT32                  FileId,
966    char                    *Format,
967    ...);
968
969void
970FlDeleteFile (
971    UINT32                  FileId);
972
973void
974FlSetLineNumber (
975    UINT32                  LineNumber);
976
977void
978FlSetFilename (
979    char                    *Filename);
980
981ACPI_STATUS
982FlOpenInputFile (
983    char                    *InputFilename);
984
985ACPI_STATUS
986FlOpenAmlOutputFile (
987    char                    *InputFilename);
988
989ACPI_STATUS
990FlOpenMiscOutputFiles (
991    char                    *InputFilename);
992
993ACPI_STATUS
994FlInitOneFile (
995    char                    *InputFilename);
996
997ASL_FILE_SWITCH_STATUS
998FlSwitchFileSet (
999    char                    *InputFilename);
1000
1001FILE *
1002FlGetFileHandle (
1003    UINT32                  OutFileId,
1004    UINT32                  InFileId,
1005    char                    *Filename);
1006
1007ASL_GLOBAL_FILE_NODE *
1008FlGetFileNode (
1009    UINT32                  FileId,
1010    char                    *Filename);
1011
1012ASL_GLOBAL_FILE_NODE *
1013FlGetCurrentFileNode (
1014    void);
1015
1016
1017/*
1018 * aslhwmap - hardware map summary
1019 */
1020void
1021MpEmitMappingInfo (
1022    void);
1023
1024
1025/*
1026 * asload - load namespace in prep for cross reference
1027 */
1028ACPI_STATUS
1029LdLoadNamespace (
1030    ACPI_PARSE_OBJECT       *RootOp);
1031
1032/*
1033 * asllookup - namespace lookup functions
1034 */
1035void
1036LkFindUnreferencedObjects (
1037    void);
1038
1039
1040/*
1041 * aslhelp - help screens
1042 */
1043void
1044Usage (
1045    void);
1046
1047void
1048AslFilenameHelp (
1049    void);
1050
1051void
1052AslDisassemblyHelp (
1053    void);
1054
1055
1056/*
1057 * aslnamesp - namespace output file generation
1058 */
1059ACPI_STATUS
1060NsDisplayNamespace (
1061    void);
1062
1063void
1064NsSetupNamespaceListing (
1065    void                    *Handle);
1066
1067
1068/*
1069 * asloptions - command line processing
1070 */
1071int
1072AslCommandLine (
1073    int                     argc,
1074    char                    **argv);
1075
1076
1077/*
1078 * aslxref - namespace cross reference
1079 */
1080ACPI_STATUS
1081XfCrossReferenceNamespace (
1082    void);
1083
1084
1085/*
1086 * aslxrefout
1087 */
1088void
1089OtPrintHeaders (
1090    char                    *Message);
1091
1092void
1093OtCreateXrefFile (
1094    void);
1095
1096void
1097OtXrefWalkPart1 (
1098    ACPI_PARSE_OBJECT       *Op,
1099    UINT32                  Level,
1100    ASL_METHOD_INFO         *MethodInfo);
1101
1102
1103/*
1104 * aslutils - common compiler utilities
1105 */
1106ACPI_PRINTF_LIKE(2)
1107void
1108DbgPrint (
1109    UINT32                  Type,
1110    char                    *Format,
1111    ...);
1112
1113/* Type values for above */
1114
1115#define ASL_DEBUG_OUTPUT    0
1116#define ASL_PARSE_OUTPUT    1
1117#define ASL_TREE_OUTPUT     2
1118
1119BOOLEAN
1120UtIsIdInteger (
1121    UINT8                   *Target);
1122
1123UINT8
1124UtIsBigEndianMachine (
1125    void);
1126
1127BOOLEAN
1128UtQueryForOverwrite (
1129    char                    *Pathname);
1130
1131void
1132UtDumpStringOp (
1133    ACPI_PARSE_OBJECT       *Op,
1134    UINT32                  Level);
1135
1136void
1137UtDumpIntegerOp (
1138    ACPI_PARSE_OBJECT       *Op,
1139    UINT32                  Level,
1140    UINT32                  IntegerLength);
1141
1142void
1143UtDumpBasicOp (
1144    ACPI_PARSE_OBJECT       *Op,
1145    UINT32                  Level);
1146
1147ACPI_NAMESPACE_NODE *
1148UtGetParentMethodNode (
1149    ACPI_NAMESPACE_NODE     *Node);
1150
1151ACPI_PARSE_OBJECT *
1152UtGetParentMethodOp (
1153    ACPI_PARSE_OBJECT       *Op);
1154
1155BOOLEAN
1156UtNodeIsDescendantOf (
1157    ACPI_NAMESPACE_NODE     *Node1,
1158    ACPI_NAMESPACE_NODE     *Node2);
1159
1160void
1161UtDisplaySupportedTables (
1162    void);
1163
1164void
1165UtDisplayConstantOpcodes (
1166    void);
1167
1168UINT8
1169UtBeginEvent (
1170    char                    *Name);
1171
1172void
1173UtEndEvent (
1174    UINT8                   Event);
1175
1176void
1177UtDisplaySummary (
1178    UINT32                  FileId);
1179
1180void
1181UtDisplayOneSummary (
1182    UINT32                  FileId,
1183    BOOLEAN                 DisplayErrorSummary);
1184
1185void
1186UtConvertByteToHex (
1187    UINT8                   RawByte,
1188    UINT8                   *Buffer);
1189
1190void
1191UtConvertByteToAsmHex (
1192    UINT8                   RawByte,
1193    UINT8                   *Buffer);
1194
1195char *
1196UtGetOpName (
1197    UINT32                  ParseOpcode);
1198
1199void
1200UtSetParseOpName (
1201    ACPI_PARSE_OBJECT       *Op);
1202
1203ACPI_STATUS
1204UtInternalizeName (
1205    char                    *ExternalName,
1206    char                    **ConvertedName);
1207
1208BOOLEAN
1209UtNameContainsAllPrefix (
1210    ACPI_PARSE_OBJECT       *Op);
1211
1212void
1213UtAttachNamepathToOwner (
1214    ACPI_PARSE_OBJECT       *Op,
1215    ACPI_PARSE_OBJECT       *NameNode);
1216
1217ACPI_PARSE_OBJECT *
1218UtCheckIntegerRange (
1219    ACPI_PARSE_OBJECT       *Op,
1220    UINT32                  LowValue,
1221    UINT32                  HighValue);
1222
1223UINT64
1224UtDoConstant (
1225    char                    *String);
1226
1227char *
1228AcpiUtStrdup (
1229    char                    *String);
1230
1231char *
1232AcpiUtStrcat (
1233    char                    *String1,
1234    char                    *String2);
1235
1236
1237/*
1238 * asluuid - UUID support
1239 */
1240ACPI_STATUS
1241AuValidateUuid (
1242    char                    *InString);
1243
1244ACPI_STATUS
1245AuConvertUuidToString (
1246    char                    *UuIdBuffer,
1247    char                    *OutString);
1248
1249
1250/*
1251 * aslresource - Resource template generation utilities
1252 */
1253void
1254RsSmallAddressCheck (
1255    UINT8                   Type,
1256    UINT32                  Minimum,
1257    UINT32                  Maximum,
1258    UINT32                  Length,
1259    UINT32                  Alignment,
1260    ACPI_PARSE_OBJECT       *MinOp,
1261    ACPI_PARSE_OBJECT       *MaxOp,
1262    ACPI_PARSE_OBJECT       *LengthOp,
1263    ACPI_PARSE_OBJECT       *AlignOp,
1264    ACPI_PARSE_OBJECT       *Op);
1265
1266void
1267RsLargeAddressCheck (
1268    UINT64                  Minimum,
1269    UINT64                  Maximum,
1270    UINT64                  Length,
1271    UINT64                  Granularity,
1272    UINT8                   Flags,
1273    ACPI_PARSE_OBJECT       *MinOp,
1274    ACPI_PARSE_OBJECT       *MaxOp,
1275    ACPI_PARSE_OBJECT       *LengthOp,
1276    ACPI_PARSE_OBJECT       *GranOp,
1277    ACPI_PARSE_OBJECT       *Op);
1278
1279UINT16
1280RsGetStringDataLength (
1281    ACPI_PARSE_OBJECT       *InitializerOp);
1282
1283ASL_RESOURCE_NODE *
1284RsAllocateResourceNode (
1285    UINT32                  Size);
1286
1287void
1288RsCreateResourceField (
1289    ACPI_PARSE_OBJECT       *Op,
1290    char                    *Name,
1291    UINT32                  ByteOffset,
1292    UINT32                  BitOffset,
1293    UINT32                  BitLength);
1294
1295void
1296RsSetFlagBits (
1297    UINT8                   *Flags,
1298    ACPI_PARSE_OBJECT       *Op,
1299    UINT8                   Position,
1300    UINT8                   DefaultBit);
1301
1302void
1303RsSetFlagBits16 (
1304    UINT16                  *Flags,
1305    ACPI_PARSE_OBJECT       *Op,
1306    UINT8                   Position,
1307    UINT8                   DefaultBit);
1308
1309ACPI_PARSE_OBJECT *
1310RsCompleteNodeAndGetNext (
1311    ACPI_PARSE_OBJECT       *Op);
1312
1313void
1314RsCheckListForDuplicates (
1315    ACPI_PARSE_OBJECT       *Op);
1316
1317ASL_RESOURCE_NODE *
1318RsDoOneResourceDescriptor (
1319    ASL_RESOURCE_INFO       *Info,
1320    UINT8                   *State);
1321
1322/* Values for State above */
1323
1324#define ACPI_RSTATE_NORMAL              0
1325#define ACPI_RSTATE_START_DEPENDENT     1
1326#define ACPI_RSTATE_DEPENDENT_LIST      2
1327
1328UINT32
1329RsLinkDescriptorChain (
1330    ASL_RESOURCE_NODE       **PreviousRnode,
1331    ASL_RESOURCE_NODE       *Rnode);
1332
1333void
1334RsDoResourceTemplate (
1335    ACPI_PARSE_OBJECT       *Op);
1336
1337
1338/*
1339 * aslrestype1 - Miscellaneous Small descriptors
1340 */
1341ASL_RESOURCE_NODE *
1342RsDoEndTagDescriptor (
1343    ASL_RESOURCE_INFO       *Info);
1344
1345ASL_RESOURCE_NODE *
1346RsDoEndDependentDescriptor (
1347    ASL_RESOURCE_INFO       *Info);
1348
1349ASL_RESOURCE_NODE *
1350RsDoMemory24Descriptor (
1351    ASL_RESOURCE_INFO       *Info);
1352
1353ASL_RESOURCE_NODE *
1354RsDoMemory32Descriptor (
1355    ASL_RESOURCE_INFO       *Info);
1356
1357ASL_RESOURCE_NODE *
1358RsDoMemory32FixedDescriptor (
1359    ASL_RESOURCE_INFO       *Info);
1360
1361ASL_RESOURCE_NODE *
1362RsDoStartDependentDescriptor (
1363    ASL_RESOURCE_INFO       *Info);
1364
1365ASL_RESOURCE_NODE *
1366RsDoStartDependentNoPriDescriptor (
1367    ASL_RESOURCE_INFO       *Info);
1368
1369ASL_RESOURCE_NODE *
1370RsDoVendorSmallDescriptor (
1371    ASL_RESOURCE_INFO       *Info);
1372
1373
1374/*
1375 * aslrestype1i - I/O-related Small descriptors
1376 */
1377ASL_RESOURCE_NODE *
1378RsDoDmaDescriptor (
1379    ASL_RESOURCE_INFO       *Info);
1380
1381ASL_RESOURCE_NODE *
1382RsDoFixedDmaDescriptor (
1383    ASL_RESOURCE_INFO       *Info);
1384
1385ASL_RESOURCE_NODE *
1386RsDoFixedIoDescriptor (
1387    ASL_RESOURCE_INFO       *Info);
1388
1389ASL_RESOURCE_NODE *
1390RsDoIoDescriptor (
1391    ASL_RESOURCE_INFO       *Info);
1392
1393ASL_RESOURCE_NODE *
1394RsDoIrqDescriptor (
1395    ASL_RESOURCE_INFO       *Info);
1396
1397ASL_RESOURCE_NODE *
1398RsDoIrqNoFlagsDescriptor (
1399    ASL_RESOURCE_INFO       *Info);
1400
1401
1402/*
1403 * aslrestype2 - Large resource descriptors
1404 */
1405ASL_RESOURCE_NODE *
1406RsDoInterruptDescriptor (
1407    ASL_RESOURCE_INFO       *Info);
1408
1409ASL_RESOURCE_NODE *
1410RsDoVendorLargeDescriptor (
1411    ASL_RESOURCE_INFO       *Info);
1412
1413ASL_RESOURCE_NODE *
1414RsDoGeneralRegisterDescriptor (
1415    ASL_RESOURCE_INFO       *Info);
1416
1417ASL_RESOURCE_NODE *
1418RsDoGpioIntDescriptor (
1419    ASL_RESOURCE_INFO       *Info);
1420
1421ASL_RESOURCE_NODE *
1422RsDoGpioIoDescriptor (
1423    ASL_RESOURCE_INFO       *Info);
1424
1425ASL_RESOURCE_NODE *
1426RsDoI2cSerialBusDescriptor (
1427    ASL_RESOURCE_INFO       *Info);
1428
1429ASL_RESOURCE_NODE *
1430RsDoSpiSerialBusDescriptor (
1431    ASL_RESOURCE_INFO       *Info);
1432
1433ASL_RESOURCE_NODE *
1434RsDoUartSerialBusDescriptor (
1435    ASL_RESOURCE_INFO       *Info);
1436
1437ASL_RESOURCE_NODE *
1438RsDoCsi2SerialBusDescriptor (
1439    ASL_RESOURCE_INFO       *Info);
1440
1441ASL_RESOURCE_NODE *
1442RsDoPinFunctionDescriptor (
1443    ASL_RESOURCE_INFO       *Info);
1444
1445ASL_RESOURCE_NODE *
1446RsDoPinConfigDescriptor (
1447    ASL_RESOURCE_INFO       *Info);
1448
1449ASL_RESOURCE_NODE *
1450RsDoPinGroupDescriptor (
1451    ASL_RESOURCE_INFO       *Info);
1452
1453ASL_RESOURCE_NODE *
1454RsDoPinGroupFunctionDescriptor (
1455    ASL_RESOURCE_INFO       *Info);
1456
1457ASL_RESOURCE_NODE *
1458RsDoPinGroupConfigDescriptor (
1459    ASL_RESOURCE_INFO       *Info);
1460
1461ASL_RESOURCE_NODE *
1462RsDoClockInputDescriptor (
1463    ASL_RESOURCE_INFO       *Info);
1464
1465/*
1466 * aslrestype2d - DWord address descriptors
1467 */
1468ASL_RESOURCE_NODE *
1469RsDoDwordIoDescriptor (
1470    ASL_RESOURCE_INFO       *Info);
1471
1472ASL_RESOURCE_NODE *
1473RsDoDwordMemoryDescriptor (
1474    ASL_RESOURCE_INFO       *Info);
1475
1476ASL_RESOURCE_NODE *
1477RsDoDwordSpaceDescriptor (
1478    ASL_RESOURCE_INFO       *Info);
1479
1480
1481/*
1482 * aslrestype2e - Extended address descriptors
1483 */
1484ASL_RESOURCE_NODE *
1485RsDoExtendedIoDescriptor (
1486    ASL_RESOURCE_INFO       *Info);
1487
1488ASL_RESOURCE_NODE *
1489RsDoExtendedMemoryDescriptor (
1490    ASL_RESOURCE_INFO       *Info);
1491
1492ASL_RESOURCE_NODE *
1493RsDoExtendedSpaceDescriptor (
1494    ASL_RESOURCE_INFO       *Info);
1495
1496
1497/*
1498 * aslrestype2q - QWord address descriptors
1499 */
1500ASL_RESOURCE_NODE *
1501RsDoQwordIoDescriptor (
1502    ASL_RESOURCE_INFO       *Info);
1503
1504ASL_RESOURCE_NODE *
1505RsDoQwordMemoryDescriptor (
1506    ASL_RESOURCE_INFO       *Info);
1507
1508ASL_RESOURCE_NODE *
1509RsDoQwordSpaceDescriptor (
1510    ASL_RESOURCE_INFO       *Info);
1511
1512
1513/*
1514 * aslrestype2w - Word address descriptors
1515 */
1516ASL_RESOURCE_NODE *
1517RsDoWordIoDescriptor (
1518    ASL_RESOURCE_INFO       *Info);
1519
1520ASL_RESOURCE_NODE *
1521RsDoWordSpaceDescriptor (
1522    ASL_RESOURCE_INFO       *Info);
1523
1524ASL_RESOURCE_NODE *
1525RsDoWordBusNumberDescriptor (
1526    ASL_RESOURCE_INFO       *Info);
1527
1528
1529/*
1530 * Entry to data table compiler subsystem
1531 */
1532ACPI_STATUS
1533DtDoCompile(
1534    void);
1535
1536ACPI_STATUS
1537DtCreateTemplates (
1538    char                    **argv);
1539
1540
1541/*
1542 * ASL/ASL+ converter debug
1543 */
1544ACPI_PRINTF_LIKE (1)
1545void
1546CvDbgPrint (
1547    char                    *Fmt,
1548    ...);
1549
1550
1551#endif /*  __ASLCOMPILER_H */
1552