libdrm/nouveau: add prime handle->bo and bo->handle support.
This adds prime support to nouveau libdrm. Signed-off-by: Dave Airlie <airlied@redhat.com>main
parent
cc0a14575d
commit
13c06cde4e
|
@ -34,6 +34,7 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
#include <xf86drm.h>
|
#include <xf86drm.h>
|
||||||
#include <xf86atomic.h>
|
#include <xf86atomic.h>
|
||||||
|
@ -441,6 +442,40 @@ nouveau_bo_ref(struct nouveau_bo *bo, struct nouveau_bo **pref)
|
||||||
*pref = bo;
|
*pref = bo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
nouveau_bo_prime_handle_ref(struct nouveau_device *dev, int prime_fd,
|
||||||
|
struct nouveau_bo **bo)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
unsigned int handle;
|
||||||
|
|
||||||
|
ret = drmPrimeFDToHandle(dev->fd, prime_fd, &handle);
|
||||||
|
if (ret) {
|
||||||
|
nouveau_bo_ref(NULL, bo);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = nouveau_bo_wrap(dev, handle, bo);
|
||||||
|
if (ret) {
|
||||||
|
nouveau_bo_ref(NULL, bo);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
nouveau_bo_set_prime(struct nouveau_bo *bo, int *prime_fd)
|
||||||
|
{
|
||||||
|
struct nouveau_bo_priv *nvbo = nouveau_bo(bo);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = drmPrimeHandleToFD(bo->device->fd, nvbo->base.handle, DRM_CLOEXEC, prime_fd);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
nouveau_bo_wait(struct nouveau_bo *bo, uint32_t access,
|
nouveau_bo_wait(struct nouveau_bo *bo, uint32_t access,
|
||||||
struct nouveau_client *client)
|
struct nouveau_client *client)
|
||||||
|
|
|
@ -135,6 +135,9 @@ int nouveau_bo_map(struct nouveau_bo *, uint32_t access,
|
||||||
struct nouveau_client *);
|
struct nouveau_client *);
|
||||||
int nouveau_bo_wait(struct nouveau_bo *, uint32_t access,
|
int nouveau_bo_wait(struct nouveau_bo *, uint32_t access,
|
||||||
struct nouveau_client *);
|
struct nouveau_client *);
|
||||||
|
int nouveau_bo_prime_handle_ref(struct nouveau_device *dev, int prime_fd,
|
||||||
|
struct nouveau_bo **);
|
||||||
|
int nouveau_bo_set_prime(struct nouveau_bo *bo, int *prime_fd);
|
||||||
|
|
||||||
struct nouveau_bufref {
|
struct nouveau_bufref {
|
||||||
struct nouveau_list thead;
|
struct nouveau_list thead;
|
||||||
|
|
Loading…
Reference in New Issue