omap: add API to import bo's from dmabuf fd's

Signed-off-by: Rob Clark <rob@ti.com>
main
Rob Clark 2012-06-11 17:17:17 -05:00
parent 8116a32df6
commit 42f8a68e19
2 changed files with 33 additions and 0 deletions

View File

@ -218,6 +218,38 @@ fail:
return NULL; return NULL;
} }
/* import a buffer from dmabuf fd, does not take ownership of the
* fd so caller should close() the fd when it is otherwise done
* with it (even if it is still using the 'struct omap_bo *')
*/
struct omap_bo * omap_bo_from_dmabuf(struct omap_device *dev, int fd)
{
struct omap_bo *bo;
struct drm_prime_handle req = {
.fd = fd,
};
int ret;
bo = calloc(sizeof(*bo), 1);
if (!bo) {
goto fail;
}
ret = drmIoctl(dev->fd, DRM_IOCTL_PRIME_FD_TO_HANDLE, &req);
if (ret) {
goto fail;
}
bo->dev = dev;
bo->handle = req.handle;
return bo;
fail:
free(bo);
return NULL;
}
/* destroy a buffer object */ /* destroy a buffer object */
void omap_bo_del(struct omap_bo *bo) void omap_bo_del(struct omap_bo *bo)
{ {

View File

@ -50,6 +50,7 @@ struct omap_bo * omap_bo_new(struct omap_device *dev,
struct omap_bo * omap_bo_new_tiled(struct omap_device *dev, struct omap_bo * omap_bo_new_tiled(struct omap_device *dev,
uint32_t width, uint32_t height, uint32_t flags); uint32_t width, uint32_t height, uint32_t flags);
struct omap_bo * omap_bo_from_name(struct omap_device *dev, uint32_t name); struct omap_bo * omap_bo_from_name(struct omap_device *dev, uint32_t name);
struct omap_bo * omap_bo_from_dmabuf(struct omap_device *dev, int fd);
void omap_bo_del(struct omap_bo *bo); void omap_bo_del(struct omap_bo *bo);
int omap_bo_get_name(struct omap_bo *bo, uint32_t *name); int omap_bo_get_name(struct omap_bo *bo, uint32_t *name);
uint32_t omap_bo_handle(struct omap_bo *bo); uint32_t omap_bo_handle(struct omap_bo *bo);