179eafdd7SSascha Wildner NoEcho('
279eafdd7SSascha Wildner /******************************************************************************
379eafdd7SSascha Wildner  *
4c6400d37SSascha Wildner  * Module Name: aslrules.y - Main Bison/Yacc production rules
5d638c6eeSSascha Wildner  *                         - Keep this file synched with the
6d638c6eeSSascha Wildner  *                           CvParseOpBlockType function in cvcompiler.c
779eafdd7SSascha Wildner  *
879eafdd7SSascha Wildner  *****************************************************************************/
979eafdd7SSascha Wildner 
10b4315fc7SSascha Wildner /******************************************************************************
11b4315fc7SSascha Wildner  *
12b4315fc7SSascha Wildner  * 1. Copyright Notice
13b4315fc7SSascha Wildner  *
14*383048acSSascha Wildner  * Some or all of this work - Copyright (c) 1999 - 2021, Intel Corp.
1579eafdd7SSascha Wildner  * All rights reserved.
1679eafdd7SSascha Wildner  *
17b4315fc7SSascha Wildner  * 2. License
18b4315fc7SSascha Wildner  *
19b4315fc7SSascha Wildner  * 2.1. This is your license from Intel Corp. under its intellectual property
20b4315fc7SSascha Wildner  * rights. You may have additional license terms from the party that provided
21b4315fc7SSascha Wildner  * you this software, covering your right to use that party's intellectual
22b4315fc7SSascha Wildner  * property rights.
23b4315fc7SSascha Wildner  *
24b4315fc7SSascha Wildner  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
25b4315fc7SSascha Wildner  * copy of the source code appearing in this file ("Covered Code") an
26b4315fc7SSascha Wildner  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
27b4315fc7SSascha Wildner  * base code distributed originally by Intel ("Original Intel Code") to copy,
28b4315fc7SSascha Wildner  * make derivatives, distribute, use and display any portion of the Covered
29b4315fc7SSascha Wildner  * Code in any form, with the right to sublicense such rights; and
30b4315fc7SSascha Wildner  *
31b4315fc7SSascha Wildner  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
32b4315fc7SSascha Wildner  * license (with the right to sublicense), under only those claims of Intel
33b4315fc7SSascha Wildner  * patents that are infringed by the Original Intel Code, to make, use, sell,
34b4315fc7SSascha Wildner  * offer to sell, and import the Covered Code and derivative works thereof
35b4315fc7SSascha Wildner  * solely to the minimum extent necessary to exercise the above copyright
36b4315fc7SSascha Wildner  * license, and in no event shall the patent license extend to any additions
37b4315fc7SSascha Wildner  * to or modifications of the Original Intel Code. No other license or right
38b4315fc7SSascha Wildner  * is granted directly or by implication, estoppel or otherwise;
39b4315fc7SSascha Wildner  *
40b4315fc7SSascha Wildner  * The above copyright and patent license is granted only if the following
41b4315fc7SSascha Wildner  * conditions are met:
42b4315fc7SSascha Wildner  *
43b4315fc7SSascha Wildner  * 3. Conditions
44b4315fc7SSascha Wildner  *
45b4315fc7SSascha Wildner  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
46b4315fc7SSascha Wildner  * Redistribution of source code of any substantial portion of the Covered
47b4315fc7SSascha Wildner  * Code or modification with rights to further distribute source must include
48b4315fc7SSascha Wildner  * the above Copyright Notice, the above License, this list of Conditions,
49b4315fc7SSascha Wildner  * and the following Disclaimer and Export Compliance provision. In addition,
50b4315fc7SSascha Wildner  * Licensee must cause all Covered Code to which Licensee contributes to
51b4315fc7SSascha Wildner  * contain a file documenting the changes Licensee made to create that Covered
52b4315fc7SSascha Wildner  * Code and the date of any change. Licensee must include in that file the
53b4315fc7SSascha Wildner  * documentation of any changes made by any predecessor Licensee. Licensee
54b4315fc7SSascha Wildner  * must include a prominent statement that the modification is derived,
55b4315fc7SSascha Wildner  * directly or indirectly, from Original Intel Code.
56b4315fc7SSascha Wildner  *
57b4315fc7SSascha Wildner  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
58b4315fc7SSascha Wildner  * Redistribution of source code of any substantial portion of the Covered
59b4315fc7SSascha Wildner  * Code or modification without rights to further distribute source must
60b4315fc7SSascha Wildner  * include the following Disclaimer and Export Compliance provision in the
61b4315fc7SSascha Wildner  * documentation and/or other materials provided with distribution. In
62b4315fc7SSascha Wildner  * addition, Licensee may not authorize further sublicense of source of any
63b4315fc7SSascha Wildner  * portion of the Covered Code, and must include terms to the effect that the
64b4315fc7SSascha Wildner  * license from Licensee to its licensee is limited to the intellectual
65b4315fc7SSascha Wildner  * property embodied in the software Licensee provides to its licensee, and
66b4315fc7SSascha Wildner  * not to intellectual property embodied in modifications its licensee may
67b4315fc7SSascha Wildner  * make.
68b4315fc7SSascha Wildner  *
69b4315fc7SSascha Wildner  * 3.3. Redistribution of Executable. Redistribution in executable form of any
70b4315fc7SSascha Wildner  * substantial portion of the Covered Code or modification must reproduce the
71b4315fc7SSascha Wildner  * above Copyright Notice, and the following Disclaimer and Export Compliance
72b4315fc7SSascha Wildner  * provision in the documentation and/or other materials provided with the
73b4315fc7SSascha Wildner  * distribution.
74b4315fc7SSascha Wildner  *
75b4315fc7SSascha Wildner  * 3.4. Intel retains all right, title, and interest in and to the Original
76b4315fc7SSascha Wildner  * Intel Code.
77b4315fc7SSascha Wildner  *
78b4315fc7SSascha Wildner  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
79b4315fc7SSascha Wildner  * Intel shall be used in advertising or otherwise to promote the sale, use or
80b4315fc7SSascha Wildner  * other dealings in products derived from or relating to the Covered Code
81b4315fc7SSascha Wildner  * without prior written authorization from Intel.
82b4315fc7SSascha Wildner  *
83b4315fc7SSascha Wildner  * 4. Disclaimer and Export Compliance
84b4315fc7SSascha Wildner  *
85b4315fc7SSascha Wildner  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
86b4315fc7SSascha Wildner  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
87b4315fc7SSascha Wildner  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
88b4315fc7SSascha Wildner  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
89b4315fc7SSascha Wildner  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
90b4315fc7SSascha Wildner  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
91b4315fc7SSascha Wildner  * PARTICULAR PURPOSE.
92b4315fc7SSascha Wildner  *
93b4315fc7SSascha Wildner  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
94b4315fc7SSascha Wildner  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
95b4315fc7SSascha Wildner  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
96b4315fc7SSascha Wildner  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
97b4315fc7SSascha Wildner  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
98b4315fc7SSascha Wildner  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
99b4315fc7SSascha Wildner  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
100b4315fc7SSascha Wildner  * LIMITED REMEDY.
101b4315fc7SSascha Wildner  *
102b4315fc7SSascha Wildner  * 4.3. Licensee shall not export, either directly or indirectly, any of this
103b4315fc7SSascha Wildner  * software or system incorporating such software without first obtaining any
104b4315fc7SSascha Wildner  * required license or other approval from the U. S. Department of Commerce or
105b4315fc7SSascha Wildner  * any other agency or department of the United States Government. In the
106b4315fc7SSascha Wildner  * event Licensee exports any such software from the United States or
107b4315fc7SSascha Wildner  * re-exports any such software from a foreign destination, Licensee shall
108b4315fc7SSascha Wildner  * ensure that the distribution and export/re-export of the software is in
109b4315fc7SSascha Wildner  * compliance with all laws, regulations, orders, or other restrictions of the
110b4315fc7SSascha Wildner  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
111b4315fc7SSascha Wildner  * any of its subsidiaries will export/re-export any technical data, process,
112b4315fc7SSascha Wildner  * software, or service, directly or indirectly, to any country for which the
113b4315fc7SSascha Wildner  * United States government or any agency thereof requires an export license,
114b4315fc7SSascha Wildner  * other governmental approval, or letter of assurance, without first obtaining
115b4315fc7SSascha Wildner  * such license, approval or letter.
116b4315fc7SSascha Wildner  *
117b4315fc7SSascha Wildner  *****************************************************************************
118b4315fc7SSascha Wildner  *
119b4315fc7SSascha Wildner  * Alternatively, you may choose to be licensed under the terms of the
120b4315fc7SSascha Wildner  * following license:
121b4315fc7SSascha Wildner  *
12279eafdd7SSascha Wildner  * Redistribution and use in source and binary forms, with or without
12379eafdd7SSascha Wildner  * modification, are permitted provided that the following conditions
12479eafdd7SSascha Wildner  * are met:
12579eafdd7SSascha Wildner  * 1. Redistributions of source code must retain the above copyright
12679eafdd7SSascha Wildner  *    notice, this list of conditions, and the following disclaimer,
12779eafdd7SSascha Wildner  *    without modification.
12879eafdd7SSascha Wildner  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
12979eafdd7SSascha Wildner  *    substantially similar to the "NO WARRANTY" disclaimer below
13079eafdd7SSascha Wildner  *    ("Disclaimer") and any redistribution must be conditioned upon
13179eafdd7SSascha Wildner  *    including a substantially similar Disclaimer requirement for further
13279eafdd7SSascha Wildner  *    binary redistribution.
13379eafdd7SSascha Wildner  * 3. Neither the names of the above-listed copyright holders nor the names
13479eafdd7SSascha Wildner  *    of any contributors may be used to endorse or promote products derived
13579eafdd7SSascha Wildner  *    from this software without specific prior written permission.
13679eafdd7SSascha Wildner  *
137b4315fc7SSascha Wildner  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
138b4315fc7SSascha Wildner  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
139b4315fc7SSascha Wildner  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
140b4315fc7SSascha Wildner  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
141b4315fc7SSascha Wildner  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
142b4315fc7SSascha Wildner  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
143b4315fc7SSascha Wildner  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
144b4315fc7SSascha Wildner  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
145b4315fc7SSascha Wildner  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
146b4315fc7SSascha Wildner  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
147b4315fc7SSascha Wildner  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
148b4315fc7SSascha Wildner  *
149b4315fc7SSascha Wildner  * Alternatively, you may choose to be licensed under the terms of the
15079eafdd7SSascha Wildner  * GNU General Public License ("GPL") version 2 as published by the Free
15179eafdd7SSascha Wildner  * Software Foundation.
15279eafdd7SSascha Wildner  *
153b4315fc7SSascha Wildner  *****************************************************************************/
15479eafdd7SSascha Wildner 
15579eafdd7SSascha Wildner ')
15679eafdd7SSascha Wildner 
15779eafdd7SSascha Wildner /*******************************************************************************
15879eafdd7SSascha Wildner  *
159c6400d37SSascha Wildner  * ASL Root and Secondary Terms
16079eafdd7SSascha Wildner  *
16179eafdd7SSascha Wildner  ******************************************************************************/
16279eafdd7SSascha Wildner 
16379eafdd7SSascha Wildner /*
164c6400d37SSascha Wildner  * Root term. Allow multiple #line directives before the definition block
16579eafdd7SSascha Wildner  * to handle output from preprocessors
16679eafdd7SSascha Wildner  */
167820c5b08SSascha Wildner AslCode
1681093ca81SSascha Wildner     : DefinitionBlockList           {$<n>$ = TrLinkOpChildren (
1691093ca81SSascha Wildner                                         TrCreateLeafOp (PARSEOP_ASL_CODE),1, $1);}
17079eafdd7SSascha Wildner     | error                         {YYABORT; $$ = NULL;}
17179eafdd7SSascha Wildner     ;
17279eafdd7SSascha Wildner 
173820c5b08SSascha Wildner 
17479eafdd7SSascha Wildner /*
17579eafdd7SSascha Wildner  * Note concerning support for "module-level code".
17679eafdd7SSascha Wildner  *
17779eafdd7SSascha Wildner  * ACPI 1.0 allowed Type1 and Type2 executable opcodes outside of control
17879eafdd7SSascha Wildner  * methods (the so-called module-level code.) This support was explicitly
17979eafdd7SSascha Wildner  * removed in ACPI 2.0, but this type of code continues to be created by
18079eafdd7SSascha Wildner  * BIOS vendors. In order to support the disassembly and recompilation of
18179eafdd7SSascha Wildner  * such code (and the porting of ASL code to iASL), iASL supports this
18279eafdd7SSascha Wildner  * code in violation of the current ACPI specification.
18379eafdd7SSascha Wildner  *
18479eafdd7SSascha Wildner  * The grammar change to support module-level code is to revert the
18579eafdd7SSascha Wildner  * {ObjectList} portion of the DefinitionBlockTerm in ACPI 2.0 to the
18679eafdd7SSascha Wildner  * original use of {TermList} instead (see below.) This allows the use
18779eafdd7SSascha Wildner  * of Type1 and Type2 opcodes at module level.
1880d27ae55SSascha Wildner  *
1890d27ae55SSascha Wildner  * 04/2016: The module-level code is now allowed in the following terms:
1900d27ae55SSascha Wildner  * DeviceTerm, PowerResTerm, ProcessorTerm, ScopeTerm, ThermalZoneTerm.
1910d27ae55SSascha Wildner  * The ObjectList term is obsolete and has been removed.
19279eafdd7SSascha Wildner  */
19379eafdd7SSascha Wildner DefinitionBlockTerm
194a96e04f2SSascha Wildner     : PARSEOP_DEFINITION_BLOCK
1951093ca81SSascha Wildner         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafOp (PARSEOP_DEFINITION_BLOCK); COMMENT_CAPTURE_OFF;}
19679eafdd7SSascha Wildner         String ','
19779eafdd7SSascha Wildner         String ','
19879eafdd7SSascha Wildner         ByteConst ','
19979eafdd7SSascha Wildner         String ','
20079eafdd7SSascha Wildner         String ','
20179eafdd7SSascha Wildner         DWordConst
202cf6b3eb1SSascha Wildner         PARSEOP_CLOSE_PAREN         {TrSetOpIntegerWidth ($6,$8);
203cf6b3eb1SSascha Wildner                                         TrSetOpEndLineNumber ($<n>3); COMMENT_CAPTURE_ON;}
2041093ca81SSascha Wildner             '{' TermList '}'        {$$ = TrLinkOpChildren ($<n>3,7,
205277350a0SSascha Wildner                                         $4,$6,$8,$10,$12,$14,$18);}
20679eafdd7SSascha Wildner     ;
20779eafdd7SSascha Wildner 
208820c5b08SSascha Wildner DefinitionBlockList
209820c5b08SSascha Wildner     : DefinitionBlockTerm
210820c5b08SSascha Wildner     | DefinitionBlockTerm
2111093ca81SSascha Wildner         DefinitionBlockList         {$$ = TrLinkPeerOps (2, $1,$2);}
212820c5b08SSascha Wildner     ;
213820c5b08SSascha Wildner 
214a96e04f2SSascha Wildner 
215a96e04f2SSascha Wildner /******* Basic ASCII identifiers **************************************************/
216a96e04f2SSascha Wildner 
217277350a0SSascha Wildner /* Allow IO, DMA, IRQ Resource macro and FOR macro names to also be used as identifiers */
218277350a0SSascha Wildner 
219277350a0SSascha Wildner NameString
220277350a0SSascha Wildner     : NameSeg                       {}
2211093ca81SSascha Wildner     | PARSEOP_NAMESTRING            {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) $1);}
2221093ca81SSascha Wildner     | PARSEOP_IO                    {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IO");}
2231093ca81SSascha Wildner     | PARSEOP_DMA                   {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "DMA");}
2241093ca81SSascha Wildner     | PARSEOP_IRQ                   {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IRQ");}
2251093ca81SSascha Wildner     | PARSEOP_FOR                   {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "FOR");}
226277350a0SSascha Wildner     ;
227277350a0SSascha Wildner /*
228277350a0SSascha Wildner NameSeg
2291093ca81SSascha Wildner     : PARSEOP_NAMESEG               {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESEG, (ACPI_NATIVE_INT)
230277350a0SSascha Wildner                                         TrNormalizeNameSeg ($1));}
231277350a0SSascha Wildner     ;
232277350a0SSascha Wildner */
233277350a0SSascha Wildner 
234277350a0SSascha Wildner NameSeg
2351093ca81SSascha Wildner     : PARSEOP_NAMESEG               {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESEG,
236277350a0SSascha Wildner                                         (ACPI_NATIVE_INT) AslCompilerlval.s);}
237277350a0SSascha Wildner     ;
238277350a0SSascha Wildner 
239277350a0SSascha Wildner 
240a96e04f2SSascha Wildner /******* Fundamental argument/statement types ***********************************/
241a96e04f2SSascha Wildner 
242a96e04f2SSascha Wildner Term
243a96e04f2SSascha Wildner     : Object                        {}
244a96e04f2SSascha Wildner     | Type1Opcode                   {}
245a96e04f2SSascha Wildner     | Type2Opcode                   {}
2461093ca81SSascha Wildner     | Type2IntegerOpcode            {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
2471093ca81SSascha Wildner     | Type2StringOpcode             {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
248a96e04f2SSascha Wildner     | Type2BufferOpcode             {}
249a96e04f2SSascha Wildner     | Type2BufferOrStringOpcode     {}
250a96e04f2SSascha Wildner     | error                         {$$ = AslDoError(); yyclearin;}
251a96e04f2SSascha Wildner     ;
252a96e04f2SSascha Wildner 
253c6400d37SSascha Wildner SuperName
254a96e04f2SSascha Wildner     : SimpleName                    {}
255c6400d37SSascha Wildner     | DebugTerm                     {}
256c6400d37SSascha Wildner     | Type6Opcode                   {}
257277350a0SSascha Wildner     ;
258c6400d37SSascha Wildner 
259c6400d37SSascha Wildner Target
2601093ca81SSascha Wildner     :                               {$$ = TrCreateNullTargetOp ();} /* Placeholder is a ZeroOp object */
2611093ca81SSascha Wildner     | ','                           {$$ = TrCreateNullTargetOp ();} /* Placeholder is a ZeroOp object */
2621093ca81SSascha Wildner     | ',' SuperName                 {$$ = TrSetOpFlags ($2, OP_IS_TARGET);}
263c6400d37SSascha Wildner     ;
264c6400d37SSascha Wildner 
265a96e04f2SSascha Wildner RequiredTarget
2661093ca81SSascha Wildner     : ',' SuperName                 {$$ = TrSetOpFlags ($2, OP_IS_TARGET);}
267a96e04f2SSascha Wildner     ;
268a96e04f2SSascha Wildner 
269c6400d37SSascha Wildner TermArg
2701093ca81SSascha Wildner     : SimpleName                    {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);}
2711093ca81SSascha Wildner     | Type2Opcode                   {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);}
2721093ca81SSascha Wildner     | DataObject                    {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);}
273a96e04f2SSascha Wildner     | PARSEOP_OPEN_PAREN
274a96e04f2SSascha Wildner         TermArg
2751093ca81SSascha Wildner         PARSEOP_CLOSE_PAREN         {$$ = TrSetOpFlags ($2, OP_IS_TERM_ARG);}
276c6400d37SSascha Wildner     ;
277c6400d37SSascha Wildner 
2782e2672b8SSascha Wildner /*
279c6400d37SSascha Wildner  NOTE: Removed from TermArg due to reduce/reduce conflicts:
2801093ca81SSascha Wildner     | Type2IntegerOpcode            {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);}
2811093ca81SSascha Wildner     | Type2StringOpcode             {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);}
2821093ca81SSascha Wildner     | Type2BufferOpcode             {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);}
2831093ca81SSascha Wildner     | Type2BufferOrStringOpcode     {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);}
284c6400d37SSascha Wildner 
2852e2672b8SSascha Wildner */
2862e2672b8SSascha Wildner 
287c6400d37SSascha Wildner MethodInvocationTerm
288a96e04f2SSascha Wildner     : NameString
2891093ca81SSascha Wildner         PARSEOP_OPEN_PAREN          {TrSetOpIntegerValue (PARSEOP_METHODCALL, $1); COMMENT_CAPTURE_OFF;}
290a96e04f2SSascha Wildner         ArgList
2911093ca81SSascha Wildner         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildOp ($1,$4); COMMENT_CAPTURE_ON;}
2922e2672b8SSascha Wildner     ;
2932e2672b8SSascha Wildner 
294c6400d37SSascha Wildner /* OptionalCount must appear before ByteList or an incorrect reduction will result */
2952e2672b8SSascha Wildner 
296c6400d37SSascha Wildner OptionalCount
2971093ca81SSascha Wildner     :                               {$$ = TrCreateLeafOp (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
2981093ca81SSascha Wildner     | ','                           {$$ = TrCreateLeafOp (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
299c6400d37SSascha Wildner     | ',' TermArg                   {$$ = $2;}
300c6400d37SSascha Wildner     ;
3012e2672b8SSascha Wildner 
302277350a0SSascha Wildner /*
303277350a0SSascha Wildner  * Data count for buffers and packages (byte count for buffers,
304277350a0SSascha Wildner  * element count for packages).
305277350a0SSascha Wildner  */
306277350a0SSascha Wildner OptionalDataCount
307277350a0SSascha Wildner 
308277350a0SSascha Wildner         /* Legacy ASL */
309277350a0SSascha Wildner     :                               {$$ = NULL;}
310a96e04f2SSascha Wildner     | PARSEOP_OPEN_PAREN
311a96e04f2SSascha Wildner         TermArg
312a96e04f2SSascha Wildner         PARSEOP_CLOSE_PAREN         {$$ = $2;}
313a96e04f2SSascha Wildner     | PARSEOP_OPEN_PAREN
314a96e04f2SSascha Wildner         PARSEOP_CLOSE_PAREN         {$$ = NULL;}
315277350a0SSascha Wildner 
316277350a0SSascha Wildner         /* C-style (ASL+) -- adds equals term */
317277350a0SSascha Wildner 
318277350a0SSascha Wildner     |  PARSEOP_EXP_EQUALS           {$$ = NULL;}
319277350a0SSascha Wildner 
320a96e04f2SSascha Wildner     | PARSEOP_OPEN_PAREN
321a96e04f2SSascha Wildner         TermArg
322a96e04f2SSascha Wildner         PARSEOP_CLOSE_PAREN
323277350a0SSascha Wildner         PARSEOP_EXP_EQUALS          {$$ = $2;}
324277350a0SSascha Wildner 
325a96e04f2SSascha Wildner     | PARSEOP_OPEN_PAREN
326a96e04f2SSascha Wildner         PARSEOP_CLOSE_PAREN
327a96e04f2SSascha Wildner         String
328277350a0SSascha Wildner         PARSEOP_EXP_EQUALS          {$$ = NULL;}
3292e2672b8SSascha Wildner     ;
3302e2672b8SSascha Wildner 
3312e2672b8SSascha Wildner 
332c6400d37SSascha Wildner /******* List Terms **************************************************/
33379eafdd7SSascha Wildner 
334a96e04f2SSascha Wildner     /* ACPI 3.0 -- allow semicolons between terms */
335a96e04f2SSascha Wildner 
336a96e04f2SSascha Wildner TermList
337a96e04f2SSascha Wildner     :                               {$$ = NULL;}
3381093ca81SSascha Wildner     | TermList Term                 {$$ = TrLinkPeerOp (
3391093ca81SSascha Wildner                                         TrSetOpFlags ($1, OP_RESULT_NOT_USED),$2);}
3401093ca81SSascha Wildner     | TermList Term ';'             {$$ = TrLinkPeerOp (
3411093ca81SSascha Wildner                                         TrSetOpFlags ($1, OP_RESULT_NOT_USED),$2);}
3421093ca81SSascha Wildner     | TermList ';' Term             {$$ = TrLinkPeerOp (
3431093ca81SSascha Wildner                                         TrSetOpFlags ($1, OP_RESULT_NOT_USED),$3);}
3441093ca81SSascha Wildner     | TermList ';' Term ';'         {$$ = TrLinkPeerOp (
3451093ca81SSascha Wildner                                         TrSetOpFlags ($1, OP_RESULT_NOT_USED),$3);}
346a96e04f2SSascha Wildner     ;
347a96e04f2SSascha Wildner 
348c6400d37SSascha Wildner ArgList
34979eafdd7SSascha Wildner     :                               {$$ = NULL;}
350c6400d37SSascha Wildner     | TermArg
351c6400d37SSascha Wildner     | ArgList ','                   /* Allows a trailing comma at list end */
352c6400d37SSascha Wildner     | ArgList ','
3531093ca81SSascha Wildner         TermArg                     {$$ = TrLinkPeerOp ($1,$3);}
35479eafdd7SSascha Wildner     ;
35579eafdd7SSascha Wildner 
356c6400d37SSascha Wildner ByteList
357c6400d37SSascha Wildner     :                               {$$ = NULL;}
358c6400d37SSascha Wildner     | ByteConstExpr
359c6400d37SSascha Wildner     | ByteList ','                  /* Allows a trailing comma at list end */
360c6400d37SSascha Wildner     | ByteList ','
3611093ca81SSascha Wildner         ByteConstExpr               {$$ = TrLinkPeerOp ($1,$3);}
36279eafdd7SSascha Wildner     ;
36379eafdd7SSascha Wildner 
364c6400d37SSascha Wildner DWordList
365c6400d37SSascha Wildner     :                               {$$ = NULL;}
366c6400d37SSascha Wildner     | DWordConstExpr
367c6400d37SSascha Wildner     | DWordList ','                 /* Allows a trailing comma at list end */
368c6400d37SSascha Wildner     | DWordList ','
3691093ca81SSascha Wildner         DWordConstExpr              {$$ = TrLinkPeerOp ($1,$3);}
370c6400d37SSascha Wildner     ;
371c6400d37SSascha Wildner 
372c6400d37SSascha Wildner FieldUnitList
373c6400d37SSascha Wildner     :                               {$$ = NULL;}
374c6400d37SSascha Wildner     | FieldUnit
375c6400d37SSascha Wildner     | FieldUnitList ','             /* Allows a trailing comma at list end */
376c6400d37SSascha Wildner     | FieldUnitList ','
3771093ca81SSascha Wildner         FieldUnit                   {$$ = TrLinkPeerOp ($1,$3);}
378c6400d37SSascha Wildner     ;
379c6400d37SSascha Wildner 
380c6400d37SSascha Wildner FieldUnit
381c6400d37SSascha Wildner     : FieldUnitEntry                {}
382c6400d37SSascha Wildner     | OffsetTerm                    {}
383c6400d37SSascha Wildner     | AccessAsTerm                  {}
384c6400d37SSascha Wildner     | ConnectionTerm                {}
385c6400d37SSascha Wildner     ;
386c6400d37SSascha Wildner 
387c6400d37SSascha Wildner FieldUnitEntry
3881093ca81SSascha Wildner     : ',' AmlPackageLengthTerm      {$$ = TrCreateOp (PARSEOP_RESERVED_BYTES,1,$2);}
389c6400d37SSascha Wildner     | NameSeg ','
3901093ca81SSascha Wildner         AmlPackageLengthTerm        {$$ = TrLinkChildOp ($1,$3);}
39179eafdd7SSascha Wildner     ;
39279eafdd7SSascha Wildner 
39379eafdd7SSascha Wildner Object
39479eafdd7SSascha Wildner     : CompilerDirective             {}
39579eafdd7SSascha Wildner     | NamedObject                   {}
39679eafdd7SSascha Wildner     | NameSpaceModifier             {}
3971093ca81SSascha Wildner /*    | StructureTerm                 {} */
39879eafdd7SSascha Wildner     ;
39979eafdd7SSascha Wildner 
400c6400d37SSascha Wildner PackageList
40179eafdd7SSascha Wildner     :                               {$$ = NULL;}
402c6400d37SSascha Wildner     | PackageElement
403c6400d37SSascha Wildner     | PackageList ','               /* Allows a trailing comma at list end */
404c6400d37SSascha Wildner     | PackageList ','
4051093ca81SSascha Wildner         PackageElement              {$$ = TrLinkPeerOp ($1,$3);}
40679eafdd7SSascha Wildner     ;
40779eafdd7SSascha Wildner 
408c6400d37SSascha Wildner PackageElement
409c6400d37SSascha Wildner     : DataObject                    {}
410c6400d37SSascha Wildner     | NameString                    {}
41179eafdd7SSascha Wildner     ;
41279eafdd7SSascha Wildner 
41379eafdd7SSascha Wildner     /* Rules for specifying the type of one method argument or return value */
41479eafdd7SSascha Wildner 
41579eafdd7SSascha Wildner ParameterTypePackage
41679eafdd7SSascha Wildner     :                               {$$ = NULL;}
41779eafdd7SSascha Wildner     | ObjectTypeKeyword             {$$ = $1;}
41879eafdd7SSascha Wildner     | ParameterTypePackage ','
4191093ca81SSascha Wildner         ObjectTypeKeyword           {$$ = TrLinkPeerOps (2,$1,$3);}
42079eafdd7SSascha Wildner     ;
42179eafdd7SSascha Wildner 
42279eafdd7SSascha Wildner ParameterTypePackageList
42379eafdd7SSascha Wildner     :                               {$$ = NULL;}
424ff3cb46dSSascha Wildner     | ObjectTypeKeyword             {$$ = TrLinkOpChildren (
425ff3cb46dSSascha Wildner                                         TrCreateLeafOp (PARSEOP_DEFAULT_ARG),1,$1);}
426ff3cb46dSSascha Wildner     | '{' ParameterTypePackage '}'  {$$ = TrLinkOpChildren (
427ff3cb46dSSascha Wildner                                         TrCreateLeafOp (PARSEOP_DEFAULT_ARG),1,$2);}
42879eafdd7SSascha Wildner     ;
42979eafdd7SSascha Wildner 
430ff3cb46dSSascha Wildner 
43179eafdd7SSascha Wildner OptionalParameterTypePackage
432ff3cb46dSSascha Wildner     :                               {$$ = NULL;}
433ff3cb46dSSascha Wildner     | ',' ParameterTypePackageList  {$$ = $2;}
43479eafdd7SSascha Wildner     ;
43579eafdd7SSascha Wildner 
43679eafdd7SSascha Wildner     /* Rules for specifying the types for method arguments */
43779eafdd7SSascha Wildner 
43879eafdd7SSascha Wildner ParameterTypesPackage
43979eafdd7SSascha Wildner     : ParameterTypePackageList      {$$ = $1;}
44079eafdd7SSascha Wildner     | ParameterTypesPackage ','
4411093ca81SSascha Wildner         ParameterTypePackageList    {$$ = TrLinkPeerOps (2,$1,$3);}
44279eafdd7SSascha Wildner     ;
44379eafdd7SSascha Wildner 
44479eafdd7SSascha Wildner ParameterTypesPackageList
44579eafdd7SSascha Wildner     :                               {$$ = NULL;}
446ff3cb46dSSascha Wildner     | ObjectTypeKeyword             {$$ = TrLinkOpChildren (
447ff3cb46dSSascha Wildner                                         TrCreateLeafOp (PARSEOP_DEFAULT_ARG),1,$1);}
448ff3cb46dSSascha Wildner     | '{' ParameterTypesPackage '}' {$$ = TrLinkOpChildren (
449ff3cb46dSSascha Wildner                                         TrCreateLeafOp (PARSEOP_DEFAULT_ARG),1,$2);}
45079eafdd7SSascha Wildner     ;
45179eafdd7SSascha Wildner 
45279eafdd7SSascha Wildner OptionalParameterTypesPackage
453ff3cb46dSSascha Wildner     :                               {$$ = NULL;}
454ff3cb46dSSascha Wildner     | ',' ParameterTypesPackageList {$$ = $2;}
45579eafdd7SSascha Wildner     ;
45679eafdd7SSascha Wildner 
457c6400d37SSascha Wildner /*
458c6400d37SSascha Wildner  * Case-Default list; allow only one Default term and unlimited Case terms
459c6400d37SSascha Wildner  */
460c6400d37SSascha Wildner CaseDefaultTermList
461c6400d37SSascha Wildner     :                               {$$ = NULL;}
462c6400d37SSascha Wildner     | CaseTerm                      {}
463c6400d37SSascha Wildner     | DefaultTerm                   {}
464c6400d37SSascha Wildner     | CaseDefaultTermList
4651093ca81SSascha Wildner         CaseTerm                    {$$ = TrLinkPeerOp ($1,$2);}
466c6400d37SSascha Wildner     | CaseDefaultTermList
4671093ca81SSascha Wildner         DefaultTerm                 {$$ = TrLinkPeerOp ($1,$2);}
468c6400d37SSascha Wildner 
469c6400d37SSascha Wildner /* Original - attempts to force zero or one default term within the switch */
470c6400d37SSascha Wildner 
471c6400d37SSascha Wildner /*
472c6400d37SSascha Wildner CaseDefaultTermList
473c6400d37SSascha Wildner     :                               {$$ = NULL;}
474c6400d37SSascha Wildner     | CaseTermList
475c6400d37SSascha Wildner         DefaultTerm
4761093ca81SSascha Wildner         CaseTermList                {$$ = TrLinkPeerOp ($1,TrLinkPeerOp ($2, $3));}
477c6400d37SSascha Wildner     | CaseTermList
4781093ca81SSascha Wildner         CaseTerm                    {$$ = TrLinkPeerOp ($1,$2);}
479c6400d37SSascha Wildner     ;
480c6400d37SSascha Wildner 
481c6400d37SSascha Wildner CaseTermList
482c6400d37SSascha Wildner     :                               {$$ = NULL;}
483c6400d37SSascha Wildner     | CaseTerm                      {}
484c6400d37SSascha Wildner     | CaseTermList
4851093ca81SSascha Wildner         CaseTerm                    {$$ = TrLinkPeerOp ($1,$2);}
486c6400d37SSascha Wildner     ;
487c6400d37SSascha Wildner */
488c6400d37SSascha Wildner 
489c6400d37SSascha Wildner 
490c6400d37SSascha Wildner /*******************************************************************************
491c6400d37SSascha Wildner  *
492c6400d37SSascha Wildner  * ASL Data and Constant Terms
493c6400d37SSascha Wildner  *
494c6400d37SSascha Wildner  ******************************************************************************/
495c6400d37SSascha Wildner 
496c6400d37SSascha Wildner DataObject
497c6400d37SSascha Wildner     : BufferData                    {}
498c6400d37SSascha Wildner     | PackageData                   {}
499c6400d37SSascha Wildner     | IntegerData                   {}
500c6400d37SSascha Wildner     | StringData                    {}
501c6400d37SSascha Wildner     ;
502c6400d37SSascha Wildner 
503c6400d37SSascha Wildner BufferData
5041093ca81SSascha Wildner     : Type5Opcode                   {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
5051093ca81SSascha Wildner     | Type2BufferOrStringOpcode     {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
5061093ca81SSascha Wildner     | Type2BufferOpcode             {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
507c6400d37SSascha Wildner     | BufferTerm                    {}
508c6400d37SSascha Wildner     ;
509c6400d37SSascha Wildner 
510c6400d37SSascha Wildner PackageData
511c6400d37SSascha Wildner     : PackageTerm                   {}
512c6400d37SSascha Wildner     ;
513c6400d37SSascha Wildner 
514c6400d37SSascha Wildner IntegerData
5151093ca81SSascha Wildner     : Type2IntegerOpcode            {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
5161093ca81SSascha Wildner     | Type3Opcode                   {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
517c6400d37SSascha Wildner     | Integer                       {}
518c6400d37SSascha Wildner     | ConstTerm                     {}
519c6400d37SSascha Wildner     ;
520c6400d37SSascha Wildner 
521c6400d37SSascha Wildner StringData
5221093ca81SSascha Wildner     : Type2StringOpcode             {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
523c6400d37SSascha Wildner     | String                        {}
524c6400d37SSascha Wildner     ;
525c6400d37SSascha Wildner 
5262b57e6dfSSascha Wildner StringLiteral
5272b57e6dfSSascha Wildner     : String                        {}
5282b57e6dfSSascha Wildner     ;
5292b57e6dfSSascha Wildner 
530c6400d37SSascha Wildner ByteConst
5311093ca81SSascha Wildner     : Integer                       {$$ = TrSetOpIntegerValue (PARSEOP_BYTECONST, $1);}
532c6400d37SSascha Wildner     ;
533c6400d37SSascha Wildner 
534c6400d37SSascha Wildner WordConst
5351093ca81SSascha Wildner     : Integer                       {$$ = TrSetOpIntegerValue (PARSEOP_WORDCONST, $1);}
536c6400d37SSascha Wildner     ;
537c6400d37SSascha Wildner 
538c6400d37SSascha Wildner DWordConst
5391093ca81SSascha Wildner     : Integer                       {$$ = TrSetOpIntegerValue (PARSEOP_DWORDCONST, $1);}
540c6400d37SSascha Wildner     ;
541c6400d37SSascha Wildner 
542c6400d37SSascha Wildner QWordConst
5431093ca81SSascha Wildner     : Integer                       {$$ = TrSetOpIntegerValue (PARSEOP_QWORDCONST, $1);}
544c6400d37SSascha Wildner     ;
545c6400d37SSascha Wildner 
546c6400d37SSascha Wildner /*
5471093ca81SSascha Wildner  * The OP_COMPILE_TIME_CONST flag in the following constant expressions
548c6400d37SSascha Wildner  * enables compile-time constant folding to reduce the Type3Opcodes/Type2IntegerOpcodes
549c6400d37SSascha Wildner  * to simple integers. It is an error if these types of expressions cannot be
550c6400d37SSascha Wildner  * reduced, since the AML grammar for ****ConstExpr requires a simple constant.
551c6400d37SSascha Wildner  * Note: The required byte length of the constant is passed through to the
552c6400d37SSascha Wildner  * constant folding code in the node AmlLength field.
553c6400d37SSascha Wildner  */
554c6400d37SSascha Wildner ByteConstExpr
5551093ca81SSascha Wildner     : Type3Opcode                   {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);
5561093ca81SSascha Wildner                                         TrSetOpAmlLength ($1, 1);}
5571093ca81SSascha Wildner     | Type2IntegerOpcode            {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);
5581093ca81SSascha Wildner                                         TrSetOpAmlLength ($1, 1);}
5591093ca81SSascha Wildner     | ConstExprTerm                 {$$ = TrSetOpIntegerValue (PARSEOP_BYTECONST, $1);}
560c6400d37SSascha Wildner     | ByteConst                     {}
561c6400d37SSascha Wildner     ;
562c6400d37SSascha Wildner 
563c6400d37SSascha Wildner WordConstExpr
5641093ca81SSascha Wildner     : Type3Opcode                   {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);
5651093ca81SSascha Wildner                                         TrSetOpAmlLength ($1, 2);}
5661093ca81SSascha Wildner     | Type2IntegerOpcode            {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);
5671093ca81SSascha Wildner                                         TrSetOpAmlLength ($1, 2);}
5681093ca81SSascha Wildner     | ConstExprTerm                 {$$ = TrSetOpIntegerValue (PARSEOP_WORDCONST, $1);}
569c6400d37SSascha Wildner     | WordConst                     {}
570c6400d37SSascha Wildner     ;
571c6400d37SSascha Wildner 
572c6400d37SSascha Wildner DWordConstExpr
5731093ca81SSascha Wildner     : Type3Opcode                   {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);
5741093ca81SSascha Wildner                                         TrSetOpAmlLength ($1, 4);}
5751093ca81SSascha Wildner     | Type2IntegerOpcode            {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);
5761093ca81SSascha Wildner                                         TrSetOpAmlLength ($1, 4);}
5771093ca81SSascha Wildner     | ConstExprTerm                 {$$ = TrSetOpIntegerValue (PARSEOP_DWORDCONST, $1);}
578c6400d37SSascha Wildner     | DWordConst                    {}
579c6400d37SSascha Wildner     ;
580c6400d37SSascha Wildner 
581c6400d37SSascha Wildner QWordConstExpr
5821093ca81SSascha Wildner     : Type3Opcode                   {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);
5831093ca81SSascha Wildner                                         TrSetOpAmlLength ($1, 8);}
5841093ca81SSascha Wildner     | Type2IntegerOpcode            {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);
5851093ca81SSascha Wildner                                         TrSetOpAmlLength ($1, 8);}
5861093ca81SSascha Wildner     | ConstExprTerm                 {$$ = TrSetOpIntegerValue (PARSEOP_QWORDCONST, $1);}
587c6400d37SSascha Wildner     | QWordConst                    {}
588c6400d37SSascha Wildner     ;
589c6400d37SSascha Wildner 
590c6400d37SSascha Wildner ConstTerm
591c6400d37SSascha Wildner     : ConstExprTerm                 {}
5921093ca81SSascha Wildner     | PARSEOP_REVISION              {$$ = TrCreateLeafOp (PARSEOP_REVISION);}
593c6400d37SSascha Wildner     ;
594c6400d37SSascha Wildner 
595c6400d37SSascha Wildner ConstExprTerm
5961093ca81SSascha Wildner     : PARSEOP_ZERO                  {$$ = TrCreateValuedLeafOp (PARSEOP_ZERO, 0);}
5971093ca81SSascha Wildner     | PARSEOP_ONE                   {$$ = TrCreateValuedLeafOp (PARSEOP_ONE, 1);}
5981093ca81SSascha Wildner     | PARSEOP_ONES                  {$$ = TrCreateValuedLeafOp (PARSEOP_ONES, ACPI_UINT64_MAX);}
5991093ca81SSascha Wildner     | PARSEOP___DATE__              {$$ = TrCreateConstantLeafOp (PARSEOP___DATE__);}
6001093ca81SSascha Wildner     | PARSEOP___FILE__              {$$ = TrCreateConstantLeafOp (PARSEOP___FILE__);}
6011093ca81SSascha Wildner     | PARSEOP___LINE__              {$$ = TrCreateConstantLeafOp (PARSEOP___LINE__);}
6021093ca81SSascha Wildner     | PARSEOP___PATH__              {$$ = TrCreateConstantLeafOp (PARSEOP___PATH__);}
6033c639e0cSSascha Wildner     | PARSEOP___METHOD__            {$$ = TrCreateConstantLeafOp (PARSEOP___METHOD__);}
604c6400d37SSascha Wildner     ;
605c6400d37SSascha Wildner 
606c6400d37SSascha Wildner Integer
6071093ca81SSascha Wildner     : PARSEOP_INTEGER               {$$ = TrCreateValuedLeafOp (PARSEOP_INTEGER,
608277350a0SSascha Wildner                                         AslCompilerlval.i);}
609c6400d37SSascha Wildner     ;
610c6400d37SSascha Wildner 
611c6400d37SSascha Wildner String
6121093ca81SSascha Wildner     : PARSEOP_STRING_LITERAL        {$$ = TrCreateValuedLeafOp (PARSEOP_STRING_LITERAL,
613277350a0SSascha Wildner                                         (ACPI_NATIVE_INT) AslCompilerlval.s);}
614c6400d37SSascha Wildner     ;
615c6400d37SSascha Wildner 
616c6400d37SSascha Wildner 
617c6400d37SSascha Wildner /*******************************************************************************
618c6400d37SSascha Wildner  *
619c6400d37SSascha Wildner  * ASL Opcode Terms
620c6400d37SSascha Wildner  *
621c6400d37SSascha Wildner  ******************************************************************************/
622c6400d37SSascha Wildner 
623c6400d37SSascha Wildner CompilerDirective
624c6400d37SSascha Wildner     : IncludeTerm                   {}
625f5f76cf2SSascha Wildner     | IncludeEndTerm                {}
626c6400d37SSascha Wildner     | ExternalTerm                  {}
627c6400d37SSascha Wildner     ;
628c6400d37SSascha Wildner 
629c6400d37SSascha Wildner NamedObject
630c6400d37SSascha Wildner     : BankFieldTerm                 {}
631c6400d37SSascha Wildner     | CreateBitFieldTerm            {}
632c6400d37SSascha Wildner     | CreateByteFieldTerm           {}
633c6400d37SSascha Wildner     | CreateDWordFieldTerm          {}
634c6400d37SSascha Wildner     | CreateFieldTerm               {}
635c6400d37SSascha Wildner     | CreateQWordFieldTerm          {}
636c6400d37SSascha Wildner     | CreateWordFieldTerm           {}
637c6400d37SSascha Wildner     | DataRegionTerm                {}
638c6400d37SSascha Wildner     | DeviceTerm                    {}
639c6400d37SSascha Wildner     | EventTerm                     {}
640c6400d37SSascha Wildner     | FieldTerm                     {}
641c6400d37SSascha Wildner     | FunctionTerm                  {}
642c6400d37SSascha Wildner     | IndexFieldTerm                {}
643c6400d37SSascha Wildner     | MethodTerm                    {}
644c6400d37SSascha Wildner     | MutexTerm                     {}
645c6400d37SSascha Wildner     | OpRegionTerm                  {}
646c6400d37SSascha Wildner     | PowerResTerm                  {}
647c6400d37SSascha Wildner     | ProcessorTerm                 {}
648c6400d37SSascha Wildner     | ThermalZoneTerm               {}
649c6400d37SSascha Wildner     ;
650c6400d37SSascha Wildner 
651c6400d37SSascha Wildner NameSpaceModifier
652c6400d37SSascha Wildner     : AliasTerm                     {}
653c6400d37SSascha Wildner     | NameTerm                      {}
6541093ca81SSascha Wildner /*    | NameTermAslPlus               {} */
655c6400d37SSascha Wildner     | ScopeTerm                     {}
656c6400d37SSascha Wildner     ;
657c6400d37SSascha Wildner 
658a96e04f2SSascha Wildner SimpleName
659c6400d37SSascha Wildner     : NameString                    {}
660c6400d37SSascha Wildner     | LocalTerm                     {}
661a96e04f2SSascha Wildner     | ArgTerm                       {}
662a96e04f2SSascha Wildner     ;
663a96e04f2SSascha Wildner 
664a96e04f2SSascha Wildner /* For ObjectType(), SuperName except for MethodInvocationTerm */
665a96e04f2SSascha Wildner 
666a96e04f2SSascha Wildner ObjectTypeSource
667a96e04f2SSascha Wildner     : SimpleName                    {}
668c6400d37SSascha Wildner     | DebugTerm                     {}
669c6400d37SSascha Wildner     | RefOfTerm                     {}
670c6400d37SSascha Wildner     | DerefOfTerm                   {}
671c6400d37SSascha Wildner     | IndexTerm                     {}
67296f24602SSascha Wildner     | IndexExpTerm                  {}
673c6400d37SSascha Wildner     ;
674c6400d37SSascha Wildner 
675a96e04f2SSascha Wildner /* For DeRefOf(), SuperName except for DerefOf and Debug */
676a96e04f2SSascha Wildner 
677a96e04f2SSascha Wildner DerefOfSource
678a96e04f2SSascha Wildner     : SimpleName                    {}
679a96e04f2SSascha Wildner     | RefOfTerm                     {}
680a96e04f2SSascha Wildner     | DerefOfTerm                   {}
681a96e04f2SSascha Wildner     | IndexTerm                     {}
682a96e04f2SSascha Wildner     | IndexExpTerm                  {}
683a96e04f2SSascha Wildner     | StoreTerm                     {}
684a96e04f2SSascha Wildner     | EqualsTerm                    {}
685a96e04f2SSascha Wildner     | MethodInvocationTerm          {}
686c6400d37SSascha Wildner     ;
687c6400d37SSascha Wildner 
688a96e04f2SSascha Wildner /* For RefOf(), SuperName except for RefOf and MethodInvocationTerm */
689a96e04f2SSascha Wildner 
690a96e04f2SSascha Wildner RefOfSource
691a96e04f2SSascha Wildner     : SimpleName                    {}
692a96e04f2SSascha Wildner     | DebugTerm                     {}
693a96e04f2SSascha Wildner     | DerefOfTerm                   {}
694a96e04f2SSascha Wildner     | IndexTerm                     {}
695a96e04f2SSascha Wildner     | IndexExpTerm                  {}
696c6400d37SSascha Wildner     ;
69779eafdd7SSascha Wildner 
698a96e04f2SSascha Wildner /* For CondRefOf(), SuperName except for RefOf and MethodInvocationTerm */
69979eafdd7SSascha Wildner 
700a96e04f2SSascha Wildner CondRefOfSource
701a96e04f2SSascha Wildner     : SimpleName                    {}
702a96e04f2SSascha Wildner     | DebugTerm                     {}
703a96e04f2SSascha Wildner     | DerefOfTerm                   {}
704a96e04f2SSascha Wildner     | IndexTerm                     {}
705a96e04f2SSascha Wildner     | IndexExpTerm                  {}
706a96e04f2SSascha Wildner     ;
707a96e04f2SSascha Wildner 
708a96e04f2SSascha Wildner /*
709a96e04f2SSascha Wildner  * Opcode types, as defined in the ACPI specification
710a96e04f2SSascha Wildner  */
71179eafdd7SSascha Wildner Type1Opcode
71279eafdd7SSascha Wildner     : BreakTerm                     {}
71379eafdd7SSascha Wildner     | BreakPointTerm                {}
71479eafdd7SSascha Wildner     | ContinueTerm                  {}
71579eafdd7SSascha Wildner     | FatalTerm                     {}
7160d27ae55SSascha Wildner     | ForTerm                       {}
717c6400d37SSascha Wildner     | ElseIfTerm                    {}
71879eafdd7SSascha Wildner     | LoadTerm                      {}
71979eafdd7SSascha Wildner     | NoOpTerm                      {}
72079eafdd7SSascha Wildner     | NotifyTerm                    {}
72179eafdd7SSascha Wildner     | ReleaseTerm                   {}
72279eafdd7SSascha Wildner     | ResetTerm                     {}
72379eafdd7SSascha Wildner     | ReturnTerm                    {}
72479eafdd7SSascha Wildner     | SignalTerm                    {}
72579eafdd7SSascha Wildner     | SleepTerm                     {}
72679eafdd7SSascha Wildner     | StallTerm                     {}
72779eafdd7SSascha Wildner     | SwitchTerm                    {}
72879eafdd7SSascha Wildner     | UnloadTerm                    {}
72979eafdd7SSascha Wildner     | WhileTerm                     {}
73079eafdd7SSascha Wildner     ;
73179eafdd7SSascha Wildner 
73279eafdd7SSascha Wildner Type2Opcode
73379eafdd7SSascha Wildner     : AcquireTerm                   {}
73479eafdd7SSascha Wildner     | CondRefOfTerm                 {}
73579eafdd7SSascha Wildner     | CopyObjectTerm                {}
73679eafdd7SSascha Wildner     | DerefOfTerm                   {}
73779eafdd7SSascha Wildner     | ObjectTypeTerm                {}
73879eafdd7SSascha Wildner     | RefOfTerm                     {}
73979eafdd7SSascha Wildner     | SizeOfTerm                    {}
74079eafdd7SSascha Wildner     | StoreTerm                     {}
7412e2672b8SSascha Wildner     | EqualsTerm                    {}
74279eafdd7SSascha Wildner     | TimerTerm                     {}
74379eafdd7SSascha Wildner     | WaitTerm                      {}
7445943f66cSSascha Wildner     | MethodInvocationTerm          {}
74579eafdd7SSascha Wildner     ;
74679eafdd7SSascha Wildner 
74779eafdd7SSascha Wildner /*
74879eafdd7SSascha Wildner  * Type 3/4/5 opcodes
74979eafdd7SSascha Wildner  */
75079eafdd7SSascha Wildner Type2IntegerOpcode                  /* "Type3" opcodes */
7511093ca81SSascha Wildner     : Expression                    {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
7525943f66cSSascha Wildner     | AddTerm                       {}
75379eafdd7SSascha Wildner     | AndTerm                       {}
75479eafdd7SSascha Wildner     | DecTerm                       {}
75579eafdd7SSascha Wildner     | DivideTerm                    {}
75679eafdd7SSascha Wildner     | FindSetLeftBitTerm            {}
75779eafdd7SSascha Wildner     | FindSetRightBitTerm           {}
75879eafdd7SSascha Wildner     | FromBCDTerm                   {}
75979eafdd7SSascha Wildner     | IncTerm                       {}
76079eafdd7SSascha Wildner     | IndexTerm                     {}
7611093ca81SSascha Wildner /*    | StructureIndexTerm            {} */
7621093ca81SSascha Wildner /*    | StructurePointerTerm          {} */
76379eafdd7SSascha Wildner     | LAndTerm                      {}
76479eafdd7SSascha Wildner     | LEqualTerm                    {}
76579eafdd7SSascha Wildner     | LGreaterTerm                  {}
76679eafdd7SSascha Wildner     | LGreaterEqualTerm             {}
76779eafdd7SSascha Wildner     | LLessTerm                     {}
76879eafdd7SSascha Wildner     | LLessEqualTerm                {}
76979eafdd7SSascha Wildner     | LNotTerm                      {}
77079eafdd7SSascha Wildner     | LNotEqualTerm                 {}
77179eafdd7SSascha Wildner     | LoadTableTerm                 {}
77279eafdd7SSascha Wildner     | LOrTerm                       {}
77379eafdd7SSascha Wildner     | MatchTerm                     {}
77479eafdd7SSascha Wildner     | ModTerm                       {}
77579eafdd7SSascha Wildner     | MultiplyTerm                  {}
77679eafdd7SSascha Wildner     | NAndTerm                      {}
77779eafdd7SSascha Wildner     | NOrTerm                       {}
77879eafdd7SSascha Wildner     | NotTerm                       {}
77979eafdd7SSascha Wildner     | OrTerm                        {}
78079eafdd7SSascha Wildner     | ShiftLeftTerm                 {}
78179eafdd7SSascha Wildner     | ShiftRightTerm                {}
78279eafdd7SSascha Wildner     | SubtractTerm                  {}
78379eafdd7SSascha Wildner     | ToBCDTerm                     {}
78479eafdd7SSascha Wildner     | ToIntegerTerm                 {}
78579eafdd7SSascha Wildner     | XOrTerm                       {}
78679eafdd7SSascha Wildner     ;
78779eafdd7SSascha Wildner 
78879eafdd7SSascha Wildner Type2StringOpcode                   /* "Type4" Opcodes */
78979eafdd7SSascha Wildner     : ToDecimalStringTerm           {}
79079eafdd7SSascha Wildner     | ToHexStringTerm               {}
79179eafdd7SSascha Wildner     | ToStringTerm                  {}
79279eafdd7SSascha Wildner     ;
79379eafdd7SSascha Wildner 
79479eafdd7SSascha Wildner Type2BufferOpcode                   /* "Type5" Opcodes */
79579eafdd7SSascha Wildner     : ToBufferTerm                  {}
79679eafdd7SSascha Wildner     | ConcatResTerm                 {}
79779eafdd7SSascha Wildner     ;
79879eafdd7SSascha Wildner 
79979eafdd7SSascha Wildner Type2BufferOrStringOpcode
8001093ca81SSascha Wildner     : ConcatTerm                    {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
8012e2672b8SSascha Wildner     | PrintfTerm                    {}
8022e2672b8SSascha Wildner     | FprintfTerm                   {}
80379eafdd7SSascha Wildner     | MidTerm                       {}
80479eafdd7SSascha Wildner     ;
80579eafdd7SSascha Wildner 
80679eafdd7SSascha Wildner /*
80779eafdd7SSascha Wildner  * A type 3 opcode evaluates to an Integer and cannot have a destination operand
80879eafdd7SSascha Wildner  */
80979eafdd7SSascha Wildner Type3Opcode
81079eafdd7SSascha Wildner     : EISAIDTerm                    {}
81179eafdd7SSascha Wildner     ;
81279eafdd7SSascha Wildner 
81379eafdd7SSascha Wildner /* Obsolete
81479eafdd7SSascha Wildner Type4Opcode
81579eafdd7SSascha Wildner     : ConcatTerm                    {}
81679eafdd7SSascha Wildner     | ToDecimalStringTerm           {}
81779eafdd7SSascha Wildner     | ToHexStringTerm               {}
81879eafdd7SSascha Wildner     | MidTerm                       {}
81979eafdd7SSascha Wildner     | ToStringTerm                  {}
82079eafdd7SSascha Wildner     ;
82179eafdd7SSascha Wildner */
82279eafdd7SSascha Wildner 
823277350a0SSascha Wildner /* Type 5 opcodes are a subset of Type2 opcodes, and return a constant */
824277350a0SSascha Wildner 
82579eafdd7SSascha Wildner Type5Opcode
82679eafdd7SSascha Wildner     : ResourceTemplateTerm          {}
82779eafdd7SSascha Wildner     | UnicodeTerm                   {}
8282e2672b8SSascha Wildner     | ToPLDTerm                     {}
82979eafdd7SSascha Wildner     | ToUUIDTerm                    {}
83079eafdd7SSascha Wildner     ;
83179eafdd7SSascha Wildner 
83279eafdd7SSascha Wildner Type6Opcode
83379eafdd7SSascha Wildner     : RefOfTerm                     {}
83479eafdd7SSascha Wildner     | DerefOfTerm                   {}
83579eafdd7SSascha Wildner     | IndexTerm                     {}
836c6400d37SSascha Wildner     | IndexExpTerm                  {}
8371093ca81SSascha Wildner /*    | StructureIndexTerm            {} */
8381093ca81SSascha Wildner /*    | StructurePointerTerm          {} */
8395943f66cSSascha Wildner     | MethodInvocationTerm          {}
84079eafdd7SSascha Wildner     ;
84179eafdd7SSascha Wildner 
84279eafdd7SSascha Wildner 
843c6400d37SSascha Wildner /*******************************************************************************
844c6400d37SSascha Wildner  *
845c6400d37SSascha Wildner  * ASL Helper Terms
846c6400d37SSascha Wildner  *
847c6400d37SSascha Wildner  ******************************************************************************/
84879eafdd7SSascha Wildner 
84979eafdd7SSascha Wildner AmlPackageLengthTerm
8501093ca81SSascha Wildner     : Integer                       {$$ = TrSetOpIntegerValue (PARSEOP_PACKAGE_LENGTH,
851277350a0SSascha Wildner                                         (ACPI_PARSE_OBJECT *) $1);}
85279eafdd7SSascha Wildner     ;
85379eafdd7SSascha Wildner 
85479eafdd7SSascha Wildner NameStringItem
85579eafdd7SSascha Wildner     : ',' NameString                {$$ = $2;}
85679eafdd7SSascha Wildner     | ',' error                     {$$ = AslDoError (); yyclearin;}
85779eafdd7SSascha Wildner     ;
85879eafdd7SSascha Wildner 
85979eafdd7SSascha Wildner TermArgItem
86079eafdd7SSascha Wildner     : ',' TermArg                   {$$ = $2;}
86179eafdd7SSascha Wildner     | ',' error                     {$$ = AslDoError (); yyclearin;}
86279eafdd7SSascha Wildner     ;
86379eafdd7SSascha Wildner 
86479eafdd7SSascha Wildner OptionalReference
8651093ca81SSascha Wildner     :                               {$$ = TrCreateLeafOp (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
8661093ca81SSascha Wildner     | ','                           {$$ = TrCreateLeafOp (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
86779eafdd7SSascha Wildner     | ',' TermArg                   {$$ = $2;}
86879eafdd7SSascha Wildner     ;
86979eafdd7SSascha Wildner 
87079eafdd7SSascha Wildner OptionalReturnArg
8711093ca81SSascha Wildner     :                               {$$ = TrSetOpFlags (TrCreateLeafOp (PARSEOP_ZERO),
8721093ca81SSascha Wildner                                             OP_IS_NULL_RETURN);}       /* Placeholder is a ZeroOp object */
87379eafdd7SSascha Wildner     | TermArg                       {$$ = $1;}
87479eafdd7SSascha Wildner     ;
87579eafdd7SSascha Wildner 
87679eafdd7SSascha Wildner OptionalSerializeRuleKeyword
87779eafdd7SSascha Wildner     :                               {$$ = NULL;}
87879eafdd7SSascha Wildner     | ','                           {$$ = NULL;}
87979eafdd7SSascha Wildner     | ',' SerializeRuleKeyword      {$$ = $2;}
88079eafdd7SSascha Wildner     ;
88179eafdd7SSascha Wildner 
88279eafdd7SSascha Wildner OptionalTermArg
8831093ca81SSascha Wildner     :                               {$$ = TrCreateLeafOp (PARSEOP_DEFAULT_ARG);}
8840d27ae55SSascha Wildner     | TermArg                       {$$ = $1;}
8850d27ae55SSascha Wildner     ;
8860d27ae55SSascha Wildner 
88779eafdd7SSascha Wildner OptionalWordConst
88879eafdd7SSascha Wildner     :                               {$$ = NULL;}
88979eafdd7SSascha Wildner     | WordConst                     {$$ = $1;}
89079eafdd7SSascha Wildner     ;
891