omap: add dmabuf support

Signed-off-by: Rob Clark <rob@ti.com>
main
Rob Clark 2012-04-11 09:51:36 -05:00
parent 9b893e4a42
commit f00efc7ab4
2 changed files with 22 additions and 0 deletions

View File

@ -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) {

View File

@ -53,6 +53,7 @@ struct omap_bo * omap_bo_from_name(struct omap_device *dev, uint32_t name);
void omap_bo_del(struct omap_bo *bo);
int omap_bo_get_name(struct omap_bo *bo, uint32_t *name);
uint32_t omap_bo_handle(struct omap_bo *bo);
int omap_bo_dmabuf(struct omap_bo *bo);
uint32_t omap_bo_size(struct omap_bo *bo);
void * omap_bo_map(struct omap_bo *bo);
int omap_bo_cpu_prep(struct omap_bo *bo, enum omap_gem_op op);