diff options
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.patch | 104 |
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 |