aslrules.y revision 1.1.1.1.2.4 1 1.1 christos NoEcho('
2 1.1 christos /******************************************************************************
3 1.1 christos *
4 1.1.1.1.2.2 skrll * 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.1.2.2 skrll * Copyright (C) 2000 - 2016, 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.1.2.2 skrll * 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.1.2.2 skrll * 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.1.2.2 skrll AslCode
58 1.1.1.1.2.4 skrll : DefinitionBlockList {$<n>$ = TrLinkChildren (
59 1.1.1.1.2.4 skrll 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.1.2.3 skrll *
79 1.1.1.1.2.3 skrll * 04/2016: The module-level code is now allowed in the following terms:
80 1.1.1.1.2.3 skrll * DeviceTerm, PowerResTerm, ProcessorTerm, ScopeTerm, ThermalZoneTerm.
81 1.1.1.1.2.3 skrll * The ObjectList term is obsolete and has been removed.
82 1.1 christos */
83 1.1 christos DefinitionBlockTerm
84 1.1.1.1.2.2 skrll : PARSEOP_DEFINITION_BLOCK '(' {$<n>$ = TrCreateLeafNode (PARSEOP_DEFINITION_BLOCK);}
85 1.1 christos String ','
86 1.1 christos String ','
87 1.1 christos ByteConst ','
88 1.1 christos String ','
89 1.1 christos String ','
90 1.1 christos DWordConst
91 1.1 christos ')' {TrSetEndLineNumber ($<n>3);}
92 1.1.1.1.2.4 skrll '{' TermList '}' {$$ = TrLinkChildren ($<n>3,7,
93 1.1.1.1.2.4 skrll $4,$6,$8,$10,$12,$14,$18);}
94 1.1 christos ;
95 1.1 christos
96 1.1.1.1.2.2 skrll DefinitionBlockList
97 1.1.1.1.2.2 skrll : DefinitionBlockTerm
98 1.1.1.1.2.2 skrll | DefinitionBlockTerm
99 1.1.1.1.2.2 skrll DefinitionBlockList {$$ = TrLinkPeerNodes (2, $1,$2);}
100 1.1.1.1.2.1 skrll ;
101 1.1.1.1.2.1 skrll
102 1.1.1.1.2.4 skrll /* Allow IO, DMA, IRQ Resource macro and FOR macro names to also be used as identifiers */
103 1.1.1.1.2.4 skrll
104 1.1.1.1.2.4 skrll NameString
105 1.1.1.1.2.4 skrll : NameSeg {}
106 1.1.1.1.2.4 skrll | PARSEOP_NAMESTRING {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) $1);}
107 1.1.1.1.2.4 skrll | PARSEOP_IO {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IO");}
108 1.1.1.1.2.4 skrll | PARSEOP_DMA {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "DMA");}
109 1.1.1.1.2.4 skrll | PARSEOP_IRQ {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "IRQ");}
110 1.1.1.1.2.4 skrll | PARSEOP_FOR {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESTRING, (ACPI_NATIVE_INT) "FOR");}
111 1.1.1.1.2.4 skrll ;
112 1.1.1.1.2.4 skrll /*
113 1.1.1.1.2.4 skrll NameSeg
114 1.1.1.1.2.4 skrll : PARSEOP_NAMESEG {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESEG, (ACPI_NATIVE_INT)
115 1.1.1.1.2.4 skrll TrNormalizeNameSeg ($1));}
116 1.1.1.1.2.4 skrll ;
117 1.1.1.1.2.4 skrll */
118 1.1.1.1.2.4 skrll
119 1.1.1.1.2.4 skrll NameSeg
120 1.1.1.1.2.4 skrll : PARSEOP_NAMESEG {$$ = TrCreateValuedLeafNode (PARSEOP_NAMESEG,
121 1.1.1.1.2.4 skrll (ACPI_NATIVE_INT) AslCompilerlval.s);}
122 1.1.1.1.2.4 skrll ;
123 1.1.1.1.2.4 skrll
124 1.1.1.1.2.4 skrll
125 1.1.1.1.2.2 skrll SuperName
126 1.1.1.1.2.2 skrll : NameString {}
127 1.1.1.1.2.2 skrll | ArgTerm {}
128 1.1.1.1.2.2 skrll | LocalTerm {}
129 1.1.1.1.2.2 skrll | DebugTerm {}
130 1.1.1.1.2.2 skrll | Type6Opcode {}
131 1.1.1.1.2.4 skrll ;
132 1.1.1.1.2.1 skrll
133 1.1.1.1.2.2 skrll Target
134 1.1.1.1.2.2 skrll : {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */
135 1.1.1.1.2.2 skrll | ',' {$$ = TrCreateNullTarget ();} /* Placeholder is a ZeroOp object */
136 1.1.1.1.2.2 skrll | ',' SuperName {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
137 1.1 christos ;
138 1.1 christos
139 1.1.1.1.2.2 skrll TermArg
140 1.1.1.1.2.2 skrll : Type2Opcode {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
141 1.1.1.1.2.2 skrll | DataObject {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
142 1.1.1.1.2.2 skrll | NameString {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
143 1.1.1.1.2.2 skrll | ArgTerm {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
144 1.1.1.1.2.2 skrll | LocalTerm {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
145 1.1.1.1.2.4 skrll
146 1.1.1.1.2.4 skrll
147 1.1 christos ;
148 1.1 christos
149 1.1.1.1.2.2 skrll /*
150 1.1.1.1.2.2 skrll NOTE: Removed from TermArg due to reduce/reduce conflicts:
151 1.1.1.1.2.2 skrll | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
152 1.1.1.1.2.2 skrll | Type2StringOpcode {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
153 1.1.1.1.2.2 skrll | Type2BufferOpcode {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
154 1.1.1.1.2.2 skrll | Type2BufferOrStringOpcode {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
155 1.1 christos
156 1.1.1.1.2.2 skrll */
157 1.1 christos
158 1.1.1.1.2.2 skrll MethodInvocationTerm
159 1.1.1.1.2.2 skrll : NameString '(' {TrUpdateNode (PARSEOP_METHODCALL, $1);}
160 1.1.1.1.2.2 skrll ArgList ')' {$$ = TrLinkChildNode ($1,$4);}
161 1.1 christos ;
162 1.1 christos
163 1.1.1.1.2.2 skrll /* OptionalCount must appear before ByteList or an incorrect reduction will result */
164 1.1 christos
165 1.1.1.1.2.2 skrll OptionalCount
166 1.1.1.1.2.2 skrll : {$$ = TrCreateLeafNode (PARSEOP_ONES);} /* Placeholder is a OnesOp object */
167 1.1.1.1.2.2 skrll | ',' {$$ = TrCreateLeafNode (PARSEOP_ONES);} /* Placeholder is a OnesOp object */
168 1.1.1.1.2.2 skrll | ',' TermArg {$$ = $2;}
169 1.1 christos ;
170 1.1 christos
171 1.1.1.1.2.4 skrll /*
172 1.1.1.1.2.4 skrll * Data count for buffers and packages (byte count for buffers,
173 1.1.1.1.2.4 skrll * element count for packages).
174 1.1.1.1.2.4 skrll */
175 1.1.1.1.2.4 skrll OptionalDataCount
176 1.1.1.1.2.4 skrll
177 1.1.1.1.2.4 skrll /* Legacy ASL */
178 1.1.1.1.2.4 skrll : {$$ = NULL;}
179 1.1.1.1.2.4 skrll | '(' TermArg ')' {$$ = $2;}
180 1.1.1.1.2.4 skrll | '(' ')' {$$ = NULL;}
181 1.1.1.1.2.4 skrll
182 1.1.1.1.2.4 skrll /* C-style (ASL+) -- adds equals term */
183 1.1.1.1.2.4 skrll
184 1.1.1.1.2.4 skrll | PARSEOP_EXP_EQUALS {$$ = NULL;}
185 1.1.1.1.2.4 skrll
186 1.1.1.1.2.4 skrll | '(' TermArg ')'
187 1.1.1.1.2.4 skrll PARSEOP_EXP_EQUALS {$$ = $2;}
188 1.1.1.1.2.4 skrll
189 1.1.1.1.2.4 skrll | '(' ')' String
190 1.1.1.1.2.4 skrll PARSEOP_EXP_EQUALS {$$ = NULL;}
191 1.1 christos ;
192 1.1 christos
193 1.1 christos
194 1.1.1.1.2.2 skrll /******* List Terms **************************************************/
195 1.1 christos
196 1.1.1.1.2.2 skrll ArgList
197 1.1.1.1.2.2 skrll : {$$ = NULL;}
198 1.1.1.1.2.2 skrll | TermArg
199 1.1.1.1.2.2 skrll | ArgList ',' /* Allows a trailing comma at list end */
200 1.1.1.1.2.2 skrll | ArgList ','
201 1.1.1.1.2.2 skrll TermArg {$$ = TrLinkPeerNode ($1,$3);}
202 1.1 christos ;
203 1.1 christos
204 1.1.1.1.2.2 skrll ByteList
205 1.1.1.1.2.2 skrll : {$$ = NULL;}
206 1.1.1.1.2.2 skrll | ByteConstExpr
207 1.1.1.1.2.2 skrll | ByteList ',' /* Allows a trailing comma at list end */
208 1.1.1.1.2.2 skrll | ByteList ','
209 1.1.1.1.2.2 skrll ByteConstExpr {$$ = TrLinkPeerNode ($1,$3);}
210 1.1 christos ;
211 1.1 christos
212 1.1.1.1.2.2 skrll DWordList
213 1.1.1.1.2.2 skrll : {$$ = NULL;}
214 1.1.1.1.2.2 skrll | DWordConstExpr
215 1.1.1.1.2.2 skrll | DWordList ',' /* Allows a trailing comma at list end */
216 1.1.1.1.2.2 skrll | DWordList ','
217 1.1.1.1.2.2 skrll DWordConstExpr {$$ = TrLinkPeerNode ($1,$3);}
218 1.1 christos ;
219 1.1 christos
220 1.1.1.1.2.2 skrll FieldUnitList
221 1.1 christos : {$$ = NULL;}
222 1.1.1.1.2.2 skrll | FieldUnit
223 1.1.1.1.2.2 skrll | FieldUnitList ',' /* Allows a trailing comma at list end */
224 1.1.1.1.2.2 skrll | FieldUnitList ','
225 1.1.1.1.2.2 skrll FieldUnit {$$ = TrLinkPeerNode ($1,$3);}
226 1.1 christos ;
227 1.1 christos
228 1.1.1.1.2.2 skrll FieldUnit
229 1.1.1.1.2.2 skrll : FieldUnitEntry {}
230 1.1.1.1.2.2 skrll | OffsetTerm {}
231 1.1.1.1.2.2 skrll | AccessAsTerm {}
232 1.1.1.1.2.2 skrll | ConnectionTerm {}
233 1.1.1.1.2.2 skrll ;
234 1.1 christos
235 1.1.1.1.2.2 skrll FieldUnitEntry
236 1.1.1.1.2.2 skrll : ',' AmlPackageLengthTerm {$$ = TrCreateNode (PARSEOP_RESERVED_BYTES,1,$2);}
237 1.1.1.1.2.2 skrll | NameSeg ','
238 1.1.1.1.2.2 skrll AmlPackageLengthTerm {$$ = TrLinkChildNode ($1,$3);}
239 1.1.1.1.2.2 skrll ;
240 1.1 christos
241 1.1.1.1.2.2 skrll Object
242 1.1.1.1.2.2 skrll : CompilerDirective {}
243 1.1.1.1.2.2 skrll | NamedObject {}
244 1.1.1.1.2.2 skrll | NameSpaceModifier {}
245 1.1.1.1.2.4 skrll // | StructureTerm {}
246 1.1 christos ;
247 1.1 christos
248 1.1.1.1.2.2 skrll PackageList
249 1.1.1.1.2.2 skrll : {$$ = NULL;}
250 1.1.1.1.2.2 skrll | PackageElement
251 1.1.1.1.2.2 skrll | PackageList ',' /* Allows a trailing comma at list end */
252 1.1.1.1.2.2 skrll | PackageList ','
253 1.1.1.1.2.2 skrll PackageElement {$$ = TrLinkPeerNode ($1,$3);}
254 1.1 christos ;
255 1.1 christos
256 1.1.1.1.2.2 skrll PackageElement
257 1.1.1.1.2.2 skrll : DataObject {}
258 1.1.1.1.2.2 skrll | NameString {}
259 1.1 christos ;
260 1.1 christos
261 1.1.1.1.2.2 skrll /* Rules for specifying the type of one method argument or return value */
262 1.1 christos
263 1.1 christos ParameterTypePackage
264 1.1 christos : {$$ = NULL;}
265 1.1 christos | ObjectTypeKeyword {$$ = $1;}
266 1.1 christos | ParameterTypePackage ','
267 1.1 christos ObjectTypeKeyword {$$ = TrLinkPeerNodes (2,$1,$3);}
268 1.1 christos ;
269 1.1 christos
270 1.1 christos ParameterTypePackageList
271 1.1 christos : {$$ = NULL;}
272 1.1 christos | ObjectTypeKeyword {$$ = $1;}
273 1.1 christos | '{' ParameterTypePackage '}' {$$ = $2;}
274 1.1 christos ;
275 1.1 christos
276 1.1 christos OptionalParameterTypePackage
277 1.1 christos : {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
278 1.1.1.1.2.4 skrll | ',' ParameterTypePackageList {$$ = TrLinkChildren (
279 1.1.1.1.2.4 skrll TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
280 1.1 christos ;
281 1.1 christos
282 1.1.1.1.2.2 skrll /* Rules for specifying the types for method arguments */
283 1.1 christos
284 1.1 christos ParameterTypesPackage
285 1.1 christos : ParameterTypePackageList {$$ = $1;}
286 1.1 christos | ParameterTypesPackage ','
287 1.1 christos ParameterTypePackageList {$$ = TrLinkPeerNodes (2,$1,$3);}
288 1.1 christos ;
289 1.1 christos
290 1.1 christos ParameterTypesPackageList
291 1.1 christos : {$$ = NULL;}
292 1.1 christos | ObjectTypeKeyword {$$ = $1;}
293 1.1 christos | '{' ParameterTypesPackage '}' {$$ = $2;}
294 1.1 christos ;
295 1.1 christos
296 1.1 christos OptionalParameterTypesPackage
297 1.1 christos : {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
298 1.1.1.1.2.4 skrll | ',' ParameterTypesPackageList {$$ = TrLinkChildren (
299 1.1.1.1.2.4 skrll TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
300 1.1 christos ;
301 1.1 christos
302 1.1.1.1.2.2 skrll /* ACPI 3.0 -- allow semicolons between terms */
303 1.1 christos
304 1.1.1.1.2.2 skrll TermList
305 1.1.1.1.2.2 skrll : {$$ = NULL;}
306 1.1.1.1.2.4 skrll | TermList Term {$$ = TrLinkPeerNode (
307 1.1.1.1.2.4 skrll TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
308 1.1.1.1.2.4 skrll | TermList Term ';' {$$ = TrLinkPeerNode (
309 1.1.1.1.2.4 skrll TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
310 1.1.1.1.2.4 skrll | TermList ';' Term {$$ = TrLinkPeerNode (
311 1.1.1.1.2.4 skrll TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
312 1.1.1.1.2.4 skrll | TermList ';' Term ';' {$$ = TrLinkPeerNode (
313 1.1.1.1.2.4 skrll TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
314 1.1 christos ;
315 1.1 christos
316 1.1.1.1.2.2 skrll Term
317 1.1.1.1.2.2 skrll : Object {}
318 1.1.1.1.2.2 skrll | Type1Opcode {}
319 1.1.1.1.2.2 skrll | Type2Opcode {}
320 1.1.1.1.2.2 skrll | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
321 1.1.1.1.2.2 skrll | Type2StringOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
322 1.1.1.1.2.2 skrll | Type2BufferOpcode {}
323 1.1.1.1.2.2 skrll | Type2BufferOrStringOpcode {}
324 1.1.1.1.2.2 skrll | error {$$ = AslDoError(); yyclearin;}
325 1.1 christos ;
326 1.1 christos
327 1.1 christos /*
328 1.1.1.1.2.2 skrll * Case-Default list; allow only one Default term and unlimited Case terms
329 1.1 christos */
330 1.1.1.1.2.2 skrll CaseDefaultTermList
331 1.1.1.1.2.2 skrll : {$$ = NULL;}
332 1.1.1.1.2.2 skrll | CaseTerm {}
333 1.1.1.1.2.2 skrll | DefaultTerm {}
334 1.1.1.1.2.2 skrll | CaseDefaultTermList
335 1.1.1.1.2.2 skrll CaseTerm {$$ = TrLinkPeerNode ($1,$2);}
336 1.1.1.1.2.2 skrll | CaseDefaultTermList
337 1.1.1.1.2.2 skrll DefaultTerm {$$ = TrLinkPeerNode ($1,$2);}
338 1.1 christos
339 1.1.1.1.2.2 skrll /* Original - attempts to force zero or one default term within the switch */
340 1.1.1.1.2.2 skrll
341 1.1.1.1.2.2 skrll /*
342 1.1.1.1.2.2 skrll CaseDefaultTermList
343 1.1.1.1.2.2 skrll : {$$ = NULL;}
344 1.1.1.1.2.2 skrll | CaseTermList
345 1.1.1.1.2.2 skrll DefaultTerm
346 1.1.1.1.2.2 skrll CaseTermList {$$ = TrLinkPeerNode ($1,TrLinkPeerNode ($2, $3));}
347 1.1.1.1.2.2 skrll | CaseTermList
348 1.1.1.1.2.2 skrll CaseTerm {$$ = TrLinkPeerNode ($1,$2);}
349 1.1.1.1.2.2 skrll ;
350 1.1.1.1.2.2 skrll
351 1.1.1.1.2.2 skrll CaseTermList
352 1.1.1.1.2.2 skrll : {$$ = NULL;}
353 1.1.1.1.2.2 skrll | CaseTerm {}
354 1.1.1.1.2.2 skrll | CaseTermList
355 1.1.1.1.2.2 skrll CaseTerm {$$ = TrLinkPeerNode ($1,$2);}
356 1.1.1.1.2.2 skrll ;
357 1.1.1.1.2.2 skrll */
358 1.1.1.1.2.2 skrll
359 1.1.1.1.2.2 skrll
360 1.1.1.1.2.2 skrll /*******************************************************************************
361 1.1.1.1.2.2 skrll *
362 1.1.1.1.2.2 skrll * ASL Data and Constant Terms
363 1.1.1.1.2.2 skrll *
364 1.1.1.1.2.2 skrll ******************************************************************************/
365 1.1.1.1.2.2 skrll
366 1.1.1.1.2.2 skrll DataObject
367 1.1.1.1.2.2 skrll : BufferData {}
368 1.1.1.1.2.2 skrll | PackageData {}
369 1.1.1.1.2.2 skrll | IntegerData {}
370 1.1.1.1.2.2 skrll | StringData {}
371 1.1.1.1.2.2 skrll ;
372 1.1.1.1.2.2 skrll
373 1.1.1.1.2.2 skrll BufferData
374 1.1.1.1.2.2 skrll : Type5Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
375 1.1.1.1.2.2 skrll | Type2BufferOrStringOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
376 1.1.1.1.2.2 skrll | Type2BufferOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
377 1.1.1.1.2.2 skrll | BufferTerm {}
378 1.1.1.1.2.2 skrll ;
379 1.1.1.1.2.2 skrll
380 1.1.1.1.2.2 skrll PackageData
381 1.1.1.1.2.2 skrll : PackageTerm {}
382 1.1.1.1.2.2 skrll ;
383 1.1.1.1.2.2 skrll
384 1.1.1.1.2.2 skrll IntegerData
385 1.1.1.1.2.2 skrll : Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
386 1.1.1.1.2.2 skrll | Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
387 1.1.1.1.2.2 skrll | Integer {}
388 1.1.1.1.2.2 skrll | ConstTerm {}
389 1.1.1.1.2.2 skrll ;
390 1.1.1.1.2.2 skrll
391 1.1.1.1.2.2 skrll StringData
392 1.1.1.1.2.2 skrll : Type2StringOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
393 1.1.1.1.2.2 skrll | String {}
394 1.1.1.1.2.2 skrll ;
395 1.1.1.1.2.2 skrll
396 1.1.1.1.2.2 skrll ByteConst
397 1.1.1.1.2.2 skrll : Integer {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
398 1.1.1.1.2.2 skrll ;
399 1.1.1.1.2.2 skrll
400 1.1.1.1.2.2 skrll WordConst
401 1.1.1.1.2.2 skrll : Integer {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
402 1.1.1.1.2.2 skrll ;
403 1.1.1.1.2.2 skrll
404 1.1.1.1.2.2 skrll DWordConst
405 1.1.1.1.2.2 skrll : Integer {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
406 1.1.1.1.2.2 skrll ;
407 1.1.1.1.2.2 skrll
408 1.1.1.1.2.2 skrll QWordConst
409 1.1.1.1.2.2 skrll : Integer {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
410 1.1.1.1.2.2 skrll ;
411 1.1.1.1.2.2 skrll
412 1.1.1.1.2.2 skrll /*
413 1.1.1.1.2.2 skrll * The NODE_COMPILE_TIME_CONST flag in the following constant expressions
414 1.1.1.1.2.2 skrll * enables compile-time constant folding to reduce the Type3Opcodes/Type2IntegerOpcodes
415 1.1.1.1.2.2 skrll * to simple integers. It is an error if these types of expressions cannot be
416 1.1.1.1.2.2 skrll * reduced, since the AML grammar for ****ConstExpr requires a simple constant.
417 1.1.1.1.2.2 skrll * Note: The required byte length of the constant is passed through to the
418 1.1.1.1.2.2 skrll * constant folding code in the node AmlLength field.
419 1.1.1.1.2.2 skrll */
420 1.1.1.1.2.2 skrll ByteConstExpr
421 1.1.1.1.2.4 skrll : Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
422 1.1.1.1.2.4 skrll TrSetNodeAmlLength ($1, 1);}
423 1.1.1.1.2.4 skrll | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
424 1.1.1.1.2.4 skrll TrSetNodeAmlLength ($1, 1);}
425 1.1.1.1.2.2 skrll | ConstExprTerm {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);}
426 1.1.1.1.2.2 skrll | ByteConst {}
427 1.1.1.1.2.2 skrll ;
428 1.1.1.1.2.2 skrll
429 1.1.1.1.2.2 skrll WordConstExpr
430 1.1.1.1.2.4 skrll : Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
431 1.1.1.1.2.4 skrll TrSetNodeAmlLength ($1, 2);}
432 1.1.1.1.2.4 skrll | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
433 1.1.1.1.2.4 skrll TrSetNodeAmlLength ($1, 2);}
434 1.1.1.1.2.2 skrll | ConstExprTerm {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);}
435 1.1.1.1.2.2 skrll | WordConst {}
436 1.1.1.1.2.2 skrll ;
437 1.1.1.1.2.2 skrll
438 1.1.1.1.2.2 skrll DWordConstExpr
439 1.1.1.1.2.4 skrll : Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
440 1.1.1.1.2.4 skrll TrSetNodeAmlLength ($1, 4);}
441 1.1.1.1.2.4 skrll | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
442 1.1.1.1.2.4 skrll TrSetNodeAmlLength ($1, 4);}
443 1.1.1.1.2.2 skrll | ConstExprTerm {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);}
444 1.1.1.1.2.2 skrll | DWordConst {}
445 1.1.1.1.2.2 skrll ;
446 1.1.1.1.2.2 skrll
447 1.1.1.1.2.2 skrll QWordConstExpr
448 1.1.1.1.2.4 skrll : Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
449 1.1.1.1.2.4 skrll TrSetNodeAmlLength ($1, 8);}
450 1.1.1.1.2.4 skrll | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);
451 1.1.1.1.2.4 skrll TrSetNodeAmlLength ($1, 8);}
452 1.1.1.1.2.2 skrll | ConstExprTerm {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);}
453 1.1.1.1.2.2 skrll | QWordConst {}
454 1.1.1.1.2.2 skrll ;
455 1.1.1.1.2.2 skrll
456 1.1.1.1.2.2 skrll ConstTerm
457 1.1.1.1.2.2 skrll : ConstExprTerm {}
458 1.1.1.1.2.2 skrll | PARSEOP_REVISION {$$ = TrCreateLeafNode (PARSEOP_REVISION);}
459 1.1.1.1.2.2 skrll ;
460 1.1.1.1.2.2 skrll
461 1.1.1.1.2.2 skrll ConstExprTerm
462 1.1.1.1.2.2 skrll : PARSEOP_ZERO {$$ = TrCreateValuedLeafNode (PARSEOP_ZERO, 0);}
463 1.1.1.1.2.2 skrll | PARSEOP_ONE {$$ = TrCreateValuedLeafNode (PARSEOP_ONE, 1);}
464 1.1.1.1.2.2 skrll | PARSEOP_ONES {$$ = TrCreateValuedLeafNode (PARSEOP_ONES, ACPI_UINT64_MAX);}
465 1.1.1.1.2.2 skrll | PARSEOP___DATE__ {$$ = TrCreateConstantLeafNode (PARSEOP___DATE__);}
466 1.1.1.1.2.2 skrll | PARSEOP___FILE__ {$$ = TrCreateConstantLeafNode (PARSEOP___FILE__);}
467 1.1.1.1.2.2 skrll | PARSEOP___LINE__ {$$ = TrCreateConstantLeafNode (PARSEOP___LINE__);}
468 1.1.1.1.2.2 skrll | PARSEOP___PATH__ {$$ = TrCreateConstantLeafNode (PARSEOP___PATH__);}
469 1.1.1.1.2.2 skrll ;
470 1.1.1.1.2.2 skrll
471 1.1.1.1.2.2 skrll Integer
472 1.1.1.1.2.4 skrll : PARSEOP_INTEGER {$$ = TrCreateValuedLeafNode (PARSEOP_INTEGER,
473 1.1.1.1.2.4 skrll AslCompilerlval.i);}
474 1.1.1.1.2.2 skrll ;
475 1.1.1.1.2.2 skrll
476 1.1.1.1.2.2 skrll String
477 1.1.1.1.2.4 skrll : PARSEOP_STRING_LITERAL {$$ = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL,
478 1.1.1.1.2.4 skrll (ACPI_NATIVE_INT) AslCompilerlval.s);}
479 1.1.1.1.2.2 skrll ;
480 1.1.1.1.2.2 skrll
481 1.1.1.1.2.2 skrll
482 1.1.1.1.2.2 skrll /*******************************************************************************
483 1.1.1.1.2.2 skrll *
484 1.1.1.1.2.2 skrll * ASL Opcode Terms
485 1.1.1.1.2.2 skrll *
486 1.1.1.1.2.2 skrll ******************************************************************************/
487 1.1.1.1.2.2 skrll
488 1.1.1.1.2.2 skrll CompilerDirective
489 1.1.1.1.2.2 skrll : IncludeTerm {}
490 1.1.1.1.2.2 skrll | IncludeEndTerm {}
491 1.1.1.1.2.2 skrll | ExternalTerm {}
492 1.1.1.1.2.2 skrll ;
493 1.1.1.1.2.2 skrll
494 1.1.1.1.2.2 skrll NamedObject
495 1.1.1.1.2.2 skrll : BankFieldTerm {}
496 1.1.1.1.2.2 skrll | CreateBitFieldTerm {}
497 1.1.1.1.2.2 skrll | CreateByteFieldTerm {}
498 1.1.1.1.2.2 skrll | CreateDWordFieldTerm {}
499 1.1.1.1.2.2 skrll | CreateFieldTerm {}
500 1.1.1.1.2.2 skrll | CreateQWordFieldTerm {}
501 1.1.1.1.2.2 skrll | CreateWordFieldTerm {}
502 1.1.1.1.2.2 skrll | DataRegionTerm {}
503 1.1.1.1.2.2 skrll | DeviceTerm {}
504 1.1.1.1.2.2 skrll | EventTerm {}
505 1.1.1.1.2.2 skrll | FieldTerm {}
506 1.1.1.1.2.2 skrll | FunctionTerm {}
507 1.1.1.1.2.2 skrll | IndexFieldTerm {}
508 1.1.1.1.2.2 skrll | MethodTerm {}
509 1.1.1.1.2.2 skrll | MutexTerm {}
510 1.1.1.1.2.2 skrll | OpRegionTerm {}
511 1.1.1.1.2.2 skrll | PowerResTerm {}
512 1.1.1.1.2.2 skrll | ProcessorTerm {}
513 1.1.1.1.2.2 skrll | ThermalZoneTerm {}
514 1.1.1.1.2.2 skrll ;
515 1.1.1.1.2.2 skrll
516 1.1.1.1.2.2 skrll NameSpaceModifier
517 1.1.1.1.2.2 skrll : AliasTerm {}
518 1.1.1.1.2.2 skrll | NameTerm {}
519 1.1.1.1.2.4 skrll // | NameTermAslPlus {}
520 1.1.1.1.2.2 skrll | ScopeTerm {}
521 1.1.1.1.2.2 skrll ;
522 1.1.1.1.2.2 skrll
523 1.1.1.1.2.2 skrll /* For ObjectType: SuperName except for MethodInvocationTerm */
524 1.1.1.1.2.2 skrll
525 1.1.1.1.2.2 skrll ObjectTypeName
526 1.1.1.1.2.2 skrll : NameString {}
527 1.1.1.1.2.2 skrll | ArgTerm {}
528 1.1.1.1.2.2 skrll | LocalTerm {}
529 1.1.1.1.2.2 skrll | DebugTerm {}
530 1.1.1.1.2.2 skrll | RefOfTerm {}
531 1.1.1.1.2.2 skrll | DerefOfTerm {}
532 1.1.1.1.2.2 skrll | IndexTerm {}
533 1.1.1.1.2.4 skrll | IndexExpTerm {}
534 1.1.1.1.2.2 skrll /* | MethodInvocationTerm {} */ /* Caused reduce/reduce with Type6Opcode->MethodInvocationTerm */
535 1.1.1.1.2.2 skrll ;
536 1.1.1.1.2.2 skrll
537 1.1.1.1.2.2 skrll RequiredTarget
538 1.1.1.1.2.2 skrll : ',' SuperName {$$ = TrSetNodeFlags ($2, NODE_IS_TARGET);}
539 1.1.1.1.2.2 skrll ;
540 1.1.1.1.2.2 skrll
541 1.1.1.1.2.2 skrll SimpleTarget
542 1.1.1.1.2.2 skrll : NameString {}
543 1.1.1.1.2.2 skrll | LocalTerm {}
544 1.1.1.1.2.2 skrll | ArgTerm {}
545 1.1.1.1.2.2 skrll ;
546 1.1.1.1.2.2 skrll
547 1.1.1.1.2.2 skrll /* Opcode types */
548 1.1.1.1.2.2 skrll
549 1.1.1.1.2.2 skrll Type1Opcode
550 1.1.1.1.2.2 skrll : BreakTerm {}
551 1.1.1.1.2.2 skrll | BreakPointTerm {}
552 1.1.1.1.2.2 skrll | ContinueTerm {}
553 1.1.1.1.2.2 skrll | FatalTerm {}
554 1.1.1.1.2.3 skrll | ForTerm {}
555 1.1.1.1.2.2 skrll | ElseIfTerm {}
556 1.1.1.1.2.2 skrll | LoadTerm {}
557 1.1.1.1.2.2 skrll | NoOpTerm {}
558 1.1.1.1.2.2 skrll | NotifyTerm {}
559 1.1.1.1.2.2 skrll | ReleaseTerm {}
560 1.1.1.1.2.2 skrll | ResetTerm {}
561 1.1.1.1.2.2 skrll | ReturnTerm {}
562 1.1.1.1.2.2 skrll | SignalTerm {}
563 1.1.1.1.2.2 skrll | SleepTerm {}
564 1.1.1.1.2.2 skrll | StallTerm {}
565 1.1.1.1.2.2 skrll | SwitchTerm {}
566 1.1.1.1.2.2 skrll | UnloadTerm {}
567 1.1.1.1.2.2 skrll | WhileTerm {}
568 1.1.1.1.2.2 skrll ;
569 1.1.1.1.2.2 skrll
570 1.1.1.1.2.2 skrll Type2Opcode
571 1.1.1.1.2.2 skrll : AcquireTerm {}
572 1.1.1.1.2.2 skrll | CondRefOfTerm {}
573 1.1.1.1.2.2 skrll | CopyObjectTerm {}
574 1.1.1.1.2.2 skrll | DerefOfTerm {}
575 1.1.1.1.2.2 skrll | ObjectTypeTerm {}
576 1.1.1.1.2.2 skrll | RefOfTerm {}
577 1.1.1.1.2.2 skrll | SizeOfTerm {}
578 1.1.1.1.2.2 skrll | StoreTerm {}
579 1.1.1.1.2.2 skrll | EqualsTerm {}
580 1.1.1.1.2.2 skrll | TimerTerm {}
581 1.1.1.1.2.2 skrll | WaitTerm {}
582 1.1.1.1.2.2 skrll | MethodInvocationTerm {}
583 1.1.1.1.2.2 skrll ;
584 1.1.1.1.2.2 skrll
585 1.1.1.1.2.2 skrll /*
586 1.1.1.1.2.2 skrll * Type 3/4/5 opcodes
587 1.1.1.1.2.2 skrll */
588 1.1.1.1.2.2 skrll Type2IntegerOpcode /* "Type3" opcodes */
589 1.1.1.1.2.2 skrll : Expression {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
590 1.1.1.1.2.2 skrll | AddTerm {}
591 1.1.1.1.2.2 skrll | AndTerm {}
592 1.1 christos | DecTerm {}
593 1.1 christos | DivideTerm {}
594 1.1 christos | FindSetLeftBitTerm {}
595 1.1 christos | FindSetRightBitTerm {}
596 1.1 christos | FromBCDTerm {}
597 1.1 christos | IncTerm {}
598 1.1 christos | IndexTerm {}
599 1.1.1.1.2.4 skrll // | StructureIndexTerm {}
600 1.1.1.1.2.4 skrll // | StructurePointerTerm {}
601 1.1 christos | LAndTerm {}
602 1.1 christos | LEqualTerm {}
603 1.1 christos | LGreaterTerm {}
604 1.1 christos | LGreaterEqualTerm {}
605 1.1 christos | LLessTerm {}
606 1.1 christos | LLessEqualTerm {}
607 1.1 christos | LNotTerm {}
608 1.1 christos | LNotEqualTerm {}
609 1.1 christos | LoadTableTerm {}
610 1.1 christos | LOrTerm {}
611 1.1 christos | MatchTerm {}
612 1.1 christos | ModTerm {}
613 1.1 christos | MultiplyTerm {}
614 1.1 christos | NAndTerm {}
615 1.1 christos | NOrTerm {}
616 1.1 christos | NotTerm {}
617 1.1 christos | OrTerm {}
618 1.1 christos | ShiftLeftTerm {}
619 1.1 christos | ShiftRightTerm {}
620 1.1 christos | SubtractTerm {}
621 1.1 christos | ToBCDTerm {}
622 1.1 christos | ToIntegerTerm {}
623 1.1 christos | XOrTerm {}
624 1.1 christos ;
625 1.1 christos
626 1.1 christos Type2StringOpcode /* "Type4" Opcodes */
627 1.1 christos : ToDecimalStringTerm {}
628 1.1 christos | ToHexStringTerm {}
629 1.1 christos | ToStringTerm {}
630 1.1 christos ;
631 1.1 christos
632 1.1 christos Type2BufferOpcode /* "Type5" Opcodes */
633 1.1 christos : ToBufferTerm {}
634 1.1 christos | ConcatResTerm {}
635 1.1 christos ;
636 1.1 christos
637 1.1 christos Type2BufferOrStringOpcode
638 1.1.1.1.2.1 skrll : ConcatTerm {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST);}
639 1.1.1.1.2.1 skrll | PrintfTerm {}
640 1.1.1.1.2.1 skrll | FprintfTerm {}
641 1.1 christos | MidTerm {}
642 1.1 christos ;
643 1.1 christos
644 1.1 christos /*
645 1.1 christos * A type 3 opcode evaluates to an Integer and cannot have a destination operand
646 1.1 christos */
647 1.1 christos Type3Opcode
648 1.1 christos : EISAIDTerm {}
649 1.1 christos ;
650 1.1 christos
651 1.1 christos /* Obsolete
652 1.1 christos Type4Opcode
653 1.1 christos : ConcatTerm {}
654 1.1 christos | ToDecimalStringTerm {}
655 1.1 christos | ToHexStringTerm {}
656 1.1 christos | MidTerm {}
657 1.1 christos | ToStringTerm {}
658 1.1 christos ;
659 1.1 christos */
660 1.1 christos
661 1.1.1.1.2.4 skrll /* Type 5 opcodes are a subset of Type2 opcodes, and return a constant */
662 1.1.1.1.2.4 skrll
663 1.1 christos Type5Opcode
664 1.1 christos : ResourceTemplateTerm {}
665 1.1 christos | UnicodeTerm {}
666 1.1.1.1.2.1 skrll | ToPLDTerm {}
667 1.1 christos | ToUUIDTerm {}
668 1.1 christos ;
669 1.1 christos
670 1.1 christos Type6Opcode
671 1.1 christos : RefOfTerm {}
672 1.1 christos | DerefOfTerm {}
673 1.1 christos | IndexTerm {}
674 1.1.1.1.2.2 skrll | IndexExpTerm {}
675 1.1.1.1.2.4 skrll // | StructureIndexTerm {}
676 1.1.1.1.2.4 skrll // | StructurePointerTerm {}
677 1.1.1.1.2.1 skrll | MethodInvocationTerm {}
678 1.1 christos ;
679 1.1 christos
680 1.1 christos
681 1.1.1.1.2.2 skrll /*******************************************************************************
682 1.1.1.1.2.2 skrll *
683 1.1.1.1.2.2 skrll * ASL Helper Terms
684 1.1.1.1.2.2 skrll *
685 1.1.1.1.2.2 skrll ******************************************************************************/
686 1.1 christos
687 1.1 christos AmlPackageLengthTerm
688 1.1.1.1.2.4 skrll : Integer {$$ = TrUpdateNode (PARSEOP_PACKAGE_LENGTH,
689 1.1.1.1.2.4 skrll (ACPI_PARSE_OBJECT *) $1);}
690 1.1 christos ;
691 1.1 christos
692 1.1 christos NameStringItem
693 1.1 christos : ',' NameString {$$ = $2;}
694 1.1 christos | ',' error {$$ = AslDoError (); yyclearin;}
695 1.1 christos ;
696 1.1 christos
697 1.1 christos TermArgItem
698 1.1 christos : ',' TermArg {$$ = $2;}
699 1.1 christos | ',' error {$$ = AslDoError (); yyclearin;}
700 1.1 christos ;
701 1.1 christos
702 1.1 christos OptionalReference
703 1.1 christos : {$$ = TrCreateLeafNode (PARSEOP_ZERO);} /* Placeholder is a ZeroOp object */
704 1.1 christos | ',' {$$ = TrCreateLeafNode (PARSEOP_ZERO);} /* Placeholder is a ZeroOp object */
705 1.1 christos | ',' TermArg {$$ = $2;}
706 1.1 christos ;
707 1.1 christos
708 1.1 christos OptionalReturnArg
709 1.1.1.1.2.4 skrll : {$$ = TrSetNodeFlags (TrCreateLeafNode (PARSEOP_ZERO),
710 1.1.1.1.2.4 skrll NODE_IS_NULL_RETURN);} /* Placeholder is a ZeroOp object */
711 1.1 christos | TermArg {$$ = $1;}
712 1.1 christos ;
713 1.1 christos
714 1.1 christos OptionalSerializeRuleKeyword
715 1.1 christos : {$$ = NULL;}
716 1.1 christos | ',' {$$ = NULL;}
717 1.1 christos | ',' SerializeRuleKeyword {$$ = $2;}
718 1.1 christos ;
719 1.1 christos
720 1.1 christos OptionalTermArg
721 1.1.1.1.2.3 skrll : {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
722 1.1.1.1.2.3 skrll | TermArg {$$ = $1;}
723 1.1.1.1.2.3 skrll ;
724 1.1.1.1.2.3 skrll
725 1.1 christos OptionalWordConst
726 1.1 christos : {$$ = NULL;}
727 1.1 christos | WordConst {$$ = $1;}
728 1.1 christos ;
729