13a9fd824SRoger Pau Monné /* 23a9fd824SRoger Pau Monné * There are two expected ways of including this header. 33a9fd824SRoger Pau Monné * 43a9fd824SRoger Pau Monné * 1) The "default" case (expected from tools etc). 53a9fd824SRoger Pau Monné * 63a9fd824SRoger Pau Monné * Simply #include <public/errno.h> 73a9fd824SRoger Pau Monné * 83a9fd824SRoger Pau Monné * In this circumstance, normal header guards apply and the includer shall get 93a9fd824SRoger Pau Monné * an enumeration in the XEN_xxx namespace, appropriate for C or assembly. 103a9fd824SRoger Pau Monné * 113a9fd824SRoger Pau Monné * 2) The special case where the includer provides a XEN_ERRNO() in scope. 123a9fd824SRoger Pau Monné * 133a9fd824SRoger Pau Monné * In this case, no inclusion guards apply and the caller is responsible for 143a9fd824SRoger Pau Monné * their XEN_ERRNO() being appropriate in the included context. The header 153a9fd824SRoger Pau Monné * will unilaterally #undef XEN_ERRNO(). 163a9fd824SRoger Pau Monné */ 173a9fd824SRoger Pau Monné 183a9fd824SRoger Pau Monné #ifndef XEN_ERRNO 193a9fd824SRoger Pau Monné 203a9fd824SRoger Pau Monné /* 213a9fd824SRoger Pau Monné * Includer has not provided a custom XEN_ERRNO(). Arrange for normal header 223a9fd824SRoger Pau Monné * guards, an automatic enum (for C code) and constants in the XEN_xxx 233a9fd824SRoger Pau Monné * namespace. 243a9fd824SRoger Pau Monné */ 253a9fd824SRoger Pau Monné #ifndef __XEN_PUBLIC_ERRNO_H__ 263a9fd824SRoger Pau Monné #define __XEN_PUBLIC_ERRNO_H__ 273a9fd824SRoger Pau Monné 283a9fd824SRoger Pau Monné #define XEN_ERRNO_DEFAULT_INCLUDE 293a9fd824SRoger Pau Monné 303a9fd824SRoger Pau Monné #ifndef __ASSEMBLY__ 313a9fd824SRoger Pau Monné 323a9fd824SRoger Pau Monné #define XEN_ERRNO(name, value) XEN_##name = value, 333a9fd824SRoger Pau Monné enum xen_errno { 343a9fd824SRoger Pau Monné 353a9fd824SRoger Pau Monné #elif __XEN_INTERFACE_VERSION__ < 0x00040700 363a9fd824SRoger Pau Monné 373a9fd824SRoger Pau Monné #define XEN_ERRNO(name, value) .equ XEN_##name, value 383a9fd824SRoger Pau Monné 393a9fd824SRoger Pau Monné #endif /* __ASSEMBLY__ */ 403a9fd824SRoger Pau Monné 413a9fd824SRoger Pau Monné #endif /* __XEN_PUBLIC_ERRNO_H__ */ 423a9fd824SRoger Pau Monné #endif /* !XEN_ERRNO */ 433a9fd824SRoger Pau Monné 443a9fd824SRoger Pau Monné /* ` enum neg_errnoval { [ -Efoo for each Efoo in the list below ] } */ 453a9fd824SRoger Pau Monné /* ` enum errnoval { */ 463a9fd824SRoger Pau Monné 473a9fd824SRoger Pau Monné #ifdef XEN_ERRNO 483a9fd824SRoger Pau Monné 493a9fd824SRoger Pau Monné /* 503a9fd824SRoger Pau Monné * Values originating from x86 Linux. Please consider using respective 513a9fd824SRoger Pau Monné * values when adding new definitions here. 523a9fd824SRoger Pau Monné * 533a9fd824SRoger Pau Monné * The set of identifiers to be added here shouldn't extend beyond what 543a9fd824SRoger Pau Monné * POSIX mandates (see e.g. 553a9fd824SRoger Pau Monné * http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html) 563a9fd824SRoger Pau Monné * with the exception that we support some optional (XSR) values 573a9fd824SRoger Pau Monné * specified there (but no new ones should be added). 583a9fd824SRoger Pau Monné */ 593a9fd824SRoger Pau Monné 603a9fd824SRoger Pau Monné XEN_ERRNO(EPERM, 1) /* Operation not permitted */ 613a9fd824SRoger Pau Monné XEN_ERRNO(ENOENT, 2) /* No such file or directory */ 623a9fd824SRoger Pau Monné XEN_ERRNO(ESRCH, 3) /* No such process */ 633a9fd824SRoger Pau Monné #ifdef __XEN__ /* Internal only, should never be exposed to the guest. */ 643a9fd824SRoger Pau Monné XEN_ERRNO(EINTR, 4) /* Interrupted system call */ 653a9fd824SRoger Pau Monné #endif 663a9fd824SRoger Pau Monné XEN_ERRNO(EIO, 5) /* I/O error */ 673a9fd824SRoger Pau Monné XEN_ERRNO(ENXIO, 6) /* No such device or address */ 683a9fd824SRoger Pau Monné XEN_ERRNO(E2BIG, 7) /* Arg list too long */ 693a9fd824SRoger Pau Monné XEN_ERRNO(ENOEXEC, 8) /* Exec format error */ 703a9fd824SRoger Pau Monné XEN_ERRNO(EBADF, 9) /* Bad file number */ 713a9fd824SRoger Pau Monné XEN_ERRNO(ECHILD, 10) /* No child processes */ 723a9fd824SRoger Pau Monné XEN_ERRNO(EAGAIN, 11) /* Try again */ 733a9fd824SRoger Pau Monné XEN_ERRNO(EWOULDBLOCK, 11) /* Operation would block. Aliases EAGAIN */ 743a9fd824SRoger Pau Monné XEN_ERRNO(ENOMEM, 12) /* Out of memory */ 753a9fd824SRoger Pau Monné XEN_ERRNO(EACCES, 13) /* Permission denied */ 763a9fd824SRoger Pau Monné XEN_ERRNO(EFAULT, 14) /* Bad address */ 773a9fd824SRoger Pau Monné XEN_ERRNO(EBUSY, 16) /* Device or resource busy */ 783a9fd824SRoger Pau Monné XEN_ERRNO(EEXIST, 17) /* File exists */ 793a9fd824SRoger Pau Monné XEN_ERRNO(EXDEV, 18) /* Cross-device link */ 803a9fd824SRoger Pau Monné XEN_ERRNO(ENODEV, 19) /* No such device */ 813a9fd824SRoger Pau Monné XEN_ERRNO(ENOTDIR, 20) /* Not a directory */ 823a9fd824SRoger Pau Monné XEN_ERRNO(EISDIR, 21) /* Is a directory */ 833a9fd824SRoger Pau Monné XEN_ERRNO(EINVAL, 22) /* Invalid argument */ 843a9fd824SRoger Pau Monné XEN_ERRNO(ENFILE, 23) /* File table overflow */ 853a9fd824SRoger Pau Monné XEN_ERRNO(EMFILE, 24) /* Too many open files */ 863a9fd824SRoger Pau Monné XEN_ERRNO(ENOSPC, 28) /* No space left on device */ 873a9fd824SRoger Pau Monné XEN_ERRNO(EROFS, 30) /* Read-only file system */ 883a9fd824SRoger Pau Monné XEN_ERRNO(EMLINK, 31) /* Too many links */ 893a9fd824SRoger Pau Monné XEN_ERRNO(EDOM, 33) /* Math argument out of domain of func */ 903a9fd824SRoger Pau Monné XEN_ERRNO(ERANGE, 34) /* Math result not representable */ 913a9fd824SRoger Pau Monné XEN_ERRNO(EDEADLK, 35) /* Resource deadlock would occur */ 923a9fd824SRoger Pau Monné XEN_ERRNO(EDEADLOCK, 35) /* Resource deadlock would occur. Aliases EDEADLK */ 933a9fd824SRoger Pau Monné XEN_ERRNO(ENAMETOOLONG, 36) /* File name too long */ 943a9fd824SRoger Pau Monné XEN_ERRNO(ENOLCK, 37) /* No record locks available */ 953a9fd824SRoger Pau Monné XEN_ERRNO(ENOSYS, 38) /* Function not implemented */ 963a9fd824SRoger Pau Monné XEN_ERRNO(ENOTEMPTY, 39) /* Directory not empty */ 973a9fd824SRoger Pau Monné XEN_ERRNO(ENODATA, 61) /* No data available */ 983a9fd824SRoger Pau Monné XEN_ERRNO(ETIME, 62) /* Timer expired */ 993a9fd824SRoger Pau Monné XEN_ERRNO(EBADMSG, 74) /* Not a data message */ 1003a9fd824SRoger Pau Monné XEN_ERRNO(EOVERFLOW, 75) /* Value too large for defined data type */ 1013a9fd824SRoger Pau Monné XEN_ERRNO(EILSEQ, 84) /* Illegal byte sequence */ 1023a9fd824SRoger Pau Monné #ifdef __XEN__ /* Internal only, should never be exposed to the guest. */ 1033a9fd824SRoger Pau Monné XEN_ERRNO(ERESTART, 85) /* Interrupted system call should be restarted */ 1043a9fd824SRoger Pau Monné #endif 1053a9fd824SRoger Pau Monné XEN_ERRNO(ENOTSOCK, 88) /* Socket operation on non-socket */ 1063a9fd824SRoger Pau Monné XEN_ERRNO(EMSGSIZE, 90) /* Message too large. */ 1073a9fd824SRoger Pau Monné XEN_ERRNO(EOPNOTSUPP, 95) /* Operation not supported on transport endpoint */ 1083a9fd824SRoger Pau Monné XEN_ERRNO(EADDRINUSE, 98) /* Address already in use */ 1093a9fd824SRoger Pau Monné XEN_ERRNO(EADDRNOTAVAIL, 99) /* Cannot assign requested address */ 1103a9fd824SRoger Pau Monné XEN_ERRNO(ENOBUFS, 105) /* No buffer space available */ 1113a9fd824SRoger Pau Monné XEN_ERRNO(EISCONN, 106) /* Transport endpoint is already connected */ 1123a9fd824SRoger Pau Monné XEN_ERRNO(ENOTCONN, 107) /* Transport endpoint is not connected */ 1133a9fd824SRoger Pau Monné XEN_ERRNO(ETIMEDOUT, 110) /* Connection timed out */ 1143a9fd824SRoger Pau Monné XEN_ERRNO(ECONNREFUSED, 111) /* Connection refused */ 1153a9fd824SRoger Pau Monné 1163a9fd824SRoger Pau Monné #undef XEN_ERRNO 1173a9fd824SRoger Pau Monné #endif /* XEN_ERRNO */ 1183a9fd824SRoger Pau Monné /* ` } */ 1193a9fd824SRoger Pau Monné 1203a9fd824SRoger Pau Monné /* Clean up from a default include. Close the enum (for C). */ 1213a9fd824SRoger Pau Monné #ifdef XEN_ERRNO_DEFAULT_INCLUDE 1223a9fd824SRoger Pau Monné #undef XEN_ERRNO_DEFAULT_INCLUDE 1233a9fd824SRoger Pau Monné #ifndef __ASSEMBLY__ 1243a9fd824SRoger Pau Monné }; 1253a9fd824SRoger Pau Monné #endif 1263a9fd824SRoger Pau Monné 1273a9fd824SRoger Pau Monné #endif /* XEN_ERRNO_DEFAULT_INCLUDE */ 128