summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell King <rmk+cubox@arm.linux.org.uk>2013-12-05 18:46:37 +0000
committerRussell King <rmk@arm.linux.org.uk>2013-12-08 21:35:46 +0000
commitdcad449e26e81b71e4a498dc5bfaf014a5566acd (patch)
tree3267d9da183ea6f6ab94d7de3422b3c98b20127a
parent6def9c19ccdfb0cb2c22a5f1dcfb3bb1aba60c99 (diff)
Add dma_buf export API by physical addressv1.1.3
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.
-rw-r--r--bmm_lib.c17
-rw-r--r--bmm_lib.h1
-rw-r--r--bmm_lib_priv.h1
-rw-r--r--debian/changelog7
4 files changed, 26 insertions, 0 deletions
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 <rmk@arm.linux.org.uk> Thu, 5 Dec 2013 18:50:52 +0000
+
marvell-libbmm (1.1.2) precise; urgency=low
* Open the BMM device O_CLOEXEC