[Why]
The kernel has support for creating a blob with flags, particularly
write only flag.
The user space should use libdrm library to make use of the blob flags.

[How]
Create drmModeCreatePropertyBlobWithFlags which has the same
implementation as the existing drmModeCreatePropertyBlob but with a flag
argument.

Signed-off-by: Mark Yacoub <markyac...@chromium.org>
---
 include/drm/drm_mode.h | 6 ++++++
 xf86drmMode.c          | 7 +++++++
 xf86drmMode.h          | 3 +++
 3 files changed, 16 insertions(+)

diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h
index 9b6722d4..b0df381f 100644
--- a/include/drm/drm_mode.h
+++ b/include/drm/drm_mode.h
@@ -991,6 +991,9 @@ struct drm_format_modifier {
        __u64 modifier;
 };
 
+#define DRM_MODE_CREATE_BLOB_WRITE_ONLY                                        
\
+       (1 << 0) /* data of the blob can't be read by user space */
+
 /**
  * struct drm_mode_create_blob - Create New blob property
  *
@@ -1004,6 +1007,9 @@ struct drm_mode_create_blob {
        __u32 length;
        /** @blob_id: Return: new property ID. */
        __u32 blob_id;
+       /** Flags for special handling. */
+       __u32 flags;
+       __u32 pad;
 };
 
 /**
diff --git a/xf86drmMode.c b/xf86drmMode.c
index 87e96603..072b395c 100644
--- a/xf86drmMode.c
+++ b/xf86drmMode.c
@@ -1592,6 +1592,12 @@ drm_public int
 drmModeCreatePropertyBlob(int fd, const void *data, size_t length,
                                      uint32_t *id)
 {
+       return drmModeCreatePropertyBlobWithFlags(fd, data, length, id, 0);
+}
+
+extern int drmModeCreatePropertyBlobWithFlags(int fd, const void *data,
+                                              size_t length, uint32_t *id,
+                                              uint32_t flags) {
        struct drm_mode_create_blob create;
        int ret;
 
@@ -1603,6 +1609,7 @@ drmModeCreatePropertyBlob(int fd, const void *data, 
size_t length,
        create.length = length;
        create.data = (uintptr_t) data;
        create.blob_id = 0;
+       create.flags = flags;
        *id = 0;
 
        ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_CREATEPROPBLOB, &create);
diff --git a/xf86drmMode.h b/xf86drmMode.h
index 19bf91dd..f22b8174 100644
--- a/xf86drmMode.h
+++ b/xf86drmMode.h
@@ -450,6 +450,9 @@ extern int drmModeAtomicCommit(int fd,
 
 extern int drmModeCreatePropertyBlob(int fd, const void *data, size_t size,
                                     uint32_t *id);
+extern int drmModeCreatePropertyBlobWithFlags(int fd, const void *data,
+                                              size_t size, uint32_t *id,
+                                              uint32_t flags);
 extern int drmModeDestroyPropertyBlob(int fd, uint32_t id);
 
 /*
-- 
2.36.0.512.ge40c2bad7a-goog

Reply via email to