• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef ERRNO_H
2 #define ERRNO_H
3 
4 FILE_LICENCE ( GPL2_OR_LATER );
5 
6 /** @file
7  *
8  * Error codes
9  *
10  * Return status codes as used within gPXE are designed to allow for
11  * maximum visibility into the source of an error even in an end-user
12  * build with no debugging.  They are constructed as follows:
13  *
14  * Bits 7-0 : PXE error code
15  *
16  * This is the closest equivalent PXE error code
17  * (e.g. PXENV_STATUS_OUT_OF_RESOURCES), and is the only part of the
18  * error that will be returned via the PXE API, since PXE has
19  * predefined error codes.
20  *
21  * Bits 12-8 : Per-file disambiguator
22  *
23  * When the same error number can be generated from multiple points
24  * within a file, this field can be used to identify the unique
25  * instance.
26  *
27  * Bits 23-13 : File identifier
28  *
29  * This is a unique identifier for the file generating the error
30  * (e.g. ERRFILE_tcp for tcp.c).
31  *
32  * Bits 30-24 : POSIX error code
33  *
34  * This is the closest equivalent POSIX error code (e.g. ENOMEM).
35  *
36  * Bit 31 : Reserved
37  *
38  * Errors are usually return as negative error numbers (e.g. -EINVAL);
39  * bit 31 is therefore unusable.
40  *
41  *
42  * The convention within the code is that errors are negative and
43  * expressed using the POSIX error code and (optionally) a per-file
44  * disambiguator, e.g.
45  *
46  *     return -EINVAL;
47  *
48  * or
49  *
50  *     #define ETCP_BAD_CHECKSUM EUNIQ_02
51  *     return -( EINVAL | ETCP_BAD_CHECKSUM )
52  *
53  * By various bits of preprocessor magic, the PXE error code and file
54  * identifier are already incorporated into the definition of the
55  * POSIX error code, which keeps the code relatively clean.
56  *
57  *
58  * Functions that wish to return failures should be declared as
59  * returning an integer @c rc "Return status code".  A return value of
60  * zero indicates success, a non-zero value indicates failure.  The
61  * return value can be passed directly to strerror() in order to
62  * generate a human-readable error message, e.g.
63  *
64  *     if ( ( rc = some_function ( ... ) ) != 0 ) {
65  *         DBG ( "Whatever I was trying to do failed: %s\n", strerror ( rc ) );
66  *         return rc;
67  *     }
68  *
69  * As illustrated in the above example, error returns should generally
70  * be directly propagated upward to the calling function.
71  *
72  */
73 
74 /* Get definitions for file identifiers */
75 #include <gpxe/errfile.h>
76 
77 /* If we do not have a valid file identifier, generate a compiler
78  * warning upon usage of any error codes.  (Don't just use a #warning,
79  * because some files include errno.h but don't ever actually use any
80  * error codes.)
81  */
82 #if ! ERRFILE
83 extern char missing_errfile_declaration[] __attribute__ (( deprecated ));
84 #undef ERRFILE
85 #define ERRFILE ( 0 * ( ( int ) missing_errfile_declaration ) )
86 #endif
87 
88 /** Derive PXENV_STATUS code from gPXE error number */
89 #define PXENV_STATUS( rc ) ( (-(rc)) & 0x00ff )
90 
91 /**
92  * @defgroup pxeerrors PXE error codes
93  *
94  * The names, meanings and values of these error codes are defined by
95  * the PXE specification.
96  *
97  * @{
98  */
99 
100 /* Generic errors */
101 #define	PXENV_STATUS_SUCCESS					       0x0000
102 #define	PXENV_STATUS_FAILURE					       0x0001
103 #define	PXENV_STATUS_BAD_FUNC					       0x0002
104 #define	PXENV_STATUS_UNSUPPORTED				       0x0003
105 #define	PXENV_STATUS_KEEP_UNDI					       0x0004
106 #define	PXENV_STATUS_KEEP_ALL					       0x0005
107 #define	PXENV_STATUS_OUT_OF_RESOURCES				       0x0006
108 
109 /* ARP errors (0x0010 to 0x001f) */
110 #define	PXENV_STATUS_ARP_TIMEOUT				       0x0011
111 
112 /* Base-Code state errors */
113 #define	PXENV_STATUS_UDP_CLOSED					       0x0018
114 #define	PXENV_STATUS_UDP_OPEN					       0x0019
115 #define	PXENV_STATUS_TFTP_CLOSED				       0x001a
116 #define	PXENV_STATUS_TFTP_OPEN					       0x001b
117 
118 /* BIOS/system errors (0x0020 to 0x002f) */
119 #define	PXENV_STATUS_MCOPY_PROBLEM				       0x0020
120 #define	PXENV_STATUS_BIS_INTEGRITY_FAILURE			       0x0021
121 #define	PXENV_STATUS_BIS_VALIDATE_FAILURE			       0x0022
122 #define	PXENV_STATUS_BIS_INIT_FAILURE				       0x0023
123 #define	PXENV_STATUS_BIS_SHUTDOWN_FAILURE			       0x0024
124 #define	PXENV_STATUS_BIS_GBOA_FAILURE				       0x0025
125 #define	PXENV_STATUS_BIS_FREE_FAILURE				       0x0026
126 #define	PXENV_STATUS_BIS_GSI_FAILURE				       0x0027
127 #define	PXENV_STATUS_BIS_BAD_CKSUM				       0x0028
128 
129 /* TFTP/MTFTP errors (0x0030 to 0x003f) */
130 #define	PXENV_STATUS_TFTP_CANNOT_ARP_ADDRESS			       0x0030
131 #define	PXENV_STATUS_TFTP_OPEN_TIMEOUT				       0x0032
132 #define	PXENV_STATUS_TFTP_UNKNOWN_OPCODE			       0x0033
133 #define	PXENV_STATUS_TFTP_READ_TIMEOUT				       0x0035
134 #define	PXENV_STATUS_TFTP_ERROR_OPCODE				       0x0036
135 #define	PXENV_STATUS_TFTP_CANNOT_OPEN_CONNECTION		       0x0038
136 #define	PXENV_STATUS_TFTP_CANNOT_READ_FROM_CONNECTION		       0x0039
137 #define	PXENV_STATUS_TFTP_TOO_MANY_PACKAGES			       0x003a
138 #define	PXENV_STATUS_TFTP_FILE_NOT_FOUND			       0x003b
139 #define	PXENV_STATUS_TFTP_ACCESS_VIOLATION			       0x003c
140 #define	PXENV_STATUS_TFTP_NO_MCAST_ADDRESS			       0x003d
141 #define	PXENV_STATUS_TFTP_NO_FILESIZE				       0x003e
142 #define	PXENV_STATUS_TFTP_INVALID_PACKET_SIZE			       0x003f
143 
144 /* Reserved errors 0x0040 to 0x004f) */
145 
146 /* DHCP/BOOTP errors (0x0050 to 0x005f) */
147 #define	PXENV_STATUS_DHCP_TIMEOUT				       0x0051
148 #define	PXENV_STATUS_DHCP_NO_IP_ADDRESS				       0x0052
149 #define	PXENV_STATUS_DHCP_NO_BOOTFILE_NAME			       0x0053
150 #define	PXENV_STATUS_DHCP_BAD_IP_ADDRESS			       0x0054
151 
152 /* Driver errors (0x0060 to 0x006f) */
153 #define	PXENV_STATUS_UNDI_INVALID_FUNCTION			       0x0060
154 #define	PXENV_STATUS_UNDI_MEDIATEST_FAILED			       0x0061
155 #define	PXENV_STATUS_UNDI_CANNOT_INIT_NIC_FOR_MCAST		       0x0062
156 #define	PXENV_STATUS_UNDI_CANNOT_INITIALIZE_NIC			       0x0063
157 #define	PXENV_STATUS_UNDI_CANNOT_INITIALIZE_PHY			       0x0064
158 #define	PXENV_STATUS_UNDI_CANNOT_READ_CONFIG_DATA		       0x0065
159 #define	PXENV_STATUS_UNDI_CANNOT_READ_INIT_DATA			       0x0066
160 #define	PXENV_STATUS_UNDI_BAD_MAC_ADDRESS			       0x0067
161 #define	PXENV_STATUS_UNDI_BAD_EEPROM_CHECKSUM			       0x0068
162 #define	PXENV_STATUS_UNDI_ERROR_SETTING_ISR			       0x0069
163 #define	PXENV_STATUS_UNDI_INVALID_STATE				       0x006a
164 #define	PXENV_STATUS_UNDI_TRANSMIT_ERROR			       0x006b
165 #define	PXENV_STATUS_UNDI_INVALID_PARAMETER			       0x006c
166 
167 /* ROM and NBP bootstrap errors (0x0070 to 0x007f) */
168 #define	PXENV_STATUS_BSTRAP_PROMPT_MENU				       0x0074
169 #define	PXENV_STATUS_BSTRAP_MCAST_ADDR				       0x0076
170 #define	PXENV_STATUS_BSTRAP_MISSING_LIST			       0x0077
171 #define	PXENV_STATUS_BSTRAP_NO_RESPONSE				       0x0078
172 #define	PXENV_STATUS_BSTRAP_FILE_TOO_BIG			       0x0079
173 
174 /* Environment NBP errors (0x0080 to 0x008f) */
175 
176 /* Reserved errors (0x0090 to 0x009f) */
177 
178 /* Miscellaneous errors (0x00a0 to 0x00af) */
179 #define	PXENV_STATUS_BINL_CANCELED_BY_KEYSTROKE			       0x00a0
180 #define	PXENV_STATUS_BINL_NO_PXE_SERVER				       0x00a1
181 #define	PXENV_STATUS_NOT_AVAILABLE_IN_PMODE			       0x00a2
182 #define	PXENV_STATUS_NOT_AVAILABLE_IN_RMODE			       0x00a3
183 
184 /* BUSD errors (0x00b0 to 0x00bf) */
185 #define	PXENV_STATUS_BUSD_DEVICE_NOT_SUPPORTED			       0x00b0
186 
187 /* Loader errors (0x00c0 to 0x00cf) */
188 #define	PXENV_STATUS_LOADER_NO_FREE_BASE_MEMORY			       0x00c0
189 #define	PXENV_STATUS_LOADER_NO_BC_ROMID				       0x00c1
190 #define	PXENV_STATUS_LOADER_BAD_BC_ROMID			       0x00c2
191 #define	PXENV_STATUS_LOADER_BAD_BC_RUNTIME_IMAGE		       0x00c3
192 #define	PXENV_STATUS_LOADER_NO_UNDI_ROMID			       0x00c4
193 #define	PXENV_STATUS_LOADER_BAD_UNDI_ROMID			       0x00c5
194 #define	PXENV_STATUS_LOADER_BAD_UNDI_DRIVER_IMAGE		       0x00c6
195 #define	PXENV_STATUS_LOADER_NO_PXE_STRUCT			       0x00c8
196 #define	PXENV_STATUS_LOADER_NO_PXENV_STRUCT			       0x00c9
197 #define	PXENV_STATUS_LOADER_UNDI_START				       0x00ca
198 #define	PXENV_STATUS_LOADER_BC_START				       0x00cb
199 
200 /** @} */
201 
202 /**
203  * @defgroup posixerrors POSIX error codes
204  *
205  * The names and meanings (but not the values) of these error codes
206  * are defined by POSIX.  We choose to assign unique values which
207  * incorporate the closest equivalent PXE error code, so that code may
208  * simply use ENOMEM, rather than having to use the cumbersome
209  * (ENOMEM|PXENV_STATUS_OUT_OF_RESOURCES).
210  *
211  * @{
212  */
213 
214 /** Operation completed successfully */
215 #define ENOERR			( ERRFILE | PXENV_STATUS_SUCCESS | 0x00000000 )
216 
217 /** Arg list too long */
218 #define E2BIG		       ( ERRFILE | PXENV_STATUS_BAD_FUNC | 0x01000000 )
219 
220 /** Permission denied */
221 #define EACCES	  ( ERRFILE | PXENV_STATUS_TFTP_ACCESS_VIOLATION | 0x02000000 )
222 
223 /** Address in use */
224 #define EADDRINUSE	       ( ERRFILE | PXENV_STATUS_UDP_OPEN | 0x03000000 )
225 
226 /** Address not available */
227 #define EADDRNOTAVAIL	       ( ERRFILE | PXENV_STATUS_UDP_OPEN | 0x04000000 )
228 
229 /** Address family not supported */
230 #define EAFNOSUPPORT	    ( ERRFILE | PXENV_STATUS_UNSUPPORTED | 0x05000000 )
231 
232 /** Resource temporarily unavailable */
233 #define EAGAIN			( ERRFILE | PXENV_STATUS_FAILURE | 0x06000000 )
234 
235 /** Connection already in progress */
236 #define EALREADY	       ( ERRFILE | PXENV_STATUS_UDP_OPEN | 0x07000000 )
237 
238 /** Bad file descriptor */
239 #define EBADF		    ( ERRFILE | PXENV_STATUS_TFTP_CLOSED | 0x08000000 )
240 
241 /** Bad message */
242 #define EBADMSG			( ERRFILE | PXENV_STATUS_FAILURE | 0x09000000 )
243 
244 /** Resource busy */
245 #define EBUSY	       ( ERRFILE | PXENV_STATUS_OUT_OF_RESOURCES | 0x0a000000 )
246 
247 /** Operation canceled */
248 #define ECANCELED \
249 	     ( ERRFILE | PXENV_STATUS_BINL_CANCELED_BY_KEYSTROKE | 0x0b000000 )
250 
251 /** No child processes */
252 #define ECHILD	    ( ERRFILE | PXENV_STATUS_TFTP_FILE_NOT_FOUND | 0x0c000000 )
253 
254 /** Connection aborted */
255 #define ECONNABORTED \
256        ( ERRFILE | PXENV_STATUS_TFTP_CANNOT_READ_FROM_CONNECTION | 0x0d000000 )
257 
258 /** Connection refused */
259 #define ECONNREFUSED \
260 	    ( ERRFILE | PXENV_STATUS_TFTP_CANNOT_OPEN_CONNECTION | 0x0e000000 )
261 
262 /** Connection reset */
263 #define ECONNRESET \
264        ( ERRFILE | PXENV_STATUS_TFTP_CANNOT_READ_FROM_CONNECTION | 0x0f000000 )
265 
266 /** Resource deadlock avoided */
267 #define EDEADLK			( ERRFILE | PXENV_STATUS_FAILURE | 0x10000000 )
268 
269 /** Destination address required */
270 #define EDESTADDRREQ	       ( ERRFILE | PXENV_STATUS_BAD_FUNC | 0x11000000 )
271 
272 /** Domain error */
273 #define EDOM			( ERRFILE | PXENV_STATUS_FAILURE | 0x12000000 )
274 
275 /** Reserved */
276 #define EDQUOT			( ERRFILE | PXENV_STATUS_FAILURE | 0x13000000 )
277 
278 /** File exists */
279 #define EEXIST			( ERRFILE | PXENV_STATUS_FAILURE | 0x14000000 )
280 
281 /** Bad address */
282 #define EFAULT		  ( ERRFILE | PXENV_STATUS_MCOPY_PROBLEM | 0x15000000 )
283 
284 /** File too large */
285 #define EFBIG		  ( ERRFILE | PXENV_STATUS_MCOPY_PROBLEM | 0x16000000 )
286 
287 /** Host is unreachable */
288 #define EHOSTUNREACH	    ( ERRFILE | PXENV_STATUS_ARP_TIMEOUT | 0x17000000 )
289 
290 /** Identifier removed */
291 #define EIDRM			( ERRFILE | PXENV_STATUS_FAILURE | 0x18000000 )
292 
293 /** Illegal byte sequence */
294 #define EILSEQ			( ERRFILE | PXENV_STATUS_FAILURE | 0x19000000 )
295 
296 /** Operation in progress */
297 #define EINPROGRESS		( ERRFILE | PXENV_STATUS_FAILURE | 0x1a000000 )
298 
299 /** Interrupted function call */
300 #define EINTR			( ERRFILE | PXENV_STATUS_FAILURE | 0x1b000000 )
301 
302 /** Invalid argument */
303 #define EINVAL		       ( ERRFILE | PXENV_STATUS_BAD_FUNC | 0x1c000000 )
304 
305 /** Input/output error */
306 #define EIO \
307        ( ERRFILE | PXENV_STATUS_TFTP_CANNOT_READ_FROM_CONNECTION | 0x1d000000 )
308 
309 /** Socket is connected */
310 #define EISCONN		       ( ERRFILE | PXENV_STATUS_UDP_OPEN | 0x1e000000 )
311 
312 /** Is a directory */
313 #define EISDIR			( ERRFILE | PXENV_STATUS_FAILURE | 0x1f000000 )
314 
315 /** Too many levels of symbolic links */
316 #define ELOOP			( ERRFILE | PXENV_STATUS_FAILURE | 0x20000000 )
317 
318 /** Too many open files */
319 #define EMFILE	       ( ERRFILE | PXENV_STATUS_OUT_OF_RESOURCES | 0x21000000 )
320 
321 /** Too many links */
322 #define EMLINK			( ERRFILE | PXENV_STATUS_FAILURE | 0x22000000 )
323 
324 /** Inappropriate message buffer length */
325 #define EMSGSIZE	       ( ERRFILE | PXENV_STATUS_BAD_FUNC | 0x23000000 )
326 
327 /** Reserved */
328 #define EMULTIHOP		( ERRFILE | PXENV_STATUS_FAILURE | 0x24000000 )
329 
330 /** Filename too long */
331 #define ENAMETOOLONG		( ERRFILE | PXENV_STATUS_FAILURE | 0x25000000 )
332 
333 /** Network is down */
334 #define ENETDOWN	    ( ERRFILE | PXENV_STATUS_ARP_TIMEOUT | 0x26000000 )
335 
336 /** Connection aborted by network */
337 #define ENETRESET		( ERRFILE | PXENV_STATUS_FAILURE | 0x27000000 )
338 
339 /** Network unreachable */
340 #define ENETUNREACH	    ( ERRFILE | PXENV_STATUS_ARP_TIMEOUT | 0x28000000 )
341 
342 /** Too many open files in system */
343 #define ENFILE	       ( ERRFILE | PXENV_STATUS_OUT_OF_RESOURCES | 0x29000000 )
344 
345 /** No buffer space available */
346 #define ENOBUFS	       ( ERRFILE | PXENV_STATUS_OUT_OF_RESOURCES | 0x2a000000 )
347 
348 /** No message is available on the STREAM head read queue */
349 #define ENODATA			( ERRFILE | PXENV_STATUS_FAILURE | 0x2b000000 )
350 
351 /** No such device */
352 #define ENODEV	    ( ERRFILE | PXENV_STATUS_TFTP_FILE_NOT_FOUND | 0x2c000000 )
353 
354 /** No such file or directory */
355 #define ENOENT	    ( ERRFILE | PXENV_STATUS_TFTP_FILE_NOT_FOUND | 0x2d000000 )
356 
357 /** Exec format error */
358 #define ENOEXEC			( ERRFILE | PXENV_STATUS_FAILURE | 0x2e000000 )
359 
360 /** No locks available */
361 #define ENOLCK			( ERRFILE | PXENV_STATUS_FAILURE | 0x2f000000 )
362 
363 /** Reserved */
364 #define ENOLINK			( ERRFILE | PXENV_STATUS_FAILURE | 0x30000000 )
365 
366 /** Not enough space */
367 #define ENOMEM	       ( ERRFILE | PXENV_STATUS_OUT_OF_RESOURCES | 0x31000000 )
368 
369 /** No message of the desired type */
370 #define ENOMSG			( ERRFILE | PXENV_STATUS_FAILURE | 0x32000000 )
371 
372 /** Protocol not available */
373 #define ENOPROTOOPT	    ( ERRFILE | PXENV_STATUS_UNSUPPORTED | 0x33000000 )
374 
375 /** No space left on device */
376 #define ENOSPC	       ( ERRFILE | PXENV_STATUS_OUT_OF_RESOURCES | 0x34000000 )
377 
378 /** No STREAM resources */
379 #define ENOSR	       ( ERRFILE | PXENV_STATUS_OUT_OF_RESOURCES | 0x35000000 )
380 
381 /** Not a STREAM */
382 #define ENOSTR			( ERRFILE | PXENV_STATUS_FAILURE | 0x36000000 )
383 
384 /** Function not implemented */
385 #define ENOSYS		    ( ERRFILE | PXENV_STATUS_UNSUPPORTED | 0x37000000 )
386 
387 /** The socket is not connected */
388 #define ENOTCONN		( ERRFILE | PXENV_STATUS_FAILURE | 0x38000000 )
389 
390 /** Not a directory */
391 #define ENOTDIR			( ERRFILE | PXENV_STATUS_FAILURE | 0x39000000 )
392 
393 /** Directory not empty */
394 #define ENOTEMPTY		( ERRFILE | PXENV_STATUS_FAILURE | 0x3a000000 )
395 
396 /** Not a socket */
397 #define ENOTSOCK		( ERRFILE | PXENV_STATUS_FAILURE | 0x3b000000 )
398 
399 /** Not supported */
400 #define ENOTSUP		    ( ERRFILE | PXENV_STATUS_UNSUPPORTED | 0x3c000000 )
401 
402 /** Inappropriate I/O control operation */
403 #define ENOTTY			( ERRFILE | PXENV_STATUS_FAILURE | 0x3d000000 )
404 
405 /** No such device or address */
406 #define ENXIO	    ( ERRFILE | PXENV_STATUS_TFTP_FILE_NOT_FOUND | 0x3e000000 )
407 
408 /** Operation not supported on socket */
409 #define EOPNOTSUPP	    ( ERRFILE | PXENV_STATUS_UNSUPPORTED | 0x3f000000 )
410 
411 /** Value too large to be stored in data type */
412 #define EOVERFLOW		( ERRFILE | PXENV_STATUS_FAILURE | 0x40000000 )
413 
414 /** Operation not permitted */
415 #define EPERM	  ( ERRFILE | PXENV_STATUS_TFTP_ACCESS_VIOLATION | 0x41000000 )
416 
417 /** Broken pipe */
418 #define EPIPE			( ERRFILE | PXENV_STATUS_FAILURE | 0x42000000 )
419 
420 /** Protocol error */
421 #define EPROTO			( ERRFILE | PXENV_STATUS_FAILURE | 0x43000000 )
422 
423 /** Protocol not supported */
424 #define EPROTONOSUPPORT	    ( ERRFILE | PXENV_STATUS_UNSUPPORTED | 0x44000000 )
425 
426 /** Protocol wrong type for socket */
427 #define EPROTOTYPE		( ERRFILE | PXENV_STATUS_FAILURE | 0x45000000 )
428 
429 /** Result too large */
430 #define ERANGE			( ERRFILE | PXENV_STATUS_FAILURE | 0x46000000 )
431 
432 /** Read-only file system */
433 #define EROFS			( ERRFILE | PXENV_STATUS_FAILURE | 0x47000000 )
434 
435 /** Invalid seek */
436 #define ESPIPE			( ERRFILE | PXENV_STATUS_FAILURE | 0x48000000 )
437 
438 /** No such process */
439 #define ESRCH	    ( ERRFILE | PXENV_STATUS_TFTP_FILE_NOT_FOUND | 0x49000000 )
440 
441 /** Stale file handle */
442 #define ESTALE			( ERRFILE | PXENV_STATUS_FAILURE | 0x4a000000 )
443 
444 /** STREAM ioctl() timeout */
445 #define ETIME			( ERRFILE | PXENV_STATUS_FAILURE | 0x4b000000 )
446 
447 /** Operation timed out */
448 #define ETIMEDOUT     ( ERRFILE | PXENV_STATUS_TFTP_READ_TIMEOUT | 0x4c000000 )
449 
450 /** Text file busy */
451 #define ETXTBSY			( ERRFILE | PXENV_STATUS_FAILURE | 0x4d000000 )
452 
453 /** Operation would block (different from EAGAIN!) */
454 #define EWOULDBLOCK	      ( ERRFILE | PXENV_STATUS_TFTP_OPEN | 0x4e000000 )
455 
456 /** Improper link */
457 #define EXDEV			( ERRFILE | PXENV_STATUS_FAILURE | 0x4f000000 )
458 
459 /** @} */
460 
461 /**
462  * @defgroup euniq Per-file error disambiguators
463  *
464  * Files which use the same error number multiple times should
465  * probably define their own error subspace using these
466  * disambiguators.  For example:
467  *
468  *     #define ETCP_HEADER_TOO_SHORT	EUNIQ_01
469  *     #define ETCP_BAD_CHECKSUM	EUNIQ_02
470  *
471  * @{
472  */
473 
474 #define EUNIQ_01	0x00000100
475 #define EUNIQ_02	0x00000200
476 #define EUNIQ_03	0x00000300
477 #define EUNIQ_04	0x00000400
478 #define EUNIQ_05	0x00000500
479 #define EUNIQ_06	0x00000600
480 #define EUNIQ_07	0x00000700
481 #define EUNIQ_08	0x00000800
482 #define EUNIQ_09	0x00000900
483 #define EUNIQ_0A	0x00000a00
484 #define EUNIQ_0B	0x00000b00
485 #define EUNIQ_0C	0x00000c00
486 #define EUNIQ_0D	0x00000d00
487 #define EUNIQ_0E	0x00000e00
488 #define EUNIQ_0F	0x00000f00
489 #define EUNIQ_10	0x00001000
490 #define EUNIQ_11	0x00001100
491 #define EUNIQ_12	0x00001200
492 #define EUNIQ_13	0x00001300
493 #define EUNIQ_14	0x00001400
494 #define EUNIQ_15	0x00001500
495 #define EUNIQ_16	0x00001600
496 #define EUNIQ_17	0x00001700
497 #define EUNIQ_18	0x00001800
498 #define EUNIQ_19	0x00001900
499 #define EUNIQ_1A	0x00001a00
500 #define EUNIQ_1B	0x00001b00
501 #define EUNIQ_1C	0x00001c00
502 #define EUNIQ_1D	0x00001d00
503 #define EUNIQ_1E	0x00001e00
504 #define EUNIQ_1F	0x00001f00
505 
506 /** @} */
507 
508 extern int errno;
509 
510 #endif /* ERRNO_H */
511