--- a/open-src/lib/libdrm/solaris-drm-port.patch Sat Jan 10 10:35:32 2009 -0800
+++ b/open-src/lib/libdrm/solaris-drm-port.patch Thu Jan 15 12:55:00 2009 -0800
@@ -1,4 +1,4 @@
-# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
# Use subject to license terms.
#
# Permission is hereby granted, free of charge, to any person obtaining a
@@ -26,194 +26,190 @@
# or other dealings in this Software without prior written authorization
# of the copyright holder.
-diff -urp -x '*~' libdrm/xf86drm.c libdrm/xf86drm.c
---- libdrm/xf86drm.c 2006-11-08 13:54:38.000000000 -0800
-+++ libdrm/xf86drm.c 2006-11-30 20:01:39.007051000 -0800
-@@ -882,7 +882,7 @@ int drmRmMap(int fd, drm_handle_t handle
+diff -urp -x '*~' -x '*.orig' Makefile.am Makefile.am
+--- Makefile.am 2008-07-01 00:50:43.000000000 -0700
++++ Makefile.am 2009-01-10 22:17:00.792398000 -0800
+@@ -22,7 +22,7 @@
+ # here too, but let's just do libdrm for now
+
+ AUTOMAKE_OPTIONS = foreign
+-SUBDIRS = libdrm shared-core tests
++SUBDIRS = libdrm shared-core
+
+ pkgconfigdir = @pkgconfigdir@
+ pkgconfig_DATA = libdrm.pc
+diff -urp -x '*~' -x '*.orig' libdrm/xf86drm.c libdrm/xf86drm.c
+--- libdrm/xf86drm.c 2008-07-01 00:51:40.000000000 -0700
++++ libdrm/xf86drm.c 2009-01-10 22:17:00.782591000 -0800
+@@ -894,7 +894,7 @@ int drmRmMap(int fd, drm_handle_t handle
{
drm_map_t map;
- map.handle = (void *)handle;
+ map.handle = (drm_handle_t)handle;
- if(ioctl(fd, DRM_IOCTL_RM_MAP, &map)) return -errno;
- return 0;
-@@ -1112,6 +1112,7 @@ drmBufMapPtr drmMapBufs(int fd)
- bufs.count = 0;
- bufs.list = NULL;
- bufs.virtual = NULL;
-+ bufs.fd = fd;
- if (ioctl(fd, DRM_IOCTL_MAP_BUFS, &bufs)) return NULL;
-
- if (!bufs.count) return NULL;
-diff -urp -x '*~' libdrm/xf86drm.h libdrm/xf86drm.h
---- libdrm/xf86drm.h 2006-11-08 13:55:14.000000000 -0800
-+++ libdrm/xf86drm.h 2006-11-30 20:01:39.008328000 -0800
-@@ -40,6 +40,11 @@
- #include <sys/types.h>
- #include <drm.h>
-
-+#if defined(__SUNPRO_C)
-+#define STRINGIZE(x) #x
-+#define STRINGIZE_EVAL(x) STRINGIZE(x)
-+#define __FUNCTION__ STRINGIZE_EVAL(__FILE__)",line"STRINGIZE_EVAL(__LINE__)
-+#endif
- /* Defaults, if nothing set in xf86config */
- #define DRM_DEV_UID 0
- #define DRM_DEV_GID 0
-@@ -423,6 +428,17 @@ do { register unsigned int __old __asm("
+ if(ioctl(fd, DRM_IOCTL_RM_MAP, &map))
+ return -errno;
+diff -urp -x '*~' -x '*.orig' libdrm/xf86drm.h libdrm/xf86drm.h
+--- libdrm/xf86drm.h 2008-07-01 00:51:40.000000000 -0700
++++ libdrm/xf86drm.h 2009-01-10 22:17:00.783241000 -0800
+@@ -423,6 +423,19 @@ do { register unsigned int __old __asm("
#endif /* architecture */
#endif /* __GNUC__ >= 2 */
+#if defined(__SUNPRO_C)
-+extern char atomic_cmpset_int(void *, unsigned int, unsigned int);
-+#define DRM_CAS(lock,old,new,__ret) \
-+ do { \
-+ unsigned int __result, __old = (old); \
-+ __result = !atomic_cmpset_int(lock,old,new); \
-+ __ret = __result; \
-+ } while(0)
++#include <atomic.h>
++#define atomic_cmpset_int(p, c, n) ((c == atomic_cas_uint(p, c, n)) ? 1 : 0)
++#define DRM_CAS(lock,old,new,__ret) \
++ do { \
++ unsigned int __result, __old = (old);\
++ __result = !atomic_cmpset_int(lock,__old,new);\
++ __ret = __result; \
++ } while(0)
+#endif
+
+
++
#ifndef DRM_CAS
#define DRM_CAS(lock,old,new,ret) do { ret=1; } while (0) /* FAST LOCK FAILS */
#endif
-diff -urp -x '*~' shared-core/drm.h shared-core/drm.h
---- shared-core/drm.h 2006-11-07 20:05:14.000000000 -0800
-+++ shared-core/drm.h 2006-11-30 20:01:39.009785000 -0800
-@@ -58,6 +58,9 @@
+diff -urp -x '*~' -x '*.orig' shared-core/drm.h shared-core/drm.h
+--- shared-core/drm.h 2008-07-01 00:55:17.000000000 -0700
++++ shared-core/drm.h 2009-01-10 22:17:00.781413000 -0800
+@@ -58,6 +58,8 @@
#ifndef _DRM_H_
#define _DRM_H_
-+
+#include <sys/types32.h>
+
#ifndef __user
#define __user
#endif
-@@ -66,6 +69,7 @@
+@@ -69,6 +71,12 @@
# define DEPRECATED __attribute__ ((deprecated))
#else
# define DEPRECATED
-+# define __volatile__ volatile
++# ifndef __FUNCTION__
++# define __FUNCTION__ __func__ /* C99 */
++# endif
++# ifndef __volatile__
++# define __volatile__ volatile
++# endif
#endif
#if defined(__linux__)
-@@ -93,6 +97,63 @@
+@@ -89,6 +97,62 @@
#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
#endif
+/* Solaris-specific. */
-+#if defined(__SOLARIS__) || defined(sun)
-+#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
++#if defined(__SOLARIS__) || defined(__sun)
++#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
+
-+#define _IOC_NRBITS 8
-+#define _IOC_TYPEBITS 8
-+#define _IOC_SIZEBITS 14
-+#define _IOC_DIRBITS 2
++#define _IOC_NRBITS 8
++#define _IOC_TYPEBITS 8
++#define _IOC_SIZEBITS 14
++#define _IOC_DIRBITS 2
+
-+#define _IOC_NRMASK ((1 << _IOC_NRBITS)-1)
-+#define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1)
-+#define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1)
-+#define _IOC_DIRMASK ((1 << _IOC_DIRBITS)-1)
++#define _IOC_NRMASK ((1 << _IOC_NRBITS)-1)
++#define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1)
++#define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1)
++#define _IOC_DIRMASK ((1 << _IOC_DIRBITS)-1)
+
-+#define _IOC_NRSHIFT 0
-+#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
-+#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
-+#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS)
++#define _IOC_NRSHIFT 0
++#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
++#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
++#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS)
+
-+#define _IOC_NONE 0U
-+#define _IOC_WRITE 1U
-+#define _IOC_READ 2U
++#define _IOC_NONE 0U
++#define _IOC_WRITE 1U
++#define _IOC_READ 2U
+
-+#define _IOC(dir, type, nr, size) \
-+ (((dir) << _IOC_DIRSHIFT) | \
-+ ((type) << _IOC_TYPESHIFT) | \
-+ ((nr) << _IOC_NRSHIFT) | \
-+ ((size) << _IOC_SIZESHIFT))
++#define _IOC(dir, type, nr, size) \
++ (((dir) << _IOC_DIRSHIFT) | \
++ ((type) << _IOC_TYPESHIFT) | \
++ ((nr) << _IOC_NRSHIFT) | \
++ ((size) << _IOC_SIZESHIFT))
+
+/* used for X server compile */
+#if !defined(_KERNEL)
-+#define _IO(type, nr) _IOC(_IOC_NONE, (type), (nr), 0)
-+#define _IOR(type, nr, size) _IOC(_IOC_READ, (type), (nr), sizeof (size))
-+#define _IOW(type, nr, size) _IOC(_IOC_WRITE, (type), (nr), sizeof (size))
-+#define _IOWR(type, nr, size) _IOC(_IOC_READ|_IOC_WRITE, \
++#define _IO(type, nr) _IOC(_IOC_NONE, (type), (nr), 0)
++#define _IOR(type, nr, size) _IOC(_IOC_READ, (type), (nr), sizeof (size))
++#define _IOW(type, nr, size) _IOC(_IOC_WRITE, (type), (nr), sizeof (size))
++#define _IOWR(type, nr, size) _IOC(_IOC_READ|_IOC_WRITE, \
+ (type), (nr), sizeof (size))
-+
-+#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
-+#define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
-+#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
-+#define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
-+
-+#define IOC_IN (_IOC_WRITE << _IOC_DIRSHIFT)
-+#define IOC_OUT (_IOC_READ << _IOC_DIRSHIFT)
-+#define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
-+#define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT)
-+#define IOCSIZE_SHIFT (_IOC_SIZESHIFT)
++#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
++#define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
++#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
++#define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
++#define IOC_IN (_IOC_WRITE << _IOC_DIRSHIFT)
++#define IOC_OUT (_IOC_READ << _IOC_DIRSHIFT)
++#define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
++#define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT)
++#define IOCSIZE_SHIFT (_IOC_SIZESHIFT)
+#endif /* _KERNEL */
+
-+#define DRM_IOCTL_NR(n) _IOC_NR(n)
-+#define DRM_IOC_VOID IOC_VOID
-+#define DRM_IOC_READ IOC_OUT
-+#define DRM_IOC_WRITE IOC_IN
-+#define DRM_IOC_READWRITE IOC_INOUT
-+#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
++#define DRM_IOCTL_NR(n) _IOC_NR(n)
++#define DRM_IOC_VOID IOC_VOID
++#define DRM_IOC_READ IOC_OUT
++#define DRM_IOC_WRITE IOC_IN
++#define DRM_IOC_READWRITE IOC_INOUT
++#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
+
-+#endif /* __Solaris__ or sun */
- #define XFREE86_VERSION(major,minor,patch,snap) \
- ((major << 16) | (minor << 8) | patch)
-
-@@ -140,8 +201,8 @@ typedef unsigned long long drm_u64_t;
++#endif /* __Solaris__ or __sun */
++
+ #ifdef __OpenBSD__
+ #define DRM_MAJOR 81
+ #endif
+@@ -112,7 +176,7 @@
typedef unsigned int drm_handle_t;
#else
#include <sys/types.h>
--typedef u_int64_t drm_u64_t;
-typedef unsigned long drm_handle_t; /**< To mapped regions */
-+typedef uint64_t drm_u64_t;
+typedef unsigned long long drm_handle_t; /**< To mapped regions */
#endif
typedef unsigned int drm_context_t; /**< GLXContext handle */
typedef unsigned int drm_drawable_t;
-@@ -206,7 +267,9 @@ typedef struct drm_hw_lock {
+@@ -169,7 +233,9 @@ struct drm_hw_lock {
#ifdef __SIZE_TYPE__
# define DRM_SIZE_T __SIZE_TYPE__
#else
-+#if !defined(__SOLARIS__) && !defined(sun)
++#if !defined(__SOLARIS__) && !defined(__sun)
# warning "__SIZE_TYPE__ not defined. Assuming sizeof(size_t) == sizeof(unsigned long)!"
+#endif
# define DRM_SIZE_T unsigned long
#endif
-@@ -301,12 +364,13 @@ typedef struct drm_ctx_priv_map {
+@@ -264,12 +330,13 @@ struct drm_ctx_priv_map {
* \sa drmAddMap().
*/
- typedef struct drm_map {
+ struct drm_map {
- unsigned long offset; /**< Requested physical address (0 for SAREA)*/
+ 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 */
++ unsigned long long handle;
++ /**< User-space: "Handle" to pass to mmap() */
++ /**< Kernel-space: kernel-virtual address */
unsigned long size; /**< Requested physical size (bytes) */
- drm_map_type_t type; /**< Type of memory to map */
- drm_map_flags_t flags; /**< Flags */
+ enum drm_map_type type; /**< Type of memory to map */
+ enum drm_map_flags flags; /**< Flags */
- void *handle; /**< User-space: "Handle" to pass to mmap() */
- /**< Kernel-space: kernel-virtual address */
int mtrr; /**< MTRR slot used */
/* Private data */
- } drm_map_t;
-@@ -413,18 +477,19 @@ typedef enum drm_dma_flags {
+ };
+@@ -376,18 +443,20 @@ enum drm_dma_flags {
*
* \sa drmAddBufs().
*/
+typedef enum {
-+ _DRM_PAGE_ALIGN = 0x01, /**< Align on page boundaries for DMA */
-+ _DRM_AGP_BUFFER = 0x02, /**< Buffer is in AGP space */
-+ _DRM_SG_BUFFER = 0x04, /**< Scatter/gather memory buffer */
-+ _DRM_FB_BUFFER = 0x08, /**< Buffer is in frame buffer */
-+ _DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */
++ _DRM_PAGE_ALIGN = 0x01, /**< Align on page boundaries for DMA */
++ _DRM_AGP_BUFFER = 0x02, /**< Buffer is in AGP space */
++ _DRM_SG_BUFFER = 0x04, /**< Scatter/gather memory buffer */
++ _DRM_FB_BUFFER = 0x08, /**< Buffer is in frame buffer */
++ _DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */
+} drm_buf_flag;
- typedef struct drm_buf_desc {
++
+ struct drm_buf_desc {
int count; /**< Number of buffers of this size */
int size; /**< Size in bytes */
int low_mark; /**< Low water mark */
@@ -225,21 +221,15 @@
- _DRM_FB_BUFFER = 0x08, /**< Buffer is in frame buffer */
- _DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */
- } flags;
-+ drm_buf_flag flags;
++ drm_buf_flag flags;
unsigned long agp_start; /**<
* Start address of where the AGP buffers are
* in the AGP aperture
-@@ -470,6 +535,7 @@ typedef struct drm_buf_map {
+@@ -433,6 +502,7 @@ struct drm_buf_map {
void __user *virtual; /**< Mmap'd area in user-virtual */
#endif
- drm_buf_pub_t __user *list; /**< Buffer information */
+ struct drm_buf_pub __user *list; /**< Buffer information */
+ int fd;
- } drm_buf_map_t;
+ };
/**
-@@ -930,4 +996,4 @@ typedef union drm_mm_init_arg{
- #define DRM_COMMAND_BASE 0x40
- #define DRM_COMMAND_END 0xA0
-
--#endif
-+#endif /* _DRM_H_ */