1317db279SRoger Pau Monné /*- 2317db279SRoger Pau Monné * Copyright (c) 2014 Roger Pau Monné <royger@FreeBSD.org>. 3317db279SRoger Pau Monné * All rights reserved. 4317db279SRoger Pau Monné * 5317db279SRoger Pau Monné * Redistribution and use in source and binary forms, with or without 6317db279SRoger Pau Monné * modification, are permitted provided that the following conditions 7317db279SRoger Pau Monné * are met: 8317db279SRoger Pau Monné * 1. Redistributions of source code must retain the above copyright 9317db279SRoger Pau Monné * notice, this list of conditions and the following disclaimer. 10317db279SRoger Pau Monné * 2. Redistributions in binary form must reproduce the above copyright 11317db279SRoger Pau Monné * notice, this list of conditions and the following disclaimer in the 12317db279SRoger Pau Monné * documentation and/or other materials provided with the distribution. 13317db279SRoger Pau Monné * 14317db279SRoger Pau Monné * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS AS IS'' AND 15317db279SRoger Pau Monné * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16317db279SRoger Pau Monné * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17317db279SRoger Pau Monné * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18317db279SRoger Pau Monné * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19317db279SRoger Pau Monné * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20317db279SRoger Pau Monné * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21317db279SRoger Pau Monné * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22317db279SRoger Pau Monné * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23317db279SRoger Pau Monné * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24317db279SRoger Pau Monné * SUCH DAMAGE. 25317db279SRoger Pau Monné * 26317db279SRoger Pau Monné * $FreeBSD$ 27317db279SRoger Pau Monné */ 28317db279SRoger Pau Monné 29317db279SRoger Pau Monné #ifndef __XEN_ERROR_H__ 30317db279SRoger Pau Monné #define __XEN_ERROR_H__ 31317db279SRoger Pau Monné 32*ad7dd514SElliott Mitchell #include <contrib/xen/errno.h> 33317db279SRoger Pau Monné 34317db279SRoger Pau Monné /* Translation table */ 35317db279SRoger Pau Monné static int xen_errors[] = 36317db279SRoger Pau Monné { 37317db279SRoger Pau Monné [XEN_EPERM] = EPERM, 38317db279SRoger Pau Monné [XEN_ENOENT] = ENOENT, 39317db279SRoger Pau Monné [XEN_ESRCH] = ESRCH, 40317db279SRoger Pau Monné [XEN_EIO] = EIO, 41317db279SRoger Pau Monné [XEN_ENXIO] = ENXIO, 42317db279SRoger Pau Monné [XEN_E2BIG] = E2BIG, 43317db279SRoger Pau Monné [XEN_ENOEXEC] = ENOEXEC, 44317db279SRoger Pau Monné [XEN_EBADF] = EBADF, 45317db279SRoger Pau Monné [XEN_ECHILD] = ECHILD, 46317db279SRoger Pau Monné [XEN_EAGAIN] = EAGAIN, 47317db279SRoger Pau Monné [XEN_ENOMEM] = ENOMEM, 48317db279SRoger Pau Monné [XEN_EACCES] = EACCES, 49317db279SRoger Pau Monné [XEN_EFAULT] = EFAULT, 50317db279SRoger Pau Monné [XEN_EBUSY] = EBUSY, 51317db279SRoger Pau Monné [XEN_EEXIST] = EEXIST, 52317db279SRoger Pau Monné [XEN_EXDEV] = EXDEV, 53317db279SRoger Pau Monné [XEN_ENODEV] = ENODEV, 54317db279SRoger Pau Monné [XEN_EINVAL] = EINVAL, 55317db279SRoger Pau Monné [XEN_ENFILE] = ENFILE, 56317db279SRoger Pau Monné [XEN_EMFILE] = EMFILE, 57317db279SRoger Pau Monné [XEN_ENOSPC] = ENOSPC, 58317db279SRoger Pau Monné [XEN_EMLINK] = EMLINK, 59317db279SRoger Pau Monné [XEN_EDOM] = EDOM, 60317db279SRoger Pau Monné [XEN_ERANGE] = ERANGE, 61317db279SRoger Pau Monné [XEN_EDEADLK] = EDEADLK, 62317db279SRoger Pau Monné [XEN_ENAMETOOLONG] = ENAMETOOLONG, 63317db279SRoger Pau Monné [XEN_ENOLCK] = ENOLCK, 64317db279SRoger Pau Monné [XEN_ENOSYS] = ENOSYS, 65317db279SRoger Pau Monné [XEN_ENODATA] = ENOENT, 66317db279SRoger Pau Monné [XEN_ETIME] = ETIMEDOUT, 67317db279SRoger Pau Monné [XEN_EBADMSG] = EBADMSG, 68317db279SRoger Pau Monné [XEN_EOVERFLOW] = EOVERFLOW, 69317db279SRoger Pau Monné [XEN_EILSEQ] = EILSEQ, 70317db279SRoger Pau Monné [XEN_ENOTSOCK] = ENOTSOCK, 71317db279SRoger Pau Monné [XEN_EOPNOTSUPP] = EOPNOTSUPP, 72317db279SRoger Pau Monné [XEN_EADDRINUSE] = EADDRINUSE, 73317db279SRoger Pau Monné [XEN_EADDRNOTAVAIL] = EADDRNOTAVAIL, 74317db279SRoger Pau Monné [XEN_ENOBUFS] = ENOBUFS, 75317db279SRoger Pau Monné [XEN_EISCONN] = EISCONN, 76317db279SRoger Pau Monné [XEN_ENOTCONN] = ENOTCONN, 77317db279SRoger Pau Monné [XEN_ETIMEDOUT] = ETIMEDOUT, 78317db279SRoger Pau Monné }; 79317db279SRoger Pau Monné 80317db279SRoger Pau Monné static inline int 81317db279SRoger Pau Monné xen_translate_error(int error) 82317db279SRoger Pau Monné { 83317db279SRoger Pau Monné int bsd_error; 84317db279SRoger Pau Monné 85317db279SRoger Pau Monné KASSERT((error < 0), ("Value is not a valid Xen error code")); 86317db279SRoger Pau Monné 87317db279SRoger Pau Monné if (-error >= nitems(xen_errors)) { 88317db279SRoger Pau Monné /* 89317db279SRoger Pau Monné * We received an error value that cannot be translated, 90317db279SRoger Pau Monné * return EINVAL. 91317db279SRoger Pau Monné */ 92317db279SRoger Pau Monné return (EINVAL); 93317db279SRoger Pau Monné } 94317db279SRoger Pau Monné 95317db279SRoger Pau Monné bsd_error = xen_errors[-error]; 96317db279SRoger Pau Monné KASSERT((bsd_error != 0), ("Unknown Xen error code")); 97317db279SRoger Pau Monné 98317db279SRoger Pau Monné return (bsd_error); 99317db279SRoger Pau Monné } 100317db279SRoger Pau Monné 101317db279SRoger Pau Monné #endif /* !__XEN_ERROR_H__ */ 102