OSDN Git Service

Compile fixes for recent 2.5/2.6 Linux kernels. I hope this doesn't break
authorMichel Daenzer <michel@daenzer.net>
Fri, 25 Jul 2003 10:50:39 +0000 (10:50 +0000)
committerMichel Daenzer <michel@daenzer.net>
Fri, 25 Jul 2003 10:50:39 +0000 (10:50 +0000)
    the i830 driver or the BSDs. :)

27 files changed:
bsd-core/drmP.h
bsd-core/drm_dma.c
bsd-core/drm_os_freebsd.h
bsd-core/drm_os_netbsd.h
bsd/drmP.h
bsd/drm_dma.h
bsd/drm_os_freebsd.h
bsd/drm_os_netbsd.h
linux-core/drmP.h
linux-core/drm_agpsupport.c
linux-core/drm_memory.h
linux-core/drm_memory_debug.h
linux-core/drm_os_linux.h
linux-core/i830_irq.c
linux/drmP.h
linux/drm_agpsupport.h
linux/drm_memory.h
linux/drm_memory_debug.h
linux/drm_os_linux.h
linux/gamma_dma.c
linux/i830_irq.c
shared-core/mga_irq.c
shared-core/r128_irq.c
shared-core/radeon_irq.c
shared/mga_irq.c
shared/r128_irq.c
shared/radeon_irq.c

index 94a5710..8b38d23 100644 (file)
@@ -446,7 +446,7 @@ extern void      DRM(reclaim_buffers)(drm_device_t *dev, DRMFILE filp);
 #if __HAVE_DMA_IRQ
 extern int           DRM(irq_install)( drm_device_t *dev, int irq );
 extern int           DRM(irq_uninstall)( drm_device_t *dev );
-extern void          DRM(dma_service)( DRM_IRQ_ARGS );
+extern DRM_IRQ_RET   DRM(dma_service)( DRM_IRQ_ARGS );
 extern void          DRM(driver_irq_preinstall)( drm_device_t *dev );
 extern void          DRM(driver_irq_postinstall)( drm_device_t *dev );
 extern void          DRM(driver_irq_uninstall)( drm_device_t *dev );
