1118611Snjl
2118611Snjl/******************************************************************************
3118611Snjl *
4151937Sjkim * Module Name: aslcompiler.h - common include file for iASL
5118611Snjl *
6118611Snjl *****************************************************************************/
7118611Snjl
8217365Sjkim/*
9217365Sjkim * Copyright (C) 2000 - 2011, Intel Corp.
10118611Snjl * All rights reserved.
11118611Snjl *
12217365Sjkim * Redistribution and use in source and binary forms, with or without
13217365Sjkim * modification, are permitted provided that the following conditions
14217365Sjkim * are met:
15217365Sjkim * 1. Redistributions of source code must retain the above copyright
16217365Sjkim *    notice, this list of conditions, and the following disclaimer,
17217365Sjkim *    without modification.
18217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19217365Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
20217365Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
21217365Sjkim *    including a substantially similar Disclaimer requirement for further
22217365Sjkim *    binary redistribution.
23217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
24217365Sjkim *    of any contributors may be used to endorse or promote products derived
25217365Sjkim *    from this software without specific prior written permission.
26118611Snjl *
27217365Sjkim * Alternatively, this software may be distributed under the terms of the
28217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
29217365Sjkim * Software Foundation.
30118611Snjl *
31217365Sjkim * NO WARRANTY
32217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42217365Sjkim * POSSIBILITY OF SUCH DAMAGES.
43217365Sjkim */
44118611Snjl
45118611Snjl
46118611Snjl#ifndef __ASLCOMPILER_H
47118611Snjl#define __ASLCOMPILER_H
48118611Snjl
49217365Sjkim#include <contrib/dev/acpica/include/acpi.h>
50217365Sjkim#include <contrib/dev/acpica/include/accommon.h>
51217365Sjkim#include <contrib/dev/acpica/include/amlresrc.h>
52217365Sjkim#include <contrib/dev/acpica/include/acdebug.h>
53118611Snjl
54118611Snjl/* Microsoft-specific */
55118611Snjl
56118611Snjl#if (defined WIN32 || defined WIN64)
57118611Snjl
58118611Snjl/* warn : used #pragma pack */
59118611Snjl#pragma warning(disable:4103)
60118611Snjl
61118611Snjl/* warn : named type definition in parentheses */
62118611Snjl#pragma warning(disable:4115)
63118611Snjl#endif
64118611Snjl
65118611Snjl#include <stdio.h>
66118611Snjl#include <stdlib.h>
67118611Snjl#include <stdarg.h>
68118611Snjl#include <string.h>
69118611Snjl#include <errno.h>
70118611Snjl#include <ctype.h>
71118611Snjl
72151937Sjkim/* Compiler headers */
73118611Snjl
74151937Sjkim#include <contrib/dev/acpica/compiler/asldefine.h>
75151937Sjkim#include <contrib/dev/acpica/compiler/asltypes.h>
76213806Sjkim#include <contrib/dev/acpica/compiler/aslmessages.h>
77151937Sjkim#include <contrib/dev/acpica/compiler/aslglobal.h>
78118611Snjl
79118611Snjl
80118611Snjl/*******************************************************************************
81118611Snjl *
82118611Snjl * Compiler prototypes
83118611Snjl *
84118611Snjl ******************************************************************************/
85118611Snjl
86151937Sjkim/*
87151937Sjkim * parser - generated from flex/bison, lex/yacc, etc.
88151937Sjkim */
89118611Snjlint
90118611SnjlAslCompilerparse(
91118611Snjl    void);
92118611Snjl
93118611SnjlACPI_PARSE_OBJECT *
94118611SnjlAslDoError (
95118611Snjl    void);
96118611Snjl
97118611Snjlint
98118611SnjlAslCompilerlex(
99118611Snjl    void);
100118611Snjl
101118611Snjlvoid
102118611SnjlResetCurrentLineBuffer (
103118611Snjl    void);
104118611Snjl
105118611Snjlvoid
106118611SnjlInsertLineBuffer (
107118611Snjl    int                     SourceChar);
108118611Snjl
109118611Snjlint
110118611SnjlAslPopInputFileStack (
111118611Snjl    void);
112118611Snjl
113118611Snjlvoid
114118611SnjlAslPushInputFileStack (
115118611Snjl    FILE                    *InputFile,
116118611Snjl    char                    *Filename);
117118611Snjl
118193529Sjkim/*
119209746Sjkim * aslstartup - entered from main()
120193529Sjkim */
121209746Sjkimvoid
122209746SjkimAslInitializeGlobals (
123209746Sjkim    void);
124209746Sjkim
125210976Sjkimtypedef
126210976SjkimACPI_STATUS (*ASL_PATHNAME_CALLBACK) (
127210976Sjkim    char *);
128210976Sjkim
129193529SjkimACPI_STATUS
130193529SjkimAslDoOnePathname (
131210976Sjkim    char                    *Pathname,
132210976Sjkim    ASL_PATHNAME_CALLBACK   Callback);
133118611Snjl
134193529SjkimACPI_STATUS
135193529SjkimAslDoOneFile (
136193529Sjkim    char                    *Filename);
137193529Sjkim
138151937Sjkim/*
139151937Sjkim * aslcompile - compile mainline
140151937Sjkim */
141118611Snjlvoid
142118611SnjlAslCompilerSignon (
143118611Snjl    UINT32                  FileId);
144118611Snjl
145118611Snjlvoid
146118611SnjlAslCompilerFileHeader (
147118611Snjl    UINT32                  FileId);
148118611Snjl
149151937Sjkimint
150151937SjkimCmDoCompile (
151151937Sjkim    void);
152151937Sjkim
153118611Snjlvoid
154151937SjkimCmDoOutputFiles (
155151937Sjkim    void);
156118611Snjl
157151937Sjkimvoid
158151937SjkimCmCleanupAndExit (
159151937Sjkim    void);
160118611Snjl
161209746SjkimACPI_STATUS
162209746SjkimFlCheckForAscii (
163209746Sjkim    ASL_FILE_INFO           *FileInfo);
164118611Snjl
165209746Sjkim
166151937Sjkim/*
167218590Sjkim * aslwalks - semantic analysis and parse tree walks
168151937Sjkim */
169151937SjkimACPI_STATUS
170151937SjkimAnOtherSemanticAnalysisWalkBegin (
171151937Sjkim    ACPI_PARSE_OBJECT       *Op,
172151937Sjkim    UINT32                  Level,
173151937Sjkim    void                    *Context);
174118611Snjl
175151937SjkimACPI_STATUS
176151937SjkimAnOtherSemanticAnalysisWalkEnd (
177151937Sjkim    ACPI_PARSE_OBJECT       *Op,
178151937Sjkim    UINT32                  Level,
179151937Sjkim    void                    *Context);
180118611Snjl
181151937SjkimACPI_STATUS
182151937SjkimAnOperandTypecheckWalkEnd (
183151937Sjkim    ACPI_PARSE_OBJECT       *Op,
184151937Sjkim    UINT32                  Level,
185151937Sjkim    void                    *Context);
186118611Snjl
187151937SjkimACPI_STATUS
188151937SjkimAnMethodAnalysisWalkBegin (
189151937Sjkim    ACPI_PARSE_OBJECT       *Op,
190151937Sjkim    UINT32                  Level,
191151937Sjkim    void                    *Context);
192118611Snjl
193151937SjkimACPI_STATUS
194151937SjkimAnMethodAnalysisWalkEnd (
195151937Sjkim    ACPI_PARSE_OBJECT       *Op,
196151937Sjkim    UINT32                  Level,
197151937Sjkim    void                    *Context);
198118611Snjl
199151937SjkimACPI_STATUS
200218590SjkimAnMethodTypingWalkEnd (
201151937Sjkim    ACPI_PARSE_OBJECT       *Op,
202151937Sjkim    UINT32                  Level,
203151937Sjkim    void                    *Context);
204118611Snjl
205218590Sjkim
206218590Sjkim/*
207218590Sjkim * aslbtypes - bitfield data types
208218590Sjkim */
209218590SjkimUINT32
210218590SjkimAnMapObjTypeToBtype (
211218590Sjkim    ACPI_PARSE_OBJECT       *Op);
212218590Sjkim
213218590SjkimUINT32
214218590SjkimAnMapArgTypeToBtype (
215218590Sjkim    UINT32                  ArgType);
216218590Sjkim
217218590SjkimUINT32
218218590SjkimAnGetBtype (
219218590Sjkim    ACPI_PARSE_OBJECT       *Op);
220218590Sjkim
221218590Sjkimvoid
222218590SjkimAnFormatBtype (
223218590Sjkim    char                    *Buffer,
224218590Sjkim    UINT32                  Btype);
225218590Sjkim
226218590Sjkim
227218590Sjkim/*
228218590Sjkim * aslanalyze - Support functions for parse tree walks
229218590Sjkim */
230218590Sjkimvoid
231218590SjkimAnCheckId (
232151937Sjkim    ACPI_PARSE_OBJECT       *Op,
233218590Sjkim    ACPI_NAME               Type);
234118611Snjl
235218590Sjkim/* Values for Type argument above */
236151937Sjkim
237218590Sjkim#define ASL_TYPE_HID        0
238218590Sjkim#define ASL_TYPE_CID        1
239218590Sjkim
240218590SjkimBOOLEAN
241218590SjkimAnIsInternalMethod (
242218590Sjkim    ACPI_PARSE_OBJECT       *Op);
243218590Sjkim
244218590SjkimUINT32
245218590SjkimAnGetInternalMethodReturnType (
246218590Sjkim    ACPI_PARSE_OBJECT       *Op);
247218590Sjkim
248218590SjkimBOOLEAN
249218590SjkimAnLastStatementIsReturn (
250218590Sjkim    ACPI_PARSE_OBJECT       *Op);
251218590Sjkim
252218590Sjkimvoid
253218590SjkimAnCheckMethodReturnValue (
254218590Sjkim    ACPI_PARSE_OBJECT       *Op,
255218590Sjkim    const ACPI_OPCODE_INFO  *OpInfo,
256218590Sjkim    ACPI_PARSE_OBJECT       *ArgOp,
257218590Sjkim    UINT32                  RequiredBtypes,
258218590Sjkim    UINT32                  ThisNodeBtype);
259218590Sjkim
260218590SjkimBOOLEAN
261218590SjkimAnIsResultUsed (
262218590Sjkim    ACPI_PARSE_OBJECT       *Op);
263218590Sjkim
264218590Sjkimvoid
265218590SjkimApCheckForGpeNameConflict (
266218590Sjkim    ACPI_PARSE_OBJECT       *Op);
267218590Sjkim
268220663Sjkimvoid
269220663SjkimApCheckRegMethod (
270220663Sjkim    ACPI_PARSE_OBJECT       *Op);
271218590Sjkim
272220663Sjkim
273151937Sjkim/*
274151937Sjkim * aslerror - error handling/reporting
275151937Sjkim */
276118611Snjlvoid
277118611SnjlAslError (
278118611Snjl    UINT8                   Level,
279118611Snjl    UINT8                   MessageId,
280118611Snjl    ACPI_PARSE_OBJECT       *Op,
281118611Snjl    char                    *ExtraMessage);
282118611Snjl
283118611Snjlvoid
284118611SnjlAslCoreSubsystemError (
285118611Snjl    ACPI_PARSE_OBJECT       *Op,
286118611Snjl    ACPI_STATUS             Status,
287118611Snjl    char                    *ExtraMessage,
288118611Snjl    BOOLEAN                 Abort);
289118611Snjl
290151937Sjkimint
291151937SjkimAslCompilererror(
292151937Sjkim    char                    *s);
293151937Sjkim
294118611Snjlvoid
295118611SnjlAslCommonError (
296118611Snjl    UINT8                   Level,
297118611Snjl    UINT8                   MessageId,
298118611Snjl    UINT32                  CurrentLineNumber,
299118611Snjl    UINT32                  LogicalLineNumber,
300118611Snjl    UINT32                  LogicalByteOffset,
301118611Snjl    UINT32                  Column,
302118611Snjl    char                    *Filename,
303118611Snjl    char                    *ExtraMessage);
304118611Snjl
305118611Snjlvoid
306118611SnjlAePrintException (
307118611Snjl    UINT32                  FileId,
308118611Snjl    ASL_ERROR_MSG           *Enode,
309118611Snjl    char                    *Header);
310118611Snjl
311118611Snjlvoid
312118611SnjlAePrintErrorLog (
313118611Snjl    UINT32                  FileId);
314118611Snjl
315193529Sjkimvoid
316193529SjkimAeClearErrorLog (
317193529Sjkim    void);
318193529Sjkim
319167802SjkimACPI_PHYSICAL_ADDRESS
320118611SnjlAeLocalGetRootPointer (
321167802Sjkim    void);
322118611Snjl
323118611Snjl
324151937Sjkim/*
325151937Sjkim * asllisting - generate all "listing" type files
326151937Sjkim */
327118611Snjlvoid
328151937SjkimLsDoListings (
329151937Sjkim    void);
330118611Snjl
331118611Snjlvoid
332118611SnjlLsWriteNodeToAsmListing (
333118611Snjl    ACPI_PARSE_OBJECT       *Op);
334118611Snjl
335118611Snjlvoid
336118611SnjlLsWriteNode (
337118611Snjl    ACPI_PARSE_OBJECT       *Op,
338118611Snjl    UINT32                  FileId);
339118611Snjl
340118611Snjlvoid
341118611SnjlLsDoHexOutput (
342118611Snjl    void);
343118611Snjl
344167802Sjkimvoid
345167802SjkimLsDumpParseTree (
346167802Sjkim    void);
347118611Snjl
348151937Sjkim/*
349151937Sjkim * aslfold - constant folding
350151937Sjkim */
351151937SjkimACPI_STATUS
352151937SjkimOpcAmlConstantWalk (
353151937Sjkim    ACPI_PARSE_OBJECT       *Op,
354151937Sjkim    UINT32                  Level,
355151937Sjkim    void                    *Context);
356118611Snjl
357118611Snjl
358118611Snjl/*
359118611Snjl * aslopcodes - generate AML opcodes
360118611Snjl */
361118611SnjlACPI_STATUS
362118611SnjlOpcAmlOpcodeWalk (
363118611Snjl    ACPI_PARSE_OBJECT       *Op,
364118611Snjl    UINT32                  Level,
365118611Snjl    void                    *Context);
366118611Snjl
367118611SnjlACPI_STATUS
368151937SjkimOpcAmlOpcodeUpdateWalk (
369118611Snjl    ACPI_PARSE_OBJECT       *Op,
370118611Snjl    UINT32                  Level,
371118611Snjl    void                    *Context);
372118611Snjl
373118611Snjlvoid
374118611SnjlOpcGenerateAmlOpcode (
375118611Snjl    ACPI_PARSE_OBJECT       *Op);
376118611Snjl
377118611SnjlUINT32
378118611SnjlOpcSetOptimalIntegerSize (
379118611Snjl    ACPI_PARSE_OBJECT       *Op);
380118611Snjl
381118611Snjlvoid
382118611SnjlOpcGetIntegerWidth (
383118611Snjl    ACPI_PARSE_OBJECT       *Op);
384118611Snjl
385151937Sjkim
386118611Snjl/*
387118611Snjl * asloperands - generate AML operands for the AML opcodes
388118611Snjl */
389151937SjkimACPI_PARSE_OBJECT  *
390151937SjkimUtGetArg (
391151937Sjkim    ACPI_PARSE_OBJECT       *Op,
392151937Sjkim    UINT32                  Argn);
393118611Snjl
394118611Snjlvoid
395118611SnjlOpnGenerateAmlOperands (
396118611Snjl    ACPI_PARSE_OBJECT       *Op);
397118611Snjl
398118611Snjlvoid
399118611SnjlOpnDoPackage (
400118611Snjl    ACPI_PARSE_OBJECT       *Op);
401118611Snjl
402118611Snjl
403118611Snjl/*
404118611Snjl * aslopt - optmization
405118611Snjl */
406118611Snjlvoid
407118611SnjlOptOptimizeNamePath (
408118611Snjl    ACPI_PARSE_OBJECT       *Op,
409118611Snjl    UINT32                  Flags,
410118611Snjl    ACPI_WALK_STATE         *WalkState,
411118611Snjl    char                    *AmlNameString,
412118611Snjl    ACPI_NAMESPACE_NODE     *TargetNode);
413118611Snjl
414118611Snjl
415118611Snjl/*
416151937Sjkim * aslcodegen - code generation
417118611Snjl */
418118611Snjlvoid
419151937SjkimCgGenerateAmlOutput (
420151937Sjkim    void);
421118611Snjl
422118611Snjl
423151937Sjkim/*
424209746Sjkim * aslfile
425209746Sjkim */
426209746Sjkimvoid
427209746SjkimFlOpenFile (
428209746Sjkim    UINT32                  FileId,
429209746Sjkim    char                    *Filename,
430209746Sjkim    char                    *Mode);
431209746Sjkim
432209746Sjkim
433209746Sjkim/*
434151937Sjkim * asllength - calculate/adjust AML package lengths
435151937Sjkim */
436118611SnjlACPI_STATUS
437118611SnjlLnPackageLengthWalk (
438118611Snjl    ACPI_PARSE_OBJECT       *Op,
439118611Snjl    UINT32                  Level,
440118611Snjl    void                    *Context);
441118611Snjl
442118611SnjlACPI_STATUS
443118611SnjlLnInitLengthsWalk (
444118611Snjl    ACPI_PARSE_OBJECT       *Op,
445118611Snjl    UINT32                  Level,
446118611Snjl    void                    *Context);
447118611Snjl
448118611Snjlvoid
449151937SjkimCgGenerateAmlLengths (
450151937Sjkim    ACPI_PARSE_OBJECT       *Op);
451118611Snjl
452118611Snjl
453118611Snjl/*
454151937Sjkim * aslmap - opcode mappings and reserved method names
455118611Snjl */
456118611SnjlACPI_OBJECT_TYPE
457118611SnjlAslMapNamedOpcodeToDataType (
458118611Snjl    UINT16                  Opcode);
459118611Snjl
460204773Sjkim
461204773Sjkim/*
462204773Sjkim * aslpredef - ACPI predefined names support
463204773Sjkim */
464220663SjkimBOOLEAN
465204773SjkimApCheckForPredefinedMethod (
466204773Sjkim    ACPI_PARSE_OBJECT       *Op,
467204773Sjkim    ASL_METHOD_INFO         *MethodInfo);
468204773Sjkim
469206117Sjkimvoid
470206117SjkimApCheckPredefinedReturnValue (
471206117Sjkim    ACPI_PARSE_OBJECT       *Op,
472206117Sjkim    ASL_METHOD_INFO         *MethodInfo);
473206117Sjkim
474204773SjkimUINT32
475204773SjkimApCheckForPredefinedName (
476204773Sjkim    ACPI_PARSE_OBJECT       *Op,
477204773Sjkim    char                    *Name);
478204773Sjkim
479204773Sjkimvoid
480204773SjkimApCheckForPredefinedObject (
481204773Sjkim    ACPI_PARSE_OBJECT       *Op,
482204773Sjkim    char                    *Name);
483204773Sjkim
484204773Sjkimvoid
485204773SjkimApDisplayReservedNames (
486151937Sjkim    void);
487151937Sjkim
488151937Sjkim
489118611Snjl/*
490118611Snjl * asltransform - parse tree transformations
491118611Snjl */
492118611SnjlACPI_STATUS
493118611SnjlTrAmlTransformWalk (
494118611Snjl    ACPI_PARSE_OBJECT       *Op,
495118611Snjl    UINT32                  Level,
496118611Snjl    void                    *Context);
497118611Snjl
498118611Snjl
499118611Snjl/*
500118611Snjl * asltree - parse tree support
501118611Snjl */
502118611SnjlACPI_STATUS
503118611SnjlTrWalkParseTree (
504118611Snjl    ACPI_PARSE_OBJECT       *Op,
505118611Snjl    UINT32                  Visitation,
506118611Snjl    ASL_WALK_CALLBACK       DescendingCallback,
507118611Snjl    ASL_WALK_CALLBACK       AscendingCallback,
508118611Snjl    void                    *Context);
509118611Snjl
510118611Snjl/* Values for "Visitation" parameter above */
511118611Snjl
512118611Snjl#define ASL_WALK_VISIT_DOWNWARD     0x01
513118611Snjl#define ASL_WALK_VISIT_UPWARD       0x02
514118611Snjl#define ASL_WALK_VISIT_TWICE        (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
515118611Snjl
516118611Snjl
517151937SjkimACPI_PARSE_OBJECT *
518151937SjkimTrAllocateNode (
519151937Sjkim    UINT32                  ParseOpcode);
520118611Snjl
521151937Sjkimvoid
522151937SjkimTrReleaseNode (
523151937Sjkim    ACPI_PARSE_OBJECT       *Op);
524151937Sjkim
525118611SnjlACPI_PARSE_OBJECT *
526118611SnjlTrUpdateNode (
527118611Snjl    UINT32                  ParseOpcode,
528118611Snjl    ACPI_PARSE_OBJECT       *Op);
529118611Snjl
530118611SnjlACPI_PARSE_OBJECT *
531118611SnjlTrCreateNode (
532118611Snjl    UINT32                  ParseOpcode,
533118611Snjl    UINT32                  NumChildren,
534118611Snjl    ...);
535118611Snjl
536118611SnjlACPI_PARSE_OBJECT *
537118611SnjlTrCreateLeafNode (
538118611Snjl    UINT32                  ParseOpcode);
539118611Snjl
540118611SnjlACPI_PARSE_OBJECT *
541118611SnjlTrCreateValuedLeafNode (
542118611Snjl    UINT32                  ParseOpcode,
543202771Sjkim    UINT64                  Value);
544118611Snjl
545118611SnjlACPI_PARSE_OBJECT *
546218590SjkimTrCreateConstantLeafNode (
547218590Sjkim    UINT32                  ParseOpcode);
548218590Sjkim
549218590SjkimACPI_PARSE_OBJECT *
550118611SnjlTrLinkChildren (
551118611Snjl    ACPI_PARSE_OBJECT       *Op,
552118611Snjl    UINT32                  NumChildren,
553118611Snjl    ...);
554118611Snjl
555118611Snjlvoid
556118611SnjlTrSetEndLineNumber (
557118611Snjl    ACPI_PARSE_OBJECT       *Op);
558118611Snjl
559118611Snjlvoid
560151937SjkimTrWalkTree (
561151937Sjkim    void);
562118611Snjl
563118611SnjlACPI_PARSE_OBJECT *
564118611SnjlTrLinkPeerNode (
565118611Snjl    ACPI_PARSE_OBJECT       *Op1,
566118611Snjl    ACPI_PARSE_OBJECT       *Op2);
567118611Snjl
568118611SnjlACPI_PARSE_OBJECT *
569118611SnjlTrLinkChildNode (
570118611Snjl    ACPI_PARSE_OBJECT       *Op1,
571118611Snjl    ACPI_PARSE_OBJECT       *Op2);
572118611Snjl
573118611SnjlACPI_PARSE_OBJECT *
574118611SnjlTrSetNodeFlags (
575118611Snjl    ACPI_PARSE_OBJECT       *Op,
576118611Snjl    UINT32                  Flags);
577118611Snjl
578118611SnjlACPI_PARSE_OBJECT *
579118611SnjlTrLinkPeerNodes (
580118611Snjl    UINT32                  NumPeers,
581118611Snjl    ...);
582118611Snjl
583118611Snjl
584118611Snjl/*
585118611Snjl * aslfiles - File I/O support
586118611Snjl */
587118611Snjlvoid
588151937SjkimAslAbort (
589151937Sjkim    void);
590118611Snjl
591118611Snjlvoid
592197104SjkimFlAddIncludeDirectory (
593197104Sjkim    char                    *Dir);
594197104Sjkim
595197104Sjkimvoid
596118611SnjlFlOpenIncludeFile (
597118611Snjl    ACPI_PARSE_OBJECT       *Op);
598118611Snjl
599118611Snjlvoid
600118611SnjlFlFileError (
601118611Snjl    UINT32                  FileId,
602118611Snjl    UINT8                   ErrorId);
603118611Snjl
604207344SjkimUINT32
605207344SjkimFlGetFileSize (
606207344Sjkim    UINT32                  FileId);
607207344Sjkim
608118611SnjlACPI_STATUS
609118611SnjlFlReadFile (
610118611Snjl    UINT32                  FileId,
611118611Snjl    void                    *Buffer,
612118611Snjl    UINT32                  Length);
613118611Snjl
614118611Snjlvoid
615118611SnjlFlWriteFile (
616118611Snjl    UINT32                  FileId,
617118611Snjl    void                    *Buffer,
618118611Snjl    UINT32                  Length);
619118611Snjl
620118611Snjlvoid
621118611SnjlFlSeekFile (
622118611Snjl    UINT32                  FileId,
623118611Snjl    long                    Offset);
624118611Snjl
625118611Snjlvoid
626118611SnjlFlCloseFile (
627118611Snjl    UINT32                  FileId);
628118611Snjl
629118611Snjlvoid
630118611SnjlFlPrintFile (
631118611Snjl    UINT32                  FileId,
632118611Snjl    char                    *Format,
633118611Snjl    ...);
634118611Snjl
635118611Snjlvoid
636118611SnjlFlSetLineNumber (
637118611Snjl    ACPI_PARSE_OBJECT       *Op);
638118611Snjl
639118611SnjlACPI_STATUS
640118611SnjlFlOpenInputFile (
641118611Snjl    char                    *InputFilename);
642118611Snjl
643118611SnjlACPI_STATUS
644118611SnjlFlOpenAmlOutputFile (
645118611Snjl    char                    *InputFilename);
646118611Snjl
647118611SnjlACPI_STATUS
648118611SnjlFlOpenMiscOutputFiles (
649118611Snjl    char                    *InputFilename);
650118611Snjl
651118611Snjl
652151937Sjkim/*
653151937Sjkim * asload - load namespace in prep for cross reference
654151937Sjkim */
655118611SnjlACPI_STATUS
656118611SnjlLdLoadNamespace (
657118611Snjl    ACPI_PARSE_OBJECT       *RootOp);
658118611Snjl
659118611Snjl
660151937Sjkim/*
661151937Sjkim * asllookup - namespace cross reference
662151937Sjkim */
663118611SnjlACPI_STATUS
664151937SjkimLkCrossReferenceNamespace (
665151937Sjkim    void);
666118611Snjl
667167802Sjkimvoid
668167802SjkimLkFindUnreferencedObjects (
669167802Sjkim    void);
670167802Sjkim
671118611SnjlACPI_STATUS
672118611SnjlLsDisplayNamespace (
673118611Snjl    void);
674118611Snjl
675212761Sjkimvoid
676212761SjkimLsSetupNsList (
677212761Sjkim    void                    *Handle);
678118611Snjl
679212761Sjkim
680151937Sjkim/*
681151937Sjkim * aslutils - common compiler utilites
682151937Sjkim */
683151937Sjkimvoid
684151937SjkimDbgPrint (
685151937Sjkim    UINT32                  Type,
686151937Sjkim    char                    *Format,
687151937Sjkim    ...);
688118611Snjl
689151937Sjkim/* Type values for above */
690118611Snjl
691151937Sjkim#define ASL_DEBUG_OUTPUT    0
692151937Sjkim#define ASL_PARSE_OUTPUT    1
693151937Sjkim#define ASL_TREE_OUTPUT     2
694151937Sjkim
695118611Snjlvoid
696209746SjkimUtDisplaySupportedTables (
697209746Sjkim    void);
698209746Sjkim
699209746Sjkimvoid
700118611SnjlUtDisplayConstantOpcodes (
701118611Snjl    void);
702118611Snjl
703151937SjkimUINT8
704118611SnjlUtBeginEvent (
705118611Snjl    char                    *Name);
706118611Snjl
707118611Snjlvoid
708118611SnjlUtEndEvent (
709151937Sjkim    UINT8                   Event);
710118611Snjl
711118611Snjlvoid *
712118611SnjlUtLocalCalloc (
713118611Snjl    UINT32                  Size);
714118611Snjl
715118611Snjlvoid
716118611SnjlUtPrintFormattedName (
717118611Snjl    UINT16                  ParseOpcode,
718118611Snjl    UINT32                  Level);
719118611Snjl
720118611Snjlvoid
721118611SnjlUtDisplaySummary (
722118611Snjl    UINT32                  FileId);
723118611Snjl
724118611SnjlUINT8
725118611SnjlUtHexCharToValue (
726151937Sjkim    int                     HexChar);
727118611Snjl
728118611Snjlvoid
729118611SnjlUtConvertByteToHex (
730118611Snjl    UINT8                   RawByte,
731118611Snjl    UINT8                   *Buffer);
732118611Snjl
733118611Snjlvoid
734118611SnjlUtConvertByteToAsmHex (
735118611Snjl    UINT8                   RawByte,
736118611Snjl    UINT8                   *Buffer);
737118611Snjl
738118611Snjlchar *
739118611SnjlUtGetOpName (
740118611Snjl    UINT32                  ParseOpcode);
741118611Snjl
742118611Snjlvoid
743118611SnjlUtSetParseOpName (
744118611Snjl    ACPI_PARSE_OBJECT       *Op);
745118611Snjl
746118611Snjlchar *
747118611SnjlUtGetStringBuffer (
748118611Snjl    UINT32                  Length);
749118611Snjl
750118611SnjlACPI_STATUS
751118611SnjlUtInternalizeName (
752118611Snjl    char                    *ExternalName,
753118611Snjl    char                    **ConvertedName);
754118611Snjl
755118611Snjlvoid
756118611SnjlUtAttachNamepathToOwner (
757118611Snjl    ACPI_PARSE_OBJECT       *Op,
758118611Snjl    ACPI_PARSE_OBJECT       *NameNode);
759118611Snjl
760118611SnjlACPI_PARSE_OBJECT *
761118611SnjlUtCheckIntegerRange (
762118611Snjl    ACPI_PARSE_OBJECT       *Op,
763118611Snjl    UINT32                  LowValue,
764118611Snjl    UINT32                  HighValue);
765118611Snjl
766202771SjkimUINT64
767118611SnjlUtDoConstant (
768118611Snjl    char                    *String);
769118611Snjl
770220663SjkimACPI_STATUS
771220663SjkimUtStrtoul64 (
772220663Sjkim    char                    *String,
773220663Sjkim    UINT32                  Base,
774220663Sjkim    UINT64                  *RetInteger);
775220663Sjkim
776220663Sjkim
777217365Sjkim/*
778217365Sjkim * asluuid - UUID support
779217365Sjkim */
780217365SjkimACPI_STATUS
781217365SjkimAuValidateUuid (
782217365Sjkim    char                    *InString);
783118611Snjl
784217365SjkimACPI_STATUS
785217365SjkimAuConvertStringToUuid (
786217365Sjkim    char                    *InString,
787217365Sjkim    char                    *UuIdBuffer);
788217365Sjkim
789217365SjkimACPI_STATUS
790217365SjkimAuConvertUuidToString (
791217365Sjkim    char                    *UuIdBuffer,
792217365Sjkim    char                    *OutString);
793217365Sjkim
794118611Snjl/*
795151937Sjkim * aslresource - Resource template generation utilities
796118611Snjl */
797207344Sjkimvoid
798207344SjkimRsSmallAddressCheck (
799207344Sjkim    UINT8                   Type,
800207344Sjkim    UINT32                  Minimum,
801207344Sjkim    UINT32                  Maximum,
802207344Sjkim    UINT32                  Length,
803207344Sjkim    UINT32                  Alignment,
804207344Sjkim    ACPI_PARSE_OBJECT       *MinOp,
805207344Sjkim    ACPI_PARSE_OBJECT       *MaxOp,
806207344Sjkim    ACPI_PARSE_OBJECT       *LengthOp,
807213806Sjkim    ACPI_PARSE_OBJECT       *AlignOp,
808213806Sjkim    ACPI_PARSE_OBJECT       *Op);
809207344Sjkim
810207344Sjkimvoid
811207344SjkimRsLargeAddressCheck (
812207344Sjkim    UINT64                  Minimum,
813207344Sjkim    UINT64                  Maximum,
814207344Sjkim    UINT64                  Length,
815207344Sjkim    UINT64                  Granularity,
816207344Sjkim    UINT8                   Flags,
817207344Sjkim    ACPI_PARSE_OBJECT       *MinOp,
818207344Sjkim    ACPI_PARSE_OBJECT       *MaxOp,
819207344Sjkim    ACPI_PARSE_OBJECT       *LengthOp,
820213806Sjkim    ACPI_PARSE_OBJECT       *GranOp,
821213806Sjkim    ACPI_PARSE_OBJECT       *Op);
822207344Sjkim
823207344SjkimUINT16
824207344SjkimRsGetStringDataLength (
825207344Sjkim    ACPI_PARSE_OBJECT       *InitializerOp);
826207344Sjkim
827118611SnjlASL_RESOURCE_NODE *
828118611SnjlRsAllocateResourceNode (
829118611Snjl    UINT32                  Size);
830118611Snjl
831151937Sjkimvoid
832118611SnjlRsCreateBitField (
833118611Snjl    ACPI_PARSE_OBJECT       *Op,
834118611Snjl    char                    *Name,
835118611Snjl    UINT32                  ByteOffset,
836118611Snjl    UINT32                  BitOffset);
837118611Snjl
838118611Snjlvoid
839118611SnjlRsCreateByteField (
840118611Snjl    ACPI_PARSE_OBJECT       *Op,
841118611Snjl    char                    *Name,
842118611Snjl    UINT32                  ByteOffset);
843118611Snjl
844118611Snjlvoid
845118611SnjlRsSetFlagBits (
846118611Snjl    UINT8                   *Flags,
847118611Snjl    ACPI_PARSE_OBJECT       *Op,
848118611Snjl    UINT8                   Position,
849118611Snjl    UINT8                   DefaultBit);
850118611Snjl
851118611SnjlACPI_PARSE_OBJECT *
852118611SnjlRsCompleteNodeAndGetNext (
853118611Snjl    ACPI_PARSE_OBJECT       *Op);
854118611Snjl
855151937Sjkimvoid
856151937SjkimRsCheckListForDuplicates (
857151937Sjkim    ACPI_PARSE_OBJECT       *Op);
858151937Sjkim
859118611SnjlASL_RESOURCE_NODE *
860118611SnjlRsDoOneResourceDescriptor (
861118611Snjl    ACPI_PARSE_OBJECT       *DescriptorTypeOp,
862118611Snjl    UINT32                  CurrentByteOffset,
863118611Snjl    UINT8                   *State);
864118611Snjl
865151937Sjkim/* Values for State above */
866151937Sjkim
867118611Snjl#define ACPI_RSTATE_NORMAL              0
868118611Snjl#define ACPI_RSTATE_START_DEPENDENT     1
869118611Snjl#define ACPI_RSTATE_DEPENDENT_LIST      2
870118611Snjl
871118611SnjlUINT32
872118611SnjlRsLinkDescriptorChain (
873118611Snjl    ASL_RESOURCE_NODE       **PreviousRnode,
874118611Snjl    ASL_RESOURCE_NODE       *Rnode);
875118611Snjl
876151937Sjkimvoid
877151937SjkimRsDoResourceTemplate (
878151937Sjkim    ACPI_PARSE_OBJECT       *Op);
879118611Snjl
880151937Sjkim
881118611Snjl/*
882207344Sjkim * aslrestype1 - Miscellaneous Small descriptors
883118611Snjl */
884118611SnjlASL_RESOURCE_NODE *
885167802SjkimRsDoEndTagDescriptor (
886167802Sjkim    ACPI_PARSE_OBJECT       *Op,
887167802Sjkim    UINT32                  CurrentByteOffset);
888167802Sjkim
889167802SjkimASL_RESOURCE_NODE *
890207344SjkimRsDoEndDependentDescriptor (
891118611Snjl    ACPI_PARSE_OBJECT       *Op,
892118611Snjl    UINT32                  CurrentByteOffset);
893118611Snjl
894118611SnjlASL_RESOURCE_NODE *
895207344SjkimRsDoMemory24Descriptor (
896118611Snjl    ACPI_PARSE_OBJECT       *Op,
897118611Snjl    UINT32                  CurrentByteOffset);
898118611Snjl
899118611SnjlASL_RESOURCE_NODE *
900207344SjkimRsDoMemory32Descriptor (
901118611Snjl    ACPI_PARSE_OBJECT       *Op,
902118611Snjl    UINT32                  CurrentByteOffset);
903118611Snjl
904118611SnjlASL_RESOURCE_NODE *
905207344SjkimRsDoMemory32FixedDescriptor (
906118611Snjl    ACPI_PARSE_OBJECT       *Op,
907118611Snjl    UINT32                  CurrentByteOffset);
908118611Snjl
909118611SnjlASL_RESOURCE_NODE *
910207344SjkimRsDoStartDependentDescriptor (
911118611Snjl    ACPI_PARSE_OBJECT       *Op,
912118611Snjl    UINT32                  CurrentByteOffset);
913118611Snjl
914118611SnjlASL_RESOURCE_NODE *
915207344SjkimRsDoStartDependentNoPriDescriptor (
916118611Snjl    ACPI_PARSE_OBJECT       *Op,
917118611Snjl    UINT32                  CurrentByteOffset);
918118611Snjl
919118611SnjlASL_RESOURCE_NODE *
920207344SjkimRsDoVendorSmallDescriptor (
921118611Snjl    ACPI_PARSE_OBJECT       *Op,
922118611Snjl    UINT32                  CurrentByteOffset);
923118611Snjl
924207344Sjkim
925207344Sjkim/*
926207344Sjkim * aslrestype1i - I/O-related Small descriptors
927207344Sjkim */
928118611SnjlASL_RESOURCE_NODE *
929207344SjkimRsDoDmaDescriptor (
930118611Snjl    ACPI_PARSE_OBJECT       *Op,
931118611Snjl    UINT32                  CurrentByteOffset);
932118611Snjl
933118611SnjlASL_RESOURCE_NODE *
934207344SjkimRsDoFixedIoDescriptor (
935118611Snjl    ACPI_PARSE_OBJECT       *Op,
936118611Snjl    UINT32                  CurrentByteOffset);
937118611Snjl
938118611SnjlASL_RESOURCE_NODE *
939207344SjkimRsDoIoDescriptor (
940118611Snjl    ACPI_PARSE_OBJECT       *Op,
941118611Snjl    UINT32                  CurrentByteOffset);
942118611Snjl
943118611SnjlASL_RESOURCE_NODE *
944207344SjkimRsDoIrqDescriptor (
945118611Snjl    ACPI_PARSE_OBJECT       *Op,
946118611Snjl    UINT32                  CurrentByteOffset);
947118611Snjl
948118611SnjlASL_RESOURCE_NODE *
949207344SjkimRsDoIrqNoFlagsDescriptor (
950118611Snjl    ACPI_PARSE_OBJECT       *Op,
951118611Snjl    UINT32                  CurrentByteOffset);
952118611Snjl
953118611Snjl
954118611Snjl/*
955207344Sjkim * aslrestype2 - Large resource descriptors
956118611Snjl */
957151937SjkimASL_RESOURCE_NODE *
958151937SjkimRsDoInterruptDescriptor (
959151937Sjkim    ACPI_PARSE_OBJECT       *Op,
960151937Sjkim    UINT32                  CurrentByteOffset);
961118611Snjl
962118611SnjlASL_RESOURCE_NODE *
963207344SjkimRsDoVendorLargeDescriptor (
964207344Sjkim    ACPI_PARSE_OBJECT       *Op,
965207344Sjkim    UINT32                  CurrentByteOffset);
966207344Sjkim
967207344SjkimASL_RESOURCE_NODE *
968207344SjkimRsDoGeneralRegisterDescriptor (
969207344Sjkim    ACPI_PARSE_OBJECT       *Op,
970207344Sjkim    UINT32                  CurrentByteOffset);
971207344Sjkim
972207344Sjkim
973207344Sjkim/*
974207344Sjkim * aslrestype2d - DWord address descriptors
975207344Sjkim */
976207344SjkimASL_RESOURCE_NODE *
977118611SnjlRsDoDwordIoDescriptor (
978118611Snjl    ACPI_PARSE_OBJECT       *Op,
979118611Snjl    UINT32                  CurrentByteOffset);
980118611Snjl
981118611SnjlASL_RESOURCE_NODE *
982118611SnjlRsDoDwordMemoryDescriptor (
983118611Snjl    ACPI_PARSE_OBJECT       *Op,
984118611Snjl    UINT32                  CurrentByteOffset);
985118611Snjl
986118611SnjlASL_RESOURCE_NODE *
987151937SjkimRsDoDwordSpaceDescriptor (
988151937Sjkim    ACPI_PARSE_OBJECT       *Op,
989151937Sjkim    UINT32                  CurrentByteOffset);
990151937Sjkim
991207344Sjkim
992207344Sjkim/*
993207344Sjkim * aslrestype2e - Extended address descriptors
994207344Sjkim */
995151937SjkimASL_RESOURCE_NODE *
996151937SjkimRsDoExtendedIoDescriptor (
997151937Sjkim    ACPI_PARSE_OBJECT       *Op,
998151937Sjkim    UINT32                  CurrentByteOffset);
999151937Sjkim
1000151937SjkimASL_RESOURCE_NODE *
1001151937SjkimRsDoExtendedMemoryDescriptor (
1002151937Sjkim    ACPI_PARSE_OBJECT       *Op,
1003151937Sjkim    UINT32                  CurrentByteOffset);
1004151937Sjkim
1005151937SjkimASL_RESOURCE_NODE *
1006151937SjkimRsDoExtendedSpaceDescriptor (
1007151937Sjkim    ACPI_PARSE_OBJECT       *Op,
1008151937Sjkim    UINT32                  CurrentByteOffset);
1009151937Sjkim
1010207344Sjkim
1011207344Sjkim/*
1012207344Sjkim * aslrestype2q - QWord address descriptors
1013207344Sjkim */
1014151937SjkimASL_RESOURCE_NODE *
1015118611SnjlRsDoQwordIoDescriptor (
1016118611Snjl    ACPI_PARSE_OBJECT       *Op,
1017118611Snjl    UINT32                  CurrentByteOffset);
1018118611Snjl
1019118611SnjlASL_RESOURCE_NODE *
1020118611SnjlRsDoQwordMemoryDescriptor (
1021118611Snjl    ACPI_PARSE_OBJECT       *Op,
1022118611Snjl    UINT32                  CurrentByteOffset);
1023118611Snjl
1024118611SnjlASL_RESOURCE_NODE *
1025151937SjkimRsDoQwordSpaceDescriptor (
1026151937Sjkim    ACPI_PARSE_OBJECT       *Op,
1027151937Sjkim    UINT32                  CurrentByteOffset);
1028151937Sjkim
1029207344Sjkim
1030207344Sjkim/*
1031207344Sjkim * aslrestype2w - Word address descriptors
1032207344Sjkim */
1033151937SjkimASL_RESOURCE_NODE *
1034118611SnjlRsDoWordIoDescriptor (
1035118611Snjl    ACPI_PARSE_OBJECT       *Op,
1036118611Snjl    UINT32                  CurrentByteOffset);
1037118611Snjl
1038118611SnjlASL_RESOURCE_NODE *
1039151937SjkimRsDoWordSpaceDescriptor (
1040151937Sjkim    ACPI_PARSE_OBJECT       *Op,
1041151937Sjkim    UINT32                  CurrentByteOffset);
1042151937Sjkim
1043151937SjkimASL_RESOURCE_NODE *
1044118611SnjlRsDoWordBusNumberDescriptor (
1045118611Snjl    ACPI_PARSE_OBJECT       *Op,
1046118611Snjl    UINT32                  CurrentByteOffset);
1047118611Snjl
1048209746Sjkim/*
1049209746Sjkim * Entry to data table compiler subsystem
1050209746Sjkim */
1051209746SjkimACPI_STATUS
1052209746SjkimDtDoCompile(
1053209746Sjkim    void);
1054209746Sjkim
1055209746SjkimACPI_STATUS
1056209746SjkimDtCreateTemplates (
1057209746Sjkim    char                    *Signature);
1058209746Sjkim
1059118611Snjl#endif /*  __ASLCOMPILER_H */
1060118611Snjl
1061