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