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

2015-06-04 Thread Emil Velikov
Hi Daniel,
On 22/05/15 12:36, Daniel Stone wrote:
> Signed-off-by: Daniel Stone 

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 >= 0x)
> + return -ERANGE;
> +
> + create.length = length;
> + create.data = (uintptr_t) data;
> + create.blob_id = 0;
> + *id = 0;
> +
> + ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_CREATEPROPBLOB, );
> + 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



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

2015-05-22 Thread Daniel Stone
Signed-off-by: Daniel Stone 
---
 include/drm/drm.h  |  2 ++
 include/drm/drm_mode.h | 21 +
 xf86drmMode.c  | 31 +++
 xf86drmMode.h  |  5 +
 4 files changed, 59 insertions(+)

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 >= 0x)
+   return -ERANGE;
+
+   create.length = length;
+   create.data = (uintptr_t) data;
+   create.blob_id = 0;
+   *id = 0;
+
+   ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_CREATEPROPBLOB, );
+   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, );
+}
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
-- 
2.4.1