aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Figa <tfiga@google.com>2015-04-28 09:53:35 +0900
committerDaniel Thompson <daniel.thompson@linaro.org>2015-10-23 12:23:46 +0100
commit0d8a0406998e346d9a7e391d7819c712c03e394d (patch)
tree6c6153a8885a99ca780cd10311c979e64aeddf68
parentbcd4c2bd07bf5371f0983dd72c51fe89249a06f2 (diff)
rockchip: Add API to create BO object from existing handle
Certain use cases involve importing BO from Prime FD and obtaining a handle, which then needs to be imported into libdrm. Change-Id: Ibe28f719d1287e2cc5fb62523239635f8baac901 Signed-off-by: Tomasz Figa <tfiga@google.com>
-rw-r--r--rockchip/rockchip_drm.c25
-rw-r--r--rockchip/rockchip_drmif.h2
2 files changed, 27 insertions, 0 deletions
diff --git a/rockchip/rockchip_drm.c b/rockchip/rockchip_drm.c
index d56a68b4..44a78be8 100644
--- a/rockchip/rockchip_drm.c
+++ b/rockchip/rockchip_drm.c
@@ -129,6 +129,31 @@ fail:
return NULL;
}
+struct rockchip_bo *rockchip_bo_from_handle(struct rockchip_device *dev,
+ uint32_t handle, uint32_t flags, uint32_t size)
+{
+ struct rockchip_bo *bo;
+
+ if (size == 0) {
+ fprintf(stderr, "invalid size.\n");
+ return NULL;
+ }
+
+ bo = calloc(1, sizeof(*bo));
+ if (!bo) {
+ fprintf(stderr, "failed to create bo[%s].\n",
+ strerror(errno));
+ return NULL;
+ }
+
+ bo->dev = dev;
+ bo->handle = handle;
+ bo->size = size;
+ bo->flags = flags;
+
+ return bo;
+}
+
/*
* Destroy a rockchip buffer object.
*
diff --git a/rockchip/rockchip_drmif.h b/rockchip/rockchip_drmif.h
index bcc55539..5c549a05 100644
--- a/rockchip/rockchip_drmif.h
+++ b/rockchip/rockchip_drmif.h
@@ -73,5 +73,7 @@ struct rockchip_bo *rockchip_bo_from_name(struct rockchip_device *dev,
uint32_t name);
int rockchip_bo_get_name(struct rockchip_bo *bo, uint32_t *name);
uint32_t rockchip_bo_handle(struct rockchip_bo *bo);
+struct rockchip_bo *rockchip_bo_from_handle(struct rockchip_device *dev,
+ uint32_t handle, uint32_t flags, uint32_t size);
void *rockchip_bo_map(struct rockchip_bo *bo);
#endif /* ROCKCHIP_DRMIF_H_ */