aslresources.y revision 306536
1NoEcho('
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
53AccessAttribKeyword
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
72AccessTypeKeyword
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
81AddressingModeKeyword
82    : PARSEOP_ADDRESSINGMODE_7BIT           {$$ = TrCreateLeafNode (PARSEOP_ADDRESSINGMODE_7BIT);}
83    | PARSEOP_ADDRESSINGMODE_10BIT          {$$ = TrCreateLeafNode (PARSEOP_ADDRESSINGMODE_10BIT);}
84    ;
85
86AddressKeyword
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
93AddressSpaceKeyword
94    : ByteConst                             {$$ = UtCheckIntegerRange ($1, 0x0A, 0xFF);}
95    | RegionSpaceKeyword                    {}
96    ;
97
98BitsPerByteKeyword
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
106ClockPhaseKeyword
107    : PARSEOP_CLOCKPHASE_FIRST              {$$ = TrCreateLeafNode (PARSEOP_CLOCKPHASE_FIRST);}
108    | PARSEOP_CLOCKPHASE_SECOND             {$$ = TrCreateLeafNode (PARSEOP_CLOCKPHASE_SECOND);}
109    ;
110
111ClockPolarityKeyword
112    : PARSEOP_CLOCKPOLARITY_LOW             {$$ = TrCreateLeafNode (PARSEOP_CLOCKPOLARITY_LOW);}
113    | PARSEOP_CLOCKPOLARITY_HIGH            {$$ = TrCreateLeafNode (PARSEOP_CLOCKPOLARITY_HIGH);}
114    ;
115
116DecodeKeyword
117    : PARSEOP_DECODETYPE_POS                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_POS);}
118    | PARSEOP_DECODETYPE_SUB                {$$ = TrCreateLeafNode (PARSEOP_DECODETYPE_SUB);}
119    ;
120
121DevicePolarityKeyword
122    : PARSEOP_DEVICEPOLARITY_LOW            {$$ = TrCreateLeafNode (PARSEOP_DEVICEPOLARITY_LOW);}
123    | PARSEOP_DEVICEPOLARITY_HIGH           {$$ = TrCreateLeafNode (PARSEOP_DEVICEPOLARITY_HIGH);}
124    ;
125
126DMATypeKeyword
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
133EndianKeyword
134    : PARSEOP_ENDIAN_LITTLE                 {$$ = TrCreateLeafNode (PARSEOP_ENDIAN_LITTLE);}
135    | PARSEOP_ENDIAN_BIG                    {$$ = TrCreateLeafNode (PARSEOP_ENDIAN_BIG);}
136    ;
137
138FlowControlKeyword
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
144InterruptLevel
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
150InterruptTypeKeyword
151    : PARSEOP_INTTYPE_EDGE                  {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_EDGE);}
152    | PARSEOP_INTTYPE_LEVEL                 {$$ = TrCreateLeafNode (PARSEOP_INTTYPE_LEVEL);}
153    ;
154
155IODecodeKeyword
156    : PARSEOP_IODECODETYPE_16               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_16);}
157    | PARSEOP_IODECODETYPE_10               {$$ = TrCreateLeafNode (PARSEOP_IODECODETYPE_10);}
158    ;
159
160IoRestrictionKeyword
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
167LockRuleKeyword
168    : PARSEOP_LOCKRULE_LOCK                 {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_LOCK);}
169    | PARSEOP_LOCKRULE_NOLOCK               {$$ = TrCreateLeafNode (PARSEOP_LOCKRULE_NOLOCK);}
170    ;
171
172MatchOpKeyword
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
181MaxKeyword
182    : PARSEOP_MAXTYPE_FIXED                 {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_FIXED);}
183    | PARSEOP_MAXTYPE_NOTFIXED              {$$ = TrCreateLeafNode (PARSEOP_MAXTYPE_NOTFIXED);}
184    ;
185
186MemTypeKeyword
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
193MinKeyword
194    : PARSEOP_MINTYPE_FIXED                 {$$ = TrCreateLeafNode (PARSEOP_MINTYPE_FIXED);}
195    | PARSEOP_MINTYPE_NOTFIXED              {$$ = TrCreateLeafNode (PARSEOP_MINTYPE_NOTFIXED);}
196    ;
197
198ObjectTypeKeyword
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
217ParityTypeKeyword
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
225PinConfigByte
226    : PinConfigKeyword                      {$$ = $1;}
227    | ByteConstExpr                         {$$ = UtCheckIntegerRange ($1, 0x80, 0xFF);}
228    ;
229
230PinConfigKeyword
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
237PldKeyword
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
268RangeTypeKeyword
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
274RegionSpaceKeyword
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
289ResourceTypeKeyword
290    : PARSEOP_RESOURCETYPE_CONSUMER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
291    | PARSEOP_RESOURCETYPE_PRODUCER         {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_PRODUCER);}
292    ;
293
294SerializeRuleKeyword
295    : PARSEOP_SERIALIZERULE_SERIAL          {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_SERIAL);}
296    | PARSEOP_SERIALIZERULE_NOTSERIAL       {$$ = TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL);}
297    ;
298
299ShareTypeKeyword
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
306SlaveModeKeyword
307    : PARSEOP_SLAVEMODE_CONTROLLERINIT      {$$ = TrCreateLeafNode (PARSEOP_SLAVEMODE_CONTROLLERINIT);}
308    | PARSEOP_SLAVEMODE_DEVICEINIT          {$$ = TrCreateLeafNode (PARSEOP_SLAVEMODE_DEVICEINIT);}
309    ;
310
311StopBitsKeyword
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
318TranslationKeyword
319    : PARSEOP_TRANSLATIONTYPE_SPARSE        {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_SPARSE);}
320    | PARSEOP_TRANSLATIONTYPE_DENSE         {$$ = TrCreateLeafNode (PARSEOP_TRANSLATIONTYPE_DENSE);}
321    ;
322
323TypeKeyword
324    : PARSEOP_TYPE_TRANSLATION              {$$ = TrCreateLeafNode (PARSEOP_TYPE_TRANSLATION);}
325    | PARSEOP_TYPE_STATIC                   {$$ = TrCreateLeafNode (PARSEOP_TYPE_STATIC);}
326    ;
327
328UpdateRuleKeyword
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
334WireModeKeyword
335    : PARSEOP_WIREMODE_FOUR                 {$$ = TrCreateLeafNode (PARSEOP_WIREMODE_FOUR);}
336    | PARSEOP_WIREMODE_THREE                {$$ = TrCreateLeafNode (PARSEOP_WIREMODE_THREE);}
337    ;
338
339XferSizeKeyword
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
348XferTypeKeyword
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 */
365ResourceTemplateTerm
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
375ResourceMacroList
376    :                               {$$ = NULL;}
377    | ResourceMacroList
378        ResourceMacroTerm           {$$ = TrLinkPeerNode ($1,$2);}
379    ;
380
381ResourceMacroTerm
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
420DMATerm
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
432DWordIOTerm
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
454DWordMemoryTerm
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
477DWordSpaceTerm
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
498EndDependentFnTerm
499    : PARSEOP_ENDDEPENDENTFN '('
500        ')'                         {$$ = TrCreateLeafNode (PARSEOP_ENDDEPENDENTFN);}
501    | PARSEOP_ENDDEPENDENTFN '('
502        error ')'                   {$$ = AslDoError(); yyclearin;}
503    ;
504
505ExtendedIOTerm
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
526ExtendedMemoryTerm
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
548ExtendedSpaceTerm
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
568FixedDmaTerm
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
579FixedIOTerm
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
589GpioIntTerm
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
607GpioIoTerm
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
625I2cSerialBusTerm
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
642I2cSerialBusTermV2
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
660InterruptTerm
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
675IOTerm
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
688IRQNoFlagsTerm
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
697IRQTerm
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
709Memory24Term
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
722Memory32FixedTerm
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
733Memory32Term
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
746QWordIOTerm
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
768QWordMemoryTerm
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
791QWordSpaceTerm
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
812RegisterTerm
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
825SpiSerialBusTerm
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
846SpiSerialBusTermV2
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
868StartDependentFnNoPriTerm
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
876StartDependentFnTerm
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
886UartSerialBusTerm
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
908UartSerialBusTermV2
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
931VendorLongTerm
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
940VendorShortTerm
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
949WordBusNumberTerm
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
968WordIOTerm
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
990WordSpaceTerm
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
1016NameString
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
1024NameSeg
1025    : PARSEOP_NAMESEG               {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESEG, (ACPI_NATIVE_INT) AslCompilerlval.s);}
1026    ;
1027
1028
1029/*******************************************************************************
1030 *
1031 * ASL Helper Terms
1032 *
1033 ******************************************************************************/
1034
1035OptionalBusMasterKeyword
1036    : ','                                       {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
1037    | ',' PARSEOP_BUSMASTERTYPE_MASTER          {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
1038    | ',' PARSEOP_BUSMASTERTYPE_NOTMASTER       {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_NOTMASTER);}
1039    ;
1040
1041OptionalAccessAttribTerm
1042    :                               {$$ = NULL;}
1043    | ','                           {$$ = NULL;}
1044    | ',' ByteConstExpr             {$$ = $2;}
1045    | ',' AccessAttribKeyword       {$$ = $2;}
1046    ;
1047
1048OptionalAccessSize
1049    :                               {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
1050    | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
1051    | ',' ByteConstExpr             {$$ = $2;}
1052    ;
1053
1054OptionalAddressingMode
1055    : ','                           {$$ = NULL;}
1056    | ',' AddressingModeKeyword     {$$ = $2;}
1057    ;
1058
1059OptionalAddressRange
1060    :                               {$$ = NULL;}
1061    | ','                           {$$ = NULL;}
1062    | ',' AddressKeyword            {$$ = $2;}
1063    ;
1064
1065OptionalBitsPerByte
1066    : ','                           {$$ = NULL;}
1067    | ',' BitsPerByteKeyword        {$$ = $2;}
1068    ;
1069
1070OptionalBuffer_Last
1071    :                               {$$ = NULL;}
1072    | ','                           {$$ = NULL;}
1073    | ',' RawDataBufferTerm         {$$ = $2;}
1074    ;
1075
1076OptionalByteConstExpr
1077    :                               {$$ = NULL;}
1078    | ','                           {$$ = NULL;}
1079    | ',' ByteConstExpr             {$$ = $2;}
1080    ;
1081
1082OptionalDecodeType
1083    : ','                           {$$ = NULL;}
1084    | ',' DecodeKeyword             {$$ = $2;}
1085    ;
1086
1087OptionalDevicePolarity
1088    : ','                           {$$ = NULL;}
1089    | ',' DevicePolarityKeyword     {$$ = $2;}
1090    ;
1091
1092OptionalDWordConstExpr
1093    :                               {$$ = NULL;}
1094    | ','                           {$$ = NULL;}
1095    | ',' DWordConstExpr            {$$ = $2;}
1096    ;
1097
1098OptionalEndian
1099    : ','                           {$$ = NULL;}
1100    | ',' EndianKeyword             {$$ = $2;}
1101    ;
1102
1103OptionalFlowControl
1104    : ','                           {$$ = NULL;}
1105    | ',' FlowControlKeyword        {$$ = $2;}
1106    ;
1107
1108OptionalIoRestriction
1109    : ','                           {$$ = NULL;}
1110    | ',' IoRestrictionKeyword      {$$ = $2;}
1111    ;
1112
1113OptionalListString
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
1119OptionalMaxType
1120    : ','                           {$$ = NULL;}
1121    | ',' MaxKeyword                {$$ = $2;}
1122    ;
1123
1124OptionalMemType
1125    : ','                           {$$ = NULL;}
1126    | ',' MemTypeKeyword            {$$ = $2;}
1127    ;
1128
1129OptionalMinType
1130    : ','                           {$$ = NULL;}
1131    | ',' MinKeyword                {$$ = $2;}
1132    ;
1133
1134OptionalNameString
1135    :                               {$$ = NULL;}
1136    | ','                           {$$ = NULL;}
1137    | ',' NameString                {$$ = $2;}
1138    ;
1139
1140OptionalNameString_Last
1141    :                               {$$ = NULL;}
1142    | ','                           {$$ = NULL;}
1143    | ',' NameString                {$$ = $2;}
1144    ;
1145
1146OptionalNameString_First
1147    :                               {$$ = TrCreateLeafNode (PARSEOP_ZERO);}
1148    | NameString                    {$$ = $1;}
1149    ;
1150
1151OptionalObjectTypeKeyword
1152    :                               {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_UNK);}
1153    | ',' ObjectTypeKeyword         {$$ = $2;}
1154    ;
1155
1156OptionalParityType
1157    : ','                           {$$ = NULL;}
1158    | ',' ParityTypeKeyword         {$$ = $2;}
1159    ;
1160
1161OptionalQWordConstExpr
1162    :                               {$$ = NULL;}
1163    | ','                           {$$ = NULL;}
1164    | ',' QWordConstExpr            {$$ = $2;}
1165    ;
1166
1167OptionalRangeType
1168    : ','                           {$$ = NULL;}
1169    | ',' RangeTypeKeyword          {$$ = $2;}
1170    ;
1171
1172OptionalReadWriteKeyword
1173    :                                   {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
1174    | PARSEOP_READWRITETYPE_BOTH        {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
1175    | PARSEOP_READWRITETYPE_READONLY    {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_READONLY);}
1176    ;
1177
1178OptionalResourceType_First
1179    :                               {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
1180    | ResourceTypeKeyword           {$$ = $1;}
1181    ;
1182
1183OptionalResourceType
1184    :                               {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
1185    | ','                           {$$ = TrCreateLeafNode (PARSEOP_RESOURCETYPE_CONSUMER);}
1186    | ',' ResourceTypeKeyword       {$$ = $2;}
1187    ;
1188
1189OptionalSlaveMode
1190    : ','                           {$$ = NULL;}
1191    | ',' SlaveModeKeyword          {$$ = $2;}
1192    ;
1193
1194OptionalShareType
1195    :                               {$$ = NULL;}
1196    | ','                           {$$ = NULL;}
1197    | ',' ShareTypeKeyword          {$$ = $2;}
1198    ;
1199
1200OptionalShareType_First
1201    :                               {$$ = NULL;}
1202    | ShareTypeKeyword              {$$ = $1;}
1203    ;
1204
1205OptionalStopBits
1206    : ','                           {$$ = NULL;}
1207    | ',' StopBitsKeyword           {$$ = $2;}
1208    ;
1209
1210OptionalStringData
1211    :                               {$$ = NULL;}
1212    | ','                           {$$ = NULL;}
1213    | ',' StringData                {$$ = $2;}
1214    ;
1215
1216OptionalTranslationType_Last
1217    :                               {$$ = NULL;}
1218    | ','                           {$$ = NULL;}
1219    | ',' TranslationKeyword        {$$ = $2;}
1220    ;
1221
1222OptionalType
1223    :                               {$$ = NULL;}
1224    | ','                           {$$ = NULL;}
1225    | ',' TypeKeyword               {$$ = $2;}
1226    ;
1227
1228OptionalType_Last
1229    :                               {$$ = NULL;}
1230    | ','                           {$$ = NULL;}
1231    | ',' TypeKeyword               {$$ = $2;}
1232    ;
1233
1234OptionalWireMode
1235    : ','                           {$$ = NULL;}
1236    | ',' WireModeKeyword           {$$ = $2;}
1237    ;
1238
1239OptionalWordConstExpr
1240    : ','                           {$$ = NULL;}
1241    | ',' WordConstExpr             {$$ = $2;}
1242    ;
1243
1244OptionalXferSize
1245    :                               {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32, 2);}
1246    | ','                           {$$ = TrCreateValuedLeafNode (PARSEOP_XFERSIZE_32, 2);}
1247    | ',' XferSizeKeyword           {$$ = $2;}
1248    ;
1249