summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell King <rmk@arm.linux.org.uk>2013-06-20 13:32:17 +0100
committerRussell King <rmk@arm.linux.org.uk>2013-06-22 23:27:34 +0100
commitf1383479463443d22cf9f730adf40679e59ea2fc (patch)
treefdb6f5596593a42990553cacb46a239583249817
parent399b0f5486bf1199b74a6eb043b3aed60723d1fe (diff)
Add dma_buf export API
Add an API to allow bmm buffers to be exported as dma_buf objects, so they can be imported into DRM without needing to resort to passing physical addresses around.
-rw-r--r--bmm_lib.c18
-rw-r--r--bmm_lib.h1
-rw-r--r--bmm_lib_priv.h1
3 files changed, 20 insertions, 0 deletions
diff --git a/bmm_lib.c b/bmm_lib.c
index f9d8e69..1b3a156 100644
--- a/bmm_lib.c
+++ b/bmm_lib.c
@@ -34,6 +34,7 @@
#define API_COMP_MAX 0x0000
#define API_FEAT(x) ((x) >> 16)
#define API_COMP(x) ((x) & 0xffff)
+#define API_FEAT_GET_DMABUF_FD 0x0001
static unsigned bmm_api;
static int bmm_fd = -1;
@@ -207,6 +208,23 @@ unsigned long bmm_get_paddr(void *vaddr)
return io.output;
}
+int bmm_get_dmabuf_fd(void *vaddr)
+{
+ int ret;
+ ioctl_arg_t io;
+
+ if (bmm_init() < 0 || API_FEAT(bmm_api) < API_FEAT_GET_DMABUF_FD)
+ return -1;
+
+ io.input = (unsigned long)vaddr;
+ io.output = 0;
+ io.arg = 0;
+
+ ret = ioctl(bmm_fd, BMM_GET_DMABUF_FD, &io);
+
+ return ret < 0 ? -1 : io.output;
+}
+
unsigned long bmm_get_mem_size(void *vaddr)
{
int ret;
diff --git a/bmm_lib.h b/bmm_lib.h
index 14af196..1c4bbec 100644
--- a/bmm_lib.h
+++ b/bmm_lib.h
@@ -47,6 +47,7 @@ void *bmm_attach(unsigned long paddr, unsigned long len);
void bmm_detach(void *vaddr, unsigned long len);
void *bmm_get_vaddr(unsigned long paddr);
unsigned long bmm_get_paddr(void *vaddr);
+int bmm_get_dmabuf_fd(void *vaddr);
int bmm_get_mem_attr(void *vaddr);
int bmm_set_mem_attr(void *vaddr, int attr); /* Not supported yet */
unsigned long bmm_get_mem_size(void *vaddr);
diff --git a/bmm_lib_priv.h b/bmm_lib_priv.h
index 41cb680..a93db78 100644
--- a/bmm_lib_priv.h
+++ b/bmm_lib_priv.h
@@ -42,6 +42,7 @@ typedef struct {
#define BMM_SYNC_USER _IOWR(BMEM_IOCTL_MAGIC, 16, ioctl_arg_t)
#define BMM_MALLOC_ALIGNED _IOWR(BMEM_IOCTL_MAGIC, 17, ioctl_arg_t)
#define BMM_API_VERSION _IOWR(BMEM_IOCTL_MAGIC, 18, ioctl_arg_t)
+#define BMM_GET_DMABUF_FD _IOWR(BMEM_IOCTL_MAGIC, 19, ioctl_arg_t)
#define BMM_DEVICE_FILE "/dev/bmm"