index 10c26e3..88ca2e3 100644 (file)
@@ -217,7 +217,7 @@ int DRM(irq_install)( drm_device_t *dev, int irq )
        if ( retcode ) {
 #elif defined(__NetBSD__)
        dev->irqh = pci_intr_establish(&dev->pa.pa_pc, dev->ih, IPL_TTY,
-                                     (int (*)(DRM_IRQ_ARGS))DRM(dma_service), dev);
+                                     (DRM_IRQ_RET (*)(DRM_IRQ_ARGS))DRM(dma_service), dev);
        if ( !dev->irqh ) {
 #endif
                DRM_LOCK;
index 52f7aa2..0ab201a 100644 (file)
 #define DRM_SUSER(p)           suser(p)
 #define DRM_TASKQUEUE_ARGS     void *arg, int pending
 #define DRM_IRQ_ARGS           void *arg
+#define DRM_IRQ_RET            void
+#define DRM_NONE
+#define DRM_HANDLED
 #define DRM_DEVICE             drm_device_t    *dev    = kdev->si_drv1
 #define DRM_MALLOC(size)       malloc( size, DRM(M_DRM), M_NOWAIT )
 #define DRM_FREE(pt,size)              free( pt, DRM(M_DRM) )
index 6dfea61..d58f668 100644 (file)
@@ -85,6 +85,9 @@ extern struct cfdriver DRM(cd);
 #define DRM_SUSER(p)           suser(p->p_ucred, &p->p_acflag)
 #define DRM_TASKQUEUE_ARGS     void *dev, int pending
 #define DRM_IRQ_ARGS           void *arg
+#define DRM_IRQ_RET            int
+#define DRM_NONE               /* FIXME */
+#define DRM_HANDLED            /* FIXME */
 #define DRM_DEVICE             drm_device_t *dev = device_lookup(&DRM(cd), minor(kdev))
 /* XXX Not sure if this is the 'right' version.. */
 #if __NetBSD_Version__ >= 106140000
index 94a5710..8b38d23 100644 (file)
@@ -446,7 +446,7 @@ extern void      DRM(reclaim_buffers)(drm_device_t *dev, DRMFILE filp);
 #if __HAVE_DMA_IRQ
 extern int           DRM(irq_install)( drm_device_t *dev, int irq );
 extern int           DRM(irq_uninstall)( drm_device_t *dev );
-extern void          DRM(dma_service)( DRM_IRQ_ARGS );
+extern DRM_IRQ_RET   DRM(dma_service)( DRM_IRQ_ARGS );
 extern void          DRM(driver_irq_preinstall)( drm_device_t *dev );
 extern void          DRM(driver_irq_postinstall)( drm_device_t *dev );
 extern void          DRM(driver_irq_uninstall)( drm_device_t *dev );
index 10c26e3..88ca2e3 100644 (file)
@@ -217,7 +217,7 @@ int DRM(irq_install)( drm_device_t *dev, int irq )
        if ( retcode ) {
 #elif defined(__NetBSD__)
        dev->irqh = pci_intr_establish(&dev->pa.pa_pc, dev->ih, IPL_TTY,
-                                     (int (*)(DRM_IRQ_ARGS))DRM(dma_service), dev);
+                                     (DRM_IRQ_RET (*)(DRM_IRQ_ARGS))DRM(dma_service), dev);
        if ( !dev->irqh ) {
 #endif
                DRM_LOCK;
index 52f7aa2..0ab201a 100644 (file)
 #define DRM_SUSER(p)           suser(p)
 #define DRM_TASKQUEUE_ARGS     void *arg, int pending
 #define DRM_IRQ_ARGS           void *arg
+#define DRM_IRQ_RET            void
+#define DRM_NONE
+#define DRM_HANDLED
 #define DRM_DEVICE             drm_device_t    *dev    = kdev->si_drv1
 #define DRM_MALLOC(size)       malloc( size, DRM(M_DRM), M_NOWAIT )
 #define DRM_FREE(pt,size)              free( pt, DRM(M_DRM) )
index 6dfea61..d58f668 100644 (file)
@@ -85,6 +85,9 @@ extern struct cfdriver DRM(cd);
 #define DRM_SUSER(p)           suser(p->p_ucred, &p->p_acflag)
 #define DRM_TASKQUEUE_ARGS     void *dev, int pending
 #define DRM_IRQ_ARGS           void *arg
+#define DRM_IRQ_RET            int
+#define DRM_NONE               /* FIXME */
+#define DRM_HANDLED            /* FIXME */
 #define DRM_DEVICE             drm_device_t *dev = device_lookup(&DRM(cd), minor(kdev))
 /* XXX Not sure if this is the 'right' version.. */
 #if __NetBSD_Version__ >= 106140000
index 2989c64..7e052a8 100644 (file)
@@ -580,7 +580,7 @@ typedef struct drm_device_dma {
  */
 typedef struct drm_agp_mem {
        unsigned long      handle;      /**< handle */
-       agp_memory         *memory;     
+       DRM_AGP_MEM        *memory;     
        unsigned long      bound;       /**< address */
        int                pages;
        struct drm_agp_mem *prev;       /**< previous entry */
@@ -593,7 +593,7 @@ typedef struct drm_agp_mem {
  * \sa DRM(agp_init)() and drm_device::agp.
  */
 typedef struct drm_agp_head {
-       agp_kern_info      agp_info;    /**< AGP device information */
+       DRM_AGP_KERN       agp_info;    /**< AGP device information */
        drm_agp_mem_t      *memory;     /**< memory entries */
        unsigned long      mode;        /**< AGP mode */
        int                enabled;     /**< whether the AGP bus as been enabled */
@@ -829,10 +829,10 @@ extern void            *DRM(ioremap_nocache)(unsigned long offset, unsigned long size,
 extern void         DRM(ioremapfree)(void *pt, unsigned long size, drm_device_t *dev);
 
 #if __REALLY_HAVE_AGP
-extern agp_memory    *DRM(alloc_agp)(int pages, u32 type);
-extern int           DRM(free_agp)(agp_memory *handle, int pages);
-extern int           DRM(bind_agp)(agp_memory *handle, unsigned int start);
-extern int           DRM(unbind_agp)(agp_memory *handle);
+extern DRM_AGP_MEM   *DRM(alloc_agp)(int pages, u32 type);
+extern int           DRM(free_agp)(DRM_AGP_MEM *handle, int pages);
+extern int           DRM(bind_agp)(DRM_AGP_MEM *handle, unsigned int start);
+extern int           DRM(unbind_agp)(DRM_AGP_MEM *handle);
 #endif
 
                                /* Misc. IOCTL support (drm_ioctl.h) */
@@ -937,8 +937,7 @@ extern int           DRM(control)( struct inode *inode, struct file *filp,
                                   unsigned int cmd, unsigned long arg );
 extern int           DRM(irq_install)( drm_device_t *dev, int irq );
 extern int           DRM(irq_uninstall)( drm_device_t *dev );
-extern void          DRM(dma_service)( int irq, void *device,
-                                      struct pt_regs *regs );
+extern DRM_IRQ_RET   DRM(dma_service)( DRM_IRQ_ARGS );
 extern void          DRM(driver_irq_preinstall)( drm_device_t *dev );
 extern void          DRM(driver_irq_postinstall)( drm_device_t *dev );
 extern void          DRM(driver_irq_uninstall)( drm_device_t *dev );
@@ -976,10 +975,10 @@ extern int            DRM(agp_unbind)(struct inode *inode, struct file *filp,
                                      unsigned int cmd, unsigned long arg);
 extern int            DRM(agp_bind)(struct inode *inode, struct file *filp,
                                    unsigned int cmd, unsigned long arg);
-extern agp_memory     *DRM(agp_allocate_memory)(size_t pages, u32 type);
-extern int            DRM(agp_free_memory)(agp_memory *handle);
-extern int            DRM(agp_bind_memory)(agp_memory *handle, off_t start);
-extern int            DRM(agp_unbind_memory)(agp_memory *handle);
+extern DRM_AGP_MEM    *DRM(agp_allocate_memory)(size_t pages, u32 type);
+extern int            DRM(agp_free_memory)(DRM_AGP_MEM *handle);
+extern int            DRM(agp_bind_memory)(DRM_AGP_MEM *handle, off_t start);
+extern int            DRM(agp_unbind_memory)(DRM_AGP_MEM *handle);
 #endif
 
                                /* Stub support (drm_stub.h) */
index 6eaadfc..a8f6197 100644 (file)
@@ -63,7 +63,7 @@ int DRM(agp_info)(struct inode *inode, struct file *filp,
 {
        drm_file_t       *priv   = filp->private_data;
        drm_device_t     *dev    = priv->dev;
-       agp_kern_info    *kern;
+       DRM_AGP_KERN     *kern;
        drm_agp_info_t   info;
 
        if (!dev->agp || !dev->agp->acquired || !drm_agp->copy_info)
@@ -201,7 +201,7 @@ int DRM(agp_alloc)(struct inode *inode, struct file *filp,
        drm_device_t     *dev    = priv->dev;
        drm_agp_buffer_t request;
        drm_agp_mem_t    *entry;
-       agp_memory       *memory;
+       DRM_AGP_MEM      *memory;
        unsigned long    pages;
        u32              type;
 
@@ -424,14 +424,14 @@ void DRM(agp_uninit)(void)
 }
 
 /** Calls drm_agp->allocate_memory() */
-agp_memory *DRM(agp_allocate_memory)(size_t pages, u32 type)
+DRM_AGP_MEM *DRM(agp_allocate_memory)(size_t pages, u32 type)
 {
        if (!drm_agp->allocate_memory) return NULL;
        return drm_agp->allocate_memory(pages, type);
 }
 
 /** Calls drm_agp->free_memory() */
-int DRM(agp_free_memory)(agp_memory *handle)
+int DRM(agp_free_memory)(DRM_AGP_MEM *handle)
 {
        if (!handle || !drm_agp->free_memory) return 0;
        drm_agp->free_memory(handle);
@@ -439,14 +439,14 @@ int DRM(agp_free_memory)(agp_memory *handle)
 }
 
 /** Calls drm_agp->bind_memory() */
-int DRM(agp_bind_memory)(agp_memory *handle, off_t start)
+int DRM(agp_bind_memory)(DRM_AGP_MEM *handle, off_t start)
 {
        if (!handle || !drm_agp->bind_memory) return -EINVAL;
        return drm_agp->bind_memory(handle, start);
 }
 
 /** Calls drm_agp->unbind_memory() */
-int DRM(agp_unbind_memory)(agp_memory *handle)
+int DRM(agp_unbind_memory)(DRM_AGP_MEM *handle)
 {
        if (!handle || !drm_agp->unbind_memory) return -EINVAL;
        return drm_agp->unbind_memory(handle);
index 2a969fc..870f049 100644 (file)
@@ -332,25 +332,25 @@ void DRM(ioremapfree)(void *pt, unsigned long size, drm_device_t *dev)
 
 #if __REALLY_HAVE_AGP
 /** Wrapper around agp_allocate_memory() */
-agp_memory *DRM(alloc_agp)(int pages, u32 type)
+DRM_AGP_MEM *DRM(alloc_agp)(int pages, u32 type)
 {
        return DRM(agp_allocate_memory)(pages, type);
 }
 
 /** Wrapper around agp_free_memory() */
-int DRM(free_agp)(agp_memory *handle, int pages)
+int DRM(free_agp)(DRM_AGP_MEM *handle, int pages)
 {
        return DRM(agp_free_memory)(handle) ? 0 : -EINVAL;
 }
 
 /** Wrapper around agp_bind_memory() */
-int DRM(bind_agp)(agp_memory *handle, unsigned int start)
+int DRM(bind_agp)(DRM_AGP_MEM *handle, unsigned int start)
 {
        return DRM(agp_bind_memory)(handle, start);
 }
 
 /** Wrapper around agp_unbind_memory() */
-int DRM(unbind_agp)(agp_memory *handle)
+int DRM(unbind_agp)(DRM_AGP_MEM *handle)
 {
        return DRM(agp_unbind_memory)(handle);
 }
index 5cfff83..3ef2a05 100644 (file)
@@ -343,9 +343,9 @@ void DRM(ioremapfree)(void *pt, unsigned long size, drm_device_t *dev)
 
 #if __REALLY_HAVE_AGP
 
-agp_memory *DRM(alloc_agp)(int pages, u32 type)
+DRM_AGP_MEM *DRM(alloc_agp)(int pages, u32 type)
 {
-       agp_memory *handle;
+       DRM_AGP_MEM *handle;
 
        if (!pages) {
                DRM_MEM_ERROR(DRM_MEM_TOTALAGP, "Allocating 0 pages\n");
@@ -366,7 +366,7 @@ agp_memory *DRM(alloc_agp)(int pages, u32 type)
        return NULL;
 }
 
-int DRM(free_agp)(agp_memory *handle, int pages)
+int DRM(free_agp)(DRM_AGP_MEM *handle, int pages)
 {
        int           alloc_count;
        int           free_count;
@@ -395,7 +395,7 @@ int DRM(free_agp)(agp_memory *handle, int pages)
        return retval;
 }
 
-int DRM(bind_agp)(agp_memory *handle, unsigned int start)
+int DRM(bind_agp)(DRM_AGP_MEM *handle, unsigned int start)
 {
        int retcode = -EINVAL;
 
@@ -419,7 +419,7 @@ int DRM(bind_agp)(agp_memory *handle, unsigned int start)
        return retcode;
 }
 
-int DRM(unbind_agp)(agp_memory *handle)
+int DRM(unbind_agp)(DRM_AGP_MEM *handle)
 {
        int alloc_count;
        int free_count;
index 66804c5..94230dc 100644 (file)
 #define DRM_DEVICE     drm_file_t      *priv   = filp->private_data; \
                        drm_device_t    *dev    = priv->dev
                        
-/** IRQ handler arguments */
-#define DRM_IRQ_ARGS           int irq, void *arg, struct pt_regs *regs
+/** IRQ handler arguments and return type and values */
+#define DRM_IRQ_ARGS           int irq, void *arg, struct pt_regs *regs
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,69)
+#define DRM_IRQ_RET            void
+#define DRM_IRQ_NONE
+#define DRM_IRQ_HANDLED
+#else
+#define DRM_IRQ_RET            irqreturn_t
+#define DRM_IRQ_NONE           IRQ_NONE
+#define DRM_IRQ_HANDLED                IRQ_HANDLED
+#endif
+
+/** AGP types */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,70)
+#define DRM_AGP_MEM            agp_memory
+#define DRM_AGP_KERN           agp_kern_info
+#else
+#define DRM_AGP_MEM            struct agp_memory
+#define DRM_AGP_KERN           struct agp_kern_info
+#endif
+
 /** Task queue handler arguments */
 #define DRM_TASKQUEUE_ARGS     void *arg
 
index 1fcd9f0..301afc8 100644 (file)
@@ -36,7 +36,7 @@
 #include <linux/delay.h>
 
 
-void DRM(dma_service)(int irq, void *device, struct pt_regs *regs)
+DRM_IRQ_RET DRM(dma_service)( DRM_IRQ_ARGS )
 {
        drm_device_t     *dev = (drm_device_t *)device;
        drm_i830_private_t *dev_priv = (drm_i830_private_t *)dev->dev_private;
@@ -45,15 +45,15 @@ void DRM(dma_service)(int irq, void *device, struct pt_regs *regs)
        temp = I830_READ16(I830REG_INT_IDENTITY_R);
        DRM_DEBUG("%x\n", temp);
 
-       if (temp == 0
-               return;
+       if ( !( temp & 2 ) 
+               return DRM_IRQ_NONE;
 
        I830_WRITE16(I830REG_INT_IDENTITY_R, temp); 
 
-       if (temp & 2) {
-               atomic_inc(&dev_priv->irq_received);
-               wake_up_interruptible(&dev_priv->irq_queue); 
-       }
+       atomic_inc(&dev_priv->irq_received);
+       wake_up_interruptible(&dev_priv->irq_queue); 
+
+       return DRM_IRQ_HANDLED;
 }
 
 
index 2989c64..7e052a8 100644 (file)
@@ -580,7 +580,7 @@ typedef struct drm_device_dma {
  */
 typedef struct drm_agp_mem {
        unsigned long      handle;      /**< handle */
-       agp_memory         *memory;     
+       DRM_AGP_MEM        *memory;     
        unsigned long      bound;       /**< address */
        int                pages;
        struct drm_agp_mem *prev;       /**< previous entry */
@@ -593,7 +593,7 @@ typedef struct drm_agp_mem {
  * \sa DRM(agp_init)() and drm_device::agp.
  */
 typedef struct drm_agp_head {
-       agp_kern_info      agp_info;    /**< AGP device information */
+       DRM_AGP_KERN       agp_info;    /**< AGP device information */
        drm_agp_mem_t      *memory;     /**< memory entries */
        unsigned long      mode;        /**< AGP mode */
        int                enabled;     /**< whether the AGP bus as been enabled */
@@ -829,10 +829,10 @@ extern void            *DRM(ioremap_nocache)(unsigned long offset, unsigned long size,
 extern void         DRM(ioremapfree)(void *pt, unsigned long size, drm_device_t *dev);
 
 #if __REALLY_HAVE_AGP
-extern agp_memory    *DRM(alloc_agp)(int pages, u32 type);
-extern int           DRM(free_agp)(agp_memory *handle, int pages);
-extern int           DRM(bind_agp)(agp_memory *handle, unsigned int start);
-extern int           DRM(unbind_agp)(agp_memory *handle);
+extern DRM_AGP_MEM   *DRM(alloc_agp)(int pages, u32 type);
+extern int           DRM(free_agp)(DRM_AGP_MEM *handle, int pages);
+extern int           DRM(bind_agp)(DRM_AGP_MEM *handle, unsigned int start);
+extern int           DRM(unbind_agp)(DRM_AGP_MEM *handle);
 #endif
 
                                /* Misc. IOCTL support (drm_ioctl.h) */
@@ -937,8 +937,7 @@ extern int           DRM(control)( struct inode *inode, struct file *filp,
                                   unsigned int cmd, unsigned long arg );
 extern int           DRM(irq_install)( drm_device_t *dev, int irq );
 extern int           DRM(irq_uninstall)( drm_device_t *dev );
-extern void          DRM(dma_service)( int irq, void *device,
-                                      struct pt_regs *regs );
+extern DRM_IRQ_RET   DRM(dma_service)( DRM_IRQ_ARGS );
 extern void          DRM(driver_irq_preinstall)( drm_device_t *dev );
 extern void          DRM(driver_irq_postinstall)( drm_device_t *dev );
 extern void          DRM(driver_irq_uninstall)( drm_device_t *dev );
@@ -976,10 +975,10 @@ extern int            DRM(agp_unbind)(struct inode *inode, struct file *filp,
                                      unsigned int cmd, unsigned long arg);
 extern int            DRM(agp_bind)(struct inode *inode, struct file *filp,
                                    unsigned int cmd, unsigned long arg);
-extern agp_memory     *DRM(agp_allocate_memory)(size_t pages, u32 type);
-extern int            DRM(agp_free_memory)(agp_memory *handle);
-extern int            DRM(agp_bind_memory)(agp_memory *handle, off_t start);
-extern int            DRM(agp_unbind_memory)(agp_memory *handle);
+extern DRM_AGP_MEM    *DRM(agp_allocate_memory)(size_t pages, u32 type);
+extern int            DRM(agp_free_memory)(DRM_AGP_MEM *handle);
+extern int            DRM(agp_bind_memory)(DRM_AGP_MEM *handle, off_t start);
+extern int            DRM(agp_unbind_memory)(DRM_AGP_MEM *handle);
 #endif
 
                                /* Stub support (drm_stub.h) */
index 6eaadfc..a8f6197 100644 (file)
@@ -63,7 +63,7 @@ int DRM(agp_info)(struct inode *inode, struct file *filp,
 {
        drm_file_t       *priv   = filp->private_data;
        drm_device_t     *dev    = priv->dev;
-       agp_kern_info    *kern;
+       DRM_AGP_KERN     *kern;
        drm_agp_info_t   info;
 
        if (!dev->agp || !dev->agp->acquired || !drm_agp->copy_info)
@@ -201,7 +201,7 @@ int DRM(agp_alloc)(struct inode *inode, struct file *filp,
        drm_device_t     *dev    = priv->dev;
        drm_agp_buffer_t request;
        drm_agp_mem_t    *entry;
-       agp_memory       *memory;
+       DRM_AGP_MEM      *memory;
        unsigned long    pages;
        u32              type;
 
@@ -424,14 +424,14 @@ void DRM(agp_uninit)(void)
 }
 
 /** Calls drm_agp->allocate_memory() */
-agp_memory *DRM(agp_allocate_memory)(size_t pages, u32 type)
+DRM_AGP_MEM *DRM(agp_allocate_memory)(size_t pages, u32 type)
 {
        if (!drm_agp->allocate_memory) return NULL;
        return drm_agp->allocate_memory(pages, type);
 }
 
 /** Calls drm_agp->free_memory() */
-int DRM(agp_free_memory)(agp_memory *handle)
+int DRM(agp_free_memory)(DRM_AGP_MEM *handle)
 {
        if (!handle || !drm_agp->free_memory) return 0;
        drm_agp->free_memory(handle);
@@ -439,14 +439,14 @@ int DRM(agp_free_memory)(agp_memory *handle)
 }
 
 /** Calls drm_agp->bind_memory() */
-int DRM(agp_bind_memory)(agp_memory *handle, off_t start)
+int DRM(agp_bind_memory)(DRM_AGP_MEM *handle, off_t start)
 {
        if (!handle || !drm_agp->bind_memory) return -EINVAL;
        return drm_agp->bind_memory(handle, start);
 }
 
 /** Calls drm_agp->unbind_memory() */
-int DRM(agp_unbind_memory)(agp_memory *handle)
+int DRM(agp_unbind_memory)(DRM_AGP_MEM *handle)
 {
        if (!handle || !drm_agp->unbind_memory) return -EINVAL;
        return drm_agp->unbind_memory(handle);
index 2a969fc..870f049 100644 (file)
@@ -332,25 +332,25 @@ void DRM(ioremapfree)(void *pt, unsigned long size, drm_device_t *dev)
 
 #if __REALLY_HAVE_AGP
 /** Wrapper around agp_allocate_memory() */
-agp_memory *DRM(alloc_agp)(int pages, u32 type)
+DRM_AGP_MEM *DRM(alloc_agp)(int pages, u32 type)
 {
        return DRM(agp_allocate_memory)(pages, type);
 }
 
 /** Wrapper around agp_free_memory() */
-int DRM(free_agp)(agp_memory *handle, int pages)
+int DRM(free_agp)(DRM_AGP_MEM *handle, int pages)
 {
        return DRM(agp_free_memory)(handle) ? 0 : -EINVAL;
 }
 
 /** Wrapper around agp_bind_memory() */
-int DRM(bind_agp)(agp_memory *handle, unsigned int start)
+int DRM(bind_agp)(DRM_AGP_MEM *handle, unsigned int start)
 {
        return DRM(agp_bind_memory)(handle, start);
 }
 
 /** Wrapper around agp_unbind_memory() */
-int DRM(unbind_agp)(agp_memory *handle)
+int DRM(unbind_agp)(DRM_AGP_MEM *handle)
 {
        return DRM(agp_unbind_memory)(handle);
 }
index 5cfff83..3ef2a05 100644 (file)
@@ -343,9 +343,9 @@ void DRM(ioremapfree)(void *pt, unsigned long size, drm_device_t *dev)
 
 #if __REALLY_HAVE_AGP
 
-agp_memory *DRM(alloc_agp)(int pages, u32 type)
+DRM_AGP_MEM *DRM(alloc_agp)(int pages, u32 type)
 {
-       agp_memory *handle;
+       DRM_AGP_MEM *handle;
 
        if (!pages) {
                DRM_MEM_ERROR(DRM_MEM_TOTALAGP, "Allocating 0 pages\n");
@@ -366,7 +366,7 @@ agp_memory *DRM(alloc_agp)(int pages, u32 type)
        return NULL;
 }
 
-int DRM(free_agp)(agp_memory *handle, int pages)
+int DRM(free_agp)(DRM_AGP_MEM *handle, int pages)
 {
        int           alloc_count;
        int           free_count;
@@ -395,7 +395,7 @@ int DRM(free_agp)(agp_memory *handle, int pages)
        return retval;
 }
 
-int DRM(bind_agp)(agp_memory *handle, unsigned int start)
+int DRM(bind_agp)(DRM_AGP_MEM *handle, unsigned int start)
 {
        int retcode = -EINVAL;
 
@@ -419,7 +419,7 @@ int DRM(bind_agp)(agp_memory *handle, unsigned int start)
        return retcode;
 }
 
-int DRM(unbind_agp)(agp_memory *handle)
+int DRM(unbind_agp)(DRM_AGP_MEM *handle)
 {
        int alloc_count;
        int free_count;
index 66804c5..94230dc 100644 (file)
 #define DRM_DEVICE     drm_file_t      *priv   = filp->private_data; \
                        drm_device_t    *dev    = priv->dev
                        
-/** IRQ handler arguments */
-#define DRM_IRQ_ARGS           int irq, void *arg, struct pt_regs *regs
+/** IRQ handler arguments and return type and values */
+#define DRM_IRQ_ARGS           int irq, void *arg, struct pt_regs *regs
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,69)
+#define DRM_IRQ_RET            void
+#define DRM_IRQ_NONE
+#define DRM_IRQ_HANDLED
+#else
+#define DRM_IRQ_RET            irqreturn_t
+#define DRM_IRQ_NONE           IRQ_NONE
+#define DRM_IRQ_HANDLED                IRQ_HANDLED
+#endif
+
+/** AGP types */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,70)
+#define DRM_AGP_MEM            agp_memory
+#define DRM_AGP_KERN           agp_kern_info
+#else
+#define DRM_AGP_MEM            struct agp_memory
+#define DRM_AGP_KERN           struct agp_kern_info
+#endif
+
 /** Task queue handler arguments */
 #define DRM_TASKQUEUE_ARGS     void *arg
 
index 993ca36..85a9c08 100644 (file)
@@ -105,13 +105,14 @@ static inline int gamma_dma_is_ready(drm_device_t *dev)
        return(!GAMMA_READ(GAMMA_DMACOUNT));
 }
 
-void gamma_dma_service(int irq, void *device, struct pt_regs *regs)
+DRM_IRQ_RET gamma_dma_service( DRM_IRQ_ARGS )
 {
-       drm_device_t     *dev = (drm_device_t *)device;
+       drm_device_t     *dev = (drm_device_t *)arg;
        drm_device_dma_t *dma = dev->dma;
        drm_gamma_private_t *dev_priv =
                                (drm_gamma_private_t *)dev->dev_private;
 
+       /* FIXME: should check whether we're actually interested in the interrupt? */
        atomic_inc(&dev->counts[6]); /* _DRM_STAT_IRQ */
 
        while (GAMMA_READ(GAMMA_INFIFOSPACE) < 3);
@@ -120,7 +121,7 @@ void gamma_dma_service(int irq, void *device, struct pt_regs *regs)
        GAMMA_WRITE(GAMMA_GINTFLAGS, 0x2001);
        if (gamma_dma_is_ready(dev)) {
                                /* Free previous buffer */
-               if (test_and_set_bit(0, &dev->dma_flag)) return;
+               if (test_and_set_bit(0, &dev->dma_flag)) return DRM_IRQ_HANDLED;
                if (dma->this_buffer) {
                        gamma_free_buffer(dev, dma->this_buffer);
                        dma->this_buffer = NULL;
@@ -135,6 +136,7 @@ void gamma_dma_service(int irq, void *device, struct pt_regs *regs)
                schedule_work(&dev->work);
 #endif
        }
+       return DRM_IRQ_HANDLED;
 }
 
 /* Only called by gamma_dma_schedule. */
index 1fcd9f0..301afc8 100644 (file)
@@ -36,7 +36,7 @@
 #include <linux/delay.h>
 
 
-void DRM(dma_service)(int irq, void *device, struct pt_regs *regs)
+DRM_IRQ_RET DRM(dma_service)( DRM_IRQ_ARGS )
 {
        drm_device_t     *dev = (drm_device_t *)device;
        drm_i830_private_t *dev_priv = (drm_i830_private_t *)dev->dev_private;
@@ -45,15 +45,15 @@ void DRM(dma_service)(int irq, void *device, struct pt_regs *regs)
        temp = I830_READ16(I830REG_INT_IDENTITY_R);
        DRM_DEBUG("%x\n", temp);
 
-       if (temp == 0
-               return;
+       if ( !( temp & 2 ) 
+               return DRM_IRQ_NONE;
 
        I830_WRITE16(I830REG_INT_IDENTITY_R, temp); 
 
-       if (temp & 2) {
-               atomic_inc(&dev_priv->irq_received);
-               wake_up_interruptible(&dev_priv->irq_queue); 
-       }
+       atomic_inc(&dev_priv->irq_received);
+       wake_up_interruptible(&dev_priv->irq_queue); 
+
+       return DRM_IRQ_HANDLED;
 }
 
 
index a2a4db5..c53a4bc 100644 (file)
@@ -36,7 +36,7 @@
 #include "mga_drm.h"
 #include "mga_drv.h"
 
-void mga_dma_service( DRM_IRQ_ARGS )
+DRM_IRQ_RET mga_dma_service( DRM_IRQ_ARGS )
 {
        drm_device_t *dev = (drm_device_t *) arg;
        drm_mga_private_t *dev_priv = 
@@ -51,7 +51,9 @@ void mga_dma_service( DRM_IRQ_ARGS )
                atomic_inc(&dev->vbl_received);
                DRM_WAKEUP(&dev->vbl_queue);
                DRM(vbl_send_signals)( dev );
+               return DRM_IRQ_HANDLED;
        }
+       return DRM_IRQ_NONE;
 }
 
 int mga_vblank_wait(drm_device_t *dev, unsigned int *sequence)
index f3f84d8..5fe5b46 100644 (file)
@@ -36,7 +36,7 @@
 #include "r128_drm.h"
 #include "r128_drv.h"
 
-void r128_dma_service( DRM_IRQ_ARGS )
+DRM_IRQ_RET r128_dma_service( DRM_IRQ_ARGS )
 {
        drm_device_t *dev = (drm_device_t *) arg;
        drm_r128_private_t *dev_priv = 
@@ -51,7 +51,9 @@ void r128_dma_service( DRM_IRQ_ARGS )
                atomic_inc(&dev->vbl_received);
                DRM_WAKEUP(&dev->vbl_queue);
                DRM(vbl_send_signals)( dev );
+               return DRM_IRQ_HANDLED;
        }
+       return DRM_IRQ_NONE;
 }
 
 int DRM(vblank_wait)(drm_device_t *dev, unsigned int *sequence)
index c6bd90e..a42c7cf 100644 (file)
@@ -54,7 +54,7 @@
  * tied to dma at all, this is just a hangover from dri prehistory.
  */
 
-void DRM(dma_service)( DRM_IRQ_ARGS )
+DRM_IRQ_RET DRM(dma_service)( DRM_IRQ_ARGS )
 {
        drm_device_t *dev = (drm_device_t *) arg;
        drm_radeon_private_t *dev_priv = 
@@ -67,7 +67,7 @@ void DRM(dma_service)( DRM_IRQ_ARGS )
        stat = RADEON_READ(RADEON_GEN_INT_STATUS)
             & (RADEON_SW_INT_TEST | RADEON_CRTC_VBLANK_STAT);
        if (!stat)
-               return;
+               return DRM_IRQ_NONE;
 
        /* SW interrupt */
        if (stat & RADEON_SW_INT_TEST) {
@@ -83,6 +83,7 @@ void DRM(dma_service)( DRM_IRQ_ARGS )
 
        /* Acknowledge interrupts we handle */
        RADEON_WRITE(RADEON_GEN_INT_STATUS, stat);
+       return DRM_IRQ_HANDLED;
 }
 
 static __inline__ void radeon_acknowledge_irqs(drm_radeon_private_t *dev_priv)
index a2a4db5..c53a4bc 100644 (file)
@@ -36,7 +36,7 @@
 #include "mga_drm.h"
 #include "mga_drv.h"
 
-void mga_dma_service( DRM_IRQ_ARGS )
+DRM_IRQ_RET mga_dma_service( DRM_IRQ_ARGS )
 {
        drm_device_t *dev = (drm_device_t *) arg;
        drm_mga_private_t *dev_priv = 
@@ -51,7 +51,9 @@ void mga_dma_service( DRM_IRQ_ARGS )
                atomic_inc(&dev->vbl_received);
                DRM_WAKEUP(&dev->vbl_queue);
                DRM(vbl_send_signals)( dev );
+               return DRM_IRQ_HANDLED;
        }
+       return DRM_IRQ_NONE;
 }
 
 int mga_vblank_wait(drm_device_t *dev, unsigned int *sequence)
index f3f84d8..5fe5b46 100644 (file)
@@ -36,7 +36,7 @@
 #include "r128_drm.h"
 #include "r128_drv.h"
 
-void r128_dma_service( DRM_IRQ_ARGS )
+DRM_IRQ_RET r128_dma_service( DRM_IRQ_ARGS )
 {
        drm_device_t *dev = (drm_device_t *) arg;
        drm_r128_private_t *dev_priv = 
@@ -51,7 +51,9 @@ void r128_dma_service( DRM_IRQ_ARGS )
                atomic_inc(&dev->vbl_received);
                DRM_WAKEUP(&dev->vbl_queue);
                DRM(vbl_send_signals)( dev );
+               return DRM_IRQ_HANDLED;
        }
+       return DRM_IRQ_NONE;
 }
 
 int DRM(vblank_wait)(drm_device_t *dev, unsigned int *sequence)
index c6bd90e..a42c7cf 100644 (file)
@@ -54,7 +54,7 @@
  * tied to dma at all, this is just a hangover from dri prehistory.
  */
 
-void DRM(dma_service)( DRM_IRQ_ARGS )
+DRM_IRQ_RET DRM(dma_service)( DRM_IRQ_ARGS )
 {
        drm_device_t *dev = (drm_device_t *) arg;
        drm_radeon_private_t *dev_priv = 
@@ -67,7 +67,7 @@ void DRM(dma_service)( DRM_IRQ_ARGS )
        stat = RADEON_READ(RADEON_GEN_INT_STATUS)
             & (RADEON_SW_INT_TEST | RADEON_CRTC_VBLANK_STAT);
        if (!stat)
-               return;
+               return DRM_IRQ_NONE;
 
        /* SW interrupt */
        if (stat & RADEON_SW_INT_TEST) {
@@ -83,6 +83,7 @@ void DRM(dma_service)( DRM_IRQ_ARGS )
 
        /* Acknowledge interrupts we handle */
        RADEON_WRITE(RADEON_GEN_INT_STATUS, stat);
+       return DRM_IRQ_HANDLED;
 }
 
 static __inline__ void radeon_acknowledge_irqs(drm_radeon_private_t *dev_priv)