1 NoEcho(' 2 /****************************************************************************** 3 * 4 * Module Name: aslrules.y - Main Bison/Yacc production rules 5 * 6 *****************************************************************************/ 7 8 /* 9 * Copyright (C) 2000 - 2016, Intel Corp. 10 * All rights reserved. 11 * 12 * Redistribution and use in source and binary forms, with or without 13 * modification, are permitted provided that the following conditions 14 * are met: 15 * 1. Redistributions of source code must retain the above copyright 16 * notice, this list of conditions, and the following disclaimer, 17 * without modification. 18 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 19 * substantially similar to the "NO WARRANTY" disclaimer below 20 * ("Disclaimer") and any redistribution must be conditioned upon 21 * including a substantially similar Disclaimer requirement for further 22 * binary redistribution. 23 * 3. Neither the names of the above-listed copyright holders nor the names 24 * of any contributors may be used to endorse or promote products derived 25 * from this software without specific prior written permission. 26 * 27 * Alternatively, this software may be distributed under the terms of the 28 * GNU General Public License ("GPL") version 2 as published by the Free 29 * Software Foundation. 30 * 31 * NO WARRANTY 32 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 33 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 34 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 35 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 36 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 37 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 38 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 39 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 40 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 41 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 42 * POSSIBILITY OF SUCH DAMAGES. 43 */ 44 45 ') 46 47 /******************************************************************************* 48 * 49 * ASL Root and Secondary Terms 50 * 51 ******************************************************************************/ 52 53 /* 54 * Root term. Allow multiple #line directives before the definition block 55 * to handle output from preprocessors 56 */ 57 AslCode 58 : DefinitionBlockList {$<n>$ = TrLinkChildren ( 59 TrCreateLeafNode (PARSEOP_ASL_CODE),1, $1);} 60 | error {YYABORT; $$ = NULL;} 61 ; 62 63 64 /* 65 * Note concerning support for "module-level code". 66 * 67 * ACPI 1.0 allowed Type1 and Type2 executable opcodes outside of control 68 * methods (the so-called module-level code.) This support was explicitly 69 * removed in ACPI 2.0, but this type of code continues to be created by 70 * BIOS vendors. In order to support the disassembly and recompilation of 71 * such code (and the porting of ASL code to iASL), iASL supports this 72 * code in violation of the current ACPI specification. 73 * 74 * The grammar change to support module-level code is to revert the 75 * {ObjectList} portion of the DefinitionBlockTerm in ACPI 2.0 to the 76 * original use of {TermList} instead (see below.) This allows the use 77 * of Type1 and Type2 opcodes at module level. 78 * 79 * 04/2016: The module-level code is now allowed in the following terms: 80 * DeviceTerm, PowerResTerm, ProcessorTerm, ScopeTerm, ThermalZoneTerm. 81 * The ObjectList term is obsolete and has been removed. 82 */ 83 DefinitionBlockTerm 84 : PARSEOP_DEFINITION_BLOCK 85 PARSEOP_OPEN_PAREN {$<n>$ = TrCreateLeafNode (PARSEOP_DEFINITION_BLOCK);} 86 String ',' 87 String ',' 88 ByteConst ',' 89 String ',' 90 String ',' 91 DWordConst 92 PARSEOP_CLOSE_PAREN {TrSetEndLineNumber ($<n>3);} 93 '{' TermList '}' {$$ = TrLinkChildren ($<n>3,7, 94 $4,$6,$8,$10,$12,$14,$18);} 95 ; 96 97 DefinitionBlockList 98 : DefinitionBlockTerm 99 | DefinitionBlockTerm 100 DefinitionBlockList {$$ = TrLinkPeerNodes (2, $1,$2);} 101 ; 102 103 104 /******* Basic ASCII identifiers **************************************************/ 105 106 /* Allow IO, DMA, IRQ Resource macro and FOR macro names to also be used as identifiers */ 107 108 NameString 109 : NameSeg {} 110 | PARSEOP_NAMESTRING {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) $1);} 111 | PARSEOP_IO {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IO");} 112 | PARSEOP_DMA {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "DMA");} 113 | PARSEOP_IRQ {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IRQ");} 114 | PARSEOP_FOR {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "FOR");} 115 ; 116 /* 117 NameSeg 118 : PARSEOP_NAMESEG {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESEG, (ACPI_NATIVE_INT) 119 TrNormalizeNameSeg ($1));} 120 ; 121 */ 122 123 NameSeg 124 : PARSEOP_NAMESEG {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESEG, 125 (ACPI_NATIVE_INT) AslCompilerlval.s);} 126 ; 127 128 129 /******* Fundamental argument/statement types ***********************************/ 130 131 Term 132 : Object {} 133 | Type1Opcode {} 134 | Type2Opcode {} 135 | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);} 136 | Type2StringOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);} 137 | Type2BufferOpcode {} 138 | Type2BufferOrStringOpcode {} 139 | error {$$ = AslDoError(); yyclearin;} 140 ; 141 142 SuperName 143 : SimpleName {} 144 | DebugTerm {} 145 | Type6Opcode {} 146 ; 147 148 Target 149 : {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */ 150 | ',' {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */ 151 | ',' SuperName {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);} 152 ; 153 154 RequiredTarget 155 : ',' SuperName {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);} 156 ; 157 158 TermArg 159 : SimpleName {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);} 160 | Type2Opcode {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);} 161 | DataObject {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);} 162 /* 163 | PARSEOP_OPEN_PAREN 164 TermArg 165 PARSEOP_CLOSE_PAREN {} 166 */ 167 ; 168 169 /* 170 NOTE: Removed from TermArg due to reduce/reduce conflicts: 171 | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);} 172 | Type2StringOpcode {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);} 173 | Type2BufferOpcode {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);} 174 | Type2BufferOrStringOpcode {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);} 175 176 */ 177 178 MethodInvocationTerm 179 : NameString 180 PARSEOP_OPEN_PAREN {TrUpdateNode (PARSEOP_METHODCALL, $1);} 181 ArgList 182 PARSEOP_CLOSE_PAREN {$$ = TrLinkChildNode ($1,$4);} 183 ; 184 185 /* OptionalCount must appear before ByteList or an incorrect reduction will result */ 186 187 OptionalCount 188 : {$$ = TrCreateLeafNode (PARSEOP_ONES);} /* Placeholder is a OnesOp object */ 189 | ',' {$$ = TrCreateLeafNode (PARSEOP_ONES);} /* Placeholder is a OnesOp object */ 190 | ',' TermArg {$$ = $2;} 191 ; 192 193 /* 194 * Data count for buffers and packages (byte count for buffers, 195 * element count for packages). 196 */ 197 OptionalDataCount 198 199 /* Legacy ASL */ 200 : {$$ = NULL;} 201 | PARSEOP_OPEN_PAREN 202 TermArg 203 PARSEOP_CLOSE_PAREN {$$ = $2;} 204 | PARSEOP_OPEN_PAREN 205 PARSEOP_CLOSE_PAREN {$$ = NULL;} 206 207 /* C-style (ASL+) -- adds equals term */ 208 209 | PARSEOP_EXP_EQUALS {$$ = NULL;} 210 211 | PARSEOP_OPEN_PAREN 212 TermArg 213 PARSEOP_CLOSE_PAREN 214 PARSEOP_EXP_EQUALS {$$ = $2;} 215 216 | PARSEOP_OPEN_PAREN 217 PARSEOP_CLOSE_PAREN 218 String 219 PARSEOP_EXP_EQUALS {$$ = NULL;} 220 ; 221 222 223 /******* List Terms **************************************************/ 224 225 /* ACPI 3.0 -- allow semicolons between terms */ 226 227 TermList 228 : {$$ = NULL;} 229 | TermList Term {$$ = TrLinkPeerNode ( 230 TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);} 231 | TermList Term ';' {$$ = TrLinkPeerNode ( 232 TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);} 233 | TermList ';' Term {$$ = TrLinkPeerNode ( 234 TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);} 235 | TermList ';' Term ';' {$$ = TrLinkPeerNode ( 236 TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);} 237 ; 238 239 ArgList 240 : {$$ = NULL;} 241 | TermArg 242 | ArgList ',' /* Allows a trailing comma at list end */ 243 | ArgList ',' 244 TermArg {$$ = TrLinkPeerNode ($1,$3);} 245 ; 246 247 ByteList 248 : {$$ = NULL;} 249 | ByteConstExpr 250 | ByteList ',' /* Allows a trailing comma at list end */ 251 | ByteList ',' 252 ByteConstExpr {$$ = TrLinkPeerNode ($1,$3);} 253 ; 254 255 DWordList 256 : {$$ = NULL;} 257 | DWordConstExpr 258 | DWordList ',' /* Allows a trailing comma at list end */ 259 | DWordList ',' 260 DWordConstExpr {$$ = TrLinkPeerNode ($1,$3);} 261 ; 262 263 FieldUnitList 264 : {$$ = NULL;} 265 | FieldUnit 266 | FieldUnitList ',' /* Allows a trailing comma at list end */ 267 | FieldUnitList ',' 268 FieldUnit {$$ = TrLinkPeerNode ($1,$3);} 269 ; 270 271 FieldUnit 272 : FieldUnitEntry {} 273 | OffsetTerm {} 274 | AccessAsTerm {} 275 | ConnectionTerm {} 276 ; 277 278 FieldUnitEntry 279 : ',' AmlPackageLengthTerm {$$ = TrCreateNode (PARSEOP_RESERVED_BYTES,1,$2);} 280 | NameSeg ',' 281 AmlPackageLengthTerm {$$ = TrLinkChildNode ($1,$3);} 282 ; 283 284 Object 285 : CompilerDirective {} 286 | NamedObject {} 287 | NameSpaceModifier {} 288 // | StructureTerm {} 289 ; 290 291 PackageList 292 : {$$ = NULL;} 293 | PackageElement 294 | PackageList ',' /* Allows a trailing comma at list end */ 295 | PackageList ',' 296 PackageElement {$$ = TrLinkPeerNode ($1,$3);} 297 ; 298 299 PackageElement 300 : DataObject {} 301 | NameString {} 302 ; 303 304 /* Rules for specifying the type of one method argument or return value */ 305 306 ParameterTypePackage 307 : {$$ = NULL;} 308 | ObjectTypeKeyword {$$ = $1;} 309 | ParameterTypePackage ',' 310 ObjectTypeKeyword {$$ = TrLinkPeerNodes (2,$1,$3);} 311 ; 312 313 ParameterTypePackageList 314 : {$$ = NULL;} 315 | ObjectTypeKeyword {$$ = $1;} 316 | '{' ParameterTypePackage '}' {$$ = $2;} 317 ; 318 319 OptionalParameterTypePackage 320 : {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);} 321 | ',' ParameterTypePackageList {$$ = TrLinkChildren ( 322 TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);} 323 ; 324 325 /* Rules for specifying the types for method arguments */ 326 327 ParameterTypesPackage 328 : ParameterTypePackageList {$$ = $1;} 329 | ParameterTypesPackage ',' 330 ParameterTypePackageList {$$ = TrLinkPeerNodes (2,$1,$3);} 331 ; 332 333 ParameterTypesPackageList 334 : {$$ = NULL;} 335 | ObjectTypeKeyword {$$ = $1;} 336 | '{' ParameterTypesPackage '}' {$$ = $2;} 337 ; 338 339 OptionalParameterTypesPackage 340 : {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);} 341 | ',' ParameterTypesPackageList {$$ = TrLinkChildren ( 342 TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);} 343 ; 344 345 /* 346 * Case-Default list; allow only one Default term and unlimited Case terms 347 */ 348 CaseDefaultTermList 349 : {$$ = NULL;} 350 | CaseTerm {} 351 | DefaultTerm {} 352 | CaseDefaultTermList 353 CaseTerm {$$ = TrLinkPeerNode ($1,$2);} 354 | CaseDefaultTermList 355 DefaultTerm {$$ = TrLinkPeerNode ($1,$2);} 356 357 /* Original - attempts to force zero or one default term within the switch */ 358 359 /* 360 CaseDefaultTermList 361 : {$$ = NULL;} 362 | CaseTermList 363 DefaultTerm 364 CaseTermList {$$ = TrLinkPeerNode ($1,TrLinkPeerNode ($2, $3));} 365 | CaseTermList 366 CaseTerm {$$ = TrLinkPeerNode ($1,$2);} 367 ; 368 369 CaseTermList 370 : {$$ = NULL;} 371 | CaseTerm {} 372 | CaseTermList 373 CaseTerm {$$ = TrLinkPeerNode ($1,$2);} 374 ; 375 */ 376 377 378 /******************************************************************************* 379 * 380 * ASL Data and Constant Terms 381 * 382 ******************************************************************************/ 383 384 DataObject 385 : BufferData {} 386 | PackageData {} 387 | IntegerData {} 388 | StringData {} 389 ; 390 391 BufferData 392 : Type5Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);} 393 | Type2BufferOrStringOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);} 394 | Type2BufferOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);} 395 | BufferTerm {} 396 ; 397 398 PackageData 399 : PackageTerm {} 400 ; 401 402 IntegerData 403 : Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);} 404 | Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);} 405 | Integer {} 406 | ConstTerm {} 407 ; 408 409 StringData 410 : Type2StringOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);} 411 | String {} 412 ; 413 414 ByteConst 415 : Integer {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);} 416 ; 417 418 WordConst 419 : Integer {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);} 420 ; 421 422 DWordConst 423 : Integer {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);} 424 ; 425 426 QWordConst 427 : Integer {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);} 428 ; 429 430 /* 431 * The NODE_COMPILE_TIME_CONST flag in the following constant expressions 432 * enables compile-time constant folding to reduce the Type3Opcodes/Type2IntegerOpcodes 433 * to simple integers. It is an error if these types of expressions cannot be 434 * reduced, since the AML grammar for ****ConstExpr requires a simple constant. 435 * Note: The required byte length of the constant is passed through to the 436 * constant folding code in the node AmlLength field. 437 */ 438 ByteConstExpr 439 : Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); 440 TrSetNodeAmlLength ($1, 1);} 441 | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); 442 TrSetNodeAmlLength ($1, 1);} 443 | ConstExprTerm {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);} 444 | ByteConst {} 445 ; 446 447 WordConstExpr 448 : Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); 449 TrSetNodeAmlLength ($1, 2);} 450 | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); 451 TrSetNodeAmlLength ($1, 2);} 452 | ConstExprTerm {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);} 453 | WordConst {} 454 ; 455 456 DWordConstExpr 457 : Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); 458 TrSetNodeAmlLength ($1, 4);} 459 | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); 460 TrSetNodeAmlLength ($1, 4);} 461 | ConstExprTerm {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);} 462 | DWordConst {} 463 ; 464 465 QWordConstExpr 466 : Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); 467 TrSetNodeAmlLength ($1, 8);} 468 | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); 469 TrSetNodeAmlLength ($1, 8);} 470 | ConstExprTerm {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);} 471 | QWordConst {} 472 ; 473 474 ConstTerm 475 : ConstExprTerm {} 476 | PARSEOP_REVISION {$$ = TrCreateLeafNode (PARSEOP_REVISION);} 477 ; 478 479 ConstExprTerm 480 : PARSEOP_ZERO {$$ = TrCreateValuedLeafNode (PARSEOP_ZERO, 0);} 481 | PARSEOP_ONE {$$ = TrCreateValuedLeafNode (PARSEOP_ONE, 1);} 482 | PARSEOP_ONES {$$ = TrCreateValuedLeafNode (PARSEOP_ONES, ACPI_UINT64_MAX);} 483 | PARSEOP___DATE__ {$$ = TrCreateConstantLeafNode (PARSEOP___DATE__);} 484 | PARSEOP___FILE__ {$$ = TrCreateConstantLeafNode (PARSEOP___FILE__);} 485 | PARSEOP___LINE__ {$$ = TrCreateConstantLeafNode (PARSEOP___LINE__);} 486 | PARSEOP___PATH__ {$$ = TrCreateConstantLeafNode (PARSEOP___PATH__);} 487 ; 488 489 Integer 490 : PARSEOP_INTEGER {$$ = TrCreateValuedLeafNode (PARSEOP_INTEGER, 491 AslCompilerlval.i);} 492 ; 493 494 String 495 : PARSEOP_STRING_LITERAL {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, 496 (ACPI_NATIVE_INT) AslCompilerlval.s);} 497 ; 498 499 500 /******************************************************************************* 501 * 502 * ASL Opcode Terms 503 * 504 ******************************************************************************/ 505 506 CompilerDirective 507 : IncludeTerm {} 508 | IncludeEndTerm {} 509 | ExternalTerm {} 510 ; 511 512 NamedObject 513 : BankFieldTerm {} 514 | CreateBitFieldTerm {} 515 | CreateByteFieldTerm {} 516 | CreateDWordFieldTerm {} 517 | CreateFieldTerm {} 518 | CreateQWordFieldTerm {} 519 | CreateWordFieldTerm {} 520 | DataRegionTerm {} 521 | DeviceTerm {} 522 | EventTerm {} 523 | FieldTerm {} 524 | FunctionTerm {} 525 | IndexFieldTerm {} 526 | MethodTerm {} 527 | MutexTerm {} 528 | OpRegionTerm {} 529 | PowerResTerm {} 530 | ProcessorTerm {} 531 | ThermalZoneTerm {} 532 ; 533 534 NameSpaceModifier 535 : AliasTerm {} 536 | NameTerm {} 537 // | NameTermAslPlus {} 538 | ScopeTerm {} 539 ; 540 541 SimpleName 542 : NameString {} 543 | LocalTerm {} 544 | ArgTerm {} 545 ; 546 547 /* For ObjectType(), SuperName except for MethodInvocationTerm */ 548 549 ObjectTypeSource 550 : SimpleName {} 551 | DebugTerm {} 552 | RefOfTerm {} 553 | DerefOfTerm {} 554 | IndexTerm {} 555 | IndexExpTerm {} 556 ; 557 558 /* For DeRefOf(), SuperName except for DerefOf and Debug */ 559 560 DerefOfSource 561 : SimpleName {} 562 | RefOfTerm {} 563 | DerefOfTerm {} 564 | IndexTerm {} 565 | IndexExpTerm {} 566 | StoreTerm {} 567 | EqualsTerm {} 568 | MethodInvocationTerm {} 569 ; 570 571 /* For RefOf(), SuperName except for RefOf and MethodInvocationTerm */ 572 573 RefOfSource 574 : SimpleName {} 575 | DebugTerm {} 576 | DerefOfTerm {} 577 | IndexTerm {} 578 | IndexExpTerm {} 579 ; 580 581 /* For CondRefOf(), SuperName except for RefOf and MethodInvocationTerm */ 582 583 CondRefOfSource 584 : SimpleName {} 585 | DebugTerm {} 586 | DerefOfTerm {} 587 | IndexTerm {} 588 | IndexExpTerm {} 589 ; 590 591 /* 592 * Opcode types, as defined in the ACPI specification 593 */ 594 Type1Opcode 595 : BreakTerm {} 596 | BreakPointTerm {} 597 | ContinueTerm {} 598 | FatalTerm {} 599 | ForTerm {} 600 | ElseIfTerm {} 601 | LoadTerm {} 602 | NoOpTerm {} 603 | NotifyTerm {} 604 | ReleaseTerm {} 605 | ResetTerm {} 606 | ReturnTerm {} 607 | SignalTerm {} 608 | SleepTerm {} 609 | StallTerm {} 610 | SwitchTerm {} 611 | UnloadTerm {} 612 | WhileTerm {} 613 ; 614 615 Type2Opcode 616 : AcquireTerm {} 617 | CondRefOfTerm {} 618 | CopyObjectTerm {} 619 | DerefOfTerm {} 620 | ObjectTypeTerm {} 621 | RefOfTerm {} 622 | SizeOfTerm {} 623 | StoreTerm {} 624 | EqualsTerm {} 625 | TimerTerm {} 626 | WaitTerm {} 627 | MethodInvocationTerm {} 628 ; 629 630 /* 631 * Type 3/4/5 opcodes 632 */ 633 Type2IntegerOpcode /* "Type3" opcodes */ 634 : Expression {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);} 635 | AddTerm {} 636 | AndTerm {} 637 | DecTerm {} 638 | DivideTerm {} 639 | FindSetLeftBitTerm {} 640 | FindSetRightBitTerm {} 641 | FromBCDTerm {} 642 | IncTerm {} 643 | IndexTerm {} 644 // | StructureIndexTerm {} 645 // | StructurePointerTerm {} 646 | LAndTerm {} 647 | LEqualTerm {} 648 | LGreaterTerm {} 649 | LGreaterEqualTerm {} 650 | LLessTerm {} 651 | LLessEqualTerm {} 652 | LNotTerm {} 653 | LNotEqualTerm {} 654 | LoadTableTerm {} 655 | LOrTerm {} 656 | MatchTerm {} 657 | ModTerm {} 658 | MultiplyTerm {} 659 | NAndTerm {} 660 | NOrTerm {} 661 | NotTerm {} 662 | OrTerm {} 663 | ShiftLeftTerm {} 664 | ShiftRightTerm {} 665 | SubtractTerm {} 666 | ToBCDTerm {} 667 | ToIntegerTerm {} 668 | XOrTerm {} 669 ; 670 671 Type2StringOpcode /* "Type4" Opcodes */ 672 : ToDecimalStringTerm {} 673 | ToHexStringTerm {} 674 | ToStringTerm {} 675 ; 676 677 Type2BufferOpcode /* "Type5" Opcodes */ 678 : ToBufferTerm {} 679 | ConcatResTerm {} 680 ; 681 682 Type2BufferOrStringOpcode 683 : ConcatTerm {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);} 684 | PrintfTerm {} 685 | FprintfTerm {} 686 | MidTerm {} 687 ; 688 689 /* 690 * A type 3 opcode evaluates to an Integer and cannot have a destination operand 691 */ 692 Type3Opcode 693 : EISAIDTerm {} 694 ; 695 696 /* Obsolete 697 Type4Opcode 698 : ConcatTerm {} 699 | ToDecimalStringTerm {} 700 | ToHexStringTerm {} 701 | MidTerm {} 702 | ToStringTerm {} 703 ; 704 */ 705 706 /* Type 5 opcodes are a subset of Type2 opcodes, and return a constant */ 707 708 Type5Opcode 709 : ResourceTemplateTerm {} 710 | UnicodeTerm {} 711 | ToPLDTerm {} 712 | ToUUIDTerm {} 713 ; 714 715 Type6Opcode 716 : RefOfTerm {} 717 | DerefOfTerm {} 718 | IndexTerm {} 719 | IndexExpTerm {} 720 // | StructureIndexTerm {} 721 // | StructurePointerTerm {} 722 | MethodInvocationTerm {} 723 ; 724 725 726 /******************************************************************************* 727 * 728 * ASL Helper Terms 729 * 730 ******************************************************************************/ 731 732 AmlPackageLengthTerm 733 : Integer {$$ = TrUpdateNode (PARSEOP_PACKAGE_LENGTH, 734 (ACPI_PARSE_OBJECT *) $1);} 735 ; 736 737 NameStringItem 738 : ',' NameString {$$ = $2;} 739 | ',' error {$$ = AslDoError (); yyclearin;} 740 ; 741 742 TermArgItem 743 : ',' TermArg {$$ = $2;} 744 | ',' error {$$ = AslDoError (); yyclearin;} 745 ; 746 747 OptionalReference 748 : {$$ = TrCreateLeafNode (PARSEOP_ZERO);} /* Placeholder is a ZeroOp object */ 749 | ',' {$$ = TrCreateLeafNode (PARSEOP_ZERO);} /* Placeholder is a ZeroOp object */ 750 | ',' TermArg {$$ = $2;} 751 ; 752 753 OptionalReturnArg 754 : {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), 755 NODE_IS_NULL_RETURN);} /* Placeholder is a ZeroOp object */ 756 | TermArg {$$ = $1;} 757 ; 758 759 OptionalSerializeRuleKeyword 760 : {$$ = NULL;} 761 | ',' {$$ = NULL;} 762 | ',' SerializeRuleKeyword {$$ = $2;} 763 ; 764 765 OptionalTermArg 766 : {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);} 767 | TermArg {$$ = $1;} 768 ; 769 770 OptionalWordConst 771 : {$$ = NULL;} 772 | WordConst {$$ = $1;} 773 ; 774