open-src/lib/libdrm/solaris-drm-port.patch
changeset 606 068c11b419c9
parent 403 5a3d5128161c
child 705 24ca414edbff
--- 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_ */