From f1383479463443d22cf9f730adf40679e59ea2fc Mon Sep 17 00:00:00 2001 From: Russell King Date: Thu, 20 Jun 2013 13:32:17 +0100 Subject: 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. --- bmm_lib.c | 18 ++++++++++++++++++ bmm_lib.h | 1 + bmm_lib_priv.h | 1 + 3 files changed, 20 insertions(+) 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" -- cgit