diff options
author | Thierry Reding <treding@nvidia.com> | 2018-04-23 11:00:56 +0200 |
---|---|---|
committer | Thierry Reding <treding@nvidia.com> | 2018-05-02 17:29:40 +0200 |
commit | 8d27adeb0bc404cccfa81797a3079f02d247d8e5 (patch) | |
tree | 57a8b0a265fde282e4a530c941237d8037c09215 | |
parent | 9b91da35fb75db9ebb076b24d8ad23c1c90b3371 (diff) |
tegra: Add flink helpers
Add helpers to export and import buffer objects via flink names.
Signed-off-by: Thierry Reding <treding@nvidia.com>
-rw-r--r-- | tegra/tegra.c | 49 | ||||
-rw-r--r-- | tegra/tegra.h | 4 |
2 files changed, 53 insertions, 0 deletions
diff --git a/tegra/tegra.c b/tegra/tegra.c index c325b77f..f29b6e81 100644 --- a/tegra/tegra.c +++ b/tegra/tegra.c @@ -244,3 +244,52 @@ int drm_tegra_bo_unmap(struct drm_tegra_bo *bo) return 0; } + +int drm_tegra_bo_get_name(struct drm_tegra_bo *bo, uint32_t *name) +{ + struct drm_tegra *drm = bo->drm; + struct drm_gem_flink args; + int err; + + memset(&args, 0, sizeof(args)); + args.handle = bo->handle; + + err = drmIoctl(drm->fd, DRM_IOCTL_GEM_FLINK, &args); + if (err < 0) + return err; + + if (name) + *name = args.name; + + return 0; +} + +int drm_tegra_bo_open(struct drm_tegra_bo **bop, struct drm_tegra *drm, + uint32_t name, uint32_t flags) +{ + struct drm_gem_open args; + struct drm_tegra_bo *bo; + int err; + + bo = drm_tegra_bo_alloc(drm, 0, flags, 0); + if (!bo) + return -ENOMEM; + + memset(&args, 0, sizeof(args)); + args.name = name; + + err = drmIoctl(drm->fd, DRM_IOCTL_GEM_OPEN, &args); + if (err < 0) + goto free; + + bo->handle = args.handle; + bo->size = args.size; + + *bop = bo; + + return 0; + +free: + free(bo); + return err; +} diff --git a/tegra/tegra.h b/tegra/tegra.h index ddcf229d..5389098b 100644 --- a/tegra/tegra.h +++ b/tegra/tegra.h @@ -65,6 +65,10 @@ int drm_tegra_bo_get_handle(struct drm_tegra_bo *bo, uint32_t *handle); int drm_tegra_bo_map(struct drm_tegra_bo *bo, void **ptr); int drm_tegra_bo_unmap(struct drm_tegra_bo *bo); +int drm_tegra_bo_get_name(struct drm_tegra_bo *bo, uint32_t *name); +int drm_tegra_bo_open(struct drm_tegra_bo **bop, struct drm_tegra *drm, + uint32_t name, uint32_t flags); + struct drm_tegra_channel; struct drm_tegra_job; |