summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'x11-libs/libdrm/files/libdrm-2.4.58-solaris.patch')
-rw-r--r--x11-libs/libdrm/files/libdrm-2.4.58-solaris.patch104
1 files changed, 104 insertions, 0 deletions
diff --git a/x11-libs/libdrm/files/libdrm-2.4.58-solaris.patch b/x11-libs/libdrm/files/libdrm-2.4.58-solaris.patch
new file mode 100644
index 000000000000..9e4110019815
--- /dev/null
+++ b/x11-libs/libdrm/files/libdrm-2.4.58-solaris.patch
@@ -0,0 +1,104 @@
+--- a/include/drm/drm.h
++++ b/include/drm/drm.h
+@@ -54,7 +54,11 @@ typedef int32_t __s32;
+ typedef uint32_t __u32;
+ typedef int64_t __s64;
+ typedef uint64_t __u64;
++#if defined(__sun)
++typedef unsigned long long drm_handle_t;
++#else
+ typedef unsigned long drm_handle_t;
++#endif
+
+ #endif
+
+@@ -210,12 +214,22 @@ struct drm_ctx_priv_map {
+ * \sa drmAddMap().
+ */
+ struct drm_map {
++#ifdef __sun
++ unsigned long long offset;
++ /**< Requested physical address (0 for SAREA)*/
++ unsigned long long handle;
++ /**< User-space: "Handle" to pass to mmap() */
++ /**< Kernel-space: kernel-virtual address */
++#else
+ unsigned long offset; /**< Requested physical address (0 for SAREA)*/
++#endif
+ unsigned long size; /**< Requested physical size (bytes) */
+ enum drm_map_type type; /**< Type of memory to map */
+ enum drm_map_flags flags; /**< Flags */
++#ifndef __sun
+ void *handle; /**< User-space: "Handle" to pass to mmap() */
+ /**< Kernel-space: kernel-virtual address */
++#endif
+ int mtrr; /**< MTRR slot used */
+ /* Private data */
+ };
+@@ -379,6 +393,9 @@ struct drm_buf_map {
+ void *virtual; /**< Mmap'd area in user-virtual */
+ #endif
+ struct drm_buf_pub *list; /**< Buffer information */
++#ifdef __sun
++ int fd;
++#endif
+ };
+
+ /**
+--- a/radeon/radeon_bo_gem.c
++++ b/radeon/radeon_bo_gem.c
+@@ -38,6 +38,13 @@
+ #include <string.h>
+ #include <sys/mman.h>
+ #include <errno.h>
++
++/* On solaris unistd.h and stropts.h are needed for ioctl */
++#ifdef __sun
++#include <unistd.h>
++#include <stropts.h>
++#endif
++
+ #include "libdrm.h"
+ #include "xf86drm.h"
+ #include "xf86atomic.h"
+ #include "drm.h"
+--- a/xf86drm.c
++++ b/xf86drm.c
+@@ -972,7 +972,11 @@ int drmRmMap(int fd, drm_handle_t handle
+ {
+ drm_map_t map;
+
++#ifdef __sun
++ map.handle = handle;
++#else
+ map.handle = (void *)(uintptr_t)handle;
++#endif
+
+ if(drmIoctl(fd, DRM_IOCTL_RM_MAP, &map))
+ return -errno;
+@@ -1210,6 +1214,9 @@ drmBufMapPtr drmMapBufs(int fd)
+ bufs.count = 0;
+ bufs.list = NULL;
+ bufs.virtual = NULL;
++#ifdef __sun
++ bufs.fd = fd;
++#endif
+ if (drmIoctl(fd, DRM_IOCTL_MAP_BUFS, &bufs))
+ return NULL;
+
+--- a/xf86drm.h
++++ b/xf86drm.h
+@@ -64,6 +64,13 @@
+
+ #endif
+
++#if defined(__sun) && !defined(_IOC)
++#define _IOC(dir, group, nr, size) \
++ (dir == DRM_IOC_READWRITE ? _IOWRN(group, nr, size) : \
++ (dir == DRM_IOC_WRITE ? _IOWN(group, nr, size) : \
++ /* dir == DRM_IOC_READ */ _IORN(group, nr, size) ))
++#endif
++
+ /* Defaults, if nothing set in xf86config */
+ #define DRM_DEV_UID 0
+ #define DRM_DEV_GID 0