aslrules.y revision 271440
1275970ScyNoEcho('
2275970Scy/******************************************************************************
3275970Scy *
4275970Scy * Module Name: aslrules.y - Bison/Yacc production rules
5275970Scy *
6275970Scy *****************************************************************************/
7275970Scy
8275970Scy/*
9275970Scy * Copyright (C) 2000 - 2014, Intel Corp.
10275970Scy * All rights reserved.
11275970Scy *
12275970Scy * Redistribution and use in source and binary forms, with or without
13275970Scy * modification, are permitted provided that the following conditions
14275970Scy * are met:
15275970Scy * 1. Redistributions of source code must retain the above copyright
16275970Scy *    notice, this list of conditions, and the following disclaimer,
17275970Scy *    without modification.
18275970Scy * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19275970Scy *    substantially similar to the "NO WARRANTY" disclaimer below
20275970Scy *    ("Disclaimer") and any redistribution must be conditioned upon
21275970Scy *    including a substantially similar Disclaimer requirement for further
22275970Scy *    binary redistribution.
23275970Scy * 3. Neither the names of the above-listed copyright holders nor the names
24275970Scy *    of any contributors may be used to endorse or promote products derived
25275970Scy *    from this software without specific prior written permission.
26275970Scy *
27275970Scy * Alternatively, this software may be distributed under the terms of the
28275970Scy * GNU General Public License ("GPL") version 2 as published by the Free
29275970Scy * Software Foundation.
30275970Scy *
31275970Scy * NO WARRANTY
32275970Scy * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33275970Scy * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34275970Scy * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35275970Scy * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36316722Sdelphij * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37275970Scy * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38275970Scy * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39275970Scy * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40275970Scy * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41275970Scy * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42275970Scy * POSSIBILITY OF SUCH DAMAGES.
43275970Scy */
44275970Scy
45275970Scy')
46275970Scy
47275970Scy/*******************************************************************************
48275970Scy *
49275970Scy * Production rules start here
50275970Scy *
51275970Scy ******************************************************************************/
52275970Scy
53275970Scy/*
54275970Scy * ASL Names
55275970Scy *
56275970Scy * Root rule. Allow multiple #line directives before the definition block
57275970Scy * to handle output from preprocessors
58275970Scy */
59275970ScyASLCode
60275970Scy    : DefinitionBlockTerm
61275970Scy    | error                         {YYABORT; $$ = NULL;}
62275970Scy    ;
63275970Scy
64275970Scy/*
65275970Scy * Blocks, Data, and Opcodes
66275970Scy */
67275970Scy
68275970Scy/*
69275970Scy * Note concerning support for "module-level code".
70275970Scy *
71275970Scy * ACPI 1.0 allowed Type1 and Type2 executable opcodes outside of control
72275970Scy * methods (the so-called module-level code.) This support was explicitly
73275970Scy * removed in ACPI 2.0, but this type of code continues to be created by
74275970Scy * BIOS vendors. In order to support the disassembly and recompilation of
75275970Scy * such code (and the porting of ASL code to iASL), iASL supports this
76275970Scy * code in violation of the current ACPI specification.
77275970Scy *
78275970Scy * The grammar change to support module-level code is to revert the
79275970Scy * {ObjectList} portion of the DefinitionBlockTerm in ACPI 2.0 to the
80275970Scy * original use of {TermList} instead (see below.) This allows the use
81275970Scy * of Type1 and Type2 opcodes at module level.
82275970Scy */
83275970ScyDefinitionBlockTerm
84275970Scy    : PARSEOP_DEFINITIONBLOCK '('   {$<n>$ = TrCreateLeafNode (PARSEOP_DEFINITIONBLOCK);}
85275970Scy        String ','
86275970Scy        String ','
87275970Scy        ByteConst ','
88275970Scy        String ','
89275970Scy        String ','
90275970Scy        DWordConst
91275970Scy        ')'                         {TrSetEndLineNumber ($<n>3);}
92275970Scy            '{' TermList '}'        {$$ = TrLinkChildren ($<n>3,7,$4,$6,$8,$10,$12,$14,$18);}
93275970Scy    ;
94275970Scy
95275970Scy/* ACPI 3.0 -- allow semicolons between terms */
96294554Sdelphij
97275970ScyTermList
98275970Scy    :                               {$$ = NULL;}
99275970Scy    | TermList Term                 {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
100275970Scy    | TermList Term ';'             {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
101275970Scy    | TermList ';' Term             {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
102275970Scy    | TermList ';' Term ';'         {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
103275970Scy    ;
104275970Scy
105294554SdelphijTerm
106294554Sdelphij    : Object                        {}
107294554Sdelphij    | Type1Opcode                   {}
108294554Sdelphij    | Type2Opcode                   {}
109294554Sdelphij    | Type2IntegerOpcode            {}
110294554Sdelphij    | Type2StringOpcode             {}
111294554Sdelphij    | Type2BufferOpcode             {}
112294554Sdelphij    | Type2BufferOrStringOpcode     {}
113294554Sdelphij    | error                         {$$ = AslDoError(); yyclearin;}
114275970Scy    ;
115275970Scy
116275970ScyCompilerDirective
117275970Scy    : IncludeTerm                   {}
118275970Scy    | ExternalTerm                  {}
119275970Scy    ;
120275970Scy
121275970ScyObjectList
122275970Scy    :                               {$$ = NULL;}
123275970Scy    | ObjectList Object             {$$ = TrLinkPeerNode ($1,$2);}
124275970Scy    | error                         {$$ = AslDoError(); yyclearin;}
125275970Scy    ;
126275970Scy
127275970ScyObject
128275970Scy    : CompilerDirective             {}
129275970Scy    | NamedObject                   {}
130275970Scy    | NameSpaceModifier             {}
131275970Scy    ;
132275970Scy
133275970ScyDataObject
134275970Scy    : BufferData                    {}
135275970Scy    | PackageData                   {}
136275970Scy    | IntegerData                   {}
137275970Scy    | StringData                    {}
138275970Scy    ;
139275970Scy
140275970ScyBufferData
141275970Scy    : Type5Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
142275970Scy    | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
143275970Scy    | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
144275970Scy    | BufferTerm                    {}
145275970Scy    ;
146275970Scy
147275970ScyPackageData
148275970Scy    : PackageTerm                   {}
149275970Scy    ;
150275970Scy
151275970ScyIntegerData
152275970Scy    : Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
153275970Scy    | Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
154275970Scy    | Integer                       {}
155275970Scy    | ConstTerm                     {}
156275970Scy    ;
157275970Scy
158275970ScyStringData
159275970Scy    : Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
160275970Scy    | String                        {}
161275970Scy    ;
162275970Scy
163275970ScyNamedObject
164275970Scy    : BankFieldTerm                 {}
165275970Scy    | CreateBitFieldTerm            {}
166275970Scy    | CreateByteFieldTerm           {}
167275970Scy    | CreateDWordFieldTerm          {}
168275970Scy    | CreateFieldTerm               {}
169275970Scy    | CreateQWordFieldTerm          {}
170275970Scy    | CreateWordFieldTerm           {}
171275970Scy    | DataRegionTerm                {}
172275970Scy    | DeviceTerm                    {}
173275970Scy    | EventTerm                     {}
174275970Scy    | FieldTerm                     {}
175275970Scy    | FunctionTerm                  {}
176275970Scy    | IndexFieldTerm                {}
177275970Scy    | MethodTerm                    {}
178275970Scy    | MutexTerm                     {}
179275970Scy    | OpRegionTerm                  {}
180275970Scy    | PowerResTerm                  {}
181275970Scy    | ProcessorTerm                 {}
182275970Scy    | ThermalZoneTerm               {}
183275970Scy    ;
184275970Scy
185275970ScyNameSpaceModifier
186275970Scy    : AliasTerm                     {}
187275970Scy    | NameTerm                      {}
188275970Scy    | ScopeTerm                     {}
189275970Scy    ;
190275970Scy
191275970ScyUserTerm
192275970Scy    : NameString '('                {TrUpdateNode (PARSEOP_METHODCALL, $1);}
193275970Scy        ArgList ')'                 {$$ = TrLinkChildNode ($1,$4);}
194275970Scy    ;
195275970Scy
196275970ScyArgList
197275970Scy    :                               {$$ = NULL;}
198275970Scy    | TermArg
199275970Scy    | ArgList ','                   /* Allows a trailing comma at list end */
200275970Scy    | ArgList ','
201275970Scy        TermArg                     {$$ = TrLinkPeerNode ($1,$3);}
202275970Scy    ;
203275970Scy
204275970Scy/*
205275970ScyRemoved from TermArg due to reduce/reduce conflicts
206275970Scy    | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
207275970Scy    | Type2StringOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
208275970Scy    | Type2BufferOpcode             {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
209    | Type2BufferOrStringOpcode     {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
210
211*/
212
213TermArg
214    : Type2Opcode                   {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
215    | DataObject                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
216    | NameString                    {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
217    | ArgTerm                       {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
218    | LocalTerm                     {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
219    ;
220
221Target
222    :                               {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_TARGET | NODE_COMPILE_TIME_CONST);} /* Placeholder is a ZeroOp object */
223    | ','                           {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_TARGET | NODE_COMPILE_TIME_CONST);} /* Placeholder is a ZeroOp object */
224    | ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
225    ;
226
227RequiredTarget
228    : ',' SuperName                 {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
229    ;
230
231SimpleTarget
232    : NameString                    {}
233    | LocalTerm                     {}
234    | ArgTerm                       {}
235    ;
236
237/* Rules for specifying the type of one method argument or return value */
238
239ParameterTypePackage
240    :                               {$$ = NULL;}
241    | ObjectTypeKeyword             {$$ = $1;}
242    | ParameterTypePackage ','
243        ObjectTypeKeyword           {$$ = TrLinkPeerNodes (2,$1,$3);}
244    ;
245
246ParameterTypePackageList
247    :                               {$$ = NULL;}
248    | ObjectTypeKeyword             {$$ = $1;}
249    | '{' ParameterTypePackage '}'  {$$ = $2;}
250    ;
251
252OptionalParameterTypePackage
253    :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
254    | ',' ParameterTypePackageList  {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
255    ;
256
257/* Rules for specifying the types for method arguments */
258
259ParameterTypesPackage
260    : ParameterTypePackageList      {$$ = $1;}
261    | ParameterTypesPackage ','
262        ParameterTypePackageList    {$$ = TrLinkPeerNodes (2,$1,$3);}
263    ;
264
265ParameterTypesPackageList
266    :                               {$$ = NULL;}
267    | ObjectTypeKeyword             {$$ = $1;}
268    | '{' ParameterTypesPackage '}' {$$ = $2;}
269    ;
270
271OptionalParameterTypesPackage
272    :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
273    | ',' ParameterTypesPackageList {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
274    ;
275
276
277/* Opcode types */
278
279Type1Opcode
280    : BreakTerm                     {}
281    | BreakPointTerm                {}
282    | ContinueTerm                  {}
283    | FatalTerm                     {}
284    | IfElseTerm                    {}
285    | LoadTerm                      {}
286    | NoOpTerm                      {}
287    | NotifyTerm                    {}
288    | ReleaseTerm                   {}
289    | ResetTerm                     {}
290    | ReturnTerm                    {}
291    | SignalTerm                    {}
292    | SleepTerm                     {}
293    | StallTerm                     {}
294    | SwitchTerm                    {}
295    | UnloadTerm                    {}
296    | WhileTerm                     {}
297    ;
298
299Type2Opcode
300    : AcquireTerm                   {}
301    | CondRefOfTerm                 {}
302    | CopyObjectTerm                {}
303    | DerefOfTerm                   {}
304    | ObjectTypeTerm                {}
305    | RefOfTerm                     {}
306    | SizeOfTerm                    {}
307    | StoreTerm                     {}
308    | TimerTerm                     {}
309    | WaitTerm                      {}
310    | UserTerm                      {}
311    ;
312
313/*
314 * Type 3/4/5 opcodes
315 */
316
317Type2IntegerOpcode                  /* "Type3" opcodes */
318    : AddTerm                       {}
319    | AndTerm                       {}
320    | DecTerm                       {}
321    | DivideTerm                    {}
322    | FindSetLeftBitTerm            {}
323    | FindSetRightBitTerm           {}
324    | FromBCDTerm                   {}
325    | IncTerm                       {}
326    | IndexTerm                     {}
327    | LAndTerm                      {}
328    | LEqualTerm                    {}
329    | LGreaterTerm                  {}
330    | LGreaterEqualTerm             {}
331    | LLessTerm                     {}
332    | LLessEqualTerm                {}
333    | LNotTerm                      {}
334    | LNotEqualTerm                 {}
335    | LoadTableTerm                 {}
336    | LOrTerm                       {}
337    | MatchTerm                     {}
338    | ModTerm                       {}
339    | MultiplyTerm                  {}
340    | NAndTerm                      {}
341    | NOrTerm                       {}
342    | NotTerm                       {}
343    | OrTerm                        {}
344    | ShiftLeftTerm                 {}
345    | ShiftRightTerm                {}
346    | SubtractTerm                  {}
347    | ToBCDTerm                     {}
348    | ToIntegerTerm                 {}
349    | XOrTerm                       {}
350    ;
351
352Type2StringOpcode                   /* "Type4" Opcodes */
353    : ToDecimalStringTerm           {}
354    | ToHexStringTerm               {}
355    | ToStringTerm                  {}
356    ;
357
358Type2BufferOpcode                   /* "Type5" Opcodes */
359    : ToBufferTerm                  {}
360    | ConcatResTerm                 {}
361    ;
362
363Type2BufferOrStringOpcode
364    : ConcatTerm                    {}
365    | MidTerm                       {}
366    ;
367
368/*
369 * A type 3 opcode evaluates to an Integer and cannot have a destination operand
370 */
371
372Type3Opcode
373    : EISAIDTerm                    {}
374    ;
375
376/* Obsolete
377Type4Opcode
378    : ConcatTerm                    {}
379    | ToDecimalStringTerm           {}
380    | ToHexStringTerm               {}
381    | MidTerm                       {}
382    | ToStringTerm                  {}
383    ;
384*/
385
386
387Type5Opcode
388    : ResourceTemplateTerm          {}
389    | UnicodeTerm                   {}
390    | ToUUIDTerm                    {}
391    ;
392
393Type6Opcode
394    : RefOfTerm                     {}
395    | DerefOfTerm                   {}
396    | IndexTerm                     {}
397    | UserTerm                      {}
398    ;
399
400IncludeTerm
401    : PARSEOP_INCLUDE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_INCLUDE);}
402        String  ')'                 {TrLinkChildren ($<n>3,1,$4);FlOpenIncludeFile ($4);}
403        TermList
404        IncludeEndTerm              {$$ = TrLinkPeerNodes (3,$<n>3,$7,$8);}
405    ;
406
407IncludeEndTerm
408    : PARSEOP_INCLUDE_END           {$$ = TrCreateLeafNode (PARSEOP_INCLUDE_END);}
409    ;
410
411ExternalTerm
412    : PARSEOP_EXTERNAL '('
413        NameString
414        OptionalObjectTypeKeyword
415        OptionalParameterTypePackage
416        OptionalParameterTypesPackage
417        ')'                         {$$ = TrCreateNode (PARSEOP_EXTERNAL,4,$3,$4,$5,$6);}
418    | PARSEOP_EXTERNAL '('
419        error ')'                   {$$ = AslDoError(); yyclearin;}
420    ;
421
422
423/******* Named Objects *******************************************************/
424
425
426BankFieldTerm
427    : PARSEOP_BANKFIELD '('         {$<n>$ = TrCreateLeafNode (PARSEOP_BANKFIELD);}
428        NameString
429        NameStringItem
430        TermArgItem
431        ',' AccessTypeKeyword
432        ',' LockRuleKeyword
433        ',' UpdateRuleKeyword
434        ')' '{'
435            FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,7,$4,$5,$6,$8,$10,$12,$15);}
436    | PARSEOP_BANKFIELD '('
437        error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
438    ;
439
440FieldUnitList
441    :                               {$$ = NULL;}
442    | FieldUnit
443    | FieldUnitList ','             /* Allows a trailing comma at list end */
444    | FieldUnitList ','
445        FieldUnit                   {$$ = TrLinkPeerNode ($1,$3);}
446    ;
447
448FieldUnit
449    : FieldUnitEntry                {}
450    | OffsetTerm                    {}
451    | AccessAsTerm                  {}
452    | ConnectionTerm                {}
453    ;
454
455FieldUnitEntry
456    : ',' AmlPackageLengthTerm      {$$ = TrCreateNode (PARSEOP_RESERVED_BYTES,1,$2);}
457    | NameSeg ','
458        AmlPackageLengthTerm        {$$ = TrLinkChildNode ($1,$3);}
459    ;
460
461OffsetTerm
462    : PARSEOP_OFFSET '('
463        AmlPackageLengthTerm
464        ')'                         {$$ = TrCreateNode (PARSEOP_OFFSET,1,$3);}
465    | PARSEOP_OFFSET '('
466        error ')'                   {$$ = AslDoError(); yyclearin;}
467    ;
468
469AccessAsTerm
470    : PARSEOP_ACCESSAS '('
471        AccessTypeKeyword
472        OptionalAccessAttribTerm
473        ')'                         {$$ = TrCreateNode (PARSEOP_ACCESSAS,2,$3,$4);}
474    | PARSEOP_ACCESSAS '('
475        error ')'                   {$$ = AslDoError(); yyclearin;}
476    ;
477
478ConnectionTerm
479    : PARSEOP_CONNECTION '('
480        NameString
481        ')'                         {$$ = TrCreateNode (PARSEOP_CONNECTION,1,$3);}
482    | PARSEOP_CONNECTION '('        {$<n>$ = TrCreateLeafNode (PARSEOP_CONNECTION);}
483        ResourceMacroTerm
484        ')'                         {$$ = TrLinkChildren ($<n>3, 1,
485                                            TrLinkChildren (TrCreateLeafNode (PARSEOP_RESOURCETEMPLATE), 3,
486                                                TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
487                                                TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
488                                                $4));}
489    | PARSEOP_CONNECTION '('
490        error ')'                   {$$ = AslDoError(); yyclearin;}
491    ;
492
493CreateBitFieldTerm
494    : PARSEOP_CREATEBITFIELD '('    {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBITFIELD);}
495        TermArg
496        TermArgItem
497        NameStringItem
498        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
499    | PARSEOP_CREATEBITFIELD '('
500        error ')'                   {$$ = AslDoError(); yyclearin;}
501    ;
502
503CreateByteFieldTerm
504    : PARSEOP_CREATEBYTEFIELD '('   {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEBYTEFIELD);}
505        TermArg
506        TermArgItem
507        NameStringItem
508        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
509    | PARSEOP_CREATEBYTEFIELD '('
510        error ')'                   {$$ = AslDoError(); yyclearin;}
511    ;
512
513CreateDWordFieldTerm
514    : PARSEOP_CREATEDWORDFIELD '('  {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEDWORDFIELD);}
515        TermArg
516        TermArgItem
517        NameStringItem
518        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
519    | PARSEOP_CREATEDWORDFIELD '('
520        error ')'                   {$$ = AslDoError(); yyclearin;}
521    ;
522
523CreateFieldTerm
524    : PARSEOP_CREATEFIELD '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEFIELD);}
525        TermArg
526        TermArgItem
527        TermArgItem
528        NameStringItem
529        ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,TrSetNodeFlags ($7, NODE_IS_NAME_DECLARATION));}
530    | PARSEOP_CREATEFIELD '('
531        error ')'                   {$$ = AslDoError(); yyclearin;}
532    ;
533
534CreateQWordFieldTerm
535    : PARSEOP_CREATEQWORDFIELD '('  {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEQWORDFIELD);}
536        TermArg
537        TermArgItem
538        NameStringItem
539        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
540    | PARSEOP_CREATEQWORDFIELD '('
541        error ')'                   {$$ = AslDoError(); yyclearin;}
542    ;
543
544CreateWordFieldTerm
545    : PARSEOP_CREATEWORDFIELD '('   {$<n>$ = TrCreateLeafNode (PARSEOP_CREATEWORDFIELD);}
546        TermArg
547        TermArgItem
548        NameStringItem
549        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,TrSetNodeFlags ($6, NODE_IS_NAME_DECLARATION));}
550    | PARSEOP_CREATEWORDFIELD '('
551        error ')'                   {$$ = AslDoError(); yyclearin;}
552    ;
553
554DataRegionTerm
555    : PARSEOP_DATATABLEREGION '('   {$<n>$ = TrCreateLeafNode (PARSEOP_DATATABLEREGION);}
556        NameString
557        TermArgItem
558        TermArgItem
559        TermArgItem
560        ')'                         {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$6,$7);}
561    | PARSEOP_DATATABLEREGION '('
562        error ')'                   {$$ = AslDoError(); yyclearin;}
563    ;
564
565DeviceTerm
566    : PARSEOP_DEVICE '('            {$<n>$ = TrCreateLeafNode (PARSEOP_DEVICE);}
567        NameString
568        ')' '{'
569            ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
570    | PARSEOP_DEVICE '('
571        error ')'                   {$$ = AslDoError(); yyclearin;}
572    ;
573
574EventTerm
575    : PARSEOP_EVENT '('             {$<n>$ = TrCreateLeafNode (PARSEOP_EVENT);}
576        NameString
577        ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION));}
578    | PARSEOP_EVENT '('
579        error ')'                   {$$ = AslDoError(); yyclearin;}
580    ;
581
582FieldTerm
583    : PARSEOP_FIELD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_FIELD);}
584        NameString
585        ',' AccessTypeKeyword
586        ',' LockRuleKeyword
587        ',' UpdateRuleKeyword
588        ')' '{'
589            FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,5,$4,$6,$8,$10,$13);}
590    | PARSEOP_FIELD '('
591        error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
592    ;
593
594FunctionTerm
595    : PARSEOP_FUNCTION '('          {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
596        NameString
597        OptionalParameterTypePackage
598        OptionalParameterTypesPackage
599        ')' '{'
600            TermList '}'            {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),
601                                        TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),
602                                        TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL),
603                                        TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),$5,$6,$9);}
604    | PARSEOP_FUNCTION '('
605        error ')'                   {$$ = AslDoError(); yyclearin;}
606    ;
607
608IndexFieldTerm
609    : PARSEOP_INDEXFIELD '('        {$<n>$ = TrCreateLeafNode (PARSEOP_INDEXFIELD);}
610        NameString
611        NameStringItem
612        ',' AccessTypeKeyword
613        ',' LockRuleKeyword
614        ',' UpdateRuleKeyword
615        ')' '{'
616            FieldUnitList '}'       {$$ = TrLinkChildren ($<n>3,6,$4,$5,$7,$9,$11,$14);}
617    | PARSEOP_INDEXFIELD '('
618        error ')' '{' error '}'     {$$ = AslDoError(); yyclearin;}
619    ;
620
621MethodTerm
622    : PARSEOP_METHOD  '('           {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
623        NameString
624        OptionalByteConstExpr       {UtCheckIntegerRange ($5, 0, 7);}
625        OptionalSerializeRuleKeyword
626        OptionalByteConstExpr
627        OptionalParameterTypePackage
628        OptionalParameterTypesPackage
629        ')' '{'
630            TermList '}'            {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$7,$8,$9,$10,$13);}
631    | PARSEOP_METHOD '('
632        error ')'                   {$$ = AslDoError(); yyclearin;}
633    ;
634
635MutexTerm
636    : PARSEOP_MUTEX '('             {$<n>$ = TrCreateLeafNode (PARSEOP_MUTEX);}
637        NameString
638        ',' ByteConstExpr
639        ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
640    | PARSEOP_MUTEX '('
641        error ')'                   {$$ = AslDoError(); yyclearin;}
642    ;
643
644OpRegionTerm
645    : PARSEOP_OPERATIONREGION '('   {$<n>$ = TrCreateLeafNode (PARSEOP_OPERATIONREGION);}
646        NameString
647        ',' OpRegionSpaceIdTerm
648        TermArgItem
649        TermArgItem
650        ')'                         {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8);}
651    | PARSEOP_OPERATIONREGION '('
652        error ')'                   {$$ = AslDoError(); yyclearin;}
653    ;
654
655OpRegionSpaceIdTerm
656    : RegionSpaceKeyword            {}
657    | ByteConst                     {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
658    ;
659
660PowerResTerm
661    : PARSEOP_POWERRESOURCE '('     {$<n>$ = TrCreateLeafNode (PARSEOP_POWERRESOURCE);}
662        NameString
663        ',' ByteConstExpr
664        ',' WordConstExpr
665        ')' '{'
666            ObjectList '}'          {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$8,$11);}
667    | PARSEOP_POWERRESOURCE '('
668        error ')'                   {$$ = AslDoError(); yyclearin;}
669    ;
670
671ProcessorTerm
672    : PARSEOP_PROCESSOR '('         {$<n>$ = TrCreateLeafNode (PARSEOP_PROCESSOR);}
673        NameString
674        ',' ByteConstExpr
675        OptionalDWordConstExpr
676        OptionalByteConstExpr
677        ')' '{'
678            ObjectList '}'          {$$ = TrLinkChildren ($<n>3,5,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8,$11);}
679    | PARSEOP_PROCESSOR '('
680        error ')'                   {$$ = AslDoError(); yyclearin;}
681    ;
682
683ThermalZoneTerm
684    : PARSEOP_THERMALZONE '('       {$<n>$ = TrCreateLeafNode (PARSEOP_THERMALZONE);}
685        NameString
686        ')' '{'
687            ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
688    | PARSEOP_THERMALZONE '('
689        error ')'                   {$$ = AslDoError(); yyclearin;}
690    ;
691
692
693/******* Namespace modifiers *************************************************/
694
695
696AliasTerm
697    : PARSEOP_ALIAS '('             {$<n>$ = TrCreateLeafNode (PARSEOP_ALIAS);}
698        NameString
699        NameStringItem
700        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($5, NODE_IS_NAME_DECLARATION));}
701    | PARSEOP_ALIAS '('
702        error ')'                   {$$ = AslDoError(); yyclearin;}
703    ;
704
705NameTerm
706    : PARSEOP_NAME '('              {$<n>$ = TrCreateLeafNode (PARSEOP_NAME);}
707        NameString
708        ',' DataObject
709        ')'                         {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6);}
710    | PARSEOP_NAME '('
711        error ')'                   {$$ = AslDoError(); yyclearin;}
712    ;
713
714ScopeTerm
715    : PARSEOP_SCOPE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_SCOPE);}
716        NameString
717        ')' '{'
718            ObjectList '}'          {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
719    | PARSEOP_SCOPE '('
720        error ')'                   {$$ = AslDoError(); yyclearin;}
721    ;
722
723
724/******* Type 1 opcodes *******************************************************/
725
726
727BreakTerm
728    : PARSEOP_BREAK                 {$$ = TrCreateNode (PARSEOP_BREAK, 0);}
729    ;
730
731BreakPointTerm
732    : PARSEOP_BREAKPOINT            {$$ = TrCreateNode (PARSEOP_BREAKPOINT, 0);}
733    ;
734
735ContinueTerm
736    : PARSEOP_CONTINUE              {$$ = TrCreateNode (PARSEOP_CONTINUE, 0);}
737    ;
738
739FatalTerm
740    : PARSEOP_FATAL '('             {$<n>$ = TrCreateLeafNode (PARSEOP_FATAL);}
741        ByteConstExpr
742        ',' DWordConstExpr
743        TermArgItem
744        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
745    | PARSEOP_FATAL '('
746        error ')'                   {$$ = AslDoError(); yyclearin;}
747    ;
748
749IfElseTerm
750    : IfTerm ElseTerm               {$$ = TrLinkPeerNode ($1,$2);}
751    ;
752
753IfTerm
754    : PARSEOP_IF '('                {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
755        TermArg
756        ')' '{'
757            TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
758
759    | PARSEOP_IF '('
760        error ')'                   {$$ = AslDoError(); yyclearin;}
761    ;
762
763ElseTerm
764    :                               {$$ = NULL;}
765    | PARSEOP_ELSE '{'              {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
766        TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
767
768    | PARSEOP_ELSE '{'
769        error '}'                   {$$ = AslDoError(); yyclearin;}
770
771    | PARSEOP_ELSE
772        error                       {$$ = AslDoError(); yyclearin;}
773
774    | PARSEOP_ELSEIF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
775        TermArg                     {$<n>$ = TrCreateLeafNode (PARSEOP_IF);}
776        ')' '{'
777            TermList '}'            {TrLinkChildren ($<n>5,2,$4,$8);}
778        ElseTerm                    {TrLinkPeerNode ($<n>5,$11);}
779                                    {$$ = TrLinkChildren ($<n>3,1,$<n>5);}
780
781    | PARSEOP_ELSEIF '('
782        error ')'                   {$$ = AslDoError(); yyclearin;}
783
784    | PARSEOP_ELSEIF
785        error                       {$$ = AslDoError(); yyclearin;}
786    ;
787
788LoadTerm
789    : PARSEOP_LOAD '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LOAD);}
790        NameString
791        RequiredTarget
792        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
793    | PARSEOP_LOAD '('
794        error ')'                   {$$ = AslDoError(); yyclearin;}
795    ;
796
797NoOpTerm
798    : PARSEOP_NOOP                  {$$ = TrCreateNode (PARSEOP_NOOP, 0);}
799    ;
800
801NotifyTerm
802    : PARSEOP_NOTIFY '('            {$<n>$ = TrCreateLeafNode (PARSEOP_NOTIFY);}
803        SuperName
804        TermArgItem
805        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
806    | PARSEOP_NOTIFY '('
807        error ')'                   {$$ = AslDoError(); yyclearin;}
808    ;
809
810ReleaseTerm
811    : PARSEOP_RELEASE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_RELEASE);}
812        SuperName
813        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
814    | PARSEOP_RELEASE '('
815        error ')'                   {$$ = AslDoError(); yyclearin;}
816    ;
817
818ResetTerm
819    : PARSEOP_RESET '('             {$<n>$ = TrCreateLeafNode (PARSEOP_RESET);}
820        SuperName
821        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
822    | PARSEOP_RESET '('
823        error ')'                   {$$ = AslDoError(); yyclearin;}
824    ;
825
826ReturnTerm
827    : PARSEOP_RETURN '('            {$<n>$ = TrCreateLeafNode (PARSEOP_RETURN);}
828        OptionalReturnArg
829        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
830    | PARSEOP_RETURN                {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_RETURN),1,TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN));}
831    | PARSEOP_RETURN '('
832        error ')'                   {$$ = AslDoError(); yyclearin;}
833    ;
834
835SignalTerm
836    : PARSEOP_SIGNAL '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SIGNAL);}
837        SuperName
838        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
839    | PARSEOP_SIGNAL '('
840        error ')'                   {$$ = AslDoError(); yyclearin;}
841    ;
842
843SleepTerm
844    : PARSEOP_SLEEP '('             {$<n>$ = TrCreateLeafNode (PARSEOP_SLEEP);}
845        TermArg
846        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
847    | PARSEOP_SLEEP '('
848        error ')'                   {$$ = AslDoError(); yyclearin;}
849    ;
850
851StallTerm
852    : PARSEOP_STALL '('             {$<n>$ = TrCreateLeafNode (PARSEOP_STALL);}
853        TermArg
854        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
855    | PARSEOP_STALL '('
856        error ')'                   {$$ = AslDoError(); yyclearin;}
857    ;
858
859SwitchTerm
860    : PARSEOP_SWITCH '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SWITCH);}
861        TermArg
862        ')' '{'
863            CaseDefaultTermList '}'
864                                    {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
865    | PARSEOP_SWITCH '('
866        error ')'                   {$$ = AslDoError(); yyclearin;}
867    ;
868
869/*
870 * Case-Default list; allow only one Default term and unlimited Case terms
871 */
872
873CaseDefaultTermList
874    :                               {$$ = NULL;}
875    | CaseTerm  {}
876    | DefaultTerm   {}
877    | CaseDefaultTermList
878        CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
879    | CaseDefaultTermList
880        DefaultTerm                 {$$ = TrLinkPeerNode ($1,$2);}
881
882/* Original - attempts to force zero or one default term within the switch */
883
884/*
885CaseDefaultTermList
886    :                               {$$ = NULL;}
887    | CaseTermList
888        DefaultTerm
889        CaseTermList                {$$ = TrLinkPeerNode ($1,TrLinkPeerNode ($2, $3));}
890    | CaseTermList
891        CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
892    ;
893
894CaseTermList
895    :                               {$$ = NULL;}
896    | CaseTerm                      {}
897    | CaseTermList
898        CaseTerm                    {$$ = TrLinkPeerNode ($1,$2);}
899    ;
900*/
901
902CaseTerm
903    : PARSEOP_CASE '('              {$<n>$ = TrCreateLeafNode (PARSEOP_CASE);}
904        DataObject
905        ')' '{'
906            TermList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
907    | PARSEOP_CASE '('
908        error ')'                   {$$ = AslDoError(); yyclearin;}
909    ;
910
911DefaultTerm
912    : PARSEOP_DEFAULT '{'           {$<n>$ = TrCreateLeafNode (PARSEOP_DEFAULT);}
913        TermList '}'                {$$ = TrLinkChildren ($<n>3,1,$4);}
914    | PARSEOP_DEFAULT '{'
915        error '}'                   {$$ = AslDoError(); yyclearin;}
916    ;
917
918UnloadTerm
919    : PARSEOP_UNLOAD '('            {$<n>$ = TrCreateLeafNode (PARSEOP_UNLOAD);}
920        SuperName
921        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
922    | PARSEOP_UNLOAD '('
923        error ')'                   {$$ = AslDoError(); yyclearin;}
924    ;
925
926WhileTerm
927    : PARSEOP_WHILE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_WHILE);}
928        TermArg
929        ')' '{' TermList '}'
930                                    {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
931    | PARSEOP_WHILE '('
932        error ')'                   {$$ = AslDoError(); yyclearin;}
933    ;
934
935
936/******* Type 2 opcodes *******************************************************/
937
938AcquireTerm
939    : PARSEOP_ACQUIRE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_ACQUIRE);}
940        SuperName
941        ',' WordConstExpr
942        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$6);}
943    | PARSEOP_ACQUIRE '('
944        error ')'                   {$$ = AslDoError(); yyclearin;}
945    ;
946
947AddTerm
948    : PARSEOP_ADD '('               {$<n>$ = TrCreateLeafNode (PARSEOP_ADD);}
949        TermArg
950        TermArgItem
951        Target
952        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
953    | PARSEOP_ADD '('
954        error ')'                   {$$ = AslDoError(); yyclearin;}
955    ;
956
957AndTerm
958    : PARSEOP_AND '('               {$<n>$ = TrCreateLeafNode (PARSEOP_AND);}
959        TermArg
960        TermArgItem
961        Target
962        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
963    | PARSEOP_AND '('
964        error ')'                   {$$ = AslDoError(); yyclearin;}
965    ;
966
967ConcatTerm
968    : PARSEOP_CONCATENATE '('       {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATE);}
969        TermArg
970        TermArgItem
971        Target
972        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
973    | PARSEOP_CONCATENATE '('
974        error ')'                   {$$ = AslDoError(); yyclearin;}
975    ;
976
977ConcatResTerm
978    : PARSEOP_CONCATENATERESTEMPLATE '('    {$<n>$ = TrCreateLeafNode (PARSEOP_CONCATENATERESTEMPLATE);}
979        TermArg
980        TermArgItem
981        Target
982        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
983    | PARSEOP_CONCATENATERESTEMPLATE '('
984        error ')'                   {$$ = AslDoError(); yyclearin;}
985    ;
986
987CondRefOfTerm
988    : PARSEOP_CONDREFOF '('         {$<n>$ = TrCreateLeafNode (PARSEOP_CONDREFOF);}
989        SuperName
990        Target
991        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
992    | PARSEOP_CONDREFOF '('
993        error ')'                   {$$ = AslDoError(); yyclearin;}
994    ;
995
996CopyObjectTerm
997    : PARSEOP_COPYOBJECT '('        {$<n>$ = TrCreateLeafNode (PARSEOP_COPYOBJECT);}
998        TermArg
999        ',' SimpleTarget
1000        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
1001    | PARSEOP_COPYOBJECT '('
1002        error ')'                   {$$ = AslDoError(); yyclearin;}
1003    ;
1004
1005DecTerm
1006    : PARSEOP_DECREMENT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_DECREMENT);}
1007        SuperName
1008        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1009    | PARSEOP_DECREMENT '('
1010        error ')'                   {$$ = AslDoError(); yyclearin;}
1011    ;
1012
1013DerefOfTerm
1014    : PARSEOP_DEREFOF '('           {$<n>$ = TrCreateLeafNode (PARSEOP_DEREFOF);}
1015        TermArg
1016        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1017    | PARSEOP_DEREFOF '('
1018        error ')'                   {$$ = AslDoError(); yyclearin;}
1019    ;
1020
1021DivideTerm
1022    : PARSEOP_DIVIDE '('            {$<n>$ = TrCreateLeafNode (PARSEOP_DIVIDE);}
1023        TermArg
1024        TermArgItem
1025        Target
1026        Target
1027        ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
1028    | PARSEOP_DIVIDE '('
1029        error ')'                   {$$ = AslDoError(); yyclearin;}
1030    ;
1031
1032FindSetLeftBitTerm
1033    : PARSEOP_FINDSETLEFTBIT '('    {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETLEFTBIT);}
1034        TermArg
1035        Target
1036        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1037    | PARSEOP_FINDSETLEFTBIT '('
1038        error ')'                   {$$ = AslDoError(); yyclearin;}
1039    ;
1040
1041FindSetRightBitTerm
1042    : PARSEOP_FINDSETRIGHTBIT '('   {$<n>$ = TrCreateLeafNode (PARSEOP_FINDSETRIGHTBIT);}
1043        TermArg
1044        Target
1045        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1046    | PARSEOP_FINDSETRIGHTBIT '('
1047        error ')'                   {$$ = AslDoError(); yyclearin;}
1048    ;
1049
1050FromBCDTerm
1051    : PARSEOP_FROMBCD '('           {$<n>$ = TrCreateLeafNode (PARSEOP_FROMBCD);}
1052        TermArg
1053        Target
1054        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1055    | PARSEOP_FROMBCD '('
1056        error ')'                   {$$ = AslDoError(); yyclearin;}
1057    ;
1058
1059IncTerm
1060    : PARSEOP_INCREMENT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_INCREMENT);}
1061        SuperName
1062        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1063    | PARSEOP_INCREMENT '('
1064        error ')'                   {$$ = AslDoError(); yyclearin;}
1065    ;
1066
1067IndexTerm
1068    : PARSEOP_INDEX '('             {$<n>$ = TrCreateLeafNode (PARSEOP_INDEX);}
1069        TermArg
1070        TermArgItem
1071        Target
1072        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1073    | PARSEOP_INDEX '('
1074        error ')'                   {$$ = AslDoError(); yyclearin;}
1075    ;
1076
1077LAndTerm
1078    : PARSEOP_LAND '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LAND);}
1079        TermArg
1080        TermArgItem
1081        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1082    | PARSEOP_LAND '('
1083        error ')'                   {$$ = AslDoError(); yyclearin;}
1084    ;
1085
1086LEqualTerm
1087    : PARSEOP_LEQUAL '('            {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
1088        TermArg
1089        TermArgItem
1090        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1091    | PARSEOP_LEQUAL '('
1092        error ')'                   {$$ = AslDoError(); yyclearin;}
1093    ;
1094
1095LGreaterTerm
1096    : PARSEOP_LGREATER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
1097        TermArg
1098        TermArgItem
1099        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1100    | PARSEOP_LGREATER '('
1101        error ')'                   {$$ = AslDoError(); yyclearin;}
1102    ;
1103
1104LGreaterEqualTerm
1105    : PARSEOP_LGREATEREQUAL '('     {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
1106        TermArg
1107        TermArgItem
1108        ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
1109    | PARSEOP_LGREATEREQUAL '('
1110        error ')'                   {$$ = AslDoError(); yyclearin;}
1111    ;
1112
1113LLessTerm
1114    : PARSEOP_LLESS '('             {$<n>$ = TrCreateLeafNode (PARSEOP_LLESS);}
1115        TermArg
1116        TermArgItem
1117        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1118    | PARSEOP_LLESS '('
1119        error ')'                   {$$ = AslDoError(); yyclearin;}
1120    ;
1121
1122LLessEqualTerm
1123    : PARSEOP_LLESSEQUAL '('        {$<n>$ = TrCreateLeafNode (PARSEOP_LGREATER);}
1124        TermArg
1125        TermArgItem
1126        ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
1127    | PARSEOP_LLESSEQUAL '('
1128        error ')'                   {$$ = AslDoError(); yyclearin;}
1129    ;
1130
1131LNotTerm
1132    : PARSEOP_LNOT '('              {$<n>$ = TrCreateLeafNode (PARSEOP_LNOT);}
1133        TermArg
1134        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1135    | PARSEOP_LNOT '('
1136        error ')'                   {$$ = AslDoError(); yyclearin;}
1137    ;
1138
1139LNotEqualTerm
1140    : PARSEOP_LNOTEQUAL '('         {$<n>$ = TrCreateLeafNode (PARSEOP_LEQUAL);}
1141        TermArg
1142        TermArgItem
1143        ')'                         {$$ = TrCreateNode (PARSEOP_LNOT, 1, TrLinkChildren ($<n>3,2,$4,$5));}
1144    | PARSEOP_LNOTEQUAL '('
1145        error ')'                   {$$ = AslDoError(); yyclearin;}
1146    ;
1147
1148LoadTableTerm
1149    : PARSEOP_LOADTABLE '('         {$<n>$ = TrCreateLeafNode (PARSEOP_LOADTABLE);}
1150        TermArg
1151        TermArgItem
1152        TermArgItem
1153        OptionalListString
1154        OptionalListString
1155        OptionalReference
1156        ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$5,$6,$7,$8,$9);}
1157    | PARSEOP_LOADTABLE '('
1158        error ')'                   {$$ = AslDoError(); yyclearin;}
1159    ;
1160
1161LOrTerm
1162    : PARSEOP_LOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_LOR);}
1163        TermArg
1164        TermArgItem
1165        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1166    | PARSEOP_LOR '('
1167        error ')'                   {$$ = AslDoError(); yyclearin;}
1168    ;
1169
1170MatchTerm
1171    : PARSEOP_MATCH '('             {$<n>$ = TrCreateLeafNode (PARSEOP_MATCH);}
1172        TermArg
1173        ',' MatchOpKeyword
1174        TermArgItem
1175        ',' MatchOpKeyword
1176        TermArgItem
1177        TermArgItem
1178        ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$7,$9,$10,$11);}
1179    | PARSEOP_MATCH '('
1180        error ')'                   {$$ = AslDoError(); yyclearin;}
1181    ;
1182
1183MidTerm
1184    : PARSEOP_MID '('               {$<n>$ = TrCreateLeafNode (PARSEOP_MID);}
1185        TermArg
1186        TermArgItem
1187        TermArgItem
1188        Target
1189        ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$5,$6,$7);}
1190    | PARSEOP_MID '('
1191        error ')'                   {$$ = AslDoError(); yyclearin;}
1192    ;
1193
1194ModTerm
1195    : PARSEOP_MOD '('               {$<n>$ = TrCreateLeafNode (PARSEOP_MOD);}
1196        TermArg
1197        TermArgItem
1198        Target
1199        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1200    | PARSEOP_MOD '('
1201        error ')'                   {$$ = AslDoError(); yyclearin;}
1202    ;
1203
1204MultiplyTerm
1205    : PARSEOP_MULTIPLY '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MULTIPLY);}
1206        TermArg
1207        TermArgItem
1208        Target
1209        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1210    | PARSEOP_MULTIPLY '('
1211        error ')'                   {$$ = AslDoError(); yyclearin;}
1212    ;
1213
1214NAndTerm
1215    : PARSEOP_NAND '('              {$<n>$ = TrCreateLeafNode (PARSEOP_NAND);}
1216        TermArg
1217        TermArgItem
1218        Target
1219        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1220    | PARSEOP_NAND '('
1221        error ')'                   {$$ = AslDoError(); yyclearin;}
1222    ;
1223
1224NOrTerm
1225    : PARSEOP_NOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_NOR);}
1226        TermArg
1227        TermArgItem
1228        Target
1229        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1230    | PARSEOP_NOR '('
1231        error ')'                   {$$ = AslDoError(); yyclearin;}
1232    ;
1233
1234NotTerm
1235    : PARSEOP_NOT '('               {$<n>$ = TrCreateLeafNode (PARSEOP_NOT);}
1236        TermArg
1237        Target
1238        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1239    | PARSEOP_NOT '('
1240        error ')'                   {$$ = AslDoError(); yyclearin;}
1241    ;
1242
1243ObjectTypeTerm
1244    : PARSEOP_OBJECTTYPE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE);}
1245        ObjectTypeName
1246        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1247    | PARSEOP_OBJECTTYPE '('
1248        error ')'                   {$$ = AslDoError(); yyclearin;}
1249    ;
1250
1251OrTerm
1252    : PARSEOP_OR '('                {$<n>$ = TrCreateLeafNode (PARSEOP_OR);}
1253        TermArg
1254        TermArgItem
1255        Target
1256        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1257    | PARSEOP_OR '('
1258        error ')'                   {$$ = AslDoError(); yyclearin;}
1259    ;
1260
1261/*
1262 * In RefOf, the node isn't really a target, but we can't keep track of it after
1263 * we've taken a pointer to it. (hard to tell if a local becomes initialized this way.)
1264 */
1265RefOfTerm
1266    : PARSEOP_REFOF '('             {$<n>$ = TrCreateLeafNode (PARSEOP_REFOF);}
1267        SuperName
1268        ')'                         {$$ = TrLinkChildren ($<n>3,1,TrSetNodeFlags ($4, NODE_IS_TARGET));}
1269    | PARSEOP_REFOF '('
1270        error ')'                   {$$ = AslDoError(); yyclearin;}
1271    ;
1272
1273ShiftLeftTerm
1274    : PARSEOP_SHIFTLEFT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTLEFT);}
1275        TermArg
1276        TermArgItem
1277        Target
1278        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1279    | PARSEOP_SHIFTLEFT '('
1280        error ')'                   {$$ = AslDoError(); yyclearin;}
1281    ;
1282
1283ShiftRightTerm
1284    : PARSEOP_SHIFTRIGHT '('        {$<n>$ = TrCreateLeafNode (PARSEOP_SHIFTRIGHT);}
1285        TermArg
1286        TermArgItem
1287        Target
1288        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1289    | PARSEOP_SHIFTRIGHT '('
1290        error ')'                   {$$ = AslDoError(); yyclearin;}
1291    ;
1292
1293SizeOfTerm
1294    : PARSEOP_SIZEOF '('            {$<n>$ = TrCreateLeafNode (PARSEOP_SIZEOF);}
1295        SuperName
1296        ')'                         {$$ = TrLinkChildren ($<n>3,1,$4);}
1297    | PARSEOP_SIZEOF '('
1298        error ')'                   {$$ = AslDoError(); yyclearin;}
1299    ;
1300
1301StoreTerm
1302    : PARSEOP_STORE '('             {$<n>$ = TrCreateLeafNode (PARSEOP_STORE);}
1303        TermArg
1304        ',' SuperName
1305        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,TrSetNodeFlags ($6, NODE_IS_TARGET));}
1306    | PARSEOP_STORE '('
1307        error ')'                   {$$ = AslDoError(); yyclearin;}
1308    ;
1309
1310SubtractTerm
1311    : PARSEOP_SUBTRACT '('          {$<n>$ = TrCreateLeafNode (PARSEOP_SUBTRACT);}
1312        TermArg
1313        TermArgItem
1314        Target
1315        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1316    | PARSEOP_SUBTRACT '('
1317        error ')'                   {$$ = AslDoError(); yyclearin;}
1318    ;
1319
1320TimerTerm
1321    : PARSEOP_TIMER '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TIMER);}
1322        ')'                         {$$ = TrLinkChildren ($<n>3,0);}
1323    | PARSEOP_TIMER                 {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_TIMER),0);}
1324    | PARSEOP_TIMER '('
1325        error ')'                   {$$ = AslDoError(); yyclearin;}
1326    ;
1327
1328ToBCDTerm
1329    : PARSEOP_TOBCD '('             {$<n>$ = TrCreateLeafNode (PARSEOP_TOBCD);}
1330        TermArg
1331        Target
1332        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1333    | PARSEOP_TOBCD '('
1334        error ')'                   {$$ = AslDoError(); yyclearin;}
1335    ;
1336
1337ToBufferTerm
1338    : PARSEOP_TOBUFFER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_TOBUFFER);}
1339        TermArg
1340        Target
1341        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1342    | PARSEOP_TOBUFFER '('
1343        error ')'                   {$$ = AslDoError(); yyclearin;}
1344    ;
1345
1346ToDecimalStringTerm
1347    : PARSEOP_TODECIMALSTRING '('   {$<n>$ = TrCreateLeafNode (PARSEOP_TODECIMALSTRING);}
1348        TermArg
1349        Target
1350        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1351    | PARSEOP_TODECIMALSTRING '('
1352        error ')'                   {$$ = AslDoError(); yyclearin;}
1353    ;
1354
1355ToHexStringTerm
1356    : PARSEOP_TOHEXSTRING '('       {$<n>$ = TrCreateLeafNode (PARSEOP_TOHEXSTRING);}
1357        TermArg
1358        Target
1359        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1360    | PARSEOP_TOHEXSTRING '('
1361        error ')'                   {$$ = AslDoError(); yyclearin;}
1362    ;
1363
1364ToIntegerTerm
1365    : PARSEOP_TOINTEGER '('         {$<n>$ = TrCreateLeafNode (PARSEOP_TOINTEGER);}
1366        TermArg
1367        Target
1368        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1369    | PARSEOP_TOINTEGER '('
1370        error ')'                   {$$ = AslDoError(); yyclearin;}
1371    ;
1372
1373ToStringTerm
1374    : PARSEOP_TOSTRING '('          {$<n>$ = TrCreateLeafNode (PARSEOP_TOSTRING);}
1375        TermArg
1376        OptionalCount
1377        Target
1378        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1379    | PARSEOP_TOSTRING '('
1380        error ')'                   {$$ = AslDoError(); yyclearin;}
1381    ;
1382
1383ToUUIDTerm
1384    : PARSEOP_TOUUID '('
1385        StringData ')'              {$$ = TrUpdateNode (PARSEOP_TOUUID, $3);}
1386    | PARSEOP_TOUUID '('
1387        error ')'                   {$$ = AslDoError(); yyclearin;}
1388    ;
1389
1390WaitTerm
1391    : PARSEOP_WAIT '('              {$<n>$ = TrCreateLeafNode (PARSEOP_WAIT);}
1392        SuperName
1393        TermArgItem
1394        ')'                         {$$ = TrLinkChildren ($<n>3,2,$4,$5);}
1395    | PARSEOP_WAIT '('
1396        error ')'                   {$$ = AslDoError(); yyclearin;}
1397    ;
1398
1399XOrTerm
1400    : PARSEOP_XOR '('               {$<n>$ = TrCreateLeafNode (PARSEOP_XOR);}
1401        TermArg
1402        TermArgItem
1403        Target
1404        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$5,$6);}
1405    | PARSEOP_XOR '('
1406        error ')'                   {$$ = AslDoError(); yyclearin;}
1407    ;
1408
1409
1410/******* Keywords *************************************************************/
1411
1412
1413AccessAttribKeyword
1414    : PARSEOP_ACCESSATTRIB_BLOCK            {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BLOCK);}
1415    | PARSEOP_ACCESSATTRIB_BLOCK_CALL       {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BLOCK_CALL);}
1416    | PARSEOP_ACCESSATTRIB_BYTE             {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BYTE);}
1417    | PARSEOP_ACCESSATTRIB_QUICK            {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_QUICK );}
1418    | PARSEOP_ACCESSATTRIB_SND_RCV          {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_SND_RCV);}
1419    | PARSEOP_ACCESSATTRIB_WORD             {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_WORD);}
1420    | PARSEOP_ACCESSATTRIB_WORD_CALL        {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_WORD_CALL);}
1421    | PARSEOP_ACCESSATTRIB_MULTIBYTE '('    {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_MULTIBYTE);}
1422        ByteConst
1423        ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
1424    | PARSEOP_ACCESSATTRIB_RAW_BYTES '('    {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_RAW_BYTES);}
1425        ByteConst
1426        ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
1427    | PARSEOP_ACCESSATTRIB_RAW_PROCESS '('  {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_RAW_PROCESS);}
1428        ByteConst
1429        ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
1430    ;
1431
1432AccessTypeKeyword
1433    : PARSEOP_ACCESSTYPE_ANY                {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_ANY);}
1434    | PARSEOP_ACCESSTYPE_BYTE               {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_BYTE);}
1435    | PARSEOP_ACCESSTYPE_WORD               {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_WORD);}
1436    | PARSEOP_ACCESSTYPE_DWORD              {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_DWORD);}
1437    | PARSEOP_ACCESSTYPE_QWORD              {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_QWORD);}
1438    | PARSEOP_ACCESSTYPE_BUF                {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_BUF);}
1439    ;
1440
1441AddressingModeKeyword
1442    : PARSEOP_ADDRESSINGMODE_7BIT           {$$ = TrCreateLeafNode (PARSEOP_ADDRESSINGMODE_7BIT);}
1443    | PARSEOP_ADDRESSINGMODE_10BIT          {$$ = TrCreateLeafNode (PARSEOP_ADDRESSINGMODE_10BIT);}
1444    ;
1445
1446AddressKeyword
1447    : PARSEOP_ADDRESSTYPE_MEMORY            {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_MEMORY);}
1448    | PARSEOP_ADDRESSTYPE_RESERVED          {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_RESERVED);}
1449    | PARSEOP_ADDRESSTYPE_NVS               {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_NVS);}
1450    | PARSEOP_ADDRESSTYPE_ACPI              {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_ACPI);}
1451    ;
1452
1453AddressSpaceKeyword
1454    : ByteConst                             {$$ = UtCheckIntegerRange ($1, 0x0A, 0xFF);}
1455    | RegionSpaceKeyword                    {}
1456    ;
1457
1458BitsPerByteKeyword
1459    : PARSEOP_BITSPERBYTE_FIVE              {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_FIVE);}
1460    | PARSEOP_BITSPERBYTE_SIX               {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_SIX);}
1461    | PARSEOP_BITSPERBYTE_SEVEN             {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_SEVEN);}
1462    | PARSEOP_BITSPERBYTE_EIGHT             {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_EIGHT);}
1463    | PARSEOP_BITSPERBYTE_NINE              {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_NINE);}
1464    ;
1465
1466ClockPhaseKeyword
1467    : PARSEOP_CLOCKPHASE_FIRST              {$$ = TrCreateLeafNode (PARSEOP_CLOCKPHASE_FIRST);}
1468    | PARSEOP_CLOCKPHASE_SECOND             {$$ = TrCreateLeafNode (PARSEOP_CLOCKPHASE_SECOND);}
1469    ;
1470
1471ClockPolarityKeyword
1472    : PARSEOP_CLOCKPOLARITY_LOW             {$$ = TrCreateLeafNode (PARSEOP_CLOCKPOLARITY_LOW);}
1473    | PARSEOP_CLOCKPOLARITY_HIGH            {$$ = TrCreateLeafNode (PARSEOP_CLOCKPOLARITY_HIGH);}
1474    ;
1475
1476DecodeKeyword
1477    : PARSEOP_DECODETYPE_POS                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_POS);}
1478    | PARSEOP_DECODETYPE_SUB                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_SUB);}
1479    ;
1480
1481DevicePolarityKeyword
1482    : PARSEOP_DEVICEPOLARITY_LOW            {$$ = TrCreateLeafNode (PARSEOP_DEVICEPOLARITY_LOW);}
1483    | PARSEOP_DEVICEPOLARITY_HIGH           {$$ = TrCreateLeafNode (PARSEOP_DEVICEPOLARITY_HIGH);}
1484    ;
1485
1486DMATypeKeyword
1487    : PARSEOP_DMATYPE_A                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_A);}
1488    | PARSEOP_DMATYPE_COMPATIBILITY         {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_COMPATIBILITY);}
1489    | PARSEOP_DMATYPE_B                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_B);}
1490    | PARSEOP_DMATYPE_F                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_F);}
1491    ;
1492
1493EndianKeyword
1494    : PARSEOP_ENDIAN_LITTLE                 {$$ = TrCreateLeafNode (PARSEOP_ENDIAN_LITTLE);}
1495    | PARSEOP_ENDIAN_BIG                    {$$ = TrCreateLeafNode (PARSEOP_ENDIAN_BIG);}
1496    ;
1497
1498FlowControlKeyword
1499    : PARSEOP_FLOWCONTROL_HW                {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_HW);}
1500    | PARSEOP_FLOWCONTROL_NONE              {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_NONE);}
1501    | PARSEOP_FLOWCONTROL_SW                {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_SW);}
1502    ;
1503
1504InterruptLevel
1505    : PARSEOP_INTLEVEL_ACTIVEBOTH           {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVEBOTH);}
1506    | PARSEOP_INTLEVEL_ACTIVEHIGH           {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVEHIGH);}
1507    | PARSEOP_INTLEVEL_ACTIVELOW            {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVELOW);}
1508    ;
1509
1510InterruptTypeKeyword
1511    : PARSEOP_INTTYPE_EDGE                  {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_EDGE);}
1512    | PARSEOP_INTTYPE_LEVEL                 {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_LEVEL);}
1513    ;
1514
1515IODecodeKeyword
1516    : PARSEOP_IODECODETYPE_16               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_16);}
1517    | PARSEOP_IODECODETYPE_10               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_10);}
1518    ;
1519
1520IoRestrictionKeyword
1521    : PARSEOP_IORESTRICT_IN                 {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_IN);}
1522    | PARSEOP_IORESTRICT_OUT                {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_OUT);}
1523    | PARSEOP_IORESTRICT_NONE               {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_NONE);}
1524    | PARSEOP_IORESTRICT_PRESERVE           {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_PRESERVE);}
1525    ;
1526
1527LockRuleKeyword
1528    : PARSEOP_LOCKRULE_LOCK                 {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_LOCK);}
1529    | PARSEOP_LOCKRULE_NOLOCK               {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_NOLOCK);}
1530    ;
1531
1532MatchOpKeyword
1533    : PARSEOP_MATCHTYPE_MTR                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MTR);}
1534    | PARSEOP_MATCHTYPE_MEQ                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MEQ);}
1535    | PARSEOP_MATCHTYPE_MLE                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MLE);}
1536    | PARSEOP_MATCHTYPE_MLT                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MLT);}
1537    | PARSEOP_MATCHTYPE_MGE                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MGE);}
1538    | PARSEOP_MATCHTYPE_MGT                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MGT);}
1539    ;
1540
1541MaxKeyword
1542    : PARSEOP_MAXTYPE_FIXED                 {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_FIXED);}
1543    | PARSEOP_MAXTYPE_NOTFIXED              {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_NOTFIXED);}
1544    ;
1545
1546MemTypeKeyword
1547    : PARSEOP_MEMTYPE_CACHEABLE             {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_CACHEABLE);}
1548    | PARSEOP_MEMTYPE_WRITECOMBINING        {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_WRITECOMBINING);}
1549    | PARSEOP_MEMTYPE_PREFETCHABLE          {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_PREFETCHABLE);}
1550    | PARSEOP_MEMTYPE_NONCACHEABLE          {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_NONCACHEABLE);}
1551    ;
1552
1553MinKeyword
1554    : PARSEOP_MINTYPE_FIXED                 {$$ = TrCreateLeafNode (PARSEOP_MINTYPE_FIXED);}
1555    | PARSEOP_MINTYPE_NOTFIXED              {$$ = TrCreateLeafNode (PARSEOP_MINTYPE_NOTFIXED);}
1556    ;
1557
1558ObjectTypeKeyword
1559    : PARSEOP_OBJECTTYPE_UNK                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_UNK);}
1560    | PARSEOP_OBJECTTYPE_INT                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_INT);}
1561    | PARSEOP_OBJECTTYPE_STR                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_STR);}
1562    | PARSEOP_OBJECTTYPE_BUF                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_BUF);}
1563    | PARSEOP_OBJECTTYPE_PKG                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_PKG);}
1564    | PARSEOP_OBJECTTYPE_FLD                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_FLD);}
1565    | PARSEOP_OBJECTTYPE_DEV                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_DEV);}
1566    | PARSEOP_OBJECTTYPE_EVT                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_EVT);}
1567    | PARSEOP_OBJECTTYPE_MTH                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_MTH);}
1568    | PARSEOP_OBJECTTYPE_MTX                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_MTX);}
1569    | PARSEOP_OBJECTTYPE_OPR                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_OPR);}
1570    | PARSEOP_OBJECTTYPE_POW                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_POW);}
1571    | PARSEOP_OBJECTTYPE_PRO                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_PRO);}
1572    | PARSEOP_OBJECTTYPE_THZ                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_THZ);}
1573    | PARSEOP_OBJECTTYPE_BFF                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_BFF);}
1574    | PARSEOP_OBJECTTYPE_DDB                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_DDB);}
1575    ;
1576
1577ParityTypeKeyword
1578    : PARSEOP_PARITYTYPE_SPACE              {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_SPACE);}
1579    | PARSEOP_PARITYTYPE_MARK               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_MARK);}
1580    | PARSEOP_PARITYTYPE_ODD                {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_ODD);}
1581    | PARSEOP_PARITYTYPE_EVEN               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_EVEN);}
1582    | PARSEOP_PARITYTYPE_NONE               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_NONE);}
1583    ;
1584
1585PinConfigByte
1586    : PinConfigKeyword                      {$$ = $1;}
1587    | ByteConstExpr                         {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
1588    ;
1589
1590PinConfigKeyword
1591    : PARSEOP_PIN_NOPULL                    {$$ = TrCreateLeafNode (PARSEOP_PIN_NOPULL);}
1592    | PARSEOP_PIN_PULLDOWN                  {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLDOWN);}
1593    | PARSEOP_PIN_PULLUP                    {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLUP);}
1594    | PARSEOP_PIN_PULLDEFAULT               {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLDEFAULT);}
1595    ;
1596
1597RangeTypeKeyword
1598    : PARSEOP_RANGETYPE_ISAONLY             {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_ISAONLY);}
1599    | PARSEOP_RANGETYPE_NONISAONLY          {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_NONISAONLY);}
1600    | PARSEOP_RANGETYPE_ENTIRE              {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_ENTIRE);}
1601    ;
1602
1603RegionSpaceKeyword
1604    : PARSEOP_REGIONSPACE_IO                {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IO);}
1605    | PARSEOP_REGIONSPACE_MEM               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_MEM);}
1606    | PARSEOP_REGIONSPACE_PCI               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCI);}
1607    | PARSEOP_REGIONSPACE_EC                {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_EC);}
1608    | PARSEOP_REGIONSPACE_SMBUS             {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_SMBUS);}
1609    | PARSEOP_REGIONSPACE_CMOS              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_CMOS);}
1610    | PARSEOP_REGIONSPACE_PCIBAR            {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCIBAR);}
1611    | PARSEOP_REGIONSPACE_IPMI              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IPMI);}
1612    | PARSEOP_REGIONSPACE_GPIO              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_GPIO);}
1613    | PARSEOP_REGIONSPACE_GSBUS             {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_GSBUS);}
1614    | PARSEOP_REGIONSPACE_PCC               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCC);}
1615    | PARSEOP_REGIONSPACE_FFIXEDHW          {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_FFIXEDHW);}
1616    ;
1617
1618ResourceTypeKeyword
1619    : PARSEOP_RESOURCETYPE_CONSUMER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
1620    | PARSEOP_RESOURCETYPE_PRODUCER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_PRODUCER);}
1621    ;
1622
1623SerializeRuleKeyword
1624    : PARSEOP_SERIALIZERULE_SERIAL          {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_SERIAL);}
1625    | PARSEOP_SERIALIZERULE_NOTSERIAL       {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL);}
1626    ;
1627
1628ShareTypeKeyword
1629    : PARSEOP_SHARETYPE_SHARED              {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_SHARED);}
1630    | PARSEOP_SHARETYPE_EXCLUSIVE           {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_EXCLUSIVE);}
1631    | PARSEOP_SHARETYPE_SHAREDWAKE          {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_SHAREDWAKE);}
1632    | PARSEOP_SHARETYPE_EXCLUSIVEWAKE       {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_EXCLUSIVEWAKE);}
1633   ;
1634
1635SlaveModeKeyword
1636    : PARSEOP_SLAVEMODE_CONTROLLERINIT      {$$ = TrCreateLeafNode (PARSEOP_SLAVEMODE_CONTROLLERINIT);}
1637    | PARSEOP_SLAVEMODE_DEVICEINIT          {$$ = TrCreateLeafNode (PARSEOP_SLAVEMODE_DEVICEINIT);}
1638    ;
1639
1640StopBitsKeyword
1641    : PARSEOP_STOPBITS_TWO                  {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_TWO);}
1642    | PARSEOP_STOPBITS_ONEPLUSHALF          {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ONEPLUSHALF);}
1643    | PARSEOP_STOPBITS_ONE                  {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ONE);}
1644    | PARSEOP_STOPBITS_ZERO                 {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ZERO);}
1645    ;
1646
1647TranslationKeyword
1648    : PARSEOP_TRANSLATIONTYPE_SPARSE        {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_SPARSE);}
1649    | PARSEOP_TRANSLATIONTYPE_DENSE         {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_DENSE);}
1650    ;
1651
1652TypeKeyword
1653    : PARSEOP_TYPE_TRANSLATION              {$$ = TrCreateLeafNode (PARSEOP_TYPE_TRANSLATION);}
1654    | PARSEOP_TYPE_STATIC                   {$$ = TrCreateLeafNode (PARSEOP_TYPE_STATIC);}
1655    ;
1656
1657UpdateRuleKeyword
1658    : PARSEOP_UPDATERULE_PRESERVE           {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_PRESERVE);}
1659    | PARSEOP_UPDATERULE_ONES               {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_ONES);}
1660    | PARSEOP_UPDATERULE_ZEROS              {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_ZEROS);}
1661    ;
1662
1663WireModeKeyword
1664    : PARSEOP_WIREMODE_FOUR                 {$$ = TrCreateLeafNode (PARSEOP_WIREMODE_FOUR);}
1665    | PARSEOP_WIREMODE_THREE                {$$ = TrCreateLeafNode (PARSEOP_WIREMODE_THREE);}
1666    ;
1667
1668XferSizeKeyword
1669    : PARSEOP_XFERSIZE_8                    {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_8,   0);}
1670    | PARSEOP_XFERSIZE_16                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_16,  1);}
1671    | PARSEOP_XFERSIZE_32                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32,  2);}
1672    | PARSEOP_XFERSIZE_64                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_64,  3);}
1673    | PARSEOP_XFERSIZE_128                  {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_128, 4);}
1674    | PARSEOP_XFERSIZE_256                  {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_256, 5);}
1675    ;
1676
1677XferTypeKeyword
1678    : PARSEOP_XFERTYPE_8                    {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8);}
1679    | PARSEOP_XFERTYPE_8_16                 {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8_16);}
1680    | PARSEOP_XFERTYPE_16                   {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_16);}
1681    ;
1682
1683
1684/******* Miscellaneous Types **************************************************/
1685
1686
1687SuperName
1688    : NameString                    {}
1689    | ArgTerm                       {}
1690    | LocalTerm                     {}
1691    | DebugTerm                     {}
1692    | Type6Opcode                   {}
1693
1694/* For ObjectType: SuperName except for UserTerm (method invocation) */
1695
1696ObjectTypeName
1697    : NameString                    {}
1698    | ArgTerm                       {}
1699    | LocalTerm                     {}
1700    | DebugTerm                     {}
1701    | RefOfTerm                     {}
1702    | DerefOfTerm                   {}
1703    | IndexTerm                     {}
1704
1705/*    | UserTerm                      {} */  /* Caused reduce/reduce with Type6Opcode->UserTerm */
1706    ;
1707
1708ArgTerm
1709    : PARSEOP_ARG0                  {$$ = TrCreateLeafNode (PARSEOP_ARG0);}
1710    | PARSEOP_ARG1                  {$$ = TrCreateLeafNode (PARSEOP_ARG1);}
1711    | PARSEOP_ARG2                  {$$ = TrCreateLeafNode (PARSEOP_ARG2);}
1712    | PARSEOP_ARG3                  {$$ = TrCreateLeafNode (PARSEOP_ARG3);}
1713    | PARSEOP_ARG4                  {$$ = TrCreateLeafNode (PARSEOP_ARG4);}
1714    | PARSEOP_ARG5                  {$$ = TrCreateLeafNode (PARSEOP_ARG5);}
1715    | PARSEOP_ARG6                  {$$ = TrCreateLeafNode (PARSEOP_ARG6);}
1716    ;
1717
1718LocalTerm
1719    : PARSEOP_LOCAL0                {$$ = TrCreateLeafNode (PARSEOP_LOCAL0);}
1720    | PARSEOP_LOCAL1                {$$ = TrCreateLeafNode (PARSEOP_LOCAL1);}
1721    | PARSEOP_LOCAL2                {$$ = TrCreateLeafNode (PARSEOP_LOCAL2);}
1722    | PARSEOP_LOCAL3                {$$ = TrCreateLeafNode (PARSEOP_LOCAL3);}
1723    | PARSEOP_LOCAL4                {$$ = TrCreateLeafNode (PARSEOP_LOCAL4);}
1724    | PARSEOP_LOCAL5                {$$ = TrCreateLeafNode (PARSEOP_LOCAL5);}
1725    | PARSEOP_LOCAL6                {$$ = TrCreateLeafNode (PARSEOP_LOCAL6);}
1726    | PARSEOP_LOCAL7                {$$ = TrCreateLeafNode (PARSEOP_LOCAL7);}
1727    ;
1728
1729DebugTerm
1730    : PARSEOP_DEBUG                 {$$ = TrCreateLeafNode (PARSEOP_DEBUG);}
1731    ;
1732
1733
1734ByteConst
1735    : Integer                       {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
1736    ;
1737
1738WordConst
1739    : Integer                       {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
1740    ;
1741
1742DWordConst
1743    : Integer                       {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
1744    ;
1745
1746QWordConst
1747    : Integer                       {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
1748    ;
1749
1750Integer
1751    : PARSEOP_INTEGER               {$$ = TrCreateValuedLeafNode (PARSEOP_INTEGER, AslCompilerlval.i);}
1752    ;
1753
1754String
1755    : PARSEOP_STRING_LITERAL        {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, (ACPI_NATIVE_INT) AslCompilerlval.s);}
1756    ;
1757
1758ConstTerm
1759    : ConstExprTerm                 {}
1760    | PARSEOP_REVISION              {$$ = TrCreateLeafNode (PARSEOP_REVISION);}
1761    ;
1762
1763ConstExprTerm
1764    : PARSEOP_ZERO                  {$$ = TrCreateValuedLeafNode (PARSEOP_ZERO, 0);}
1765    | PARSEOP_ONE                   {$$ = TrCreateValuedLeafNode (PARSEOP_ONE, 1);}
1766    | PARSEOP_ONES                  {$$ = TrCreateValuedLeafNode (PARSEOP_ONES, ACPI_UINT64_MAX);}
1767    | PARSEOP___DATE__              {$$ = TrCreateConstantLeafNode (PARSEOP___DATE__);}
1768    | PARSEOP___FILE__              {$$ = TrCreateConstantLeafNode (PARSEOP___FILE__);}
1769    | PARSEOP___LINE__              {$$ = TrCreateConstantLeafNode (PARSEOP___LINE__);}
1770    | PARSEOP___PATH__              {$$ = TrCreateConstantLeafNode (PARSEOP___PATH__);}
1771    ;
1772
1773/*
1774 * The NODE_COMPILE_TIME_CONST flag in the following constant expressions
1775 * enables compile-time constant folding to reduce the Type3Opcodes/Type2IntegerOpcodes
1776 * to simple integers. It is an error if these types of expressions cannot be
1777 * reduced, since the AML grammar for ****ConstExpr requires a simple constant.
1778 * Note: The required byte length of the constant is passed through to the
1779 * constant folding code in the node AmlLength field.
1780 */
1781ByteConstExpr
1782    : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 1);}
1783    | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 1);}
1784    | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
1785    | ByteConst                     {}
1786    ;
1787
1788WordConstExpr
1789    : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 2);}
1790    | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 2);}
1791    | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
1792    | WordConst                     {}
1793    ;
1794
1795DWordConstExpr
1796    : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 4);}
1797    | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 4);}
1798    | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
1799    | DWordConst                    {}
1800    ;
1801
1802QWordConstExpr
1803    : Type3Opcode                   {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 8);}
1804    | Type2IntegerOpcode            {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 8);}
1805    | ConstExprTerm                 {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
1806    | QWordConst                    {}
1807    ;
1808
1809/* OptionalCount must appear before ByteList or an incorrect reduction will result */
1810
1811OptionalCount
1812    :                               {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
1813    | ','                           {$$ = TrCreateLeafNode (PARSEOP_ONES);}       /* Placeholder is a OnesOp object */
1814    | ',' TermArg                   {$$ = $2;}
1815    ;
1816
1817BufferTerm
1818    : PARSEOP_BUFFER '('            {$<n>$ = TrCreateLeafNode (PARSEOP_BUFFER);}
1819        OptionalTermArg
1820        ')' '{'
1821            BufferTermData '}'      {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1822    | PARSEOP_BUFFER '('
1823        error ')'                   {$$ = AslDoError(); yyclearin;}
1824    ;
1825
1826BufferTermData
1827    : ByteList                      {}
1828    | StringData                    {}
1829    ;
1830
1831ByteList
1832    :                               {$$ = NULL;}
1833    | ByteConstExpr
1834    | ByteList ','                  /* Allows a trailing comma at list end */
1835    | ByteList ','
1836        ByteConstExpr               {$$ = TrLinkPeerNode ($1,$3);}
1837    ;
1838
1839DataBufferTerm
1840    : PARSEOP_DATABUFFER  '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DATABUFFER);}
1841        OptionalWordConst
1842        ')' '{'
1843            ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1844    | PARSEOP_DATABUFFER '('
1845        error ')'                   {$$ = AslDoError(); yyclearin;}
1846    ;
1847
1848DWordList
1849    :                               {$$ = NULL;}
1850    | DWordConstExpr
1851    | DWordList ','                 /* Allows a trailing comma at list end */
1852    | DWordList ','
1853        DWordConstExpr              {$$ = TrLinkPeerNode ($1,$3);}
1854    ;
1855
1856PackageTerm
1857    : PARSEOP_PACKAGE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_VAR_PACKAGE);}
1858        VarPackageLengthTerm
1859        ')' '{'
1860            PackageList '}'         {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
1861    | PARSEOP_PACKAGE '('
1862        error ')'                   {$$ = AslDoError(); yyclearin;}
1863    ;
1864
1865PackageList
1866    :                               {$$ = NULL;}
1867    | PackageElement
1868    | PackageList ','               /* Allows a trailing comma at list end */
1869    | PackageList ','
1870        PackageElement              {$$ = TrLinkPeerNode ($1,$3);}
1871    ;
1872
1873PackageElement
1874    : DataObject                    {}
1875    | NameString                    {}
1876    ;
1877
1878VarPackageLengthTerm
1879    :                               {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
1880    | TermArg                       {$$ = $1;}
1881    ;
1882
1883
1884/******* Macros ***********************************************/
1885
1886
1887EISAIDTerm
1888    : PARSEOP_EISAID '('
1889        StringData ')'              {$$ = TrUpdateNode (PARSEOP_EISAID, $3);}
1890    | PARSEOP_EISAID '('
1891        error ')'                   {$$ = AslDoError(); yyclearin;}
1892    ;
1893
1894UnicodeTerm
1895    : PARSEOP_UNICODE '('           {$<n>$ = TrCreateLeafNode (PARSEOP_UNICODE);}
1896        StringData
1897        ')'                         {$$ = TrLinkChildren ($<n>3,2,0,$4);}
1898    | PARSEOP_UNICODE '('
1899        error ')'                   {$$ = AslDoError(); yyclearin;}
1900    ;
1901
1902
1903/******* Resources and Memory ***********************************************/
1904
1905
1906/*
1907 * Note: Create two default nodes to allow conversion to a Buffer AML opcode
1908 * Also, insert the EndTag at the end of the template.
1909 */
1910ResourceTemplateTerm
1911    : PARSEOP_RESOURCETEMPLATE '(' ')'
1912        '{'
1913        ResourceMacroList '}'       {$$ = TrCreateNode (PARSEOP_RESOURCETEMPLATE,4,
1914                                          TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
1915                                          TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
1916                                          $5,
1917                                          TrCreateLeafNode (PARSEOP_ENDTAG));}
1918    ;
1919
1920ResourceMacroList
1921    :                               {$$ = NULL;}
1922    | ResourceMacroList
1923        ResourceMacroTerm           {$$ = TrLinkPeerNode ($1,$2);}
1924    ;
1925
1926ResourceMacroTerm
1927    : DMATerm                       {}
1928    | DWordIOTerm                   {}
1929    | DWordMemoryTerm               {}
1930    | DWordSpaceTerm                {}
1931    | EndDependentFnTerm            {}
1932    | ExtendedIOTerm                {}
1933    | ExtendedMemoryTerm            {}
1934    | ExtendedSpaceTerm             {}
1935    | FixedDmaTerm                  {}
1936    | FixedIOTerm                   {}
1937    | GpioIntTerm                   {}
1938    | GpioIoTerm                    {}
1939    | I2cSerialBusTerm              {}
1940    | InterruptTerm                 {}
1941    | IOTerm                        {}
1942    | IRQNoFlagsTerm                {}
1943    | IRQTerm                       {}
1944    | Memory24Term                  {}
1945    | Memory32FixedTerm             {}
1946    | Memory32Term                  {}
1947    | QWordIOTerm                   {}
1948    | QWordMemoryTerm               {}
1949    | QWordSpaceTerm                {}
1950    | RegisterTerm                  {}
1951    | SpiSerialBusTerm              {}
1952    | StartDependentFnNoPriTerm     {}
1953    | StartDependentFnTerm          {}
1954    | UartSerialBusTerm             {}
1955    | VendorLongTerm                {}
1956    | VendorShortTerm               {}
1957    | WordBusNumberTerm             {}
1958    | WordIOTerm                    {}
1959    | WordSpaceTerm                 {}
1960    ;
1961
1962DMATerm
1963    : PARSEOP_DMA '('               {$<n>$ = TrCreateLeafNode (PARSEOP_DMA);}
1964        DMATypeKeyword
1965        OptionalBusMasterKeyword
1966        ',' XferTypeKeyword
1967        OptionalNameString_Last
1968        ')' '{'
1969            ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$5,$7,$8,$11);}
1970    | PARSEOP_DMA '('
1971        error ')'                   {$$ = AslDoError(); yyclearin;}
1972    ;
1973
1974DWordIOTerm
1975    : PARSEOP_DWORDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDIO);}
1976        OptionalResourceType_First
1977        OptionalMinType
1978        OptionalMaxType
1979        OptionalDecodeType
1980        OptionalRangeType
1981        ',' DWordConstExpr
1982        ',' DWordConstExpr
1983        ',' DWordConstExpr
1984        ',' DWordConstExpr
1985        ',' DWordConstExpr
1986        OptionalByteConstExpr
1987        OptionalStringData
1988        OptionalNameString
1989        OptionalType
1990        OptionalTranslationType_Last
1991        ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
1992    | PARSEOP_DWORDIO '('
1993        error ')'                   {$$ = AslDoError(); yyclearin;}
1994    ;
1995
1996DWordMemoryTerm
1997    : PARSEOP_DWORDMEMORY '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDMEMORY);}
1998        OptionalResourceType_First
1999        OptionalDecodeType
2000        OptionalMinType
2001        OptionalMaxType
2002        OptionalMemType
2003        ',' OptionalReadWriteKeyword
2004        ',' DWordConstExpr
2005        ',' DWordConstExpr
2006        ',' DWordConstExpr
2007        ',' DWordConstExpr
2008        ',' DWordConstExpr
2009        OptionalByteConstExpr
2010        OptionalStringData
2011        OptionalNameString
2012        OptionalAddressRange
2013        OptionalType_Last
2014        ')'                         {$$ = TrLinkChildren ($<n>3,16,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
2015    | PARSEOP_DWORDMEMORY '('
2016        error ')'                   {$$ = AslDoError(); yyclearin;}
2017    ;
2018
2019DWordSpaceTerm
2020    : PARSEOP_DWORDSPACE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDSPACE);}
2021        ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
2022        OptionalResourceType
2023        OptionalDecodeType
2024        OptionalMinType
2025        OptionalMaxType
2026        ',' ByteConstExpr
2027        ',' DWordConstExpr
2028        ',' DWordConstExpr
2029        ',' DWordConstExpr
2030        ',' DWordConstExpr
2031        ',' DWordConstExpr
2032        OptionalByteConstExpr
2033        OptionalStringData
2034        OptionalNameString_Last
2035        ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
2036    | PARSEOP_DWORDSPACE '('
2037        error ')'                   {$$ = AslDoError(); yyclearin;}
2038    ;
2039
2040
2041EndDependentFnTerm
2042    : PARSEOP_ENDDEPENDENTFN '('
2043        ')'                         {$$ = TrCreateLeafNode (PARSEOP_ENDDEPENDENTFN);}
2044    | PARSEOP_ENDDEPENDENTFN '('
2045        error ')'                   {$$ = AslDoError(); yyclearin;}
2046    ;
2047
2048ExtendedIOTerm
2049    : PARSEOP_EXTENDEDIO '('        {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDIO);}
2050        OptionalResourceType_First
2051        OptionalMinType
2052        OptionalMaxType
2053        OptionalDecodeType
2054        OptionalRangeType
2055        ',' QWordConstExpr
2056        ',' QWordConstExpr
2057        ',' QWordConstExpr
2058        ',' QWordConstExpr
2059        ',' QWordConstExpr
2060        OptionalQWordConstExpr
2061        OptionalNameString
2062        OptionalType
2063        OptionalTranslationType_Last
2064        ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22);}
2065    | PARSEOP_EXTENDEDIO '('
2066        error ')'                   {$$ = AslDoError(); yyclearin;}
2067    ;
2068
2069ExtendedMemoryTerm
2070    : PARSEOP_EXTENDEDMEMORY '('    {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDMEMORY);}
2071        OptionalResourceType_First
2072        OptionalDecodeType
2073        OptionalMinType
2074        OptionalMaxType
2075        OptionalMemType
2076        ',' OptionalReadWriteKeyword
2077        ',' QWordConstExpr
2078        ',' QWordConstExpr
2079        ',' QWordConstExpr
2080        ',' QWordConstExpr
2081        ',' QWordConstExpr
2082        OptionalQWordConstExpr
2083        OptionalNameString
2084        OptionalAddressRange
2085        OptionalType_Last
2086        ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24);}
2087    | PARSEOP_EXTENDEDMEMORY '('
2088        error ')'                   {$$ = AslDoError(); yyclearin;}
2089    ;
2090
2091ExtendedSpaceTerm
2092    : PARSEOP_EXTENDEDSPACE '('     {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDSPACE);}
2093        ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
2094        OptionalResourceType
2095        OptionalDecodeType
2096        OptionalMinType
2097        OptionalMaxType
2098        ',' ByteConstExpr
2099        ',' QWordConstExpr
2100        ',' QWordConstExpr
2101        ',' QWordConstExpr
2102        ',' QWordConstExpr
2103        ',' QWordConstExpr
2104        OptionalQWordConstExpr
2105        OptionalNameString_Last
2106        ')'                         {$$ = TrLinkChildren ($<n>3,13,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23);}
2107    | PARSEOP_EXTENDEDSPACE '('
2108        error ')'                   {$$ = AslDoError(); yyclearin;}
2109    ;
2110
2111FixedDmaTerm
2112    : PARSEOP_FIXEDDMA '('          {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDDMA);}
2113        WordConstExpr               /* 04: DMA RequestLines */
2114        ',' WordConstExpr           /* 06: DMA Channels */
2115        OptionalXferSize            /* 07: DMA TransferSize */
2116        OptionalNameString          /* 08: DescriptorName */
2117        ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$7,$8);}
2118    | PARSEOP_FIXEDDMA '('
2119        error ')'                   {$$ = AslDoError(); yyclearin;}
2120    ;
2121
2122FixedIOTerm
2123    : PARSEOP_FIXEDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDIO);}
2124        WordConstExpr
2125        ',' ByteConstExpr
2126        OptionalNameString_Last
2127        ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
2128    | PARSEOP_FIXEDIO '('
2129        error ')'                   {$$ = AslDoError(); yyclearin;}
2130    ;
2131
2132GpioIntTerm
2133    : PARSEOP_GPIO_INT '('          {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_INT);}
2134        InterruptTypeKeyword        /* 04: InterruptType */
2135        ',' InterruptLevel          /* 06: InterruptLevel */
2136        OptionalShareType           /* 07: SharedType */
2137        ',' PinConfigByte           /* 09: PinConfig */
2138        OptionalWordConstExpr       /* 10: DebounceTimeout */
2139        ',' StringData              /* 12: ResourceSource */
2140        OptionalByteConstExpr       /* 13: ResourceSourceIndex */
2141        OptionalResourceType        /* 14: ResourceType */
2142        OptionalNameString          /* 15: DescriptorName */
2143        OptionalBuffer_Last         /* 16: VendorData */
2144        ')' '{'
2145            DWordConstExpr '}'      {$$ = TrLinkChildren ($<n>3,11,$4,$6,$7,$9,$10,$12,$13,$14,$15,$16,$19);}
2146    | PARSEOP_GPIO_INT '('
2147        error ')'                   {$$ = AslDoError(); yyclearin;}
2148    ;
2149
2150GpioIoTerm
2151    : PARSEOP_GPIO_IO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_IO);}
2152        OptionalShareType_First     /* 04: SharedType */
2153        ',' PinConfigByte           /* 06: PinConfig */
2154        OptionalWordConstExpr       /* 07: DebounceTimeout */
2155        OptionalWordConstExpr       /* 08: DriveStrength */
2156        OptionalIoRestriction       /* 09: IoRestriction */
2157        ',' StringData              /* 11: ResourceSource */
2158        OptionalByteConstExpr       /* 12: ResourceSourceIndex */
2159        OptionalResourceType        /* 13: ResourceType */
2160        OptionalNameString          /* 14: DescriptorName */
2161        OptionalBuffer_Last         /* 15: VendorData */
2162        ')' '{'
2163            DWordList '}'           {$$ = TrLinkChildren ($<n>3,11,$4,$6,$7,$8,$9,$11,$12,$13,$14,$15,$18);}
2164    | PARSEOP_GPIO_IO '('
2165        error ')'                   {$$ = AslDoError(); yyclearin;}
2166    ;
2167
2168I2cSerialBusTerm
2169    : PARSEOP_I2C_SERIALBUS '('     {$<n>$ = TrCreateLeafNode (PARSEOP_I2C_SERIALBUS);}
2170        WordConstExpr               /* 04: SlaveAddress */
2171        OptionalSlaveMode           /* 05: SlaveMode */
2172        ',' DWordConstExpr          /* 07: ConnectionSpeed */
2173        OptionalAddressingMode      /* 08: AddressingMode */
2174        ',' StringData              /* 10: ResourceSource */
2175        OptionalByteConstExpr       /* 11: ResourceSourceIndex */
2176        OptionalResourceType        /* 12: ResourceType */
2177        OptionalNameString          /* 13: DescriptorName */
2178        OptionalBuffer_Last         /* 14: VendorData */
2179        ')'                         {$$ = TrLinkChildren ($<n>3,9,$4,$5,$7,$8,$10,$11,$12,$13,$14);}
2180    | PARSEOP_I2C_SERIALBUS '('
2181        error ')'                   {$$ = AslDoError(); yyclearin;}
2182    ;
2183
2184InterruptTerm
2185    : PARSEOP_INTERRUPT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_INTERRUPT);}
2186        OptionalResourceType_First
2187        ',' InterruptTypeKeyword
2188        ',' InterruptLevel
2189        OptionalShareType
2190        OptionalByteConstExpr
2191        OptionalStringData
2192        OptionalNameString_Last
2193        ')' '{'
2194            DWordList '}'           {$$ = TrLinkChildren ($<n>3,8,$4,$6,$8,$9,$10,$11,$12,$15);}
2195    | PARSEOP_INTERRUPT '('
2196        error ')'                   {$$ = AslDoError(); yyclearin;}
2197    ;
2198
2199IOTerm
2200    : PARSEOP_IO '('                {$<n>$ = TrCreateLeafNode (PARSEOP_IO);}
2201        IODecodeKeyword
2202        ',' WordConstExpr
2203        ',' WordConstExpr
2204        ',' ByteConstExpr
2205        ',' ByteConstExpr
2206        OptionalNameString_Last
2207        ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
2208    | PARSEOP_IO '('
2209        error ')'                   {$$ = AslDoError(); yyclearin;}
2210    ;
2211
2212IRQNoFlagsTerm
2213    : PARSEOP_IRQNOFLAGS '('        {$<n>$ = TrCreateLeafNode (PARSEOP_IRQNOFLAGS);}
2214        OptionalNameString_First
2215        ')' '{'
2216            ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
2217    | PARSEOP_IRQNOFLAGS '('
2218        error ')'                   {$$ = AslDoError(); yyclearin;}
2219    ;
2220
2221IRQTerm
2222    : PARSEOP_IRQ '('               {$<n>$ = TrCreateLeafNode (PARSEOP_IRQ);}
2223        InterruptTypeKeyword
2224        ',' InterruptLevel
2225        OptionalShareType
2226        OptionalNameString_Last
2227        ')' '{'
2228            ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$6,$7,$8,$11);}
2229    | PARSEOP_IRQ '('
2230        error ')'                   {$$ = AslDoError(); yyclearin;}
2231    ;
2232
2233Memory24Term
2234    : PARSEOP_MEMORY24 '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY24);}
2235        OptionalReadWriteKeyword
2236        ',' WordConstExpr
2237        ',' WordConstExpr
2238        ',' WordConstExpr
2239        ',' WordConstExpr
2240        OptionalNameString_Last
2241        ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
2242    | PARSEOP_MEMORY24 '('
2243        error ')'                   {$$ = AslDoError(); yyclearin;}
2244    ;
2245
2246Memory32FixedTerm
2247    : PARSEOP_MEMORY32FIXED '('     {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32FIXED);}
2248        OptionalReadWriteKeyword
2249        ',' DWordConstExpr
2250        ',' DWordConstExpr
2251        OptionalNameString_Last
2252        ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$8,$9);}
2253    | PARSEOP_MEMORY32FIXED '('
2254        error ')'                   {$$ = AslDoError(); yyclearin;}
2255    ;
2256
2257Memory32Term
2258    : PARSEOP_MEMORY32 '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32);}
2259        OptionalReadWriteKeyword
2260        ',' DWordConstExpr
2261        ',' DWordConstExpr
2262        ',' DWordConstExpr
2263        ',' DWordConstExpr
2264        OptionalNameString_Last
2265        ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
2266    | PARSEOP_MEMORY32 '('
2267        error ')'                   {$$ = AslDoError(); yyclearin;}
2268    ;
2269
2270QWordIOTerm
2271    : PARSEOP_QWORDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDIO);}
2272        OptionalResourceType_First
2273        OptionalMinType
2274        OptionalMaxType
2275        OptionalDecodeType
2276        OptionalRangeType
2277        ',' QWordConstExpr
2278        ',' QWordConstExpr
2279        ',' QWordConstExpr
2280        ',' QWordConstExpr
2281        ',' QWordConstExpr
2282        OptionalByteConstExpr
2283        OptionalStringData
2284        OptionalNameString
2285        OptionalType
2286        OptionalTranslationType_Last
2287        ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
2288    | PARSEOP_QWORDIO '('
2289        error ')'                   {$$ = AslDoError(); yyclearin;}
2290    ;
2291
2292QWordMemoryTerm
2293    : PARSEOP_QWORDMEMORY '('       {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDMEMORY);}
2294        OptionalResourceType_First
2295        OptionalDecodeType
2296        OptionalMinType
2297        OptionalMaxType
2298        OptionalMemType
2299        ',' OptionalReadWriteKeyword
2300        ',' QWordConstExpr
2301        ',' QWordConstExpr
2302        ',' QWordConstExpr
2303        ',' QWordConstExpr
2304        ',' QWordConstExpr
2305        OptionalByteConstExpr
2306        OptionalStringData
2307        OptionalNameString
2308        OptionalAddressRange
2309        OptionalType_Last
2310        ')'                         {$$ = TrLinkChildren ($<n>3,16,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
2311    | PARSEOP_QWORDMEMORY '('
2312        error ')'                   {$$ = AslDoError(); yyclearin;}
2313    ;
2314
2315QWordSpaceTerm
2316    : PARSEOP_QWORDSPACE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDSPACE);}
2317        ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
2318        OptionalResourceType
2319        OptionalDecodeType
2320        OptionalMinType
2321        OptionalMaxType
2322        ',' ByteConstExpr
2323        ',' QWordConstExpr
2324        ',' QWordConstExpr
2325        ',' QWordConstExpr
2326        ',' QWordConstExpr
2327        ',' QWordConstExpr
2328        OptionalByteConstExpr
2329        OptionalStringData
2330        OptionalNameString_Last
2331        ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
2332    | PARSEOP_QWORDSPACE '('
2333        error ')'                   {$$ = AslDoError(); yyclearin;}
2334    ;
2335
2336RegisterTerm
2337    : PARSEOP_REGISTER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_REGISTER);}
2338        AddressSpaceKeyword
2339        ',' ByteConstExpr
2340        ',' ByteConstExpr
2341        ',' QWordConstExpr
2342        OptionalAccessSize
2343        OptionalNameString_Last
2344        ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$11,$12);}
2345    | PARSEOP_REGISTER '('
2346        error ')'                   {$$ = AslDoError(); yyclearin;}
2347    ;
2348
2349SpiSerialBusTerm
2350    : PARSEOP_SPI_SERIALBUS '('     {$<n>$ = TrCreateLeafNode (PARSEOP_SPI_SERIALBUS);}
2351        WordConstExpr               /* 04: DeviceSelection */
2352        OptionalDevicePolarity      /* 05: DevicePolarity */
2353        OptionalWireMode            /* 06: WireMode */
2354        ',' ByteConstExpr           /* 08: DataBitLength */
2355        OptionalSlaveMode           /* 09: SlaveMode */
2356        ',' DWordConstExpr          /* 11: ConnectionSpeed */
2357        ',' ClockPolarityKeyword    /* 13: ClockPolarity */
2358        ',' ClockPhaseKeyword       /* 15: ClockPhase */
2359        ',' StringData              /* 17: ResourceSource */
2360        OptionalByteConstExpr       /* 18: ResourceSourceIndex */
2361        OptionalResourceType        /* 19: ResourceType */
2362        OptionalNameString          /* 20: DescriptorName */
2363        OptionalBuffer_Last         /* 21: VendorData */
2364        ')'                         {$$ = TrLinkChildren ($<n>3,13,$4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20,$21);}
2365    | PARSEOP_SPI_SERIALBUS '('
2366        error ')'                   {$$ = AslDoError(); yyclearin;}
2367    ;
2368
2369StartDependentFnNoPriTerm
2370    : PARSEOP_STARTDEPENDENTFN_NOPRI '('    {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN_NOPRI);}
2371        ')' '{'
2372        ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,1,$6);}
2373    | PARSEOP_STARTDEPENDENTFN_NOPRI '('
2374        error ')'                   {$$ = AslDoError(); yyclearin;}
2375    ;
2376
2377StartDependentFnTerm
2378    : PARSEOP_STARTDEPENDENTFN '('  {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN);}
2379        ByteConstExpr
2380        ',' ByteConstExpr
2381        ')' '{'
2382        ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,3,$4,$6,$9);}
2383    | PARSEOP_STARTDEPENDENTFN '('
2384        error ')'                   {$$ = AslDoError(); yyclearin;}
2385    ;
2386
2387UartSerialBusTerm
2388    : PARSEOP_UART_SERIALBUS '('    {$<n>$ = TrCreateLeafNode (PARSEOP_UART_SERIALBUS);}
2389        DWordConstExpr              /* 04: ConnectionSpeed */
2390        OptionalBitsPerByte         /* 05: BitsPerByte */
2391        OptionalStopBits            /* 06: StopBits */
2392        ',' ByteConstExpr           /* 08: LinesInUse */
2393        OptionalEndian              /* 09: Endianess */
2394        OptionalParityType          /* 10: Parity */
2395        OptionalFlowControl         /* 11: FlowControl */
2396        ',' WordConstExpr           /* 13: Rx BufferSize */
2397        ',' WordConstExpr           /* 15: Tx BufferSize */
2398        ',' StringData              /* 17: ResourceSource */
2399        OptionalByteConstExpr       /* 18: ResourceSourceIndex */
2400        OptionalResourceType        /* 19: ResourceType */
2401        OptionalNameString          /* 20: DescriptorName */
2402        OptionalBuffer_Last         /* 21: VendorData */
2403        ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20,$21);}
2404    | PARSEOP_UART_SERIALBUS '('
2405        error ')'                   {$$ = AslDoError(); yyclearin;}
2406    ;
2407
2408VendorLongTerm
2409    : PARSEOP_VENDORLONG '('        {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORLONG);}
2410        OptionalNameString_First
2411        ')' '{'
2412            ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
2413    | PARSEOP_VENDORLONG '('
2414        error ')'                   {$$ = AslDoError(); yyclearin;}
2415    ;
2416
2417VendorShortTerm
2418    : PARSEOP_VENDORSHORT '('       {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORSHORT);}
2419        OptionalNameString_First
2420        ')' '{'
2421            ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
2422    | PARSEOP_VENDORSHORT '('
2423        error ')'                   {$$ = AslDoError(); yyclearin;}
2424    ;
2425
2426WordBusNumberTerm
2427    : PARSEOP_WORDBUSNUMBER '('     {$<n>$ = TrCreateLeafNode (PARSEOP_WORDBUSNUMBER);}
2428        OptionalResourceType_First
2429        OptionalMinType
2430        OptionalMaxType
2431        OptionalDecodeType
2432        ',' WordConstExpr
2433        ',' WordConstExpr
2434        ',' WordConstExpr
2435        ',' WordConstExpr
2436        ',' WordConstExpr
2437        OptionalByteConstExpr
2438        OptionalStringData
2439        OptionalNameString_Last
2440        ')'                         {$$ = TrLinkChildren ($<n>3,12,$4,$5,$6,$7,$9,$11,$13,$15,$17,$18,$19,$20);}
2441    | PARSEOP_WORDBUSNUMBER '('
2442        error ')'                   {$$ = AslDoError(); yyclearin;}
2443    ;
2444
2445WordIOTerm
2446    : PARSEOP_WORDIO '('            {$<n>$ = TrCreateLeafNode (PARSEOP_WORDIO);}
2447        OptionalResourceType_First
2448        OptionalMinType
2449        OptionalMaxType
2450        OptionalDecodeType
2451        OptionalRangeType
2452        ',' WordConstExpr
2453        ',' WordConstExpr
2454        ',' WordConstExpr
2455        ',' WordConstExpr
2456        ',' WordConstExpr
2457        OptionalByteConstExpr
2458        OptionalStringData
2459        OptionalNameString
2460        OptionalType
2461        OptionalTranslationType_Last
2462        ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
2463    | PARSEOP_WORDIO '('
2464        error ')'                   {$$ = AslDoError(); yyclearin;}
2465    ;
2466
2467WordSpaceTerm
2468    : PARSEOP_WORDSPACE '('         {$<n>$ = TrCreateLeafNode (PARSEOP_WORDSPACE);}
2469        ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
2470        OptionalResourceType
2471        OptionalDecodeType
2472        OptionalMinType
2473        OptionalMaxType
2474        ',' ByteConstExpr
2475        ',' WordConstExpr
2476        ',' WordConstExpr
2477        ',' WordConstExpr
2478        ',' WordConstExpr
2479        ',' WordConstExpr
2480        OptionalByteConstExpr
2481        OptionalStringData
2482        OptionalNameString_Last
2483        ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
2484    | PARSEOP_WORDSPACE '('
2485        error ')'                   {$$ = AslDoError(); yyclearin;}
2486    ;
2487
2488
2489/******* Object References ***********************************************/
2490
2491/* Allow IO, DMA, IRQ Resource macro names to also be used as identifiers */
2492
2493NameString
2494    : NameSeg                       {}
2495    | PARSEOP_NAMESTRING            {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) AslCompilerlval.s);}
2496    | PARSEOP_IO                    {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IO");}
2497    | PARSEOP_DMA                   {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "DMA");}
2498    | PARSEOP_IRQ                   {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IRQ");}
2499    ;
2500
2501NameSeg
2502    : PARSEOP_NAMESEG               {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESEG, (ACPI_NATIVE_INT) AslCompilerlval.s);}
2503    ;
2504
2505
2506/******* Helper rules ****************************************************/
2507
2508
2509AmlPackageLengthTerm
2510    : Integer                       {$$ = TrUpdateNode (PARSEOP_PACKAGE_LENGTH,(ACPI_PARSE_OBJECT *) $1);}
2511    ;
2512
2513NameStringItem
2514    : ',' NameString                {$$ = $2;}
2515    | ',' error                     {$$ = AslDoError (); yyclearin;}
2516    ;
2517
2518TermArgItem
2519    : ',' TermArg                   {$$ = $2;}
2520    | ',' error                     {$$ = AslDoError (); yyclearin;}
2521    ;
2522
2523OptionalBusMasterKeyword
2524    : ','                                       {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
2525    | ',' PARSEOP_BUSMASTERTYPE_MASTER          {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
2526    | ',' PARSEOP_BUSMASTERTYPE_NOTMASTER       {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_NOTMASTER);}
2527    ;
2528
2529OptionalAccessAttribTerm
2530    :                               {$$ = NULL;}
2531    | ','                           {$$ = NULL;}
2532    | ',' ByteConstExpr             {$$ = $2;}
2533    | ',' AccessAttribKeyword       {$$ = $2;}
2534    ;
2535
2536OptionalAccessSize
2537    :                               {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
2538    | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
2539    | ',' ByteConstExpr             {$$ = $2;}
2540    ;
2541
2542OptionalAddressingMode
2543    : ','                           {$$ = NULL;}
2544    | ',' AddressingModeKeyword     {$$ = $2;}
2545    ;
2546
2547OptionalAddressRange
2548    :                               {$$ = NULL;}
2549    | ','                           {$$ = NULL;}
2550    | ',' AddressKeyword            {$$ = $2;}
2551    ;
2552
2553OptionalBitsPerByte
2554    : ','                           {$$ = NULL;}
2555    | ',' BitsPerByteKeyword        {$$ = $2;}
2556    ;
2557
2558OptionalBuffer_Last
2559    :                               {$$ = NULL;}
2560    | ','                           {$$ = NULL;}
2561    | ',' DataBufferTerm            {$$ = $2;}
2562    ;
2563
2564OptionalByteConstExpr
2565    :                               {$$ = NULL;}
2566    | ','                           {$$ = NULL;}
2567    | ',' ByteConstExpr             {$$ = $2;}
2568    ;
2569
2570OptionalDecodeType
2571    : ','                           {$$ = NULL;}
2572    | ',' DecodeKeyword             {$$ = $2;}
2573    ;
2574
2575OptionalDevicePolarity
2576    : ','                           {$$ = NULL;}
2577    | ',' DevicePolarityKeyword     {$$ = $2;}
2578    ;
2579
2580OptionalDWordConstExpr
2581    :                               {$$ = NULL;}
2582    | ','                           {$$ = NULL;}
2583    | ',' DWordConstExpr            {$$ = $2;}
2584    ;
2585
2586OptionalEndian
2587    : ','                           {$$ = NULL;}
2588    | ',' EndianKeyword             {$$ = $2;}
2589    ;
2590
2591OptionalFlowControl
2592    : ','                           {$$ = NULL;}
2593    | ',' FlowControlKeyword        {$$ = $2;}
2594    ;
2595
2596OptionalIoRestriction
2597    : ','                           {$$ = NULL;}
2598    | ',' IoRestrictionKeyword      {$$ = $2;}
2599    ;
2600
2601OptionalListString
2602    :                               {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));}   /* Placeholder is a NULL string */
2603    | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));}   /* Placeholder is a NULL string */
2604    | ',' TermArg                   {$$ = $2;}
2605    ;
2606
2607OptionalMaxType
2608    : ','                           {$$ = NULL;}
2609    | ',' MaxKeyword                {$$ = $2;}
2610    ;
2611
2612OptionalMemType
2613    : ','                           {$$ = NULL;}
2614    | ',' MemTypeKeyword            {$$ = $2;}
2615    ;
2616
2617OptionalMinType
2618    : ','                           {$$ = NULL;}
2619    | ',' MinKeyword                {$$ = $2;}
2620    ;
2621
2622OptionalNameString
2623    :                               {$$ = NULL;}
2624    | ','                           {$$ = NULL;}
2625    | ',' NameString                {$$ = $2;}
2626    ;
2627
2628OptionalNameString_Last
2629    :                               {$$ = NULL;}
2630    | ','                           {$$ = NULL;}
2631    | ',' NameString                {$$ = $2;}
2632    ;
2633
2634OptionalNameString_First
2635    :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}
2636    | NameString                    {$$ = $1;}
2637    ;
2638
2639OptionalObjectTypeKeyword
2640    :                               {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_UNK);}
2641    | ',' ObjectTypeKeyword         {$$ = $2;}
2642    ;
2643
2644OptionalParityType
2645    : ','                           {$$ = NULL;}
2646    | ',' ParityTypeKeyword         {$$ = $2;}
2647    ;
2648
2649OptionalQWordConstExpr
2650    :                               {$$ = NULL;}
2651    | ','                           {$$ = NULL;}
2652    | ',' QWordConstExpr            {$$ = $2;}
2653    ;
2654
2655OptionalRangeType
2656    : ','                           {$$ = NULL;}
2657    | ',' RangeTypeKeyword          {$$ = $2;}
2658    ;
2659
2660OptionalReadWriteKeyword
2661    :                                   {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
2662    | PARSEOP_READWRITETYPE_BOTH        {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
2663    | PARSEOP_READWRITETYPE_READONLY    {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_READONLY);}
2664    ;
2665
2666OptionalReference
2667    :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
2668    | ','                           {$$ = TrCreateLeafNode (PARSEOP_ZERO);}       /* Placeholder is a ZeroOp object */
2669    | ',' TermArg                   {$$ = $2;}
2670    ;
2671
2672OptionalResourceType_First
2673    :                               {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
2674    | ResourceTypeKeyword           {$$ = $1;}
2675    ;
2676
2677OptionalResourceType
2678    :                               {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
2679    | ','                           {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
2680    | ',' ResourceTypeKeyword       {$$ = $2;}
2681    ;
2682
2683OptionalReturnArg
2684    :                               {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO), NODE_IS_NULL_RETURN);}       /* Placeholder is a ZeroOp object */
2685    | TermArg                       {$$ = $1;}
2686    ;
2687
2688OptionalSerializeRuleKeyword
2689    :                               {$$ = NULL;}
2690    | ','                           {$$ = NULL;}
2691    | ',' SerializeRuleKeyword      {$$ = $2;}
2692    ;
2693
2694OptionalSlaveMode
2695    : ','                           {$$ = NULL;}
2696    | ',' SlaveModeKeyword          {$$ = $2;}
2697    ;
2698
2699OptionalShareType
2700    :                               {$$ = NULL;}
2701    | ','                           {$$ = NULL;}
2702    | ',' ShareTypeKeyword          {$$ = $2;}
2703    ;
2704
2705OptionalShareType_First
2706    :                               {$$ = NULL;}
2707    | ShareTypeKeyword              {$$ = $1;}
2708    ;
2709
2710OptionalStopBits
2711    : ','                           {$$ = NULL;}
2712    | ',' StopBitsKeyword           {$$ = $2;}
2713    ;
2714
2715OptionalStringData
2716    :                               {$$ = NULL;}
2717    | ','                           {$$ = NULL;}
2718    | ',' StringData                {$$ = $2;}
2719    ;
2720
2721OptionalTermArg
2722    :                               {$$ = NULL;}
2723    | TermArg                       {$$ = $1;}
2724    ;
2725
2726OptionalType
2727    :                               {$$ = NULL;}
2728    | ','                           {$$ = NULL;}
2729    | ',' TypeKeyword               {$$ = $2;}
2730    ;
2731
2732OptionalType_Last
2733    :                               {$$ = NULL;}
2734    | ','                           {$$ = NULL;}
2735    | ',' TypeKeyword               {$$ = $2;}
2736    ;
2737
2738OptionalTranslationType_Last
2739    :                               {$$ = NULL;}
2740    | ','                           {$$ = NULL;}
2741    | ',' TranslationKeyword        {$$ = $2;}
2742    ;
2743
2744OptionalWireMode
2745    : ','                           {$$ = NULL;}
2746    | ',' WireModeKeyword           {$$ = $2;}
2747    ;
2748
2749OptionalWordConst
2750    :                               {$$ = NULL;}
2751    | WordConst                     {$$ = $1;}
2752    ;
2753
2754OptionalWordConstExpr
2755    : ','                           {$$ = NULL;}
2756    | ',' WordConstExpr             {$$ = $2;}
2757    ;
2758
2759OptionalXferSize
2760    :                               {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32, 2);}
2761    | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32, 2);}
2762    | ',' XferSizeKeyword           {$$ = $2;}
2763    ;
2764