1 NoEcho('
2 /******************************************************************************
3  *
4  * Module Name: aslresources.y - Bison/Yacc production rules for resources
5  *
6  *****************************************************************************/
7 
8 /*
9  * Copyright (C) 2000 - 2015, Intel Corp.
10  * All rights reserved.
11  *
12  * Redistribution and use in source and binary forms, with or without
13  * modification, are permitted provided that the following conditions
14  * are met:
15  * 1. Redistributions of source code must retain the above copyright
16  *    notice, this list of conditions, and the following disclaimer,
17  *    without modification.
18  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19  *    substantially similar to the "NO WARRANTY" disclaimer below
20  *    ("Disclaimer") and any redistribution must be conditioned upon
21  *    including a substantially similar Disclaimer requirement for further
22  *    binary redistribution.
23  * 3. Neither the names of the above-listed copyright holders nor the names
24  *    of any contributors may be used to endorse or promote products derived
25  *    from this software without specific prior written permission.
26  *
27  * Alternatively, this software may be distributed under the terms of the
28  * GNU General Public License ("GPL") version 2 as published by the Free
29  * Software Foundation.
30  *
31  * NO WARRANTY
32  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42  * POSSIBILITY OF SUCH DAMAGES.
43  */
44 
45 ')
46 
47 /*******************************************************************************
48  *
49  * ASL Parameter Keyword Terms
50  *
51  ******************************************************************************/
52 
53 AccessAttribKeyword
54     : PARSEOP_ACCESSATTRIB_BLOCK            {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BLOCK);}
55     | PARSEOP_ACCESSATTRIB_BLOCK_CALL       {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BLOCK_CALL);}
56     | PARSEOP_ACCESSATTRIB_BYTE             {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_BYTE);}
57     | PARSEOP_ACCESSATTRIB_QUICK            {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_QUICK );}
58     | PARSEOP_ACCESSATTRIB_SND_RCV          {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_SND_RCV);}
59     | PARSEOP_ACCESSATTRIB_WORD             {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_WORD);}
60     | PARSEOP_ACCESSATTRIB_WORD_CALL        {$$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_WORD_CALL);}
61     | PARSEOP_ACCESSATTRIB_MULTIBYTE '('    {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_MULTIBYTE);}
62         ByteConst
63         ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
64     | PARSEOP_ACCESSATTRIB_RAW_BYTES '('    {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_RAW_BYTES);}
65         ByteConst
66         ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
67     | PARSEOP_ACCESSATTRIB_RAW_PROCESS '('  {$<n>$ = TrCreateLeafNode (PARSEOP_ACCESSATTRIB_RAW_PROCESS);}
68         ByteConst
69         ')'                                 {$$ = TrLinkChildren ($<n>3,1,$4);}
70     ;
71 
72 AccessTypeKeyword
73     : PARSEOP_ACCESSTYPE_ANY                {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_ANY);}
74     | PARSEOP_ACCESSTYPE_BYTE               {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_BYTE);}
75     | PARSEOP_ACCESSTYPE_WORD               {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_WORD);}
76     | PARSEOP_ACCESSTYPE_DWORD              {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_DWORD);}
77     | PARSEOP_ACCESSTYPE_QWORD              {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_QWORD);}
78     | PARSEOP_ACCESSTYPE_BUF                {$$ = TrCreateLeafNode (PARSEOP_ACCESSTYPE_BUF);}
79     ;
80 
81 AddressingModeKeyword
82     : PARSEOP_ADDRESSINGMODE_7BIT           {$$ = TrCreateLeafNode (PARSEOP_ADDRESSINGMODE_7BIT);}
83     | PARSEOP_ADDRESSINGMODE_10BIT          {$$ = TrCreateLeafNode (PARSEOP_ADDRESSINGMODE_10BIT);}
84     ;
85 
86 AddressKeyword
87     : PARSEOP_ADDRESSTYPE_MEMORY            {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_MEMORY);}
88     | PARSEOP_ADDRESSTYPE_RESERVED          {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_RESERVED);}
89     | PARSEOP_ADDRESSTYPE_NVS               {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_NVS);}
90     | PARSEOP_ADDRESSTYPE_ACPI              {$$ = TrCreateLeafNode (PARSEOP_ADDRESSTYPE_ACPI);}
91     ;
92 
93 AddressSpaceKeyword
94     : ByteConst                             {$$ = UtCheckIntegerRange ($1, 0x0A, 0xFF);}
95     | RegionSpaceKeyword                    {}
96     ;
97 
98 BitsPerByteKeyword
99     : PARSEOP_BITSPERBYTE_FIVE              {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_FIVE);}
100     | PARSEOP_BITSPERBYTE_SIX               {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_SIX);}
101     | PARSEOP_BITSPERBYTE_SEVEN             {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_SEVEN);}
102     | PARSEOP_BITSPERBYTE_EIGHT             {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_EIGHT);}
103     | PARSEOP_BITSPERBYTE_NINE              {$$ = TrCreateLeafNode (PARSEOP_BITSPERBYTE_NINE);}
104     ;
105 
106 ClockPhaseKeyword
107     : PARSEOP_CLOCKPHASE_FIRST              {$$ = TrCreateLeafNode (PARSEOP_CLOCKPHASE_FIRST);}
108     | PARSEOP_CLOCKPHASE_SECOND             {$$ = TrCreateLeafNode (PARSEOP_CLOCKPHASE_SECOND);}
109     ;
110 
111 ClockPolarityKeyword
112     : PARSEOP_CLOCKPOLARITY_LOW             {$$ = TrCreateLeafNode (PARSEOP_CLOCKPOLARITY_LOW);}
113     | PARSEOP_CLOCKPOLARITY_HIGH            {$$ = TrCreateLeafNode (PARSEOP_CLOCKPOLARITY_HIGH);}
114     ;
115 
116 DecodeKeyword
117     : PARSEOP_DECODETYPE_POS                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_POS);}
118     | PARSEOP_DECODETYPE_SUB                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_SUB);}
119     ;
120 
121 DevicePolarityKeyword
122     : PARSEOP_DEVICEPOLARITY_LOW            {$$ = TrCreateLeafNode (PARSEOP_DEVICEPOLARITY_LOW);}
123     | PARSEOP_DEVICEPOLARITY_HIGH           {$$ = TrCreateLeafNode (PARSEOP_DEVICEPOLARITY_HIGH);}
124     ;
125 
126 DMATypeKeyword
127     : PARSEOP_DMATYPE_A                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_A);}
128     | PARSEOP_DMATYPE_COMPATIBILITY         {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_COMPATIBILITY);}
129     | PARSEOP_DMATYPE_B                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_B);}
130     | PARSEOP_DMATYPE_F                     {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_F);}
131     ;
132 
133 EndianKeyword
134     : PARSEOP_ENDIAN_LITTLE                 {$$ = TrCreateLeafNode (PARSEOP_ENDIAN_LITTLE);}
135     | PARSEOP_ENDIAN_BIG                    {$$ = TrCreateLeafNode (PARSEOP_ENDIAN_BIG);}
136     ;
137 
138 FlowControlKeyword
139     : PARSEOP_FLOWCONTROL_HW                {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_HW);}
140     | PARSEOP_FLOWCONTROL_NONE              {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_NONE);}
141     | PARSEOP_FLOWCONTROL_SW                {$$ = TrCreateLeafNode (PARSEOP_FLOWCONTROL_SW);}
142     ;
143 
144 InterruptLevel
145     : PARSEOP_INTLEVEL_ACTIVEBOTH           {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVEBOTH);}
146     | PARSEOP_INTLEVEL_ACTIVEHIGH           {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVEHIGH);}
147     | PARSEOP_INTLEVEL_ACTIVELOW            {$$ = TrCreateLeafNode (PARSEOP_INTLEVEL_ACTIVELOW);}
148     ;
149 
150 InterruptTypeKeyword
151     : PARSEOP_INTTYPE_EDGE                  {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_EDGE);}
152     | PARSEOP_INTTYPE_LEVEL                 {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_LEVEL);}
153     ;
154 
155 IODecodeKeyword
156     : PARSEOP_IODECODETYPE_16               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_16);}
157     | PARSEOP_IODECODETYPE_10               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_10);}
158     ;
159 
160 IoRestrictionKeyword
161     : PARSEOP_IORESTRICT_IN                 {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_IN);}
162     | PARSEOP_IORESTRICT_OUT                {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_OUT);}
163     | PARSEOP_IORESTRICT_NONE               {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_NONE);}
164     | PARSEOP_IORESTRICT_PRESERVE           {$$ = TrCreateLeafNode (PARSEOP_IORESTRICT_PRESERVE);}
165     ;
166 
167 LockRuleKeyword
168     : PARSEOP_LOCKRULE_LOCK                 {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_LOCK);}
169     | PARSEOP_LOCKRULE_NOLOCK               {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_NOLOCK);}
170     ;
171 
172 MatchOpKeyword
173     : PARSEOP_MATCHTYPE_MTR                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MTR);}
174     | PARSEOP_MATCHTYPE_MEQ                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MEQ);}
175     | PARSEOP_MATCHTYPE_MLE                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MLE);}
176     | PARSEOP_MATCHTYPE_MLT                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MLT);}
177     | PARSEOP_MATCHTYPE_MGE                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MGE);}
178     | PARSEOP_MATCHTYPE_MGT                 {$$ = TrCreateLeafNode (PARSEOP_MATCHTYPE_MGT);}
179     ;
180 
181 MaxKeyword
182     : PARSEOP_MAXTYPE_FIXED                 {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_FIXED);}
183     | PARSEOP_MAXTYPE_NOTFIXED              {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_NOTFIXED);}
184     ;
185 
186 MemTypeKeyword
187     : PARSEOP_MEMTYPE_CACHEABLE             {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_CACHEABLE);}
188     | PARSEOP_MEMTYPE_WRITECOMBINING        {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_WRITECOMBINING);}
189     | PARSEOP_MEMTYPE_PREFETCHABLE          {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_PREFETCHABLE);}
190     | PARSEOP_MEMTYPE_NONCACHEABLE          {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_NONCACHEABLE);}
191     ;
192 
193 MinKeyword
194     : PARSEOP_MINTYPE_FIXED                 {$$ = TrCreateLeafNode (PARSEOP_MINTYPE_FIXED);}
195     | PARSEOP_MINTYPE_NOTFIXED              {$$ = TrCreateLeafNode (PARSEOP_MINTYPE_NOTFIXED);}
196     ;
197 
198 ObjectTypeKeyword
199     : PARSEOP_OBJECTTYPE_UNK                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_UNK);}
200     | PARSEOP_OBJECTTYPE_INT                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_INT);}
201     | PARSEOP_OBJECTTYPE_STR                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_STR);}
202     | PARSEOP_OBJECTTYPE_BUF                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_BUF);}
203     | PARSEOP_OBJECTTYPE_PKG                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_PKG);}
204     | PARSEOP_OBJECTTYPE_FLD                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_FLD);}
205     | PARSEOP_OBJECTTYPE_DEV                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_DEV);}
206     | PARSEOP_OBJECTTYPE_EVT                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_EVT);}
207     | PARSEOP_OBJECTTYPE_MTH                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_MTH);}
208     | PARSEOP_OBJECTTYPE_MTX                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_MTX);}
209     | PARSEOP_OBJECTTYPE_OPR                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_OPR);}
210     | PARSEOP_OBJECTTYPE_POW                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_POW);}
211     | PARSEOP_OBJECTTYPE_PRO                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_PRO);}
212     | PARSEOP_OBJECTTYPE_THZ                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_THZ);}
213     | PARSEOP_OBJECTTYPE_BFF                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_BFF);}
214     | PARSEOP_OBJECTTYPE_DDB                {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_DDB);}
215     ;
216 
217 ParityTypeKeyword
218     : PARSEOP_PARITYTYPE_SPACE              {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_SPACE);}
219     | PARSEOP_PARITYTYPE_MARK               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_MARK);}
220     | PARSEOP_PARITYTYPE_ODD                {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_ODD);}
221     | PARSEOP_PARITYTYPE_EVEN               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_EVEN);}
222     | PARSEOP_PARITYTYPE_NONE               {$$ = TrCreateLeafNode (PARSEOP_PARITYTYPE_NONE);}
223     ;
224 
225 PinConfigByte
226     : PinConfigKeyword                      {$$ = $1;}
227     | ByteConstExpr                         {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
228     ;
229 
230 PinConfigKeyword
231     : PARSEOP_PIN_NOPULL                    {$$ = TrCreateLeafNode (PARSEOP_PIN_NOPULL);}
232     | PARSEOP_PIN_PULLDOWN                  {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLDOWN);}
233     | PARSEOP_PIN_PULLUP                    {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLUP);}
234     | PARSEOP_PIN_PULLDEFAULT               {$$ = TrCreateLeafNode (PARSEOP_PIN_PULLDEFAULT);}
235     ;
236 
237 PldKeyword
238     : PARSEOP_PLD_REVISION                  {$$ = TrCreateLeafNode (PARSEOP_PLD_REVISION);}
239     | PARSEOP_PLD_IGNORECOLOR               {$$ = TrCreateLeafNode (PARSEOP_PLD_IGNORECOLOR);}
240     | PARSEOP_PLD_RED                       {$$ = TrCreateLeafNode (PARSEOP_PLD_RED);}
241     | PARSEOP_PLD_GREEN                     {$$ = TrCreateLeafNode (PARSEOP_PLD_GREEN);}
242     | PARSEOP_PLD_BLUE                      {$$ = TrCreateLeafNode (PARSEOP_PLD_BLUE);}
243     | PARSEOP_PLD_WIDTH                     {$$ = TrCreateLeafNode (PARSEOP_PLD_WIDTH);}
244     | PARSEOP_PLD_HEIGHT                    {$$ = TrCreateLeafNode (PARSEOP_PLD_HEIGHT);}
245     | PARSEOP_PLD_USERVISIBLE               {$$ = TrCreateLeafNode (PARSEOP_PLD_USERVISIBLE);}
246     | PARSEOP_PLD_DOCK                      {$$ = TrCreateLeafNode (PARSEOP_PLD_DOCK);}
247     | PARSEOP_PLD_LID                       {$$ = TrCreateLeafNode (PARSEOP_PLD_LID);}
248     | PARSEOP_PLD_PANEL                     {$$ = TrCreateLeafNode (PARSEOP_PLD_PANEL);}
249     | PARSEOP_PLD_VERTICALPOSITION          {$$ = TrCreateLeafNode (PARSEOP_PLD_VERTICALPOSITION);}
250     | PARSEOP_PLD_HORIZONTALPOSITION        {$$ = TrCreateLeafNode (PARSEOP_PLD_HORIZONTALPOSITION);}
251     | PARSEOP_PLD_SHAPE                     {$$ = TrCreateLeafNode (PARSEOP_PLD_SHAPE);}
252     | PARSEOP_PLD_GROUPORIENTATION          {$$ = TrCreateLeafNode (PARSEOP_PLD_GROUPORIENTATION);}
253     | PARSEOP_PLD_GROUPTOKEN                {$$ = TrCreateLeafNode (PARSEOP_PLD_GROUPTOKEN);}
254     | PARSEOP_PLD_GROUPPOSITION             {$$ = TrCreateLeafNode (PARSEOP_PLD_GROUPPOSITION);}
255     | PARSEOP_PLD_BAY                       {$$ = TrCreateLeafNode (PARSEOP_PLD_BAY);}
256     | PARSEOP_PLD_EJECTABLE                 {$$ = TrCreateLeafNode (PARSEOP_PLD_EJECTABLE);}
257     | PARSEOP_PLD_EJECTREQUIRED             {$$ = TrCreateLeafNode (PARSEOP_PLD_EJECTREQUIRED);}
258     | PARSEOP_PLD_CABINETNUMBER             {$$ = TrCreateLeafNode (PARSEOP_PLD_CABINETNUMBER);}
259     | PARSEOP_PLD_CARDCAGENUMBER            {$$ = TrCreateLeafNode (PARSEOP_PLD_CARDCAGENUMBER);}
260     | PARSEOP_PLD_REFERENCE                 {$$ = TrCreateLeafNode (PARSEOP_PLD_REFERENCE);}
261     | PARSEOP_PLD_ROTATION                  {$$ = TrCreateLeafNode (PARSEOP_PLD_ROTATION);}
262     | PARSEOP_PLD_ORDER                     {$$ = TrCreateLeafNode (PARSEOP_PLD_ORDER);}
263     | PARSEOP_PLD_RESERVED                  {$$ = TrCreateLeafNode (PARSEOP_PLD_RESERVED);}
264     | PARSEOP_PLD_VERTICALOFFSET            {$$ = TrCreateLeafNode (PARSEOP_PLD_VERTICALOFFSET);}
265     | PARSEOP_PLD_HORIZONTALOFFSET          {$$ = TrCreateLeafNode (PARSEOP_PLD_HORIZONTALOFFSET);}
266     ;
267 
268 RangeTypeKeyword
269     : PARSEOP_RANGETYPE_ISAONLY             {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_ISAONLY);}
270     | PARSEOP_RANGETYPE_NONISAONLY          {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_NONISAONLY);}
271     | PARSEOP_RANGETYPE_ENTIRE              {$$ = TrCreateLeafNode (PARSEOP_RANGETYPE_ENTIRE);}
272     ;
273 
274 RegionSpaceKeyword
275     : PARSEOP_REGIONSPACE_IO                {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IO);}
276     | PARSEOP_REGIONSPACE_MEM               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_MEM);}
277     | PARSEOP_REGIONSPACE_PCI               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCI);}
278     | PARSEOP_REGIONSPACE_EC                {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_EC);}
279     | PARSEOP_REGIONSPACE_SMBUS             {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_SMBUS);}
280     | PARSEOP_REGIONSPACE_CMOS              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_CMOS);}
281     | PARSEOP_REGIONSPACE_PCIBAR            {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCIBAR);}
282     | PARSEOP_REGIONSPACE_IPMI              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IPMI);}
283     | PARSEOP_REGIONSPACE_GPIO              {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_GPIO);}
284     | PARSEOP_REGIONSPACE_GSBUS             {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_GSBUS);}
285     | PARSEOP_REGIONSPACE_PCC               {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCC);}
286     | PARSEOP_REGIONSPACE_FFIXEDHW          {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_FFIXEDHW);}
287     ;
288 
289 ResourceTypeKeyword
290     : PARSEOP_RESOURCETYPE_CONSUMER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
291     | PARSEOP_RESOURCETYPE_PRODUCER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_PRODUCER);}
292     ;
293 
294 SerializeRuleKeyword
295     : PARSEOP_SERIALIZERULE_SERIAL          {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_SERIAL);}
296     | PARSEOP_SERIALIZERULE_NOTSERIAL       {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL);}
297     ;
298 
299 ShareTypeKeyword
300     : PARSEOP_SHARETYPE_SHARED              {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_SHARED);}
301     | PARSEOP_SHARETYPE_EXCLUSIVE           {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_EXCLUSIVE);}
302     | PARSEOP_SHARETYPE_SHAREDWAKE          {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_SHAREDWAKE);}
303     | PARSEOP_SHARETYPE_EXCLUSIVEWAKE       {$$ = TrCreateLeafNode (PARSEOP_SHARETYPE_EXCLUSIVEWAKE);}
304    ;
305 
306 SlaveModeKeyword
307     : PARSEOP_SLAVEMODE_CONTROLLERINIT      {$$ = TrCreateLeafNode (PARSEOP_SLAVEMODE_CONTROLLERINIT);}
308     | PARSEOP_SLAVEMODE_DEVICEINIT          {$$ = TrCreateLeafNode (PARSEOP_SLAVEMODE_DEVICEINIT);}
309     ;
310 
311 StopBitsKeyword
312     : PARSEOP_STOPBITS_TWO                  {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_TWO);}
313     | PARSEOP_STOPBITS_ONEPLUSHALF          {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ONEPLUSHALF);}
314     | PARSEOP_STOPBITS_ONE                  {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ONE);}
315     | PARSEOP_STOPBITS_ZERO                 {$$ = TrCreateLeafNode (PARSEOP_STOPBITS_ZERO);}
316     ;
317 
318 TranslationKeyword
319     : PARSEOP_TRANSLATIONTYPE_SPARSE        {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_SPARSE);}
320     | PARSEOP_TRANSLATIONTYPE_DENSE         {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_DENSE);}
321     ;
322 
323 TypeKeyword
324     : PARSEOP_TYPE_TRANSLATION              {$$ = TrCreateLeafNode (PARSEOP_TYPE_TRANSLATION);}
325     | PARSEOP_TYPE_STATIC                   {$$ = TrCreateLeafNode (PARSEOP_TYPE_STATIC);}
326     ;
327 
328 UpdateRuleKeyword
329     : PARSEOP_UPDATERULE_PRESERVE           {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_PRESERVE);}
330     | PARSEOP_UPDATERULE_ONES               {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_ONES);}
331     | PARSEOP_UPDATERULE_ZEROS              {$$ = TrCreateLeafNode (PARSEOP_UPDATERULE_ZEROS);}
332     ;
333 
334 WireModeKeyword
335     : PARSEOP_WIREMODE_FOUR                 {$$ = TrCreateLeafNode (PARSEOP_WIREMODE_FOUR);}
336     | PARSEOP_WIREMODE_THREE                {$$ = TrCreateLeafNode (PARSEOP_WIREMODE_THREE);}
337     ;
338 
339 XferSizeKeyword
340     : PARSEOP_XFERSIZE_8                    {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_8,   0);}
341     | PARSEOP_XFERSIZE_16                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_16,  1);}
342     | PARSEOP_XFERSIZE_32                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32,  2);}
343     | PARSEOP_XFERSIZE_64                   {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_64,  3);}
344     | PARSEOP_XFERSIZE_128                  {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_128, 4);}
345     | PARSEOP_XFERSIZE_256                  {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_256, 5);}
346     ;
347 
348 XferTypeKeyword
349     : PARSEOP_XFERTYPE_8                    {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8);}
350     | PARSEOP_XFERTYPE_8_16                 {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8_16);}
351     | PARSEOP_XFERTYPE_16                   {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_16);}
352     ;
353 
354 
355 /*******************************************************************************
356  *
357  * ASL Resource Template Terms
358  *
359  ******************************************************************************/
360 
361 /*
362  * Note: Create two default nodes to allow conversion to a Buffer AML opcode
363  * Also, insert the EndTag at the end of the template.
364  */
365 ResourceTemplateTerm
366     : PARSEOP_RESOURCETEMPLATE '(' ')'
367         '{'
368         ResourceMacroList '}'       {$$ = TrCreateNode (PARSEOP_RESOURCETEMPLATE,4,
369                                           TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
370                                           TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
371                                           $5,
372                                           TrCreateLeafNode (PARSEOP_ENDTAG));}
373     ;
374 
375 ResourceMacroList
376     :                               {$$ = NULL;}
377     | ResourceMacroList
378         ResourceMacroTerm           {$$ = TrLinkPeerNode ($1,$2);}
379     ;
380 
381 ResourceMacroTerm
382     : DMATerm                       {}
383     | DWordIOTerm                   {}
384     | DWordMemoryTerm               {}
385     | DWordSpaceTerm                {}
386     | EndDependentFnTerm            {}
387     | ExtendedIOTerm                {}
388     | ExtendedMemoryTerm            {}
389     | ExtendedSpaceTerm             {}
390     | FixedDmaTerm                  {}
391     | FixedIOTerm                   {}
392     | GpioIntTerm                   {}
393     | GpioIoTerm                    {}
394     | I2cSerialBusTerm              {}
395     | InterruptTerm                 {}
396     | IOTerm                        {}
397     | IRQNoFlagsTerm                {}
398     | IRQTerm                       {}
399     | Memory24Term                  {}
400     | Memory32FixedTerm             {}
401     | Memory32Term                  {}
402     | QWordIOTerm                   {}
403     | QWordMemoryTerm               {}
404     | QWordSpaceTerm                {}
405     | RegisterTerm                  {}
406     | SpiSerialBusTerm              {}
407     | StartDependentFnNoPriTerm     {}
408     | StartDependentFnTerm          {}
409     | UartSerialBusTerm             {}
410     | VendorLongTerm                {}
411     | VendorShortTerm               {}
412     | WordBusNumberTerm             {}
413     | WordIOTerm                    {}
414     | WordSpaceTerm                 {}
415     ;
416 
417 DMATerm
418     : PARSEOP_DMA '('               {$<n>$ = TrCreateLeafNode (PARSEOP_DMA);}
419         DMATypeKeyword
420         OptionalBusMasterKeyword
421         ',' XferTypeKeyword
422         OptionalNameString_Last
423         ')' '{'
424             ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$5,$7,$8,$11);}
425     | PARSEOP_DMA '('
426         error ')'                   {$$ = AslDoError(); yyclearin;}
427     ;
428 
429 DWordIOTerm
430     : PARSEOP_DWORDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDIO);}
431         OptionalResourceType_First
432         OptionalMinType
433         OptionalMaxType
434         OptionalDecodeType
435         OptionalRangeType
436         ',' DWordConstExpr
437         ',' DWordConstExpr
438         ',' DWordConstExpr
439         ',' DWordConstExpr
440         ',' DWordConstExpr
441         OptionalByteConstExpr
442         OptionalStringData
443         OptionalNameString
444         OptionalType
445         OptionalTranslationType_Last
446         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
447     | PARSEOP_DWORDIO '('
448         error ')'                   {$$ = AslDoError(); yyclearin;}
449     ;
450 
451 DWordMemoryTerm
452     : PARSEOP_DWORDMEMORY '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDMEMORY);}
453         OptionalResourceType_First
454         OptionalDecodeType
455         OptionalMinType
456         OptionalMaxType
457         OptionalMemType
458         ',' OptionalReadWriteKeyword
459         ',' DWordConstExpr
460         ',' DWordConstExpr
461         ',' DWordConstExpr
462         ',' DWordConstExpr
463         ',' DWordConstExpr
464         OptionalByteConstExpr
465         OptionalStringData
466         OptionalNameString
467         OptionalAddressRange
468         OptionalType_Last
469         ')'                         {$$ = TrLinkChildren ($<n>3,16,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
470     | PARSEOP_DWORDMEMORY '('
471         error ')'                   {$$ = AslDoError(); yyclearin;}
472     ;
473 
474 DWordSpaceTerm
475     : PARSEOP_DWORDSPACE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDSPACE);}
476         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
477         OptionalResourceType
478         OptionalDecodeType
479         OptionalMinType
480         OptionalMaxType
481         ',' ByteConstExpr
482         ',' DWordConstExpr
483         ',' DWordConstExpr
484         ',' DWordConstExpr
485         ',' DWordConstExpr
486         ',' DWordConstExpr
487         OptionalByteConstExpr
488         OptionalStringData
489         OptionalNameString_Last
490         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
491     | PARSEOP_DWORDSPACE '('
492         error ')'                   {$$ = AslDoError(); yyclearin;}
493     ;
494 
495 EndDependentFnTerm
496     : PARSEOP_ENDDEPENDENTFN '('
497         ')'                         {$$ = TrCreateLeafNode (PARSEOP_ENDDEPENDENTFN);}
498     | PARSEOP_ENDDEPENDENTFN '('
499         error ')'                   {$$ = AslDoError(); yyclearin;}
500     ;
501 
502 ExtendedIOTerm
503     : PARSEOP_EXTENDEDIO '('        {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDIO);}
504         OptionalResourceType_First
505         OptionalMinType
506         OptionalMaxType
507         OptionalDecodeType
508         OptionalRangeType
509         ',' QWordConstExpr
510         ',' QWordConstExpr
511         ',' QWordConstExpr
512         ',' QWordConstExpr
513         ',' QWordConstExpr
514         OptionalQWordConstExpr
515         OptionalNameString
516         OptionalType
517         OptionalTranslationType_Last
518         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22);}
519     | PARSEOP_EXTENDEDIO '('
520         error ')'                   {$$ = AslDoError(); yyclearin;}
521     ;
522 
523 ExtendedMemoryTerm
524     : PARSEOP_EXTENDEDMEMORY '('    {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDMEMORY);}
525         OptionalResourceType_First
526         OptionalDecodeType
527         OptionalMinType
528         OptionalMaxType
529         OptionalMemType
530         ',' OptionalReadWriteKeyword
531         ',' QWordConstExpr
532         ',' QWordConstExpr
533         ',' QWordConstExpr
534         ',' QWordConstExpr
535         ',' QWordConstExpr
536         OptionalQWordConstExpr
537         OptionalNameString
538         OptionalAddressRange
539         OptionalType_Last
540         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24);}
541     | PARSEOP_EXTENDEDMEMORY '('
542         error ')'                   {$$ = AslDoError(); yyclearin;}
543     ;
544 
545 ExtendedSpaceTerm
546     : PARSEOP_EXTENDEDSPACE '('     {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDSPACE);}
547         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
548         OptionalResourceType
549         OptionalDecodeType
550         OptionalMinType
551         OptionalMaxType
552         ',' ByteConstExpr
553         ',' QWordConstExpr
554         ',' QWordConstExpr
555         ',' QWordConstExpr
556         ',' QWordConstExpr
557         ',' QWordConstExpr
558         OptionalQWordConstExpr
559         OptionalNameString_Last
560         ')'                         {$$ = TrLinkChildren ($<n>3,13,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23);}
561     | PARSEOP_EXTENDEDSPACE '('
562         error ')'                   {$$ = AslDoError(); yyclearin;}
563     ;
564 
565 FixedDmaTerm
566     : PARSEOP_FIXEDDMA '('          {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDDMA);}
567         WordConstExpr               /* 04: DMA RequestLines */
568         ',' WordConstExpr           /* 06: DMA Channels */
569         OptionalXferSize            /* 07: DMA TransferSize */
570         OptionalNameString          /* 08: DescriptorName */
571         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$7,$8);}
572     | PARSEOP_FIXEDDMA '('
573         error ')'                   {$$ = AslDoError(); yyclearin;}
574     ;
575 
576 FixedIOTerm
577     : PARSEOP_FIXEDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDIO);}
578         WordConstExpr
579         ',' ByteConstExpr
580         OptionalNameString_Last
581         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
582     | PARSEOP_FIXEDIO '('
583         error ')'                   {$$ = AslDoError(); yyclearin;}
584     ;
585 
586 GpioIntTerm
587     : PARSEOP_GPIO_INT '('          {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_INT);}
588         InterruptTypeKeyword        /* 04: InterruptType */
589         ',' InterruptLevel          /* 06: InterruptLevel */
590         OptionalShareType           /* 07: SharedType */
591         ',' PinConfigByte           /* 09: PinConfig */
592         OptionalWordConstExpr       /* 10: DebounceTimeout */
593         ',' StringData              /* 12: ResourceSource */
594         OptionalByteConstExpr       /* 13: ResourceSourceIndex */
595         OptionalResourceType        /* 14: ResourceType */
596         OptionalNameString          /* 15: DescriptorName */
597         OptionalBuffer_Last         /* 16: VendorData */
598         ')' '{'
599             DWordConstExpr '}'      {$$ = TrLinkChildren ($<n>3,11,$4,$6,$7,$9,$10,$12,$13,$14,$15,$16,$19);}
600     | PARSEOP_GPIO_INT '('
601         error ')'                   {$$ = AslDoError(); yyclearin;}
602     ;
603 
604 GpioIoTerm
605     : PARSEOP_GPIO_IO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_IO);}
606         OptionalShareType_First     /* 04: SharedType */
607         ',' PinConfigByte           /* 06: PinConfig */
608         OptionalWordConstExpr       /* 07: DebounceTimeout */
609         OptionalWordConstExpr       /* 08: DriveStrength */
610         OptionalIoRestriction       /* 09: IoRestriction */
611         ',' StringData              /* 11: ResourceSource */
612         OptionalByteConstExpr       /* 12: ResourceSourceIndex */
613         OptionalResourceType        /* 13: ResourceType */
614         OptionalNameString          /* 14: DescriptorName */
615         OptionalBuffer_Last         /* 15: VendorData */
616         ')' '{'
617             DWordList '}'           {$$ = TrLinkChildren ($<n>3,11,$4,$6,$7,$8,$9,$11,$12,$13,$14,$15,$18);}
618     | PARSEOP_GPIO_IO '('
619         error ')'                   {$$ = AslDoError(); yyclearin;}
620     ;
621 
622 I2cSerialBusTerm
623     : PARSEOP_I2C_SERIALBUS '('     {$<n>$ = TrCreateLeafNode (PARSEOP_I2C_SERIALBUS);}
624         WordConstExpr               /* 04: SlaveAddress */
625         OptionalSlaveMode           /* 05: SlaveMode */
626         ',' DWordConstExpr          /* 07: ConnectionSpeed */
627         OptionalAddressingMode      /* 08: AddressingMode */
628         ',' StringData              /* 10: ResourceSource */
629         OptionalByteConstExpr       /* 11: ResourceSourceIndex */
630         OptionalResourceType        /* 12: ResourceType */
631         OptionalNameString          /* 13: DescriptorName */
632         OptionalBuffer_Last         /* 14: VendorData */
633         ')'                         {$$ = TrLinkChildren ($<n>3,9,$4,$5,$7,$8,$10,$11,$12,$13,$14);}
634     | PARSEOP_I2C_SERIALBUS '('
635         error ')'                   {$$ = AslDoError(); yyclearin;}
636     ;
637 
638 InterruptTerm
639     : PARSEOP_INTERRUPT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_INTERRUPT);}
640         OptionalResourceType_First
641         ',' InterruptTypeKeyword
642         ',' InterruptLevel
643         OptionalShareType
644         OptionalByteConstExpr
645         OptionalStringData
646         OptionalNameString_Last
647         ')' '{'
648             DWordList '}'           {$$ = TrLinkChildren ($<n>3,8,$4,$6,$8,$9,$10,$11,$12,$15);}
649     | PARSEOP_INTERRUPT '('
650         error ')'                   {$$ = AslDoError(); yyclearin;}
651     ;
652 
653 IOTerm
654     : PARSEOP_IO '('                {$<n>$ = TrCreateLeafNode (PARSEOP_IO);}
655         IODecodeKeyword
656         ',' WordConstExpr
657         ',' WordConstExpr
658         ',' ByteConstExpr
659         ',' ByteConstExpr
660         OptionalNameString_Last
661         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
662     | PARSEOP_IO '('
663         error ')'                   {$$ = AslDoError(); yyclearin;}
664     ;
665 
666 IRQNoFlagsTerm
667     : PARSEOP_IRQNOFLAGS '('        {$<n>$ = TrCreateLeafNode (PARSEOP_IRQNOFLAGS);}
668         OptionalNameString_First
669         ')' '{'
670             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
671     | PARSEOP_IRQNOFLAGS '('
672         error ')'                   {$$ = AslDoError(); yyclearin;}
673     ;
674 
675 IRQTerm
676     : PARSEOP_IRQ '('               {$<n>$ = TrCreateLeafNode (PARSEOP_IRQ);}
677         InterruptTypeKeyword
678         ',' InterruptLevel
679         OptionalShareType
680         OptionalNameString_Last
681         ')' '{'
682             ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$6,$7,$8,$11);}
683     | PARSEOP_IRQ '('
684         error ')'                   {$$ = AslDoError(); yyclearin;}
685     ;
686 
687 Memory24Term
688     : PARSEOP_MEMORY24 '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY24);}
689         OptionalReadWriteKeyword
690         ',' WordConstExpr
691         ',' WordConstExpr
692         ',' WordConstExpr
693         ',' WordConstExpr
694         OptionalNameString_Last
695         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
696     | PARSEOP_MEMORY24 '('
697         error ')'                   {$$ = AslDoError(); yyclearin;}
698     ;
699 
700 Memory32FixedTerm
701     : PARSEOP_MEMORY32FIXED '('     {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32FIXED);}
702         OptionalReadWriteKeyword
703         ',' DWordConstExpr
704         ',' DWordConstExpr
705         OptionalNameString_Last
706         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$8,$9);}
707     | PARSEOP_MEMORY32FIXED '('
708         error ')'                   {$$ = AslDoError(); yyclearin;}
709     ;
710 
711 Memory32Term
712     : PARSEOP_MEMORY32 '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32);}
713         OptionalReadWriteKeyword
714         ',' DWordConstExpr
715         ',' DWordConstExpr
716         ',' DWordConstExpr
717         ',' DWordConstExpr
718         OptionalNameString_Last
719         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
720     | PARSEOP_MEMORY32 '('
721         error ')'                   {$$ = AslDoError(); yyclearin;}
722     ;
723 
724 QWordIOTerm
725     : PARSEOP_QWORDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDIO);}
726         OptionalResourceType_First
727         OptionalMinType
728         OptionalMaxType
729         OptionalDecodeType
730         OptionalRangeType
731         ',' QWordConstExpr
732         ',' QWordConstExpr
733         ',' QWordConstExpr
734         ',' QWordConstExpr
735         ',' QWordConstExpr
736         OptionalByteConstExpr
737         OptionalStringData
738         OptionalNameString
739         OptionalType
740         OptionalTranslationType_Last
741         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
742     | PARSEOP_QWORDIO '('
743         error ')'                   {$$ = AslDoError(); yyclearin;}
744     ;
745 
746 QWordMemoryTerm
747     : PARSEOP_QWORDMEMORY '('       {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDMEMORY);}
748         OptionalResourceType_First
749         OptionalDecodeType
750         OptionalMinType
751         OptionalMaxType
752         OptionalMemType
753         ',' OptionalReadWriteKeyword
754         ',' QWordConstExpr
755         ',' QWordConstExpr
756         ',' QWordConstExpr
757         ',' QWordConstExpr
758         ',' QWordConstExpr
759         OptionalByteConstExpr
760         OptionalStringData
761         OptionalNameString
762         OptionalAddressRange
763         OptionalType_Last
764         ')'                         {$$ = TrLinkChildren ($<n>3,16,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
765     | PARSEOP_QWORDMEMORY '('
766         error ')'                   {$$ = AslDoError(); yyclearin;}
767     ;
768 
769 QWordSpaceTerm
770     : PARSEOP_QWORDSPACE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDSPACE);}
771         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
772         OptionalResourceType
773         OptionalDecodeType
774         OptionalMinType
775         OptionalMaxType
776         ',' ByteConstExpr
777         ',' QWordConstExpr
778         ',' QWordConstExpr
779         ',' QWordConstExpr
780         ',' QWordConstExpr
781         ',' QWordConstExpr
782         OptionalByteConstExpr
783         OptionalStringData
784         OptionalNameString_Last
785         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
786     | PARSEOP_QWORDSPACE '('
787         error ')'                   {$$ = AslDoError(); yyclearin;}
788     ;
789 
790 RegisterTerm
791     : PARSEOP_REGISTER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_REGISTER);}
792         AddressSpaceKeyword
793         ',' ByteConstExpr
794         ',' ByteConstExpr
795         ',' QWordConstExpr
796         OptionalAccessSize
797         OptionalNameString_Last
798         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$11,$12);}
799     | PARSEOP_REGISTER '('
800         error ')'                   {$$ = AslDoError(); yyclearin;}
801     ;
802 
803 SpiSerialBusTerm
804     : PARSEOP_SPI_SERIALBUS '('     {$<n>$ = TrCreateLeafNode (PARSEOP_SPI_SERIALBUS);}
805         WordConstExpr               /* 04: DeviceSelection */
806         OptionalDevicePolarity      /* 05: DevicePolarity */
807         OptionalWireMode            /* 06: WireMode */
808         ',' ByteConstExpr           /* 08: DataBitLength */
809         OptionalSlaveMode           /* 09: SlaveMode */
810         ',' DWordConstExpr          /* 11: ConnectionSpeed */
811         ',' ClockPolarityKeyword    /* 13: ClockPolarity */
812         ',' ClockPhaseKeyword       /* 15: ClockPhase */
813         ',' StringData              /* 17: ResourceSource */
814         OptionalByteConstExpr       /* 18: ResourceSourceIndex */
815         OptionalResourceType        /* 19: ResourceType */
816         OptionalNameString          /* 20: DescriptorName */
817         OptionalBuffer_Last         /* 21: VendorData */
818         ')'                         {$$ = TrLinkChildren ($<n>3,13,$4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20,$21);}
819     | PARSEOP_SPI_SERIALBUS '('
820         error ')'                   {$$ = AslDoError(); yyclearin;}
821     ;
822 
823 StartDependentFnNoPriTerm
824     : PARSEOP_STARTDEPENDENTFN_NOPRI '('    {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN_NOPRI);}
825         ')' '{'
826         ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,1,$6);}
827     | PARSEOP_STARTDEPENDENTFN_NOPRI '('
828         error ')'                   {$$ = AslDoError(); yyclearin;}
829     ;
830 
831 StartDependentFnTerm
832     : PARSEOP_STARTDEPENDENTFN '('  {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN);}
833         ByteConstExpr
834         ',' ByteConstExpr
835         ')' '{'
836         ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,3,$4,$6,$9);}
837     | PARSEOP_STARTDEPENDENTFN '('
838         error ')'                   {$$ = AslDoError(); yyclearin;}
839     ;
840 
841 UartSerialBusTerm
842     : PARSEOP_UART_SERIALBUS '('    {$<n>$ = TrCreateLeafNode (PARSEOP_UART_SERIALBUS);}
843         DWordConstExpr              /* 04: ConnectionSpeed */
844         OptionalBitsPerByte         /* 05: BitsPerByte */
845         OptionalStopBits            /* 06: StopBits */
846         ',' ByteConstExpr           /* 08: LinesInUse */
847         OptionalEndian              /* 09: Endianess */
848         OptionalParityType          /* 10: Parity */
849         OptionalFlowControl         /* 11: FlowControl */
850         ',' WordConstExpr           /* 13: Rx BufferSize */
851         ',' WordConstExpr           /* 15: Tx BufferSize */
852         ',' StringData              /* 17: ResourceSource */
853         OptionalByteConstExpr       /* 18: ResourceSourceIndex */
854         OptionalResourceType        /* 19: ResourceType */
855         OptionalNameString          /* 20: DescriptorName */
856         OptionalBuffer_Last         /* 21: VendorData */
857         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20,$21);}
858     | PARSEOP_UART_SERIALBUS '('
859         error ')'                   {$$ = AslDoError(); yyclearin;}
860     ;
861 
862 VendorLongTerm
863     : PARSEOP_VENDORLONG '('        {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORLONG);}
864         OptionalNameString_First
865         ')' '{'
866             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
867     | PARSEOP_VENDORLONG '('
868         error ')'                   {$$ = AslDoError(); yyclearin;}
869     ;
870 
871 VendorShortTerm
872     : PARSEOP_VENDORSHORT '('       {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORSHORT);}
873         OptionalNameString_First
874         ')' '{'
875             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
876     | PARSEOP_VENDORSHORT '('
877         error ')'                   {$$ = AslDoError(); yyclearin;}
878     ;
879 
880 WordBusNumberTerm
881     : PARSEOP_WORDBUSNUMBER '('     {$<n>$ = TrCreateLeafNode (PARSEOP_WORDBUSNUMBER);}
882         OptionalResourceType_First
883         OptionalMinType
884         OptionalMaxType
885         OptionalDecodeType
886         ',' WordConstExpr
887         ',' WordConstExpr
888         ',' WordConstExpr
889         ',' WordConstExpr
890         ',' WordConstExpr
891         OptionalByteConstExpr
892         OptionalStringData
893         OptionalNameString_Last
894         ')'                         {$$ = TrLinkChildren ($<n>3,12,$4,$5,$6,$7,$9,$11,$13,$15,$17,$18,$19,$20);}
895     | PARSEOP_WORDBUSNUMBER '('
896         error ')'                   {$$ = AslDoError(); yyclearin;}
897     ;
898 
899 WordIOTerm
900     : PARSEOP_WORDIO '('            {$<n>$ = TrCreateLeafNode (PARSEOP_WORDIO);}
901         OptionalResourceType_First
902         OptionalMinType
903         OptionalMaxType
904         OptionalDecodeType
905         OptionalRangeType
906         ',' WordConstExpr
907         ',' WordConstExpr
908         ',' WordConstExpr
909         ',' WordConstExpr
910         ',' WordConstExpr
911         OptionalByteConstExpr
912         OptionalStringData
913         OptionalNameString
914         OptionalType
915         OptionalTranslationType_Last
916         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
917     | PARSEOP_WORDIO '('
918         error ')'                   {$$ = AslDoError(); yyclearin;}
919     ;
920 
921 WordSpaceTerm
922     : PARSEOP_WORDSPACE '('         {$<n>$ = TrCreateLeafNode (PARSEOP_WORDSPACE);}
923         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
924         OptionalResourceType
925         OptionalDecodeType
926         OptionalMinType
927         OptionalMaxType
928         ',' ByteConstExpr
929         ',' WordConstExpr
930         ',' WordConstExpr
931         ',' WordConstExpr
932         ',' WordConstExpr
933         ',' WordConstExpr
934         OptionalByteConstExpr
935         OptionalStringData
936         OptionalNameString_Last
937         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
938     | PARSEOP_WORDSPACE '('
939         error ')'                   {$$ = AslDoError(); yyclearin;}
940     ;
941 
942 
943 /******* Object References ***********************************************/
944 
945 /* Allow IO, DMA, IRQ Resource macro names to also be used as identifiers */
946 
947 NameString
948     : NameSeg                       {}
949     | PARSEOP_NAMESTRING            {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) AslCompilerlval.s);}
950     | PARSEOP_IO                    {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IO");}
951     | PARSEOP_DMA                   {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "DMA");}
952     | PARSEOP_IRQ                   {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IRQ");}
953     ;
954 
955 NameSeg
956     : PARSEOP_NAMESEG               {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESEG, (ACPI_NATIVE_INT) AslCompilerlval.s);}
957     ;
958 
959 
960 /*******************************************************************************
961  *
962  * ASL Helper Terms
963  *
964  ******************************************************************************/
965 
966 OptionalBusMasterKeyword
967     : ','                                       {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
968     | ',' PARSEOP_BUSMASTERTYPE_MASTER          {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
969     | ',' PARSEOP_BUSMASTERTYPE_NOTMASTER       {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_NOTMASTER);}
970     ;
971 
972 OptionalAccessAttribTerm
973     :                               {$$ = NULL;}
974     | ','                           {$$ = NULL;}
975     | ',' ByteConstExpr             {$$ = $2;}
976     | ',' AccessAttribKeyword       {$$ = $2;}
977     ;
978 
979 OptionalAccessSize
980     :                               {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
981     | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
982     | ',' ByteConstExpr             {$$ = $2;}
983     ;
984 
985 OptionalAddressingMode
986     : ','                           {$$ = NULL;}
987     | ',' AddressingModeKeyword     {$$ = $2;}
988     ;
989 
990 OptionalAddressRange
991     :                               {$$ = NULL;}
992     | ','                           {$$ = NULL;}
993     | ',' AddressKeyword            {$$ = $2;}
994     ;
995 
996 OptionalBitsPerByte
997     : ','                           {$$ = NULL;}
998     | ',' BitsPerByteKeyword        {$$ = $2;}
999     ;
1000 
1001 OptionalBuffer_Last
1002     :                               {$$ = NULL;}
1003     | ','                           {$$ = NULL;}
1004     | ',' RawDataBufferTerm         {$$ = $2;}
1005     ;
1006 
1007 OptionalByteConstExpr
1008     :                               {$$ = NULL;}
1009     | ','                           {$$ = NULL;}
1010     | ',' ByteConstExpr             {$$ = $2;}
1011     ;
1012 
1013 OptionalDecodeType
1014     : ','                           {$$ = NULL;}
1015     | ',' DecodeKeyword             {$$ = $2;}
1016     ;
1017 
1018 OptionalDevicePolarity
1019     : ','                           {$$ = NULL;}
1020     | ',' DevicePolarityKeyword     {$$ = $2;}
1021     ;
1022 
1023 OptionalDWordConstExpr
1024     :                               {$$ = NULL;}
1025     | ','                           {$$ = NULL;}
1026     | ',' DWordConstExpr            {$$ = $2;}
1027     ;
1028 
1029 OptionalEndian
1030     : ','                           {$$ = NULL;}
1031     | ',' EndianKeyword             {$$ = $2;}
1032     ;
1033 
1034 OptionalFlowControl
1035     : ','                           {$$ = NULL;}
1036     | ',' FlowControlKeyword        {$$ = $2;}
1037     ;
1038 
1039 OptionalIoRestriction
1040     : ','                           {$$ = NULL;}
1041     | ',' IoRestrictionKeyword      {$$ = $2;}
1042     ;
1043 
1044 OptionalListString
1045     :                               {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));}   /* Placeholder is a NULL string */
1046     | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));}   /* Placeholder is a NULL string */
1047     | ',' TermArg                   {$$ = $2;}
1048     ;
1049 
1050 OptionalMaxType
1051     : ','                           {$$ = NULL;}
1052     | ',' MaxKeyword                {$$ = $2;}
1053     ;
1054 
1055 OptionalMemType
1056     : ','                           {$$ = NULL;}
1057     | ',' MemTypeKeyword            {$$ = $2;}
1058     ;
1059 
1060 OptionalMinType
1061     : ','                           {$$ = NULL;}
1062     | ',' MinKeyword                {$$ = $2;}
1063     ;
1064 
1065 OptionalNameString
1066     :                               {$$ = NULL;}
1067     | ','                           {$$ = NULL;}
1068     | ',' NameString                {$$ = $2;}
1069     ;
1070 
1071 OptionalNameString_Last
1072     :                               {$$ = NULL;}
1073     | ','                           {$$ = NULL;}
1074     | ',' NameString                {$$ = $2;}
1075     ;
1076 
1077 OptionalNameString_First
1078     :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}
1079     | NameString                    {$$ = $1;}
1080     ;
1081 
1082 OptionalObjectTypeKeyword
1083     :                               {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_UNK);}
1084     | ',' ObjectTypeKeyword         {$$ = $2;}
1085     ;
1086 
1087 OptionalParityType
1088     : ','                           {$$ = NULL;}
1089     | ',' ParityTypeKeyword         {$$ = $2;}
1090     ;
1091 
1092 OptionalQWordConstExpr
1093     :                               {$$ = NULL;}
1094     | ','                           {$$ = NULL;}
1095     | ',' QWordConstExpr            {$$ = $2;}
1096     ;
1097 
1098 OptionalRangeType
1099     : ','                           {$$ = NULL;}
1100     | ',' RangeTypeKeyword          {$$ = $2;}
1101     ;
1102 
1103 OptionalReadWriteKeyword
1104     :                                   {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
1105     | PARSEOP_READWRITETYPE_BOTH        {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
1106     | PARSEOP_READWRITETYPE_READONLY    {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_READONLY);}
1107     ;
1108 
1109 OptionalResourceType_First
1110     :                               {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
1111     | ResourceTypeKeyword           {$$ = $1;}
1112     ;
1113 
1114 OptionalResourceType
1115     :                               {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
1116     | ','                           {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
1117     | ',' ResourceTypeKeyword       {$$ = $2;}
1118     ;
1119 
1120 OptionalSlaveMode
1121     : ','                           {$$ = NULL;}
1122     | ',' SlaveModeKeyword          {$$ = $2;}
1123     ;
1124 
1125 OptionalShareType
1126     :                               {$$ = NULL;}
1127     | ','                           {$$ = NULL;}
1128     | ',' ShareTypeKeyword          {$$ = $2;}
1129     ;
1130 
1131 OptionalShareType_First
1132     :                               {$$ = NULL;}
1133     | ShareTypeKeyword              {$$ = $1;}
1134     ;
1135 
1136 OptionalStopBits
1137     : ','                           {$$ = NULL;}
1138     | ',' StopBitsKeyword           {$$ = $2;}
1139     ;
1140 
1141 OptionalStringData
1142     :                               {$$ = NULL;}
1143     | ','                           {$$ = NULL;}
1144     | ',' StringData                {$$ = $2;}
1145     ;
1146 
1147 OptionalTranslationType_Last
1148     :                               {$$ = NULL;}
1149     | ','                           {$$ = NULL;}
1150     | ',' TranslationKeyword        {$$ = $2;}
1151     ;
1152 
1153 OptionalType
1154     :                               {$$ = NULL;}
1155     | ','                           {$$ = NULL;}
1156     | ',' TypeKeyword               {$$ = $2;}
1157     ;
1158 
1159 OptionalType_Last
1160     :                               {$$ = NULL;}
1161     | ','                           {$$ = NULL;}
1162     | ',' TypeKeyword               {$$ = $2;}
1163     ;
1164 
1165 OptionalWireMode
1166     : ','                           {$$ = NULL;}
1167     | ',' WireModeKeyword           {$$ = $2;}
1168     ;
1169 
1170 OptionalWordConstExpr
1171     : ','                           {$$ = NULL;}
1172     | ',' WordConstExpr             {$$ = $2;}
1173     ;
1174 
1175 OptionalXferSize
1176     :                               {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32, 2);}
1177     | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32, 2);}
1178     | ',' XferSizeKeyword           {$$ = $2;}
1179     ;
1180