qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/1] linux-user: Add drm ioctls for userland graphics drivers
@ 2023-09-27 17:52 Xiongchuan Tan
  2023-09-27 17:52 ` [PATCH 1/1] linux-user: Add drm ioctls for " Xiongchuan Tan
  0 siblings, 1 reply; 2+ messages in thread
From: Xiongchuan Tan @ 2023-09-27 17:52 UTC (permalink / raw)
  To: Laurent Vivier; +Cc: qemu-devel, Xiongchuan Tan

This patch adds more Direct Rendering Manager ioctls to support
userland OpenGL and Vulkan drivers, in addition to existing
DRM_IOCTL_VERSION.

More device-specific ioctls are needed though, but they share the same
range from 0x40 to 0x9f. Adding these would break the current
DRM_IOCTL_I915_GETPARAM. I'm unsure about whether a generic
implementation is possible.

Xiongchuan Tan (1):
  linux-user: Add drm ioctls for graphics drivers

 linux-user/ioctls.h        | 26 +++++++++++++++
 linux-user/syscall_defs.h  | 15 ++++++++-
 linux-user/syscall_types.h | 68 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 108 insertions(+), 1 deletion(-)

-- 
2.42.0



^ permalink raw reply	[flat|nested] 2+ messages in thread

* [PATCH 1/1] linux-user: Add drm ioctls for graphics drivers
  2023-09-27 17:52 [PATCH 0/1] linux-user: Add drm ioctls for userland graphics drivers Xiongchuan Tan
@ 2023-09-27 17:52 ` Xiongchuan Tan
  0 siblings, 0 replies; 2+ messages in thread
From: Xiongchuan Tan @ 2023-09-27 17:52 UTC (permalink / raw)
  To: Laurent Vivier; +Cc: qemu-devel, Xiongchuan Tan

This patch adds more drm-related ioctls to support userland OpenGL and
Vulkan drivers.

Signed-off-by: Xiongchuan Tan <tanxiongchuan@isrc.iscas.ac.cn>
---
 linux-user/ioctls.h        | 26 +++++++++++++++
 linux-user/syscall_defs.h  | 15 ++++++++-
 linux-user/syscall_types.h | 68 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 108 insertions(+), 1 deletion(-)

diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
index 071f7ca253..e6b946ed26 100644
--- a/linux-user/ioctls.h
+++ b/linux-user/ioctls.h
@@ -685,6 +685,32 @@
 #ifdef HAVE_DRM_H
   IOCTL_SPECIAL(DRM_IOCTL_VERSION, IOC_RW, do_ioctl_drm,
                 MK_PTR(MK_STRUCT(STRUCT_drm_version)))
