[prev in list] [next in list] [prev in thread] [next in thread] 

List:       qemu-devel
Subject:    [Qemu-devel] Support for Intel GPU
From:       Allan Sandfeld Jensen <kde () carewolf ! com>
Date:       2018-11-29 11:54:19
Message-ID: 4110462.LvFx2qVVIh () twilight
[Download RAW message or body]

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
["0001-Add-support-for-drm-ioctls.patch" (0001-Add-support-for-drm-ioctls.patch)]

From 2ce0dc997c1ebc7a63dbd3ba3b7638b3a5f8432e Mon Sep 17 00:00:00 2001
From: Allan Sandfeld Jensen <allan.jensen@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



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic