I have attached a patch that enables support for direct use of Intel GPUs in 
QEMU. With this you can build the libdrm and mesa on for instance an AArch64 
emulated system and have native OpenGL support inside QEMU.

The code has been sitting around on my drive for a year, and isn't quite as 
polished as I would like it to be, but I thought it would better to get it out 
there and see what people think.

I have other patches for Radeon drivers, but it untested, and many of the 
other DRM drivers are must harder to support as they have their own subcommand 
systems on top of IOCTL that makes it hard to support with existing IOCTL 
mapping in QEMU.  I can share those too if there is interest, I am just 
starting with the one I have tested and know works at least for me.

Best regards
'Allan
>From 2ce0dc997c1ebc7a63dbd3ba3b7638b3a5f8432e Mon Sep 17 00:00:00 2001
From: Allan Sandfeld Jensen <allan.jen...@qt.io>
Date: Thu, 22 Feb 2018 12:42:13 +0100
Subject: [PATCH 1/2] Add support for drm ioctls

Tested with mesa on i915. Support for other drivers missing.
---
 configure                  |  19 +++
 linux-user/ioctls.h        |  60 ++++++++
 linux-user/syscall.c       |   5 +
 linux-user/syscall_defs.h  |  84 +++++++++++
 linux-user/syscall_types.h | 292 +++++++++++++++++++++++++++++++++++++
 5 files changed, 460 insertions(+)

diff --git a/configure b/configure
index 0a3c6a72c3..b67cd624bb 100755
--- a/configure
+++ b/configure
@@ -5386,6 +5386,20 @@ if compile_prog "" "" ; then
     have_rtnetlink=yes
 fi
 
+##########################################
+# check if we have libdrm available
+have_libdrm=no
+cat > $TMPC << EOF
+#include <libdrm/drm.h>
+#include <libdrm/i915_drm.h>
+int main(void) {
+  return DRM_IOCTL_PRIME_FD_TO_HANDLE | DRM_IOCTL_I915_GET_RESET_STATS;
+}
+EOF
+if compile_prog "" "" ; then
+    have_libdrm=yes
+fi
+
 ##########################################
 # check for usable AF_VSOCK environment
 have_af_vsock=no
@@ -6027,6 +6041,7 @@ echo "PIE               $pie"
 echo "vde support       $vde"
 echo "netmap support    $netmap"
 echo "Linux AIO support $linux_aio"
+echo "Linux drm support (i915) $have_libdrm"
 echo "ATTR/XATTR support $attr"
 echo "Install blobs     $blobs"
 echo "KVM support       $kvm"
@@ -6813,6 +6828,10 @@ if test "$libxml2" = "yes" ; then
   echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
 fi
 
+if test "$have_libdrm" = "yes" ; then
+  echo "CONFIG_LIBDRM=y" >> $config_host_mak
+fi
+
 if test "$replication" = "yes" ; then
   echo "CONFIG_REPLICATION=y" >> $config_host_mak
 fi
diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
index ae8951625f..85f7c265b5 100644
--- a/linux-user/ioctls.h
+++ b/linux-user/ioctls.h
@@ -489,3 +489,63 @@
   IOCTL_IGNORE(TIOCSTART)
   IOCTL_IGNORE(TIOCSTOP)
 #endif
