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