xref: /freebsd/sys/contrib/dev/acpica/compiler/aslresources.y (revision 63d1fd5970ec814904aa0f4580b10a0d302d08b2)
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
60         OptionalParentheses
61         '{'
62         ResourceMacroList '}'       {$$ = TrCreateNode (PARSEOP_RESOURCETEMPLATE,4,
63                                           TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
64                                           TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
65                                           $4,
66                                           TrCreateLeafNode (PARSEOP_ENDTAG));}
67     ;
68 
69 OptionalParentheses
70     :                               {$$ = NULL;}
71     | PARSEOP_OPEN_PAREN
72         PARSEOP_CLOSE_PAREN         {$$ = NULL;}
73     ;
74 
75 ResourceMacroList
76     :                               {$$ = NULL;}
77     | ResourceMacroList
78         ResourceMacroTerm           {$$ = TrLinkPeerNode ($1,$2);}
79     ;
80 
81 ResourceMacroTerm
82     : DMATerm                       {}
83     | DWordIOTerm                   {}
84     | DWordMemoryTerm               {}
85     | DWordSpaceTerm                {}
86     | EndDependentFnTerm            {}
87     | ExtendedIOTerm                {}
88     | ExtendedMemoryTerm            {}
89     | ExtendedSpaceTerm             {}
90     | FixedDmaTerm                  {}
91     | FixedIOTerm                   {}
92     | GpioIntTerm                   {}
93     | GpioIoTerm                    {}
94     | I2cSerialBusTerm              {}
95     | I2cSerialBusTermV2            {}
96     | InterruptTerm                 {}
97     | IOTerm                        {}
98     | IRQNoFlagsTerm                {}
99     | IRQTerm                       {}
100     | Memory24Term                  {}
101     | Memory32FixedTerm             {}
102     | Memory32Term                  {}
103     | QWordIOTerm                   {}
104     | QWordMemoryTerm               {}
105     | QWordSpaceTerm                {}
106     | RegisterTerm                  {}
107     | SpiSerialBusTerm              {}
108     | SpiSerialBusTermV2            {}
109     | StartDependentFnNoPriTerm     {}
110     | StartDependentFnTerm          {}
111     | UartSerialBusTerm             {}
112     | UartSerialBusTermV2           {}
113     | VendorLongTerm                {}
114     | VendorShortTerm               {}
115     | WordBusNumberTerm             {}
116     | WordIOTerm                    {}
117     | WordSpaceTerm                 {}
118     ;
119 
120 DMATerm
121     : PARSEOP_DMA
122         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_DMA);}
123         DMATypeKeyword
124         OptionalBusMasterKeyword
125         ',' XferTypeKeyword
126         OptionalNameString_Last
127         PARSEOP_CLOSE_PAREN '{'
128             ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$5,$7,$8,$11);}
129     | PARSEOP_DMA
130         PARSEOP_OPEN_PAREN
131         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
132     ;
133 
134 DWordIOTerm
135     : PARSEOP_DWORDIO
136         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDIO);}
137         OptionalResourceType_First
138         OptionalMinType
139         OptionalMaxType
140         OptionalDecodeType
141         OptionalRangeType
142         ',' DWordConstExpr
143         ',' DWordConstExpr
144         ',' DWordConstExpr
145         ',' DWordConstExpr
146         ',' DWordConstExpr
147         OptionalByteConstExpr
148         OptionalStringData
149         OptionalNameString
150         OptionalType
151         OptionalTranslationType_Last
152         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,15,
153                                         $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
154     | PARSEOP_DWORDIO
155         PARSEOP_OPEN_PAREN
156         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
157     ;
158 
159 DWordMemoryTerm
160     : PARSEOP_DWORDMEMORY
161         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDMEMORY);}
162         OptionalResourceType_First
163         OptionalDecodeType
164         OptionalMinType
165         OptionalMaxType
166         OptionalMemType
167         ',' OptionalReadWriteKeyword
168         ',' DWordConstExpr
169         ',' DWordConstExpr
170         ',' DWordConstExpr
171         ',' DWordConstExpr
172         ',' DWordConstExpr
173         OptionalByteConstExpr
174         OptionalStringData
175         OptionalNameString
176         OptionalAddressRange
177         OptionalType_Last
178         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,16,
179                                         $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
180     | PARSEOP_DWORDMEMORY
181         PARSEOP_OPEN_PAREN
182         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
183     ;
184 
185 DWordSpaceTerm
186     : PARSEOP_DWORDSPACE
187         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDSPACE);}
188         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
189         OptionalResourceType
190         OptionalDecodeType
191         OptionalMinType
192         OptionalMaxType
193         ',' ByteConstExpr
194         ',' DWordConstExpr
195         ',' DWordConstExpr
196         ',' DWordConstExpr
197         ',' DWordConstExpr
198         ',' DWordConstExpr
199         OptionalByteConstExpr
200         OptionalStringData
201         OptionalNameString_Last
202         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,14,
203                                         $4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
204     | PARSEOP_DWORDSPACE
205         PARSEOP_OPEN_PAREN
206         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
207     ;
208 
209 EndDependentFnTerm
210     : PARSEOP_ENDDEPENDENTFN
211         PARSEOP_OPEN_PAREN
212         PARSEOP_CLOSE_PAREN         {$$ = TrCreateLeafNode (PARSEOP_ENDDEPENDENTFN);}
213     | PARSEOP_ENDDEPENDENTFN
214         PARSEOP_OPEN_PAREN
215         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
216     ;
217 
218 ExtendedIOTerm
219     : PARSEOP_EXTENDEDIO
220         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDIO);}
221         OptionalResourceType_First
222         OptionalMinType
223         OptionalMaxType
224         OptionalDecodeType
225         OptionalRangeType
226         ',' QWordConstExpr
227         ',' QWordConstExpr
228         ',' QWordConstExpr
229         ',' QWordConstExpr
230         ',' QWordConstExpr
231         OptionalQWordConstExpr
232         OptionalNameString
233         OptionalType
234         OptionalTranslationType_Last
235         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,14,
236                                         $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22);}
237     | PARSEOP_EXTENDEDIO
238         PARSEOP_OPEN_PAREN
239         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
240     ;
241 
242 ExtendedMemoryTerm
243     : PARSEOP_EXTENDEDMEMORY
244         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDMEMORY);}
245         OptionalResourceType_First
246         OptionalDecodeType
247         OptionalMinType
248         OptionalMaxType
249         OptionalMemType
250         ',' OptionalReadWriteKeyword
251         ',' QWordConstExpr
252         ',' QWordConstExpr
253         ',' QWordConstExpr
254         ',' QWordConstExpr
255         ',' QWordConstExpr
256         OptionalQWordConstExpr
257         OptionalNameString
258         OptionalAddressRange
259         OptionalType_Last
260         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,15,
261                                         $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24);}
262     | PARSEOP_EXTENDEDMEMORY
263         PARSEOP_OPEN_PAREN
264         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
265     ;
266 
267 ExtendedSpaceTerm
268     : PARSEOP_EXTENDEDSPACE PARSEOP_OPEN_PAREN     {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDSPACE);}
269         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
270         OptionalResourceType
271         OptionalDecodeType
272         OptionalMinType
273         OptionalMaxType
274         ',' ByteConstExpr
275         ',' QWordConstExpr
276         ',' QWordConstExpr
277         ',' QWordConstExpr
278         ',' QWordConstExpr
279         ',' QWordConstExpr
280         OptionalQWordConstExpr
281         OptionalNameString_Last
282         PARSEOP_CLOSE_PAREN                         {$$ = TrLinkChildren ($<n>3,13,
283                                         $4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23);}
284     | PARSEOP_EXTENDEDSPACE
285         PARSEOP_OPEN_PAREN
286         error PARSEOP_CLOSE_PAREN                   {$$ = AslDoError(); yyclearin;}
287     ;
288 
289 FixedDmaTerm
290     : PARSEOP_FIXEDDMA
291         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDDMA);}
292         WordConstExpr               /* 04: DMA RequestLines */
293         ',' WordConstExpr           /* 06: DMA Channels */
294         OptionalXferSize            /* 07: DMA TransferSize */
295         OptionalNameString          /* 08: DescriptorName */
296         PARSEOP_CLOSE_PAREN                         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$7,$8);}
297     | PARSEOP_FIXEDDMA
298         PARSEOP_OPEN_PAREN
299         error PARSEOP_CLOSE_PAREN                   {$$ = AslDoError(); yyclearin;}
300     ;
301 
302 FixedIOTerm
303     : PARSEOP_FIXEDIO
304         PARSEOP_OPEN_PAREN           {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDIO);}
305         WordConstExpr
306         ',' ByteConstExpr
307         OptionalNameString_Last
308         PARSEOP_CLOSE_PAREN                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
309     | PARSEOP_FIXEDIO
310         PARSEOP_OPEN_PAREN
311         error PARSEOP_CLOSE_PAREN                   {$$ = AslDoError(); yyclearin;}
312     ;
313 
314 GpioIntTerm
315     : PARSEOP_GPIO_INT
316         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_INT);}
317         InterruptTypeKeyword        /* 04: InterruptType */
318         ',' InterruptLevel          /* 06: InterruptLevel */
319         OptionalShareType           /* 07: SharedType */
320         ',' PinConfigByte           /* 09: PinConfig */
321         OptionalWordConstExpr       /* 10: DebounceTimeout */
322         ',' StringData              /* 12: ResourceSource */
323         OptionalByteConstExpr       /* 13: ResourceSourceIndex */
324         OptionalResourceType        /* 14: ResourceType */
325         OptionalNameString          /* 15: DescriptorName */
326         OptionalBuffer_Last         /* 16: VendorData */
327         PARSEOP_CLOSE_PAREN '{'
328             DWordConstExpr '}'      {$$ = TrLinkChildren ($<n>3,11,
329                                         $4,$6,$7,$9,$10,$12,$13,$14,$15,$16,$19);}
330     | PARSEOP_GPIO_INT
331         PARSEOP_OPEN_PAREN
332         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
333     ;
334 
335 GpioIoTerm
336     : PARSEOP_GPIO_IO
337         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_IO);}
338         OptionalShareType_First     /* 04: SharedType */
339         ',' PinConfigByte           /* 06: PinConfig */
340         OptionalWordConstExpr       /* 07: DebounceTimeout */
341         OptionalWordConstExpr       /* 08: DriveStrength */
342         OptionalIoRestriction       /* 09: IoRestriction */
343         ',' StringData              /* 11: ResourceSource */
344         OptionalByteConstExpr       /* 12: ResourceSourceIndex */
345         OptionalResourceType        /* 13: ResourceType */
346         OptionalNameString          /* 14: DescriptorName */
347         OptionalBuffer_Last         /* 15: VendorData */
348         PARSEOP_CLOSE_PAREN '{'
349             DWordList '}'           {$$ = TrLinkChildren ($<n>3,11,
350                                         $4,$6,$7,$8,$9,$11,$12,$13,$14,$15,$18);}
351     | PARSEOP_GPIO_IO
352         PARSEOP_OPEN_PAREN
353         error PARSEOP_CLOSE_PAREN                   {$$ = AslDoError(); yyclearin;}
354     ;
355 
356 I2cSerialBusTerm
357     : PARSEOP_I2C_SERIALBUS
358         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_I2C_SERIALBUS);}
359         WordConstExpr               /* 04: SlaveAddress */
360         OptionalSlaveMode           /* 05: SlaveMode */
361         ',' DWordConstExpr          /* 07: ConnectionSpeed */
362         OptionalAddressingMode      /* 08: AddressingMode */
363         ',' StringData              /* 10: ResourceSource */
364         OptionalByteConstExpr       /* 11: ResourceSourceIndex */
365         OptionalResourceType        /* 12: ResourceType */
366         OptionalNameString          /* 13: DescriptorName */
367         OptionalBuffer_Last         /* 14: VendorData */
368         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,10,
369                                         $4,$5,$7,$8,$10,$11,$12,$13,
370                                         TrCreateLeafNode (PARSEOP_DEFAULT_ARG),$14);}
371     | PARSEOP_I2C_SERIALBUS
372         PARSEOP_OPEN_PAREN
373         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
374     ;
375 
376 I2cSerialBusTermV2
377     : PARSEOP_I2C_SERIALBUS_V2
378         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_I2C_SERIALBUS_V2);}
379         WordConstExpr               /* 04: SlaveAddress */
380         OptionalSlaveMode           /* 05: SlaveMode */
381         ',' DWordConstExpr          /* 07: ConnectionSpeed */
382         OptionalAddressingMode      /* 08: AddressingMode */
383         ',' StringData              /* 10: ResourceSource */
384         OptionalByteConstExpr       /* 11: ResourceSourceIndex */
385         OptionalResourceType        /* 12: ResourceType */
386         OptionalNameString          /* 13: DescriptorName */
387         OptionalShareType           /* 14: Share */
388         OptionalBuffer_Last         /* 15: VendorData */
389         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,10,
390                                         $4,$5,$7,$8,$10,$11,$12,$13,$14,$15);}
391     | PARSEOP_I2C_SERIALBUS_V2
392         PARSEOP_OPEN_PAREN
393         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
394     ;
395 
396 InterruptTerm
397     : PARSEOP_INTERRUPT
398         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_INTERRUPT);}
399         OptionalResourceType_First
400         ',' InterruptTypeKeyword
401         ',' InterruptLevel
402         OptionalShareType
403         OptionalByteConstExpr
404         OptionalStringData
405         OptionalNameString_Last
406         PARSEOP_CLOSE_PAREN '{'
407             DWordList '}'           {$$ = TrLinkChildren ($<n>3,8,
408                                         $4,$6,$8,$9,$10,$11,$12,$15);}
409     | PARSEOP_INTERRUPT
410         PARSEOP_OPEN_PAREN
411         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
412     ;
413 
414 IOTerm
415     : PARSEOP_IO
416         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_IO);}
417         IODecodeKeyword
418         ',' WordConstExpr
419         ',' WordConstExpr
420         ',' ByteConstExpr
421         ',' ByteConstExpr
422         OptionalNameString_Last
423         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
424     | PARSEOP_IO
425         PARSEOP_OPEN_PAREN
426         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
427     ;
428 
429 IRQNoFlagsTerm
430     : PARSEOP_IRQNOFLAGS
431         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_IRQNOFLAGS);}
432         OptionalNameString_First
433         PARSEOP_CLOSE_PAREN '{'
434             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
435     | PARSEOP_IRQNOFLAGS
436         PARSEOP_OPEN_PAREN
437         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
438     ;
439 
440 IRQTerm
441     : PARSEOP_IRQ
442         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_IRQ);}
443         InterruptTypeKeyword
444         ',' InterruptLevel
445         OptionalShareType
446         OptionalNameString_Last
447         PARSEOP_CLOSE_PAREN '{'
448             ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$6,$7,$8,$11);}
449     | PARSEOP_IRQ
450         PARSEOP_OPEN_PAREN
451         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
452     ;
453 
454 Memory24Term
455     : PARSEOP_MEMORY24
456         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY24);}
457         OptionalReadWriteKeyword
458         ',' WordConstExpr
459         ',' WordConstExpr
460         ',' WordConstExpr
461         ',' WordConstExpr
462         OptionalNameString_Last
463         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
464     | PARSEOP_MEMORY24
465         PARSEOP_OPEN_PAREN
466         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
467     ;
468 
469 Memory32FixedTerm
470     : PARSEOP_MEMORY32FIXED
471         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32FIXED);}
472         OptionalReadWriteKeyword
473         ',' DWordConstExpr
474         ',' DWordConstExpr
475         OptionalNameString_Last
476         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$8,$9);}
477     | PARSEOP_MEMORY32FIXED
478         PARSEOP_OPEN_PAREN
479         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
480     ;
481 
482 Memory32Term
483     : PARSEOP_MEMORY32
484         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32);}
485         OptionalReadWriteKeyword
486         ',' DWordConstExpr
487         ',' DWordConstExpr
488         ',' DWordConstExpr
489         ',' DWordConstExpr
490         OptionalNameString_Last
491         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
492     | PARSEOP_MEMORY32
493         PARSEOP_OPEN_PAREN
494         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
495     ;
496 
497 QWordIOTerm
498     : PARSEOP_QWORDIO
499         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDIO);}
500         OptionalResourceType_First
501         OptionalMinType
502         OptionalMaxType
503         OptionalDecodeType
504         OptionalRangeType
505         ',' QWordConstExpr
506         ',' QWordConstExpr
507         ',' QWordConstExpr
508         ',' QWordConstExpr
509         ',' QWordConstExpr
510         OptionalByteConstExpr
511         OptionalStringData
512         OptionalNameString
513         OptionalType
514         OptionalTranslationType_Last
515         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,15,
516                                         $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
517     | PARSEOP_QWORDIO
518         PARSEOP_OPEN_PAREN
519         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
520     ;
521 
522 QWordMemoryTerm
523     : PARSEOP_QWORDMEMORY
524         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDMEMORY);}
525         OptionalResourceType_First
526         OptionalDecodeType
527         OptionalMinType
528         OptionalMaxType
529         OptionalMemType
530         ',' OptionalReadWriteKeyword
531         ',' QWordConstExpr
532         ',' QWordConstExpr
533         ',' QWordConstExpr
534         ',' QWordConstExpr
535         ',' QWordConstExpr
536         OptionalByteConstExpr
537         OptionalStringData
538         OptionalNameString
539         OptionalAddressRange
540         OptionalType_Last
541         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,16,
542                                         $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
543     | PARSEOP_QWORDMEMORY
544         PARSEOP_OPEN_PAREN
545         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
546     ;
547 
548 QWordSpaceTerm
549     : PARSEOP_QWORDSPACE
550         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDSPACE);}
551         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
552         OptionalResourceType
553         OptionalDecodeType
554         OptionalMinType
555         OptionalMaxType
556         ',' ByteConstExpr
557         ',' QWordConstExpr
558         ',' QWordConstExpr
559         ',' QWordConstExpr
560         ',' QWordConstExpr
561         ',' QWordConstExpr
562         OptionalByteConstExpr
563         OptionalStringData
564         OptionalNameString_Last
565         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,14,
566                                         $4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
567     | PARSEOP_QWORDSPACE
568         PARSEOP_OPEN_PAREN
569         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
570     ;
571 
572 RegisterTerm
573     : PARSEOP_REGISTER
574         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_REGISTER);}
575         AddressSpaceKeyword
576         ',' ByteConstExpr
577         ',' ByteConstExpr
578         ',' QWordConstExpr
579         OptionalAccessSize
580         OptionalNameString_Last
581         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$11,$12);}
582     | PARSEOP_REGISTER
583         PARSEOP_OPEN_PAREN
584         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
585     ;
586 
587 SpiSerialBusTerm
588     : PARSEOP_SPI_SERIALBUS
589         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_SPI_SERIALBUS);}
590         WordConstExpr               /* 04: DeviceSelection */
591         OptionalDevicePolarity      /* 05: DevicePolarity */
592         OptionalWireMode            /* 06: WireMode */
593         ',' ByteConstExpr           /* 08: DataBitLength */
594         OptionalSlaveMode           /* 09: SlaveMode */
595         ',' DWordConstExpr          /* 11: ConnectionSpeed */
596         ',' ClockPolarityKeyword    /* 13: ClockPolarity */
597         ',' ClockPhaseKeyword       /* 15: ClockPhase */
598         ',' StringData              /* 17: ResourceSource */
599         OptionalByteConstExpr       /* 18: ResourceSourceIndex */
600         OptionalResourceType        /* 19: ResourceType */
601         OptionalNameString          /* 20: DescriptorName */
602         OptionalBuffer_Last         /* 21: VendorData */
603         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,14,
604                                         $4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20,
605                                         TrCreateLeafNode (PARSEOP_DEFAULT_ARG),$21);}
606     | PARSEOP_SPI_SERIALBUS
607         PARSEOP_OPEN_PAREN
608         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
609     ;
610 
611 SpiSerialBusTermV2
612     : PARSEOP_SPI_SERIALBUS_V2
613         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_SPI_SERIALBUS_V2);}
614         WordConstExpr               /* 04: DeviceSelection */
615         OptionalDevicePolarity      /* 05: DevicePolarity */
616         OptionalWireMode            /* 06: WireMode */
617         ',' ByteConstExpr           /* 08: DataBitLength */
618         OptionalSlaveMode           /* 09: SlaveMode */
619         ',' DWordConstExpr          /* 11: ConnectionSpeed */
620         ',' ClockPolarityKeyword    /* 13: ClockPolarity */
621         ',' ClockPhaseKeyword       /* 15: ClockPhase */
622         ',' StringData              /* 17: ResourceSource */
623         OptionalByteConstExpr       /* 18: ResourceSourceIndex */
624         OptionalResourceType        /* 19: ResourceType */
625         OptionalNameString          /* 20: DescriptorName */
626         OptionalShareType           /* 21: Share */
627         OptionalBuffer_Last         /* 22: VendorData */
628         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,14,
629                                         $4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20,$21,$22);}
630     | PARSEOP_SPI_SERIALBUS_V2
631         PARSEOP_OPEN_PAREN
632         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
633     ;
634 
635 StartDependentFnNoPriTerm
636     : PARSEOP_STARTDEPENDENTFN_NOPRI
637         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN_NOPRI);}
638         PARSEOP_CLOSE_PAREN '{'
639         ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,1,$6);}
640     | PARSEOP_STARTDEPENDENTFN_NOPRI
641         PARSEOP_OPEN_PAREN
642         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
643     ;
644 
645 StartDependentFnTerm
646     : PARSEOP_STARTDEPENDENTFN
647         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN);}
648         ByteConstExpr
649         ',' ByteConstExpr
650         PARSEOP_CLOSE_PAREN '{'
651         ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,3,$4,$6,$9);}
652     | PARSEOP_STARTDEPENDENTFN
653         PARSEOP_OPEN_PAREN
654         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
655     ;
656 
657 UartSerialBusTerm
658     : PARSEOP_UART_SERIALBUS
659         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_UART_SERIALBUS);}
660         DWordConstExpr              /* 04: ConnectionSpeed */
661         OptionalBitsPerByte         /* 05: BitsPerByte */
662         OptionalStopBits            /* 06: StopBits */
663         ',' ByteConstExpr           /* 08: LinesInUse */
664         OptionalEndian              /* 09: Endianess */
665         OptionalParityType          /* 10: Parity */
666         OptionalFlowControl         /* 11: FlowControl */
667         ',' WordConstExpr           /* 13: Rx BufferSize */
668         ',' WordConstExpr           /* 15: Tx BufferSize */
669         ',' StringData              /* 17: ResourceSource */
670         OptionalByteConstExpr       /* 18: ResourceSourceIndex */
671         OptionalResourceType        /* 19: ResourceType */
672         OptionalNameString          /* 20: DescriptorName */
673         OptionalBuffer_Last         /* 21: VendorData */
674         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,15,
675                                         $4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20,
676                                         TrCreateLeafNode (PARSEOP_DEFAULT_ARG),$21);}
677     | PARSEOP_UART_SERIALBUS
678         PARSEOP_OPEN_PAREN
679         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
680     ;
681 
682 UartSerialBusTermV2
683     : PARSEOP_UART_SERIALBUS_V2
684         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_UART_SERIALBUS_V2);}
685         DWordConstExpr              /* 04: ConnectionSpeed */
686         OptionalBitsPerByte         /* 05: BitsPerByte */
687         OptionalStopBits            /* 06: StopBits */
688         ',' ByteConstExpr           /* 08: LinesInUse */
689         OptionalEndian              /* 09: Endianess */
690         OptionalParityType          /* 10: Parity */
691         OptionalFlowControl         /* 11: FlowControl */
692         ',' WordConstExpr           /* 13: Rx BufferSize */
693         ',' WordConstExpr           /* 15: Tx BufferSize */
694         ',' StringData              /* 17: ResourceSource */
695         OptionalByteConstExpr       /* 18: ResourceSourceIndex */
696         OptionalResourceType        /* 19: ResourceType */
697         OptionalNameString          /* 20: DescriptorName */
698         OptionalShareType           /* 21: Share */
699         OptionalBuffer_Last         /* 22: VendorData */
700         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,15,
701                                         $4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20,$21,$22);}
702     | PARSEOP_UART_SERIALBUS_V2
703         PARSEOP_OPEN_PAREN
704         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
705     ;
706 
707 VendorLongTerm
708     : PARSEOP_VENDORLONG
709         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORLONG);}
710         OptionalNameString_First
711         PARSEOP_CLOSE_PAREN '{'
712             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
713     | PARSEOP_VENDORLONG
714         PARSEOP_OPEN_PAREN
715         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
716     ;
717 
718 VendorShortTerm
719     : PARSEOP_VENDORSHORT
720         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORSHORT);}
721         OptionalNameString_First
722         PARSEOP_CLOSE_PAREN '{'
723             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
724     | PARSEOP_VENDORSHORT
725         PARSEOP_OPEN_PAREN
726         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
727     ;
728 
729 WordBusNumberTerm
730     : PARSEOP_WORDBUSNUMBER
731         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_WORDBUSNUMBER);}
732         OptionalResourceType_First
733         OptionalMinType
734         OptionalMaxType
735         OptionalDecodeType
736         ',' WordConstExpr
737         ',' WordConstExpr
738         ',' WordConstExpr
739         ',' WordConstExpr
740         ',' WordConstExpr
741         OptionalByteConstExpr
742         OptionalStringData
743         OptionalNameString_Last
744         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,12,
745                                         $4,$5,$6,$7,$9,$11,$13,$15,$17,$18,$19,$20);}
746     | PARSEOP_WORDBUSNUMBER
747         PARSEOP_OPEN_PAREN
748         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
749     ;
750 
751 WordIOTerm
752     : PARSEOP_WORDIO
753         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_WORDIO);}
754         OptionalResourceType_First
755         OptionalMinType
756         OptionalMaxType
757         OptionalDecodeType
758         OptionalRangeType
759         ',' WordConstExpr
760         ',' WordConstExpr
761         ',' WordConstExpr
762         ',' WordConstExpr
763         ',' WordConstExpr
764         OptionalByteConstExpr
765         OptionalStringData
766         OptionalNameString
767         OptionalType
768         OptionalTranslationType_Last
769         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,15,
770                                         $4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
771     | PARSEOP_WORDIO
772         PARSEOP_OPEN_PAREN
773         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
774     ;
775 
776 WordSpaceTerm
777     : PARSEOP_WORDSPACE
778         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafNode (PARSEOP_WORDSPACE);}
779         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
780         OptionalResourceType
781         OptionalDecodeType
782         OptionalMinType
783         OptionalMaxType
784         ',' ByteConstExpr
785         ',' WordConstExpr
786         ',' WordConstExpr
787         ',' WordConstExpr
788         ',' WordConstExpr
789         ',' WordConstExpr
790         OptionalByteConstExpr
791         OptionalStringData
792         OptionalNameString_Last
793         PARSEOP_CLOSE_PAREN         {$$ = TrLinkChildren ($<n>3,14,
794                                         $4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
795     | PARSEOP_WORDSPACE
796         PARSEOP_OPEN_PAREN
797         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
798     ;
799