drm: Add drm mode lease ioctl wrappers [v3]
drmModeCreateLease drmModeListLessees drmModeGetLease drmModeRevokeLease Changes for v2: Remove lessee id from GetLease Remove lessor_id from ListLeases Add revoke Renumber to track kernel rebase on drm-next Signed-off-by: Keith Packard <keithp@keithp.com> Signed-off-by: Dave Airlie <airlied@redhat.com>main
parent
5889f6ba1a
commit
c417153538
|
@ -1485,3 +1485,92 @@ drmModeDestroyPropertyBlob(int fd, uint32_t id)
|
||||||
destroy.blob_id = id;
|
destroy.blob_id = id;
|
||||||
return DRM_IOCTL(fd, DRM_IOCTL_MODE_DESTROYPROPBLOB, &destroy);
|
return DRM_IOCTL(fd, DRM_IOCTL_MODE_DESTROYPROPBLOB, &destroy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
drmModeCreateLease(int fd, const uint32_t *objects, int num_objects, int flags, uint32_t *lessee_id)
|
||||||
|
{
|
||||||
|
struct drm_mode_create_lease create;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
memclear(create);
|
||||||
|
create.object_ids = (uintptr_t) objects;
|
||||||
|
create.object_count = num_objects;
|
||||||
|
create.flags = flags;
|
||||||
|
|
||||||
|
ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_CREATE_LEASE, &create);
|
||||||
|
if (ret == 0) {
|
||||||
|
*lessee_id = create.lessee_id;
|
||||||
|
return create.fd;
|
||||||
|
}
|
||||||
|
return -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
drmModeLesseeListPtr
|
||||||
|
drmModeListLessees(int fd)
|
||||||
|
{
|
||||||
|
struct drm_mode_list_lessees list;
|
||||||
|
uint32_t count;
|
||||||
|
drmModeLesseeListPtr ret;
|
||||||
|
|
||||||
|
memclear(list);
|
||||||
|
|
||||||
|
if (DRM_IOCTL(fd, DRM_IOCTL_MODE_LIST_LESSEES, &list))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
count = list.count_lessees;
|
||||||
|
ret = drmMalloc(sizeof (drmModeLesseeListRes) + count * sizeof (ret->lessees[0]));
|
||||||
|
if (!ret)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
list.lessees_ptr = VOID2U64(&ret->lessees[0]);
|
||||||
|
if (DRM_IOCTL(fd, DRM_IOCTL_MODE_LIST_LESSEES, &list)) {
|
||||||
|
drmFree(ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret->count = count;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
drmModeObjectListPtr
|
||||||
|
drmModeGetLease(int fd)
|
||||||
|
{
|
||||||
|
struct drm_mode_get_lease get;
|
||||||
|
uint32_t count;
|
||||||
|
drmModeObjectListPtr ret;
|
||||||
|
|
||||||
|
memclear(get);
|
||||||
|
|
||||||
|
if (DRM_IOCTL(fd, DRM_IOCTL_MODE_GET_LEASE, &get))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
count = get.count_objects;
|
||||||
|
ret = drmMalloc(sizeof (drmModeObjectListRes) + count * sizeof (ret->objects[0]));
|
||||||
|
if (!ret)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
get.objects_ptr = VOID2U64(&ret->objects[0]);
|
||||||
|
if (DRM_IOCTL(fd, DRM_IOCTL_MODE_GET_LEASE, &get)) {
|
||||||
|
drmFree(ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret->count = count;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
drmModeRevokeLease(int fd, uint32_t lessee_id)
|
||||||
|
{
|
||||||
|
struct drm_mode_revoke_lease revoke;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
memclear(revoke);
|
||||||
|
|
||||||
|
revoke.lessee_id = lessee_id;
|
||||||
|
|
||||||
|
ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_REVOKE_LEASE, &revoke);
|
||||||
|
if (ret == 0)
|
||||||
|
return 0;
|
||||||
|
return -errno;
|
||||||
|
}
|
||||||
|
|
|
@ -521,6 +521,28 @@ extern int drmModeCreatePropertyBlob(int fd, const void *data, size_t size,
|
||||||
uint32_t *id);
|
uint32_t *id);
|
||||||
extern int drmModeDestroyPropertyBlob(int fd, uint32_t id);
|
extern int drmModeDestroyPropertyBlob(int fd, uint32_t id);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DRM mode lease APIs. These create and manage new drm_masters with
|
||||||
|
* access to a subset of the available DRM resources
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern int drmModeCreateLease(int fd, const uint32_t *objects, int num_objects, int flags, uint32_t *lessee_id);
|
||||||
|
|
||||||
|
typedef struct drmModeLesseeList {
|
||||||
|
uint32_t count;
|
||||||
|
uint32_t lessees[0];
|
||||||
|
} drmModeLesseeListRes, *drmModeLesseeListPtr;
|
||||||
|
|
||||||
|
extern drmModeLesseeListPtr drmModeListLessees(int fd);
|
||||||
|
|
||||||
|
typedef struct drmModeObjectList {
|
||||||
|
uint32_t count;
|
||||||
|
uint32_t objects[0];
|
||||||
|
} drmModeObjectListRes, *drmModeObjectListPtr;
|
||||||
|
|
||||||
|
extern drmModeObjectListPtr drmModeGetLease(int fd);
|
||||||
|
|
||||||
|
extern int drmModeRevokeLease(int fd, uint32_t lessee_id);
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue