1 /****************************************************************************** 2 * evtchn.h 3 * 4 * Interface to /dev/xen/evtchn. 5 * 6 * Copyright (c) 2003-2005, K A Fraser 7 * 8 * This program is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License version 2 10 * as published by the Free Software Foundation; or, when distributed 11 * separately from the Linux kernel or incorporated into other 12 * software packages, subject to the following license: 13 * 14 * Permission is hereby granted, free of charge, to any person obtaining a copy 15 * of this source file (the "Software"), to deal in the Software without 16 * restriction, including without limitation the rights to use, copy, modify, 17 * merge, publish, distribute, sublicense, and/or sell copies of the Software, 18 * and to permit persons to whom the Software is furnished to do so, subject to 19 * the following conditions: 20 * 21 * The above copyright notice and this permission notice shall be included in 22 * all copies or substantial portions of the Software. 23 * 24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 25 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 26 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 27 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 28 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 29 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 30 * IN THE SOFTWARE. 31 */ 32 33 #ifndef __LINUX_PUBLIC_EVTCHN_H__ 34 #define __LINUX_PUBLIC_EVTCHN_H__ 35 36 /* 37 * Bind a fresh port to VIRQ @virq. 38 * Return allocated port. 39 */ 40 #define IOCTL_EVTCHN_BIND_VIRQ \ 41 _IOC(_IOC_NONE, 'E', 0, sizeof(struct ioctl_evtchn_bind_virq)) 42 struct ioctl_evtchn_bind_virq { 43 unsigned int virq; 44 }; 45 46 /* 47 * Bind a fresh port to remote <@remote_domain, @remote_port>. 48 * Return allocated port. 49 */ 50 #define IOCTL_EVTCHN_BIND_INTERDOMAIN \ 51 _IOC(_IOC_NONE, 'E', 1, sizeof(struct ioctl_evtchn_bind_interdomain)) 52 struct ioctl_evtchn_bind_interdomain { 53 unsigned int remote_domain, remote_port; 54 }; 55 56 /* 57 * Allocate a fresh port for binding to @remote_domain. 58 * Return allocated port. 59 */ 60 #define IOCTL_EVTCHN_BIND_UNBOUND_PORT \ 61 _IOC(_IOC_NONE, 'E', 2, sizeof(struct ioctl_evtchn_bind_unbound_port)) 62 struct ioctl_evtchn_bind_unbound_port { 63 unsigned int remote_domain; 64 }; 65 66 /* 67 * Unbind previously allocated @port. 68 */ 69 #define IOCTL_EVTCHN_UNBIND \ 70 _IOC(_IOC_NONE, 'E', 3, sizeof(struct ioctl_evtchn_unbind)) 71 struct ioctl_evtchn_unbind { 72 unsigned int port; 73 }; 74 75 /* 76 * Unbind previously allocated @port. 77 */ 78 #define IOCTL_EVTCHN_NOTIFY \ 79 _IOC(_IOC_NONE, 'E', 4, sizeof(struct ioctl_evtchn_notify)) 80 struct ioctl_evtchn_notify { 81 unsigned int port; 82 }; 83 84 /* Clear and reinitialise the event buffer. Clear error condition. */ 85 #define IOCTL_EVTCHN_RESET \ 86 _IOC(_IOC_NONE, 'E', 5, 0) 87 88 /* 89 * Restrict this file descriptor so that it can only be used to bind 90 * new interdomain events from one domain. 91 * 92 * Once a file descriptor has been restricted it cannot be 93 * de-restricted, and must be closed and re-opened. Event channels 94 * which were bound before restricting remain bound afterwards, and 95 * can be notified as usual. 96 */ 97 #define IOCTL_EVTCHN_RESTRICT_DOMID \ 98 _IOC(_IOC_NONE, 'E', 6, sizeof(struct ioctl_evtchn_restrict_domid)) 99 struct ioctl_evtchn_restrict_domid { 100 domid_t domid; 101 }; 102 103 #endif /* __LINUX_PUBLIC_EVTCHN_H__ */ 104