diff options
author | Dave Airlie <airlied@redhat.com> | 2012-06-12 17:31:12 +0100 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2012-08-14 11:04:56 +1000 |
commit | 3163cfe4db925429760407e77140e2d595338bc2 (patch) | |
tree | f05618435c3f002320fe97a0b0ad5f8839ed5199 | |
parent | a9412fa9de219e38df361852a12df37688c891db (diff) |
radeon: add prime import/export support
this adds radeon version of the prime import/export support.
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | radeon/Makefile.am | 2 | ||||
-rw-r--r-- | radeon/radeon_bo_gem.c | 48 | ||||
-rw-r--r-- | radeon/radeon_bo_gem.h | 4 |
3 files changed, 52 insertions, 2 deletions
diff --git a/radeon/Makefile.am b/radeon/Makefile.am index 37be8cc5..a8cd1003 100644 --- a/radeon/Makefile.am +++ b/radeon/Makefile.am @@ -33,3 +33,3 @@ libdrm_radeon_la_LTLIBRARIES = libdrm_radeon.la libdrm_radeon_ladir = $(libdir) -libdrm_radeon_la_LDFLAGS = -version-number 1:0:0 -no-undefined +libdrm_radeon_la_LDFLAGS = -version-number 1:0:1 -no-undefined libdrm_radeon_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ diff --git a/radeon/radeon_bo_gem.c b/radeon/radeon_bo_gem.c index 719fba7c..265f1777 100644 --- a/radeon/radeon_bo_gem.c +++ b/radeon/radeon_bo_gem.c @@ -47,3 +47,3 @@ #include "radeon_bo_gem.h" - +#include <fcntl.h> struct radeon_bo_gem { @@ -351 +351,47 @@ int radeon_gem_set_domain(struct radeon_bo *bo, uint32_t read_domains, uint32_t } + +int radeon_gem_prime_share_bo(struct radeon_bo *bo, int *handle) +{ + struct radeon_bo_gem *bo_gem = (struct radeon_bo_gem*)bo; + int ret; + + ret = drmPrimeHandleToFD(bo_gem->base.bom->fd, bo->handle, DRM_CLOEXEC, handle); + return ret; +} + +struct radeon_bo *radeon_gem_bo_open_prime(struct radeon_bo_manager *bom, + int fd_handle, + uint32_t size) +{ + struct radeon_bo_gem *bo; + int r; + uint32_t handle; + + bo = (struct radeon_bo_gem*)calloc(1, sizeof(struct radeon_bo_gem)); + if (bo == NULL) { + return NULL; + } + + bo->base.bom = bom; + bo->base.handle = 0; + bo->base.size = size; + bo->base.alignment = 0; + bo->base.domains = RADEON_GEM_DOMAIN_GTT; + bo->base.flags = 0; + bo->base.ptr = NULL; + atomic_set(&bo->reloc_in_cs, 0); + bo->map_count = 0; + + r = drmPrimeFDToHandle(bom->fd, fd_handle, &handle); + if (r != 0) { + free(bo); + return NULL; + } + + bo->base.handle = handle; + bo->name = handle; + + radeon_bo_ref((struct radeon_bo *)bo); + return (struct radeon_bo *)bo; + +} diff --git a/radeon/radeon_bo_gem.h b/radeon/radeon_bo_gem.h index 0af8610b..08965f3a 100644 --- a/radeon/radeon_bo_gem.h +++ b/radeon/radeon_bo_gem.h @@ -43,2 +43,6 @@ int radeon_gem_set_domain(struct radeon_bo *bo, uint32_t read_domains, uint32_t int radeon_gem_get_kernel_name(struct radeon_bo *bo, uint32_t *name); +int radeon_gem_prime_share_bo(struct radeon_bo *bo, int *handle); +struct radeon_bo *radeon_gem_bo_open_prime(struct radeon_bo_manager *bom, + int fd_handle, + uint32_t size); #endif |