aslrules.y revision 1.1.1.4.2.2 1 1.1 christos NoEcho('
2 1.1 christos /******************************************************************************
3 1.1 christos *
4 1.1.1.3 christos * Module Name: aslrules.y - Main Bison/Yacc production rules
5 1.1 christos *
6 1.1 christos *****************************************************************************/
7 1.1 christos
8 1.1 christos /*
9 1.1.1.4.2.2 pgoyette * Copyright (C) 2000 - 2017, Intel Corp.
10 1.1 christos * All rights reserved.
11 1.1 christos *
12 1.1 christos * Redistribution and use in source and binary forms, with or without
13 1.1 christos * modification, are permitted provided that the following conditions
14 1.1 christos * are met:
15 1.1 christos * 1. Redistributions of source code must retain the above copyright
16 1.1 christos * notice, this list of conditions, and the following disclaimer,
17 1.1 christos * without modification.
18 1.1 christos * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19 1.1 christos * substantially similar to the "NO WARRANTY" disclaimer below
20 1.1 christos * ("Disclaimer") and any redistribution must be conditioned upon
21 1.1 christos * including a substantially similar Disclaimer requirement for further
22 1.1 christos * binary redistribution.
23 1.1 christos * 3. Neither the names of the above-listed copyright holders nor the names
24 1.1 christos * of any contributors may be used to endorse or promote products derived
25 1.1 christos * from this software without specific prior written permission.
26 1.1 christos *
27 1.1 christos * Alternatively, this software may be distributed under the terms of the
28 1.1 christos * GNU General Public License ("GPL") version 2 as published by the Free
29 1.1 christos * Software Foundation.
30 1.1 christos *
31 1.1 christos * NO WARRANTY
32 1.1 christos * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33 1.1 christos * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34 1.1 christos * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35 1.1 christos * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36 1.1 christos * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37 1.1 christos * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38 1.1 christos * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39 1.1 christos * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40 1.1 christos * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41 1.1 christos * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42 1.1 christos * POSSIBILITY OF SUCH DAMAGES.
43 1.1 christos */
44 1.1 christos
45 1.1 christos ')
46 1.1 christos
47 1.1 christos /*******************************************************************************
48 1.1 christos *
49 1.1.1.3 christos * ASL Root and Secondary Terms
50 1.1 christos *
51 1.1 christos ******************************************************************************/
52 1.1 christos
53 1.1 christos /*
54 1.1.1.3 christos * Root term. Allow multiple #line directives before the definition block
55 1.1 christos * to handle output from preprocessors
56 1.1 christos */
57 1.1.1.3 christos AslCode
58 1.1.1.4.2.1 pgoyette : DefinitionBlockList {$<n>$ = TrLinkChildren (
59 1.1.1.4.2.1 pgoyette TrCreateLeafNode (PARSEOP_ASL_CODE),1, $1);}
60 1.1 christos | error {YYABORT; $$ = NULL;}
61 1.1 christos ;
62 1.1 christos
63 1.1 christos
64 1.1 christos /*
65 1.1 christos * Note concerning support for "module-level code".
66 1.1 christos *
67 1.1 christos * ACPI 1.0 allowed Type1 and Type2 executable opcodes outside of control
68 1.1 christos * methods (the so-called module-level code.) This support was explicitly
69 1.1 christos * removed in ACPI 2.0, but this type of code continues to be created by
70 1.1 christos * BIOS vendors. In order to support the disassembly and recompilation of
71 1.1 christos * such code (and the porting of ASL code to iASL), iASL supports this
72 1.1 christos * code in violation of the current ACPI specification.
73 1.1 christos *
74 1.1 christos * The grammar change to support module-level code is to revert the
75 1.1 christos * {ObjectList} portion of the DefinitionBlockTerm in ACPI 2.0 to the
76 1.1 christos * original use of {TermList} instead (see below.) This allows the use
77 1.1 christos * of Type1 and Type2 opcodes at module level.
78 1.1.1.4 christos *
79 1.1.1.4 christos * 04/2016: The module-level code is now allowed in the following terms:
80 1.1.1.4 christos * DeviceTerm, PowerResTerm, ProcessorTerm, ScopeTerm, ThermalZoneTerm.
81 1.1.1.4 christos * The ObjectList term is obsolete and has been removed.
82 1.1 christos */
83 1.1 christos DefinitionBlockTerm
84 1.1.1.4.2.2 pgoyette : PARSEOP_DEFINITION_BLOCK
85 1.1.1.4.2.2 pgoyette PARSEOP_OPEN_PAREN {$<n>$ = TrCreateLeafNode (PARSEOP_DEFINITION_BLOCK);}
86 1.1 christos String ','
87 1.1 christos String ','
88 1.1 christos ByteConst ','
89 1.1 christos String ','
90 1.1 christos String ','
91 1.1 christos DWordConst
92 1.1.1.4.2.2 pgoyette PARSEOP_CLOSE_PAREN {TrSetEndLineNumber ($<n>3);}
93 1.1.1.4.2.1 pgoyette '{' TermList '}' {$$ = TrLinkChildren ($<n>3,7,
94 1.1.1.4.2.1 pgoyette $4,$6,$8,$10,$12,$14,$18);}
95 1.1 christos ;
96 1.1 christos
97 1.1.1.3 christos DefinitionBlockList
98 1.1.1.3 christos : DefinitionBlockTerm
99 1.1.1.3 christos | DefinitionBlockTerm
100 1.1.1.3 christos DefinitionBlockList {$$ = TrLinkPeerNodes (2, $1,$2);}
101 1.1.1.2 christos ;
102 1.1.1.2 christos
103 1.1.1.4.2.2 pgoyette
104 1.1.1.4.2.2 pgoyette /******* Basic ASCII identifiers **************************************************/
105 1.1.1.4.2.2 pgoyette
106 1.1.1.4.2.1 pgoyette /* Allow IO, DMA, IRQ Resource macro and FOR macro names to also be used as identifiers */
107 1.1.1.4.2.1 pgoyette
108 1.1.1.4.2.1 pgoyette NameString
109 1.1.1.4.2.1 pgoyette : NameSeg {}
110 1.1.1.4.2.1 pgoyette | PARSEOP_NAMESTRING {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) $1);}
111 1.1.1.4.2.1 pgoyette | PARSEOP_IO {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IO");}
112 1.1.1.4.2.1 pgoyette | PARSEOP_DMA {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "DMA");}
113 1.1.1.4.2.1 pgoyette | PARSEOP_IRQ {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IRQ");}
114 1.1.1.4.2.1 pgoyette | PARSEOP_FOR {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "FOR");}
115 1.1.1.4.2.1 pgoyette ;
116 1.1.1.4.2.1 pgoyette /*
117 1.1.1.4.2.1 pgoyette NameSeg
118 1.1.1.4.2.1 pgoyette : PARSEOP_NAMESEG {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESEG, (ACPI_NATIVE_INT)
119 1.1.1.4.2.2 pgoyette TrNormalizeNameSeg ($1));}
120 1.1.1.4.2.1 pgoyette ;
121 1.1.1.4.2.1 pgoyette */
122 1.1.1.4.2.1 pgoyette
123 1.1.1.4.2.1 pgoyette NameSeg
124 1.1.1.4.2.1 pgoyette : PARSEOP_NAMESEG {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESEG,
125 1.1.1.4.2.2 pgoyette (ACPI_NATIVE_INT) AslCompilerlval.s);}
126 1.1.1.4.2.1 pgoyette ;
127 1.1.1.4.2.1 pgoyette
128 1.1.1.4.2.1 pgoyette
129 1.1.1.4.2.2 pgoyette /******* Fundamental argument/statement types ***********************************/
130 1.1.1.4.2.2 pgoyette
131 1.1.1.4.2.2 pgoyette Term
132 1.1.1.4.2.2 pgoyette : Object {}
133 1.1.1.4.2.2 pgoyette | Type1Opcode {}
134 1.1.1.4.2.2 pgoyette | Type2Opcode {}
135 1.1.1.4.2.2 pgoyette | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
136 1.1.1.4.2.2 pgoyette | Type2StringOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
137 1.1.1.4.2.2 pgoyette | Type2BufferOpcode {}
138 1.1.1.4.2.2 pgoyette | Type2BufferOrStringOpcode {}
139 1.1.1.4.2.2 pgoyette | error {$$ = AslDoError(); yyclearin;}
140 1.1.1.4.2.2 pgoyette ;
141 1.1.1.4.2.2 pgoyette
142 1.1.1.3 christos SuperName
143 1.1.1.4.2.2 pgoyette : SimpleName {}
144 1.1.1.3 christos | DebugTerm {}
145 1.1.1.3 christos | Type6Opcode {}
146 1.1.1.4.2.1 pgoyette ;
147 1.1.1.2 christos
148 1.1.1.3 christos Target
149 1.1.1.3 christos : {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */
150 1.1.1.3 christos | ',' {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */
151 1.1.1.3 christos | ',' SuperName {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
152 1.1 christos ;
153 1.1 christos
154 1.1.1.4.2.2 pgoyette RequiredTarget
155 1.1.1.4.2.2 pgoyette : ',' SuperName {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
156 1.1.1.4.2.2 pgoyette ;
157 1.1.1.4.2.2 pgoyette
158 1.1.1.3 christos TermArg
159 1.1.1.4.2.2 pgoyette : SimpleName {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
160 1.1.1.4.2.2 pgoyette | Type2Opcode {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
161 1.1.1.3 christos | DataObject {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
162 1.1.1.4.2.2 pgoyette /*
163 1.1.1.4.2.2 pgoyette | PARSEOP_OPEN_PAREN
164 1.1.1.4.2.2 pgoyette TermArg
165 1.1.1.4.2.2 pgoyette PARSEOP_CLOSE_PAREN {}
166 1.1.1.4.2.2 pgoyette */
167 1.1 christos ;
168 1.1 christos
169 1.1.1.3 christos /*
170 1.1.1.3 christos NOTE: Removed from TermArg due to reduce/reduce conflicts:
171 1.1.1.3 christos | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
172 1.1.1.3 christos | Type2StringOpcode {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
173 1.1.1.3 christos | Type2BufferOpcode {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
174 1.1.1.3 christos | Type2BufferOrStringOpcode {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
175 1.1 christos
176 1.1.1.3 christos */
177 1.1 christos
178 1.1.1.3 christos MethodInvocationTerm
179 1.1.1.4.2.2 pgoyette : NameString
180 1.1.1.4.2.2 pgoyette PARSEOP_OPEN_PAREN {TrUpdateNode (PARSEOP_METHODCALL, $1);}
181 1.1.1.4.2.2 pgoyette ArgList
182 1.1.1.4.2.2 pgoyette PARSEOP_CLOSE_PAREN {$$ = TrLinkChildNode ($1,$4);}
183 1.1 christos ;
184 1.1 christos
185 1.1.1.3 christos /* OptionalCount must appear before ByteList or an incorrect reduction will result */
186 1.1 christos
187 1.1.1.3 christos OptionalCount
188 1.1.1.3 christos : {$$ = TrCreateLeafNode (PARSEOP_ONES);} /* Placeholder is a OnesOp object */
189 1.1.1.3 christos | ',' {$$ = TrCreateLeafNode (PARSEOP_ONES);} /* Placeholder is a OnesOp object */
190 1.1.1.3 christos | ',' TermArg {$$ = $2;}
191 1.1 christos ;
192 1.1 christos
193 1.1.1.4.2.1 pgoyette /*
194 1.1.1.4.2.1 pgoyette * Data count for buffers and packages (byte count for buffers,
195 1.1.1.4.2.1 pgoyette * element count for packages).
196 1.1.1.4.2.1 pgoyette */
197 1.1.1.4.2.1 pgoyette OptionalDataCount
198 1.1.1.4.2.1 pgoyette
199 1.1.1.4.2.1 pgoyette /* Legacy ASL */
200 1.1.1.4.2.1 pgoyette : {$$ = NULL;}
201 1.1.1.4.2.2 pgoyette | PARSEOP_OPEN_PAREN
202 1.1.1.4.2.2 pgoyette TermArg
203 1.1.1.4.2.2 pgoyette PARSEOP_CLOSE_PAREN {$$ = $2;}
204 1.1.1.4.2.2 pgoyette | PARSEOP_OPEN_PAREN
205 1.1.1.4.2.2 pgoyette PARSEOP_CLOSE_PAREN {$$ = NULL;}
206 1.1.1.4.2.1 pgoyette
207 1.1.1.4.2.1 pgoyette /* C-style (ASL+) -- adds equals term */
208 1.1.1.4.2.1 pgoyette
209 1.1.1.4.2.1 pgoyette | PARSEOP_EXP_EQUALS {$$ = NULL;}
210 1.1.1.4.2.1 pgoyette
211 1.1.1.4.2.2 pgoyette | PARSEOP_OPEN_PAREN
212 1.1.1.4.2.2 pgoyette TermArg
213 1.1.1.4.2.2 pgoyette PARSEOP_CLOSE_PAREN
214 1.1.1.4.2.1 pgoyette PARSEOP_EXP_EQUALS {$$ = $2;}
215 1.1.1.4.2.1 pgoyette
216 1.1.1.4.2.2 pgoyette | PARSEOP_OPEN_PAREN
217 1.1.1.4.2.2 pgoyette PARSEOP_CLOSE_PAREN
218 1.1.1.4.2.2 pgoyette String
219 1.1.1.4.2.1 pgoyette PARSEOP_EXP_EQUALS {$$ = NULL;}
220 1.1 christos ;
221 1.1 christos
222 1.1 christos
223 1.1.1.3 christos /******* List Terms **************************************************/
224 1.1 christos
225 1.1.1.4.2.2 pgoyette /* ACPI 3.0 -- allow semicolons between terms */
226 1.1.1.4.2.2 pgoyette
227 1.1.1.4.2.2 pgoyette TermList
228 1.1.1.4.2.2 pgoyette : {$$ = NULL;}
229 1.1.1.4.2.2 pgoyette | TermList Term {$$ = TrLinkPeerNode (
230 1.1.1.4.2.2 pgoyette TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
231 1.1.1.4.2.2 pgoyette | TermList Term ';' {$$ = TrLinkPeerNode (
232 1.1.1.4.2.2 pgoyette TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
233 1.1.1.4.2.2 pgoyette | TermList ';' Term {$$ = TrLinkPeerNode (
234 1.1.1.4.2.2 pgoyette TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
235 1.1.1.4.2.2 pgoyette | TermList ';' Term ';' {$$ = TrLinkPeerNode (
236 1.1.1.4.2.2 pgoyette TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
237 1.1.1.4.2.2 pgoyette ;
238 1.1.1.4.2.2 pgoyette
239 1.1.1.3 christos ArgList
240 1.1.1.3 christos : {$$ = NULL;}
241 1.1.1.3 christos | TermArg
242 1.1.1.3 christos | ArgList ',' /* Allows a trailing comma at list end */
243 1.1.1.3 christos | ArgList ','
244 1.1.1.3 christos TermArg {$$ = TrLinkPeerNode ($1,$3);}
245 1.1 christos ;
246 1.1 christos
247 1.1.1.3 christos ByteList
248 1.1.1.3 christos : {$$ = NULL;}
249 1.1.1.3 christos | ByteConstExpr
250 1.1.1.3 christos | ByteList ',' /* Allows a trailing comma at list end */
251 1.1.1.3 christos | ByteList ','
252 1.1.1.3 christos ByteConstExpr {$$ = TrLinkPeerNode ($1,$3);}
253 1.1 christos ;
254 1.1 christos
255 1.1.1.3 christos DWordList
256 1.1.1.3 christos : {$$ = NULL;}
257 1.1.1.3 christos | DWordConstExpr
258 1.1.1.3 christos | DWordList ',' /* Allows a trailing comma at list end */
259 1.1.1.3 christos | DWordList ','
260 1.1.1.3 christos DWordConstExpr {$$ = TrLinkPeerNode ($1,$3);}
261 1.1 christos ;
262 1.1 christos
263 1.1.1.3 christos FieldUnitList
264 1.1 christos : {$$ = NULL;}
265 1.1.1.3 christos | FieldUnit
266 1.1.1.3 christos | FieldUnitList ',' /* Allows a trailing comma at list end */
267 1.1.1.3 christos | FieldUnitList ','
268 1.1.1.3 christos FieldUnit {$$ = TrLinkPeerNode ($1,$3);}
269 1.1 christos ;
270 1.1 christos
271 1.1.1.3 christos FieldUnit
272 1.1.1.3 christos : FieldUnitEntry {}
273 1.1.1.3 christos | OffsetTerm {}
274 1.1.1.3 christos | AccessAsTerm {}
275 1.1.1.3 christos | ConnectionTerm {}
276 1.1.1.3 christos ;
277 1.1 christos
278 1.1.1.3 christos FieldUnitEntry
279 1.1.1.3 christos : ',' AmlPackageLengthTerm {$$ = TrCreateNode (PARSEOP_RESERVED_BYTES,1,$2);}
280 1.1.1.3 christos | NameSeg ','
281 1.1.1.3 christos AmlPackageLengthTerm {$$ = TrLinkChildNode ($1,$3);}
282 1.1.1.3 christos ;
283 1.1 christos
284 1.1.1.3 christos Object
285 1.1.1.3 christos : CompilerDirective {}
286 1.1.1.3 christos | NamedObject {}
287 1.1.1.3 christos | NameSpaceModifier {}
288 1.1.1.4.2.1 pgoyette // | StructureTerm {}
289 1.1 christos ;
290 1.1 christos
291 1.1.1.3 christos PackageList
292 1.1.1.3 christos : {$$ = NULL;}
293 1.1.1.3 christos | PackageElement
294 1.1.1.3 christos | PackageList ',' /* Allows a trailing comma at list end */
295 1.1.1.3 christos | PackageList ','
296 1.1.1.3 christos PackageElement {$$ = TrLinkPeerNode ($1,$3);}
297 1.1 christos ;
298 1.1 christos
299 1.1.1.3 christos PackageElement
300 1.1.1.3 christos : DataObject {}
301 1.1.1.3 christos | NameString {}
302 1.1 christos ;
303 1.1 christos
304 1.1.1.3 christos /* Rules for specifying the type of one method argument or return value */
305 1.1 christos
306 1.1 christos ParameterTypePackage
307 1.1 christos : {$$ = NULL;}
308 1.1 christos | ObjectTypeKeyword {$$ = $1;}
309 1.1 christos | ParameterTypePackage ','
310 1.1 christos ObjectTypeKeyword {$$ = TrLinkPeerNodes (2,$1,$3);}
311 1.1 christos ;
312 1.1 christos
313 1.1 christos ParameterTypePackageList
314 1.1 christos : {$$ = NULL;}
315 1.1 christos | ObjectTypeKeyword {$$ = $1;}
316 1.1 christos | '{' ParameterTypePackage '}' {$$ = $2;}
317 1.1 christos ;
318 1.1 christos
319 1.1 christos OptionalParameterTypePackage
320 1.1 christos : {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
321 1.1.1.4.2.1 pgoyette | ',' ParameterTypePackageList {$$ = TrLinkChildren (
322 1.1.1.4.2.1 pgoyette TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
323 1.1 christos ;
324 1.1 christos
325 1.1.1.3 christos /* Rules for specifying the types for method arguments */
326 1.1 christos
327 1.1 christos ParameterTypesPackage
328 1.1 christos : ParameterTypePackageList {$$ = $1;}
329 1.1 christos | ParameterTypesPackage ','
330 1.1 christos ParameterTypePackageList {$$ = TrLinkPeerNodes (2,$1,$3);}
331 1.1 christos ;
332 1.1 christos
333 1.1 christos ParameterTypesPackageList
334 1.1 christos : {$$ = NULL;}
335 1.1 christos | ObjectTypeKeyword {$$ = $1;}
336 1.1 christos | '{' ParameterTypesPackage '}' {$$ = $2;}
337 1.1 christos ;
338 1.1 christos
339 1.1 christos OptionalParameterTypesPackage
340 1.1 christos : {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
341 1.1.1.4.2.1 pgoyette | ',' ParameterTypesPackageList {$$ = TrLinkChildren (
342 1.1.1.4.2.1 pgoyette TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
343 1.1 christos ;
344 1.1 christos
345 1.1 christos /*
346 1.1.1.3 christos * Case-Default list; allow only one Default term and unlimited Case terms
347 1.1 christos */
348 1.1.1.3 christos CaseDefaultTermList
349 1.1.1.3 christos : {$$ = NULL;}
350 1.1.1.4.2.2 pgoyette | CaseTerm {}
351 1.1.1.4.2.2 pgoyette | DefaultTerm {}
352 1.1.1.3 christos | CaseDefaultTermList
353 1.1.1.3 christos CaseTerm {$$ = TrLinkPeerNode ($1,$2);}
354 1.1.1.3 christos | CaseDefaultTermList
355 1.1.1.3 christos DefaultTerm {$$ = TrLinkPeerNode ($1,$2);}
356 1.1 christos
357 1.1.1.3 christos /* Original - attempts to force zero or one default term within the switch */
358 1.1.1.3 christos
359 1.1.1.3 christos /*
360 1.1.1.3 christos CaseDefaultTermList
361 1.1.1.3 christos : {$$ = NULL;}
362 1.1.1.3 christos | CaseTermList
363 1.1.1.3 christos DefaultTerm
364 1.1.1.3 christos CaseTermList {$$ = TrLinkPeerNode ($1,TrLinkPeerNode ($2, $3));}
365 1.1.1.3 christos | CaseTermList
366 1.1.1.3 christos CaseTerm {$$ = TrLinkPeerNode ($1,$2);}
367 1.1.1.3 christos ;
368 1.1.1.3 christos
369 1.1.1.3 christos CaseTermList
370 1.1.1.3 christos : {$$ = NULL;}
371 1.1.1.3 christos | CaseTerm {}
372 1.1.1.3 christos | CaseTermList
373 1.1.1.3 christos CaseTerm {$$ = TrLinkPeerNode ($1,$2);}
374 1.1.1.3 christos ;
375 1.1.1.3 christos */
376 1.1.1.3 christos
377 1.1.1.3 christos
378 1.1.1.3 christos /*******************************************************************************
379 1.1.1.3 christos *
380 1.1.1.3 christos * ASL Data and Constant Terms
381 1.1.1.3 christos *
382 1.1.1.3 christos ******************************************************************************/
383 1.1.1.3 christos
384 1.1.1.3 christos DataObject
385 1.1.1.3 christos : BufferData {}
386 1.1.1.3 christos | PackageData {}
387 1.1.1.3 christos | IntegerData {}
388 1.1.1.3 christos | StringData {}
389 1.1.1.3 christos ;
390 1.1.1.3 christos
391 1.1.1.3 christos BufferData
392 1.1.1.3 christos : Type5Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
393 1.1.1.3 christos | Type2BufferOrStringOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
394 1.1.1.3 christos | Type2BufferOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
395 1.1.1.3 christos | BufferTerm {}
396 1.1.1.3 christos ;
397 1.1.1.3 christos
398 1.1.1.3 christos PackageData
399 1.1.1.3 christos : PackageTerm {}
400 1.1.1.3 christos ;
401 1.1.1.3 christos
402 1.1.1.3 christos IntegerData
403 1.1.1.3 christos : Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
404 1.1.1.3 christos | Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
405 1.1.1.3 christos | Integer {}
406 1.1.1.3 christos | ConstTerm {}
407 1.1.1.3 christos ;
408 1.1.1.3 christos
409 1.1.1.3 christos StringData
410 1.1.1.3 christos : Type2StringOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
411 1.1.1.3 christos | String {}
412 1.1.1.3 christos ;
413 1.1.1.3 christos
414 1.1.1.3 christos ByteConst
415 1.1.1.3 christos : Integer {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
416 1.1.1.3 christos ;
417 1.1.1.3 christos
418 1.1.1.3 christos WordConst
419 1.1.1.3 christos : Integer {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
420 1.1.1.3 christos ;
421 1.1.1.3 christos
422 1.1.1.3 christos DWordConst
423 1.1.1.3 christos : Integer {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
424 1.1.1.3 christos ;
425 1.1.1.3 christos
426 1.1.1.3 christos QWordConst
427 1.1.1.3 christos : Integer {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
428 1.1.1.3 christos ;
429 1.1.1.3 christos
430 1.1.1.3 christos /*
431 1.1.1.3 christos * The NODE_COMPILE_TIME_CONST flag in the following constant expressions
432 1.1.1.3 christos * enables compile-time constant folding to reduce the Type3Opcodes/Type2IntegerOpcodes
433 1.1.1.3 christos * to simple integers. It is an error if these types of expressions cannot be
434 1.1.1.3 christos * reduced, since the AML grammar for ****ConstExpr requires a simple constant.
435 1.1.1.3 christos * Note: The required byte length of the constant is passed through to the
436 1.1.1.3 christos * constant folding code in the node AmlLength field.
437 1.1.1.3 christos */
438 1.1.1.3 christos ByteConstExpr
439 1.1.1.4.2.1 pgoyette : Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
440 1.1.1.4.2.1 pgoyette TrSetNodeAmlLength ($1, 1);}
441 1.1.1.4.2.1 pgoyette | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
442 1.1.1.4.2.1 pgoyette TrSetNodeAmlLength ($1, 1);}
443 1.1.1.3 christos | ConstExprTerm {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
444 1.1.1.3 christos | ByteConst {}
445 1.1.1.3 christos ;
446 1.1.1.3 christos
447 1.1.1.3 christos WordConstExpr
448 1.1.1.4.2.1 pgoyette : Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
449 1.1.1.4.2.1 pgoyette TrSetNodeAmlLength ($1, 2);}
450 1.1.1.4.2.1 pgoyette | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
451 1.1.1.4.2.1 pgoyette TrSetNodeAmlLength ($1, 2);}
452 1.1.1.3 christos | ConstExprTerm {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
453 1.1.1.3 christos | WordConst {}
454 1.1.1.3 christos ;
455 1.1.1.3 christos
456 1.1.1.3 christos DWordConstExpr
457 1.1.1.4.2.1 pgoyette : Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
458 1.1.1.4.2.1 pgoyette TrSetNodeAmlLength ($1, 4);}
459 1.1.1.4.2.1 pgoyette | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
460 1.1.1.4.2.1 pgoyette TrSetNodeAmlLength ($1, 4);}
461 1.1.1.3 christos | ConstExprTerm {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
462 1.1.1.3 christos | DWordConst {}
463 1.1.1.3 christos ;
464 1.1.1.3 christos
465 1.1.1.3 christos QWordConstExpr
466 1.1.1.4.2.1 pgoyette : Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
467 1.1.1.4.2.1 pgoyette TrSetNodeAmlLength ($1, 8);}
468 1.1.1.4.2.1 pgoyette | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
469 1.1.1.4.2.1 pgoyette TrSetNodeAmlLength ($1, 8);}
470 1.1.1.3 christos | ConstExprTerm {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
471 1.1.1.3 christos | QWordConst {}
472 1.1.1.3 christos ;
473 1.1.1.3 christos
474 1.1.1.3 christos ConstTerm
475 1.1.1.3 christos : ConstExprTerm {}
476 1.1.1.3 christos | PARSEOP_REVISION {$$ = TrCreateLeafNode (PARSEOP_REVISION);}
477 1.1.1.3 christos ;
478 1.1.1.3 christos
479 1.1.1.3 christos ConstExprTerm
480 1.1.1.3 christos : PARSEOP_ZERO {$$ = TrCreateValuedLeafNode (PARSEOP_ZERO, 0);}
481 1.1.1.3 christos | PARSEOP_ONE {$$ = TrCreateValuedLeafNode (PARSEOP_ONE, 1);}
482 1.1.1.3 christos | PARSEOP_ONES {$$ = TrCreateValuedLeafNode (PARSEOP_ONES, ACPI_UINT64_MAX);}
483 1.1.1.3 christos | PARSEOP___DATE__ {$$ = TrCreateConstantLeafNode (PARSEOP___DATE__);}
484 1.1.1.3 christos | PARSEOP___FILE__ {$$ = TrCreateConstantLeafNode (PARSEOP___FILE__);}
485 1.1.1.3 christos | PARSEOP___LINE__ {$$ = TrCreateConstantLeafNode (PARSEOP___LINE__);}
486 1.1.1.3 christos | PARSEOP___PATH__ {$$ = TrCreateConstantLeafNode (PARSEOP___PATH__);}
487 1.1.1.3 christos ;
488 1.1.1.3 christos
489 1.1.1.3 christos Integer
490 1.1.1.4.2.1 pgoyette : PARSEOP_INTEGER {$$ = TrCreateValuedLeafNode (PARSEOP_INTEGER,
491 1.1.1.4.2.1 pgoyette AslCompilerlval.i);}
492 1.1.1.3 christos ;
493 1.1.1.3 christos
494 1.1.1.3 christos String
495 1.1.1.4.2.1 pgoyette : PARSEOP_STRING_LITERAL {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL,
496 1.1.1.4.2.1 pgoyette (ACPI_NATIVE_INT) AslCompilerlval.s);}
497 1.1.1.3 christos ;
498 1.1.1.3 christos
499 1.1.1.3 christos
500 1.1.1.3 christos /*******************************************************************************
501 1.1.1.3 christos *
502 1.1.1.3 christos * ASL Opcode Terms
503 1.1.1.3 christos *
504 1.1.1.3 christos ******************************************************************************/
505 1.1.1.3 christos
506 1.1.1.3 christos CompilerDirective
507 1.1.1.3 christos : IncludeTerm {}
508 1.1.1.3 christos | IncludeEndTerm {}
509 1.1.1.3 christos | ExternalTerm {}
510 1.1.1.3 christos ;
511 1.1.1.3 christos
512 1.1.1.3 christos NamedObject
513 1.1.1.3 christos : BankFieldTerm {}
514 1.1.1.3 christos | CreateBitFieldTerm {}
515 1.1.1.3 christos | CreateByteFieldTerm {}
516 1.1.1.3 christos | CreateDWordFieldTerm {}
517 1.1.1.3 christos | CreateFieldTerm {}
518 1.1.1.3 christos | CreateQWordFieldTerm {}
519 1.1.1.3 christos | CreateWordFieldTerm {}
520 1.1.1.3 christos | DataRegionTerm {}
521 1.1.1.3 christos | DeviceTerm {}
522 1.1.1.3 christos | EventTerm {}
523 1.1.1.3 christos | FieldTerm {}
524 1.1.1.3 christos | FunctionTerm {}
525 1.1.1.3 christos | IndexFieldTerm {}
526 1.1.1.3 christos | MethodTerm {}
527 1.1.1.3 christos | MutexTerm {}
528 1.1.1.3 christos | OpRegionTerm {}
529 1.1.1.3 christos | PowerResTerm {}
530 1.1.1.3 christos | ProcessorTerm {}
531 1.1.1.3 christos | ThermalZoneTerm {}
532 1.1.1.3 christos ;
533 1.1.1.3 christos
534 1.1.1.3 christos NameSpaceModifier
535 1.1.1.3 christos : AliasTerm {}
536 1.1.1.3 christos | NameTerm {}
537 1.1.1.4.2.1 pgoyette // | NameTermAslPlus {}
538 1.1.1.3 christos | ScopeTerm {}
539 1.1.1.3 christos ;
540 1.1.1.3 christos
541 1.1.1.4.2.2 pgoyette SimpleName
542 1.1.1.3 christos : NameString {}
543 1.1.1.3 christos | LocalTerm {}
544 1.1.1.4.2.2 pgoyette | ArgTerm {}
545 1.1.1.4.2.2 pgoyette ;
546 1.1.1.4.2.2 pgoyette
547 1.1.1.4.2.2 pgoyette /* For ObjectType(), SuperName except for MethodInvocationTerm */
548 1.1.1.4.2.2 pgoyette
549 1.1.1.4.2.2 pgoyette ObjectTypeSource
550 1.1.1.4.2.2 pgoyette : SimpleName {}
551 1.1.1.3 christos | DebugTerm {}
552 1.1.1.3 christos | RefOfTerm {}
553 1.1.1.3 christos | DerefOfTerm {}
554 1.1.1.3 christos | IndexTerm {}
555 1.1.1.4.2.1 pgoyette | IndexExpTerm {}
556 1.1.1.3 christos ;
557 1.1.1.3 christos
558 1.1.1.4.2.2 pgoyette /* For DeRefOf(), SuperName except for DerefOf and Debug */
559 1.1.1.4.2.2 pgoyette
560 1.1.1.4.2.2 pgoyette DerefOfSource
561 1.1.1.4.2.2 pgoyette : SimpleName {}
562 1.1.1.4.2.2 pgoyette | RefOfTerm {}
563 1.1.1.4.2.2 pgoyette | DerefOfTerm {}
564 1.1.1.4.2.2 pgoyette | IndexTerm {}
565 1.1.1.4.2.2 pgoyette | IndexExpTerm {}
566 1.1.1.4.2.2 pgoyette | StoreTerm {}
567 1.1.1.4.2.2 pgoyette | EqualsTerm {}
568 1.1.1.4.2.2 pgoyette | MethodInvocationTerm {}
569 1.1.1.3 christos ;
570 1.1.1.3 christos
571 1.1.1.4.2.2 pgoyette /* For RefOf(), SuperName except for RefOf and MethodInvocationTerm */
572 1.1.1.4.2.2 pgoyette
573 1.1.1.4.2.2 pgoyette RefOfSource
574 1.1.1.4.2.2 pgoyette : SimpleName {}
575 1.1.1.4.2.2 pgoyette | DebugTerm {}
576 1.1.1.4.2.2 pgoyette | DerefOfTerm {}
577 1.1.1.4.2.2 pgoyette | IndexTerm {}
578 1.1.1.4.2.2 pgoyette | IndexExpTerm {}
579 1.1.1.3 christos ;
580 1.1.1.3 christos
581 1.1.1.4.2.2 pgoyette /* For CondRefOf(), SuperName except for RefOf and MethodInvocationTerm */
582 1.1.1.4.2.2 pgoyette
583 1.1.1.4.2.2 pgoyette CondRefOfSource
584 1.1.1.4.2.2 pgoyette : SimpleName {}
585 1.1.1.4.2.2 pgoyette | DebugTerm {}
586 1.1.1.4.2.2 pgoyette | DerefOfTerm {}
587 1.1.1.4.2.2 pgoyette | IndexTerm {}
588 1.1.1.4.2.2 pgoyette | IndexExpTerm {}
589 1.1.1.4.2.2 pgoyette ;
590 1.1.1.3 christos
591 1.1.1.4.2.2 pgoyette /*
592 1.1.1.4.2.2 pgoyette * Opcode types, as defined in the ACPI specification
593 1.1.1.4.2.2 pgoyette */
594 1.1.1.3 christos Type1Opcode
595 1.1.1.3 christos : BreakTerm {}
596 1.1.1.3 christos | BreakPointTerm {}
597 1.1.1.3 christos | ContinueTerm {}
598 1.1.1.3 christos | FatalTerm {}
599 1.1.1.4 christos | ForTerm {}
600 1.1.1.3 christos | ElseIfTerm {}
601 1.1.1.3 christos | LoadTerm {}
602 1.1.1.3 christos | NoOpTerm {}
603 1.1.1.3 christos | NotifyTerm {}
604 1.1.1.3 christos | ReleaseTerm {}
605 1.1.1.3 christos | ResetTerm {}
606 1.1.1.3 christos | ReturnTerm {}
607 1.1.1.3 christos | SignalTerm {}
608 1.1.1.3 christos | SleepTerm {}
609 1.1.1.3 christos | StallTerm {}
610 1.1.1.3 christos | SwitchTerm {}
611 1.1.1.3 christos | UnloadTerm {}
612 1.1.1.3 christos | WhileTerm {}
613 1.1.1.3 christos ;
614 1.1.1.3 christos
615 1.1.1.3 christos Type2Opcode
616 1.1.1.3 christos : AcquireTerm {}
617 1.1.1.3 christos | CondRefOfTerm {}
618 1.1.1.3 christos | CopyObjectTerm {}
619 1.1.1.3 christos | DerefOfTerm {}
620 1.1.1.3 christos | ObjectTypeTerm {}
621 1.1.1.3 christos | RefOfTerm {}
622 1.1.1.3 christos | SizeOfTerm {}
623 1.1.1.3 christos | StoreTerm {}
624 1.1.1.3 christos | EqualsTerm {}
625 1.1.1.3 christos | TimerTerm {}
626 1.1.1.3 christos | WaitTerm {}
627 1.1.1.3 christos | MethodInvocationTerm {}
628 1.1.1.3 christos ;
629 1.1.1.3 christos
630 1.1.1.3 christos /*
631 1.1.1.3 christos * Type 3/4/5 opcodes
632 1.1.1.3 christos */
633 1.1.1.3 christos Type2IntegerOpcode /* "Type3" opcodes */
634 1.1.1.3 christos : Expression {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
635 1.1.1.3 christos | AddTerm {}
636 1.1.1.3 christos | AndTerm {}
637 1.1 christos | DecTerm {}
638 1.1 christos | DivideTerm {}
639 1.1 christos | FindSetLeftBitTerm {}
640 1.1 christos | FindSetRightBitTerm {}
641 1.1 christos | FromBCDTerm {}
642 1.1 christos | IncTerm {}
643 1.1 christos | IndexTerm {}
644 1.1.1.4.2.1 pgoyette // | StructureIndexTerm {}
645 1.1.1.4.2.1 pgoyette // | StructurePointerTerm {}
646 1.1 christos | LAndTerm {}
647 1.1 christos | LEqualTerm {}
648 1.1 christos | LGreaterTerm {}
649 1.1 christos | LGreaterEqualTerm {}
650 1.1 christos | LLessTerm {}
651 1.1 christos | LLessEqualTerm {}
652 1.1 christos | LNotTerm {}
653 1.1 christos | LNotEqualTerm {}
654 1.1 christos | LoadTableTerm {}
655 1.1 christos | LOrTerm {}
656 1.1 christos | MatchTerm {}
657 1.1 christos | ModTerm {}
658 1.1 christos | MultiplyTerm {}
659 1.1 christos | NAndTerm {}
660 1.1 christos | NOrTerm {}
661 1.1 christos | NotTerm {}
662 1.1 christos | OrTerm {}
663 1.1 christos | ShiftLeftTerm {}
664 1.1 christos | ShiftRightTerm {}
665 1.1 christos | SubtractTerm {}
666 1.1 christos | ToBCDTerm {}
667 1.1 christos | ToIntegerTerm {}
668 1.1 christos | XOrTerm {}
669 1.1 christos ;
670 1.1 christos
671 1.1 christos Type2StringOpcode /* "Type4" Opcodes */
672 1.1 christos : ToDecimalStringTerm {}
673 1.1 christos | ToHexStringTerm {}
674 1.1 christos | ToStringTerm {}
675 1.1 christos ;
676 1.1 christos
677 1.1 christos Type2BufferOpcode /* "Type5" Opcodes */
678 1.1 christos : ToBufferTerm {}
679 1.1 christos | ConcatResTerm {}
680 1.1 christos ;
681 1.1 christos
682 1.1 christos Type2BufferOrStringOpcode
683 1.1.1.2 christos : ConcatTerm {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
684 1.1.1.2 christos | PrintfTerm {}
685 1.1.1.2 christos | FprintfTerm {}
686 1.1 christos | MidTerm {}
687 1.1 christos ;
688 1.1 christos
689 1.1 christos /*
690 1.1 christos * A type 3 opcode evaluates to an Integer and cannot have a destination operand
691 1.1 christos */
692 1.1 christos Type3Opcode
693 1.1 christos : EISAIDTerm {}
694 1.1 christos ;
695 1.1 christos
696 1.1 christos /* Obsolete
697 1.1 christos Type4Opcode
698 1.1 christos : ConcatTerm {}
699 1.1 christos | ToDecimalStringTerm {}
700 1.1 christos | ToHexStringTerm {}
701 1.1 christos | MidTerm {}
702 1.1 christos | ToStringTerm {}
703 1.1 christos ;
704 1.1 christos */
705 1.1 christos
706 1.1.1.4.2.1 pgoyette /* Type 5 opcodes are a subset of Type2 opcodes, and return a constant */
707 1.1.1.4.2.1 pgoyette
708 1.1 christos Type5Opcode
709 1.1 christos : ResourceTemplateTerm {}
710 1.1 christos | UnicodeTerm {}
711 1.1.1.2 christos | ToPLDTerm {}
712 1.1 christos | ToUUIDTerm {}
713 1.1 christos ;
714 1.1 christos
715 1.1 christos Type6Opcode
716 1.1 christos : RefOfTerm {}
717 1.1 christos | DerefOfTerm {}
718 1.1 christos | IndexTerm {}
719 1.1.1.3 christos | IndexExpTerm {}
720 1.1.1.4.2.1 pgoyette // | StructureIndexTerm {}
721 1.1.1.4.2.1 pgoyette // | StructurePointerTerm {}
722 1.1.1.2 christos | MethodInvocationTerm {}
723 1.1 christos ;
724 1.1 christos
725 1.1 christos
726 1.1.1.3 christos /*******************************************************************************
727 1.1.1.3 christos *
728 1.1.1.3 christos * ASL Helper Terms
729 1.1.1.3 christos *
730 1.1.1.3 christos ******************************************************************************/
731 1.1 christos
732 1.1 christos AmlPackageLengthTerm
733 1.1.1.4.2.1 pgoyette : Integer {$$ = TrUpdateNode (PARSEOP_PACKAGE_LENGTH,
734 1.1.1.4.2.1 pgoyette (ACPI_PARSE_OBJECT *) $1);}
735 1.1 christos ;
736 1.1 christos
737 1.1 christos NameStringItem
738 1.1 christos : ',' NameString {$$ = $2;}
739 1.1 christos | ',' error {$$ = AslDoError (); yyclearin;}
740 1.1 christos ;
741 1.1 christos
742 1.1 christos TermArgItem
743 1.1 christos : ',' TermArg {$$ = $2;}
744 1.1 christos | ',' error {$$ = AslDoError (); yyclearin;}
745 1.1 christos ;
746 1.1 christos
747 1.1 christos OptionalReference
748 1.1 christos : {$$ = TrCreateLeafNode (PARSEOP_ZERO);} /* Placeholder is a ZeroOp object */
749 1.1 christos | ',' {$$ = TrCreateLeafNode (PARSEOP_ZERO);} /* Placeholder is a ZeroOp object */
750 1.1 christos | ',' TermArg {$$ = $2;}
751 1.1 christos ;
752 1.1 christos
753 1.1 christos OptionalReturnArg
754 1.1.1.4.2.1 pgoyette : {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO),
755 1.1.1.4.2.1 pgoyette NODE_IS_NULL_RETURN);} /* Placeholder is a ZeroOp object */
756 1.1 christos | TermArg {$$ = $1;}
757 1.1 christos ;
758 1.1 christos
759 1.1 christos OptionalSerializeRuleKeyword
760 1.1 christos : {$$ = NULL;}
761 1.1 christos | ',' {$$ = NULL;}
762 1.1 christos | ',' SerializeRuleKeyword {$$ = $2;}
763 1.1 christos ;
764 1.1 christos
765 1.1 christos OptionalTermArg
766 1.1.1.4 christos : {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
767 1.1.1.4 christos | TermArg {$$ = $1;}
768 1.1.1.4 christos ;
769 1.1.1.4 christos
770 1.1 christos OptionalWordConst
771 1.1 christos : {$$ = NULL;}
772 1.1 christos | WordConst {$$ = $1;}
773 1.1 christos ;
774