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("psopinfo")
52
53extern const u8 acpi_gbl_short_op_index[];
54extern const u8 acpi_gbl_long_op_index[];
55
56static const u8 acpi_gbl_argument_count[] =
57 { 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 6 };
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode)
73{
74#ifdef ACPI_DEBUG_OUTPUT
75 const char *opcode_name = "Unknown AML opcode";
76#endif
77
78 ACPI_FUNCTION_NAME(ps_get_opcode_info);
79
80
81
82
83 if (!(opcode & 0xFF00)) {
84
85
86
87 return (&acpi_gbl_aml_op_info
88 [acpi_gbl_short_op_index[(u8)opcode]]);
89 }
90
91 if (((opcode & 0xFF00) == AML_EXTENDED_OPCODE) &&
92 (((u8)opcode) <= MAX_EXTENDED_OPCODE)) {
93
94
95
96 return (&acpi_gbl_aml_op_info
97 [acpi_gbl_long_op_index[(u8)opcode]]);
98 }
99#if defined ACPI_ASL_COMPILER && defined ACPI_DEBUG_OUTPUT
100#include "asldefine.h"
101
102 switch (opcode) {
103 case AML_RAW_DATA_BYTE:
104 opcode_name = "-Raw Data Byte-";
105 break;
106
107 case AML_RAW_DATA_WORD:
108 opcode_name = "-Raw Data Word-";
109 break;
110
111 case AML_RAW_DATA_DWORD:
112 opcode_name = "-Raw Data Dword-";
113 break;
114
115 case AML_RAW_DATA_QWORD:
116 opcode_name = "-Raw Data Qword-";
117 break;
118
119 case AML_RAW_DATA_BUFFER:
120 opcode_name = "-Raw Data Buffer-";
121 break;
122
123 case AML_RAW_DATA_CHAIN:
124 opcode_name = "-Raw Data Buffer Chain-";
125 break;
126
127 case AML_PACKAGE_LENGTH:
128 opcode_name = "-Package Length-";
129 break;
130
131 case AML_UNASSIGNED_OPCODE:
132 opcode_name = "-Unassigned Opcode-";
133 break;
134
135 case AML_DEFAULT_ARG_OP:
136 opcode_name = "-Default Arg-";
137 break;
138
139 default:
140 break;
141 }
142#endif
143
144
145
146 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%s [%4.4X]\n", opcode_name, opcode));
147
148 return (&acpi_gbl_aml_op_info[_UNK]);
149}
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164char *acpi_ps_get_opcode_name(u16 opcode)
165{
166#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT)
167
168 const struct acpi_opcode_info *op;
169
170 op = acpi_ps_get_opcode_info(opcode);
171
172
173
174 return (op->name);
175
176#else
177 return ("OpcodeName unavailable");
178
179#endif
180}
181
182
183
184
185
186
187
188
189
190
191
192
193
194u8 acpi_ps_get_argument_count(u32 op_type)
195{
196
197 if (op_type <= AML_TYPE_EXEC_6A_0T_1R) {
198 return (acpi_gbl_argument_count[op_type]);
199 }
200
201 return (0);
202}
203
204
205
206
207
208const u8 acpi_gbl_short_op_index[256] = {
209
210
211 0x00, 0x01, _UNK, _UNK, _UNK, _UNK, 0x02, _UNK,
212 0x03, _UNK, 0x04, 0x05, 0x06, 0x07, 0x6E, _UNK,
213 0x08, 0x09, 0x0a, 0x6F, 0x0b, _UNK, _UNK, _UNK,
214 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
215 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
216 _UNK, _UNK, _UNK, _UNK, _UNK, 0x63, _PFX, _PFX,
217 0x67, 0x66, 0x68, 0x65, 0x69, 0x64, 0x6A, 0x7D,
218 0x7F, 0x80, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
219 _UNK, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
220 _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
221 _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
222 _ASC, _ASC, _ASC, _UNK, _PFX, _UNK, _PFX, _ASC,
223 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
224 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, _UNK,
225 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22,
226 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a,
227 0x2b, 0x2c, 0x2d, 0x2e, 0x70, 0x71, 0x2f, 0x30,
228 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x72,
229 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x73, 0x74,
230 0x75, 0x76, _UNK, _UNK, 0x77, 0x78, 0x79, 0x7A,
231 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x60, 0x61,
232 0x62, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
233 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
234 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
235 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
236 _UNK, _UNK, _UNK, _UNK, 0x44, _UNK, _UNK, _UNK,
237 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
238 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
239 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
240 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
241 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
242 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0x45,
243};
244
245
246
247
248
249const u8 acpi_gbl_long_op_index[NUM_EXTENDED_OPCODE] = {
250
251
252 _UNK, 0x46, 0x47, _UNK, _UNK, _UNK, _UNK, _UNK,
253 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
254 _UNK, _UNK, 0x48, 0x49, _UNK, _UNK, _UNK, _UNK,
255 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0x7B,
256 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51,
257 0x52, 0x53, 0x54, _UNK, _UNK, _UNK, _UNK, _UNK,
258 0x55, 0x56, 0x57, 0x7e, _UNK, _UNK, _UNK, _UNK,
259 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
260 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
261 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
262 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
263 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
264 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
265 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
266 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
267 _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
268 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
269 0x7C,
270};
271