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