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