]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - sys/contrib/dev/acpica/compiler/aslresources.y
MFC: r284583, r285797, r285799, r287168, r298714, r298720, r298838,
[FreeBSD/stable/10.git] / sys / contrib / dev / acpica / compiler / aslresources.y
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  * 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     | I2cSerialBusTermV2            {}
396     | InterruptTerm                 {}
397     | IOTerm                        {}
398     | IRQNoFlagsTerm                {}
399     | IRQTerm                       {}
400     | Memory24Term                  {}
401     | Memory32FixedTerm             {}
402     | Memory32Term                  {}
403     | QWordIOTerm                   {}
404     | QWordMemoryTerm               {}
405     | QWordSpaceTerm                {}
406     | RegisterTerm                  {}
407     | SpiSerialBusTerm              {}
408     | SpiSerialBusTermV2            {}
409     | StartDependentFnNoPriTerm     {}
410     | StartDependentFnTerm          {}
411     | UartSerialBusTerm             {}
412     | UartSerialBusTermV2           {}
413     | VendorLongTerm                {}
414     | VendorShortTerm               {}
415     | WordBusNumberTerm             {}
416     | WordIOTerm                    {}
417     | WordSpaceTerm                 {}
418     ;
419
420 DMATerm
421     : PARSEOP_DMA '('               {$<n>$ = TrCreateLeafNode (PARSEOP_DMA);}
422         DMATypeKeyword
423         OptionalBusMasterKeyword
424         ',' XferTypeKeyword
425         OptionalNameString_Last
426         ')' '{'
427             ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$5,$7,$8,$11);}
428     | PARSEOP_DMA '('
429         error ')'                   {$$ = AslDoError(); yyclearin;}
430     ;
431
432 DWordIOTerm
433     : PARSEOP_DWORDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDIO);}
434         OptionalResourceType_First
435         OptionalMinType
436         OptionalMaxType
437         OptionalDecodeType
438         OptionalRangeType
439         ',' DWordConstExpr
440         ',' DWordConstExpr
441         ',' DWordConstExpr
442         ',' DWordConstExpr
443         ',' DWordConstExpr
444         OptionalByteConstExpr
445         OptionalStringData
446         OptionalNameString
447         OptionalType
448         OptionalTranslationType_Last
449         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
450     | PARSEOP_DWORDIO '('
451         error ')'                   {$$ = AslDoError(); yyclearin;}
452     ;
453
454 DWordMemoryTerm
455     : PARSEOP_DWORDMEMORY '('       {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDMEMORY);}
456         OptionalResourceType_First
457         OptionalDecodeType
458         OptionalMinType
459         OptionalMaxType
460         OptionalMemType
461         ',' OptionalReadWriteKeyword
462         ',' DWordConstExpr
463         ',' DWordConstExpr
464         ',' DWordConstExpr
465         ',' DWordConstExpr
466         ',' DWordConstExpr
467         OptionalByteConstExpr
468         OptionalStringData
469         OptionalNameString
470         OptionalAddressRange
471         OptionalType_Last
472         ')'                         {$$ = TrLinkChildren ($<n>3,16,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
473     | PARSEOP_DWORDMEMORY '('
474         error ')'                   {$$ = AslDoError(); yyclearin;}
475     ;
476
477 DWordSpaceTerm
478     : PARSEOP_DWORDSPACE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_DWORDSPACE);}
479         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
480         OptionalResourceType
481         OptionalDecodeType
482         OptionalMinType
483         OptionalMaxType
484         ',' ByteConstExpr
485         ',' DWordConstExpr
486         ',' DWordConstExpr
487         ',' DWordConstExpr
488         ',' DWordConstExpr
489         ',' DWordConstExpr
490         OptionalByteConstExpr
491         OptionalStringData
492         OptionalNameString_Last
493         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
494     | PARSEOP_DWORDSPACE '('
495         error ')'                   {$$ = AslDoError(); yyclearin;}
496     ;
497
498 EndDependentFnTerm
499     : PARSEOP_ENDDEPENDENTFN '('
500         ')'                         {$$ = TrCreateLeafNode (PARSEOP_ENDDEPENDENTFN);}
501     | PARSEOP_ENDDEPENDENTFN '('
502         error ')'                   {$$ = AslDoError(); yyclearin;}
503     ;
504
505 ExtendedIOTerm
506     : PARSEOP_EXTENDEDIO '('        {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDIO);}
507         OptionalResourceType_First
508         OptionalMinType
509         OptionalMaxType
510         OptionalDecodeType
511         OptionalRangeType
512         ',' QWordConstExpr
513         ',' QWordConstExpr
514         ',' QWordConstExpr
515         ',' QWordConstExpr
516         ',' QWordConstExpr
517         OptionalQWordConstExpr
518         OptionalNameString
519         OptionalType
520         OptionalTranslationType_Last
521         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22);}
522     | PARSEOP_EXTENDEDIO '('
523         error ')'                   {$$ = AslDoError(); yyclearin;}
524     ;
525
526 ExtendedMemoryTerm
527     : PARSEOP_EXTENDEDMEMORY '('    {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDMEMORY);}
528         OptionalResourceType_First
529         OptionalDecodeType
530         OptionalMinType
531         OptionalMaxType
532         OptionalMemType
533         ',' OptionalReadWriteKeyword
534         ',' QWordConstExpr
535         ',' QWordConstExpr
536         ',' QWordConstExpr
537         ',' QWordConstExpr
538         ',' QWordConstExpr
539         OptionalQWordConstExpr
540         OptionalNameString
541         OptionalAddressRange
542         OptionalType_Last
543         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24);}
544     | PARSEOP_EXTENDEDMEMORY '('
545         error ')'                   {$$ = AslDoError(); yyclearin;}
546     ;
547
548 ExtendedSpaceTerm
549     : PARSEOP_EXTENDEDSPACE '('     {$<n>$ = TrCreateLeafNode (PARSEOP_EXTENDEDSPACE);}
550         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
551         OptionalResourceType
552         OptionalDecodeType
553         OptionalMinType
554         OptionalMaxType
555         ',' ByteConstExpr
556         ',' QWordConstExpr
557         ',' QWordConstExpr
558         ',' QWordConstExpr
559         ',' QWordConstExpr
560         ',' QWordConstExpr
561         OptionalQWordConstExpr
562         OptionalNameString_Last
563         ')'                         {$$ = TrLinkChildren ($<n>3,13,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23);}
564     | PARSEOP_EXTENDEDSPACE '('
565         error ')'                   {$$ = AslDoError(); yyclearin;}
566     ;
567
568 FixedDmaTerm
569     : PARSEOP_FIXEDDMA '('          {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDDMA);}
570         WordConstExpr               /* 04: DMA RequestLines */
571         ',' WordConstExpr           /* 06: DMA Channels */
572         OptionalXferSize            /* 07: DMA TransferSize */
573         OptionalNameString          /* 08: DescriptorName */
574         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$7,$8);}
575     | PARSEOP_FIXEDDMA '('
576         error ')'                   {$$ = AslDoError(); yyclearin;}
577     ;
578
579 FixedIOTerm
580     : PARSEOP_FIXEDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_FIXEDIO);}
581         WordConstExpr
582         ',' ByteConstExpr
583         OptionalNameString_Last
584         ')'                         {$$ = TrLinkChildren ($<n>3,3,$4,$6,$7);}
585     | PARSEOP_FIXEDIO '('
586         error ')'                   {$$ = AslDoError(); yyclearin;}
587     ;
588
589 GpioIntTerm
590     : PARSEOP_GPIO_INT '('          {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_INT);}
591         InterruptTypeKeyword        /* 04: InterruptType */
592         ',' InterruptLevel          /* 06: InterruptLevel */
593         OptionalShareType           /* 07: SharedType */
594         ',' PinConfigByte           /* 09: PinConfig */
595         OptionalWordConstExpr       /* 10: DebounceTimeout */
596         ',' StringData              /* 12: ResourceSource */
597         OptionalByteConstExpr       /* 13: ResourceSourceIndex */
598         OptionalResourceType        /* 14: ResourceType */
599         OptionalNameString          /* 15: DescriptorName */
600         OptionalBuffer_Last         /* 16: VendorData */
601         ')' '{'
602             DWordConstExpr '}'      {$$ = TrLinkChildren ($<n>3,11,$4,$6,$7,$9,$10,$12,$13,$14,$15,$16,$19);}
603     | PARSEOP_GPIO_INT '('
604         error ')'                   {$$ = AslDoError(); yyclearin;}
605     ;
606
607 GpioIoTerm
608     : PARSEOP_GPIO_IO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_GPIO_IO);}
609         OptionalShareType_First     /* 04: SharedType */
610         ',' PinConfigByte           /* 06: PinConfig */
611         OptionalWordConstExpr       /* 07: DebounceTimeout */
612         OptionalWordConstExpr       /* 08: DriveStrength */
613         OptionalIoRestriction       /* 09: IoRestriction */
614         ',' StringData              /* 11: ResourceSource */
615         OptionalByteConstExpr       /* 12: ResourceSourceIndex */
616         OptionalResourceType        /* 13: ResourceType */
617         OptionalNameString          /* 14: DescriptorName */
618         OptionalBuffer_Last         /* 15: VendorData */
619         ')' '{'
620             DWordList '}'           {$$ = TrLinkChildren ($<n>3,11,$4,$6,$7,$8,$9,$11,$12,$13,$14,$15,$18);}
621     | PARSEOP_GPIO_IO '('
622         error ')'                   {$$ = AslDoError(); yyclearin;}
623     ;
624
625 I2cSerialBusTerm
626     : PARSEOP_I2C_SERIALBUS '('     {$<n>$ = TrCreateLeafNode (PARSEOP_I2C_SERIALBUS);}
627         WordConstExpr               /* 04: SlaveAddress */
628         OptionalSlaveMode           /* 05: SlaveMode */
629         ',' DWordConstExpr          /* 07: ConnectionSpeed */
630         OptionalAddressingMode      /* 08: AddressingMode */
631         ',' StringData              /* 10: ResourceSource */
632         OptionalByteConstExpr       /* 11: ResourceSourceIndex */
633         OptionalResourceType        /* 12: ResourceType */
634         OptionalNameString          /* 13: DescriptorName */
635         OptionalBuffer_Last         /* 14: VendorData */
636         ')'                         {$$ = TrLinkChildren ($<n>3,10,$4,$5,$7,$8,$10,$11,$12,$13,
637                                         TrCreateLeafNode (PARSEOP_DEFAULT_ARG),$14);}
638     | PARSEOP_I2C_SERIALBUS '('
639         error ')'                   {$$ = AslDoError(); yyclearin;}
640     ;
641
642 I2cSerialBusTermV2
643     : PARSEOP_I2C_SERIALBUS_V2 '('  {$<n>$ = TrCreateLeafNode (PARSEOP_I2C_SERIALBUS_V2);}
644         WordConstExpr               /* 04: SlaveAddress */
645         OptionalSlaveMode           /* 05: SlaveMode */
646         ',' DWordConstExpr          /* 07: ConnectionSpeed */
647         OptionalAddressingMode      /* 08: AddressingMode */
648         ',' StringData              /* 10: ResourceSource */
649         OptionalByteConstExpr       /* 11: ResourceSourceIndex */
650         OptionalResourceType        /* 12: ResourceType */
651         OptionalNameString          /* 13: DescriptorName */
652         OptionalShareType           /* 14: Share */
653         OptionalBuffer_Last         /* 15: VendorData */
654         ')'                         {$$ = TrLinkChildren ($<n>3,10,$4,$5,$7,$8,$10,$11,$12,$13,
655                                         $14,$15);}
656     | PARSEOP_I2C_SERIALBUS_V2 '('
657         error ')'                   {$$ = AslDoError(); yyclearin;}
658     ;
659
660 InterruptTerm
661     : PARSEOP_INTERRUPT '('         {$<n>$ = TrCreateLeafNode (PARSEOP_INTERRUPT);}
662         OptionalResourceType_First
663         ',' InterruptTypeKeyword
664         ',' InterruptLevel
665         OptionalShareType
666         OptionalByteConstExpr
667         OptionalStringData
668         OptionalNameString_Last
669         ')' '{'
670             DWordList '}'           {$$ = TrLinkChildren ($<n>3,8,$4,$6,$8,$9,$10,$11,$12,$15);}
671     | PARSEOP_INTERRUPT '('
672         error ')'                   {$$ = AslDoError(); yyclearin;}
673     ;
674
675 IOTerm
676     : PARSEOP_IO '('                {$<n>$ = TrCreateLeafNode (PARSEOP_IO);}
677         IODecodeKeyword
678         ',' WordConstExpr
679         ',' WordConstExpr
680         ',' ByteConstExpr
681         ',' ByteConstExpr
682         OptionalNameString_Last
683         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
684     | PARSEOP_IO '('
685         error ')'                   {$$ = AslDoError(); yyclearin;}
686     ;
687
688 IRQNoFlagsTerm
689     : PARSEOP_IRQNOFLAGS '('        {$<n>$ = TrCreateLeafNode (PARSEOP_IRQNOFLAGS);}
690         OptionalNameString_First
691         ')' '{'
692             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
693     | PARSEOP_IRQNOFLAGS '('
694         error ')'                   {$$ = AslDoError(); yyclearin;}
695     ;
696
697 IRQTerm
698     : PARSEOP_IRQ '('               {$<n>$ = TrCreateLeafNode (PARSEOP_IRQ);}
699         InterruptTypeKeyword
700         ',' InterruptLevel
701         OptionalShareType
702         OptionalNameString_Last
703         ')' '{'
704             ByteList '}'            {$$ = TrLinkChildren ($<n>3,5,$4,$6,$7,$8,$11);}
705     | PARSEOP_IRQ '('
706         error ')'                   {$$ = AslDoError(); yyclearin;}
707     ;
708
709 Memory24Term
710     : PARSEOP_MEMORY24 '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY24);}
711         OptionalReadWriteKeyword
712         ',' WordConstExpr
713         ',' WordConstExpr
714         ',' WordConstExpr
715         ',' WordConstExpr
716         OptionalNameString_Last
717         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
718     | PARSEOP_MEMORY24 '('
719         error ')'                   {$$ = AslDoError(); yyclearin;}
720     ;
721
722 Memory32FixedTerm
723     : PARSEOP_MEMORY32FIXED '('     {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32FIXED);}
724         OptionalReadWriteKeyword
725         ',' DWordConstExpr
726         ',' DWordConstExpr
727         OptionalNameString_Last
728         ')'                         {$$ = TrLinkChildren ($<n>3,4,$4,$6,$8,$9);}
729     | PARSEOP_MEMORY32FIXED '('
730         error ')'                   {$$ = AslDoError(); yyclearin;}
731     ;
732
733 Memory32Term
734     : PARSEOP_MEMORY32 '('          {$<n>$ = TrCreateLeafNode (PARSEOP_MEMORY32);}
735         OptionalReadWriteKeyword
736         ',' DWordConstExpr
737         ',' DWordConstExpr
738         ',' DWordConstExpr
739         ',' DWordConstExpr
740         OptionalNameString_Last
741         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$12,$13);}
742     | PARSEOP_MEMORY32 '('
743         error ')'                   {$$ = AslDoError(); yyclearin;}
744     ;
745
746 QWordIOTerm
747     : PARSEOP_QWORDIO '('           {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDIO);}
748         OptionalResourceType_First
749         OptionalMinType
750         OptionalMaxType
751         OptionalDecodeType
752         OptionalRangeType
753         ',' QWordConstExpr
754         ',' QWordConstExpr
755         ',' QWordConstExpr
756         ',' QWordConstExpr
757         ',' QWordConstExpr
758         OptionalByteConstExpr
759         OptionalStringData
760         OptionalNameString
761         OptionalType
762         OptionalTranslationType_Last
763         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
764     | PARSEOP_QWORDIO '('
765         error ')'                   {$$ = AslDoError(); yyclearin;}
766     ;
767
768 QWordMemoryTerm
769     : PARSEOP_QWORDMEMORY '('       {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDMEMORY);}
770         OptionalResourceType_First
771         OptionalDecodeType
772         OptionalMinType
773         OptionalMaxType
774         OptionalMemType
775         ',' OptionalReadWriteKeyword
776         ',' QWordConstExpr
777         ',' QWordConstExpr
778         ',' QWordConstExpr
779         ',' QWordConstExpr
780         ',' QWordConstExpr
781         OptionalByteConstExpr
782         OptionalStringData
783         OptionalNameString
784         OptionalAddressRange
785         OptionalType_Last
786         ')'                         {$$ = TrLinkChildren ($<n>3,16,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24,$25);}
787     | PARSEOP_QWORDMEMORY '('
788         error ')'                   {$$ = AslDoError(); yyclearin;}
789     ;
790
791 QWordSpaceTerm
792     : PARSEOP_QWORDSPACE '('        {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDSPACE);}
793         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
794         OptionalResourceType
795         OptionalDecodeType
796         OptionalMinType
797         OptionalMaxType
798         ',' ByteConstExpr
799         ',' QWordConstExpr
800         ',' QWordConstExpr
801         ',' QWordConstExpr
802         ',' QWordConstExpr
803         ',' QWordConstExpr
804         OptionalByteConstExpr
805         OptionalStringData
806         OptionalNameString_Last
807         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
808     | PARSEOP_QWORDSPACE '('
809         error ')'                   {$$ = AslDoError(); yyclearin;}
810     ;
811
812 RegisterTerm
813     : PARSEOP_REGISTER '('          {$<n>$ = TrCreateLeafNode (PARSEOP_REGISTER);}
814         AddressSpaceKeyword
815         ',' ByteConstExpr
816         ',' ByteConstExpr
817         ',' QWordConstExpr
818         OptionalAccessSize
819         OptionalNameString_Last
820         ')'                         {$$ = TrLinkChildren ($<n>3,6,$4,$6,$8,$10,$11,$12);}
821     | PARSEOP_REGISTER '('
822         error ')'                   {$$ = AslDoError(); yyclearin;}
823     ;
824
825 SpiSerialBusTerm
826     : PARSEOP_SPI_SERIALBUS '('     {$<n>$ = TrCreateLeafNode (PARSEOP_SPI_SERIALBUS);}
827         WordConstExpr               /* 04: DeviceSelection */
828         OptionalDevicePolarity      /* 05: DevicePolarity */
829         OptionalWireMode            /* 06: WireMode */
830         ',' ByteConstExpr           /* 08: DataBitLength */
831         OptionalSlaveMode           /* 09: SlaveMode */
832         ',' DWordConstExpr          /* 11: ConnectionSpeed */
833         ',' ClockPolarityKeyword    /* 13: ClockPolarity */
834         ',' ClockPhaseKeyword       /* 15: ClockPhase */
835         ',' StringData              /* 17: ResourceSource */
836         OptionalByteConstExpr       /* 18: ResourceSourceIndex */
837         OptionalResourceType        /* 19: ResourceType */
838         OptionalNameString          /* 20: DescriptorName */
839         OptionalBuffer_Last         /* 21: VendorData */
840         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20,
841                                         TrCreateLeafNode (PARSEOP_DEFAULT_ARG),$21);}
842     | PARSEOP_SPI_SERIALBUS '('
843         error ')'                   {$$ = AslDoError(); yyclearin;}
844     ;
845
846 SpiSerialBusTermV2
847     : PARSEOP_SPI_SERIALBUS_V2 '('  {$<n>$ = TrCreateLeafNode (PARSEOP_SPI_SERIALBUS_V2);}
848         WordConstExpr               /* 04: DeviceSelection */
849         OptionalDevicePolarity      /* 05: DevicePolarity */
850         OptionalWireMode            /* 06: WireMode */
851         ',' ByteConstExpr           /* 08: DataBitLength */
852         OptionalSlaveMode           /* 09: SlaveMode */
853         ',' DWordConstExpr          /* 11: ConnectionSpeed */
854         ',' ClockPolarityKeyword    /* 13: ClockPolarity */
855         ',' ClockPhaseKeyword       /* 15: ClockPhase */
856         ',' StringData              /* 17: ResourceSource */
857         OptionalByteConstExpr       /* 18: ResourceSourceIndex */
858         OptionalResourceType        /* 19: ResourceType */
859         OptionalNameString          /* 20: DescriptorName */
860         OptionalShareType           /* 21: Share */
861         OptionalBuffer_Last         /* 22: VendorData */
862         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20,
863                                         $21,$22);}
864     | PARSEOP_SPI_SERIALBUS_V2 '('
865         error ')'                   {$$ = AslDoError(); yyclearin;}
866     ;
867
868 StartDependentFnNoPriTerm
869     : PARSEOP_STARTDEPENDENTFN_NOPRI '('    {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN_NOPRI);}
870         ')' '{'
871         ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,1,$6);}
872     | PARSEOP_STARTDEPENDENTFN_NOPRI '('
873         error ')'                   {$$ = AslDoError(); yyclearin;}
874     ;
875
876 StartDependentFnTerm
877     : PARSEOP_STARTDEPENDENTFN '('  {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN);}
878         ByteConstExpr
879         ',' ByteConstExpr
880         ')' '{'
881         ResourceMacroList '}'       {$$ = TrLinkChildren ($<n>3,3,$4,$6,$9);}
882     | PARSEOP_STARTDEPENDENTFN '('
883         error ')'                   {$$ = AslDoError(); yyclearin;}
884     ;
885
886 UartSerialBusTerm
887     : PARSEOP_UART_SERIALBUS '('    {$<n>$ = TrCreateLeafNode (PARSEOP_UART_SERIALBUS);}
888         DWordConstExpr              /* 04: ConnectionSpeed */
889         OptionalBitsPerByte         /* 05: BitsPerByte */
890         OptionalStopBits            /* 06: StopBits */
891         ',' ByteConstExpr           /* 08: LinesInUse */
892         OptionalEndian              /* 09: Endianess */
893         OptionalParityType          /* 10: Parity */
894         OptionalFlowControl         /* 11: FlowControl */
895         ',' WordConstExpr           /* 13: Rx BufferSize */
896         ',' WordConstExpr           /* 15: Tx BufferSize */
897         ',' StringData              /* 17: ResourceSource */
898         OptionalByteConstExpr       /* 18: ResourceSourceIndex */
899         OptionalResourceType        /* 19: ResourceType */
900         OptionalNameString          /* 20: DescriptorName */
901         OptionalBuffer_Last         /* 21: VendorData */
902         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20,
903                                         TrCreateLeafNode (PARSEOP_DEFAULT_ARG),$21);}
904     | PARSEOP_UART_SERIALBUS '('
905         error ')'                   {$$ = AslDoError(); yyclearin;}
906     ;
907
908 UartSerialBusTermV2
909     : PARSEOP_UART_SERIALBUS_V2 '(' {$<n>$ = TrCreateLeafNode (PARSEOP_UART_SERIALBUS_V2);}
910         DWordConstExpr              /* 04: ConnectionSpeed */
911         OptionalBitsPerByte         /* 05: BitsPerByte */
912         OptionalStopBits            /* 06: StopBits */
913         ',' ByteConstExpr           /* 08: LinesInUse */
914         OptionalEndian              /* 09: Endianess */
915         OptionalParityType          /* 10: Parity */
916         OptionalFlowControl         /* 11: FlowControl */
917         ',' WordConstExpr           /* 13: Rx BufferSize */
918         ',' WordConstExpr           /* 15: Tx BufferSize */
919         ',' StringData              /* 17: ResourceSource */
920         OptionalByteConstExpr       /* 18: ResourceSourceIndex */
921         OptionalResourceType        /* 19: ResourceType */
922         OptionalNameString          /* 20: DescriptorName */
923         OptionalShareType           /* 21: Share */
924         OptionalBuffer_Last         /* 22: VendorData */
925         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20,
926                                         $21,$22);}
927     | PARSEOP_UART_SERIALBUS_V2 '('
928         error ')'                   {$$ = AslDoError(); yyclearin;}
929     ;
930
931 VendorLongTerm
932     : PARSEOP_VENDORLONG '('        {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORLONG);}
933         OptionalNameString_First
934         ')' '{'
935             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
936     | PARSEOP_VENDORLONG '('
937         error ')'                   {$$ = AslDoError(); yyclearin;}
938     ;
939
940 VendorShortTerm
941     : PARSEOP_VENDORSHORT '('       {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORSHORT);}
942         OptionalNameString_First
943         ')' '{'
944             ByteList '}'            {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
945     | PARSEOP_VENDORSHORT '('
946         error ')'                   {$$ = AslDoError(); yyclearin;}
947     ;
948
949 WordBusNumberTerm
950     : PARSEOP_WORDBUSNUMBER '('     {$<n>$ = TrCreateLeafNode (PARSEOP_WORDBUSNUMBER);}
951         OptionalResourceType_First
952         OptionalMinType
953         OptionalMaxType
954         OptionalDecodeType
955         ',' WordConstExpr
956         ',' WordConstExpr
957         ',' WordConstExpr
958         ',' WordConstExpr
959         ',' WordConstExpr
960         OptionalByteConstExpr
961         OptionalStringData
962         OptionalNameString_Last
963         ')'                         {$$ = TrLinkChildren ($<n>3,12,$4,$5,$6,$7,$9,$11,$13,$15,$17,$18,$19,$20);}
964     | PARSEOP_WORDBUSNUMBER '('
965         error ')'                   {$$ = AslDoError(); yyclearin;}
966     ;
967
968 WordIOTerm
969     : PARSEOP_WORDIO '('            {$<n>$ = TrCreateLeafNode (PARSEOP_WORDIO);}
970         OptionalResourceType_First
971         OptionalMinType
972         OptionalMaxType
973         OptionalDecodeType
974         OptionalRangeType
975         ',' WordConstExpr
976         ',' WordConstExpr
977         ',' WordConstExpr
978         ',' WordConstExpr
979         ',' WordConstExpr
980         OptionalByteConstExpr
981         OptionalStringData
982         OptionalNameString
983         OptionalType
984         OptionalTranslationType_Last
985         ')'                         {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22,$23);}
986     | PARSEOP_WORDIO '('
987         error ')'                   {$$ = AslDoError(); yyclearin;}
988     ;
989
990 WordSpaceTerm
991     : PARSEOP_WORDSPACE '('         {$<n>$ = TrCreateLeafNode (PARSEOP_WORDSPACE);}
992         ByteConstExpr               {UtCheckIntegerRange ($4, 0xC0, 0xFF);}
993         OptionalResourceType
994         OptionalDecodeType
995         OptionalMinType
996         OptionalMaxType
997         ',' ByteConstExpr
998         ',' WordConstExpr
999         ',' WordConstExpr
1000         ',' WordConstExpr
1001         ',' WordConstExpr
1002         ',' WordConstExpr
1003         OptionalByteConstExpr
1004         OptionalStringData
1005         OptionalNameString_Last
1006         ')'                         {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
1007     | PARSEOP_WORDSPACE '('
1008         error ')'                   {$$ = AslDoError(); yyclearin;}
1009     ;
1010
1011
1012 /******* Object References ***********************************************/
1013
1014 /* Allow IO, DMA, IRQ Resource macro names to also be used as identifiers */
1015
1016 NameString
1017     : NameSeg                       {}
1018     | PARSEOP_NAMESTRING            {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) AslCompilerlval.s);}
1019     | PARSEOP_IO                    {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IO");}
1020     | PARSEOP_DMA                   {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "DMA");}
1021     | PARSEOP_IRQ                   {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IRQ");}
1022     ;
1023
1024 NameSeg
1025     : PARSEOP_NAMESEG               {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESEG, (ACPI_NATIVE_INT) AslCompilerlval.s);}
1026     ;
1027
1028
1029 /*******************************************************************************
1030  *
1031  * ASL Helper Terms
1032  *
1033  ******************************************************************************/
1034
1035 OptionalBusMasterKeyword
1036     : ','                                       {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
1037     | ',' PARSEOP_BUSMASTERTYPE_MASTER          {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
1038     | ',' PARSEOP_BUSMASTERTYPE_NOTMASTER       {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_NOTMASTER);}
1039     ;
1040
1041 OptionalAccessAttribTerm
1042     :                               {$$ = NULL;}
1043     | ','                           {$$ = NULL;}
1044     | ',' ByteConstExpr             {$$ = $2;}
1045     | ',' AccessAttribKeyword       {$$ = $2;}
1046     ;
1047
1048 OptionalAccessSize
1049     :                               {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
1050     | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
1051     | ',' ByteConstExpr             {$$ = $2;}
1052     ;
1053
1054 OptionalAddressingMode
1055     : ','                           {$$ = NULL;}
1056     | ',' AddressingModeKeyword     {$$ = $2;}
1057     ;
1058
1059 OptionalAddressRange
1060     :                               {$$ = NULL;}
1061     | ','                           {$$ = NULL;}
1062     | ',' AddressKeyword            {$$ = $2;}
1063     ;
1064
1065 OptionalBitsPerByte
1066     : ','                           {$$ = NULL;}
1067     | ',' BitsPerByteKeyword        {$$ = $2;}
1068     ;
1069
1070 OptionalBuffer_Last
1071     :                               {$$ = NULL;}
1072     | ','                           {$$ = NULL;}
1073     | ',' RawDataBufferTerm         {$$ = $2;}
1074     ;
1075
1076 OptionalByteConstExpr
1077     :                               {$$ = NULL;}
1078     | ','                           {$$ = NULL;}
1079     | ',' ByteConstExpr             {$$ = $2;}
1080     ;
1081
1082 OptionalDecodeType
1083     : ','                           {$$ = NULL;}
1084     | ',' DecodeKeyword             {$$ = $2;}
1085     ;
1086
1087 OptionalDevicePolarity
1088     : ','                           {$$ = NULL;}
1089     | ',' DevicePolarityKeyword     {$$ = $2;}
1090     ;
1091
1092 OptionalDWordConstExpr
1093     :                               {$$ = NULL;}
1094     | ','                           {$$ = NULL;}
1095     | ',' DWordConstExpr            {$$ = $2;}
1096     ;
1097
1098 OptionalEndian
1099     : ','                           {$$ = NULL;}
1100     | ',' EndianKeyword             {$$ = $2;}
1101     ;
1102
1103 OptionalFlowControl
1104     : ','                           {$$ = NULL;}
1105     | ',' FlowControlKeyword        {$$ = $2;}
1106     ;
1107
1108 OptionalIoRestriction
1109     : ','                           {$$ = NULL;}
1110     | ',' IoRestrictionKeyword      {$$ = $2;}
1111     ;
1112
1113 OptionalListString
1114     :                               {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));}   /* Placeholder is a NULL string */
1115     | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL, ACPI_TO_INTEGER (""));}   /* Placeholder is a NULL string */
1116     | ',' TermArg                   {$$ = $2;}
1117     ;
1118
1119 OptionalMaxType
1120     : ','                           {$$ = NULL;}
1121     | ',' MaxKeyword                {$$ = $2;}
1122     ;
1123
1124 OptionalMemType
1125     : ','                           {$$ = NULL;}
1126     | ',' MemTypeKeyword            {$$ = $2;}
1127     ;
1128
1129 OptionalMinType
1130     : ','                           {$$ = NULL;}
1131     | ',' MinKeyword                {$$ = $2;}
1132     ;
1133
1134 OptionalNameString
1135     :                               {$$ = NULL;}
1136     | ','                           {$$ = NULL;}
1137     | ',' NameString                {$$ = $2;}
1138     ;
1139
1140 OptionalNameString_Last
1141     :                               {$$ = NULL;}
1142     | ','                           {$$ = NULL;}
1143     | ',' NameString                {$$ = $2;}
1144     ;
1145
1146 OptionalNameString_First
1147     :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}
1148     | NameString                    {$$ = $1;}
1149     ;
1150
1151 OptionalObjectTypeKeyword
1152     :                               {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_UNK);}
1153     | ',' ObjectTypeKeyword         {$$ = $2;}
1154     ;
1155
1156 OptionalParityType
1157     : ','                           {$$ = NULL;}
1158     | ',' ParityTypeKeyword         {$$ = $2;}
1159     ;
1160
1161 OptionalQWordConstExpr
1162     :                               {$$ = NULL;}
1163     | ','                           {$$ = NULL;}
1164     | ',' QWordConstExpr            {$$ = $2;}
1165     ;
1166
1167 OptionalRangeType
1168     : ','                           {$$ = NULL;}
1169     | ',' RangeTypeKeyword          {$$ = $2;}
1170     ;
1171
1172 OptionalReadWriteKeyword
1173     :                                   {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
1174     | PARSEOP_READWRITETYPE_BOTH        {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
1175     | PARSEOP_READWRITETYPE_READONLY    {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_READONLY);}
1176     ;
1177
1178 OptionalResourceType_First
1179     :                               {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
1180     | ResourceTypeKeyword           {$$ = $1;}
1181     ;
1182
1183 OptionalResourceType
1184     :                               {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
1185     | ','                           {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
1186     | ',' ResourceTypeKeyword       {$$ = $2;}
1187     ;
1188
1189 OptionalSlaveMode
1190     : ','                           {$$ = NULL;}
1191     | ',' SlaveModeKeyword          {$$ = $2;}
1192     ;
1193
1194 OptionalShareType
1195     :                               {$$ = NULL;}
1196     | ','                           {$$ = NULL;}
1197     | ',' ShareTypeKeyword          {$$ = $2;}
1198     ;
1199
1200 OptionalShareType_First
1201     :                               {$$ = NULL;}
1202     | ShareTypeKeyword              {$$ = $1;}
1203     ;
1204
1205 OptionalStopBits
1206     : ','                           {$$ = NULL;}
1207     | ',' StopBitsKeyword           {$$ = $2;}
1208     ;
1209
1210 OptionalStringData
1211     :                               {$$ = NULL;}
1212     | ','                           {$$ = NULL;}
1213     | ',' StringData                {$$ = $2;}
1214     ;
1215
1216 OptionalTranslationType_Last
1217     :                               {$$ = NULL;}
1218     | ','                           {$$ = NULL;}
1219     | ',' TranslationKeyword        {$$ = $2;}
1220     ;
1221
1222 OptionalType
1223     :                               {$$ = NULL;}
1224     | ','                           {$$ = NULL;}
1225     | ',' TypeKeyword               {$$ = $2;}
1226     ;
1227
1228 OptionalType_Last
1229     :                               {$$ = NULL;}
1230     | ','                           {$$ = NULL;}
1231     | ',' TypeKeyword               {$$ = $2;}
1232     ;
1233
1234 OptionalWireMode
1235     : ','                           {$$ = NULL;}
1236     | ',' WireModeKeyword           {$$ = $2;}
1237     ;
1238
1239 OptionalWordConstExpr
1240     : ','                           {$$ = NULL;}
1241     | ',' WordConstExpr             {$$ = $2;}
1242     ;
1243
1244 OptionalXferSize
1245     :                               {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32, 2);}
1246     | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32, 2);}
1247     | ',' XferSizeKeyword           {$$ = $2;}
1248     ;