diff mbox

[libdrm,2/2] Add blob property create/destroy ioctl wrappers

Message ID 1432298216-22460-3-git-send-email-daniels@collabora.com (mailing list archive)
State New, archived
Headers show

Commit Message

Daniel Stone May 22, 2015, 12:36 p.m. UTC
Signed-off-by: Daniel Stone <daniels@collabora.com>
---
 include/drm/drm.h      |  2 ++
 include/drm/drm_mode.h | 21 +++++++++++++++++++++
 xf86drmMode.c          | 31 +++++++++++++++++++++++++++++++
 xf86drmMode.h          |  5 +++++
 4 files changed, 59 insertions(+)

Comments

Emil Velikov June 4, 2015, 3:14 p.m. UTC | #1
Hi Daniel,
On 22/05/15 12:36, Daniel Stone wrote:
> Signed-off-by: Daniel Stone <daniels@collabora.com>

There is a trivial suggestion inline, although I must say thank you !
Thank you for keeping the impl. details of struct
_drmModeAtomicReqItem/_drmModeAtomicReq out of the public headers.

> --- a/xf86drmMode.c
> +++ b/xf86drmMode.c
> @@ -1333,3 +1333,34 @@ out:
>  
>  	return ret;
>  }
> +
> +int
> +drmModeCreatePropertyBlob(int fd, const void *data, size_t length, uint32_t *id)
> +{
> +	struct drm_mode_create_blob create;
Please explicitly zero the struct - most places use memclear()

> +	int ret;
> +
> +	if (length >= 0xffffffff)
> +		return -ERANGE;
> +
> +	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;
Ditto.

Thanks
Emil
diff mbox

Patch

diff --git a/include/drm/drm.h b/include/drm/drm.h
index 0b1d2ef..15d4454 100644
--- a/include/drm/drm.h
+++ b/include/drm/drm.h
@@ -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_CURSOR2		DRM_IOWR(0xBB, struct drm_mode_cursor2)
 #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
diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h
index 66f856f..69c1ac3 100644
--- a/include/drm/drm_mode.h
+++ b/include/drm/drm_mode.h
@@ -523,4 +523,25 @@  struct drm_mode_atomic {
 	__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
diff --git a/xf86drmMode.c b/xf86drmMode.c
index 30b94b8..4ef2d57 100644
--- a/xf86drmMode.c
+++ b/xf86drmMode.c
@@ -1333,3 +1333,34 @@  out:
 
 	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;
+
+	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;
+
+	destroy.blob_id = id;
+	return DRM_IOCTL(fd, DRM_IOCTL_MODE_DESTROYPROPBLOB, &destroy);
+}
diff --git a/xf86drmMode.h b/xf86drmMode.h
index 3ba2333..a6f1182 100644
--- a/xf86drmMode.h
+++ b/xf86drmMode.h
@@ -498,6 +498,11 @@  extern int drmModeAtomicCommit(int fd,
 			       void *user_data);
 extern void drmModeAtomicFree(drmModeAtomicReqPtr req);
 
+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)
 }
 #endif