diff options
Diffstat (limited to 'omap/omap_drm.c')
-rw-r--r-- | omap/omap_drm.c | 21 |
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 @@ | |||
34 | #include <linux/stddef.h> | 34 | #include <linux/stddef.h> |
35 | #include <errno.h> | 35 | #include <errno.h> |
36 | #include <sys/mman.h> | 36 | #include <sys/mman.h> |
37 | #include <fcntl.h> | ||
37 | 38 | ||
38 | #include <xf86drm.h> | 39 | #include <xf86drm.h> |
39 | 40 | ||
@@ -56,6 +57,7 @@ struct omap_bo { | |||
56 | uint32_t handle; | 57 | uint32_t handle; |
57 | uint32_t name; /* flink global handle (DRI2 name) */ | 58 | uint32_t name; /* flink global handle (DRI2 name) */ |
58 | uint64_t offset; /* offset to mmap() */ | 59 | uint64_t offset; /* offset to mmap() */ |
60 | int fd; /* dmabuf handle */ | ||
59 | }; | 61 | }; |
60 | 62 | ||
61 | struct omap_device * omap_device_new(int fd) | 63 | struct omap_device * omap_device_new(int fd) |
@@ -264,6 +266,25 @@ uint32_t omap_bo_handle(struct omap_bo *bo) | |||
264 | return bo->handle; | 266 | return bo->handle; |
265 | } | 267 | } |
266 | 268 | ||
269 | int omap_bo_dmabuf(struct omap_bo *bo) | ||
270 | { | ||
271 | if (!bo->fd) { | ||
272 | struct drm_prime_handle req = { | ||
273 | .handle = bo->handle, | ||
274 | .flags = DRM_CLOEXEC, | ||
275 | }; | ||
276 | int ret; | ||
277 | |||
278 | ret = drmIoctl(bo->dev->fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &req); | ||
279 | if (ret) { | ||
280 | return ret; | ||
281 | } | ||
282 | |||
283 | bo->fd = req.fd; | ||
284 | } | ||
285 | return bo->fd; | ||
286 | } | ||
287 | |||
267 | uint32_t omap_bo_size(struct omap_bo *bo) | 288 | uint32_t omap_bo_size(struct omap_bo *bo) |
268 | { | 289 | { |
269 | if (!bo->size) { | 290 | if (!bo->size) { |