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