167754Smsmith/******************************************************************************
267754Smsmith *
367754Smsmith * Module Name: acparser.h - AML Parser subcomponent prototypes and defines
467754Smsmith *
567754Smsmith *****************************************************************************/
667754Smsmith
7217365Sjkim/*
8306536Sjkim * Copyright (C) 2000 - 2016, Intel Corp.
970243Smsmith * All rights reserved.
1067754Smsmith *
11217365Sjkim * Redistribution and use in source and binary forms, with or without
12217365Sjkim * modification, are permitted provided that the following conditions
13217365Sjkim * are met:
14217365Sjkim * 1. Redistributions of source code must retain the above copyright
15217365Sjkim *    notice, this list of conditions, and the following disclaimer,
16217365Sjkim *    without modification.
17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18217365Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
19217365Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
20217365Sjkim *    including a substantially similar Disclaimer requirement for further
21217365Sjkim *    binary redistribution.
22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
23217365Sjkim *    of any contributors may be used to endorse or promote products derived
24217365Sjkim *    from this software without specific prior written permission.
2567754Smsmith *
26217365Sjkim * Alternatively, this software may be distributed under the terms of the
27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
28217365Sjkim * Software Foundation.
2967754Smsmith *
30217365Sjkim * NO WARRANTY
31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41217365Sjkim * POSSIBILITY OF SUCH DAMAGES.
42217365Sjkim */
4367754Smsmith
4467754Smsmith#ifndef __ACPARSER_H__
4567754Smsmith#define __ACPARSER_H__
4667754Smsmith
4767754Smsmith
4887031Smsmith#define OP_HAS_RETURN_VALUE             1
4967754Smsmith
50167802Sjkim/* Variable number of arguments. This field must be 32 bits */
5167754Smsmith
5287031Smsmith#define ACPI_VAR_ARGS                   ACPI_UINT32_MAX
5367754Smsmith
5467754Smsmith
5567754Smsmith#define ACPI_PARSE_DELETE_TREE          0x0001
5667754Smsmith#define ACPI_PARSE_NO_TREE_DELETE       0x0000
5767754Smsmith#define ACPI_PARSE_TREE_MASK            0x0001
5867754Smsmith
5967754Smsmith#define ACPI_PARSE_LOAD_PASS1           0x0010
6067754Smsmith#define ACPI_PARSE_LOAD_PASS2           0x0020
6167754Smsmith#define ACPI_PARSE_EXECUTE              0x0030
6267754Smsmith#define ACPI_PARSE_MODE_MASK            0x0030
6367754Smsmith
64104470Siwasaki#define ACPI_PARSE_DEFERRED_OP          0x0100
65151937Sjkim#define ACPI_PARSE_DISASSEMBLE          0x0200
6667754Smsmith
67197104Sjkim#define ACPI_PARSE_MODULE_LEVEL         0x0400
6887031Smsmith
6967754Smsmith/******************************************************************************
7067754Smsmith *
7167754Smsmith * Parser interfaces
7267754Smsmith *
7367754Smsmith *****************************************************************************/
7467754Smsmith
75284460Sjkimextern const UINT8      AcpiGbl_ShortOpIndex[];
76284460Sjkimextern const UINT8      AcpiGbl_LongOpIndex[];
7767754Smsmith
78284460Sjkim
79151937Sjkim/*
80151937Sjkim * psxface - Parser external interfaces
81151937Sjkim */
82151937SjkimACPI_STATUS
83151937SjkimAcpiPsExecuteMethod (
84167802Sjkim    ACPI_EVALUATE_INFO      *Info);
8567754Smsmith
86151937Sjkim
87151937Sjkim/*
88151937Sjkim * psargs - Parse AML opcode arguments
89151937Sjkim */
9067754SmsmithUINT8 *
9167754SmsmithAcpiPsGetNextPackageEnd (
9267754Smsmith    ACPI_PARSE_STATE        *ParserState);
9367754Smsmith
94114237Snjlchar *
9567754SmsmithAcpiPsGetNextNamestring (
9667754Smsmith    ACPI_PARSE_STATE        *ParserState);
9767754Smsmith
9867754Smsmithvoid
9967754SmsmithAcpiPsGetNextSimpleArg (
10067754Smsmith    ACPI_PARSE_STATE        *ParserState,
10187031Smsmith    UINT32                  ArgType,
10287031Smsmith    ACPI_PARSE_OBJECT       *Arg);
10367754Smsmith
104102550SiwasakiACPI_STATUS
10567754SmsmithAcpiPsGetNextNamepath (
106107325Siwasaki    ACPI_WALK_STATE         *WalkState,
10767754Smsmith    ACPI_PARSE_STATE        *ParserState,
10867754Smsmith    ACPI_PARSE_OBJECT       *Arg,
109306536Sjkim    BOOLEAN                 PossibleMethodCall);
11067754Smsmith
111306536Sjkim/* Values for BOOLEAN above */
112306536Sjkim
113306536Sjkim#define ACPI_NOT_METHOD_CALL            FALSE
114306536Sjkim#define ACPI_POSSIBLE_METHOD_CALL       TRUE
115306536Sjkim
116102550SiwasakiACPI_STATUS
11767754SmsmithAcpiPsGetNextArg (
118107325Siwasaki    ACPI_WALK_STATE         *WalkState,
11967754Smsmith    ACPI_PARSE_STATE        *ParserState,
12067754Smsmith    UINT32                  ArgType,
121102550Siwasaki    ACPI_PARSE_OBJECT       **ReturnArg);
12267754Smsmith
12367754Smsmith
124151937Sjkim/*
125151937Sjkim * psfind
126151937Sjkim */
12787031SmsmithACPI_PARSE_OBJECT *
12887031SmsmithAcpiPsFindName (
12987031Smsmith    ACPI_PARSE_OBJECT       *Scope,
13087031Smsmith    UINT32                  Name,
13187031Smsmith    UINT32                  Opcode);
13287031Smsmith
13387031SmsmithACPI_PARSE_OBJECT*
13487031SmsmithAcpiPsGetParent (
13587031Smsmith    ACPI_PARSE_OBJECT       *Op);
13687031Smsmith
13787031Smsmith
138151937Sjkim/*
139245582Sjkim * psobject - support for parse object processing
140151937Sjkim */
141245582SjkimACPI_STATUS
142245582SjkimAcpiPsBuildNamedOp (
143245582Sjkim    ACPI_WALK_STATE         *WalkState,
144245582Sjkim    UINT8                   *AmlOpStart,
145245582Sjkim    ACPI_PARSE_OBJECT       *UnnamedOp,
146245582Sjkim    ACPI_PARSE_OBJECT       **Op);
147245582Sjkim
148245582SjkimACPI_STATUS
149245582SjkimAcpiPsCreateOp (
150245582Sjkim    ACPI_WALK_STATE         *WalkState,
151245582Sjkim    UINT8                   *AmlOpStart,
152245582Sjkim    ACPI_PARSE_OBJECT       **NewOp);
153245582Sjkim
154245582SjkimACPI_STATUS
155245582SjkimAcpiPsCompleteOp (
156245582Sjkim    ACPI_WALK_STATE         *WalkState,
157245582Sjkim    ACPI_PARSE_OBJECT       **Op,
158245582Sjkim    ACPI_STATUS             Status);
159245582Sjkim
160245582SjkimACPI_STATUS
161245582SjkimAcpiPsCompleteFinalOp (
162245582Sjkim    ACPI_WALK_STATE         *WalkState,
163245582Sjkim    ACPI_PARSE_OBJECT       *Op,
164245582Sjkim    ACPI_STATUS             Status);
165245582Sjkim
166245582Sjkim
167245582Sjkim/*
168245582Sjkim * psopinfo - AML Opcode information
169245582Sjkim */
17083174Smsmithconst ACPI_OPCODE_INFO *
17167754SmsmithAcpiPsGetOpcodeInfo (
17267754Smsmith    UINT16                  Opcode);
17367754Smsmith
174306536Sjkimconst char *
17567754SmsmithAcpiPsGetOpcodeName (
17667754Smsmith    UINT16                  Opcode);
17767754Smsmith
178167802SjkimUINT8
179167802SjkimAcpiPsGetArgumentCount (
180167802Sjkim    UINT32                  OpType);
18167754Smsmith
182167802Sjkim
183151937Sjkim/*
184151937Sjkim * psparse - top level parsing routines
185151937Sjkim */
186151937SjkimACPI_STATUS
187151937SjkimAcpiPsParseAml (
188151937Sjkim    ACPI_WALK_STATE         *WalkState);
18967754Smsmith
19087031SmsmithUINT32
19187031SmsmithAcpiPsGetOpcodeSize (
19287031Smsmith    UINT32                  Opcode);
19387031Smsmith
194151937SjkimUINT16
195151937SjkimAcpiPsPeekOpcode (
196151937Sjkim    ACPI_PARSE_STATE        *state);
197151937Sjkim
198151937SjkimACPI_STATUS
19987031SmsmithAcpiPsCompleteThisOp (
20087031Smsmith    ACPI_WALK_STATE         *WalkState,
20187031Smsmith    ACPI_PARSE_OBJECT       *Op);
20287031Smsmith
20367754SmsmithACPI_STATUS
20487031SmsmithAcpiPsNextParseState (
20587031Smsmith    ACPI_WALK_STATE         *WalkState,
20687031Smsmith    ACPI_PARSE_OBJECT       *Op,
20787031Smsmith    ACPI_STATUS             CallbackStatus);
20887031Smsmith
20967754Smsmith
210151937Sjkim/*
211151937Sjkim * psloop - main parse loop
212151937Sjkim */
21367754SmsmithACPI_STATUS
21467754SmsmithAcpiPsParseLoop (
21567754Smsmith    ACPI_WALK_STATE         *WalkState);
21667754Smsmith
21767754Smsmith
218151937Sjkim/*
219151937Sjkim * psscope - Scope stack management routines
220151937Sjkim */
22167754SmsmithACPI_STATUS
22267754SmsmithAcpiPsInitScope (
22367754Smsmith    ACPI_PARSE_STATE        *ParserState,
22467754Smsmith    ACPI_PARSE_OBJECT       *Root);
22567754Smsmith
22667754SmsmithACPI_PARSE_OBJECT *
22767754SmsmithAcpiPsGetParentScope (
22867754Smsmith    ACPI_PARSE_STATE        *state);
22967754Smsmith
23067754SmsmithBOOLEAN
23167754SmsmithAcpiPsHasCompletedScope (
23267754Smsmith    ACPI_PARSE_STATE        *ParserState);
23367754Smsmith
23467754Smsmithvoid
23567754SmsmithAcpiPsPopScope (
23667754Smsmith    ACPI_PARSE_STATE        *ParserState,
23767754Smsmith    ACPI_PARSE_OBJECT       **Op,
23867754Smsmith    UINT32                  *ArgList,
23967754Smsmith    UINT32                  *ArgCount);
24067754Smsmith
24167754SmsmithACPI_STATUS
24267754SmsmithAcpiPsPushScope (
24367754Smsmith    ACPI_PARSE_STATE        *ParserState,
24467754Smsmith    ACPI_PARSE_OBJECT       *Op,
24567754Smsmith    UINT32                  RemainingArgs,
24667754Smsmith    UINT32                  ArgCount);
24767754Smsmith
24867754Smsmithvoid
24967754SmsmithAcpiPsCleanupScope (
25067754Smsmith    ACPI_PARSE_STATE        *state);
25167754Smsmith
25267754Smsmith
253151937Sjkim/*
254151937Sjkim * pstree - parse tree manipulation routines
255151937Sjkim */
25667754Smsmithvoid
25767754SmsmithAcpiPsAppendArg(
25867754Smsmith    ACPI_PARSE_OBJECT       *op,
25967754Smsmith    ACPI_PARSE_OBJECT       *arg);
26067754Smsmith
26167754SmsmithACPI_PARSE_OBJECT*
26267754SmsmithAcpiPsFind (
26367754Smsmith    ACPI_PARSE_OBJECT       *Scope,
264114237Snjl    char                    *Path,
26567754Smsmith    UINT16                  Opcode,
26667754Smsmith    UINT32                  Create);
26767754Smsmith
26867754SmsmithACPI_PARSE_OBJECT *
26967754SmsmithAcpiPsGetArg(
27067754Smsmith    ACPI_PARSE_OBJECT       *op,
27167754Smsmith    UINT32                   argn);
27267754Smsmith
27367754SmsmithACPI_PARSE_OBJECT *
27467754SmsmithAcpiPsGetDepthNext (
27567754Smsmith    ACPI_PARSE_OBJECT       *Origin,
27667754Smsmith    ACPI_PARSE_OBJECT       *Op);
27767754Smsmith
27867754Smsmith
279151937Sjkim/*
280151937Sjkim * pswalk - parse tree walk routines
281151937Sjkim */
28267754SmsmithACPI_STATUS
28367754SmsmithAcpiPsWalkParsedAml (
28467754Smsmith    ACPI_PARSE_OBJECT       *StartOp,
28567754Smsmith    ACPI_PARSE_OBJECT       *EndOp,
28667754Smsmith    ACPI_OPERAND_OBJECT     *MthDesc,
28767754Smsmith    ACPI_NAMESPACE_NODE     *StartNode,
28867754Smsmith    ACPI_OPERAND_OBJECT     **Params,
28967754Smsmith    ACPI_OPERAND_OBJECT     **CallerReturnDesc,
29067754Smsmith    ACPI_OWNER_ID           OwnerId,
29167754Smsmith    ACPI_PARSE_DOWNWARDS    DescendingCallback,
29267754Smsmith    ACPI_PARSE_UPWARDS      AscendingCallback);
29367754Smsmith
29467754SmsmithACPI_STATUS
29567754SmsmithAcpiPsGetNextWalkOp (
29667754Smsmith    ACPI_WALK_STATE         *WalkState,
29767754Smsmith    ACPI_PARSE_OBJECT       *Op,
29867754Smsmith    ACPI_PARSE_UPWARDS      AscendingCallback);
29967754Smsmith
30087031SmsmithACPI_STATUS
30187031SmsmithAcpiPsDeleteCompletedOp (
30287031Smsmith    ACPI_WALK_STATE         *WalkState);
30367754Smsmith
304151937Sjkimvoid
305151937SjkimAcpiPsDeleteParseTree (
306151937Sjkim    ACPI_PARSE_OBJECT       *root);
30787031Smsmith
30867754Smsmith
309151937Sjkim/*
310151937Sjkim * psutils - parser utilities
311151937Sjkim */
312100966SiwasakiACPI_PARSE_OBJECT *
313100966SiwasakiAcpiPsCreateScopeOp (
314306536Sjkim    UINT8                   *Aml);
315100966Siwasaki
31667754Smsmithvoid
31767754SmsmithAcpiPsInitOp (
31867754Smsmith    ACPI_PARSE_OBJECT       *op,
31967754Smsmith    UINT16                  opcode);
32067754Smsmith
32167754SmsmithACPI_PARSE_OBJECT *
32267754SmsmithAcpiPsAllocOp (
323306536Sjkim    UINT16                  Opcode,
324306536Sjkim    UINT8                   *Aml);
32567754Smsmith
32667754Smsmithvoid
32767754SmsmithAcpiPsFreeOp (
32867754Smsmith    ACPI_PARSE_OBJECT       *Op);
32967754Smsmith
33067754SmsmithBOOLEAN
33167754SmsmithAcpiPsIsLeadingChar (
33267754Smsmith    UINT32                  c);
33367754Smsmith
33467754SmsmithUINT32
33567754SmsmithAcpiPsGetName(
33667754Smsmith    ACPI_PARSE_OBJECT       *op);
33767754Smsmith
33867754Smsmithvoid
33967754SmsmithAcpiPsSetName(
34067754Smsmith    ACPI_PARSE_OBJECT       *op,
34167754Smsmith    UINT32                  name);
34267754Smsmith
34367754Smsmith
344151937Sjkim/*
345151937Sjkim * psdump - display parser tree
346151937Sjkim */
34767754SmsmithUINT32
34867754SmsmithAcpiPsSprintPath (
349114237Snjl    char                    *BufferStart,
35067754Smsmith    UINT32                  BufferSize,
35167754Smsmith    ACPI_PARSE_OBJECT       *Op);
35267754Smsmith
35367754SmsmithUINT32
35467754SmsmithAcpiPsSprintOp (
355114237Snjl    char                    *BufferStart,
35667754Smsmith    UINT32                  BufferSize,
35767754Smsmith    ACPI_PARSE_OBJECT       *Op);
35867754Smsmith
35967754Smsmithvoid
36067754SmsmithAcpiPsShow (
36167754Smsmith    ACPI_PARSE_OBJECT       *op);
36267754Smsmith
36367754Smsmith
36467754Smsmith#endif /* __ACPARSER_H__ */
365