Merge from FreeBSD-current. Mostly 64-bit cleanliness fixes, but a few
authorEric Anholt <anholt@freebsd.org>
Tue, 11 May 2004 04:43:43 +0000 (04:43 +0000)
committerEric Anholt <anholt@freebsd.org>
Tue, 11 May 2004 04:43:43 +0000 (04:43 +0000)
    driver interface changes from -current.

12 files changed:
bsd-core/drm_drv.c
bsd-core/drm_irq.c
bsd-core/drm_os_freebsd.h
bsd-core/drm_vm.c
bsd/drm_drv.h
bsd/drm_irq.h
bsd/drm_os_freebsd.h
bsd/drm_vm.h
shared-core/sis_ds.h
shared-core/sis_mm.c
shared/sis_ds.h
shared/sis_mm.c

index 4fa785a..8ad130a 100644 (file)
@@ -211,6 +211,9 @@ const char *DRM(find_description)(int vendor, int device);
 
 #ifdef __FreeBSD__
 static struct cdevsw DRM(cdevsw) = {
+#if __FreeBSD_version >= 502103
+       .d_version =    D_VERSION,
+#endif
        .d_open =       DRM( open ),
        .d_close =      DRM( close ),
        .d_read =       DRM( read ),
@@ -218,8 +221,12 @@ static struct cdevsw DRM(cdevsw) = {
        .d_poll =       DRM( poll ),
        .d_mmap =       DRM( mmap ),
        .d_name =       DRIVER_NAME,
-       .d_maj =        CDEV_MAJOR,
-       .d_flags =      D_TTY | D_TRACKCLOSE,
+#if __FreeBSD_version >= 502103
+       .d_flags =      D_TRACKCLOSE | D_NEEDGIANT,
+#else
+       .d_maj =        145,
+       .d_flags =      D_TRACKCLOSE,
+#endif
 #if __FreeBSD_version < 500000
        .d_bmaj =       -1
 #endif
@@ -830,7 +837,7 @@ int DRM(close)(dev_t kdev, int flags, int fmt, DRM_STRUCTPROC *p)
        drm_file_t *priv;
        DRM_DEVICE;
        int retcode = 0;
-       DRMFILE filp = (void *)(DRM_CURRENTPID);
+       DRMFILE filp = (void *)(uintptr_t)(DRM_CURRENTPID);
        
        DRM_DEBUG( "open_count = %d\n", dev->open_count );
 
@@ -908,7 +915,7 @@ int DRM(close)(dev_t kdev, int flags, int fmt, DRM_STRUCTPROC *p)
                }
        }
 #elif __HAVE_DMA
-       DRM(reclaim_buffers)( dev, (void *)priv->pid );
+       DRM(reclaim_buffers)( dev, (void *)(uintptr_t)priv->pid );
 #endif
 
 #if defined (__FreeBSD__) && (__FreeBSD_version >= 500000)
@@ -953,7 +960,7 @@ int DRM(ioctl)(dev_t kdev, u_long cmd, caddr_t data, int flags,
        int nr = DRM_IOCTL_NR(cmd);
        drm_file_t *priv;
 
-       DRM_GET_PRIV_WITH_RETURN(priv, (DRMFILE)DRM_CURRENTPID);
+       DRM_GET_PRIV_WITH_RETURN(priv, (DRMFILE)(uintptr_t)DRM_CURRENTPID);
 
        atomic_inc( &dev->counts[_DRM_STAT_IOCTLS] );
        ++priv->ioctl_count;
@@ -1008,7 +1015,7 @@ int DRM(ioctl)(dev_t kdev, u_long cmd, caddr_t data, int flags,
            !priv->authenticated))
                return EACCES;
 
-       retcode = func(kdev, cmd, data, flags, p, (void *)DRM_CURRENTPID);
+       retcode = func(kdev, cmd, data, flags, p, (void *)(uintptr_t)DRM_CURRENTPID);
 
        return DRM_ERR(retcode);
 }
