acparser.h revision 193267
1132734Skan/******************************************************************************
272566Sobrien *
3169699Skan * Module Name: acparser.h - AML Parser subcomponent prototypes and defines
4169699Skan *
518334Speter *****************************************************************************/
690282Sobrien
718334Speter/******************************************************************************
890282Sobrien *
990282Sobrien * 1. Copyright Notice
1090282Sobrien *
1190282Sobrien * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
1218334Speter * All rights reserved.
1390282Sobrien *
1490282Sobrien * 2. License
1590282Sobrien *
1690282Sobrien * 2.1. This is your license from Intel Corp. under its intellectual property
1718334Speter * rights.  You may have additional license terms from the party that provided
1818334Speter * you this software, covering your right to use that party's intellectual
1990282Sobrien * property rights.
20169699Skan *
21169699Skan * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
2218334Speter * copy of the source code appearing in this file ("Covered Code") an
2352558Sobrien * irrevocable, perpetual, worldwide license under Intel's copyrights in the
2452558Sobrien * base code distributed originally by Intel ("Original Intel Code") to copy,
2518334Speter * make derivatives, distribute, use and display any portion of the Covered
2618334Speter * Code in any form, with the right to sublicense such rights; and
2718334Speter *
2818334Speter * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
2918334Speter * license (with the right to sublicense), under only those claims of Intel
3018334Speter * patents that are infringed by the Original Intel Code, to make, use, sell,
3150615Sobrien * offer to sell, and import the Covered Code and derivative works thereof
3250615Sobrien * solely to the minimum extent necessary to exercise the above copyright
3350615Sobrien * license, and in no event shall the patent license extend to any additions
34132734Skan * to or modifications of the Original Intel Code.  No other license or right
35132734Skan * is granted directly or by implication, estoppel or otherwise;
3618334Speter *
3718334Speter * The above copyright and patent license is granted only if the following
3850615Sobrien * conditions are met:
3950615Sobrien *
4018334Speter * 3. Conditions
4150615Sobrien *
4250615Sobrien * 3.1. Redistribution of Source with Rights to Further Distribute Source.
4350615Sobrien * Redistribution of source code of any substantial portion of the Covered
4418334Speter * Code or modification with rights to further distribute source must include
4518334Speter * the above Copyright Notice, the above License, this list of Conditions,
46169699Skan * and the following Disclaimer and Export Compliance provision.  In addition,
4718334Speter * Licensee must cause all Covered Code to which Licensee contributes to
4818334Speter * contain a file documenting the changes Licensee made to create that Covered
49169699Skan * Code and the date of any change.  Licensee must include in that file the
5018334Speter * documentation of any changes made by any predecessor Licensee.  Licensee
5190282Sobrien * must include a prominent statement that the modification is derived,
5218334Speter * directly or indirectly, from Original Intel Code.
5318334Speter *
5450615Sobrien * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
5590282Sobrien * Redistribution of source code of any substantial portion of the Covered
5690282Sobrien * Code or modification without rights to further distribute source must
5750615Sobrien * include the following Disclaimer and Export Compliance provision in the
5818334Speter * documentation and/or other materials provided with distribution.  In
5950615Sobrien * addition, Licensee may not authorize further sublicense of source of any
6090282Sobrien * portion of the Covered Code, and must include terms to the effect that the
6150615Sobrien * license from Licensee to its licensee is limited to the intellectual
6252558Sobrien * property embodied in the software Licensee provides to its licensee, and
6352558Sobrien * not to intellectual property embodied in modifications its licensee may
6452558Sobrien * make.
6590282Sobrien *
6690282Sobrien * 3.3. Redistribution of Executable. Redistribution in executable form of any
6790282Sobrien * substantial portion of the Covered Code or modification must reproduce the
6890282Sobrien * above Copyright Notice, and the following Disclaimer and Export Compliance
6990282Sobrien * provision in the documentation and/or other materials provided with the
7090282Sobrien * distribution.
7190282Sobrien *
7290282Sobrien * 3.4. Intel retains all right, title, and interest in and to the Original
7390282Sobrien * Intel Code.
74117414Skan *
7590282Sobrien * 3.5. Neither the name Intel nor any other trademark owned or controlled by
7690282Sobrien * Intel shall be used in advertising or otherwise to promote the sale, use or
7790282Sobrien * other dealings in products derived from or relating to the Covered Code
78117414Skan * without prior written authorization from Intel.
79132734Skan *
80132734Skan * 4. Disclaimer and Export Compliance
81132734Skan *
82132734Skan * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83132734Skan * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84132734Skan * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
85132734Skan * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
86169699Skan * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
8718334Speter * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
8850615Sobrien * PARTICULAR PURPOSE.
8950615Sobrien *
9050615Sobrien * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
9150615Sobrien * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
9250615Sobrien * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
9350615Sobrien * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
9450615Sobrien * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
9550615Sobrien * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
9650615Sobrien * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
9750615Sobrien * LIMITED REMEDY.
9850615Sobrien *
9950615Sobrien * 4.3. Licensee shall not export, either directly or indirectly, any of this
10018334Speter * software or system incorporating such software without first obtaining any
10190282Sobrien * required license or other approval from the U. S. Department of Commerce or
10290282Sobrien * any other agency or department of the United States Government.  In the
10318334Speter * event Licensee exports any such software from the United States or
104132734Skan * re-exports any such software from a foreign destination, Licensee shall
105132734Skan * ensure that the distribution and export/re-export of the software is in
106132734Skan * compliance with all laws, regulations, orders, or other restrictions of the
107132734Skan * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108132734Skan * any of its subsidiaries will export/re-export any technical data, process,
109132734Skan * software, or service, directly or indirectly, to any country for which the
110132734Skan * United States government or any agency thereof requires an export license,
111132734Skan * other governmental approval, or letter of assurance, without first obtaining
11218334Speter * such license, approval or letter.
113132734Skan *
114132734Skan *****************************************************************************/
115132734Skan
11650615Sobrien
117132734Skan#ifndef __ACPARSER_H__
118132734Skan#define __ACPARSER_H__
119132734Skan
120132734Skan
121132734Skan#define OP_HAS_RETURN_VALUE             1
12218334Speter
123117414Skan/* Variable number of arguments. This field must be 32 bits */
124117414Skan
125117414Skan#define ACPI_VAR_ARGS                   ACPI_UINT32_MAX
126132734Skan
127132734Skan
128132734Skan#define ACPI_PARSE_DELETE_TREE          0x0001
12950615Sobrien#define ACPI_PARSE_NO_TREE_DELETE       0x0000
13050615Sobrien#define ACPI_PARSE_TREE_MASK            0x0001
13118334Speter
13218334Speter#define ACPI_PARSE_LOAD_PASS1           0x0010
13318334Speter#define ACPI_PARSE_LOAD_PASS2           0x0020
13490282Sobrien#define ACPI_PARSE_EXECUTE              0x0030
13518334Speter#define ACPI_PARSE_MODE_MASK            0x0030
136132734Skan
137132734Skan#define ACPI_PARSE_DEFERRED_OP          0x0100
13818334Speter#define ACPI_PARSE_DISASSEMBLE          0x0200
13918334Speter
14018334Speter
14118334Speter/******************************************************************************
14218334Speter *
14390282Sobrien * Parser interfaces
14418334Speter *
145169699Skan *****************************************************************************/
146169699Skan
147169699Skan
148169699Skan/*
149169699Skan * psxface - Parser external interfaces
150169699Skan */
151169699SkanACPI_STATUS
152169699SkanAcpiPsExecuteMethod (
153132734Skan    ACPI_EVALUATE_INFO      *Info);
15418334Speter
155132734Skan
15618334Speter/*
157169699Skan * psargs - Parse AML opcode arguments
158169699Skan */
15952558SobrienUINT8 *
16052558SobrienAcpiPsGetNextPackageEnd (
16152558Sobrien    ACPI_PARSE_STATE        *ParserState);
16218334Speter
16318334Speterchar *
16418334SpeterAcpiPsGetNextNamestring (
16518334Speter    ACPI_PARSE_STATE        *ParserState);
16618334Speter
16718334Spetervoid
16818334SpeterAcpiPsGetNextSimpleArg (
169169699Skan    ACPI_PARSE_STATE        *ParserState,
170169699Skan    UINT32                  ArgType,
171169699Skan    ACPI_PARSE_OBJECT       *Arg);
172169699Skan
173169699SkanACPI_STATUS
174169699SkanAcpiPsGetNextNamepath (
175169699Skan    ACPI_WALK_STATE         *WalkState,
176169699Skan    ACPI_PARSE_STATE        *ParserState,
177169699Skan    ACPI_PARSE_OBJECT       *Arg,
178169699Skan    BOOLEAN                 MethodCall);
17918334Speter
18018334SpeterACPI_STATUS
18152558SobrienAcpiPsGetNextArg (
18218334Speter    ACPI_WALK_STATE         *WalkState,
183117414Skan    ACPI_PARSE_STATE        *ParserState,
184117414Skan    UINT32                  ArgType,
185117414Skan    ACPI_PARSE_OBJECT       **ReturnArg);
186117414Skan
18718334Speter
18818334Speter/*
18918334Speter * psfind
19018334Speter */
19118334SpeterACPI_PARSE_OBJECT *
19218334SpeterAcpiPsFindName (
193117414Skan    ACPI_PARSE_OBJECT       *Scope,
194117414Skan    UINT32                  Name,
195117414Skan    UINT32                  Opcode);
196117414Skan
197117414SkanACPI_PARSE_OBJECT*
19890282SobrienAcpiPsGetParent (
19918334Speter    ACPI_PARSE_OBJECT       *Op);
200132734Skan
20190282Sobrien
202169699Skan/*
20390282Sobrien * psopcode - AML Opcode information
204169699Skan */
20590282Sobrienconst ACPI_OPCODE_INFO *
20690282SobrienAcpiPsGetOpcodeInfo (
20790282Sobrien    UINT16                  Opcode);
20890282Sobrien
20990282Sobrienchar *
21052558SobrienAcpiPsGetOpcodeName (
21118334Speter    UINT16                  Opcode);
21218334Speter
21318334SpeterUINT8
214132734SkanAcpiPsGetArgumentCount (
21518334Speter    UINT32                  OpType);
21618334Speter
21718334Speter
21818334Speter/*
21918334Speter * psparse - top level parsing routines
22018334Speter */
22118334SpeterACPI_STATUS
22218334SpeterAcpiPsParseAml (
22318334Speter    ACPI_WALK_STATE         *WalkState);
22418334Speter
22550615SobrienUINT32
226117414SkanAcpiPsGetOpcodeSize (
227117414Skan    UINT32                  Opcode);
22850615Sobrien
22950615SobrienUINT16
23050615SobrienAcpiPsPeekOpcode (
23150615Sobrien    ACPI_PARSE_STATE        *state);
23290282Sobrien
23390282SobrienACPI_STATUS
23490282SobrienAcpiPsCompleteThisOp (
23518334Speter    ACPI_WALK_STATE         *WalkState,
236169699Skan    ACPI_PARSE_OBJECT       *Op);
23790282Sobrien
238169699SkanACPI_STATUS
23990282SobrienAcpiPsNextParseState (
24018334Speter    ACPI_WALK_STATE         *WalkState,
24118334Speter    ACPI_PARSE_OBJECT       *Op,
24218334Speter    ACPI_STATUS             CallbackStatus);
24318334Speter
24418334Speter
245132734Skan/*
24690282Sobrien * psloop - main parse loop
24790282Sobrien */
24890282SobrienACPI_STATUS
249132734SkanAcpiPsParseLoop (
250132734Skan    ACPI_WALK_STATE         *WalkState);
251132734Skan
252132734Skan
253132734Skan/*
254132734Skan * psscope - Scope stack management routines
255132734Skan */
256132734SkanACPI_STATUS
25718334SpeterAcpiPsInitScope (
25818334Speter    ACPI_PARSE_STATE        *ParserState,
25918334Speter    ACPI_PARSE_OBJECT       *Root);
26018334Speter
26118334SpeterACPI_PARSE_OBJECT *
26218334SpeterAcpiPsGetParentScope (
263169699Skan    ACPI_PARSE_STATE        *state);
264169699Skan
26518334SpeterBOOLEAN
26618334SpeterAcpiPsHasCompletedScope (
26718334Speter    ACPI_PARSE_STATE        *ParserState);
26818334Speter
26918334Spetervoid
27018334SpeterAcpiPsPopScope (
27118334Speter    ACPI_PARSE_STATE        *ParserState,
27218334Speter    ACPI_PARSE_OBJECT       **Op,
27318334Speter    UINT32                  *ArgList,
27418334Speter    UINT32                  *ArgCount);
27518334Speter
27618334SpeterACPI_STATUS
27718334SpeterAcpiPsPushScope (
27818334Speter    ACPI_PARSE_STATE        *ParserState,
27918334Speter    ACPI_PARSE_OBJECT       *Op,
28018334Speter    UINT32                  RemainingArgs,
28152558Sobrien    UINT32                  ArgCount);
28252558Sobrien
283169699Skanvoid
28452558SobrienAcpiPsCleanupScope (
285169699Skan    ACPI_PARSE_STATE        *state);
28652558Sobrien
28796289Sobrien
28896289Sobrien/*
28996289Sobrien * pstree - parse tree manipulation routines
29096289Sobrien */
29196289Sobrienvoid
29218334SpeterAcpiPsAppendArg(
29318334Speter    ACPI_PARSE_OBJECT       *op,
29418334Speter    ACPI_PARSE_OBJECT       *arg);
29518334Speter
29618334SpeterACPI_PARSE_OBJECT*
29718334SpeterAcpiPsFind (
298132734Skan    ACPI_PARSE_OBJECT       *Scope,
29918334Speter    char                    *Path,
300132734Skan    UINT16                  Opcode,
301132734Skan    UINT32                  Create);
302132734Skan
303132734SkanACPI_PARSE_OBJECT *
304132734SkanAcpiPsGetArg(
305169699Skan    ACPI_PARSE_OBJECT       *op,
306169699Skan    UINT32                   argn);
307169699Skan
308169699SkanACPI_PARSE_OBJECT *
309169699SkanAcpiPsGetDepthNext (
310169699Skan    ACPI_PARSE_OBJECT       *Origin,
311169699Skan    ACPI_PARSE_OBJECT       *Op);
312169699Skan
313117414Skan
314117414Skan/*
315117414Skan * pswalk - parse tree walk routines
316117414Skan */
31718334SpeterACPI_STATUS
31818334SpeterAcpiPsWalkParsedAml (
31918334Speter    ACPI_PARSE_OBJECT       *StartOp,
32018334Speter    ACPI_PARSE_OBJECT       *EndOp,
32118334Speter    ACPI_OPERAND_OBJECT     *MthDesc,
32250615Sobrien    ACPI_NAMESPACE_NODE     *StartNode,
32350615Sobrien    ACPI_OPERAND_OBJECT     **Params,
32450615Sobrien    ACPI_OPERAND_OBJECT     **CallerReturnDesc,
32550615Sobrien    ACPI_OWNER_ID           OwnerId,
32650615Sobrien    ACPI_PARSE_DOWNWARDS    DescendingCallback,
32750615Sobrien    ACPI_PARSE_UPWARDS      AscendingCallback);
32850615Sobrien
32950615SobrienACPI_STATUS
33050615SobrienAcpiPsGetNextWalkOp (
33190282Sobrien    ACPI_WALK_STATE         *WalkState,
33290282Sobrien    ACPI_PARSE_OBJECT       *Op,
33390282Sobrien    ACPI_PARSE_UPWARDS      AscendingCallback);
33490282Sobrien
33590282SobrienACPI_STATUS
33690282SobrienAcpiPsDeleteCompletedOp (
33790282Sobrien    ACPI_WALK_STATE         *WalkState);
33890282Sobrien
33990282Sobrienvoid
34090282SobrienAcpiPsDeleteParseTree (
34190282Sobrien    ACPI_PARSE_OBJECT       *root);
34290282Sobrien
34350615Sobrien
34490282Sobrien/*
34590282Sobrien * psutils - parser utilities
34690282Sobrien */
34790282SobrienACPI_PARSE_OBJECT *
34890282SobrienAcpiPsCreateScopeOp (
349169699Skan    void);
350169699Skan
351169699Skanvoid
352169699SkanAcpiPsInitOp (
353117414Skan    ACPI_PARSE_OBJECT       *op,
354169699Skan    UINT16                  opcode);
355169699Skan
356117414SkanACPI_PARSE_OBJECT *
357169699SkanAcpiPsAllocOp (
358117414Skan    UINT16                  opcode);
35990282Sobrien
36090282Sobrienvoid
36190282SobrienAcpiPsFreeOp (
36290282Sobrien    ACPI_PARSE_OBJECT       *Op);
36390282Sobrien
36490282SobrienBOOLEAN
36590282SobrienAcpiPsIsLeadingChar (
36690282Sobrien    UINT32                  c);
36790282Sobrien
36890282SobrienBOOLEAN
36990282SobrienAcpiPsIsPrefixChar (
37090282Sobrien    UINT32                  c);
37190282Sobrien
37250615SobrienUINT32
37350615SobrienAcpiPsGetName(
37490282Sobrien    ACPI_PARSE_OBJECT       *op);
37590282Sobrien
37690282Sobrienvoid
37750615SobrienAcpiPsSetName(
37850615Sobrien    ACPI_PARSE_OBJECT       *op,
37950615Sobrien    UINT32                  name);
380132734Skan
381132734Skan
382132734Skan/*
38352558Sobrien * psdump - display parser tree
38452558Sobrien */
38552558SobrienUINT32
38690282SobrienAcpiPsSprintPath (
387169699Skan    char                    *BufferStart,
388169699Skan    UINT32                  BufferSize,
38990282Sobrien    ACPI_PARSE_OBJECT       *Op);
39090282Sobrien
391169699SkanUINT32
39290282SobrienAcpiPsSprintOp (
39390282Sobrien    char                    *BufferStart,
394132734Skan    UINT32                  BufferSize,
395132734Skan    ACPI_PARSE_OBJECT       *Op);
39618334Speter
397132734Skanvoid
398132734SkanAcpiPsShow (
399169699Skan    ACPI_PARSE_OBJECT       *op);
400169699Skan
40118334Speter
402132734Skan#endif /* __ACPARSER_H__ */
403132734Skan