Add blob property create/destroy ioctl wrappers

v2: Use memclear to zero out structure.

Signed-off-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Rob Clark <robclark@freedesktop.org>
main
Daniel Stone 2015-06-22 17:26:03 +01:00 committed by Emil Velikov
parent ed44e0b958
commit 32471b265c
4 changed files with 62 additions and 0 deletions

View File

@ -766,6 +766,8 @@ struct drm_prime_handle {
#define DRM_IOCTL_MODE_OBJ_SETPROPERTY DRM_IOWR(0xBA, struct drm_mode_obj_set_property) #define DRM_IOCTL_MODE_OBJ_SETPROPERTY DRM_IOWR(0xBA, struct drm_mode_obj_set_property)
#define DRM_IOCTL_MODE_CURSOR2 DRM_IOWR(0xBB, struct drm_mode_cursor2) #define DRM_IOCTL_MODE_CURSOR2 DRM_IOWR(0xBB, struct drm_mode_cursor2)
#define DRM_IOCTL_MODE_ATOMIC DRM_IOWR(0xBC, struct drm_mode_atomic) #define DRM_IOCTL_MODE_ATOMIC DRM_IOWR(0xBC, struct drm_mode_atomic)
#define DRM_IOCTL_MODE_CREATEPROPBLOB DRM_IOWR(0xBD, struct drm_mode_create_blob)
#define DRM_IOCTL_MODE_DESTROYPROPBLOB DRM_IOWR(0xBE, struct drm_mode_destroy_blob)
/** /**
* Device specific ioctls should only be in their respective headers * Device specific ioctls should only be in their respective headers

View File

@ -523,4 +523,25 @@ struct drm_mode_atomic {
__u64 user_data; __u64 user_data;
}; };
/**
* Create a new 'blob' data property, copying length bytes from data pointer,
* and returning new blob ID.
*/
struct drm_mode_create_blob {
/** Pointer to data to copy. */
__u64 data;
/** Length of data to copy. */
__u32 length;
/** Return: new property ID. */
__u32 blob_id;
};
/**
* Destroy a user-created blob property.
*/
struct drm_mode_destroy_blob {
__u32 blob_id;
};
#endif #endif

View File

@ -1387,3 +1387,37 @@ out:
return ret; return ret;
} }
int
drmModeCreatePropertyBlob(int fd, const void *data, size_t length, uint32_t *id)
{
struct drm_mode_create_blob create;
int ret;
if (length >= 0xffffffff)
return -ERANGE;
memclear(create);
create.length = length;
create.data = (uintptr_t) data;
create.blob_id = 0;
*id = 0;
ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_CREATEPROPBLOB, &create);
if (ret != 0)
return ret;
*id = create.blob_id;
return 0;
}
int
drmModeDestroyPropertyBlob(int fd, uint32_t id)
{
struct drm_mode_destroy_blob destroy;
memclear(destroy);
destroy.blob_id = id;
return DRM_IOCTL(fd, DRM_IOCTL_MODE_DESTROYPROPBLOB, &destroy);
}

View File

@ -503,6 +503,11 @@ extern int drmModeAtomicCommit(int fd,
uint32_t flags, uint32_t flags,
void *user_data); void *user_data);
extern int drmModeCreatePropertyBlob(int fd, const void *data, size_t size,
uint32_t *id);
extern int drmModeDestroyPropertyBlob(int fd, uint32_t id);
#if defined(__cplusplus) || defined(c_plusplus) #if defined(__cplusplus) || defined(c_plusplus)
} }
#endif #endif