#include <linux/rockchip_ion.h>
#include <linux/uaccess.h>
#include "../ion_priv.h"
+#include <linux/dma-buf.h>
#ifdef CONFIG_OF
#include <linux/of.h>
return -EFAULT;
break;
}
+ case ION_IOC_GET_SHARE:
+ {
+ struct ion_share_obj_data data;
+ struct dma_buf *dmabuf = NULL;
+
+ if (copy_from_user(&data, (void __user *)arg,
+ sizeof(struct ion_share_obj_data)))
+ return -EFAULT;
+
+ dmabuf = dma_buf_get(data.fd);
+ if (IS_ERR(dmabuf))
+ return PTR_ERR(dmabuf);
+
+ data.obj = (void*)dmabuf;
+ dma_buf_put(dmabuf);
+
+ if (copy_to_user((void __user *)arg, &data, sizeof(struct ion_share_obj_data)))
+ return -EFAULT;
+
+ break;
+ }
+ case ION_IOC_SET_SHARE:
+ {
+ struct ion_share_obj_data data;
+ int fd = 0;
+
+ if (copy_from_user(&data, (void __user *)arg,
+ sizeof(struct ion_share_obj_data)))
+ return -EFAULT;
+
+ fd = dma_buf_fd((struct dma_buf*)data.obj, O_CLOEXEC);
+ if (fd < 0)
+ return fd;
+
+ data.fd = fd;
+
+ if (copy_to_user((void __user *)arg, &data, sizeof(struct ion_share_obj_data)))
+ return -EFAULT;
+
+ break;
+ }
default:
return -ENOTTY;
}
unsigned long size;
};
+struct ion_share_obj_data {
+ int fd;
+ void *obj;
+};
+
#define ION_IOC_ROCKCHIP_MAGIC 'R'
/**
#define ION_IOC_GET_PHYS _IOWR(ION_IOC_ROCKCHIP_MAGIC, 3, \
struct ion_phys_data)
+/**
+ * Get share object of the fd specified.
+ */
+#define ION_IOC_GET_SHARE _IOWR(ION_IOC_ROCKCHIP_MAGIC, 4, \
+ struct ion_share_obj_data)
+
+/**
+ * Set share object and associate new fd.
+ */
+#define ION_IOC_SET_SHARE _IOWR(ION_IOC_ROCKCHIP_MAGIC, 5, \
+ struct ion_share_obj_data)
+
#endif