* [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