Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/uapi/xen/privcmd.h
26285 views
1
/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR MIT) */
2
/******************************************************************************
3
* privcmd.h
4
*
5
* Interface to /proc/xen/privcmd.
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_PRIVCMD_H__
35
#define __LINUX_PUBLIC_PRIVCMD_H__
36
37
#include <linux/types.h>
38
#include <linux/compiler.h>
39
#include <xen/interface/xen.h>
40
41
struct privcmd_hypercall {
42
__u64 op;
43
__u64 arg[5];
44
};
45
46
struct privcmd_mmap_entry {
47
__u64 va;
48
/*
49
* This should be a GFN. It's not possible to change the name because
50
* it's exposed to the user-space.
51
*/
52
__u64 mfn;
53
__u64 npages;
54
};
55
56
struct privcmd_mmap {
57
int num;
58
domid_t dom; /* target domain */
59
struct privcmd_mmap_entry __user *entry;
60
};
61
62
struct privcmd_mmapbatch {
63
int num; /* number of pages to populate */
64
domid_t dom; /* target domain */
65
__u64 addr; /* virtual address */
66
xen_pfn_t __user *arr; /* array of mfns - or'd with
67
PRIVCMD_MMAPBATCH_*_ERROR on err */
68
};
69
70
#define PRIVCMD_MMAPBATCH_MFN_ERROR 0xf0000000U
71
#define PRIVCMD_MMAPBATCH_PAGED_ERROR 0x80000000U
72
73
struct privcmd_mmapbatch_v2 {
74
unsigned int num; /* number of pages to populate */
75
domid_t dom; /* target domain */
76
__u64 addr; /* virtual address */
77
const xen_pfn_t __user *arr; /* array of mfns */
78
int __user *err; /* array of error codes */
79
};
80
81
struct privcmd_dm_op_buf {
82
void __user *uptr;
83
size_t size;
84
};
85
86
struct privcmd_dm_op {
87
domid_t dom;
88
__u16 num;
89
const struct privcmd_dm_op_buf __user *ubufs;
90
};
91
92
struct privcmd_mmap_resource {
93
domid_t dom;
94
__u32 type;
95
__u32 id;
96
__u32 idx;
97
__u64 num;
98
__u64 addr;
99
};
100
101
/* For privcmd_irqfd::flags */
102
#define PRIVCMD_IRQFD_FLAG_DEASSIGN (1 << 0)
103
104
struct privcmd_irqfd {
105
__u64 dm_op;
106
__u32 size; /* Size of structure pointed by dm_op */
107
__u32 fd;
108
__u32 flags;
109
domid_t dom;
110
__u8 pad[2];
111
};
112
113
/* For privcmd_ioeventfd::flags */
114
#define PRIVCMD_IOEVENTFD_FLAG_DEASSIGN (1 << 0)
115
116
struct privcmd_ioeventfd {
117
__u64 ioreq;
118
__u64 ports;
119
__u64 addr;
120
__u32 addr_len;
121
__u32 event_fd;
122
__u32 vcpus;
123
__u32 vq;
124
__u32 flags;
125
domid_t dom;
126
__u8 pad[2];
127
};
128
129
struct privcmd_pcidev_get_gsi {
130
__u32 sbdf;
131
__u32 gsi;
132
};
133
134
/*
135
* @cmd: IOCTL_PRIVCMD_HYPERCALL
136
* @arg: &privcmd_hypercall_t
137
* Return: Value returned from execution of the specified hypercall.
138
*
139
* @cmd: IOCTL_PRIVCMD_MMAPBATCH_V2
140
* @arg: &struct privcmd_mmapbatch_v2
141
* Return: 0 on success (i.e., arg->err contains valid error codes for
142
* each frame). On an error other than a failed frame remap, -1 is
143
* returned and errno is set to EINVAL, EFAULT etc. As an exception,
144
* if the operation was otherwise successful but any frame failed with
145
* -ENOENT, then -1 is returned and errno is set to ENOENT.
146
*/
147
#define IOCTL_PRIVCMD_HYPERCALL \
148
_IOC(_IOC_NONE, 'P', 0, sizeof(struct privcmd_hypercall))
149
#define IOCTL_PRIVCMD_MMAP \
150
_IOC(_IOC_NONE, 'P', 2, sizeof(struct privcmd_mmap))
151
#define IOCTL_PRIVCMD_MMAPBATCH \
152
_IOC(_IOC_NONE, 'P', 3, sizeof(struct privcmd_mmapbatch))
153
#define IOCTL_PRIVCMD_MMAPBATCH_V2 \
154
_IOC(_IOC_NONE, 'P', 4, sizeof(struct privcmd_mmapbatch_v2))
155
#define IOCTL_PRIVCMD_DM_OP \
156
_IOC(_IOC_NONE, 'P', 5, sizeof(struct privcmd_dm_op))
157
#define IOCTL_PRIVCMD_RESTRICT \
158
_IOC(_IOC_NONE, 'P', 6, sizeof(domid_t))
159
#define IOCTL_PRIVCMD_MMAP_RESOURCE \
160
_IOC(_IOC_NONE, 'P', 7, sizeof(struct privcmd_mmap_resource))
161
#define IOCTL_PRIVCMD_IRQFD \
162
_IOW('P', 8, struct privcmd_irqfd)
163
#define IOCTL_PRIVCMD_IOEVENTFD \
164
_IOW('P', 9, struct privcmd_ioeventfd)
165
#define IOCTL_PRIVCMD_PCIDEV_GET_GSI \
166
_IOC(_IOC_NONE, 'P', 10, sizeof(struct privcmd_pcidev_get_gsi))
167
168
#endif /* __LINUX_PUBLIC_PRIVCMD_H__ */
169
170