summaryrefslogtreecommitdiff
path: root/omap/omap_drm.c
diff options
context:
space:
mode:
authorRob Clark <rob@ti.com>2012-04-11 09:51:36 -0500
committerRob Clark <rob@ti.com>2012-04-11 09:51:36 -0500
commitf00efc7ab442f106d3ac7699e80f1f7aee8451f4 (patch)
treee75871cc6e430e658dc4e7b6b2ee09be42833b98 /omap/omap_drm.c
parent9b893e4a429d58bf0954ffc09b18890fcfe92941 (diff)
omap: add dmabuf support
Signed-off-by: Rob Clark <rob@ti.com>
Diffstat (limited to 'omap/omap_drm.c')
-rw-r--r--omap/omap_drm.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/omap/omap_drm.c b/omap/omap_drm.c
index 96e18717..336da115 100644
--- a/omap/omap_drm.c
+++ b/omap/omap_drm.c
@@ -34,6 +34,7 @@
#include <linux/stddef.h>
#include <errno.h>
#include <sys/mman.h>
+#include <fcntl.h>
#include <xf86drm.h>
@@ -56,6 +57,7 @@ struct omap_bo {
uint32_t handle;
uint32_t name; /* flink global handle (DRI2 name) */
uint64_t offset; /* offset to mmap() */
+ int fd; /* dmabuf handle */
};
struct omap_device * omap_device_new(int fd)
@@ -264,6 +266,25 @@ uint32_t omap_bo_handle(struct omap_bo *bo)
return bo->handle;
}
+int omap_bo_dmabuf(struct omap_bo *bo)
+{
+ if (!bo->fd) {
+ struct drm_prime_handle req = {
+ .handle = bo->handle,
+ .flags = DRM_CLOEXEC,
+ };
+ int ret;
+
+ ret = drmIoctl(bo->dev->fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &req);
+ if (ret) {
+ return ret;
+ }
+
+ bo->fd = req.fd;
+ }
+ return bo->fd;
+}
+
uint32_t omap_bo_size(struct omap_bo *bo)
{
if (!bo->size) {