1 /*****************************************************************************
2 * Copyright 2011 Broadcom Corporation. All rights reserved.
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").
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
14 *****************************************************************************/
16 #if !defined(__VMCS_SM_IOCTL_H__INCLUDED__)
17 #define __VMCS_SM_IOCTL_H__INCLUDED__
19 /* ---- Include Files ---------------------------------------------------- */
21 #if defined(__KERNEL__)
22 #include <linux/types.h> /* Needed for standard types */
27 #include <linux/ioctl.h>
29 /* ---- Constants and Types ---------------------------------------------- */
31 #define VMCS_SM_RESOURCE_NAME 32
32 #define VMCS_SM_RESOURCE_NAME_DEFAULT "sm-host-resource"
34 /* Type define used to create unique IOCTL number */
35 #define VMCS_SM_MAGIC_TYPE 'I'
39 VMCS_SM_CMD_ALLOC
= 0x5A, /* Start at 0x5A arbitrarily */
40 VMCS_SM_CMD_ALLOC_SHARE
,
42 VMCS_SM_CMD_LOCK_CACHE
,
50 VMCS_SM_CMD_SIZE_USR_HANDLE
,
51 VMCS_SM_CMD_CHK_USR_HANDLE
,
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
,
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
,
64 VMCS_SM_CMD_CLEAN_INVALID
,
65 VMCS_SM_CMD_CLEAN_INVALID2
,
67 VMCS_SM_CMD_IMPORT_DMABUF
,
69 VMCS_SM_CMD_LAST
/* Do not delete */
72 /* Cache type supported, conveniently matches the user space definition in
75 enum vmcs_sm_cache_e
{
83 #define VCSM_CACHE_OP_INV 0x01
84 #define VCSM_CACHE_OP_CLEAN 0x02
85 #define VCSM_CACHE_OP_FLUSH 0x03
87 /* IOCTL Data structures */
88 struct vmcs_sm_ioctl_alloc
{
92 enum vmcs_sm_cache_e cached
;
93 char name
[VMCS_SM_RESOURCE_NAME
];
97 /* unsigned int base_addr; */
100 struct vmcs_sm_ioctl_alloc_share
{
106 struct vmcs_sm_ioctl_free
{
109 /* unsigned int base_addr; */
112 struct vmcs_sm_ioctl_lock_unlock
{
120 struct vmcs_sm_ioctl_lock_cache
{
123 enum vmcs_sm_cache_e cached
;
126 struct vmcs_sm_ioctl_resize
{
129 unsigned int new_size
;
132 unsigned int old_size
;
135 struct vmcs_sm_ioctl_map
{
137 /* and kernel -> user */
146 struct vmcs_sm_ioctl_walk
{
151 struct vmcs_sm_ioctl_chk
{
158 enum vmcs_sm_cache_e cache
;
161 struct vmcs_sm_ioctl_size
{
169 struct vmcs_sm_ioctl_cache
{
176 struct vmcs_sm_ioctl_clean_invalid
{
186 struct vmcs_sm_ioctl_clean_invalid2
{
189 struct vmcs_sm_ioctl_clean_invalid_block
{
190 uint16_t invalidate_mode
;
191 uint16_t block_count
;
192 void * start_address
;
194 uint32_t inter_block_stride
;
198 struct vmcs_sm_ioctl_import_dmabuf
{
201 enum vmcs_sm_cache_e cached
;
202 char name
[VMCS_SM_RESOURCE_NAME
];
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)
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)
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)
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)
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)
281 /* ---- Variable Externs ------------------------------------------------- */
283 /* ---- Function Prototypes ---------------------------------------------- */
285 #endif /* __VMCS_SM_IOCTL_H__INCLUDED__ */