[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