+
+#if defined(CONFIG_LIBDRM) && HOST_LONG_BITS == TARGET_ABI_BITS && (defined(HOST_WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN))
+  IOCTL(DRM_IOCTL_VERSION, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_version)))
+  IOCTL(DRM_IOCTL_GET_UNIQUE, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_unique)))
+  IOCTL(DRM_IOCTL_GET_MAGIC, IOC_R, MK_PTR(MK_STRUCT(STRUCT_drm_auth)))
+  IOCTL(DRM_IOCTL_IRQ_BUSID, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_irq_busid)))
+  IOCTL(DRM_IOCTL_GET_MAP, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_map)))
+  IOCTL(DRM_IOCTL_GET_CLIENT, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_client)))
+  IOCTL(DRM_IOCTL_SET_VERSION, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_set_version)))
+  IOCTL(DRM_IOCTL_MODESET_CTL, IOC_W, MK_PTR(MK_STRUCT(STRUCT_drm_modeset_ctl)))
+  IOCTL(DRM_IOCTL_GEM_CLOSE, IOC_W, MK_PTR(MK_STRUCT(STRUCT_drm_gem_close)))
+  IOCTL(DRM_IOCTL_GEM_FLINK, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_gem_flink)))
+  IOCTL(DRM_IOCTL_GEM_OPEN, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_gem_open)))
+  IOCTL(DRM_IOCTL_GET_CAP, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_get_cap)))
+  IOCTL(DRM_IOCTL_SET_CLIENT_CAP, IOC_W, MK_PTR(MK_STRUCT(STRUCT_drm_set_client_cap)))
+  IOCTL(DRM_IOCTL_SET_UNIQUE, IOC_W, MK_PTR(MK_STRUCT(STRUCT_drm_unique)))
+  IOCTL(DRM_IOCTL_AUTH_MAGIC, IOC_W, MK_PTR(MK_STRUCT(STRUCT_drm_auth)))
+  IOCTL(DRM_IOCTL_BLOCK, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_block)))
+  IOCTL(DRM_IOCTL_UNBLOCK, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_block)))
+  IOCTL(DRM_IOCTL_CONTROL, IOC_W, MK_PTR(MK_STRUCT(STRUCT_drm_control)))
+  IOCTL(DRM_IOCTL_ADD_MAP, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_map)))
+  IOCTL(DRM_IOCTL_RM_MAP, IOC_W, MK_PTR(MK_STRUCT(STRUCT_drm_map)))
+
+  IOCTL(DRM_IOCTL_PRIME_HANDLE_TO_FD, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_prime_handle)))
+  IOCTL(DRM_IOCTL_PRIME_FD_TO_HANDLE, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_prime_handle)))
+
+  IOCTL(DRM_IOCTL_I915_INIT, IOC_W, MK_PTR(MK_STRUCT(STRUCT_drm_i915_init_t)))
+  IOCTL(DRM_IOCTL_I915_FLUSH, 0, TYPE_NULL)
+  IOCTL(DRM_IOCTL_I915_FLIP, 0, TYPE_NULL)
+  IOCTL(DRM_IOCTL_I915_GETPARAM, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_i915_getparam_t)))
+  IOCTL(DRM_IOCTL_I915_SETPARAM, IOC_W, MK_PTR(MK_STRUCT(STRUCT_drm_i915_setparam_t)))
+  IOCTL(DRM_IOCTL_I915_GEM_EXECBUFFER, IOC_W, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_execbuffer)))
+  IOCTL(DRM_IOCTL_I915_GEM_EXECBUFFER2, IOC_W, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_execbuffer2)))
+  IOCTL(DRM_IOCTL_I915_GEM_EXECBUFFER2_WR, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_execbuffer2)))
+  IOCTL(DRM_IOCTL_I915_GEM_BUSY, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_busy)))
+  IOCTL(DRM_IOCTL_I915_GEM_THROTTLE, 0, TYPE_NULL)
+  IOCTL(DRM_IOCTL_I915_GEM_ENTERVT, 0, TYPE_NULL)
+  IOCTL(DRM_IOCTL_I915_GEM_LEAVEVT, 0, TYPE_NULL)
+  IOCTL(DRM_IOCTL_I915_GEM_PREAD, IOC_W, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_pread)))
+  IOCTL(DRM_IOCTL_I915_GEM_PWRITE, IOC_W, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_pwrite)))
+  IOCTL(DRM_IOCTL_I915_GEM_MMAP, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_mmap)))
+  IOCTL(DRM_IOCTL_I915_GEM_MMAP_GTT, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_mmap_gtt)))
+  IOCTL(DRM_IOCTL_I915_GEM_SET_DOMAIN, IOC_W, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_set_domain)))
+  IOCTL(DRM_IOCTL_I915_GEM_SW_FINISH, IOC_W, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_sw_finish)))
+  IOCTL(DRM_IOCTL_I915_GEM_CREATE, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_create)))
+  IOCTL(DRM_IOCTL_I915_GEM_SET_TILING, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_set_tiling)))
+  IOCTL(DRM_IOCTL_I915_GEM_GET_TILING, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_get_tiling)))
+  IOCTL(DRM_IOCTL_I915_GEM_GET_APERTURE, IOC_R, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_get_aperture)))
+  IOCTL(DRM_IOCTL_I915_GEM_MADVISE, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_madvise)))
+  IOCTL(DRM_IOCTL_I915_GEM_CONTEXT_CREATE, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_context_create)))
+  IOCTL(DRM_IOCTL_I915_GEM_CONTEXT_DESTROY, IOC_W, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_context_destroy)))
+  IOCTL(DRM_IOCTL_I915_GEM_SET_CACHING, IOC_W, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_caching)))
+  IOCTL(DRM_IOCTL_I915_GEM_GET_CACHING, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_caching)))
+  IOCTL(DRM_IOCTL_I915_REG_READ, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_i915_reg_read)))
+  IOCTL(DRM_IOCTL_I915_GET_RESET_STATS, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_i915_reset_stats)))
+  IOCTL(DRM_IOCTL_I915_GEM_USERPTR, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_userptr)))
+  IOCTL(DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_context_param)))
+  IOCTL(DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_drm_i915_gem_context_param)))
+
+#endif
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 280137da8c..695ab0251c 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -109,6 +109,11 @@
 #include "linux_loop.h"
 #include "uname.h"
 
