summaryrefslogtreecommitdiff
path: root/arch/arm/mach-bcm2708
diff options
context:
space:
mode:
authorTim Gover <tgover@broadcom.com>2014-07-22 15:41:04 +0100
committerpopcornmix <popcornmix@gmail.com>2015-05-18 14:10:28 +0100
commitcf3feeff47ba91fca50120091bccf77362c65a8d (patch)
treef4c2efe53c51674b038ddee6fb6746cca114033b /arch/arm/mach-bcm2708
parent82d269e37c4758024e0bc703d9549bd601fdc645 (diff)
downloadlinux-cf3feeff47ba91fca50120091bccf77362c65a8d.tar.gz
vcsm: VideoCore shared memory service for BCM2835
Add experimental support for the VideoCore shared memory service. This allows user processes to allocate memory from VideoCore's GPU relocatable heap and mmap the buffers. Additionally, the memory handles can passed to other VideoCore services such as MMAL, OpenMax and DispmanX TODO * This driver was originally released for BCM28155 which has a different cache architecture to BCM2835. Consequently, in this release only uncached mappings are supported. However, there's no fundamental reason which cached mappings cannot be support or BCM2835 * More refactoring is required to remove the typedefs. * Re-enable the some of the commented out debug-fs statistics which were disabled when migrating code from proc-fs. * There's a lot of code to support sharing of VCSM in order to support Android. This could probably done more cleanly or perhaps just removed. Signed-off-by: Tim Gover <timgover@gmail.com> config: Disable VC_SM for now to fix hang with cutdown kernel vcsm: Use boolean as it cannot be built as module On building the bcm_vc_sm as a module we get the following error: v7_dma_flush_range and do_munmap are undefined in vc-sm.ko. Fix by making it not an option to build as module
Diffstat (limited to 'arch/arm/mach-bcm2708')
-rw-r--r--arch/arm/mach-bcm2708/include/mach/vc_sm_defs.h181
-rw-r--r--arch/arm/mach-bcm2708/include/mach/vc_sm_knl.h55
-rw-r--r--arch/arm/mach-bcm2708/include/mach/vc_vchi_sm.h82
-rw-r--r--arch/arm/mach-bcm2708/include/mach/vmcs_sm_ioctl.h233
4 files changed, 551 insertions, 0 deletions
diff --git a/arch/arm/mach-bcm2708/include/mach/vc_sm_defs.h b/arch/arm/mach-bcm2708/include/mach/vc_sm_defs.h
new file mode 100644
index 000000000000..c4d5ff718a5b
--- /dev/null
+++ b/arch/arm/mach-bcm2708/include/mach/vc_sm_defs.h
@@ -0,0 +1,181 @@
+/*****************************************************************************
+* 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.
+*****************************************************************************/
+
+#ifndef __VC_SM_DEFS_H__INCLUDED__
+#define __VC_SM_DEFS_H__INCLUDED__
+
+/* FourCC code used for VCHI connection */
+#define VC_SM_SERVER_NAME MAKE_FOURCC("SMEM")
+
+/* Maximum message length */
+#define VC_SM_MAX_MSG_LEN (sizeof(VC_SM_MSG_UNION_T) + \
+ sizeof(VC_SM_MSG_HDR_T))
+#define VC_SM_MAX_RSP_LEN (sizeof(VC_SM_MSG_UNION_T))
+
+/* Resource name maximum size */
+#define VC_SM_RESOURCE_NAME 32
+
+/* All message types supported for HOST->VC direction */
+typedef enum {
+ /* Allocate shared memory block */
+ VC_SM_MSG_TYPE_ALLOC,
+ /* Lock allocated shared memory block */
+ VC_SM_MSG_TYPE_LOCK,
+ /* Unlock allocated shared memory block */
+ VC_SM_MSG_TYPE_UNLOCK,
+ /* Unlock allocated shared memory block, do not answer command */
+ VC_SM_MSG_TYPE_UNLOCK_NOANS,
+ /* Free shared memory block */
+ VC_SM_MSG_TYPE_FREE,
+ /* Resize a shared memory block */
+ VC_SM_MSG_TYPE_RESIZE,
+ /* Walk the allocated shared memory block(s) */
+ VC_SM_MSG_TYPE_WALK_ALLOC,
+
+ /* A previously applied action will need to be reverted */
+ VC_SM_MSG_TYPE_ACTION_CLEAN,
+ VC_SM_MSG_TYPE_MAX
+} VC_SM_MSG_TYPE;
+
+/* Type of memory to be allocated */
+typedef enum {
+ VC_SM_ALLOC_CACHED,
+ VC_SM_ALLOC_NON_CACHED,
+
+} VC_SM_ALLOC_TYPE_T;
+
+/* Message header for all messages in HOST->VC direction */
+typedef struct {
+ int32_t type;
+ uint32_t trans_id;
+ uint8_t body[0];
+
+} VC_SM_MSG_HDR_T;
+
+/* Request to allocate memory (HOST->VC) */
+typedef struct {
+ /* type of memory to allocate */
+ VC_SM_ALLOC_TYPE_T type;
+ /* byte amount of data to allocate per unit */
+ uint32_t base_unit;
+ /* number of unit to allocate */
+ uint32_t num_unit;
+ /* alignement to be applied on allocation */
+ uint32_t alignement;
+ /* identity of who allocated this block */
+ uint32_t allocator;
+ /* resource name (for easier tracking on vc side) */
+ char name[VC_SM_RESOURCE_NAME];
+
+} VC_SM_ALLOC_T;
+
+/* Result of a requested memory allocation (VC->HOST) */
+typedef struct {
+ /* Transaction identifier */
+ uint32_t trans_id;
+
+ /* Resource handle */
+ uint32_t res_handle;
+ /* Pointer to resource buffer */
+ void *res_mem;
+ /* Resource base size (bytes) */
+ uint32_t res_base_size;
+ /* Resource number */
+ uint32_t res_num;
+
+} VC_SM_ALLOC_RESULT_T;
+
+/* Request to free a previously allocated memory (HOST->VC) */
+typedef struct {
+ /* Resource handle (returned from alloc) */
+ uint32_t res_handle;
+ /* Resource buffer (returned from alloc) */
+ void *res_mem;
+
+} VC_SM_FREE_T;
+
+/* Request to lock a previously allocated memory (HOST->VC) */
+typedef struct {
+ /* Resource handle (returned from alloc) */
+ uint32_t res_handle;
+ /* Resource buffer (returned from alloc) */
+ void *res_mem;
+
+} VC_SM_LOCK_UNLOCK_T;
+
+/* Request to resize a previously allocated memory (HOST->VC) */
+typedef struct {
+ /* Resource handle (returned from alloc) */
+ uint32_t res_handle;
+ /* Resource buffer (returned from alloc) */
+ void *res_mem;
+ /* Resource *new* size requested (bytes) */
+ uint32_t res_new_size;
+
+} VC_SM_RESIZE_T;
+
+/* Result of a requested memory lock (VC->HOST) */
+typedef struct {
+ /* Transaction identifier */
+ uint32_t trans_id;
+
+ /* Resource handle */
+ uint32_t res_handle;
+ /* Pointer to resource buffer */
+ void *res_mem;
+ /* Pointer to former resource buffer if the memory
+ * was reallocated */
+ void *res_old_mem;
+
+} VC_SM_LOCK_RESULT_T;
+
+/* Generic result for a request (VC->HOST) */
+typedef struct {
+ /* Transaction identifier */
+ uint32_t trans_id;
+
+ int32_t success;
+
+} VC_SM_RESULT_T;
+
+/* Request to revert a previously applied action (HOST->VC) */
+typedef struct {
+ /* Action of interest */
+ VC_SM_MSG_TYPE res_action;
+ /* Transaction identifier for the action of interest */
+ uint32_t action_trans_id;
+
+} VC_SM_ACTION_CLEAN_T;
+
+/* Request to remove all data associated with a given allocator (HOST->VC) */
+typedef struct {
+ /* Allocator identifier */
+ uint32_t allocator;
+
+} VC_SM_FREE_ALL_T;
+
+/* Union of ALL messages */
+typedef union {
+ VC_SM_ALLOC_T alloc;
+ VC_SM_ALLOC_RESULT_T alloc_result;
+ VC_SM_FREE_T free;
+ VC_SM_ACTION_CLEAN_T action_clean;
+ VC_SM_RESIZE_T resize;
+ VC_SM_LOCK_RESULT_T lock_result;
+ VC_SM_RESULT_T result;
+ VC_SM_FREE_ALL_T free_all;
+
+} VC_SM_MSG_UNION_T;
+
+#endif /* __VC_SM_DEFS_H__INCLUDED__ */
diff --git a/arch/arm/mach-bcm2708/include/mach/vc_sm_knl.h b/arch/arm/mach-bcm2708/include/mach/vc_sm_knl.h
new file mode 100644
index 000000000000..965f9a209a02
--- /dev/null
+++ b/arch/arm/mach-bcm2708/include/mach/vc_sm_knl.h
@@ -0,0 +1,55 @@
+/*****************************************************************************
+* 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.
+*****************************************************************************/
+
+#ifndef __VC_SM_KNL_H__INCLUDED__
+#define __VC_SM_KNL_H__INCLUDED__
+
+#if !defined(__KERNEL__)
+#error "This interface is for kernel use only..."
+#endif
+
+/* Type of memory to be locked (ie mapped) */
+typedef enum {
+ VC_SM_LOCK_CACHED,
+ VC_SM_LOCK_NON_CACHED,
+
+} VC_SM_LOCK_CACHE_MODE_T;
+
+/* Allocate a shared memory handle and block.
+*/
+int vc_sm_alloc(VC_SM_ALLOC_T *alloc, int *handle);
+
+/* Free a previously allocated shared memory handle and block.
+*/
+int vc_sm_free(int handle);
+
+/* Lock a memory handle for use by kernel.
+*/
+int vc_sm_lock(int handle, VC_SM_LOCK_CACHE_MODE_T mode,
+ long unsigned int *data);
+
+/* Unlock a memory handle in use by kernel.
+*/
+int vc_sm_unlock(int handle, int flush, int no_vc_unlock);
+
+/* Get an internal resource handle mapped from the external one.
+*/
+int vc_sm_int_handle(int handle);
+
+/* Map a shared memory region for use by kernel.
+*/
+int vc_sm_map(int handle, unsigned int sm_addr, VC_SM_LOCK_CACHE_MODE_T mode,
+ long unsigned int *data);
+
+#endif /* __VC_SM_KNL_H__INCLUDED__ */
diff --git a/arch/arm/mach-bcm2708/include/mach/vc_vchi_sm.h b/arch/arm/mach-bcm2708/include/mach/vc_vchi_sm.h
new file mode 100644
index 000000000000..5e279f5a95fa
--- /dev/null
+++ b/arch/arm/mach-bcm2708/include/mach/vc_vchi_sm.h
@@ -0,0 +1,82 @@
+/*****************************************************************************
+* 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.
+*****************************************************************************/
+
+#ifndef __VC_VCHI_SM_H__INCLUDED__
+#define __VC_VCHI_SM_H__INCLUDED__
+
+#include "interface/vchi/vchi.h"
+
+#include "vc_sm_defs.h"
+
+/* Forward declare.
+*/
+typedef struct sm_instance *VC_VCHI_SM_HANDLE_T;
+
+/* Initialize the shared memory service, opens up vchi connection to talk to it.
+*/
+VC_VCHI_SM_HANDLE_T vc_vchi_sm_init(VCHI_INSTANCE_T vchi_instance,
+ VCHI_CONNECTION_T **vchi_connections,
+ uint32_t num_connections);
+
+/* Terminates the shared memory service.
+*/
+int vc_vchi_sm_stop(VC_VCHI_SM_HANDLE_T *handle);
+
+/* Ask the shared memory service to allocate some memory on videocre and
+** return the result of this allocation (which upon success will be a pointer
+** to some memory in videocore space).
+*/
+int vc_vchi_sm_alloc(VC_VCHI_SM_HANDLE_T handle,
+ VC_SM_ALLOC_T *alloc,
+ VC_SM_ALLOC_RESULT_T *alloc_result, uint32_t *trans_id);
+
+/* Ask the shared memory service to free up some memory that was previously
+** allocated by the vc_vchi_sm_alloc function call.
+*/
+int vc_vchi_sm_free(VC_VCHI_SM_HANDLE_T handle,
+ VC_SM_FREE_T *free, uint32_t *trans_id);
+
+/* Ask the shared memory service to lock up some memory that was previously
+** allocated by the vc_vchi_sm_alloc function call.
+*/
+int vc_vchi_sm_lock(VC_VCHI_SM_HANDLE_T handle,
+ VC_SM_LOCK_UNLOCK_T *lock_unlock,
+ VC_SM_LOCK_RESULT_T *lock_result, uint32_t *trans_id);
+
+/* Ask the shared memory service to unlock some memory that was previously
+** allocated by the vc_vchi_sm_alloc function call.
+*/
+int vc_vchi_sm_unlock(VC_VCHI_SM_HANDLE_T handle,
+ VC_SM_LOCK_UNLOCK_T *lock_unlock,
+ uint32_t *trans_id, uint8_t wait_reply);
+
+/* Ask the shared memory service to resize some memory that was previously
+** allocated by the vc_vchi_sm_alloc function call.
+*/
+int vc_vchi_sm_resize(VC_VCHI_SM_HANDLE_T handle,
+ VC_SM_RESIZE_T *resize, uint32_t *trans_id);
+
+/* Walk the allocated resources on the videocore side, the allocation will
+** show up in the log. This is purely for debug/information and takes no
+** specific actions.
+*/
+int vc_vchi_sm_walk_alloc(VC_VCHI_SM_HANDLE_T handle);
+
+/* Clean up following a previously interrupted action which left the system
+** in a bad state of some sort.
+*/
+int vc_vchi_sm_clean_up(VC_VCHI_SM_HANDLE_T handle,
+ VC_SM_ACTION_CLEAN_T *action_clean);
+
+#endif /* __VC_VCHI_SM_H__INCLUDED__ */
diff --git a/arch/arm/mach-bcm2708/include/mach/vmcs_sm_ioctl.h b/arch/arm/mach-bcm2708/include/mach/vmcs_sm_ioctl.h
new file mode 100644
index 000000000000..42d0eb09ee36
--- /dev/null
+++ b/arch/arm/mach-bcm2708/include/mach/vmcs_sm_ioctl.h
@@ -0,0 +1,233 @@
+/*****************************************************************************
+* 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_LAST /* Do no 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;
+};
+
+/* 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_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)
+
+/* ---- Variable Externs ------------------------------------------------- */
+
+/* ---- Function Prototypes ---------------------------------------------- */
+
+#endif /* __VMCS_SM_IOCTL_H__INCLUDED__ */