Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/acpi/acexcep.h
26285 views
1
/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
2
/******************************************************************************
3
*
4
* Name: acexcep.h - Exception codes returned by the ACPI subsystem
5
*
6
* Copyright (C) 2000 - 2025, Intel Corp.
7
*
8
*****************************************************************************/
9
10
#ifndef __ACEXCEP_H__
11
#define __ACEXCEP_H__
12
13
/* This module contains all possible exception codes for acpi_status */
14
15
/*
16
* Exception code classes
17
*/
18
#define AE_CODE_ENVIRONMENTAL 0x0000 /* General ACPICA environment */
19
#define AE_CODE_PROGRAMMER 0x1000 /* External ACPICA interface caller */
20
#define AE_CODE_ACPI_TABLES 0x2000 /* ACPI tables */
21
#define AE_CODE_AML 0x3000 /* From executing AML code */
22
#define AE_CODE_CONTROL 0x4000 /* Internal control codes */
23
24
#define AE_CODE_MAX 0x4000
25
#define AE_CODE_MASK 0xF000
26
27
/*
28
* Macros to insert the exception code classes
29
*/
30
#define EXCEP_ENV(code) ((acpi_status) (code | AE_CODE_ENVIRONMENTAL))
31
#define EXCEP_PGM(code) ((acpi_status) (code | AE_CODE_PROGRAMMER))
32
#define EXCEP_TBL(code) ((acpi_status) (code | AE_CODE_ACPI_TABLES))
33
#define EXCEP_AML(code) ((acpi_status) (code | AE_CODE_AML))
34
#define EXCEP_CTL(code) ((acpi_status) (code | AE_CODE_CONTROL))
35
36
/*
37
* Exception info table. The "Description" field is used only by the
38
* ACPICA help application (acpihelp).
39
*/
40
struct acpi_exception_info {
41
char *name;
42
43
#if defined (ACPI_HELP_APP) || defined (ACPI_ASL_COMPILER)
44
char *description;
45
#endif
46
};
47
48
#if defined (ACPI_HELP_APP) || defined (ACPI_ASL_COMPILER)
49
#define EXCEP_TXT(name,description) {name, description}
50
#else
51
#define EXCEP_TXT(name,description) {name}
52
#endif
53
54
/*
55
* Success is always zero, failure is non-zero
56
*/
57
#define ACPI_SUCCESS(a) (!(a))
58
#define ACPI_FAILURE(a) (a)
59
60
#define AE_OK (acpi_status) 0x0000
61
62
#define ACPI_ENV_EXCEPTION(status) (((status) & AE_CODE_MASK) == AE_CODE_ENVIRONMENTAL)
63
#define ACPI_AML_EXCEPTION(status) (((status) & AE_CODE_MASK) == AE_CODE_AML)
64
#define ACPI_PROG_EXCEPTION(status) (((status) & AE_CODE_MASK) == AE_CODE_PROGRAMMER)
65
#define ACPI_TABLE_EXCEPTION(status) (((status) & AE_CODE_MASK) == AE_CODE_ACPI_TABLES)
66
#define ACPI_CNTL_EXCEPTION(status) (((status) & AE_CODE_MASK) == AE_CODE_CONTROL)
67
68
/*
69
* Environmental exceptions
70
*/
71
#define AE_ERROR EXCEP_ENV (0x0001)
72
#define AE_NO_ACPI_TABLES EXCEP_ENV (0x0002)
73
#define AE_NO_NAMESPACE EXCEP_ENV (0x0003)
74
#define AE_NO_MEMORY EXCEP_ENV (0x0004)
75
#define AE_NOT_FOUND EXCEP_ENV (0x0005)
76
#define AE_NOT_EXIST EXCEP_ENV (0x0006)
77
#define AE_ALREADY_EXISTS EXCEP_ENV (0x0007)
78
#define AE_TYPE EXCEP_ENV (0x0008)
79
#define AE_NULL_OBJECT EXCEP_ENV (0x0009)
80
#define AE_NULL_ENTRY EXCEP_ENV (0x000A)
81
#define AE_BUFFER_OVERFLOW EXCEP_ENV (0x000B)
82
#define AE_STACK_OVERFLOW EXCEP_ENV (0x000C)
83
#define AE_STACK_UNDERFLOW EXCEP_ENV (0x000D)
84
#define AE_NOT_IMPLEMENTED EXCEP_ENV (0x000E)
85
#define AE_SUPPORT EXCEP_ENV (0x000F)
86
#define AE_LIMIT EXCEP_ENV (0x0010)
87
#define AE_TIME EXCEP_ENV (0x0011)
88
#define AE_ACQUIRE_DEADLOCK EXCEP_ENV (0x0012)
89
#define AE_RELEASE_DEADLOCK EXCEP_ENV (0x0013)
90
#define AE_NOT_ACQUIRED EXCEP_ENV (0x0014)
91
#define AE_ALREADY_ACQUIRED EXCEP_ENV (0x0015)
92
#define AE_NO_HARDWARE_RESPONSE EXCEP_ENV (0x0016)
93
#define AE_NO_GLOBAL_LOCK EXCEP_ENV (0x0017)
94
#define AE_ABORT_METHOD EXCEP_ENV (0x0018)
95
#define AE_SAME_HANDLER EXCEP_ENV (0x0019)
96
#define AE_NO_HANDLER EXCEP_ENV (0x001A)
97
#define AE_OWNER_ID_LIMIT EXCEP_ENV (0x001B)
98
#define AE_NOT_CONFIGURED EXCEP_ENV (0x001C)
99
#define AE_ACCESS EXCEP_ENV (0x001D)
100
#define AE_IO_ERROR EXCEP_ENV (0x001E)
101
#define AE_NUMERIC_OVERFLOW EXCEP_ENV (0x001F)
102
#define AE_HEX_OVERFLOW EXCEP_ENV (0x0020)
103
#define AE_DECIMAL_OVERFLOW EXCEP_ENV (0x0021)
104
#define AE_OCTAL_OVERFLOW EXCEP_ENV (0x0022)
105
#define AE_END_OF_TABLE EXCEP_ENV (0x0023)
106
107
#define AE_CODE_ENV_MAX 0x0023
108
109
/*
110
* Programmer exceptions
111
*/
112
#define AE_BAD_PARAMETER EXCEP_PGM (0x0001)
113
#define AE_BAD_CHARACTER EXCEP_PGM (0x0002)
114
#define AE_BAD_PATHNAME EXCEP_PGM (0x0003)
115
#define AE_BAD_DATA EXCEP_PGM (0x0004)
116
#define AE_BAD_HEX_CONSTANT EXCEP_PGM (0x0005)
117
#define AE_BAD_OCTAL_CONSTANT EXCEP_PGM (0x0006)
118
#define AE_BAD_DECIMAL_CONSTANT EXCEP_PGM (0x0007)
119
#define AE_MISSING_ARGUMENTS EXCEP_PGM (0x0008)
120
#define AE_BAD_ADDRESS EXCEP_PGM (0x0009)
121
122
#define AE_CODE_PGM_MAX 0x0009
123
124
/*
125
* Acpi table exceptions
126
*/
127
#define AE_BAD_SIGNATURE EXCEP_TBL (0x0001)
128
#define AE_BAD_HEADER EXCEP_TBL (0x0002)
129
#define AE_BAD_CHECKSUM EXCEP_TBL (0x0003)
130
#define AE_BAD_VALUE EXCEP_TBL (0x0004)
131
#define AE_INVALID_TABLE_LENGTH EXCEP_TBL (0x0005)
132
133
#define AE_CODE_TBL_MAX 0x0005
134
135
/*
136
* AML exceptions. These are caused by problems with
137
* the actual AML byte stream
138
*/
139
#define AE_AML_BAD_OPCODE EXCEP_AML (0x0001)
140
#define AE_AML_NO_OPERAND EXCEP_AML (0x0002)
141
#define AE_AML_OPERAND_TYPE EXCEP_AML (0x0003)
142
#define AE_AML_OPERAND_VALUE EXCEP_AML (0x0004)
143
#define AE_AML_UNINITIALIZED_LOCAL EXCEP_AML (0x0005)
144
#define AE_AML_UNINITIALIZED_ARG EXCEP_AML (0x0006)
145
#define AE_AML_UNINITIALIZED_ELEMENT EXCEP_AML (0x0007)
146
#define AE_AML_NUMERIC_OVERFLOW EXCEP_AML (0x0008)
147
#define AE_AML_REGION_LIMIT EXCEP_AML (0x0009)
148
#define AE_AML_BUFFER_LIMIT EXCEP_AML (0x000A)
149
#define AE_AML_PACKAGE_LIMIT EXCEP_AML (0x000B)
150
#define AE_AML_DIVIDE_BY_ZERO EXCEP_AML (0x000C)
151
#define AE_AML_BAD_NAME EXCEP_AML (0x000D)
152
#define AE_AML_NAME_NOT_FOUND EXCEP_AML (0x000E)
153
#define AE_AML_INTERNAL EXCEP_AML (0x000F)
154
#define AE_AML_INVALID_SPACE_ID EXCEP_AML (0x0010)
155
#define AE_AML_STRING_LIMIT EXCEP_AML (0x0011)
156
#define AE_AML_NO_RETURN_VALUE EXCEP_AML (0x0012)
157
#define AE_AML_METHOD_LIMIT EXCEP_AML (0x0013)
158
#define AE_AML_NOT_OWNER EXCEP_AML (0x0014)
159
#define AE_AML_MUTEX_ORDER EXCEP_AML (0x0015)
160
#define AE_AML_MUTEX_NOT_ACQUIRED EXCEP_AML (0x0016)
161
#define AE_AML_INVALID_RESOURCE_TYPE EXCEP_AML (0x0017)
162
#define AE_AML_INVALID_INDEX EXCEP_AML (0x0018)
163
#define AE_AML_REGISTER_LIMIT EXCEP_AML (0x0019)
164
#define AE_AML_NO_WHILE EXCEP_AML (0x001A)
165
#define AE_AML_ALIGNMENT EXCEP_AML (0x001B)
166
#define AE_AML_NO_RESOURCE_END_TAG EXCEP_AML (0x001C)
167
#define AE_AML_BAD_RESOURCE_VALUE EXCEP_AML (0x001D)
168
#define AE_AML_CIRCULAR_REFERENCE EXCEP_AML (0x001E)
169
#define AE_AML_BAD_RESOURCE_LENGTH EXCEP_AML (0x001F)
170
#define AE_AML_ILLEGAL_ADDRESS EXCEP_AML (0x0020)
171
#define AE_AML_LOOP_TIMEOUT EXCEP_AML (0x0021)
172
#define AE_AML_UNINITIALIZED_NODE EXCEP_AML (0x0022)
173
#define AE_AML_TARGET_TYPE EXCEP_AML (0x0023)
174
#define AE_AML_PROTOCOL EXCEP_AML (0x0024)
175
#define AE_AML_BUFFER_LENGTH EXCEP_AML (0x0025)
176
177
#define AE_CODE_AML_MAX 0x0025
178
179
/*
180
* Internal exceptions used for control
181
*/
182
#define AE_CTRL_RETURN_VALUE EXCEP_CTL (0x0001)
183
#define AE_CTRL_PENDING EXCEP_CTL (0x0002)
184
#define AE_CTRL_TERMINATE EXCEP_CTL (0x0003)
185
#define AE_CTRL_TRUE EXCEP_CTL (0x0004)
186
#define AE_CTRL_FALSE EXCEP_CTL (0x0005)
187
#define AE_CTRL_DEPTH EXCEP_CTL (0x0006)
188
#define AE_CTRL_END EXCEP_CTL (0x0007)
189
#define AE_CTRL_TRANSFER EXCEP_CTL (0x0008)
190
#define AE_CTRL_BREAK EXCEP_CTL (0x0009)
191
#define AE_CTRL_CONTINUE EXCEP_CTL (0x000A)
192
#define AE_CTRL_PARSE_CONTINUE EXCEP_CTL (0x000B)
193
#define AE_CTRL_PARSE_PENDING EXCEP_CTL (0x000C)
194
195
#define AE_CODE_CTRL_MAX 0x000C
196
197
/* Exception strings for acpi_format_exception */
198
199
#ifdef ACPI_DEFINE_EXCEPTION_TABLE
200
201
/*
202
* String versions of the exception codes above
203
* These strings must match the corresponding defines exactly
204
*/
205
static const struct acpi_exception_info acpi_gbl_exception_names_env[] = {
206
EXCEP_TXT("AE_OK", "No error"),
207
EXCEP_TXT("AE_ERROR", "Unspecified error"),
208
EXCEP_TXT("AE_NO_ACPI_TABLES", "ACPI tables could not be found"),
209
EXCEP_TXT("AE_NO_NAMESPACE", "A namespace has not been loaded"),
210
EXCEP_TXT("AE_NO_MEMORY", "Insufficient dynamic memory"),
211
EXCEP_TXT("AE_NOT_FOUND", "A requested entity is not found"),
212
EXCEP_TXT("AE_NOT_EXIST", "A required entity does not exist"),
213
EXCEP_TXT("AE_ALREADY_EXISTS", "An entity already exists"),
214
EXCEP_TXT("AE_TYPE", "The object type is incorrect"),
215
EXCEP_TXT("AE_NULL_OBJECT", "A required object was missing"),
216
EXCEP_TXT("AE_NULL_ENTRY", "The requested object does not exist"),
217
EXCEP_TXT("AE_BUFFER_OVERFLOW", "The buffer provided is too small"),
218
EXCEP_TXT("AE_STACK_OVERFLOW", "An internal stack overflowed"),
219
EXCEP_TXT("AE_STACK_UNDERFLOW", "An internal stack underflowed"),
220
EXCEP_TXT("AE_NOT_IMPLEMENTED", "The feature is not implemented"),
221
EXCEP_TXT("AE_SUPPORT", "The feature is not supported"),
222
EXCEP_TXT("AE_LIMIT", "A predefined limit was exceeded"),
223
EXCEP_TXT("AE_TIME", "A time limit or timeout expired"),
224
EXCEP_TXT("AE_ACQUIRE_DEADLOCK",
225
"Internal error, attempt was made to acquire a mutex in improper order"),
226
EXCEP_TXT("AE_RELEASE_DEADLOCK",
227
"Internal error, attempt was made to release a mutex in improper order"),
228
EXCEP_TXT("AE_NOT_ACQUIRED",
229
"An attempt to release a mutex or Global Lock without a previous acquire"),
230
EXCEP_TXT("AE_ALREADY_ACQUIRED",
231
"Internal error, attempt was made to acquire a mutex twice"),
232
EXCEP_TXT("AE_NO_HARDWARE_RESPONSE",
233
"Hardware did not respond after an I/O operation"),
234
EXCEP_TXT("AE_NO_GLOBAL_LOCK", "There is no FACS Global Lock"),
235
EXCEP_TXT("AE_ABORT_METHOD", "A control method was aborted"),
236
EXCEP_TXT("AE_SAME_HANDLER",
237
"Attempt was made to install the same handler that is already installed"),
238
EXCEP_TXT("AE_NO_HANDLER",
239
"A handler for the operation is not installed"),
240
EXCEP_TXT("AE_OWNER_ID_LIMIT",
241
"There are no more Owner IDs available for ACPI tables or control methods"),
242
EXCEP_TXT("AE_NOT_CONFIGURED",
243
"The interface is not part of the current subsystem configuration"),
244
EXCEP_TXT("AE_ACCESS", "Permission denied for the requested operation"),
245
EXCEP_TXT("AE_IO_ERROR", "An I/O error occurred"),
246
EXCEP_TXT("AE_NUMERIC_OVERFLOW",
247
"Overflow during string-to-integer conversion"),
248
EXCEP_TXT("AE_HEX_OVERFLOW",
249
"Overflow during ASCII hex-to-binary conversion"),
250
EXCEP_TXT("AE_DECIMAL_OVERFLOW",
251
"Overflow during ASCII decimal-to-binary conversion"),
252
EXCEP_TXT("AE_OCTAL_OVERFLOW",
253
"Overflow during ASCII octal-to-binary conversion"),
254
EXCEP_TXT("AE_END_OF_TABLE", "Reached the end of table")
255
};
256
257
static const struct acpi_exception_info acpi_gbl_exception_names_pgm[] = {
258
EXCEP_TXT(NULL, NULL),
259
EXCEP_TXT("AE_BAD_PARAMETER", "A parameter is out of range or invalid"),
260
EXCEP_TXT("AE_BAD_CHARACTER",
261
"An invalid character was found in a name"),
262
EXCEP_TXT("AE_BAD_PATHNAME",
263
"An invalid character was found in a pathname"),
264
EXCEP_TXT("AE_BAD_DATA",
265
"A package or buffer contained incorrect data"),
266
EXCEP_TXT("AE_BAD_HEX_CONSTANT", "Invalid character in a Hex constant"),
267
EXCEP_TXT("AE_BAD_OCTAL_CONSTANT",
268
"Invalid character in an Octal constant"),
269
EXCEP_TXT("AE_BAD_DECIMAL_CONSTANT",
270
"Invalid character in a Decimal constant"),
271
EXCEP_TXT("AE_MISSING_ARGUMENTS",
272
"Too few arguments were passed to a control method"),
273
EXCEP_TXT("AE_BAD_ADDRESS", "An illegal null I/O address")
274
};
275
276
static const struct acpi_exception_info acpi_gbl_exception_names_tbl[] = {
277
EXCEP_TXT(NULL, NULL),
278
EXCEP_TXT("AE_BAD_SIGNATURE", "An ACPI table has an invalid signature"),
279
EXCEP_TXT("AE_BAD_HEADER", "Invalid field in an ACPI table header"),
280
EXCEP_TXT("AE_BAD_CHECKSUM", "An ACPI table checksum is not correct"),
281
EXCEP_TXT("AE_BAD_VALUE", "An invalid value was found in a table"),
282
EXCEP_TXT("AE_INVALID_TABLE_LENGTH",
283
"The FADT or FACS has improper length")
284
};
285
286
static const struct acpi_exception_info acpi_gbl_exception_names_aml[] = {
287
EXCEP_TXT(NULL, NULL),
288
EXCEP_TXT("AE_AML_BAD_OPCODE", "Invalid AML opcode encountered"),
289
EXCEP_TXT("AE_AML_NO_OPERAND", "A required operand is missing"),
290
EXCEP_TXT("AE_AML_OPERAND_TYPE",
291
"An operand of an incorrect type was encountered"),
292
EXCEP_TXT("AE_AML_OPERAND_VALUE",
293
"The operand had an inappropriate or invalid value"),
294
EXCEP_TXT("AE_AML_UNINITIALIZED_LOCAL",
295
"Method tried to use an uninitialized local variable"),
296
EXCEP_TXT("AE_AML_UNINITIALIZED_ARG",
297
"Method tried to use an uninitialized argument"),
298
EXCEP_TXT("AE_AML_UNINITIALIZED_ELEMENT",
299
"Method tried to use an empty package element"),
300
EXCEP_TXT("AE_AML_NUMERIC_OVERFLOW",
301
"Overflow during BCD conversion or other"),
302
EXCEP_TXT("AE_AML_REGION_LIMIT",
303
"Tried to access beyond the end of an Operation Region"),
304
EXCEP_TXT("AE_AML_BUFFER_LIMIT",
305
"Tried to access beyond the end of a buffer"),
306
EXCEP_TXT("AE_AML_PACKAGE_LIMIT",
307
"Tried to access beyond the end of a package"),
308
EXCEP_TXT("AE_AML_DIVIDE_BY_ZERO",
309
"During execution of AML Divide operator"),
310
EXCEP_TXT("AE_AML_BAD_NAME",
311
"An ACPI name contains invalid character(s)"),
312
EXCEP_TXT("AE_AML_NAME_NOT_FOUND",
313
"Could not resolve a named reference"),
314
EXCEP_TXT("AE_AML_INTERNAL",
315
"An internal error within the interpreter"),
316
EXCEP_TXT("AE_AML_INVALID_SPACE_ID",
317
"An Operation Region SpaceID is invalid"),
318
EXCEP_TXT("AE_AML_STRING_LIMIT",
319
"String is longer than 200 characters"),
320
EXCEP_TXT("AE_AML_NO_RETURN_VALUE",
321
"A method did not return a required value"),
322
EXCEP_TXT("AE_AML_METHOD_LIMIT",
323
"A control method reached the maximum reentrancy limit of 255"),
324
EXCEP_TXT("AE_AML_NOT_OWNER",
325
"A thread tried to release a mutex that it does not own"),
326
EXCEP_TXT("AE_AML_MUTEX_ORDER", "Mutex SyncLevel release mismatch"),
327
EXCEP_TXT("AE_AML_MUTEX_NOT_ACQUIRED",
328
"Attempt to release a mutex that was not previously acquired"),
329
EXCEP_TXT("AE_AML_INVALID_RESOURCE_TYPE",
330
"Invalid resource type in resource list"),
331
EXCEP_TXT("AE_AML_INVALID_INDEX",
332
"Invalid Argx or Localx (x too large)"),
333
EXCEP_TXT("AE_AML_REGISTER_LIMIT",
334
"Bank value or Index value beyond range of register"),
335
EXCEP_TXT("AE_AML_NO_WHILE", "Break or Continue without a While"),
336
EXCEP_TXT("AE_AML_ALIGNMENT",
337
"Non-aligned memory transfer on platform that does not support this"),
338
EXCEP_TXT("AE_AML_NO_RESOURCE_END_TAG",
339
"No End Tag in a resource list"),
340
EXCEP_TXT("AE_AML_BAD_RESOURCE_VALUE",
341
"Invalid value of a resource element"),
342
EXCEP_TXT("AE_AML_CIRCULAR_REFERENCE",
343
"Two references refer to each other"),
344
EXCEP_TXT("AE_AML_BAD_RESOURCE_LENGTH",
345
"The length of a Resource Descriptor in the AML is incorrect"),
346
EXCEP_TXT("AE_AML_ILLEGAL_ADDRESS",
347
"A memory, I/O, or PCI configuration address is invalid"),
348
EXCEP_TXT("AE_AML_LOOP_TIMEOUT",
349
"An AML While loop exceeded the maximum execution time"),
350
EXCEP_TXT("AE_AML_UNINITIALIZED_NODE",
351
"A namespace node is uninitialized or unresolved"),
352
EXCEP_TXT("AE_AML_TARGET_TYPE",
353
"A target operand of an incorrect type was encountered"),
354
EXCEP_TXT("AE_AML_PROTOCOL", "Violation of a fixed ACPI protocol"),
355
EXCEP_TXT("AE_AML_BUFFER_LENGTH",
356
"The length of the buffer is invalid/incorrect")
357
};
358
359
static const struct acpi_exception_info acpi_gbl_exception_names_ctrl[] = {
360
EXCEP_TXT(NULL, NULL),
361
EXCEP_TXT("AE_CTRL_RETURN_VALUE", "A Method returned a value"),
362
EXCEP_TXT("AE_CTRL_PENDING", "Method is calling another method"),
363
EXCEP_TXT("AE_CTRL_TERMINATE", "Terminate the executing method"),
364
EXCEP_TXT("AE_CTRL_TRUE", "An If or While predicate result"),
365
EXCEP_TXT("AE_CTRL_FALSE", "An If or While predicate result"),
366
EXCEP_TXT("AE_CTRL_DEPTH", "Maximum search depth has been reached"),
367
EXCEP_TXT("AE_CTRL_END", "An If or While predicate is false"),
368
EXCEP_TXT("AE_CTRL_TRANSFER", "Transfer control to called method"),
369
EXCEP_TXT("AE_CTRL_BREAK", "A Break has been executed"),
370
EXCEP_TXT("AE_CTRL_CONTINUE", "A Continue has been executed"),
371
EXCEP_TXT("AE_CTRL_PARSE_CONTINUE", "Used to skip over bad opcodes"),
372
EXCEP_TXT("AE_CTRL_PARSE_PENDING", "Used to implement AML While loops")
373
};
374
375
#endif /* EXCEPTION_TABLE */
376
377
#endif /* __ACEXCEP_H__ */
378
379