+#ifdef CONFIG_LIBDRM
+#include <libdrm/drm.h>
+#include <libdrm/i915_drm.h>
+#endif
+
 #include "qemu.h"
 #include "fd-trans.h"
 
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index 99bbce083c..70fe4a255b 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -2516,4 +2516,88 @@ struct target_user_cap_data {
 /* Return size of the log buffer */
 #define TARGET_SYSLOG_ACTION_SIZE_BUFFER   10
 
+#if defined(CONFIG_LIBDRM) && HOST_LONG_BITS == TARGET_ABI_BITS && (defined(HOST_WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN))
+
+#define TARGET_DRM_IOCTL_BASE       'd'
+#define TARGET_DRM_IO(nr)           TARGET_IO(TARGET_DRM_IOCTL_BASE,nr)
+#define TARGET_DRM_IOR(nr,type)     TARGET_IOR(TARGET_DRM_IOCTL_BASE,nr,type)
+#define TARGET_DRM_IOW(nr,type)     TARGET_IOW(TARGET_DRM_IOCTL_BASE,nr,type)
+#define TARGET_DRM_IOWR(nr,type)    TARGET_IOWR(TARGET_DRM_IOCTL_BASE,nr,type)
+
+#define TARGET_DRM_IOCTL_VERSION        TARGET_DRM_IOWR(0x00, struct drm_version)
+#define TARGET_DRM_IOCTL_GET_UNIQUE     TARGET_DRM_IOWR(0x01, struct drm_unique)
+#define TARGET_DRM_IOCTL_GET_MAGIC      TARGET_DRM_IOR( 0x02, struct drm_auth)
+#define TARGET_DRM_IOCTL_IRQ_BUSID      TARGET_DRM_IOWR(0x03, struct drm_irq_busid)
+#define TARGET_DRM_IOCTL_GET_MAP        TARGET_DRM_IOWR(0x04, struct drm_map)
+#define TARGET_DRM_IOCTL_GET_CLIENT     TARGET_DRM_IOWR(0x05, struct drm_client)
+#define TARGET_DRM_IOCTL_GET_STATS      TARGET_DRM_IOR( 0x06, struct drm_stats)
+#define TARGET_DRM_IOCTL_SET_VERSION    TARGET_DRM_IOWR(0x07, struct drm_set_version)
+#define TARGET_DRM_IOCTL_MODESET_CTL    TARGET_DRM_IOW( 0x08, struct drm_modeset_ctl)
+#define TARGET_DRM_IOCTL_GEM_CLOSE      TARGET_DRM_IOW (0x09, struct drm_gem_close)
+#define TARGET_DRM_IOCTL_GEM_FLINK      TARGET_DRM_IOWR(0x0a, struct drm_gem_flink)
+#define TARGET_DRM_IOCTL_GEM_OPEN       TARGET_DRM_IOWR(0x0b, struct drm_gem_open)
+#define TARGET_DRM_IOCTL_GET_CAP        TARGET_DRM_IOWR(0x0c, struct drm_get_cap)
+#define TARGET_DRM_IOCTL_SET_CLIENT_CAP TARGET_DRM_IOW( 0x0d, struct drm_set_client_cap)
+#define TARGET_DRM_IOCTL_SET_UNIQUE     TARGET_DRM_IOW( 0x10, struct drm_unique)
+#define TARGET_DRM_IOCTL_AUTH_MAGIC     TARGET_DRM_IOW( 0x11, struct drm_auth)
+#define TARGET_DRM_IOCTL_BLOCK          TARGET_DRM_IOWR(0x12, struct drm_block)
+#define TARGET_DRM_IOCTL_UNBLOCK        TARGET_DRM_IOWR(0x13, struct drm_block)
+#define TARGET_DRM_IOCTL_CONTROL        TARGET_DRM_IOW( 0x14, struct drm_control)
+#define TARGET_DRM_IOCTL_ADD_MAP        TARGET_DRM_IOWR(0x15, struct drm_map)
+#define TARGET_DRM_IOCTL_RM_MAP         TARGET_DRM_IOW( 0x1b, struct drm_map)
+
+#define TARGET_DRM_IOCTL_PRIME_HANDLE_TO_FD TARGET_DRM_IOWR(0x2d, struct drm_prime_handle)
+#define TARGET_DRM_IOCTL_PRIME_FD_TO_HANDLE TARGET_DRM_IOWR(0x2e, struct drm_prime_handle)
+
+#define TARGET_DRM_IOCTL_I915_INIT              TARGET_DRM_IOW( 0x40, drm_i915_init_t)
+#define TARGET_DRM_IOCTL_I915_FLUSH             TARGET_DRM_IO ( 0x41)
+#define TARGET_DRM_IOCTL_I915_FLIP              TARGET_DRM_IO ( 0x42)
+#define TARGET_DRM_IOCTL_I915_BATCHBUFFER       TARGET_DRM_IOW( 0x43, drm_i915_batchbuffer_t)
+#define TARGET_DRM_IOCTL_I915_IRQ_EMIT          TARGET_DRM_IOWR(0x44, drm_i915_irq_emit_t)
+#define TARGET_DRM_IOCTL_I915_IRQ_WAIT          TARGET_DRM_IOW( 0x45, drm_i915_irq_wait_t)
+#define TARGET_DRM_IOCTL_I915_GETPARAM          TARGET_DRM_IOWR(0x46, drm_i915_getparam_t)
+#define TARGET_DRM_IOCTL_I915_SETPARAM          TARGET_DRM_IOW( 0x47, drm_i915_setparam_t)
+#define TARGET_DRM_IOCTL_I915_ALLOC             TARGET_DRM_IOWR(0x48, drm_i915_mem_alloc_t)
+#define TARGET_DRM_IOCTL_I915_FREE              TARGET_DRM_IOW( 0x49, drm_i915_mem_free_t)
+#define TARGET_DRM_IOCTL_I915_INIT_HEAP         TARGET_DRM_IOW( 0x4a, drm_i915_mem_init_heap_t)
+#define TARGET_DRM_IOCTL_I915_CMDBUFFER         TARGET_DRM_IOW( 0x4b, drm_i915_cmdbuffer_t)
+#define TARGET_DRM_IOCTL_I915_DESTROY_HEAP      TARGET_DRM_IOW( 0x4c, drm_i915_mem_destroy_heap_t)
+#define TARGET_DRM_IOCTL_I915_SET_VBLANK_PIPE   TARGET_DRM_IOW( 0x4d, drm_i915_vblank_pipe_t)
+#define TARGET_DRM_IOCTL_I915_GET_VBLANK_PIPE   TARGET_DRM_IOR( 0x4e, drm_i915_vblank_pipe_t)
+#define TARGET_DRM_IOCTL_I915_VBLANK_SWAP       TARGET_DRM_IOWR(0x4f, drm_i915_vblank_swap_t)
+#define TARGET_DRM_IOCTL_I915_HWS_ADDR          TARGET_DRM_IOW( 0x51, struct drm_i915_gem_init)
+#define TARGET_DRM_IOCTL_I915_GEM_INIT          TARGET_DRM_IOW( 0x53, struct drm_i915_gem_init)
+#define TARGET_DRM_IOCTL_I915_GEM_EXECBUFFER    TARGET_DRM_IOW( 0x54, struct drm_i915_gem_execbuffer)
+#define TARGET_DRM_IOCTL_I915_GEM_EXECBUFFER2   TARGET_DRM_IOW( 0x69, struct drm_i915_gem_execbuffer2)
+#define TARGET_DRM_IOCTL_I915_GEM_EXECBUFFER2_WR    TARGET_DRM_IOWR( 0x69, struct drm_i915_gem_execbuffer2)
+#define TARGET_DRM_IOCTL_I915_GEM_PIN           TARGET_DRM_IOWR(0x55, struct drm_i915_gem_pin)
+#define TARGET_DRM_IOCTL_I915_GEM_UNPIN         TARGET_DRM_IOW( 0x56, struct drm_i915_gem_unpin)
+#define TARGET_DRM_IOCTL_I915_GEM_BUSY          TARGET_DRM_IOWR(0x57, struct drm_i915_gem_busy)
+#define TARGET_DRM_IOCTL_I915_GEM_THROTTLE      TARGET_DRM_IO ( 0x58)
+#define TARGET_DRM_IOCTL_I915_GEM_ENTERVT       TARGET_DRM_IO ( 0x59)
+#define TARGET_DRM_IOCTL_I915_GEM_LEAVEVT       TARGET_DRM_IO ( 0x5a)
+#define TARGET_DRM_IOCTL_I915_GEM_CREATE        TARGET_DRM_IOWR(0x5b, struct drm_i915_gem_create)
+#define TARGET_DRM_IOCTL_I915_GEM_PREAD         TARGET_DRM_IOW (0x5c, struct drm_i915_gem_pread)
+#define TARGET_DRM_IOCTL_I915_GEM_PWRITE        TARGET_DRM_IOW (0x5d, struct drm_i915_gem_pwrite)
+#define TARGET_DRM_IOCTL_I915_GEM_MMAP          TARGET_DRM_IOWR(0x5e, struct drm_i915_gem_mmap)
+#define TARGET_DRM_IOCTL_I915_GEM_MMAP_GTT      TARGET_DRM_IOWR(0x64, struct drm_i915_gem_mmap_gtt)
+#define TARGET_DRM_IOCTL_I915_GEM_SET_DOMAIN    TARGET_DRM_IOW (0x5f, struct drm_i915_gem_set_domain)
+#define TARGET_DRM_IOCTL_I915_GEM_SW_FINISH     TARGET_DRM_IOW (0x60, struct drm_i915_gem_sw_finish)
+#define TARGET_DRM_IOCTL_I915_GEM_SET_TILING    TARGET_DRM_IOWR(0x61, struct drm_i915_gem_set_tiling)
+#define TARGET_DRM_IOCTL_I915_GEM_GET_TILING    TARGET_DRM_IOWR(0x62, struct drm_i915_gem_get_tiling)
+#define TARGET_DRM_IOCTL_I915_GEM_GET_APERTURE  TARGET_DRM_IOR (0x63, struct drm_i915_gem_get_aperture)
+#define TARGET_DRM_IOCTL_I915_GEM_MADVISE       TARGET_DRM_IOWR(0x66, struct drm_i915_gem_madvise)
+
+#define TARGET_DRM_IOCTL_I915_GEM_CONTEXT_CREATE    TARGET_DRM_IOWR(0x6d, struct drm_i915_gem_context_create)
+#define TARGET_DRM_IOCTL_I915_GEM_CONTEXT_DESTROY   TARGET_DRM_IOW (0x6e, struct drm_i915_gem_context_destroy)
+#define TARGET_DRM_IOCTL_I915_GEM_SET_CACHING       TARGET_DRM_IOW( 0x6f, struct drm_i915_gem_caching)
+#define TARGET_DRM_IOCTL_I915_GEM_GET_CACHING       TARGET_DRM_IOWR(0x70, struct drm_i915_gem_caching)
+#define TARGET_DRM_IOCTL_I915_REG_READ              TARGET_DRM_IOWR(0x71, struct drm_i915_reg_read)
+#define TARGET_DRM_IOCTL_I915_GET_RESET_STATS       TARGET_DRM_IOWR(0x72, struct drm_i915_reset_stats)
+#define TARGET_DRM_IOCTL_I915_GEM_USERPTR           TARGET_DRM_IOWR(0x73, struct drm_i915_gem_userptr)
+#define TARGET_DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM  TARGET_DRM_IOWR(0x74, struct drm_i915_gem_context_param)
+#define TARGET_DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM  TARGET_DRM_IOWR(0x75, struct drm_i915_gem_context_param)
+
+#endif /* CONFIG_LIBDRM */
+
 #endif
diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
index b98a23b0f1..80954c7817 100644
--- a/linux-user/syscall_types.h
+++ b/linux-user/syscall_types.h
@@ -334,3 +334,295 @@ STRUCT(usbdevfs_disconnect_claim,
         TYPE_INT, /* flags */
         MK_ARRAY(TYPE_CHAR, USBDEVFS_MAXDRIVERNAME + 1)) /* driver */
 #endif /* CONFIG_USBFS */
+
+#if defined(CONFIG_LIBDRM) && HOST_LONG_BITS == TARGET_ABI_BITS && (defined(HOST_WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN))
+STRUCT(drm_version,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_ULONG,
+       TYPE_PTRVOID,
+       TYPE_ULONG,
+       TYPE_PTRVOID,
+       TYPE_ULONG,
+       TYPE_PTRVOID
+)
+
+STRUCT(drm_unique,
+       TYPE_ULONG,
+       TYPE_PTRVOID
+)
+
+STRUCT(drm_block,
+       TYPE_INT
+)
+
+STRUCT(drm_control,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_auth,
+       TYPE_INT
+)
+
+STRUCT(drm_irq_busid,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_map,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_PTRVOID,
+       TYPE_INT
+)
+
+STRUCT(drm_client,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG
+)
+
+STRUCT(drm_set_version,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_modeset_ctl,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_gem_close,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_gem_flink,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_gem_open,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_get_cap,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG
+)
+
+STRUCT(drm_set_client_cap,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG
+)
+
+STRUCT(drm_prime_handle,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_i915_init_t,
+       TYPE_INT, /*func*/
+       TYPE_INT, /*mmio_offset*/
+       TYPE_INT, /*sarea_priv_offset*/
+       TYPE_INT, /*ring_start*/
+       TYPE_INT, /*ring_end*/
+       TYPE_INT, /*ring_size*/
+       TYPE_INT, /*front_offset*/
+       TYPE_INT, /*back_offset*/
+       TYPE_INT, /*depth_offset*/
+       TYPE_INT, /*w*/
+       TYPE_INT, /*h*/
+       TYPE_INT, /*pitch*/
+       TYPE_INT, /*pitch_bits*/
+       TYPE_INT, /*back_pitch*/
+       TYPE_INT, /*depth_pitch*/
+       TYPE_INT, /*cpp*/
+       TYPE_INT  /*chipset*/
+)
+
+STRUCT(drm_i915_gem_init,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG
+)
+
+STRUCT(drm_i915_gem_create,
+       TYPE_ULONGLONG,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_i915_getparam_t,
+       TYPE_INT,
+       TYPE_PTRVOID
+)
+
+STRUCT(drm_i915_setparam_t,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_i915_gem_execbuffer,
+       TYPE_ULONGLONG,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_ULONGLONG
+)
+
+STRUCT(drm_i915_gem_exec_object2,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG
+)
+
+STRUCT(drm_i915_gem_execbuffer2,
+       TYPE_ULONGLONG,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG
+)
+
+STRUCT(drm_i915_gem_busy,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_i915_gem_pread,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG
+)
+
+STRUCT(drm_i915_gem_pwrite,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG
+)
+
+STRUCT(drm_i915_gem_mmap,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG
+)
+
+STRUCT(drm_i915_gem_mmap_gtt,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_ULONGLONG
+)
+
+STRUCT(drm_i915_gem_set_domain,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_i915_gem_sw_finish,
+       TYPE_INT
+)
+
+STRUCT(drm_i915_gem_caching,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_i915_gem_set_tiling,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_i915_gem_get_tiling,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_i915_gem_get_aperture,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG
+)
+
+STRUCT(drm_i915_gem_madvise,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_i915_gem_context_create,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_i915_gem_context_destroy,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_i915_reg_read,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG
+)
+
+STRUCT(drm_i915_reset_stats,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_i915_gem_userptr,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG,
+       TYPE_INT,
+       TYPE_INT
+)
+
+STRUCT(drm_i915_gem_context_param,
+       TYPE_INT,
+       TYPE_INT,
+       TYPE_ULONGLONG,
+       TYPE_ULONGLONG
+)
+#endif
-- 
2.20.0.rc1

Reply via email to