From dcad449e26e81b71e4a498dc5bfaf014a5566acd Mon Sep 17 00:00:00 2001 From: Russell King Date: Thu, 5 Dec 2013 18:46:37 +0000 Subject: Add dma_buf export API by physical address Add an API to export BMM buffers by passing in a physical address. This allows a BMM buffer without a virtual mapping to be passed to other device drivers. --- bmm_lib.c | 17 +++++++++++++++++ bmm_lib.h | 1 + bmm_lib_priv.h | 1 + debian/changelog | 7 +++++++ 4 files changed, 26 insertions(+) diff --git a/bmm_lib.c b/bmm_lib.c index 72f5301..d6a3271 100644 --- a/bmm_lib.c +++ b/bmm_lib.c @@ -565,6 +565,23 @@ int bmm_get_dmabuf_fd(void *vaddr) return ret < 0 ? -1 : io.output; } +int bmm_get_phys_dmabuf_fd(unsigned long paddr) +{ + int ret; + ioctl_arg_t io; + + if (bmm_init() < 0 || API_FEAT(bmm_api) < API_FEAT_GET_DMABUF_FD) + return -1; + + io.input = paddr; + io.output = 0; + io.arg = 0; + + ret = ioctl(bmm_fd, BMM_GET_PHYS_DMABUF_FD, &io); + + return ret < 0 ? -1 : io.output; +} + unsigned long bmm_get_mem_size(void *vaddr) { struct bmm_virt_buffer *vbuf; diff --git a/bmm_lib.h b/bmm_lib.h index b6fa853..09348ef 100644 --- a/bmm_lib.h +++ b/bmm_lib.h @@ -50,6 +50,7 @@ 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_phys_dmabuf_fd(unsigned long paddr); 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 f10a77b..42d4e64 100644 --- a/bmm_lib_priv.h +++ b/bmm_lib_priv.h @@ -44,6 +44,7 @@ typedef struct { #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_FREE_PHYS _IOWR(BMEM_IOCTL_MAGIC, 20, ioctl_arg_t) +#define BMM_GET_PHYS_DMABUF_FD _IOWR(BMEM_IOCTL_MAGIC, 21, ioctl_arg_t) #define BMM_DEVICE_FILE "/dev/bmm" diff --git a/debian/changelog b/debian/changelog index 54e44bd..ad0235c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +marvell-libbmm (1.1.3) precise; urgency=low + + * Fix dma_import() handling of offset buffers + * Provide physical address-based dma_buf export API + + -- Russell King Thu, 5 Dec 2013 18:50:52 +0000 + marvell-libbmm (1.1.2) precise; urgency=low * Open the BMM device O_CLOEXEC -- cgit