+  IOCTL(DRM_IOCTL_GET_MAGIC, IOC_R,
+        MK_PTR(MK_STRUCT(STRUCT_drm_auth)))
+  IOCTL(DRM_IOCTL_GET_CLIENT, IOC_RW,
+        MK_PTR(MK_STRUCT(STRUCT_drm_client)))
+  IOCTL(DRM_IOCTL_GEM_CLOSE, IOC_W,
+        MK_PTR(MK_STRUCT(STRUCT_drm_gem_close)))
+  IOCTL(DRM_IOCTL_GET_CAP, IOC_RW,
+        MK_PTR(MK_STRUCT(STRUCT_drm_get_cap)))
+  IOCTL(DRM_IOCTL_PRIME_HANDLE_TO_FD, IOC_RW,
+        MK_PTR(MK_STRUCT(STRUCT_drm_prime_handle)))
+  IOCTL(DRM_IOCTL_SYNCOBJ_CREATE, IOC_RW,
+        MK_PTR(MK_STRUCT(STRUCT_drm_syncobj_create)))
+  IOCTL(DRM_IOCTL_SYNCOBJ_DESTROY, IOC_RW,
+        MK_PTR(MK_STRUCT(STRUCT_drm_syncobj_destroy)))
+  IOCTL(DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD, IOC_RW,
+        MK_PTR(MK_STRUCT(STRUCT_drm_syncobj_handle)))
+  IOCTL(DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, IOC_RW,
+        MK_PTR(MK_STRUCT(STRUCT_drm_syncobj_handle)))
+  IOCTL(DRM_IOCTL_SYNCOBJ_WAIT, IOC_RW,
+        MK_PTR(MK_STRUCT(STRUCT_drm_syncobj_wait)))
+  IOCTL(DRM_IOCTL_SYNCOBJ_RESET, IOC_RW,
+        MK_PTR(MK_STRUCT(STRUCT_drm_syncobj_array)))
+  IOCTL(DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT, IOC_RW,
+        MK_PTR(MK_STRUCT(STRUCT_drm_syncobj_timeline_wait)))
+  IOCTL(DRM_IOCTL_SYNCOBJ_TRANSFER, IOC_RW,
+        MK_PTR(MK_STRUCT(STRUCT_drm_syncobj_transfer)))
 
   IOCTL_SPECIAL(DRM_IOCTL_I915_GETPARAM, IOC_RW, do_ioctl_drm_i915,
                 MK_PTR(MK_STRUCT(STRUCT_drm_i915_getparam)))
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index 77ba343c85..be92b5fa6f 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -1201,7 +1201,20 @@ struct target_rtc_pll_info {
 #define TARGET_DM_DEV_SET_GEOMETRY    TARGET_IOWRU(0xfd, 0x0f)
 
 /* drm ioctls */
-#define TARGET_DRM_IOCTL_VERSION      TARGET_IOWRU('d', 0x00)
+#define TARGET_DRM_IOCTL_VERSION               TARGET_IOWRU('d', 0x00)
+#define TARGET_DRM_IOCTL_GET_MAGIC             TARGET_IORU('d', 0x02)
+#define TARGET_DRM_IOCTL_GET_CLIENT            TARGET_IOWRU('d', 0x05)
+#define TARGET_DRM_IOCTL_GEM_CLOSE             TARGET_IOWU('d', 0x09)
+#define TARGET_DRM_IOCTL_GET_CAP               TARGET_IOWRU('d', 0x0c)
+#define TARGET_DRM_IOCTL_PRIME_HANDLE_TO_FD    TARGET_IOWRU('d', 0x2d)
+#define TARGET_DRM_IOCTL_SYNCOBJ_CREATE        TARGET_IOWRU('d', 0xbf)
+#define TARGET_DRM_IOCTL_SYNCOBJ_DESTROY       TARGET_IOWRU('d', 0xc0)
+#define TARGET_DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD  TARGET_IOWRU('d', 0xc1)
+#define TARGET_DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE  TARGET_IOWRU('d', 0xc2)
+#define TARGET_DRM_IOCTL_SYNCOBJ_WAIT          TARGET_IOWRU('d', 0xc3)
+#define TARGET_DRM_IOCTL_SYNCOBJ_RESET         TARGET_IOWRU('d', 0xc4)
+#define TARGET_DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT TARGET_IOWRU('d', 0xca)
+#define TARGET_DRM_IOCTL_SYNCOBJ_TRANSFER      TARGET_IOWRU('d', 0xcc)
 
 /* drm i915 ioctls */
 #define TARGET_DRM_IOCTL_I915_GETPARAM              TARGET_IOWRU('d', 0x46)
diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
index c3b43f8022..dcc1f14e11 100644
--- a/linux-user/syscall_types.h
+++ b/linux-user/syscall_types.h
@@ -331,6 +331,74 @@ STRUCT(drm_version,
        TYPE_ULONG, /* desc_len */
        TYPE_PTRVOID) /* desc */
 
+STRUCT(drm_auth,
+       TYPE_INT) /* magic */
+
+STRUCT(drm_client,
+       TYPE_INT, /* idx */
+       TYPE_INT, /* auth */
+       TYPE_ULONG, /* pid */
+       TYPE_ULONG, /* uid */
+       TYPE_ULONG, /* magic */
+       TYPE_ULONG) /* iocs */
+
+STRUCT(drm_gem_close,
+       TYPE_INT, /* handle */
+       TYPE_INT) /* pad */
+
+STRUCT(drm_get_cap,
+       TYPE_ULONGLONG, /* capability */
+       TYPE_ULONGLONG) /* value */
+
+STRUCT(drm_prime_handle,
+       TYPE_INT, /* handle */
+       TYPE_INT, /* flags */
+       TYPE_INT) /* fd */
+
+STRUCT(drm_syncobj_create,
+       TYPE_INT, /* handle */
+       TYPE_INT) /* flags */
+
+STRUCT(drm_syncobj_destroy,
+       TYPE_INT, /* handle */
+       TYPE_INT) /* pad */
+
+STRUCT(drm_syncobj_handle,
+       TYPE_INT, /* handle */
+       TYPE_INT, /* flags */
+       TYPE_INT, /* fd */
+       TYPE_INT) /* pad */
+
+STRUCT(drm_syncobj_transfer,
+       TYPE_INT, /* src_handle */
+       TYPE_INT, /* dst_handle */
+       TYPE_ULONGLONG, /* src_point */
+       TYPE_ULONGLONG, /* dst_point */
+       TYPE_INT, /* flags */
+       TYPE_INT) /* pad */
+
+STRUCT(drm_syncobj_wait,
+       TYPE_ULONGLONG, /* handles */
+       TYPE_LONGLONG, /* timeout_nsec */
+       TYPE_INT, /* count_handles */
+       TYPE_INT, /* flags */
+       TYPE_INT, /* first_signaled */
+       TYPE_INT) /* pad */
+
+STRUCT(drm_syncobj_timeline_wait,
+       TYPE_ULONGLONG, /* handles */
+       TYPE_ULONGLONG, /* points */
+       TYPE_LONGLONG, /* timeout_nsec */
+       TYPE_INT, /* count_handles */
+       TYPE_INT, /* flags */
+       TYPE_INT, /* first_signaled */
+       TYPE_INT) /* pad */
+
+STRUCT(drm_syncobj_array,
+       TYPE_ULONGLONG, /* handles */
+       TYPE_INT, /* count_handles */
+       TYPE_INT) /* pad */
+
 STRUCT(drm_i915_getparam,
        TYPE_INT, /* param */
        TYPE_PTRVOID) /* value */
-- 
2.42.0



^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-09-27 17:56 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-27 17:52 [PATCH 0/1] linux-user: Add drm ioctls for userland graphics drivers Xiongchuan Tan
2023-09-27 17:52 ` [PATCH 1/1] linux-user: Add drm ioctls for " Xiongchuan Tan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).