@@ -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)))
@@ -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)
@@ -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 */
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(-)