1 NoEcho('
2 /******************************************************************************
3  *
4  * Module Name: aslresources.y - Bison/Yacc production rules for resources
5  *
6  *****************************************************************************/
7 
8 /*
9  * Copyright (C) 2000 - 2016, Intel Corp.
10  * All rights reserved.
11  *
12  * Redistribution and use in source and binary forms, with or without
13  * modification, are permitted provided that the following conditions
14  * are met:
15  * 1. Redistributions of source code must retain the above copyright
16  *    notice, this list of conditions, and the following disclaimer,
17  *    without modification.
18  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19  *    substantially similar to the "NO WARRANTY" disclaimer below
20  *    ("Disclaimer") and any redistribution must be conditioned upon
21  *    including a substantially similar Disclaimer requirement for further
22  *    binary redistribution.
23  * 3. Neither the names of the above-listed copyright holders nor the names
24  *    of any contributors may be used to endorse or promote products derived
25  *    from this software without specific prior written permission.
26  *
27  * Alternatively, this software may be distributed under the terms of the
28  * GNU General Public License ("GPL") version 2 as published by the Free
29  * Software Foundation.
30  *
31  * NO WARRANTY
32  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42  * POSSIBILITY OF SUCH DAMAGES.
43  */
44 
45 ')
46 
47 
48 /*******************************************************************************
49  *
50  * ASL Resource Template Terms
51  *
52  ******************************************************************************/
53 
54 /*
55  * Note: Create two default nodes to allow conversion to a Buffer AML opcode
56  * Also, insert the EndTag at the end of the template.
57  */
58 ResourceTemplateTerm
59     : PARSEOP_RESOURCETEMPLATE OptionalParentheses
60         '{'
61         ResourceMacroList '}'       {$$ = TrCreateNode (PARSEOP_RESOURCETEMPLATE,4,
62                                           TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
63                                           TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
64                                           $4,
65                                           TrCreateLeafNode (PARSEOP_ENDTAG));}
66     ;
67 
68 OptionalParentheses
69     :                               {$$ = NULL;}
70     | '(' ')'                       {$$ = NULL;}
71     ;
72 
73 ResourceMacroList
74     :                               {$$ = NULL;}
75     | ResourceMacroList
76         ResourceMacroTerm           {$$ = TrLinkPeerNode ($1,$2);}
77     ;
78 
79 ResourceMacroTerm
80     : DMATerm                       {}
81     | DWordIOTerm                   {}
82     | DWordMemoryTerm               {}
83     | DWordSpaceTerm                {}
84     | EndDependentFnTerm            {}
85     | ExtendedIOTerm                {}
86     | ExtendedMemoryTerm            {}
87     | ExtendedSpaceTerm             {}
88     | FixedDmaTerm                  {}
89     | FixedIOTerm                   {}
90     | GpioIntTerm                   {}
91     | GpioIoTerm                    {}
92     | I2cSerialBusTerm              {}
93     | I2cSerialBusTermV2            {}
94     | InterruptTerm                 {}
95     | IOTerm                        {}
96     | IRQNoFlagsTerm                {}
97     | IRQTerm                       {}
98     | Memory24Term                  {}
99     | Memory32FixedTerm             {}
100     | Memory32Term                  {}
101     | QWordIOTerm                   {}
102     | QWordMemoryTerm               {}
103     | QWordSpaceTerm                {}
104     | RegisterTerm                  {}
105     | SpiSerialBusTerm              {}
106     | SpiSerialBusTermV2            {}
107     | StartDependentFnNoPriTerm     {}
108     | StartDependentFnTerm          {}
109     | UartSerialBusTerm             {}
110     | UartSerialBusTermV2           {}
111     | VendorLongTerm                {}
112     | VendorShortTerm               {}
113     | WordBusNumberTerm             {}
114     | WordIOTerm                    {}
115     | WordSpaceTerm                 {}
116     ;
117 
118 DMATerm
119     : PARSEOP_DMA '('               {$<n>$ = TrCreateLeafNode (PARSEOP_DMA);}
120         DMATypeKeyword
121         OptionalBusMasterKeyword
122         ',' XferTypeKeyword
123         OptionalNameString_Last
124         ')' '{'
125             ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$5,$7,$8,$11);}
126     | PARSEOP_DMA '('
127         error ')'                   {$$ = AslDoError(); yyclearin;}
128     ;
129 
130 DWordIOTerm
131     : PARSEOP_DWORDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDIO);}
132         OptionalResourceType_First
133         OptionalMinType
134         OptionalMaxType
135         OptionalDecodeType
136         OptionalRangeType
137         ',' DWordConstExpr
138         ',' DWordConstExpr
139         ',' DWordConstExpr
140         ',' DWordConstExpr
141         ',' DWordConstExpr
142         OptionalByteConstExpr
143         OptionalStringData
144         OptionalNameString
145         OptionalType
146         OptionalTranslationType_Last
147         ')'                         {$$ = TrLinkChildren ($<n>3,15,
148                                         $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
149     | PARSEOP_DWORDIO '('
150         error ')'                   {$$ = AslDoError(); yyclearin;}
151     ;
152 
153 DWordMemoryTerm
154     : PARSEOP_DWORDMEMORY '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDMEMORY);}
155         OptionalResourceType_First
156         OptionalDecodeType
157         OptionalMinType
158         OptionalMaxType
159         OptionalMemType
160         ',' OptionalReadWriteKeyword
161         ',' DWordConstExpr
162         ',' DWordConstExpr
163         ',' DWordConstExpr
164         ',' DWordConstExpr
165         ',' DWordConstExpr
166         OptionalByteConstExpr
167         OptionalStringData
168         OptionalNameString
169         OptionalAddressRange
170         OptionalType_Last
171         ')'                         {$$ = TrLinkChildren ($<n>3,16,
172                                         $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
173     | PARSEOP_DWORDMEMORY '('
174         error ')'                   {$$ = AslDoError(); yyclearin;}
175     ;
176 
177 DWordSpaceTerm
178     : PARSEOP_DWORDSPACE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDSPACE);}
179         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
180         OptionalResourceType
181         OptionalDecodeType
182         OptionalMinType
183         OptionalMaxType
184         ',' ByteConstExpr
185         ',' DWordConstExpr
186         ',' DWordConstExpr
187         ',' DWordConstExpr
188         ',' DWordConstExpr
189         ',' DWordConstExpr
190         OptionalByteConstExpr
191         OptionalStringData
192         OptionalNameString_Last
193         ')'                         {$$ = TrLinkChildren ($<n>3,14,
194                                         $4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
195     | PARSEOP_DWORDSPACE '('
196         error ')'                   {$$ = AslDoError(); yyclearin;}
197     ;
198 
199 EndDependentFnTerm
200     : PARSEOP_ENDDEPENDENTFN '('
201         ')'                         {$$ = TrCreateLeafNode (PARSEOP_ENDDEPENDENTFN);}
202     | PARSEOP_ENDDEPENDENTFN '('
203         error ')'                   {$$ = AslDoError(); yyclearin;}
204     ;
205 
206 ExtendedIOTerm
207     : PARSEOP_EXTENDEDIO '('        {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDIO);}
208         OptionalResourceType_First
209         OptionalMinType
210         OptionalMaxType
211         OptionalDecodeType
212         OptionalRangeType
213         ',' QWordConstExpr
214         ',' QWordConstExpr
215         ',' QWordConstExpr
216         ',' QWordConstExpr
217         ',' QWordConstExpr
218         OptionalQWordConstExpr
219         OptionalNameString
220         OptionalType
221         OptionalTranslationType_Last
222         ')'                         {$$ = TrLinkChildren ($<n>3,14,
223                                         $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22);}
224     | PARSEOP_EXTENDEDIO '('
225         error ')'                   {$$ = AslDoError(); yyclearin;}
226     ;
227 
228 ExtendedMemoryTerm
229     : PARSEOP_EXTENDEDMEMORY '('    {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDMEMORY);}
230         OptionalResourceType_First
231         OptionalDecodeType
232         OptionalMinType
233         OptionalMaxType
234         OptionalMemType
235         ',' OptionalReadWriteKeyword
236         ',' QWordConstExpr
237         ',' QWordConstExpr
238         ',' QWordConstExpr
239         ',' QWordConstExpr
240         ',' QWordConstExpr
241         OptionalQWordConstExpr
242         OptionalNameString
243         OptionalAddressRange
244         OptionalType_Last
245         ')'                         {$$ = TrLinkChildren ($<n>3,15,
246                                         $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24);}
247     | PARSEOP_EXTENDEDMEMORY '('
248         error ')'                   {$$ = AslDoError(); yyclearin;}
249     ;
250 
251 ExtendedSpaceTerm
252     : PARSEOP_EXTENDEDSPACE '('     {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDSPACE);}
253         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
254         OptionalResourceType
255         OptionalDecodeType
256         OptionalMinType
257         OptionalMaxType
258         ',' ByteConstExpr
259         ',' QWordConstExpr
260         ',' QWordConstExpr
261         ',' QWordConstExpr
262         ',' QWordConstExpr
263         ',' QWordConstExpr
264         OptionalQWordConstExpr
265         OptionalNameString_Last
266         ')'                         {$$ = TrLinkChildren ($<n>3,13,
267                                         $4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23);}
268     | PARSEOP_EXTENDEDSPACE '('
269         error ')'                   {$$ = AslDoError(); yyclearin;}
270     ;
271 
272 FixedDmaTerm
273     : PARSEOP_FIXEDDMA '('          {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDDMA);}
274         WordConstExpr               /* 04: DMA RequestLines */
275         ',' WordConstExpr           /* 06: DMA Channels */
276         OptionalXferSize            /* 07: DMA TransferSize */
277         OptionalNameString          /* 08: DescriptorName */
278         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$7,$8);}
279     | PARSEOP_FIXEDDMA '('
280         error ')'                   {$$ = AslDoError(); yyclearin;}
281     ;
282 
283 FixedIOTerm
284     : PARSEOP_FIXEDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDIO);}
285         WordConstExpr
286         ',' ByteConstExpr
287         OptionalNameString_Last
288         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
289     | PARSEOP_FIXEDIO '('
290         error ')'                   {$$ = AslDoError(); yyclearin;}
291     ;
292 
293 GpioIntTerm
294     : PARSEOP_GPIO_INT '('          {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_INT);}
295         InterruptTypeKeyword        /* 04: InterruptType */
296         ',' InterruptLevel          /* 06: InterruptLevel */
297         OptionalShareType           /* 07: SharedType */
298         ',' PinConfigByte           /* 09: PinConfig */
299         OptionalWordConstExpr       /* 10: DebounceTimeout */
300         ',' StringData              /* 12: ResourceSource */
301         OptionalByteConstExpr       /* 13: ResourceSourceIndex */
302         OptionalResourceType        /* 14: ResourceType */
303         OptionalNameString          /* 15: DescriptorName */
304         OptionalBuffer_Last         /* 16: VendorData */
305         ')' '{'
306             DWordConstExpr '}'      {$$ = TrLinkChildren ($<n>3,11,
307                                         $4,$6,$7,$9,$10,$12,$13,$14,$15,$16,$19);}
308     | PARSEOP_GPIO_INT '('
309         error ')'                   {$$ = AslDoError(); yyclearin;}
310     ;
311 
312 GpioIoTerm
313     : PARSEOP_GPIO_IO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_IO);}
314         OptionalShareType_First     /* 04: SharedType */
315         ',' PinConfigByte           /* 06: PinConfig */
316         OptionalWordConstExpr       /* 07: DebounceTimeout */
317         OptionalWordConstExpr       /* 08: DriveStrength */
318         OptionalIoRestriction       /* 09: IoRestriction */
319         ',' StringData              /* 11: ResourceSource */
320         OptionalByteConstExpr       /* 12: ResourceSourceIndex */
321         OptionalResourceType        /* 13: ResourceType */
322         OptionalNameString          /* 14: DescriptorName */
323         OptionalBuffer_Last         /* 15: VendorData */
324         ')' '{'
325             DWordList '}'           {$$ = TrLinkChildren ($<n>3,11,
326                                         $4,$6,$7,$8,$9,$11,$12,$13,$14,$15,$18);}
327     | PARSEOP_GPIO_IO '('
328         error ')'                   {$$ = AslDoError(); yyclearin;}
329     ;
330 
331 I2cSerialBusTerm
332     : PARSEOP_I2C_SERIALBUS '('     {$<n>$ = TrCreateLeafNode (PARSEOP_I2C_SERIALBUS);}
333         WordConstExpr               /* 04: SlaveAddress */
334         OptionalSlaveMode           /* 05: SlaveMode */
335         ',' DWordConstExpr          /* 07: ConnectionSpeed */
336         OptionalAddressingMode      /* 08: AddressingMode */
337         ',' StringData              /* 10: ResourceSource */
338         OptionalByteConstExpr       /* 11: ResourceSourceIndex */
339         OptionalResourceType        /* 12: ResourceType */
340         OptionalNameString          /* 13: DescriptorName */
341         OptionalBuffer_Last         /* 14: VendorData */
342         ')'                         {$$ = TrLinkChildren ($<n>3,10,
343                                         $4,$5,$7,$8,$10,$11,$12,$13,
344                                         TrCreateLeafNode (PARSEOP_DEFAULT_ARG),$14);}
345     | PARSEOP_I2C_SERIALBUS '('
346         error ')'                   {$$ = AslDoError(); yyclearin;}
347     ;
348 
349 I2cSerialBusTermV2
350     : PARSEOP_I2C_SERIALBUS_V2 '('  {$<n>$ = TrCreateLeafNode (PARSEOP_I2C_SERIALBUS_V2);}
351         WordConstExpr               /* 04: SlaveAddress */
352         OptionalSlaveMode           /* 05: SlaveMode */
353         ',' DWordConstExpr          /* 07: ConnectionSpeed */
354         OptionalAddressingMode      /* 08: AddressingMode */
355         ',' StringData              /* 10: ResourceSource */
356         OptionalByteConstExpr       /* 11: ResourceSourceIndex */
357         OptionalResourceType        /* 12: ResourceType */
358         OptionalNameString          /* 13: DescriptorName */
359         OptionalShareType           /* 14: Share */
360         OptionalBuffer_Last         /* 15: VendorData */
361         ')'                         {$$ = TrLinkChildren ($<n>3,10,
362                                         $4,$5,$7,$8,$10,$11,$12,$13,$14,$15);}
363     | PARSEOP_I2C_SERIALBUS_V2 '('
364         error ')'                   {$$ = AslDoError(); yyclearin;}
365     ;
366 
367 InterruptTerm
368     : PARSEOP_INTERRUPT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_INTERRUPT);}
369         OptionalResourceType_First
370         ',' InterruptTypeKeyword
371         ',' InterruptLevel
372         OptionalShareType
373         OptionalByteConstExpr
374         OptionalStringData
375         OptionalNameString_Last
376         ')' '{'
377             DWordList '}'           {$$ = TrLinkChildren ($<n>3,8,
378                                         $4,$6,$8,$9,$10,$11,$12,$15);}
379     | PARSEOP_INTERRUPT '('
380         error ')'                   {$$ = AslDoError(); yyclearin;}
381     ;
382 
383 IOTerm
384     : PARSEOP_IO '('                {$<n>$ = TrCreateLeafNode (PARSEOP_IO);}
385         IODecodeKeyword
386         ',' WordConstExpr
387         ',' WordConstExpr
388         ',' ByteConstExpr
389         ',' ByteConstExpr
390         OptionalNameString_Last
391         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
392     | PARSEOP_IO '('
393         error ')'                   {$$ = AslDoError(); yyclearin;}
394     ;
395 
396 IRQNoFlagsTerm
397     : PARSEOP_IRQNOFLAGS '('        {$<n>$ = TrCreateLeafNode (PARSEOP_IRQNOFLAGS);}
398         OptionalNameString_First
399         ')' '{'
400             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
401     | PARSEOP_IRQNOFLAGS '('
402         error ')'                   {$$ = AslDoError(); yyclearin;}
403     ;
404 
405 IRQTerm
406     : PARSEOP_IRQ '('               {$<n>$ = TrCreateLeafNode (PARSEOP_IRQ);}
407         InterruptTypeKeyword
408         ',' InterruptLevel
409         OptionalShareType
410         OptionalNameString_Last
411         ')' '{'
412             ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$6,$7,$8,$11);}
413     | PARSEOP_IRQ '('
414         error ')'                   {$$ = AslDoError(); yyclearin;}
415     ;
416 
417 Memory24Term
418     : PARSEOP_MEMORY24 '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY24);}
419         OptionalReadWriteKeyword
420         ',' WordConstExpr
421         ',' WordConstExpr
422         ',' WordConstExpr
423         ',' WordConstExpr
424         OptionalNameString_Last
425         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
426     | PARSEOP_MEMORY24 '('
427         error ')'                   {$$ = AslDoError(); yyclearin;}
428     ;
429 
430 Memory32FixedTerm
431     : PARSEOP_MEMORY32FIXED '('     {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32FIXED);}
432         OptionalReadWriteKeyword
433         ',' DWordConstExpr
434         ',' DWordConstExpr
435         OptionalNameString_Last
436         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$8,$9);}
437     | PARSEOP_MEMORY32FIXED '('
438         error ')'                   {$$ = AslDoError(); yyclearin;}
439     ;
440 
441 Memory32Term
442     : PARSEOP_MEMORY32 '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32);}
443         OptionalReadWriteKeyword
444         ',' DWordConstExpr
445         ',' DWordConstExpr
446         ',' DWordConstExpr
447         ',' DWordConstExpr
448         OptionalNameString_Last
449         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
450     | PARSEOP_MEMORY32 '('
451         error ')'                   {$$ = AslDoError(); yyclearin;}
452     ;
453 
454 QWordIOTerm
455     : PARSEOP_QWORDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDIO);}
456         OptionalResourceType_First
457         OptionalMinType
458         OptionalMaxType
459         OptionalDecodeType
460         OptionalRangeType
461         ',' QWordConstExpr
462         ',' QWordConstExpr
463         ',' QWordConstExpr
464         ',' QWordConstExpr
465         ',' QWordConstExpr
466         OptionalByteConstExpr
467         OptionalStringData
468         OptionalNameString
469         OptionalType
470         OptionalTranslationType_Last
471         ')'                         {$$ = TrLinkChildren ($<n>3,15,
472                                         $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
473     | PARSEOP_QWORDIO '('
474         error ')'                   {$$ = AslDoError(); yyclearin;}
475     ;
476 
477 QWordMemoryTerm
478     : PARSEOP_QWORDMEMORY '('       {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDMEMORY);}
479         OptionalResourceType_First
480         OptionalDecodeType
481         OptionalMinType
482         OptionalMaxType
483         OptionalMemType
484         ',' OptionalReadWriteKeyword
485         ',' QWordConstExpr
486         ',' QWordConstExpr
487         ',' QWordConstExpr
488         ',' QWordConstExpr
489         ',' QWordConstExpr
490         OptionalByteConstExpr
491         OptionalStringData
492         OptionalNameString
493         OptionalAddressRange
494         OptionalType_Last
495         ')'                         {$$ = TrLinkChildren ($<n>3,16,
496                                         $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
497     | PARSEOP_QWORDMEMORY '('
498         error ')'                   {$$ = AslDoError(); yyclearin;}
499     ;
500 
501 QWordSpaceTerm
502     : PARSEOP_QWORDSPACE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDSPACE);}
503         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
504         OptionalResourceType
505         OptionalDecodeType
506         OptionalMinType
507         OptionalMaxType
508         ',' ByteConstExpr
509         ',' QWordConstExpr
510         ',' QWordConstExpr
511         ',' QWordConstExpr
512         ',' QWordConstExpr
513         ',' QWordConstExpr
514         OptionalByteConstExpr
515         OptionalStringData
516         OptionalNameString_Last
517         ')'                         {$$ = TrLinkChildren ($<n>3,14,
518                                         $4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
519     | PARSEOP_QWORDSPACE '('
520         error ')'                   {$$ = AslDoError(); yyclearin;}
521     ;
522 
523 RegisterTerm
524     : PARSEOP_REGISTER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_REGISTER);}
525         AddressSpaceKeyword
526         ',' ByteConstExpr
527         ',' ByteConstExpr
528         ',' QWordConstExpr
529         OptionalAccessSize
530         OptionalNameString_Last
531         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$11,$12);}
532     | PARSEOP_REGISTER '('
533         error ')'                   {$$ = AslDoError(); yyclearin;}
534     ;
535 
536 SpiSerialBusTerm
537     : PARSEOP_SPI_SERIALBUS '('     {$<n>$ = TrCreateLeafNode (PARSEOP_SPI_SERIALBUS);}
538         WordConstExpr               /* 04: DeviceSelection */
539         OptionalDevicePolarity      /* 05: DevicePolarity */
540         OptionalWireMode            /* 06: WireMode */
541         ',' ByteConstExpr           /* 08: DataBitLength */
542         OptionalSlaveMode           /* 09: SlaveMode */
543         ',' DWordConstExpr          /* 11: ConnectionSpeed */
544         ',' ClockPolarityKeyword    /* 13: ClockPolarity */
545         ',' ClockPhaseKeyword       /* 15: ClockPhase */
546         ',' StringData              /* 17: ResourceSource */
547         OptionalByteConstExpr       /* 18: ResourceSourceIndex */
548         OptionalResourceType        /* 19: ResourceType */
549         OptionalNameString          /* 20: DescriptorName */
550         OptionalBuffer_Last         /* 21: VendorData */
551         ')'                         {$$ = TrLinkChildren ($<n>3,14,
552                                         $4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20,
553                                         TrCreateLeafNode (PARSEOP_DEFAULT_ARG),$21);}
554     | PARSEOP_SPI_SERIALBUS '('
555         error ')'                   {$$ = AslDoError(); yyclearin;}
556     ;
557 
558 SpiSerialBusTermV2
559     : PARSEOP_SPI_SERIALBUS_V2 '('  {$<n>$ = TrCreateLeafNode (PARSEOP_SPI_SERIALBUS_V2);}
560         WordConstExpr               /* 04: DeviceSelection */
561         OptionalDevicePolarity      /* 05: DevicePolarity */
562         OptionalWireMode            /* 06: WireMode */
563         ',' ByteConstExpr           /* 08: DataBitLength */
564         OptionalSlaveMode           /* 09: SlaveMode */
565         ',' DWordConstExpr          /* 11: ConnectionSpeed */
566         ',' ClockPolarityKeyword    /* 13: ClockPolarity */
567         ',' ClockPhaseKeyword       /* 15: ClockPhase */
568         ',' StringData              /* 17: ResourceSource */
569         OptionalByteConstExpr       /* 18: ResourceSourceIndex */
570         OptionalResourceType        /* 19: ResourceType */
571         OptionalNameString          /* 20: DescriptorName */
572         OptionalShareType           /* 21: Share */
573         OptionalBuffer_Last         /* 22: VendorData */
574         ')'                         {$$ = TrLinkChildren ($<n>3,14,
575                                         $4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20,$21,$22);}
576     | PARSEOP_SPI_SERIALBUS_V2 '('
577         error ')'                   {$$ = AslDoError(); yyclearin;}
578     ;
579 
580 StartDependentFnNoPriTerm
581     : PARSEOP_STARTDEPENDENTFN_NOPRI '('    {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN_NOPRI);}
582         ')' '{'
583         ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,1,$6);}
584     | PARSEOP_STARTDEPENDENTFN_NOPRI '('
585         error ')'                   {$$ = AslDoError(); yyclearin;}
586     ;
587 
588 StartDependentFnTerm
589     : PARSEOP_STARTDEPENDENTFN '('  {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN);}
590         ByteConstExpr
591         ',' ByteConstExpr
592         ')' '{'
593         ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,3,$4,$6,$9);}
594     | PARSEOP_STARTDEPENDENTFN '('
595         error ')'                   {$$ = AslDoError(); yyclearin;}
596     ;
597 
598 UartSerialBusTerm
599     : PARSEOP_UART_SERIALBUS '('    {$<n>$ = TrCreateLeafNode (PARSEOP_UART_SERIALBUS);}
600         DWordConstExpr              /* 04: ConnectionSpeed */
601         OptionalBitsPerByte         /* 05: BitsPerByte */
602         OptionalStopBits            /* 06: StopBits */
603         ',' ByteConstExpr           /* 08: LinesInUse */
604         OptionalEndian              /* 09: Endianess */
605         OptionalParityType          /* 10: Parity */
606         OptionalFlowControl         /* 11: FlowControl */
607         ',' WordConstExpr           /* 13: Rx BufferSize */
608         ',' WordConstExpr           /* 15: Tx BufferSize */
609         ',' StringData              /* 17: ResourceSource */
610         OptionalByteConstExpr       /* 18: ResourceSourceIndex */
611         OptionalResourceType        /* 19: ResourceType */
612         OptionalNameString          /* 20: DescriptorName */
613         OptionalBuffer_Last         /* 21: VendorData */
614         ')'                         {$$ = TrLinkChildren ($<n>3,15,
615                                         $4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20,
616                                         TrCreateLeafNode (PARSEOP_DEFAULT_ARG),$21);}
617     | PARSEOP_UART_SERIALBUS '('
618         error ')'                   {$$ = AslDoError(); yyclearin;}
619     ;
620 
621 UartSerialBusTermV2
622     : PARSEOP_UART_SERIALBUS_V2 '(' {$<n>$ = TrCreateLeafNode (PARSEOP_UART_SERIALBUS_V2);}
623         DWordConstExpr              /* 04: ConnectionSpeed */
624         OptionalBitsPerByte         /* 05: BitsPerByte */
625         OptionalStopBits            /* 06: StopBits */
626         ',' ByteConstExpr           /* 08: LinesInUse */
627         OptionalEndian              /* 09: Endianess */
628         OptionalParityType          /* 10: Parity */
629         OptionalFlowControl         /* 11: FlowControl */
630         ',' WordConstExpr           /* 13: Rx BufferSize */
631         ',' WordConstExpr           /* 15: Tx BufferSize */
632         ',' StringData              /* 17: ResourceSource */
633         OptionalByteConstExpr       /* 18: ResourceSourceIndex */
634         OptionalResourceType        /* 19: ResourceType */
635         OptionalNameString          /* 20: DescriptorName */
636         OptionalShareType           /* 21: Share */
637         OptionalBuffer_Last         /* 22: VendorData */
638         ')'                         {$$ = TrLinkChildren ($<n>3,15,
639                                         $4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20,$21,$22);}
640     | PARSEOP_UART_SERIALBUS_V2 '('
641         error ')'                   {$$ = AslDoError(); yyclearin;}
642     ;
643 
644 VendorLongTerm
645     : PARSEOP_VENDORLONG '('        {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORLONG);}
646         OptionalNameString_First
647         ')' '{'
648             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
649     | PARSEOP_VENDORLONG '('
650         error ')'                   {$$ = AslDoError(); yyclearin;}
651     ;
652 
653 VendorShortTerm
654     : PARSEOP_VENDORSHORT '('       {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORSHORT);}
655         OptionalNameString_First
656         ')' '{'
657             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
658     | PARSEOP_VENDORSHORT '('
659         error ')'                   {$$ = AslDoError(); yyclearin;}
660     ;
661 
662 WordBusNumberTerm
663     : PARSEOP_WORDBUSNUMBER '('     {$<n>$ = TrCreateLeafNode (PARSEOP_WORDBUSNUMBER);}
664         OptionalResourceType_First
665         OptionalMinType
666         OptionalMaxType
667         OptionalDecodeType
668         ',' WordConstExpr
669         ',' WordConstExpr
670         ',' WordConstExpr
671         ',' WordConstExpr
672         ',' WordConstExpr
673         OptionalByteConstExpr
674         OptionalStringData
675         OptionalNameString_Last
676         ')'                         {$$ = TrLinkChildren ($<n>3,12,
677                                         $4,$5,$6,$7,$9,$11,$13,$15,$17,$18,$19,$20);}
678     | PARSEOP_WORDBUSNUMBER '('
679         error ')'                   {$$ = AslDoError(); yyclearin;}
680     ;
681 
682 WordIOTerm
683     : PARSEOP_WORDIO '('            {$<n>$ = TrCreateLeafNode (PARSEOP_WORDIO);}
684         OptionalResourceType_First
685         OptionalMinType
686         OptionalMaxType
687         OptionalDecodeType
688         OptionalRangeType
689         ',' WordConstExpr
690         ',' WordConstExpr
691         ',' WordConstExpr
692         ',' WordConstExpr
693         ',' WordConstExpr
694         OptionalByteConstExpr
695         OptionalStringData
696         OptionalNameString
697         OptionalType
698         OptionalTranslationType_Last
699         ')'                         {$$ = TrLinkChildren ($<n>3,15,
700                                         $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
701     | PARSEOP_WORDIO '('
702         error ')'                   {$$ = AslDoError(); yyclearin;}
703     ;
704 
705 WordSpaceTerm
706     : PARSEOP_WORDSPACE '('         {$<n>$ = TrCreateLeafNode (PARSEOP_WORDSPACE);}
707         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
708         OptionalResourceType
709         OptionalDecodeType
710         OptionalMinType
711         OptionalMaxType
712         ',' ByteConstExpr
713         ',' WordConstExpr
714         ',' WordConstExpr
715         ',' WordConstExpr
716         ',' WordConstExpr
717         ',' WordConstExpr
718         OptionalByteConstExpr
719         OptionalStringData
720         OptionalNameString_Last
721         ')'                         {$$ = TrLinkChildren ($<n>3,14,
722                                         $4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
723     | PARSEOP_WORDSPACE '('
724         error ')'                   {$$ = AslDoError(); yyclearin;}
725     ;
726