@@ -1039,7 +1046,7 @@ int DRM(lock)( DRM_IOCTL_ARGS )
        DRM_LOCK();
        for (;;) {
                if (DRM(lock_take)(&dev->lock.hw_lock->lock, lock.context)) {
-                       dev->lock.filp = (void *)DRM_CURRENTPID;
+                       dev->lock.filp = (void *)(uintptr_t)DRM_CURRENTPID;
                        dev->lock.lock_time = jiffies;
                        atomic_inc(&dev->counts[_DRM_STAT_LOCKS]);
                        break;  /* Got lock */
index 418e697..eec6ab9 100644 (file)
@@ -97,8 +97,8 @@ int DRM(irq_install)(drm_device_t *dev)
                                /* Install handler */
 #ifdef __FreeBSD__
        dev->irqrid = 0;
-       dev->irqr = bus_alloc_resource(dev->device, SYS_RES_IRQ, &dev->irqrid,
-                                     0, ~0, 1, RF_SHAREABLE);
+       dev->irqr = bus_alloc_resource_any(dev->device, SYS_RES_IRQ, 
+                                     &dev->irqrid, RF_SHAREABLE);
        if (!dev->irqr) {
                retcode = ENOENT;
                goto err;
index 0607955..073ceb3 100644 (file)
 #define DRM_DEV_MODE   (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP)
 #define DRM_DEV_UID    0
 #define DRM_DEV_GID    0
-#define CDEV_MAJOR     145
 
 #if __FreeBSD_version >= 500000
 #define DRM_CURPROC            curthread
@@ -179,7 +178,7 @@ typedef void                        irqreturn_t;
 
 #define DRM_GET_PRIV_WITH_RETURN(_priv, _filp)                 \
 do {                                                           \
-       if (_filp != (DRMFILE)DRM_CURRENTPID) {                 \
+       if (_filp != (DRMFILE)(intptr_t)DRM_CURRENTPID) {       \
                DRM_ERROR("filp doesn't match curproc\n");      \
                return EINVAL;                                  \
        }                                                       \
@@ -292,6 +291,12 @@ for ( ret = 0 ; !ret && !(condition) ; ) {         \
 #define DRM_READMEMORYBARRIER()                alpha_mb();
 #define DRM_WRITEMEMORYBARRIER()       alpha_wmb();
 #define DRM_MEMORYBARRIER()            alpha_mb();
+#elif defined(__amd64__)
+#define DRM_READMEMORYBARRIER()                __asm __volatile( \
+                                       "lock; addl $0,0(%%rsp)" : : : "memory");
+#define DRM_WRITEMEMORYBARRIER()       __asm __volatile("" : : : "memory");
+#define DRM_MEMORYBARRIER()            __asm __volatile( \
+                                       "lock; addl $0,0(%%rsp)" : : : "memory");
 #endif
 
 #define PAGE_ALIGN(addr) round_page(addr)
@@ -305,6 +310,11 @@ for ( ret = 0 ; !ret && !(condition) ; ) {         \
 MALLOC_DECLARE(malloctype);
 #undef malloctype
 
+#if __FreeBSD_version < 502109
+#define bus_alloc_resource_any(dev, type, rid, flags) \
+       bus_alloc_resource(dev, type, rid, 0ul, ~0ul, 1, flags)
+#endif
+
 #if __FreeBSD_version >= 480000
 #define cpu_to_le32(x) htole32(x)
 #define le32_to_cpu(x) le32toh(x)
index e4ae8c7..6f0c01e 100644 (file)
@@ -65,7 +65,7 @@ paddr_t DRM(mmap)(dev_t kdev, off_t offset, int prot)
        drm_map_list_entry_t *listentry = NULL;
        drm_file_t *priv;
 
-       DRM_GET_PRIV_WITH_RETURN(priv, (DRMFILE)DRM_CURRENTPID);
+       DRM_GET_PRIV_WITH_RETURN(priv, (DRMFILE)(uintptr_t)DRM_CURRENTPID);
 
        if (!priv->authenticated)
                return DRM_ERR(EACCES);
index 4fa785a..8ad130a 100644 (file)
@@ -211,6 +211,9 @@ const char *DRM(find_description)(int vendor, int device);
 
 #ifdef __FreeBSD__
 static struct cdevsw DRM(cdevsw) = {
+#if __FreeBSD_version >= 502103
+       .d_version =    D_VERSION,
+#endif
        .d_open =       DRM( open ),
        .d_close =      DRM( close ),
        .d_read =       DRM( read ),
@@ -218,8 +221,12 @@ static struct cdevsw DRM(cdevsw) = {
        .d_poll =       DRM( poll ),
        .d_mmap =       DRM( mmap ),
        .d_name =       DRIVER_NAME,
-       .d_maj =        CDEV_MAJOR,
-       .d_flags =      D_TTY | D_TRACKCLOSE,
+#if __FreeBSD_version >= 502103
+       .d_flags =      D_TRACKCLOSE | D_NEEDGIANT,
+#else
+       .d_maj =        145,
+       .d_flags =      D_TRACKCLOSE,
+#endif
 #if __FreeBSD_version < 500000
        .d_bmaj =       -1
 #endif
@@ -830,7 +837,7 @@ int DRM(close)(dev_t kdev, int flags, int fmt, DRM_STRUCTPROC *p)
        drm_file_t *priv;
        DRM_DEVICE;
        int retcode = 0;
-       DRMFILE filp = (void *)(DRM_CURRENTPID);
+       DRMFILE filp = (void *)(uintptr_t)(DRM_CURRENTPID);
        
        DRM_DEBUG( "open_count = %d\n", dev->open_count );
 
@@ -908,7 +915,7 @@ int DRM(close)(dev_t kdev, int flags, int fmt, DRM_STRUCTPROC *p)
                }
        }
 #elif __HAVE_DMA
-       DRM(reclaim_buffers)( dev, (void *)priv->pid );
+       DRM(reclaim_buffers)( dev, (void *)(uintptr_t)priv->pid );
 #endif
 
 #if defined (__FreeBSD__) && (__FreeBSD_version >= 500000)
@@ -953,7 +960,7 @@ int DRM(ioctl)(dev_t kdev, u_long cmd, caddr_t data, int flags,
        int nr = DRM_IOCTL_NR(cmd);
        drm_file_t *priv;
 
-       DRM_GET_PRIV_WITH_RETURN(priv, (DRMFILE)DRM_CURRENTPID);
+       DRM_GET_PRIV_WITH_RETURN(priv, (DRMFILE)(uintptr_t)DRM_CURRENTPID);
 
        atomic_inc( &dev->counts[_DRM_STAT_IOCTLS] );
        ++priv->ioctl_count;
@@ -1008,7 +1015,7 @@ int DRM(ioctl)(dev_t kdev, u_long cmd, caddr_t data, int flags,
            !priv->authenticated))
                return EACCES;
 
-       retcode = func(kdev, cmd, data, flags, p, (void *)DRM_CURRENTPID);
+       retcode = func(kdev, cmd, data, flags, p, (void *)(uintptr_t)DRM_CURRENTPID);
 
        return DRM_ERR(retcode);
 }
@@ -1039,7 +1046,7 @@ int DRM(lock)( DRM_IOCTL_ARGS )
        DRM_LOCK();
        for (;;) {
                if (DRM(lock_take)(&dev->lock.hw_lock->lock, lock.context)) {
-                       dev->lock.filp = (void *)DRM_CURRENTPID;
+                       dev->lock.filp = (void *)(uintptr_t)DRM_CURRENTPID;
                        dev->lock.lock_time = jiffies;
                        atomic_inc(&dev->counts[_DRM_STAT_LOCKS]);
                        break;  /* Got lock */
index 418e697..eec6ab9 100644 (file)
@@ -97,8 +97,8 @@ int DRM(irq_install)(drm_device_t *dev)
                                /* Install handler */
 #ifdef __FreeBSD__
        dev->irqrid = 0;
-       dev->irqr = bus_alloc_resource(dev->device, SYS_RES_IRQ, &dev->irqrid,
-                                     0, ~0, 1, RF_SHAREABLE);
+       dev->irqr = bus_alloc_resource_any(dev->device, SYS_RES_IRQ, 
+                                     &dev->irqrid, RF_SHAREABLE);
        if (!dev->irqr) {
                retcode = ENOENT;
                goto err;
index 0607955..073ceb3 100644 (file)
 #define DRM_DEV_MODE   (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP)
 #define DRM_DEV_UID    0
 #define DRM_DEV_GID    0
-#define CDEV_MAJOR     145
 
 #if __FreeBSD_version >= 500000
 #define DRM_CURPROC            curthread
@@ -179,7 +178,7 @@ typedef void                        irqreturn_t;
 
 #define DRM_GET_PRIV_WITH_RETURN(_priv, _filp)                 \
 do {                                                           \
-       if (_filp != (DRMFILE)DRM_CURRENTPID) {                 \
+       if (_filp != (DRMFILE)(intptr_t)DRM_CURRENTPID) {       \
                DRM_ERROR("filp doesn't match curproc\n");      \
                return EINVAL;                                  \
        }                                                       \
@@ -292,6 +291,12 @@ for ( ret = 0 ; !ret && !(condition) ; ) {         \
 #define DRM_READMEMORYBARRIER()                alpha_mb();
 #define DRM_WRITEMEMORYBARRIER()       alpha_wmb();
 #define DRM_MEMORYBARRIER()            alpha_mb();
+#elif defined(__amd64__)
+#define DRM_READMEMORYBARRIER()                __asm __volatile( \
+                                       "lock; addl $0,0(%%rsp)" : : : "memory");
+#define DRM_WRITEMEMORYBARRIER()       __asm __volatile("" : : : "memory");
+#define DRM_MEMORYBARRIER()            __asm __volatile( \
+                                       "lock; addl $0,0(%%rsp)" : : : "memory");
 #endif
 
 #define PAGE_ALIGN(addr) round_page(addr)
@@ -305,6 +310,11 @@ for ( ret = 0 ; !ret && !(condition) ; ) {         \
 MALLOC_DECLARE(malloctype);
 #undef malloctype
 
+#if __FreeBSD_version < 502109
+#define bus_alloc_resource_any(dev, type, rid, flags) \
+       bus_alloc_resource(dev, type, rid, 0ul, ~0ul, 1, flags)
+#endif
+
 #if __FreeBSD_version >= 480000
 #define cpu_to_le32(x) htole32(x)
 #define le32_to_cpu(x) le32toh(x)
index e4ae8c7..6f0c01e 100644 (file)
@@ -65,7 +65,7 @@ paddr_t DRM(mmap)(dev_t kdev, off_t offset, int prot)
        drm_map_list_entry_t *listentry = NULL;
        drm_file_t *priv;
 
-       DRM_GET_PRIV_WITH_RETURN(priv, (DRMFILE)DRM_CURRENTPID);
+       DRM_GET_PRIV_WITH_RETURN(priv, (DRMFILE)(uintptr_t)DRM_CURRENTPID);
 
        if (!priv->authenticated)
                return DRM_ERR(EACCES);
index 482693f..bbd3fe1 100644 (file)
@@ -35,7 +35,7 @@
 
 #define SET_SIZE 5000
 
-typedef unsigned int ITEM_TYPE;
+typedef unsigned long ITEM_TYPE;
 
 typedef struct {
        ITEM_TYPE val;
index 092096c..7b10db9 100644 (file)
@@ -371,7 +371,7 @@ int sis_final_context(int context)
 
        if (i < MAX_CONTEXT) {
                set_t *set;
-               unsigned int item;
+               ITEM_TYPE item;
                int retval;
 
                DRM_DEBUG("find socket %d, context = %d\n", i, context);
@@ -380,7 +380,7 @@ int sis_final_context(int context)
                set = global_ppriv[i].sets[0];
                retval = setFirst(set, &item);
                while (retval) {
-                       DRM_DEBUG("free video memory 0x%x\n", item);
+                       DRM_DEBUG("free video memory 0x%lx\n", item);
 #if defined(__linux__) && defined(CONFIG_FB_SIS)
                        sis_free(item);
 #else
@@ -394,7 +394,7 @@ int sis_final_context(int context)
                set = global_ppriv[i].sets[1];
                retval = setFirst(set, &item);
                while (retval) {
-                       DRM_DEBUG("free agp memory 0x%x\n", item);
+                       DRM_DEBUG("free agp memory 0x%lx\n", item);
                        mmFreeMem((PMemBlock)item);
                        retval = setNext(set, &item);
                }
index 482693f..bbd3fe1 100644 (file)
@@ -35,7 +35,7 @@
 
 #define SET_SIZE 5000
 
-typedef unsigned int ITEM_TYPE;
+typedef unsigned long ITEM_TYPE;
 
 typedef struct {
        ITEM_TYPE val;
index 092096c..7b10db9 100644 (file)
@@ -371,7 +371,7 @@ int sis_final_context(int context)
 
        if (i < MAX_CONTEXT) {
                set_t *set;
-               unsigned int item;
+               ITEM_TYPE item;
                int retval;
 
                DRM_DEBUG("find socket %d, context = %d\n", i, context);
@@ -380,7 +380,7 @@ int sis_final_context(int context)
                set = global_ppriv[i].sets[0];
                retval = setFirst(set, &item);
                while (retval) {
-                       DRM_DEBUG("free video memory 0x%x\n", item);
+                       DRM_DEBUG("free video memory 0x%lx\n", item);
 #if defined(__linux__) && defined(CONFIG_FB_SIS)
                        sis_free(item);
 #else
@@ -394,7 +394,7 @@ int sis_final_context(int context)
                set = global_ppriv[i].sets[1];
                retval = setFirst(set, &item);
                while (retval) {
-                       DRM_DEBUG("free agp memory 0x%x\n", item);
+                       DRM_DEBUG("free agp memory 0x%lx\n", item);
                        mmFreeMem((PMemBlock)item);
                        retval = setNext(set, &item);
                }