This patch adds more drm-related ioctls to support userland OpenGL and Vulkan drivers.
Signed-off-by: Xiongchuan Tan <tanxiongch...@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