-
Notifications
You must be signed in to change notification settings - Fork 4.8k
/
vmcs_sm_ioctl.h
288 lines (243 loc) · 7.51 KB
/
vmcs_sm_ioctl.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
/*****************************************************************************
* Copyright 2011 Broadcom Corporation. All rights reserved.
*
* Unless you and Broadcom execute a separate written software license
* agreement governing use of this software, this software is licensed to you
* under the terms of the GNU General Public License version 2, available at
* http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
*
* Notwithstanding the above, under no circumstances may you combine this
* software in any way with any other Broadcom software provided under a
* license other than the GPL, without Broadcom's express prior written
* consent.
*
*****************************************************************************/
#if !defined(__VMCS_SM_IOCTL_H__INCLUDED__)
#define __VMCS_SM_IOCTL_H__INCLUDED__
/* ---- Include Files ---------------------------------------------------- */
#if defined(__KERNEL__)
#include <linux/types.h> /* Needed for standard types */
#else
#include <stdint.h>
#endif
#include <linux/ioctl.h>
/* ---- Constants and Types ---------------------------------------------- */
#define VMCS_SM_RESOURCE_NAME 32
#define VMCS_SM_RESOURCE_NAME_DEFAULT "sm-host-resource"
/* Type define used to create unique IOCTL number */
#define VMCS_SM_MAGIC_TYPE 'I'
/* IOCTL commands */
enum vmcs_sm_cmd_e {
VMCS_SM_CMD_ALLOC = 0x5A, /* Start at 0x5A arbitrarily */
VMCS_SM_CMD_ALLOC_SHARE,
VMCS_SM_CMD_LOCK,
VMCS_SM_CMD_LOCK_CACHE,
VMCS_SM_CMD_UNLOCK,
VMCS_SM_CMD_RESIZE,
VMCS_SM_CMD_UNMAP,
VMCS_SM_CMD_FREE,
VMCS_SM_CMD_FLUSH,
VMCS_SM_CMD_INVALID,
VMCS_SM_CMD_SIZE_USR_HANDLE,
VMCS_SM_CMD_CHK_USR_HANDLE,
VMCS_SM_CMD_MAPPED_USR_HANDLE,
VMCS_SM_CMD_MAPPED_USR_ADDRESS,
VMCS_SM_CMD_MAPPED_VC_HDL_FROM_ADDR,
VMCS_SM_CMD_MAPPED_VC_HDL_FROM_HDL,
VMCS_SM_CMD_MAPPED_VC_ADDR_FROM_HDL,
VMCS_SM_CMD_VC_WALK_ALLOC,
VMCS_SM_CMD_HOST_WALK_MAP,
VMCS_SM_CMD_HOST_WALK_PID_ALLOC,
VMCS_SM_CMD_HOST_WALK_PID_MAP,
VMCS_SM_CMD_CLEAN_INVALID,
VMCS_SM_CMD_CLEAN_INVALID2,
VMCS_SM_CMD_IMPORT_DMABUF,
VMCS_SM_CMD_LAST /* Do not delete */
};
/* Cache type supported, conveniently matches the user space definition in
** user-vcsm.h.
*/
enum vmcs_sm_cache_e {
VMCS_SM_CACHE_NONE,
VMCS_SM_CACHE_HOST,
VMCS_SM_CACHE_VC,
VMCS_SM_CACHE_BOTH,
};
/* IOCTL Data structures */
struct vmcs_sm_ioctl_alloc {
/* user -> kernel */
unsigned int size;
unsigned int num;
enum vmcs_sm_cache_e cached;
char name[VMCS_SM_RESOURCE_NAME];
/* kernel -> user */
unsigned int handle;
/* unsigned int base_addr; */
};
struct vmcs_sm_ioctl_alloc_share {
/* user -> kernel */
unsigned int handle;
unsigned int size;
};
struct vmcs_sm_ioctl_free {
/* user -> kernel */
unsigned int handle;
/* unsigned int base_addr; */
};
struct vmcs_sm_ioctl_lock_unlock {
/* user -> kernel */
unsigned int handle;
/* kernel -> user */
unsigned int addr;
};
struct vmcs_sm_ioctl_lock_cache {
/* user -> kernel */
unsigned int handle;
enum vmcs_sm_cache_e cached;
};
struct vmcs_sm_ioctl_resize {
/* user -> kernel */
unsigned int handle;
unsigned int new_size;
/* kernel -> user */
unsigned int old_size;
};
struct vmcs_sm_ioctl_map {
/* user -> kernel */
/* and kernel -> user */
unsigned int pid;
unsigned int handle;
unsigned int addr;
/* kernel -> user */
unsigned int size;
};
struct vmcs_sm_ioctl_walk {
/* user -> kernel */
unsigned int pid;
};
struct vmcs_sm_ioctl_chk {
/* user -> kernel */
unsigned int handle;
/* kernel -> user */
unsigned int addr;
unsigned int size;
enum vmcs_sm_cache_e cache;
};
struct vmcs_sm_ioctl_size {
/* user -> kernel */
unsigned int handle;
/* kernel -> user */
unsigned int size;
};
struct vmcs_sm_ioctl_cache {
/* user -> kernel */
unsigned int handle;
unsigned int addr;
unsigned int size;
};
/*
* Cache functions to be set to struct vmcs_sm_ioctl_clean_invalid cmd and
* vmcs_sm_ioctl_clean_invalid2 invalidate_mode.
*/
#define VCSM_CACHE_OP_INV 0x01
#define VCSM_CACHE_OP_CLEAN 0x02
#define VCSM_CACHE_OP_FLUSH 0x03
struct vmcs_sm_ioctl_clean_invalid {
/* user -> kernel */
struct {
unsigned int cmd;
unsigned int handle;
unsigned int addr;
unsigned int size;
} s[8];
};
struct vmcs_sm_ioctl_clean_invalid2 {
uint8_t op_count;
uint8_t zero[3];
struct vmcs_sm_ioctl_clean_invalid_block {
uint16_t invalidate_mode;
uint16_t block_count;
void * start_address;
uint32_t block_size;
uint32_t inter_block_stride;
} s[0];
};
struct vmcs_sm_ioctl_import_dmabuf {
/* user -> kernel */
int dmabuf_fd;
enum vmcs_sm_cache_e cached;
char name[VMCS_SM_RESOURCE_NAME];
/* kernel -> user */
unsigned int handle;
};
/* IOCTL numbers */
#define VMCS_SM_IOCTL_MEM_ALLOC\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_ALLOC,\
struct vmcs_sm_ioctl_alloc)
#define VMCS_SM_IOCTL_MEM_ALLOC_SHARE\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_ALLOC_SHARE,\
struct vmcs_sm_ioctl_alloc_share)
#define VMCS_SM_IOCTL_MEM_LOCK\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_LOCK,\
struct vmcs_sm_ioctl_lock_unlock)
#define VMCS_SM_IOCTL_MEM_LOCK_CACHE\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_LOCK_CACHE,\
struct vmcs_sm_ioctl_lock_cache)
#define VMCS_SM_IOCTL_MEM_UNLOCK\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_UNLOCK,\
struct vmcs_sm_ioctl_lock_unlock)
#define VMCS_SM_IOCTL_MEM_RESIZE\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_RESIZE,\
struct vmcs_sm_ioctl_resize)
#define VMCS_SM_IOCTL_MEM_FREE\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_FREE,\
struct vmcs_sm_ioctl_free)
#define VMCS_SM_IOCTL_MEM_FLUSH\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_FLUSH,\
struct vmcs_sm_ioctl_cache)
#define VMCS_SM_IOCTL_MEM_INVALID\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_INVALID,\
struct vmcs_sm_ioctl_cache)
#define VMCS_SM_IOCTL_MEM_CLEAN_INVALID\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_CLEAN_INVALID,\
struct vmcs_sm_ioctl_clean_invalid)
#define VMCS_SM_IOCTL_MEM_CLEAN_INVALID2\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_CLEAN_INVALID2,\
struct vmcs_sm_ioctl_clean_invalid2)
#define VMCS_SM_IOCTL_SIZE_USR_HDL\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_SIZE_USR_HANDLE,\
struct vmcs_sm_ioctl_size)
#define VMCS_SM_IOCTL_CHK_USR_HDL\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_CHK_USR_HANDLE,\
struct vmcs_sm_ioctl_chk)
#define VMCS_SM_IOCTL_MAP_USR_HDL\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_MAPPED_USR_HANDLE,\
struct vmcs_sm_ioctl_map)
#define VMCS_SM_IOCTL_MAP_USR_ADDRESS\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_MAPPED_USR_ADDRESS,\
struct vmcs_sm_ioctl_map)
#define VMCS_SM_IOCTL_MAP_VC_HDL_FR_ADDR\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_MAPPED_VC_HDL_FROM_ADDR,\
struct vmcs_sm_ioctl_map)
#define VMCS_SM_IOCTL_MAP_VC_HDL_FR_HDL\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_MAPPED_VC_HDL_FROM_HDL,\
struct vmcs_sm_ioctl_map)
#define VMCS_SM_IOCTL_MAP_VC_ADDR_FR_HDL\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_MAPPED_VC_ADDR_FROM_HDL,\
struct vmcs_sm_ioctl_map)
#define VMCS_SM_IOCTL_VC_WALK_ALLOC\
_IO(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_VC_WALK_ALLOC)
#define VMCS_SM_IOCTL_HOST_WALK_MAP\
_IO(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_HOST_WALK_MAP)
#define VMCS_SM_IOCTL_HOST_WALK_PID_ALLOC\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_HOST_WALK_PID_ALLOC,\
struct vmcs_sm_ioctl_walk)
#define VMCS_SM_IOCTL_HOST_WALK_PID_MAP\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_HOST_WALK_PID_MAP,\
struct vmcs_sm_ioctl_walk)
#define VMCS_SM_IOCTL_MEM_IMPORT_DMABUF\
_IOR(VMCS_SM_MAGIC_TYPE, VMCS_SM_CMD_IMPORT_DMABUF,\
struct vmcs_sm_ioctl_import_dmabuf)
/* ---- Variable Externs ------------------------------------------------- */
/* ---- Function Prototypes ---------------------------------------------- */
#endif /* __VMCS_SM_IOCTL_H__INCLUDED__ */