1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44#include <acpi/acpi.h>
45#include "accommon.h"
46#include "acparser.h"
47#include "acopcode.h"
48#include "amlcode.h"
49
50#define _COMPONENT ACPI_PARSER
51ACPI_MODULE_NAME("psopcode")
52
53static const u8 acpi_gbl_argument_count[] =
54 { 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 6 };
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] = {
190
191
192
193 ACPI_OP("Zero", ARGP_ZERO_OP, ARGI_ZERO_OP, ACPI_TYPE_INTEGER,
194 AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT),
195 ACPI_OP("One", ARGP_ONE_OP, ARGI_ONE_OP, ACPI_TYPE_INTEGER,
196 AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT),
197 ACPI_OP("Alias", ARGP_ALIAS_OP, ARGI_ALIAS_OP,
198 ACPI_TYPE_LOCAL_ALIAS, AML_CLASS_NAMED_OBJECT,
199 AML_TYPE_NAMED_SIMPLE,
200 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
201 AML_NSNODE | AML_NAMED),
202 ACPI_OP("Name", ARGP_NAME_OP, ARGI_NAME_OP, ACPI_TYPE_ANY,
203 AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX,
204 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
205 AML_NSNODE | AML_NAMED),
206 ACPI_OP("ByteConst", ARGP_BYTE_OP, ARGI_BYTE_OP,
207 ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT,
208 AML_TYPE_LITERAL, AML_CONSTANT),
209 ACPI_OP("WordConst", ARGP_WORD_OP, ARGI_WORD_OP,
210 ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT,
211 AML_TYPE_LITERAL, AML_CONSTANT),
212 ACPI_OP("DwordConst", ARGP_DWORD_OP, ARGI_DWORD_OP,
213 ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT,
214 AML_TYPE_LITERAL, AML_CONSTANT),
215 ACPI_OP("String", ARGP_STRING_OP, ARGI_STRING_OP,
216 ACPI_TYPE_STRING, AML_CLASS_ARGUMENT,
217 AML_TYPE_LITERAL, AML_CONSTANT),
218 ACPI_OP("Scope", ARGP_SCOPE_OP, ARGI_SCOPE_OP,
219 ACPI_TYPE_LOCAL_SCOPE, AML_CLASS_NAMED_OBJECT,
220 AML_TYPE_NAMED_NO_OBJ,
221 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
222 AML_NSNODE | AML_NAMED),
223 ACPI_OP("Buffer", ARGP_BUFFER_OP, ARGI_BUFFER_OP,
224 ACPI_TYPE_BUFFER, AML_CLASS_CREATE,
225 AML_TYPE_CREATE_OBJECT,
226 AML_HAS_ARGS | AML_DEFER | AML_CONSTANT),
227 ACPI_OP("Package", ARGP_PACKAGE_OP, ARGI_PACKAGE_OP,
228 ACPI_TYPE_PACKAGE, AML_CLASS_CREATE,
229 AML_TYPE_CREATE_OBJECT,
230 AML_HAS_ARGS | AML_DEFER | AML_CONSTANT),
231 ACPI_OP("Method", ARGP_METHOD_OP, ARGI_METHOD_OP,
232 ACPI_TYPE_METHOD, AML_CLASS_NAMED_OBJECT,
233 AML_TYPE_NAMED_COMPLEX,
234 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
235 AML_NSNODE | AML_NAMED | AML_DEFER),
236 ACPI_OP("Local0", ARGP_LOCAL0, ARGI_LOCAL0,
237 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
238 AML_TYPE_LOCAL_VARIABLE, 0),
239 ACPI_OP("Local1", ARGP_LOCAL1, ARGI_LOCAL1,
240 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
241 AML_TYPE_LOCAL_VARIABLE, 0),
242 ACPI_OP("Local2", ARGP_LOCAL2, ARGI_LOCAL2,
243 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
244 AML_TYPE_LOCAL_VARIABLE, 0),
245 ACPI_OP("Local3", ARGP_LOCAL3, ARGI_LOCAL3,
246 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
247 AML_TYPE_LOCAL_VARIABLE, 0),
248 ACPI_OP("Local4", ARGP_LOCAL4, ARGI_LOCAL4,
249 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
250 AML_TYPE_LOCAL_VARIABLE, 0),
251 ACPI_OP("Local5", ARGP_LOCAL5, ARGI_LOCAL5,
252 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
253 AML_TYPE_LOCAL_VARIABLE, 0),
254 ACPI_OP("Local6", ARGP_LOCAL6, ARGI_LOCAL6,
255 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
256 AML_TYPE_LOCAL_VARIABLE, 0),
257 ACPI_OP("Local7", ARGP_LOCAL7, ARGI_LOCAL7,
258 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
259 AML_TYPE_LOCAL_VARIABLE, 0),
260 ACPI_OP("Arg0", ARGP_ARG0, ARGI_ARG0,
261 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
262 AML_TYPE_METHOD_ARGUMENT, 0),
263 ACPI_OP("Arg1", ARGP_ARG1, ARGI_ARG1,
264 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
265 AML_TYPE_METHOD_ARGUMENT, 0),
266 ACPI_OP("Arg2", ARGP_ARG2, ARGI_ARG2,
267 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
268 AML_TYPE_METHOD_ARGUMENT, 0),
269 ACPI_OP("Arg3", ARGP_ARG3, ARGI_ARG3,
270 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
271 AML_TYPE_METHOD_ARGUMENT, 0),
272 ACPI_OP("Arg4", ARGP_ARG4, ARGI_ARG4,
273 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
274 AML_TYPE_METHOD_ARGUMENT, 0),
275 ACPI_OP("Arg5", ARGP_ARG5, ARGI_ARG5,
276 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
277 AML_TYPE_METHOD_ARGUMENT, 0),
278 ACPI_OP("Arg6", ARGP_ARG6, ARGI_ARG6,
279 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
280 AML_TYPE_METHOD_ARGUMENT, 0),
281 ACPI_OP("Store", ARGP_STORE_OP, ARGI_STORE_OP, ACPI_TYPE_ANY,
282 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R,
283 AML_FLAGS_EXEC_1A_1T_1R),
284 ACPI_OP("RefOf", ARGP_REF_OF_OP, ARGI_REF_OF_OP, ACPI_TYPE_ANY,
285 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R,
286 AML_FLAGS_EXEC_1A_0T_1R),
287 ACPI_OP("Add", ARGP_ADD_OP, ARGI_ADD_OP, ACPI_TYPE_ANY,
288 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R,
289 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
290 ACPI_OP("Concatenate", ARGP_CONCAT_OP, ARGI_CONCAT_OP,
291 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
292 AML_TYPE_EXEC_2A_1T_1R,
293 AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
294 ACPI_OP("Subtract", ARGP_SUBTRACT_OP, ARGI_SUBTRACT_OP,
295 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
296 AML_TYPE_EXEC_2A_1T_1R,
297 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
298 ACPI_OP("Increment", ARGP_INCREMENT_OP, ARGI_INCREMENT_OP,
299 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
300 AML_TYPE_EXEC_1A_0T_1R,
301 AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT),
302 ACPI_OP("Decrement", ARGP_DECREMENT_OP, ARGI_DECREMENT_OP,
303 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
304 AML_TYPE_EXEC_1A_0T_1R,
305 AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT),
306 ACPI_OP("Multiply", ARGP_MULTIPLY_OP, ARGI_MULTIPLY_OP,
307 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
308 AML_TYPE_EXEC_2A_1T_1R,
309 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
310 ACPI_OP("Divide", ARGP_DIVIDE_OP, ARGI_DIVIDE_OP,
311 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
312 AML_TYPE_EXEC_2A_2T_1R,
313 AML_FLAGS_EXEC_2A_2T_1R | AML_CONSTANT),
314 ACPI_OP("ShiftLeft", ARGP_SHIFT_LEFT_OP, ARGI_SHIFT_LEFT_OP,
315 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
316 AML_TYPE_EXEC_2A_1T_1R,
317 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
318 ACPI_OP("ShiftRight", ARGP_SHIFT_RIGHT_OP, ARGI_SHIFT_RIGHT_OP,
319 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
320 AML_TYPE_EXEC_2A_1T_1R,
321 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
322 ACPI_OP("And", ARGP_BIT_AND_OP, ARGI_BIT_AND_OP, ACPI_TYPE_ANY,
323 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R,
324 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
325 ACPI_OP("NAnd", ARGP_BIT_NAND_OP, ARGI_BIT_NAND_OP,
326 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
327 AML_TYPE_EXEC_2A_1T_1R,
328 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
329 ACPI_OP("Or", ARGP_BIT_OR_OP, ARGI_BIT_OR_OP, ACPI_TYPE_ANY,
330 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R,
331 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
332 ACPI_OP("NOr", ARGP_BIT_NOR_OP, ARGI_BIT_NOR_OP, ACPI_TYPE_ANY,
333 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R,
334 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
335 ACPI_OP("XOr", ARGP_BIT_XOR_OP, ARGI_BIT_XOR_OP, ACPI_TYPE_ANY,
336 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R,
337 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
338 ACPI_OP("Not", ARGP_BIT_NOT_OP, ARGI_BIT_NOT_OP, ACPI_TYPE_ANY,
339 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R,
340 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
341 ACPI_OP("FindSetLeftBit", ARGP_FIND_SET_LEFT_BIT_OP,
342 ARGI_FIND_SET_LEFT_BIT_OP, ACPI_TYPE_ANY,
343 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R,
344 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
345 ACPI_OP("FindSetRightBit", ARGP_FIND_SET_RIGHT_BIT_OP,
346 ARGI_FIND_SET_RIGHT_BIT_OP, ACPI_TYPE_ANY,
347 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R,
348 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
349 ACPI_OP("DerefOf", ARGP_DEREF_OF_OP, ARGI_DEREF_OF_OP,
350 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
351 AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
352 ACPI_OP("Notify", ARGP_NOTIFY_OP, ARGI_NOTIFY_OP,
353 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
354 AML_TYPE_EXEC_2A_0T_0R, AML_FLAGS_EXEC_2A_0T_0R),
355 ACPI_OP("SizeOf", ARGP_SIZE_OF_OP, ARGI_SIZE_OF_OP,
356 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
357 AML_TYPE_EXEC_1A_0T_1R,
358 AML_FLAGS_EXEC_1A_0T_1R | AML_NO_OPERAND_RESOLVE),
359 ACPI_OP("Index", ARGP_INDEX_OP, ARGI_INDEX_OP, ACPI_TYPE_ANY,
360 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R,
361 AML_FLAGS_EXEC_2A_1T_1R),
362 ACPI_OP("Match", ARGP_MATCH_OP, ARGI_MATCH_OP, ACPI_TYPE_ANY,
363 AML_CLASS_EXECUTE, AML_TYPE_EXEC_6A_0T_1R,
364 AML_FLAGS_EXEC_6A_0T_1R | AML_CONSTANT),
365 ACPI_OP("CreateDWordField", ARGP_CREATE_DWORD_FIELD_OP,
366 ARGI_CREATE_DWORD_FIELD_OP,
367 ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE,
368 AML_TYPE_CREATE_FIELD,
369 AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE |
370 AML_DEFER | AML_CREATE),
371 ACPI_OP("CreateWordField", ARGP_CREATE_WORD_FIELD_OP,
372 ARGI_CREATE_WORD_FIELD_OP,
373 ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE,
374 AML_TYPE_CREATE_FIELD,
375 AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE |
376 AML_DEFER | AML_CREATE),
377 ACPI_OP("CreateByteField", ARGP_CREATE_BYTE_FIELD_OP,
378 ARGI_CREATE_BYTE_FIELD_OP,
379 ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE,
380 AML_TYPE_CREATE_FIELD,
381 AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE |
382 AML_DEFER | AML_CREATE),
383 ACPI_OP("CreateBitField", ARGP_CREATE_BIT_FIELD_OP,
384 ARGI_CREATE_BIT_FIELD_OP,
385 ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE,
386 AML_TYPE_CREATE_FIELD,
387 AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE |
388 AML_DEFER | AML_CREATE),
389 ACPI_OP("ObjectType", ARGP_TYPE_OP, ARGI_TYPE_OP,
390 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
391 AML_TYPE_EXEC_1A_0T_1R,
392 AML_FLAGS_EXEC_1A_0T_1R | AML_NO_OPERAND_RESOLVE),
393 ACPI_OP("LAnd", ARGP_LAND_OP, ARGI_LAND_OP, ACPI_TYPE_ANY,
394 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R,
395 AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL_NUMERIC | AML_CONSTANT),
396 ACPI_OP("LOr", ARGP_LOR_OP, ARGI_LOR_OP, ACPI_TYPE_ANY,
397 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R,
398 AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL_NUMERIC | AML_CONSTANT),
399 ACPI_OP("LNot", ARGP_LNOT_OP, ARGI_LNOT_OP, ACPI_TYPE_ANY,
400 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R,
401 AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT),
402 ACPI_OP("LEqual", ARGP_LEQUAL_OP, ARGI_LEQUAL_OP,
403 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
404 AML_TYPE_EXEC_2A_0T_1R,
405 AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT),
406 ACPI_OP("LGreater", ARGP_LGREATER_OP, ARGI_LGREATER_OP,
407 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
408 AML_TYPE_EXEC_2A_0T_1R,
409 AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT),
410 ACPI_OP("LLess", ARGP_LLESS_OP, ARGI_LLESS_OP, ACPI_TYPE_ANY,
411 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R,
412 AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT),
413 ACPI_OP("If", ARGP_IF_OP, ARGI_IF_OP, ACPI_TYPE_ANY,
414 AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
415 ACPI_OP("Else", ARGP_ELSE_OP, ARGI_ELSE_OP, ACPI_TYPE_ANY,
416 AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
417 ACPI_OP("While", ARGP_WHILE_OP, ARGI_WHILE_OP, ACPI_TYPE_ANY,
418 AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
419 ACPI_OP("Noop", ARGP_NOOP_OP, ARGI_NOOP_OP, ACPI_TYPE_ANY,
420 AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
421 ACPI_OP("Return", ARGP_RETURN_OP, ARGI_RETURN_OP,
422 ACPI_TYPE_ANY, AML_CLASS_CONTROL,
423 AML_TYPE_CONTROL, AML_HAS_ARGS),
424 ACPI_OP("Break", ARGP_BREAK_OP, ARGI_BREAK_OP, ACPI_TYPE_ANY,
425 AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
426 ACPI_OP("BreakPoint", ARGP_BREAK_POINT_OP, ARGI_BREAK_POINT_OP,
427 ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
428 ACPI_OP("Ones", ARGP_ONES_OP, ARGI_ONES_OP, ACPI_TYPE_INTEGER,
429 AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT),
430
431
432
433 ACPI_OP("Mutex", ARGP_MUTEX_OP, ARGI_MUTEX_OP, ACPI_TYPE_MUTEX,
434 AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE,
435 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
436 AML_NSNODE | AML_NAMED),
437 ACPI_OP("Event", ARGP_EVENT_OP, ARGI_EVENT_OP, ACPI_TYPE_EVENT,
438 AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE,
439 AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
440 ACPI_OP("CondRefOf", ARGP_COND_REF_OF_OP, ARGI_COND_REF_OF_OP,
441 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
442 AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
443 ACPI_OP("CreateField", ARGP_CREATE_FIELD_OP,
444 ARGI_CREATE_FIELD_OP, ACPI_TYPE_BUFFER_FIELD,
445 AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD,
446 AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE |
447 AML_DEFER | AML_FIELD | AML_CREATE),
448 ACPI_OP("Load", ARGP_LOAD_OP, ARGI_LOAD_OP, ACPI_TYPE_ANY,
449 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_0R,
450 AML_FLAGS_EXEC_1A_1T_0R),
451 ACPI_OP("Stall", ARGP_STALL_OP, ARGI_STALL_OP, ACPI_TYPE_ANY,
452 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R,
453 AML_FLAGS_EXEC_1A_0T_0R),
454 ACPI_OP("Sleep", ARGP_SLEEP_OP, ARGI_SLEEP_OP, ACPI_TYPE_ANY,
455 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R,
456 AML_FLAGS_EXEC_1A_0T_0R),
457 ACPI_OP("Acquire", ARGP_ACQUIRE_OP, ARGI_ACQUIRE_OP,
458 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
459 AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R),
460 ACPI_OP("Signal", ARGP_SIGNAL_OP, ARGI_SIGNAL_OP,
461 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
462 AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
463 ACPI_OP("Wait", ARGP_WAIT_OP, ARGI_WAIT_OP, ACPI_TYPE_ANY,
464 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R,
465 AML_FLAGS_EXEC_2A_0T_1R),
466 ACPI_OP("Reset", ARGP_RESET_OP, ARGI_RESET_OP, ACPI_TYPE_ANY,
467 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R,
468 AML_FLAGS_EXEC_1A_0T_0R),
469 ACPI_OP("Release", ARGP_RELEASE_OP, ARGI_RELEASE_OP,
470 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
471 AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
472 ACPI_OP("FromBCD", ARGP_FROM_BCD_OP, ARGI_FROM_BCD_OP,
473 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
474 AML_TYPE_EXEC_1A_1T_1R,
475 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
476 ACPI_OP("ToBCD", ARGP_TO_BCD_OP, ARGI_TO_BCD_OP, ACPI_TYPE_ANY,
477 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R,
478 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
479 ACPI_OP("Unload", ARGP_UNLOAD_OP, ARGI_UNLOAD_OP,
480 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
481 AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
482 ACPI_OP("Revision", ARGP_REVISION_OP, ARGI_REVISION_OP,
483 ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT,
484 AML_TYPE_CONSTANT, 0),
485 ACPI_OP("Debug", ARGP_DEBUG_OP, ARGI_DEBUG_OP,
486 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
487 AML_TYPE_CONSTANT, 0),
488 ACPI_OP("Fatal", ARGP_FATAL_OP, ARGI_FATAL_OP, ACPI_TYPE_ANY,
489 AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_0T_0R,
490 AML_FLAGS_EXEC_3A_0T_0R),
491 ACPI_OP("OperationRegion", ARGP_REGION_OP, ARGI_REGION_OP,
492 ACPI_TYPE_REGION, AML_CLASS_NAMED_OBJECT,
493 AML_TYPE_NAMED_COMPLEX,
494 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
495 AML_NSNODE | AML_NAMED | AML_DEFER),
496 ACPI_OP("Field", ARGP_FIELD_OP, ARGI_FIELD_OP, ACPI_TYPE_ANY,
497 AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD,
498 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD),
499 ACPI_OP("Device", ARGP_DEVICE_OP, ARGI_DEVICE_OP,
500 ACPI_TYPE_DEVICE, AML_CLASS_NAMED_OBJECT,
501 AML_TYPE_NAMED_NO_OBJ,
502 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
503 AML_NSNODE | AML_NAMED),
504 ACPI_OP("Processor", ARGP_PROCESSOR_OP, ARGI_PROCESSOR_OP,
505 ACPI_TYPE_PROCESSOR, AML_CLASS_NAMED_OBJECT,
506 AML_TYPE_NAMED_SIMPLE,
507 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
508 AML_NSNODE | AML_NAMED),
509 ACPI_OP("PowerResource", ARGP_POWER_RES_OP, ARGI_POWER_RES_OP,
510 ACPI_TYPE_POWER, AML_CLASS_NAMED_OBJECT,
511 AML_TYPE_NAMED_SIMPLE,
512 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
513 AML_NSNODE | AML_NAMED),
514 ACPI_OP("ThermalZone", ARGP_THERMAL_ZONE_OP,
515 ARGI_THERMAL_ZONE_OP, ACPI_TYPE_THERMAL,
516 AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ,
517 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
518 AML_NSNODE | AML_NAMED),
519 ACPI_OP("IndexField", ARGP_INDEX_FIELD_OP, ARGI_INDEX_FIELD_OP,
520 ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT,
521 AML_TYPE_NAMED_FIELD,
522 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD),
523 ACPI_OP("BankField", ARGP_BANK_FIELD_OP, ARGI_BANK_FIELD_OP,
524 ACPI_TYPE_LOCAL_BANK_FIELD, AML_CLASS_NAMED_OBJECT,
525 AML_TYPE_NAMED_FIELD,
526 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD |
527 AML_DEFER),
528
529
530
531 ACPI_OP("LNotEqual", ARGP_LNOTEQUAL_OP, ARGI_LNOTEQUAL_OP,
532 ACPI_TYPE_ANY, AML_CLASS_INTERNAL,
533 AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT),
534 ACPI_OP("LLessEqual", ARGP_LLESSEQUAL_OP, ARGI_LLESSEQUAL_OP,
535 ACPI_TYPE_ANY, AML_CLASS_INTERNAL,
536 AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT),
537 ACPI_OP("LGreaterEqual", ARGP_LGREATEREQUAL_OP,
538 ARGI_LGREATEREQUAL_OP, ACPI_TYPE_ANY,
539 AML_CLASS_INTERNAL, AML_TYPE_BOGUS,
540 AML_HAS_ARGS | AML_CONSTANT),
541 ACPI_OP("-NamePath-", ARGP_NAMEPATH_OP, ARGI_NAMEPATH_OP,
542 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
543 AML_TYPE_LITERAL, AML_NSOBJECT | AML_NSNODE),
544 ACPI_OP("-MethodCall-", ARGP_METHODCALL_OP, ARGI_METHODCALL_OP,
545 ACPI_TYPE_METHOD, AML_CLASS_METHOD_CALL,
546 AML_TYPE_METHOD_CALL,
547 AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE),
548 ACPI_OP("-ByteList-", ARGP_BYTELIST_OP, ARGI_BYTELIST_OP,
549 ACPI_TYPE_ANY, AML_CLASS_ARGUMENT,
550 AML_TYPE_LITERAL, 0),
551 ACPI_OP("-ReservedField-", ARGP_RESERVEDFIELD_OP,
552 ARGI_RESERVEDFIELD_OP, ACPI_TYPE_ANY,
553 AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
554 ACPI_OP("-NamedField-", ARGP_NAMEDFIELD_OP, ARGI_NAMEDFIELD_OP,
555 ACPI_TYPE_ANY, AML_CLASS_INTERNAL,
556 AML_TYPE_BOGUS,
557 AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
558 ACPI_OP("-AccessField-", ARGP_ACCESSFIELD_OP,
559 ARGI_ACCESSFIELD_OP, ACPI_TYPE_ANY,
560 AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
561 ACPI_OP("-StaticString", ARGP_STATICSTRING_OP,
562 ARGI_STATICSTRING_OP, ACPI_TYPE_ANY,
563 AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
564 ACPI_OP("-Return Value-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY,
565 AML_CLASS_RETURN_VALUE, AML_TYPE_RETURN,
566 AML_HAS_ARGS | AML_HAS_RETVAL),
567 ACPI_OP("-UNKNOWN_OP-", ARG_NONE, ARG_NONE, ACPI_TYPE_INVALID,
568 AML_CLASS_UNKNOWN, AML_TYPE_BOGUS, AML_HAS_ARGS),
569 ACPI_OP("-ASCII_ONLY-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY,
570 AML_CLASS_ASCII, AML_TYPE_BOGUS, AML_HAS_ARGS),
571 ACPI_OP("-PREFIX_ONLY-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY,
572 AML_CLASS_PREFIX, AML_TYPE_BOGUS, AML_HAS_ARGS),
573
574
575
576 ACPI_OP("QwordConst", ARGP_QWORD_OP, ARGI_QWORD_OP,
577 ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT,
578 AML_TYPE_LITERAL, AML_CONSTANT),
579 ACPI_OP("Package", ARGP_VAR_PACKAGE_OP,
580 ARGI_VAR_PACKAGE_OP, ACPI_TYPE_PACKAGE,
581 AML_CLASS_CREATE, AML_TYPE_CREATE_OBJECT,
582 AML_HAS_ARGS | AML_DEFER),
583 ACPI_OP("ConcatenateResTemplate", ARGP_CONCAT_RES_OP,
584 ARGI_CONCAT_RES_OP, ACPI_TYPE_ANY,
585 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R,
586 AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
587 ACPI_OP("Mod", ARGP_MOD_OP, ARGI_MOD_OP, ACPI_TYPE_ANY,
588 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R,
589 AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
590 ACPI_OP("CreateQWordField", ARGP_CREATE_QWORD_FIELD_OP,
591 ARGI_CREATE_QWORD_FIELD_OP,
592 ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE,
593 AML_TYPE_CREATE_FIELD,
594 AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE |
595 AML_DEFER | AML_CREATE),
596 ACPI_OP("ToBuffer", ARGP_TO_BUFFER_OP, ARGI_TO_BUFFER_OP,
597 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
598 AML_TYPE_EXEC_1A_1T_1R,
599 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
600 ACPI_OP("ToDecimalString", ARGP_TO_DEC_STR_OP,
601 ARGI_TO_DEC_STR_OP, ACPI_TYPE_ANY,
602 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R,
603 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
604 ACPI_OP("ToHexString", ARGP_TO_HEX_STR_OP, ARGI_TO_HEX_STR_OP,
605 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
606 AML_TYPE_EXEC_1A_1T_1R,
607 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
608 ACPI_OP("ToInteger", ARGP_TO_INTEGER_OP, ARGI_TO_INTEGER_OP,
609 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
610 AML_TYPE_EXEC_1A_1T_1R,
611 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
612 ACPI_OP("ToString", ARGP_TO_STRING_OP, ARGI_TO_STRING_OP,
613 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
614 AML_TYPE_EXEC_2A_1T_1R,
615 AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
616 ACPI_OP("CopyObject", ARGP_COPY_OP, ARGI_COPY_OP,
617 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
618 AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
619 ACPI_OP("Mid", ARGP_MID_OP, ARGI_MID_OP, ACPI_TYPE_ANY,
620 AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_1T_1R,
621 AML_FLAGS_EXEC_3A_1T_1R | AML_CONSTANT),
622 ACPI_OP("Continue", ARGP_CONTINUE_OP, ARGI_CONTINUE_OP,
623 ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
624 ACPI_OP("LoadTable", ARGP_LOAD_TABLE_OP, ARGI_LOAD_TABLE_OP,
625 ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
626 AML_TYPE_EXEC_6A_0T_1R, AML_FLAGS_EXEC_6A_0T_1R),
627 ACPI_OP("DataTableRegion", ARGP_DATA_REGION_OP,
628 ARGI_DATA_REGION_OP, ACPI_TYPE_REGION,
629 AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX,
630 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
631 AML_NSNODE | AML_NAMED | AML_DEFER),
632 ACPI_OP("[EvalSubTree]", ARGP_SCOPE_OP, ARGI_SCOPE_OP,
633 ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT,
634 AML_TYPE_NAMED_NO_OBJ,
635 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE),
636
637
638
639 ACPI_OP("Timer", ARGP_TIMER_OP, ARGI_TIMER_OP, ACPI_TYPE_ANY,
640 AML_CLASS_EXECUTE, AML_TYPE_EXEC_0A_0T_1R,
641 AML_FLAGS_EXEC_0A_0T_1R)
642
643
644};
645
646
647
648
649
650static const u8 acpi_gbl_short_op_index[256] = {
651
652
653 0x00, 0x01, _UNK, _UNK, _UNK, _UNK, 0x02, _UNK,
654 0x03, _UNK, 0x04, 0x05, 0x06, 0x07, 0x6E, _UNK,
655 0x08, 0x09, 0x0a, 0x6F, 0x0b, _UNK, _UNK, _UNK,
656 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
657 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
658 _UNK, _UNK, _UNK, _UNK, _UNK, 0x63, _PFX, _PFX,
659 0x67, 0x66, 0x68, 0x65, 0x69, 0x64, 0x6A, 0x7D,
660 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
661 _UNK, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
662 _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
663 _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
664 _ASC, _ASC, _ASC, _UNK, _PFX, _UNK, _PFX, _ASC,
665 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
666 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, _UNK,
667 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22,
668 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a,
669 0x2b, 0x2c, 0x2d, 0x2e, 0x70, 0x71, 0x2f, 0x30,
670 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x72,
671 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x73, 0x74,
672 0x75, 0x76, _UNK, _UNK, 0x77, 0x78, 0x79, 0x7A,
673 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x60, 0x61,
674 0x62, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
675 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
676 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
677 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
678 _UNK, _UNK, _UNK, _UNK, 0x44, _UNK, _UNK, _UNK,
679 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
680 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
681 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
682 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
683 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
684 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0x45,
685};
686
687
688
689
690
691static const u8 acpi_gbl_long_op_index[NUM_EXTENDED_OPCODE] = {
692
693
694 _UNK, 0x46, 0x47, _UNK, _UNK, _UNK, _UNK, _UNK,
695 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
696 _UNK, _UNK, 0x48, 0x49, _UNK, _UNK, _UNK, _UNK,
697 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0x7B,
698 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51,
699 0x52, 0x53, 0x54, _UNK, _UNK, _UNK, _UNK, _UNK,
700 0x55, 0x56, 0x57, 0x7e, _UNK, _UNK, _UNK, _UNK,
701 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
702 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
703 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
704 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
705 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
706 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
707 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
708 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
709 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
710 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
711 0x7C,
712};
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode)
728{
729 ACPI_FUNCTION_NAME(ps_get_opcode_info);
730
731
732
733
734 if (!(opcode & 0xFF00)) {
735
736
737
738 return (&acpi_gbl_aml_op_info
739 [acpi_gbl_short_op_index[(u8) opcode]]);
740 }
741
742 if (((opcode & 0xFF00) == AML_EXTENDED_OPCODE) &&
743 (((u8) opcode) <= MAX_EXTENDED_OPCODE)) {
744
745
746
747 return (&acpi_gbl_aml_op_info
748 [acpi_gbl_long_op_index[(u8) opcode]]);
749 }
750
751
752
753 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
754 "Unknown AML opcode [%4.4X]\n", opcode));
755
756 return (&acpi_gbl_aml_op_info[_UNK]);
757}
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772char *acpi_ps_get_opcode_name(u16 opcode)
773{
774#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT)
775
776 const struct acpi_opcode_info *op;
777
778 op = acpi_ps_get_opcode_info(opcode);
779
780
781
782 return (op->name);
783
784#else
785 return ("OpcodeName unavailable");
786
787#endif
788}
789
790
791
792
793
794
795
796
797
798
799
800
801
802u8 acpi_ps_get_argument_count(u32 op_type)
803{
804
805 if (op_type <= AML_TYPE_EXEC_6A_0T_1R) {
806 return (acpi_gbl_argument_count[op_type]);
807 }
808
809 return (0);
810}
811