The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/dev/acpica/compiler/aslrules.y

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 NoEcho('
    2 /******************************************************************************
    3  *
    4  * Module Name: aslrules.y - Main Bison/Yacc production rules
    5  *                         - Keep this file synched with the
    6  *                           CvParseOpBlockType function in cvcompiler.c
    7  *
    8  *****************************************************************************/
    9 
   10 /******************************************************************************
   11  *
   12  * 1. Copyright Notice
   13  *
   14  * Some or all of this work - Copyright (c) 1999 - 2022, Intel Corp.
   15  * All rights reserved.
   16  *
   17  * 2. License
   18  *
   19  * 2.1. This is your license from Intel Corp. under its intellectual property
   20  * rights. You may have additional license terms from the party that provided
   21  * you this software, covering your right to use that party's intellectual
   22  * property rights.
   23  *
   24  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
   25  * copy of the source code appearing in this file ("Covered Code") an
   26  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
   27  * base code distributed originally by Intel ("Original Intel Code") to copy,
   28  * make derivatives, distribute, use and display any portion of the Covered
   29  * Code in any form, with the right to sublicense such rights; and
   30  *
   31  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
   32  * license (with the right to sublicense), under only those claims of Intel
   33  * patents that are infringed by the Original Intel Code, to make, use, sell,
   34  * offer to sell, and import the Covered Code and derivative works thereof
   35  * solely to the minimum extent necessary to exercise the above copyright
   36  * license, and in no event shall the patent license extend to any additions
   37  * to or modifications of the Original Intel Code. No other license or right
   38  * is granted directly or by implication, estoppel or otherwise;
   39  *
   40  * The above copyright and patent license is granted only if the following
   41  * conditions are met:
   42  *
   43  * 3. Conditions
   44  *
   45  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
   46  * Redistribution of source code of any substantial portion of the Covered
   47  * Code or modification with rights to further distribute source must include
   48  * the above Copyright Notice, the above License, this list of Conditions,
   49  * and the following Disclaimer and Export Compliance provision. In addition,
   50  * Licensee must cause all Covered Code to which Licensee contributes to
   51  * contain a file documenting the changes Licensee made to create that Covered
   52  * Code and the date of any change. Licensee must include in that file the
   53  * documentation of any changes made by any predecessor Licensee. Licensee
   54  * must include a prominent statement that the modification is derived,
   55  * directly or indirectly, from Original Intel Code.
   56  *
   57  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
   58  * Redistribution of source code of any substantial portion of the Covered
   59  * Code or modification without rights to further distribute source must
   60  * include the following Disclaimer and Export Compliance provision in the
   61  * documentation and/or other materials provided with distribution. In
   62  * addition, Licensee may not authorize further sublicense of source of any
   63  * portion of the Covered Code, and must include terms to the effect that the
   64  * license from Licensee to its licensee is limited to the intellectual
   65  * property embodied in the software Licensee provides to its licensee, and
   66  * not to intellectual property embodied in modifications its licensee may
   67  * make.
   68  *
   69  * 3.3. Redistribution of Executable. Redistribution in executable form of any
   70  * substantial portion of the Covered Code or modification must reproduce the
   71  * above Copyright Notice, and the following Disclaimer and Export Compliance
   72  * provision in the documentation and/or other materials provided with the
   73  * distribution.
   74  *
   75  * 3.4. Intel retains all right, title, and interest in and to the Original
   76  * Intel Code.
   77  *
   78  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
   79  * Intel shall be used in advertising or otherwise to promote the sale, use or
   80  * other dealings in products derived from or relating to the Covered Code
   81  * without prior written authorization from Intel.
   82  *
   83  * 4. Disclaimer and Export Compliance
   84  *
   85  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
   86  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
   87  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
   88  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
   89  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
   90  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
   91  * PARTICULAR PURPOSE.
   92  *
   93  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
   94  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
   95  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
   96  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
   97  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
   98  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
   99  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
  100  * LIMITED REMEDY.
  101  *
  102  * 4.3. Licensee shall not export, either directly or indirectly, any of this
  103  * software or system incorporating such software without first obtaining any
  104  * required license or other approval from the U. S. Department of Commerce or
  105  * any other agency or department of the United States Government. In the
  106  * event Licensee exports any such software from the United States or
  107  * re-exports any such software from a foreign destination, Licensee shall
  108  * ensure that the distribution and export/re-export of the software is in
  109  * compliance with all laws, regulations, orders, or other restrictions of the
  110  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
  111  * any of its subsidiaries will export/re-export any technical data, process,
  112  * software, or service, directly or indirectly, to any country for which the
  113  * United States government or any agency thereof requires an export license,
  114  * other governmental approval, or letter of assurance, without first obtaining
  115  * such license, approval or letter.
  116  *
  117  *****************************************************************************
  118  *
  119  * Alternatively, you may choose to be licensed under the terms of the
  120  * following license:
  121  *
  122  * Redistribution and use in source and binary forms, with or without
  123  * modification, are permitted provided that the following conditions
  124  * are met:
  125  * 1. Redistributions of source code must retain the above copyright
  126  *    notice, this list of conditions, and the following disclaimer,
  127  *    without modification.
  128  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
  129  *    substantially similar to the "NO WARRANTY" disclaimer below
  130  *    ("Disclaimer") and any redistribution must be conditioned upon
  131  *    including a substantially similar Disclaimer requirement for further
  132  *    binary redistribution.
  133  * 3. Neither the names of the above-listed copyright holders nor the names
  134  *    of any contributors may be used to endorse or promote products derived
  135  *    from this software without specific prior written permission.
  136  *
  137  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  138  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  139  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  140  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  141  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  142  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  143  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  144  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  145  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  146  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  147  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  148  *
  149  * Alternatively, you may choose to be licensed under the terms of the
  150  * GNU General Public License ("GPL") version 2 as published by the Free
  151  * Software Foundation.
  152  *
  153  *****************************************************************************/
  154 
  155 ')
  156 
  157 /*******************************************************************************
  158  *
  159  * ASL Root and Secondary Terms
  160  *
  161  ******************************************************************************/
  162 
  163 /*
  164  * Root term. Allow multiple #line directives before the definition block
  165  * to handle output from preprocessors
  166  */
  167 AslCode
  168     : DefinitionBlockList           {$<n>$ = TrLinkOpChildren (
  169                                         TrCreateLeafOp (PARSEOP_ASL_CODE),1, $1);}
  170     | error                         {YYABORT; $$ = NULL;}
  171     ;
  172 
  173 
  174 /*
  175  * Note concerning support for "module-level code".
  176  *
  177  * ACPI 1.0 allowed Type1 and Type2 executable opcodes outside of control
  178  * methods (the so-called module-level code.) This support was explicitly
  179  * removed in ACPI 2.0, but this type of code continues to be created by
  180  * BIOS vendors. In order to support the disassembly and recompilation of
  181  * such code (and the porting of ASL code to iASL), iASL supports this
  182  * code in violation of the current ACPI specification.
  183  *
  184  * The grammar change to support module-level code is to revert the
  185  * {ObjectList} portion of the DefinitionBlockTerm in ACPI 2.0 to the
  186  * original use of {TermList} instead (see below.) This allows the use
  187  * of Type1 and Type2 opcodes at module level.
  188  *
  189  * 04/2016: The module-level code is now allowed in the following terms:
  190  * DeviceTerm, PowerResTerm, ProcessorTerm, ScopeTerm, ThermalZoneTerm.
  191  * The ObjectList term is obsolete and has been removed.
  192  */
  193 DefinitionBlockTerm
  194     : PARSEOP_DEFINITION_BLOCK
  195         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafOp (PARSEOP_DEFINITION_BLOCK); COMMENT_CAPTURE_OFF;}
  196         String ','
  197         String ','
  198         ByteConst ','
  199         String ','
  200         String ','
  201         DWordConst
  202         PARSEOP_CLOSE_PAREN         {TrSetOpIntegerWidth ($6,$8);
  203                                         TrSetOpEndLineNumber ($<n>3); COMMENT_CAPTURE_ON;}
  204             '{' TermList '}'        {$$ = TrLinkOpChildren ($<n>3,7,
  205                                         $4,$6,$8,$10,$12,$14,$18);}
  206     ;
  207 
  208 DefinitionBlockList
  209     : DefinitionBlockTerm
  210     | DefinitionBlockTerm
  211         DefinitionBlockList         {$$ = TrLinkPeerOps (2, $1,$2);}
  212     ;
  213 
  214 
  215 /******* Basic ASCII identifiers **************************************************/
  216 
  217 /* Allow IO, DMA, IRQ Resource macro and FOR macro names to also be used as identifiers */
  218 
  219 NameString
  220     : NameSeg                       {}
  221     | PARSEOP_NAMESTRING            {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) $1);}
  222     | PARSEOP_IO                    {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IO");}
  223     | PARSEOP_DMA                   {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "DMA");}
  224     | PARSEOP_IRQ                   {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IRQ");}
  225     | PARSEOP_FOR                   {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "FOR");}
  226     ;
  227 /*
  228 NameSeg
  229     : PARSEOP_NAMESEG               {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESEG, (ACPI_NATIVE_INT)
  230                                         TrNormalizeNameSeg ($1));}
  231     ;
  232 */
  233 
  234 NameSeg
  235     : PARSEOP_NAMESEG               {$$ = TrCreateValuedLeafOp (PARSEOP_NAMESEG,
  236                                         (ACPI_NATIVE_INT) AslCompilerlval.s);}
  237     ;
  238 
  239 
  240 /******* Fundamental argument/statement types ***********************************/
  241 
  242 Term
  243     : Object                        {}
  244     | Type1Opcode                   {}
  245     | Type2Opcode                   {}
  246     | Type2IntegerOpcode            {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
  247     | Type2StringOpcode             {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
  248     | Type2BufferOpcode             {}
  249     | Type2BufferOrStringOpcode     {}
  250     | error                         {$$ = AslDoError(); yyclearin;}
  251     ;
  252 
  253 SuperName
  254     : SimpleName                    {}
  255     | DebugTerm                     {}
  256     | Type6Opcode                   {}
  257     ;
  258 
  259 Target
  260     :                               {$$ = TrCreateNullTargetOp ();} /* Placeholder is a ZeroOp object */
  261     | ','                           {$$ = TrCreateNullTargetOp ();} /* Placeholder is a ZeroOp object */
  262     | ',' SuperName                 {$$ = TrSetOpFlags ($2, OP_IS_TARGET);}
  263     ;
  264 /*
  265 RequiredTarget
  266     : ',' SuperName                 {$$ = TrSetOpFlags ($2, OP_IS_TARGET);}
  267     ;
  268 */
  269 TermArg
  270     : SimpleName                    {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);}
  271     | Type2Opcode                   {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);}
  272     | DataObject                    {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);}
  273     | PARSEOP_OPEN_PAREN
  274         TermArg
  275         PARSEOP_CLOSE_PAREN         {$$ = TrSetOpFlags ($2, OP_IS_TERM_ARG);}
  276     ;
  277 
  278 /*
  279  NOTE: Removed from TermArg due to reduce/reduce conflicts:
  280     | Type2IntegerOpcode            {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);}
  281     | Type2StringOpcode             {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);}
  282     | Type2BufferOpcode             {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);}
  283     | Type2BufferOrStringOpcode     {$$ = TrSetOpFlags ($1, OP_IS_TERM_ARG);}
  284 
  285 */
  286 
  287 MethodInvocationTerm
  288     : NameString
  289         PARSEOP_OPEN_PAREN          {TrSetOpIntegerValue (PARSEOP_METHODCALL, $1); COMMENT_CAPTURE_OFF;}
  290         ArgList
  291         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildOp ($1,$4); COMMENT_CAPTURE_ON;}
  292     ;
  293 
  294 /* OptionalCount must appear before ByteList or an incorrect reduction will result */
  295 
  296 OptionalCount
  297     :                               {$$ = TrCreateLeafOp (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
  298     | ','                           {$$ = TrCreateLeafOp (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
  299     | ',' TermArg                   {$$ = $2;}
  300     ;
  301 
  302 /*
  303  * Data count for buffers and packages (byte count for buffers,
  304  * element count for packages).
  305  */
  306 OptionalDataCount
  307 
  308         /* Legacy ASL */
  309     :                               {$$ = NULL;}
  310     | PARSEOP_OPEN_PAREN
  311         TermArg
  312         PARSEOP_CLOSE_PAREN         {$$ = $2;}
  313     | PARSEOP_OPEN_PAREN
  314         PARSEOP_CLOSE_PAREN         {$$ = NULL;}
  315 
  316         /* C-style (ASL+) -- adds equals term */
  317 
  318     |  PARSEOP_EXP_EQUALS           {$$ = NULL;}
  319 
  320     | PARSEOP_OPEN_PAREN
  321         TermArg
  322         PARSEOP_CLOSE_PAREN
  323         PARSEOP_EXP_EQUALS          {$$ = $2;}
  324 
  325     | PARSEOP_OPEN_PAREN
  326         PARSEOP_CLOSE_PAREN
  327         String
  328         PARSEOP_EXP_EQUALS          {$$ = NULL;}
  329     ;
  330 
  331 
  332 /******* List Terms **************************************************/
  333 
  334     /* ACPI 3.0 -- allow semicolons between terms */
  335 
  336 TermList
  337     :                               {$$ = NULL;}
  338     | TermList Term                 {$$ = TrLinkPeerOp (
  339                                         TrSetOpFlags ($1, OP_RESULT_NOT_USED),$2);}
  340     | TermList Term ';'             {$$ = TrLinkPeerOp (
  341                                         TrSetOpFlags ($1, OP_RESULT_NOT_USED),$2);}
  342     | TermList ';' Term             {$$ = TrLinkPeerOp (
  343                                         TrSetOpFlags ($1, OP_RESULT_NOT_USED),$3);}
  344     | TermList ';' Term ';'         {$$ = TrLinkPeerOp (
  345                                         TrSetOpFlags ($1, OP_RESULT_NOT_USED),$3);}
  346     ;
  347 
  348 ArgList
  349     :                               {$$ = NULL;}
  350     | TermArg
  351     | ArgList ','                   /* Allows a trailing comma at list end */
  352     | ArgList ','
  353         TermArg                     {$$ = TrLinkPeerOp ($1,$3);}
  354     ;
  355 
  356 ByteList
  357     :                               {$$ = NULL;}
  358     | ByteConstExpr
  359     | ByteList ','                  /* Allows a trailing comma at list end */
  360     | ByteList ','
  361         ByteConstExpr               {$$ = TrLinkPeerOp ($1,$3);}
  362     ;
  363 
  364 DWordList
  365     :                               {$$ = NULL;}
  366     | DWordConstExpr
  367     | DWordList ','                 /* Allows a trailing comma at list end */
  368     | DWordList ','
  369         DWordConstExpr              {$$ = TrLinkPeerOp ($1,$3);}
  370     ;
  371 
  372 FieldUnitList
  373     :                               {$$ = NULL;}
  374     | FieldUnit
  375     | FieldUnitList ','             /* Allows a trailing comma at list end */
  376     | FieldUnitList ','
  377         FieldUnit                   {$$ = TrLinkPeerOp ($1,$3);}
  378     ;
  379 
  380 FieldUnit
  381     : FieldUnitEntry                {}
  382     | OffsetTerm                    {}
  383     | AccessAsTerm                  {}
  384     | ConnectionTerm                {}
  385     ;
  386 
  387 FieldUnitEntry
  388     : ',' AmlPackageLengthTerm      {$$ = TrCreateOp (PARSEOP_RESERVED_BYTES,1,$2);}
  389     | NameSeg ','
  390         AmlPackageLengthTerm        {$$ = TrLinkChildOp ($1,$3);}
  391     ;
  392 
  393 Object
  394     : CompilerDirective             {}
  395     | NamedObject                   {}
  396     | NameSpaceModifier             {}
  397 /*    | StructureTerm                 {} */
  398     ;
  399 
  400 PackageList
  401     :                               {$$ = NULL;}
  402     | PackageElement
  403     | PackageList ','               /* Allows a trailing comma at list end */
  404     | PackageList ','
  405         PackageElement              {$$ = TrLinkPeerOp ($1,$3);}
  406     ;
  407 
  408 PackageElement
  409     : DataObject                    {}
  410     | NameString                    {}
  411     ;
  412 
  413     /* Rules for specifying the type of one method argument or return value */
  414 
  415 ParameterTypePackage
  416     :                               {$$ = NULL;}
  417     | ObjectTypeKeyword             {$$ = $1;}
  418     | ParameterTypePackage ','
  419         ObjectTypeKeyword           {$$ = TrLinkPeerOps (2,$1,$3);}
  420     ;
  421 
  422 ParameterTypePackageList
  423     :                               {$$ = NULL;}
  424     | ObjectTypeKeyword             {$$ = TrLinkOpChildren (
  425                                         TrCreateLeafOp (PARSEOP_DEFAULT_ARG),1,$1);}
  426     | '{' ParameterTypePackage '}'  {$$ = TrLinkOpChildren (
  427                                         TrCreateLeafOp (PARSEOP_DEFAULT_ARG),1,$2);}
  428     ;
  429 
  430 
  431 OptionalParameterTypePackage
  432     :                               {$$ = NULL;}
  433     | ',' ParameterTypePackageList  {$$ = $2;}
  434     ;
  435 
  436     /* Rules for specifying the types for method arguments */
  437 
  438 ParameterTypesPackage
  439     : ParameterTypePackageList      {$$ = $1;}
  440     | ParameterTypesPackage ','
  441         ParameterTypePackageList    {$$ = TrLinkPeerOps (2,$1,$3);}
  442     ;
  443 
  444 ParameterTypesPackageList
  445     :                               {$$ = NULL;}
  446     | ObjectTypeKeyword             {$$ = TrLinkOpChildren (
  447                                         TrCreateLeafOp (PARSEOP_DEFAULT_ARG),1,$1);}
  448     | '{' ParameterTypesPackage '}' {$$ = TrLinkOpChildren (
  449                                         TrCreateLeafOp (PARSEOP_DEFAULT_ARG),1,$2);}
  450     ;
  451 
  452 OptionalParameterTypesPackage
  453     :                               {$$ = NULL;}
  454     | ',' ParameterTypesPackageList {$$ = $2;}
  455     ;
  456 
  457 /*
  458  * Case-Default list; allow only one Default term and unlimited Case terms
  459  */
  460 CaseDefaultTermList
  461     :                               {$$ = NULL;}
  462     | CaseTerm                      {}
  463     | DefaultTerm                   {}
  464     | CaseDefaultTermList
  465         CaseTerm                    {$$ = TrLinkPeerOp ($1,$2);}
  466     | CaseDefaultTermList
  467         DefaultTerm                 {$$ = TrLinkPeerOp ($1,$2);}
  468 
  469 /* Original - attempts to force zero or one default term within the switch */
  470 
  471 /*
  472 CaseDefaultTermList
  473     :                               {$$ = NULL;}
  474     | CaseTermList
  475         DefaultTerm
  476         CaseTermList                {$$ = TrLinkPeerOp ($1,TrLinkPeerOp ($2, $3));}
  477     | CaseTermList
  478         CaseTerm                    {$$ = TrLinkPeerOp ($1,$2);}
  479     ;
  480 
  481 CaseTermList
  482     :                               {$$ = NULL;}
  483     | CaseTerm                      {}
  484     | CaseTermList
  485         CaseTerm                    {$$ = TrLinkPeerOp ($1,$2);}
  486     ;
  487 */
  488 
  489 
  490 /*******************************************************************************
  491  *
  492  * ASL Data and Constant Terms
  493  *
  494  ******************************************************************************/
  495 
  496 DataObject
  497     : BufferData                    {}
  498     | PackageData                   {}
  499     | IntegerData                   {}
  500     | StringData                    {}
  501     ;
  502 
  503 BufferData
  504     : Type5Opcode                   {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
  505     | Type2BufferOrStringOpcode     {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
  506     | Type2BufferOpcode             {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
  507     | BufferTerm                    {}
  508     ;
  509 
  510 PackageData
  511     : PackageTerm                   {}
  512     ;
  513 
  514 IntegerData
  515     : Type2IntegerOpcode            {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
  516     | Type3Opcode                   {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
  517     | Integer                       {}
  518     | ConstTerm                     {}
  519     ;
  520 
  521 StringData
  522     : Type2StringOpcode             {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
  523     | String                        {}
  524     ;
  525 
  526 StringLiteral
  527     : String                        {}
  528     ;
  529 
  530 ByteConst
  531     : Integer                       {$$ = TrSetOpIntegerValue (PARSEOP_BYTECONST, $1);}
  532     ;
  533 
  534 WordConst
  535     : Integer                       {$$ = TrSetOpIntegerValue (PARSEOP_WORDCONST, $1);}
  536     ;
  537 
  538 DWordConst
  539     : Integer                       {$$ = TrSetOpIntegerValue (PARSEOP_DWORDCONST, $1);}
  540     ;
  541 
  542 QWordConst
  543     : Integer                       {$$ = TrSetOpIntegerValue (PARSEOP_QWORDCONST, $1);}
  544     ;
  545 
  546 /*
  547  * The OP_COMPILE_TIME_CONST flag in the following constant expressions
  548  * enables compile-time constant folding to reduce the Type3Opcodes/Type2IntegerOpcodes
  549  * to simple integers. It is an error if these types of expressions cannot be
  550  * reduced, since the AML grammar for ****ConstExpr requires a simple constant.
  551  * Note: The required byte length of the constant is passed through to the
  552  * constant folding code in the node AmlLength field.
  553  */
  554 ByteConstExpr
  555     : Type3Opcode                   {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);
  556                                         TrSetOpAmlLength ($1, 1);}
  557     | Type2IntegerOpcode            {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);
  558                                         TrSetOpAmlLength ($1, 1);}
  559     | ConstExprTerm                 {$$ = TrSetOpIntegerValue (PARSEOP_BYTECONST, $1);}
  560     | ByteConst                     {}
  561     ;
  562 
  563 WordConstExpr
  564     : Type3Opcode                   {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);
  565                                         TrSetOpAmlLength ($1, 2);}
  566     | Type2IntegerOpcode            {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);
  567                                         TrSetOpAmlLength ($1, 2);}
  568     | ConstExprTerm                 {$$ = TrSetOpIntegerValue (PARSEOP_WORDCONST, $1);}
  569     | WordConst                     {}
  570     ;
  571 
  572 DWordConstExpr
  573     : Type3Opcode                   {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);
  574                                         TrSetOpAmlLength ($1, 4);}
  575     | Type2IntegerOpcode            {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);
  576                                         TrSetOpAmlLength ($1, 4);}
  577     | ConstExprTerm                 {$$ = TrSetOpIntegerValue (PARSEOP_DWORDCONST, $1);}
  578     | DWordConst                    {}
  579     ;
  580 
  581 QWordConstExpr
  582     : Type3Opcode                   {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);
  583                                         TrSetOpAmlLength ($1, 8);}
  584     | Type2IntegerOpcode            {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);
  585                                         TrSetOpAmlLength ($1, 8);}
  586     | ConstExprTerm                 {$$ = TrSetOpIntegerValue (PARSEOP_QWORDCONST, $1);}
  587     | QWordConst                    {}
  588     ;
  589 
  590 ConstTerm
  591     : ConstExprTerm                 {}
  592     | PARSEOP_REVISION              {$$ = TrCreateLeafOp (PARSEOP_REVISION);}
  593     ;
  594 
  595 ConstExprTerm
  596     : PARSEOP_ZERO                  {$$ = TrCreateValuedLeafOp (PARSEOP_ZERO, 0);}
  597     | PARSEOP_ONE                   {$$ = TrCreateValuedLeafOp (PARSEOP_ONE, 1);}
  598     | PARSEOP_ONES                  {$$ = TrCreateValuedLeafOp (PARSEOP_ONES, ACPI_UINT64_MAX);}
  599     | PARSEOP___DATE__              {$$ = TrCreateConstantLeafOp (PARSEOP___DATE__);}
  600     | PARSEOP___FILE__              {$$ = TrCreateConstantLeafOp (PARSEOP___FILE__);}
  601     | PARSEOP___LINE__              {$$ = TrCreateConstantLeafOp (PARSEOP___LINE__);}
  602     | PARSEOP___PATH__              {$$ = TrCreateConstantLeafOp (PARSEOP___PATH__);}
  603     | PARSEOP___METHOD__            {$$ = TrCreateConstantLeafOp (PARSEOP___METHOD__);}
  604     ;
  605 
  606 Integer
  607     : PARSEOP_INTEGER               {$$ = TrCreateValuedLeafOp (PARSEOP_INTEGER,
  608                                         AslCompilerlval.i);}
  609     ;
  610 
  611 String
  612     : PARSEOP_STRING_LITERAL        {$$ = TrCreateValuedLeafOp (PARSEOP_STRING_LITERAL,
  613                                         (ACPI_NATIVE_INT) AslCompilerlval.s);}
  614     ;
  615 
  616 
  617 /*******************************************************************************
  618  *
  619  * ASL Opcode Terms
  620  *
  621  ******************************************************************************/
  622 
  623 CompilerDirective
  624     : IncludeTerm                   {}
  625     | IncludeEndTerm                {}
  626     | ExternalTerm                  {}
  627     ;
  628 
  629 NamedObject
  630     : BankFieldTerm                 {}
  631     | CreateBitFieldTerm            {}
  632     | CreateByteFieldTerm           {}
  633     | CreateDWordFieldTerm          {}
  634     | CreateFieldTerm               {}
  635     | CreateQWordFieldTerm          {}
  636     | CreateWordFieldTerm           {}
  637     | DataRegionTerm                {}
  638     | DeviceTerm                    {}
  639     | EventTerm                     {}
  640     | FieldTerm                     {}
  641     | FunctionTerm                  {}
  642     | IndexFieldTerm                {}
  643     | MethodTerm                    {}
  644     | MutexTerm                     {}
  645     | OpRegionTerm                  {}
  646     | PowerResTerm                  {}
  647     | ProcessorTerm                 {}
  648     | ThermalZoneTerm               {}
  649     ;
  650 
  651 NameSpaceModifier
  652     : AliasTerm                     {}
  653     | NameTerm                      {}
  654 /*    | NameTermAslPlus               {} */
  655     | ScopeTerm                     {}
  656     ;
  657 
  658 SimpleName
  659     : NameString                    {}
  660     | LocalTerm                     {}
  661     | ArgTerm                       {}
  662     ;
  663 
  664 /* For ObjectType(), SuperName except for MethodInvocationTerm */
  665 
  666 ObjectTypeSource
  667     : SimpleName                    {}
  668     | DebugTerm                     {}
  669     | RefOfTerm                     {}
  670     | DerefOfTerm                   {}
  671     | IndexTerm                     {}
  672     | IndexExpTerm                  {}
  673     ;
  674 
  675 /* For DeRefOf(), SuperName except for DerefOf and Debug */
  676 
  677 DerefOfSource
  678     : SimpleName                    {}
  679     | RefOfTerm                     {}
  680     | DerefOfTerm                   {}
  681     | IndexTerm                     {}
  682     | IndexExpTerm                  {}
  683     | StoreTerm                     {}
  684     | EqualsTerm                    {}
  685     | MethodInvocationTerm          {}
  686     ;
  687 
  688 /* For RefOf(), SuperName except for RefOf and MethodInvocationTerm */
  689 
  690 RefOfSource
  691     : SimpleName                    {}
  692     | DebugTerm                     {}
  693     | DerefOfTerm                   {}
  694     | IndexTerm                     {}
  695     | IndexExpTerm                  {}
  696     ;
  697 
  698 /* For CondRefOf(), SuperName except for RefOf and MethodInvocationTerm */
  699 
  700 CondRefOfSource
  701     : SimpleName                    {}
  702     | DebugTerm                     {}
  703     | DerefOfTerm                   {}
  704     | IndexTerm                     {}
  705     | IndexExpTerm                  {}
  706     ;
  707 
  708 /*
  709  * Opcode types, as defined in the ACPI specification
  710  */
  711 Type1Opcode
  712     : BreakTerm                     {}
  713     | BreakPointTerm                {}
  714     | ContinueTerm                  {}
  715     | FatalTerm                     {}
  716     | ForTerm                       {}
  717     | ElseIfTerm                    {}
  718     | NoOpTerm                      {}
  719     | NotifyTerm                    {}
  720     | ReleaseTerm                   {}
  721     | ResetTerm                     {}
  722     | ReturnTerm                    {}
  723     | SignalTerm                    {}
  724     | SleepTerm                     {}
  725     | StallTerm                     {}
  726     | SwitchTerm                    {}
  727     | UnloadTerm                    {}
  728     | WhileTerm                     {}
  729     ;
  730 
  731 Type2Opcode
  732     : AcquireTerm                   {}
  733     | CondRefOfTerm                 {}
  734     | CopyObjectTerm                {}
  735     | DerefOfTerm                   {}
  736     | LoadTerm                      {} /* Moved from Type1 -- now returns an integer (ACPI 6.4) */
  737     | ObjectTypeTerm                {}
  738     | RefOfTerm                     {}
  739     | SizeOfTerm                    {}
  740     | StoreTerm                     {}
  741     | EqualsTerm                    {}
  742     | TimerTerm                     {}
  743     | WaitTerm                      {}
  744     | MethodInvocationTerm          {}
  745     ;
  746 
  747 /*
  748  * Type 3/4/5 opcodes
  749  */
  750 Type2IntegerOpcode                  /* "Type3" opcodes */
  751     : Expression                    {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
  752     | AddTerm                       {}
  753     | AndTerm                       {}
  754     | DecTerm                       {}
  755     | DivideTerm                    {}
  756     | FindSetLeftBitTerm            {}
  757     | FindSetRightBitTerm           {}
  758     | FromBCDTerm                   {}
  759     | IncTerm                       {}
  760     | IndexTerm                     {}
  761 /*    | StructureIndexTerm            {} */
  762 /*    | StructurePointerTerm          {} */
  763     | LAndTerm                      {}
  764     | LEqualTerm                    {}
  765     | LGreaterTerm                  {}
  766     | LGreaterEqualTerm             {}
  767     | LLessTerm                     {}
  768     | LLessEqualTerm                {}
  769     | LNotTerm                      {}
  770     | LNotEqualTerm                 {}
  771     | LoadTableTerm                 {}
  772     | LOrTerm                       {}
  773     | MatchTerm                     {}
  774     | ModTerm                       {}
  775     | MultiplyTerm                  {}
  776     | NAndTerm                      {}
  777     | NOrTerm                       {}
  778     | NotTerm                       {}
  779     | OrTerm                        {}
  780     | ShiftLeftTerm                 {}
  781     | ShiftRightTerm                {}
  782     | SubtractTerm                  {}
  783     | ToBCDTerm                     {}
  784     | ToIntegerTerm                 {}
  785     | XOrTerm                       {}
  786     ;
  787 
  788 Type2StringOpcode                   /* "Type4" Opcodes */
  789     : ToDecimalStringTerm           {}
  790     | ToHexStringTerm               {}
  791     | ToStringTerm                  {}
  792     ;
  793 
  794 Type2BufferOpcode                   /* "Type5" Opcodes */
  795     : ToBufferTerm                  {}
  796     | ConcatResTerm                 {}
  797     ;
  798 
  799 Type2BufferOrStringOpcode
  800     : ConcatTerm                    {$$ = TrSetOpFlags ($1, OP_COMPILE_TIME_CONST);}
  801     | PrintfTerm                    {}
  802     | FprintfTerm                   {}
  803     | MidTerm                       {}
  804     ;
  805 
  806 /*
  807  * A type 3 opcode evaluates to an Integer and cannot have a destination operand
  808  */
  809 Type3Opcode
  810     : EISAIDTerm                    {}
  811     ;
  812 
  813 /* Obsolete
  814 Type4Opcode
  815     : ConcatTerm                    {}
  816     | ToDecimalStringTerm           {}
  817     | ToHexStringTerm               {}
  818     | MidTerm                       {}
  819     | ToStringTerm                  {}
  820     ;
  821 */
  822 
  823 /* Type 5 opcodes are a subset of Type2 opcodes, and return a constant */
  824 
  825 Type5Opcode
  826     : ResourceTemplateTerm          {}
  827     | UnicodeTerm                   {}
  828     | ToPLDTerm                     {}
  829     | ToUUIDTerm                    {}
  830     ;
  831 
  832 Type6Opcode
  833     : RefOfTerm                     {}
  834     | DerefOfTerm                   {}
  835     | IndexTerm                     {}
  836     | IndexExpTerm                  {}
  837 /*    | StructureIndexTerm            {} */
  838 /*    | StructurePointerTerm          {} */
  839     | MethodInvocationTerm          {}
  840     ;
  841 
  842 
  843 /*******************************************************************************
  844  *
  845  * ASL Helper Terms
  846  *
  847  ******************************************************************************/
  848 
  849 AmlPackageLengthTerm
  850     : Integer                       {$$ = TrSetOpIntegerValue (PARSEOP_PACKAGE_LENGTH,
  851                                         (ACPI_PARSE_OBJECT *) $1);}
  852     ;
  853 
  854 NameStringItem
  855     : ',' NameString                {$$ = $2;}
  856     | ',' error                     {$$ = AslDoError (); yyclearin;}
  857     ;
  858 
  859 TermArgItem
  860     : ',' TermArg                   {$$ = $2;}
  861     | ',' error                     {$$ = AslDoError (); yyclearin;}
  862     ;
  863 
  864 OptionalReference
  865     :                               {$$ = TrCreateLeafOp (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
  866     | ','                           {$$ = TrCreateLeafOp (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
  867     | ',' TermArg                   {$$ = $2;}
  868     ;
  869 
  870 OptionalReturnArg
  871     :                               {$$ = TrSetOpFlags (TrCreateLeafOp (PARSEOP_ZERO),
  872                                             OP_IS_NULL_RETURN);}       /* Placeholder is a ZeroOp object */
  873     | TermArg                       {$$ = $1;}
  874     ;
  875 
  876 OptionalSerializeRuleKeyword
  877     :                               {$$ = NULL;}
  878     | ','                           {$$ = NULL;}
  879     | ',' SerializeRuleKeyword      {$$ = $2;}
  880     ;
  881 
  882 OptionalTermArg
  883     :                               {$$ = TrCreateLeafOp (PARSEOP_DEFAULT_ARG);}
  884     | TermArg                       {$$ = $1;}
  885     ;
  886 
  887 OptionalWordConst
  888     :                               {$$ = NULL;}
  889     | WordConst                     {$$ = $1;}
  890     ;

Cache object: 6816f89da418a4cd6fe037f2353cc4b8


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.