psopcode.c revision 1.3.2.2 1 1.3.2.2 bouyer /******************************************************************************
2 1.3.2.2 bouyer *
3 1.3.2.2 bouyer * Module Name: psopcode - Parser/Interpreter opcode information table
4 1.3.2.2 bouyer *
5 1.3.2.2 bouyer *****************************************************************************/
6 1.3.2.2 bouyer
7 1.3.2.2 bouyer /*
8 1.3.2.2 bouyer * Copyright (C) 2000 - 2011, Intel Corp.
9 1.3.2.2 bouyer * All rights reserved.
10 1.3.2.2 bouyer *
11 1.3.2.2 bouyer * Redistribution and use in source and binary forms, with or without
12 1.3.2.2 bouyer * modification, are permitted provided that the following conditions
13 1.3.2.2 bouyer * are met:
14 1.3.2.2 bouyer * 1. Redistributions of source code must retain the above copyright
15 1.3.2.2 bouyer * notice, this list of conditions, and the following disclaimer,
16 1.3.2.2 bouyer * without modification.
17 1.3.2.2 bouyer * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 1.3.2.2 bouyer * substantially similar to the "NO WARRANTY" disclaimer below
19 1.3.2.2 bouyer * ("Disclaimer") and any redistribution must be conditioned upon
20 1.3.2.2 bouyer * including a substantially similar Disclaimer requirement for further
21 1.3.2.2 bouyer * binary redistribution.
22 1.3.2.2 bouyer * 3. Neither the names of the above-listed copyright holders nor the names
23 1.3.2.2 bouyer * of any contributors may be used to endorse or promote products derived
24 1.3.2.2 bouyer * from this software without specific prior written permission.
25 1.3.2.2 bouyer *
26 1.3.2.2 bouyer * Alternatively, this software may be distributed under the terms of the
27 1.3.2.2 bouyer * GNU General Public License ("GPL") version 2 as published by the Free
28 1.3.2.2 bouyer * Software Foundation.
29 1.3.2.2 bouyer *
30 1.3.2.2 bouyer * NO WARRANTY
31 1.3.2.2 bouyer * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 1.3.2.2 bouyer * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 1.3.2.2 bouyer * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 1.3.2.2 bouyer * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 1.3.2.2 bouyer * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 1.3.2.2 bouyer * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 1.3.2.2 bouyer * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 1.3.2.2 bouyer * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 1.3.2.2 bouyer * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 1.3.2.2 bouyer * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 1.3.2.2 bouyer * POSSIBILITY OF SUCH DAMAGES.
42 1.3.2.2 bouyer */
43 1.3.2.2 bouyer
44 1.3.2.2 bouyer
45 1.3.2.2 bouyer #include "acpi.h"
46 1.3.2.2 bouyer #include "accommon.h"
47 1.3.2.2 bouyer #include "acparser.h"
48 1.3.2.2 bouyer #include "acopcode.h"
49 1.3.2.2 bouyer #include "amlcode.h"
50 1.3.2.2 bouyer
51 1.3.2.2 bouyer
52 1.3.2.2 bouyer #define _COMPONENT ACPI_PARSER
53 1.3.2.2 bouyer ACPI_MODULE_NAME ("psopcode")
54 1.3.2.2 bouyer
55 1.3.2.2 bouyer
56 1.3.2.2 bouyer static const UINT8 AcpiGbl_ArgumentCount[] = {0,1,1,1,1,2,2,2,2,3,3,6};
57 1.3.2.2 bouyer
58 1.3.2.2 bouyer
59 1.3.2.2 bouyer /*******************************************************************************
60 1.3.2.2 bouyer *
61 1.3.2.2 bouyer * NAME: AcpiGbl_AmlOpInfo
62 1.3.2.2 bouyer *
63 1.3.2.2 bouyer * DESCRIPTION: Opcode table. Each entry contains <opcode, type, name, operands>
64 1.3.2.2 bouyer * The name is a simple ascii string, the operand specifier is an
65 1.3.2.2 bouyer * ascii string with one letter per operand. The letter specifies
66 1.3.2.2 bouyer * the operand type.
67 1.3.2.2 bouyer *
68 1.3.2.2 bouyer ******************************************************************************/
69 1.3.2.2 bouyer
70 1.3.2.2 bouyer /*
71 1.3.2.2 bouyer * Summary of opcode types/flags
72 1.3.2.2 bouyer *
73 1.3.2.2 bouyer
74 1.3.2.2 bouyer Opcodes that have associated namespace objects (AML_NSOBJECT flag)
75 1.3.2.2 bouyer
76 1.3.2.2 bouyer AML_SCOPE_OP
77 1.3.2.2 bouyer AML_DEVICE_OP
78 1.3.2.2 bouyer AML_THERMAL_ZONE_OP
79 1.3.2.2 bouyer AML_METHOD_OP
80 1.3.2.2 bouyer AML_POWER_RES_OP
81 1.3.2.2 bouyer AML_PROCESSOR_OP
82 1.3.2.2 bouyer AML_FIELD_OP
83 1.3.2.2 bouyer AML_INDEX_FIELD_OP
84 1.3.2.2 bouyer AML_BANK_FIELD_OP
85 1.3.2.2 bouyer AML_NAME_OP
86 1.3.2.2 bouyer AML_ALIAS_OP
87 1.3.2.2 bouyer AML_MUTEX_OP
88 1.3.2.2 bouyer AML_EVENT_OP
89 1.3.2.2 bouyer AML_REGION_OP
90 1.3.2.2 bouyer AML_CREATE_FIELD_OP
91 1.3.2.2 bouyer AML_CREATE_BIT_FIELD_OP
92 1.3.2.2 bouyer AML_CREATE_BYTE_FIELD_OP
93 1.3.2.2 bouyer AML_CREATE_WORD_FIELD_OP
94 1.3.2.2 bouyer AML_CREATE_DWORD_FIELD_OP
95 1.3.2.2 bouyer AML_CREATE_QWORD_FIELD_OP
96 1.3.2.2 bouyer AML_INT_NAMEDFIELD_OP
97 1.3.2.2 bouyer AML_INT_METHODCALL_OP
98 1.3.2.2 bouyer AML_INT_NAMEPATH_OP
99 1.3.2.2 bouyer
100 1.3.2.2 bouyer Opcodes that are "namespace" opcodes (AML_NSOPCODE flag)
101 1.3.2.2 bouyer
102 1.3.2.2 bouyer AML_SCOPE_OP
103 1.3.2.2 bouyer AML_DEVICE_OP
104 1.3.2.2 bouyer AML_THERMAL_ZONE_OP
105 1.3.2.2 bouyer AML_METHOD_OP
106 1.3.2.2 bouyer AML_POWER_RES_OP
107 1.3.2.2 bouyer AML_PROCESSOR_OP
108 1.3.2.2 bouyer AML_FIELD_OP
109 1.3.2.2 bouyer AML_INDEX_FIELD_OP
110 1.3.2.2 bouyer AML_BANK_FIELD_OP
111 1.3.2.2 bouyer AML_NAME_OP
112 1.3.2.2 bouyer AML_ALIAS_OP
113 1.3.2.2 bouyer AML_MUTEX_OP
114 1.3.2.2 bouyer AML_EVENT_OP
115 1.3.2.2 bouyer AML_REGION_OP
116 1.3.2.2 bouyer AML_INT_NAMEDFIELD_OP
117 1.3.2.2 bouyer
118 1.3.2.2 bouyer Opcodes that have an associated namespace node (AML_NSNODE flag)
119 1.3.2.2 bouyer
120 1.3.2.2 bouyer AML_SCOPE_OP
121 1.3.2.2 bouyer AML_DEVICE_OP
122 1.3.2.2 bouyer AML_THERMAL_ZONE_OP
123 1.3.2.2 bouyer AML_METHOD_OP
124 1.3.2.2 bouyer AML_POWER_RES_OP
125 1.3.2.2 bouyer AML_PROCESSOR_OP
126 1.3.2.2 bouyer AML_NAME_OP
127 1.3.2.2 bouyer AML_ALIAS_OP
128 1.3.2.2 bouyer AML_MUTEX_OP
129 1.3.2.2 bouyer AML_EVENT_OP
130 1.3.2.2 bouyer AML_REGION_OP
131 1.3.2.2 bouyer AML_CREATE_FIELD_OP
132 1.3.2.2 bouyer AML_CREATE_BIT_FIELD_OP
133 1.3.2.2 bouyer AML_CREATE_BYTE_FIELD_OP
134 1.3.2.2 bouyer AML_CREATE_WORD_FIELD_OP
135 1.3.2.2 bouyer AML_CREATE_DWORD_FIELD_OP
136 1.3.2.2 bouyer AML_CREATE_QWORD_FIELD_OP
137 1.3.2.2 bouyer AML_INT_NAMEDFIELD_OP
138 1.3.2.2 bouyer AML_INT_METHODCALL_OP
139 1.3.2.2 bouyer AML_INT_NAMEPATH_OP
140 1.3.2.2 bouyer
141 1.3.2.2 bouyer Opcodes that define named ACPI objects (AML_NAMED flag)
142 1.3.2.2 bouyer
143 1.3.2.2 bouyer AML_SCOPE_OP
144 1.3.2.2 bouyer AML_DEVICE_OP
145 1.3.2.2 bouyer AML_THERMAL_ZONE_OP
146 1.3.2.2 bouyer AML_METHOD_OP
147 1.3.2.2 bouyer AML_POWER_RES_OP
148 1.3.2.2 bouyer AML_PROCESSOR_OP
149 1.3.2.2 bouyer AML_NAME_OP
150 1.3.2.2 bouyer AML_ALIAS_OP
151 1.3.2.2 bouyer AML_MUTEX_OP
152 1.3.2.2 bouyer AML_EVENT_OP
153 1.3.2.2 bouyer AML_REGION_OP
154 1.3.2.2 bouyer AML_INT_NAMEDFIELD_OP
155 1.3.2.2 bouyer
156 1.3.2.2 bouyer Opcodes that contain executable AML as part of the definition that
157 1.3.2.2 bouyer must be deferred until needed
158 1.3.2.2 bouyer
159 1.3.2.2 bouyer AML_METHOD_OP
160 1.3.2.2 bouyer AML_VAR_PACKAGE_OP
161 1.3.2.2 bouyer AML_CREATE_FIELD_OP
162 1.3.2.2 bouyer AML_CREATE_BIT_FIELD_OP
163 1.3.2.2 bouyer AML_CREATE_BYTE_FIELD_OP
164 1.3.2.2 bouyer AML_CREATE_WORD_FIELD_OP
165 1.3.2.2 bouyer AML_CREATE_DWORD_FIELD_OP
166 1.3.2.2 bouyer AML_CREATE_QWORD_FIELD_OP
167 1.3.2.2 bouyer AML_REGION_OP
168 1.3.2.2 bouyer AML_BUFFER_OP
169 1.3.2.2 bouyer
170 1.3.2.2 bouyer Field opcodes
171 1.3.2.2 bouyer
172 1.3.2.2 bouyer AML_CREATE_FIELD_OP
173 1.3.2.2 bouyer AML_FIELD_OP
174 1.3.2.2 bouyer AML_INDEX_FIELD_OP
175 1.3.2.2 bouyer AML_BANK_FIELD_OP
176 1.3.2.2 bouyer
177 1.3.2.2 bouyer Field "Create" opcodes
178 1.3.2.2 bouyer
179 1.3.2.2 bouyer AML_CREATE_FIELD_OP
180 1.3.2.2 bouyer AML_CREATE_BIT_FIELD_OP
181 1.3.2.2 bouyer AML_CREATE_BYTE_FIELD_OP
182 1.3.2.2 bouyer AML_CREATE_WORD_FIELD_OP
183 1.3.2.2 bouyer AML_CREATE_DWORD_FIELD_OP
184 1.3.2.2 bouyer AML_CREATE_QWORD_FIELD_OP
185 1.3.2.2 bouyer
186 1.3.2.2 bouyer ******************************************************************************/
187 1.3.2.2 bouyer
188 1.3.2.2 bouyer
189 1.3.2.2 bouyer /*
190 1.3.2.2 bouyer * Master Opcode information table. A summary of everything we know about each
191 1.3.2.2 bouyer * opcode, all in one place.
192 1.3.2.2 bouyer */
193 1.3.2.2 bouyer const ACPI_OPCODE_INFO AcpiGbl_AmlOpInfo[AML_NUM_OPCODES] =
194 1.3.2.2 bouyer {
195 1.3.2.2 bouyer /*! [Begin] no source code translation */
196 1.3.2.2 bouyer /* Index Name Parser Args Interpreter Args ObjectType Class Type Flags */
197 1.3.2.2 bouyer
198 1.3.2.2 bouyer /* 00 */ ACPI_OP ("Zero", ARGP_ZERO_OP, ARGI_ZERO_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT),
199 1.3.2.2 bouyer /* 01 */ ACPI_OP ("One", ARGP_ONE_OP, ARGI_ONE_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT),
200 1.3.2.2 bouyer /* 02 */ ACPI_OP ("Alias", ARGP_ALIAS_OP, ARGI_ALIAS_OP, ACPI_TYPE_LOCAL_ALIAS, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
201 1.3.2.2 bouyer /* 03 */ ACPI_OP ("Name", ARGP_NAME_OP, ARGI_NAME_OP, ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
202 1.3.2.2 bouyer /* 04 */ ACPI_OP ("ByteConst", ARGP_BYTE_OP, ARGI_BYTE_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT),
203 1.3.2.2 bouyer /* 05 */ ACPI_OP ("WordConst", ARGP_WORD_OP, ARGI_WORD_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT),
204 1.3.2.2 bouyer /* 06 */ ACPI_OP ("DwordConst", ARGP_DWORD_OP, ARGI_DWORD_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT),
205 1.3.2.2 bouyer /* 07 */ ACPI_OP ("String", ARGP_STRING_OP, ARGI_STRING_OP, ACPI_TYPE_STRING, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT),
206 1.3.2.2 bouyer /* 08 */ ACPI_OP ("Scope", ARGP_SCOPE_OP, ARGI_SCOPE_OP, ACPI_TYPE_LOCAL_SCOPE, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
207 1.3.2.2 bouyer /* 09 */ ACPI_OP ("Buffer", ARGP_BUFFER_OP, ARGI_BUFFER_OP, ACPI_TYPE_BUFFER, AML_CLASS_CREATE, AML_TYPE_CREATE_OBJECT, AML_HAS_ARGS | AML_DEFER | AML_CONSTANT),
208 1.3.2.2 bouyer /* 0A */ ACPI_OP ("Package", ARGP_PACKAGE_OP, ARGI_PACKAGE_OP, ACPI_TYPE_PACKAGE, AML_CLASS_CREATE, AML_TYPE_CREATE_OBJECT, AML_HAS_ARGS | AML_DEFER | AML_CONSTANT),
209 1.3.2.2 bouyer /* 0B */ ACPI_OP ("Method", ARGP_METHOD_OP, ARGI_METHOD_OP, ACPI_TYPE_METHOD, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER),
210 1.3.2.2 bouyer /* 0C */ ACPI_OP ("Local0", ARGP_LOCAL0, ARGI_LOCAL0, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
211 1.3.2.2 bouyer /* 0D */ ACPI_OP ("Local1", ARGP_LOCAL1, ARGI_LOCAL1, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
212 1.3.2.2 bouyer /* 0E */ ACPI_OP ("Local2", ARGP_LOCAL2, ARGI_LOCAL2, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
213 1.3.2.2 bouyer /* 0F */ ACPI_OP ("Local3", ARGP_LOCAL3, ARGI_LOCAL3, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
214 1.3.2.2 bouyer /* 10 */ ACPI_OP ("Local4", ARGP_LOCAL4, ARGI_LOCAL4, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
215 1.3.2.2 bouyer /* 11 */ ACPI_OP ("Local5", ARGP_LOCAL5, ARGI_LOCAL5, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
216 1.3.2.2 bouyer /* 12 */ ACPI_OP ("Local6", ARGP_LOCAL6, ARGI_LOCAL6, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
217 1.3.2.2 bouyer /* 13 */ ACPI_OP ("Local7", ARGP_LOCAL7, ARGI_LOCAL7, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0),
218 1.3.2.2 bouyer /* 14 */ ACPI_OP ("Arg0", ARGP_ARG0, ARGI_ARG0, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
219 1.3.2.2 bouyer /* 15 */ ACPI_OP ("Arg1", ARGP_ARG1, ARGI_ARG1, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
220 1.3.2.2 bouyer /* 16 */ ACPI_OP ("Arg2", ARGP_ARG2, ARGI_ARG2, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
221 1.3.2.2 bouyer /* 17 */ ACPI_OP ("Arg3", ARGP_ARG3, ARGI_ARG3, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
222 1.3.2.2 bouyer /* 18 */ ACPI_OP ("Arg4", ARGP_ARG4, ARGI_ARG4, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
223 1.3.2.2 bouyer /* 19 */ ACPI_OP ("Arg5", ARGP_ARG5, ARGI_ARG5, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
224 1.3.2.2 bouyer /* 1A */ ACPI_OP ("Arg6", ARGP_ARG6, ARGI_ARG6, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0),
225 1.3.2.2 bouyer /* 1B */ ACPI_OP ("Store", ARGP_STORE_OP, ARGI_STORE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
226 1.3.2.2 bouyer /* 1C */ ACPI_OP ("RefOf", ARGP_REF_OF_OP, ARGI_REF_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
227 1.3.2.2 bouyer /* 1D */ ACPI_OP ("Add", ARGP_ADD_OP, ARGI_ADD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
228 1.3.2.2 bouyer /* 1E */ ACPI_OP ("Concatenate", ARGP_CONCAT_OP, ARGI_CONCAT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
229 1.3.2.2 bouyer /* 1F */ ACPI_OP ("Subtract", ARGP_SUBTRACT_OP, ARGI_SUBTRACT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
230 1.3.2.2 bouyer /* 20 */ ACPI_OP ("Increment", ARGP_INCREMENT_OP, ARGI_INCREMENT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT),
231 1.3.2.2 bouyer /* 21 */ ACPI_OP ("Decrement", ARGP_DECREMENT_OP, ARGI_DECREMENT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT),
232 1.3.2.2 bouyer /* 22 */ ACPI_OP ("Multiply", ARGP_MULTIPLY_OP, ARGI_MULTIPLY_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
233 1.3.2.2 bouyer /* 23 */ ACPI_OP ("Divide", ARGP_DIVIDE_OP, ARGI_DIVIDE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_2T_1R, AML_FLAGS_EXEC_2A_2T_1R | AML_CONSTANT),
234 1.3.2.2 bouyer /* 24 */ ACPI_OP ("ShiftLeft", ARGP_SHIFT_LEFT_OP, ARGI_SHIFT_LEFT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
235 1.3.2.2 bouyer /* 25 */ ACPI_OP ("ShiftRight", ARGP_SHIFT_RIGHT_OP, ARGI_SHIFT_RIGHT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
236 1.3.2.2 bouyer /* 26 */ ACPI_OP ("And", ARGP_BIT_AND_OP, ARGI_BIT_AND_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
237 1.3.2.2 bouyer /* 27 */ ACPI_OP ("NAnd", ARGP_BIT_NAND_OP, ARGI_BIT_NAND_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
238 1.3.2.2 bouyer /* 28 */ ACPI_OP ("Or", ARGP_BIT_OR_OP, ARGI_BIT_OR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
239 1.3.2.2 bouyer /* 29 */ ACPI_OP ("NOr", ARGP_BIT_NOR_OP, ARGI_BIT_NOR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
240 1.3.2.2 bouyer /* 2A */ ACPI_OP ("XOr", ARGP_BIT_XOR_OP, ARGI_BIT_XOR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
241 1.3.2.2 bouyer /* 2B */ ACPI_OP ("Not", ARGP_BIT_NOT_OP, ARGI_BIT_NOT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
242 1.3.2.2 bouyer /* 2C */ ACPI_OP ("FindSetLeftBit", ARGP_FIND_SET_LEFT_BIT_OP, ARGI_FIND_SET_LEFT_BIT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
243 1.3.2.2 bouyer /* 2D */ ACPI_OP ("FindSetRightBit", ARGP_FIND_SET_RIGHT_BIT_OP,ARGI_FIND_SET_RIGHT_BIT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
244 1.3.2.2 bouyer /* 2E */ ACPI_OP ("DerefOf", ARGP_DEREF_OF_OP, ARGI_DEREF_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
245 1.3.2.2 bouyer /* 2F */ ACPI_OP ("Notify", ARGP_NOTIFY_OP, ARGI_NOTIFY_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_0R, AML_FLAGS_EXEC_2A_0T_0R),
246 1.3.2.2 bouyer /* 30 */ ACPI_OP ("SizeOf", ARGP_SIZE_OF_OP, ARGI_SIZE_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R | AML_NO_OPERAND_RESOLVE),
247 1.3.2.2 bouyer /* 31 */ ACPI_OP ("Index", ARGP_INDEX_OP, ARGI_INDEX_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R),
248 1.3.2.2 bouyer /* 32 */ ACPI_OP ("Match", ARGP_MATCH_OP, ARGI_MATCH_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_6A_0T_1R, AML_FLAGS_EXEC_6A_0T_1R | AML_CONSTANT),
249 1.3.2.2 bouyer /* 33 */ ACPI_OP ("CreateDWordField", ARGP_CREATE_DWORD_FIELD_OP,ARGI_CREATE_DWORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
250 1.3.2.2 bouyer /* 34 */ ACPI_OP ("CreateWordField", ARGP_CREATE_WORD_FIELD_OP, ARGI_CREATE_WORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
251 1.3.2.2 bouyer /* 35 */ ACPI_OP ("CreateByteField", ARGP_CREATE_BYTE_FIELD_OP, ARGI_CREATE_BYTE_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
252 1.3.2.2 bouyer /* 36 */ ACPI_OP ("CreateBitField", ARGP_CREATE_BIT_FIELD_OP, ARGI_CREATE_BIT_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
253 1.3.2.2 bouyer /* 37 */ ACPI_OP ("ObjectType", ARGP_TYPE_OP, ARGI_TYPE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R | AML_NO_OPERAND_RESOLVE),
254 1.3.2.2 bouyer /* 38 */ ACPI_OP ("LAnd", ARGP_LAND_OP, ARGI_LAND_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL_NUMERIC | AML_CONSTANT),
255 1.3.2.2 bouyer /* 39 */ ACPI_OP ("LOr", ARGP_LOR_OP, ARGI_LOR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL_NUMERIC | AML_CONSTANT),
256 1.3.2.2 bouyer /* 3A */ ACPI_OP ("LNot", ARGP_LNOT_OP, ARGI_LNOT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT),
257 1.3.2.2 bouyer /* 3B */ ACPI_OP ("LEqual", ARGP_LEQUAL_OP, ARGI_LEQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT),
258 1.3.2.2 bouyer /* 3C */ ACPI_OP ("LGreater", ARGP_LGREATER_OP, ARGI_LGREATER_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT),
259 1.3.2.2 bouyer /* 3D */ ACPI_OP ("LLess", ARGP_LLESS_OP, ARGI_LLESS_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT),
260 1.3.2.2 bouyer /* 3E */ ACPI_OP ("If", ARGP_IF_OP, ARGI_IF_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
261 1.3.2.2 bouyer /* 3F */ ACPI_OP ("Else", ARGP_ELSE_OP, ARGI_ELSE_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
262 1.3.2.2 bouyer /* 40 */ ACPI_OP ("While", ARGP_WHILE_OP, ARGI_WHILE_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
263 1.3.2.2 bouyer /* 41 */ ACPI_OP ("Noop", ARGP_NOOP_OP, ARGI_NOOP_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
264 1.3.2.2 bouyer /* 42 */ ACPI_OP ("Return", ARGP_RETURN_OP, ARGI_RETURN_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
265 1.3.2.2 bouyer /* 43 */ ACPI_OP ("Break", ARGP_BREAK_OP, ARGI_BREAK_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
266 1.3.2.2 bouyer /* 44 */ ACPI_OP ("BreakPoint", ARGP_BREAK_POINT_OP, ARGI_BREAK_POINT_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
267 1.3.2.2 bouyer /* 45 */ ACPI_OP ("Ones", ARGP_ONES_OP, ARGI_ONES_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT),
268 1.3.2.2 bouyer
269 1.3.2.2 bouyer /* Prefixed opcodes (Two-byte opcodes with a prefix op) */
270 1.3.2.2 bouyer
271 1.3.2.2 bouyer /* 46 */ ACPI_OP ("Mutex", ARGP_MUTEX_OP, ARGI_MUTEX_OP, ACPI_TYPE_MUTEX, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
272 1.3.2.2 bouyer /* 47 */ ACPI_OP ("Event", ARGP_EVENT_OP, ARGI_EVENT_OP, ACPI_TYPE_EVENT, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED ),
273 1.3.2.2 bouyer /* 48 */ ACPI_OP ("CondRefOf", ARGP_COND_REF_OF_OP, ARGI_COND_REF_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
274 1.3.2.2 bouyer /* 49 */ ACPI_OP ("CreateField", ARGP_CREATE_FIELD_OP, ARGI_CREATE_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_FIELD | AML_CREATE),
275 1.3.2.2 bouyer /* 4A */ ACPI_OP ("Load", ARGP_LOAD_OP, ARGI_LOAD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_0R, AML_FLAGS_EXEC_1A_1T_0R),
276 1.3.2.2 bouyer /* 4B */ ACPI_OP ("Stall", ARGP_STALL_OP, ARGI_STALL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
277 1.3.2.2 bouyer /* 4C */ ACPI_OP ("Sleep", ARGP_SLEEP_OP, ARGI_SLEEP_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
278 1.3.2.2 bouyer /* 4D */ ACPI_OP ("Acquire", ARGP_ACQUIRE_OP, ARGI_ACQUIRE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R),
279 1.3.2.2 bouyer /* 4E */ ACPI_OP ("Signal", ARGP_SIGNAL_OP, ARGI_SIGNAL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
280 1.3.2.2 bouyer /* 4F */ ACPI_OP ("Wait", ARGP_WAIT_OP, ARGI_WAIT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R),
281 1.3.2.2 bouyer /* 50 */ ACPI_OP ("Reset", ARGP_RESET_OP, ARGI_RESET_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
282 1.3.2.2 bouyer /* 51 */ ACPI_OP ("Release", ARGP_RELEASE_OP, ARGI_RELEASE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
283 1.3.2.2 bouyer /* 52 */ ACPI_OP ("FromBCD", ARGP_FROM_BCD_OP, ARGI_FROM_BCD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
284 1.3.2.2 bouyer /* 53 */ ACPI_OP ("ToBCD", ARGP_TO_BCD_OP, ARGI_TO_BCD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
285 1.3.2.2 bouyer /* 54 */ ACPI_OP ("Unload", ARGP_UNLOAD_OP, ARGI_UNLOAD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
286 1.3.2.2 bouyer /* 55 */ ACPI_OP ("Revision", ARGP_REVISION_OP, ARGI_REVISION_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0),
287 1.3.2.2 bouyer /* 56 */ ACPI_OP ("Debug", ARGP_DEBUG_OP, ARGI_DEBUG_OP, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0),
288 1.3.2.2 bouyer /* 57 */ ACPI_OP ("Fatal", ARGP_FATAL_OP, ARGI_FATAL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_0T_0R, AML_FLAGS_EXEC_3A_0T_0R),
289 1.3.2.2 bouyer /* 58 */ ACPI_OP ("OperationRegion", ARGP_REGION_OP, ARGI_REGION_OP, ACPI_TYPE_REGION, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER),
290 1.3.2.2 bouyer /* 59 */ ACPI_OP ("Field", ARGP_FIELD_OP, ARGI_FIELD_OP, ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD),
291 1.3.2.2 bouyer /* 5A */ ACPI_OP ("Device", ARGP_DEVICE_OP, ARGI_DEVICE_OP, ACPI_TYPE_DEVICE, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
292 1.3.2.2 bouyer /* 5B */ ACPI_OP ("Processor", ARGP_PROCESSOR_OP, ARGI_PROCESSOR_OP, ACPI_TYPE_PROCESSOR, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
293 1.3.2.2 bouyer /* 5C */ ACPI_OP ("PowerResource", ARGP_POWER_RES_OP, ARGI_POWER_RES_OP, ACPI_TYPE_POWER, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
294 1.3.2.2 bouyer /* 5D */ ACPI_OP ("ThermalZone", ARGP_THERMAL_ZONE_OP, ARGI_THERMAL_ZONE_OP, ACPI_TYPE_THERMAL, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
295 1.3.2.2 bouyer /* 5E */ ACPI_OP ("IndexField", ARGP_INDEX_FIELD_OP, ARGI_INDEX_FIELD_OP, ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD),
296 1.3.2.2 bouyer /* 5F */ ACPI_OP ("BankField", ARGP_BANK_FIELD_OP, ARGI_BANK_FIELD_OP, ACPI_TYPE_LOCAL_BANK_FIELD, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD | AML_DEFER),
297 1.3.2.2 bouyer
298 1.3.2.2 bouyer /* Internal opcodes that map to invalid AML opcodes */
299 1.3.2.2 bouyer
300 1.3.2.2 bouyer /* 60 */ ACPI_OP ("LNotEqual", ARGP_LNOTEQUAL_OP, ARGI_LNOTEQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT),
301 1.3.2.2 bouyer /* 61 */ ACPI_OP ("LLessEqual", ARGP_LLESSEQUAL_OP, ARGI_LLESSEQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT),
302 1.3.2.2 bouyer /* 62 */ ACPI_OP ("LGreaterEqual", ARGP_LGREATEREQUAL_OP, ARGI_LGREATEREQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT),
303 1.3.2.2 bouyer /* 63 */ ACPI_OP ("-NamePath-", ARGP_NAMEPATH_OP, ARGI_NAMEPATH_OP, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_NSOBJECT | AML_NSNODE ),
304 1.3.2.2 bouyer /* 64 */ ACPI_OP ("-MethodCall-", ARGP_METHODCALL_OP, ARGI_METHODCALL_OP, ACPI_TYPE_METHOD, AML_CLASS_METHOD_CALL, AML_TYPE_METHOD_CALL, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE),
305 1.3.2.2 bouyer /* 65 */ ACPI_OP ("-ByteList-", ARGP_BYTELIST_OP, ARGI_BYTELIST_OP, ACPI_TYPE_ANY, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0),
306 1.3.2.2 bouyer /* 66 */ ACPI_OP ("-ReservedField-", ARGP_RESERVEDFIELD_OP, ARGI_RESERVEDFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
307 1.3.2.2 bouyer /* 67 */ ACPI_OP ("-NamedField-", ARGP_NAMEDFIELD_OP, ARGI_NAMEDFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED ),
308 1.3.2.2 bouyer /* 68 */ ACPI_OP ("-AccessField-", ARGP_ACCESSFIELD_OP, ARGI_ACCESSFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
309 1.3.2.2 bouyer /* 69 */ ACPI_OP ("-StaticString", ARGP_STATICSTRING_OP, ARGI_STATICSTRING_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
310 1.3.2.2 bouyer /* 6A */ ACPI_OP ("-Return Value-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_RETURN_VALUE, AML_TYPE_RETURN, AML_HAS_ARGS | AML_HAS_RETVAL),
311 1.3.2.2 bouyer /* 6B */ ACPI_OP ("-UNKNOWN_OP-", ARG_NONE, ARG_NONE, ACPI_TYPE_INVALID, AML_CLASS_UNKNOWN, AML_TYPE_BOGUS, AML_HAS_ARGS),
312 1.3.2.2 bouyer /* 6C */ ACPI_OP ("-ASCII_ONLY-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_ASCII, AML_TYPE_BOGUS, AML_HAS_ARGS),
313 1.3.2.2 bouyer /* 6D */ ACPI_OP ("-PREFIX_ONLY-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_PREFIX, AML_TYPE_BOGUS, AML_HAS_ARGS),
314 1.3.2.2 bouyer
315 1.3.2.2 bouyer /* ACPI 2.0 opcodes */
316 1.3.2.2 bouyer
317 1.3.2.2 bouyer /* 6E */ ACPI_OP ("QwordConst", ARGP_QWORD_OP, ARGI_QWORD_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT),
318 1.3.2.2 bouyer /* 6F */ ACPI_OP ("Package", /* Var */ ARGP_VAR_PACKAGE_OP, ARGI_VAR_PACKAGE_OP, ACPI_TYPE_PACKAGE, AML_CLASS_CREATE, AML_TYPE_CREATE_OBJECT, AML_HAS_ARGS | AML_DEFER),
319 1.3.2.2 bouyer /* 70 */ ACPI_OP ("ConcatenateResTemplate", ARGP_CONCAT_RES_OP, ARGI_CONCAT_RES_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
320 1.3.2.2 bouyer /* 71 */ ACPI_OP ("Mod", ARGP_MOD_OP, ARGI_MOD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
321 1.3.2.2 bouyer /* 72 */ ACPI_OP ("CreateQWordField", ARGP_CREATE_QWORD_FIELD_OP,ARGI_CREATE_QWORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
322 1.3.2.2 bouyer /* 73 */ ACPI_OP ("ToBuffer", ARGP_TO_BUFFER_OP, ARGI_TO_BUFFER_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
323 1.3.2.2 bouyer /* 74 */ ACPI_OP ("ToDecimalString", ARGP_TO_DEC_STR_OP, ARGI_TO_DEC_STR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
324 1.3.2.2 bouyer /* 75 */ ACPI_OP ("ToHexString", ARGP_TO_HEX_STR_OP, ARGI_TO_HEX_STR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
325 1.3.2.2 bouyer /* 76 */ ACPI_OP ("ToInteger", ARGP_TO_INTEGER_OP, ARGI_TO_INTEGER_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
326 1.3.2.2 bouyer /* 77 */ ACPI_OP ("ToString", ARGP_TO_STRING_OP, ARGI_TO_STRING_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
327 1.3.2.2 bouyer /* 78 */ ACPI_OP ("CopyObject", ARGP_COPY_OP, ARGI_COPY_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
328 1.3.2.2 bouyer /* 79 */ ACPI_OP ("Mid", ARGP_MID_OP, ARGI_MID_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_1T_1R, AML_FLAGS_EXEC_3A_1T_1R | AML_CONSTANT),
329 1.3.2.2 bouyer /* 7A */ ACPI_OP ("Continue", ARGP_CONTINUE_OP, ARGI_CONTINUE_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
330 1.3.2.2 bouyer /* 7B */ ACPI_OP ("LoadTable", ARGP_LOAD_TABLE_OP, ARGI_LOAD_TABLE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_6A_0T_1R, AML_FLAGS_EXEC_6A_0T_1R),
331 1.3.2.2 bouyer /* 7C */ ACPI_OP ("DataTableRegion", ARGP_DATA_REGION_OP, ARGI_DATA_REGION_OP, ACPI_TYPE_REGION, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER),
332 1.3.2.2 bouyer /* 7D */ ACPI_OP ("[EvalSubTree]", ARGP_SCOPE_OP, ARGI_SCOPE_OP, ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE),
333 1.3.2.2 bouyer
334 1.3.2.2 bouyer /* ACPI 3.0 opcodes */
335 1.3.2.2 bouyer
336 1.3.2.2 bouyer /* 7E */ ACPI_OP ("Timer", ARGP_TIMER_OP, ARGI_TIMER_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_0A_0T_1R, AML_FLAGS_EXEC_0A_0T_1R)
337 1.3.2.2 bouyer
338 1.3.2.2 bouyer /*! [End] no source code translation !*/
339 1.3.2.2 bouyer };
340 1.3.2.2 bouyer
341 1.3.2.2 bouyer /*
342 1.3.2.2 bouyer * This table is directly indexed by the opcodes, and returns an
343 1.3.2.2 bouyer * index into the table above
344 1.3.2.2 bouyer */
345 1.3.2.2 bouyer static const UINT8 AcpiGbl_ShortOpIndex[256] =
346 1.3.2.2 bouyer {
347 1.3.2.2 bouyer /* 0 1 2 3 4 5 6 7 */
348 1.3.2.2 bouyer /* 8 9 A B C D E F */
349 1.3.2.2 bouyer /* 0x00 */ 0x00, 0x01, _UNK, _UNK, _UNK, _UNK, 0x02, _UNK,
350 1.3.2.2 bouyer /* 0x08 */ 0x03, _UNK, 0x04, 0x05, 0x06, 0x07, 0x6E, _UNK,
351 1.3.2.2 bouyer /* 0x10 */ 0x08, 0x09, 0x0a, 0x6F, 0x0b, _UNK, _UNK, _UNK,
352 1.3.2.2 bouyer /* 0x18 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
353 1.3.2.2 bouyer /* 0x20 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
354 1.3.2.2 bouyer /* 0x28 */ _UNK, _UNK, _UNK, _UNK, _UNK, 0x63, _PFX, _PFX,
355 1.3.2.2 bouyer /* 0x30 */ 0x67, 0x66, 0x68, 0x65, 0x69, 0x64, 0x6A, 0x7D,
356 1.3.2.2 bouyer /* 0x38 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
357 1.3.2.2 bouyer /* 0x40 */ _UNK, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
358 1.3.2.2 bouyer /* 0x48 */ _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
359 1.3.2.2 bouyer /* 0x50 */ _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
360 1.3.2.2 bouyer /* 0x58 */ _ASC, _ASC, _ASC, _UNK, _PFX, _UNK, _PFX, _ASC,
361 1.3.2.2 bouyer /* 0x60 */ 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
362 1.3.2.2 bouyer /* 0x68 */ 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, _UNK,
363 1.3.2.2 bouyer /* 0x70 */ 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22,
364 1.3.2.2 bouyer /* 0x78 */ 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a,
365 1.3.2.2 bouyer /* 0x80 */ 0x2b, 0x2c, 0x2d, 0x2e, 0x70, 0x71, 0x2f, 0x30,
366 1.3.2.2 bouyer /* 0x88 */ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x72,
367 1.3.2.2 bouyer /* 0x90 */ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x73, 0x74,
368 1.3.2.2 bouyer /* 0x98 */ 0x75, 0x76, _UNK, _UNK, 0x77, 0x78, 0x79, 0x7A,
369 1.3.2.2 bouyer /* 0xA0 */ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x60, 0x61,
370 1.3.2.2 bouyer /* 0xA8 */ 0x62, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
371 1.3.2.2 bouyer /* 0xB0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
372 1.3.2.2 bouyer /* 0xB8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
373 1.3.2.2 bouyer /* 0xC0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
374 1.3.2.2 bouyer /* 0xC8 */ _UNK, _UNK, _UNK, _UNK, 0x44, _UNK, _UNK, _UNK,
375 1.3.2.2 bouyer /* 0xD0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
376 1.3.2.2 bouyer /* 0xD8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
377 1.3.2.2 bouyer /* 0xE0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
378 1.3.2.2 bouyer /* 0xE8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
379 1.3.2.2 bouyer /* 0xF0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
380 1.3.2.2 bouyer /* 0xF8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0x45,
381 1.3.2.2 bouyer };
382 1.3.2.2 bouyer
383 1.3.2.2 bouyer /*
384 1.3.2.2 bouyer * This table is indexed by the second opcode of the extended opcode
385 1.3.2.2 bouyer * pair. It returns an index into the opcode table (AcpiGbl_AmlOpInfo)
386 1.3.2.2 bouyer */
387 1.3.2.2 bouyer static const UINT8 AcpiGbl_LongOpIndex[NUM_EXTENDED_OPCODE] =
388 1.3.2.2 bouyer {
389 1.3.2.2 bouyer /* 0 1 2 3 4 5 6 7 */
390 1.3.2.2 bouyer /* 8 9 A B C D E F */
391 1.3.2.2 bouyer /* 0x00 */ _UNK, 0x46, 0x47, _UNK, _UNK, _UNK, _UNK, _UNK,
392 1.3.2.2 bouyer /* 0x08 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
393 1.3.2.2 bouyer /* 0x10 */ _UNK, _UNK, 0x48, 0x49, _UNK, _UNK, _UNK, _UNK,
394 1.3.2.2 bouyer /* 0x18 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0x7B,
395 1.3.2.2 bouyer /* 0x20 */ 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51,
396 1.3.2.2 bouyer /* 0x28 */ 0x52, 0x53, 0x54, _UNK, _UNK, _UNK, _UNK, _UNK,
397 1.3.2.2 bouyer /* 0x30 */ 0x55, 0x56, 0x57, 0x7e, _UNK, _UNK, _UNK, _UNK,
398 1.3.2.2 bouyer /* 0x38 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
399 1.3.2.2 bouyer /* 0x40 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
400 1.3.2.2 bouyer /* 0x48 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
401 1.3.2.2 bouyer /* 0x50 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
402 1.3.2.2 bouyer /* 0x58 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
403 1.3.2.2 bouyer /* 0x60 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
404 1.3.2.2 bouyer /* 0x68 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
405 1.3.2.2 bouyer /* 0x70 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
406 1.3.2.2 bouyer /* 0x78 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
407 1.3.2.2 bouyer /* 0x80 */ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
408 1.3.2.2 bouyer /* 0x88 */ 0x7C,
409 1.3.2.2 bouyer };
410 1.3.2.2 bouyer
411 1.3.2.2 bouyer
412 1.3.2.2 bouyer /*******************************************************************************
413 1.3.2.2 bouyer *
414 1.3.2.2 bouyer * FUNCTION: AcpiPsGetOpcodeInfo
415 1.3.2.2 bouyer *
416 1.3.2.2 bouyer * PARAMETERS: Opcode - The AML opcode
417 1.3.2.2 bouyer *
418 1.3.2.2 bouyer * RETURN: A pointer to the info about the opcode.
419 1.3.2.2 bouyer *
420 1.3.2.2 bouyer * DESCRIPTION: Find AML opcode description based on the opcode.
421 1.3.2.2 bouyer * NOTE: This procedure must ALWAYS return a valid pointer!
422 1.3.2.2 bouyer *
423 1.3.2.2 bouyer ******************************************************************************/
424 1.3.2.2 bouyer
425 1.3.2.2 bouyer const ACPI_OPCODE_INFO *
426 1.3.2.2 bouyer AcpiPsGetOpcodeInfo (
427 1.3.2.2 bouyer UINT16 Opcode)
428 1.3.2.2 bouyer {
429 1.3.2.2 bouyer ACPI_FUNCTION_NAME (PsGetOpcodeInfo);
430 1.3.2.2 bouyer
431 1.3.2.2 bouyer
432 1.3.2.2 bouyer /*
433 1.3.2.2 bouyer * Detect normal 8-bit opcode or extended 16-bit opcode
434 1.3.2.2 bouyer */
435 1.3.2.2 bouyer if (!(Opcode & 0xFF00))
436 1.3.2.2 bouyer {
437 1.3.2.2 bouyer /* Simple (8-bit) opcode: 0-255, can't index beyond table */
438 1.3.2.2 bouyer
439 1.3.2.2 bouyer return (&AcpiGbl_AmlOpInfo [AcpiGbl_ShortOpIndex [(UINT8) Opcode]]);
440 1.3.2.2 bouyer }
441 1.3.2.2 bouyer
442 1.3.2.2 bouyer if (((Opcode & 0xFF00) == AML_EXTENDED_OPCODE) &&
443 1.3.2.2 bouyer (((UINT8) Opcode) <= MAX_EXTENDED_OPCODE))
444 1.3.2.2 bouyer {
445 1.3.2.2 bouyer /* Valid extended (16-bit) opcode */
446 1.3.2.2 bouyer
447 1.3.2.2 bouyer return (&AcpiGbl_AmlOpInfo [AcpiGbl_LongOpIndex [(UINT8) Opcode]]);
448 1.3.2.2 bouyer }
449 1.3.2.2 bouyer
450 1.3.2.2 bouyer /* Unknown AML opcode */
451 1.3.2.2 bouyer
452 1.3.2.2 bouyer ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
453 1.3.2.2 bouyer "Unknown AML opcode [%4.4X]\n", Opcode));
454 1.3.2.2 bouyer
455 1.3.2.2 bouyer return (&AcpiGbl_AmlOpInfo [_UNK]);
456 1.3.2.2 bouyer }
457 1.3.2.2 bouyer
458 1.3.2.2 bouyer
459 1.3.2.2 bouyer /*******************************************************************************
460 1.3.2.2 bouyer *
461 1.3.2.2 bouyer * FUNCTION: AcpiPsGetOpcodeName
462 1.3.2.2 bouyer *
463 1.3.2.2 bouyer * PARAMETERS: Opcode - The AML opcode
464 1.3.2.2 bouyer *
465 1.3.2.2 bouyer * RETURN: A pointer to the name of the opcode (ASCII String)
466 1.3.2.2 bouyer * Note: Never returns NULL.
467 1.3.2.2 bouyer *
468 1.3.2.2 bouyer * DESCRIPTION: Translate an opcode into a human-readable string
469 1.3.2.2 bouyer *
470 1.3.2.2 bouyer ******************************************************************************/
471 1.3.2.2 bouyer
472 1.3.2.2 bouyer char *
473 1.3.2.2 bouyer AcpiPsGetOpcodeName (
474 1.3.2.2 bouyer UINT16 Opcode)
475 1.3.2.2 bouyer {
476 1.3.2.2 bouyer #if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT)
477 1.3.2.2 bouyer
478 1.3.2.2 bouyer const ACPI_OPCODE_INFO *Op;
479 1.3.2.2 bouyer
480 1.3.2.2 bouyer
481 1.3.2.2 bouyer Op = AcpiPsGetOpcodeInfo (Opcode);
482 1.3.2.2 bouyer
483 1.3.2.2 bouyer /* Always guaranteed to return a valid pointer */
484 1.3.2.2 bouyer
485 1.3.2.2 bouyer return __UNCONST(Op->Name);
486 1.3.2.2 bouyer
487 1.3.2.2 bouyer #else
488 1.3.2.2 bouyer return __UNCONST("OpcodeName unavailable");
489 1.3.2.2 bouyer
490 1.3.2.2 bouyer #endif
491 1.3.2.2 bouyer }
492 1.3.2.2 bouyer
493 1.3.2.2 bouyer
494 1.3.2.2 bouyer /*******************************************************************************
495 1.3.2.2 bouyer *
496 1.3.2.2 bouyer * FUNCTION: AcpiPsGetArgumentCount
497 1.3.2.2 bouyer *
498 1.3.2.2 bouyer * PARAMETERS: OpType - Type associated with the AML opcode
499 1.3.2.2 bouyer *
500 1.3.2.2 bouyer * RETURN: Argument count
501 1.3.2.2 bouyer *
502 1.3.2.2 bouyer * DESCRIPTION: Obtain the number of expected arguments for an AML opcode
503 1.3.2.2 bouyer *
504 1.3.2.2 bouyer ******************************************************************************/
505 1.3.2.2 bouyer
506 1.3.2.2 bouyer UINT8
507 1.3.2.2 bouyer AcpiPsGetArgumentCount (
508 1.3.2.2 bouyer UINT32 OpType)
509 1.3.2.2 bouyer {
510 1.3.2.2 bouyer
511 1.3.2.2 bouyer if (OpType <= AML_TYPE_EXEC_6A_0T_1R)
512 1.3.2.2 bouyer {
513 1.3.2.2 bouyer return (AcpiGbl_ArgumentCount[OpType]);
514 1.3.2.2 bouyer }
515 1.3.2.2 bouyer
516 1.3.2.2 bouyer return (0);
517 1.3.2.2 bouyer }
518