]> git.hungrycats.org Git - linux/commitdiff
Remove DRIVER_CTX_[CD]TOR, HAVE_KERNEL_CTX_SWITCH, DRIVER_BUF_PRIV_T, DRIVER_AGP_BUFF...
authorDave Airlie <airlied@starflyer.(none)>
Sat, 4 Sep 2004 05:06:05 +0000 (15:06 +1000)
committerDave Airlie <airlied@starflyer.(none)>
Sat, 4 Sep 2004 05:06:05 +0000 (15:06 +1000)
Signed-off-by: Dave Airlie <airlied@linux.ie>
28 files changed:
drivers/char/drm/drmP.h
drivers/char/drm/drm_bufs.h
drivers/char/drm/drm_context.h
drivers/char/drm/drm_drv.h
drivers/char/drm/ffb.h
drivers/char/drm/ffb_context.c
drivers/char/drm/gamma.h
drivers/char/drm/gamma_dma.c
drivers/char/drm/gamma_drv.h
drivers/char/drm/i810.h
drivers/char/drm/i810_dma.c
drivers/char/drm/i810_drv.h
drivers/char/drm/i830.h
drivers/char/drm/i830_dma.c
drivers/char/drm/i830_drv.h
drivers/char/drm/mga.h
drivers/char/drm/mga_dma.c
drivers/char/drm/r128.h
drivers/char/drm/r128_cce.c
drivers/char/drm/r128_drv.h
drivers/char/drm/r128_state.c
drivers/char/drm/radeon.h
drivers/char/drm/radeon_cp.c
drivers/char/drm/radeon_drv.h
drivers/char/drm/radeon_state.c
drivers/char/drm/sis.h
drivers/char/drm/sis_drv.h
drivers/char/drm/sis_mm.c

index bad175a686d24a9369ac75161d988d82f4e13d80..7154be121bbee4bf325798c1e6677edeb7b31573 100644 (file)
@@ -627,6 +627,10 @@ struct drm_driver_fn {
        void (*release)(struct drm_device *, struct file *filp);
        void (*dma_ready)(struct drm_device *);
        int (*dma_quiescent)(struct drm_device *);
+       int (*context_ctor)(struct drm_device *dev, int context);
+       int (*context_dtor)(struct drm_device *dev, int context);
+       int (*kernel_context_switch)(struct drm_device *dev, int old, int new);
+       int (*kernel_context_switch_unlock)(struct drm_device *dev);
 };
 /**
  * DRM device structure.
@@ -758,7 +762,8 @@ typedef struct drm_device {
        sigset_t          sigmask;
 
        struct            drm_driver_fn fn_tbl;
-
+       drm_local_map_t   *agp_buffer_map;
+       int               dev_priv_size;
 } drm_device_t;
 
 extern void DRM(driver_register_fns)(struct drm_device *dev);
index 95a28a323333850fb920003e4738bddb74bb99ce..a74eb361894cb21fba38923aa676272db2e28e34 100644 (file)
 #define __HAVE_SG              0
 #endif
 
-#ifndef DRIVER_BUF_PRIV_T
-#define DRIVER_BUF_PRIV_T              u32
-#endif
-#ifndef DRIVER_AGP_BUFFERS_MAP
-#if __HAVE_AGP && __HAVE_DMA
-#error "You must define DRIVER_AGP_BUFFERS_MAP()"
-#else
-#define DRIVER_AGP_BUFFERS_MAP( dev )  NULL
-#endif
-#endif
-
-
 /**
  * Compute size order.  Returns the exponent of the smaller power of two which
  * is greater or equal to given number.
@@ -473,8 +461,8 @@ int DRM(addbufs_agp)( struct inode *inode, struct file *filp,
                init_waitqueue_head( &buf->dma_wait );
                buf->filp    = NULL;
 
-               buf->dev_priv_size = sizeof(DRIVER_BUF_PRIV_T);
-               buf->dev_private = DRM(alloc)( sizeof(DRIVER_BUF_PRIV_T),
+               buf->dev_priv_size = dev->dev_priv_size;
+               buf->dev_private = DRM(alloc)( buf->dev_priv_size,
                                               DRM_MEM_BUFS );
                if(!buf->dev_private) {
                        /* Set count correctly so we free the proper amount. */
@@ -698,8 +686,8 @@ int DRM(addbufs_pci)( struct inode *inode, struct file *filp,
                        init_waitqueue_head( &buf->dma_wait );
                        buf->filp    = NULL;
 
-                       buf->dev_priv_size = sizeof(DRIVER_BUF_PRIV_T);
-                       buf->dev_private = DRM(alloc)( sizeof(DRIVER_BUF_PRIV_T),
+                       buf->dev_priv_size = dev->dev_priv_size;
+                       buf->dev_private = DRM(alloc)( dev->dev_priv_size,
                                                       DRM_MEM_BUFS );
                        if(!buf->dev_private) {
                                /* Set count correctly so we free the proper amount. */
@@ -882,8 +870,8 @@ int DRM(addbufs_sg)( struct inode *inode, struct file *filp,
                init_waitqueue_head( &buf->dma_wait );
                buf->filp    = NULL;
 
-               buf->dev_priv_size = sizeof(DRIVER_BUF_PRIV_T);
-               buf->dev_private = DRM(alloc)( sizeof(DRIVER_BUF_PRIV_T),
+               buf->dev_priv_size = dev->dev_priv_size;
+               buf->dev_private = DRM(alloc)( dev->dev_priv_size,
                                               DRM_MEM_BUFS );
                if(!buf->dev_private) {
                        /* Set count correctly so we free the proper amount. */
@@ -1221,7 +1209,7 @@ int DRM(mapbufs)( struct inode *inode, struct file *filp,
        if ( request.count >= dma->buf_count ) {
                if ( (__HAVE_AGP && (dma->flags & _DRM_DMA_USE_AGP)) ||
                     (__HAVE_SG && (dma->flags & _DRM_DMA_USE_SG)) ) {
-                       drm_map_t *map = DRIVER_AGP_BUFFERS_MAP( dev );
+                       drm_map_t *map = dev->agp_buffer_map;
 
                        if ( !map ) {
                                retcode = -EINVAL;
index d8000cfbf7b79a5bc2601395fd20a36f333cf949..b04e0355fbfca714206a3b55fa194f4afabf17dc 100644 (file)
@@ -419,10 +419,13 @@ int DRM(addctx)( struct inode *inode, struct file *filp,
                                /* Should this return -EBUSY instead? */
                return -ENOMEM;
        }
-#ifdef DRIVER_CTX_CTOR
+
        if ( ctx.handle != DRM_KERNEL_CONTEXT )
-               DRIVER_CTX_CTOR(ctx.handle); /* XXX: also pass dev ? */
-#endif
+       {
+               if (dev->fn_tbl.context_ctor)
+                       dev->fn_tbl.context_ctor(dev, ctx.handle);
+       }
+
        ctx_entry = DRM(alloc)( sizeof(*ctx_entry), DRM_MEM_CTXLIST );
        if ( !ctx_entry ) {
                DRM_DEBUG("out of memory\n");
@@ -554,9 +557,8 @@ int DRM(rmctx)( struct inode *inode, struct file *filp,
                priv->remove_auth_on_close = 1;
        }
        if ( ctx.handle != DRM_KERNEL_CONTEXT ) {
-#ifdef DRIVER_CTX_DTOR
-               DRIVER_CTX_DTOR(ctx.handle); /* XXX: also pass dev ? */
-#endif
+               if (dev->fn_tbl.context_dtor)
+                       dev->fn_tbl.context_dtor(dev, ctx.handle);
                DRM(ctxbitmap_free)( dev, ctx.handle );
        }
 
index a8a37647a4be489d2eaace3786e0100223bfae4d..c862177e6ab921e410a3f8638678d809044f01bb 100644 (file)
 #ifndef __HAVE_SG
 #define __HAVE_SG                      0
 #endif
-/* __HAVE_KERNEL_CTX_SWITCH isn't used by any of the drm modules in
- * the DRI cvs tree, but it is required by the kernel tree's sparc
- * driver.
- */
-#ifndef __HAVE_KERNEL_CTX_SWITCH
-#define __HAVE_KERNEL_CTX_SWITCH       0
-#endif
 #ifndef __HAVE_DRIVER_FOPS_READ
 #define __HAVE_DRIVER_FOPS_READ                0
 #endif
@@ -272,9 +265,6 @@ static int DRM(setup)( drm_device_t *dev )
 #ifdef __HAVE_COUNTER14
        dev->types[14] = __HAVE_COUNTER14;
 #endif
-#ifdef __HAVE_COUNTER15
-       dev->types[14] = __HAVE_COUNTER14;
-#endif
 
        for ( i = 0 ; i < DRM_ARRAY_SIZE(dev->counts) ; i++ )
                atomic_set( &dev->counts[i], 0 );
@@ -559,6 +549,8 @@ static int DRM(probe)(struct pci_dev *pdev)
        dev->pci_func = PCI_FUNC(pdev->devfn);
        dev->irq = pdev->irq;
 
+       /* dev_priv_size can be changed by a driver in driver_register_fns */
+       dev->dev_priv_size = sizeof(u32);
        DRM(driver_register_fns)(dev);
 
        if (dev->fn_tbl.preinit)
@@ -882,9 +874,8 @@ int DRM(release)( struct inode *inode, struct file *filp )
                list_for_each_entry_safe( pos, n, &dev->ctxlist->head, head ) {
                        if ( pos->tag == priv &&
                             pos->handle != DRM_KERNEL_CONTEXT ) {
-#ifdef DRIVER_CTX_DTOR
-                               DRIVER_CTX_DTOR(pos->handle);
-#endif
+                               if (dev->fn_tbl.context_dtor)
+                                       dev->fn_tbl.context_dtor(dev, pos->handle);
 #if __HAVE_CTX_BITMAP
                                DRM(ctxbitmap_free)( dev, pos->handle );
 #endif
@@ -1083,17 +1074,15 @@ int DRM(lock)( struct inode *inode, struct file *filp,
        if ( dev->fn_tbl.dma_quiescent && (lock.flags & _DRM_LOCK_QUIESCENT ))
                return dev->fn_tbl.dma_quiescent(dev);
        
-       /* __HAVE_KERNEL_CTX_SWITCH isn't used by any of the
-        * drm modules in the DRI cvs tree, but it is required
-        * by the Sparc driver.
+       /* dev->fn_tbl.kernel_context_switch isn't used by any of the x86 
+        *  drivers but is used by the Sparc driver.
         */
-#if __HAVE_KERNEL_CTX_SWITCH
-       if ( dev->last_context != lock.context ) {
-               DRM(context_switch)(dev, dev->last_context,
-                                   lock.context);
-       }
-#endif
        
+       if (dev->fn_tbl.kernel_context_switch && 
+           dev->last_context != lock.context) {
+         dev->fn_tbl.kernel_context_switch(dev, dev->last_context, 
+                                           lock.context);
+       }
         DRM_DEBUG( "%d %s\n", lock.context, ret ? "interrupted" : "has lock" );
 
         return ret;
@@ -1128,40 +1117,24 @@ int DRM(unlock)( struct inode *inode, struct file *filp,
 
        atomic_inc( &dev->counts[_DRM_STAT_UNLOCKS] );
 
-       /* __HAVE_KERNEL_CTX_SWITCH isn't used by any of the drm
-        * modules in the DRI cvs tree, but it is required by the
-        * Sparc driver.
-        */
-#if __HAVE_KERNEL_CTX_SWITCH
-       /* We no longer really hold it, but if we are the next
-        * agent to request it then we should just be able to
-        * take it immediately and not eat the ioctl.
+       /* kernel_context_switch isn't used by any of the x86 drm
+        * modules but is required by the Sparc driver.
         */
-       dev->lock.filp = NULL;
-       {
-               __volatile__ unsigned int *plock = &dev->lock.hw_lock->lock;
-               unsigned int old, new, prev, ctx;
-
-               ctx = lock.context;
-               do {
-                       old  = *plock;
-                       new  = ctx;
-                       prev = cmpxchg(plock, old, new);
-               } while (prev != old);
-       }
-       wake_up_interruptible(&dev->lock.lock_queue);
-#else
-       DRM(lock_transfer)( dev, &dev->lock.hw_lock->lock,
-                           DRM_KERNEL_CONTEXT );
+       if (dev->fn_tbl.kernel_context_switch_unlock)
+               dev->fn_tbl.kernel_context_switch_unlock(dev);
+       else {
+               DRM(lock_transfer)( dev, &dev->lock.hw_lock->lock, 
+                                   DRM_KERNEL_CONTEXT );
+               
 #if __HAVE_DMA_SCHEDULE
-       DRM(dma_schedule)( dev, 1 );
+               DRM(dma_schedule)( dev, 1 );
 #endif
 
-       if ( DRM(lock_free)( dev, &dev->lock.hw_lock->lock,
-                            DRM_KERNEL_CONTEXT ) ) {
-               DRM_ERROR( "\n" );
+               if ( DRM(lock_free)( dev, &dev->lock.hw_lock->lock,
+                                    DRM_KERNEL_CONTEXT ) ) {
+                       DRM_ERROR( "\n" );
+               }
        }
-#endif /* !__HAVE_KERNEL_CTX_SWITCH */
 
        unblock_all_signals();
        return 0;
index 179338f63692c093f39d7725c6fd5eb6fb646bd5..3691c8652294287d49708571a837ee340210689a 100644 (file)
@@ -8,9 +8,5 @@
  */
 #define DRM(x) ffb_##x
 
-/* General customization:
- */
-#define __HAVE_KERNEL_CTX_SWITCH       1
-
 #endif
 
index 214a4e539097d09ec8d0cdb44c56c254a2179913..b4b3bdc530508163ef1dffafd35a7058cffe9793 100644 (file)
@@ -570,10 +570,29 @@ static void ffb_driver_postcleanup(drm_device_t *dev)
        if (ffb_position != NULL) kfree(ffb_position);
 }
 
+static int ffb_driver_kernel_context_switch_unlock(struct drm_device *dev)
+{
+       dev->lock.filp = 0;
+       {
+               __volatile__ unsigned int *plock = &dev->lock.hw_lock->lock;
+               unsigned int old, new, prev, ctx;
+               
+               ctx = lock.context;
+               do {
+                       old  = *plock;
+                       new  = ctx;
+                       prev = cmpxchg(plock, old, new);
+               } while (prev != old);
+       }
+       wake_up_interruptible(&dev->lock.lock_queue);
+}
+
 static void ffb_driver_register_fns(drm_device_t *dev)
 {
        dev->fn_tbl.release = ffb_driver_release;
        dev->fn_tbl.presetup = ffb_driver_presetup;
        dev->fn_tbl.pretakedown = ffb_driver_pretakedown;
        dev->fn_tbl.postcleanup = ffb_driver_postcleanup;
+       dev->fn_tbl.kernel_context_switch = ffb_context_switch;
+       dev->fn_tbl.kernel_context_switch_unlock = ffb_driver_kernel_context_switch_unlock;
 }
index 97a543072036bf70a75dec13a2521c2f570ae785..68987d73a3b8aaec459df0bc3c45e5f43bbe1a7f 100644 (file)
@@ -91,8 +91,4 @@
 #define __HAVE_IRQ                     1
 #define __HAVE_IRQ_BH                  1
 
-#define DRIVER_AGP_BUFFERS_MAP( dev )                                  \
-       ((drm_gamma_private_t *)((dev)->dev_private))->buffers
-
-
 #endif /* __GAMMA_H__ */
index d39ccd6c136b4550a9431a580081c377eded30e0..515e8f7d2c7fbb4ef923af86e2a0a4b3a1a647a3 100644 (file)
@@ -661,9 +661,9 @@ static int gamma_do_init_dma( drm_device_t *dev, drm_gamma_init_t *init )
 
                buf = dma->buflist[GLINT_DRI_BUF_COUNT];
        } else {
-               DRM_FIND_MAP( dev_priv->buffers, init->buffers_offset );
+               DRM_FIND_MAP( dev->agp_buffer_map, init->buffers_offset );
 
-               DRM_IOREMAP( dev_priv->buffers, dev );
+               DRM_IOREMAP( dev->agp_buffer_map, dev );
 
                buf = dma->buflist[GLINT_DRI_BUF_COUNT];
                pgt = buf->address;
@@ -699,10 +699,9 @@ int gamma_do_cleanup_dma( drm_device_t *dev )
 #endif
 
        if ( dev->dev_private ) {
-               drm_gamma_private_t *dev_priv = dev->dev_private;
 
-               if ( dev_priv->buffers != NULL )
-                       DRM_IOREMAPFREE( dev_priv->buffers, dev );
+               if ( dev->agp_buffer_map != NULL )
+                       DRM_IOREMAPFREE( dev->agp_buffer_map, dev );
 
                DRM(free)( dev->dev_private, sizeof(drm_gamma_private_t),
                           DRM_MEM_DRIVER );
index fc78a11a33d3eb7bbccc1730580890f164d97b40..bdcd28c601e49b99d59c4d3b2b8434171b7f4624 100644 (file)
@@ -35,7 +35,6 @@
 typedef struct drm_gamma_private {
        drm_gamma_sarea_t *sarea_priv;
        drm_map_t *sarea;
-       drm_map_t *buffers;
        drm_map_t *mmio0;
        drm_map_t *mmio1;
        drm_map_t *mmio2;
index 1abed83033fbb0944c3e9166d87c60a1bb2216a1..33403ed6f6148006bdebdefb43bc0e97ce83af4c 100644 (file)
 /* XXX: Add vblank support? */
 #define __HAVE_IRQ             0
 
-/* Buffer customization:
- */
-
-#define DRIVER_BUF_PRIV_T      drm_i810_buf_priv_t
-
-#define DRIVER_AGP_BUFFERS_MAP( dev )                                  \
-       ((drm_i810_private_t *)((dev)->dev_private))->buffer_map
-
 #endif
index 06c223640f1297b3b9b83865b4283d538f31e572..f8be24a04266bd4589ff90d8fa086499bbf16504 100644 (file)
@@ -371,8 +371,8 @@ static int i810_dma_initialize(drm_device_t *dev,
                DRM_ERROR("can not find mmio map!\n");
                return -EINVAL;
        }
-       DRM_FIND_MAP( dev_priv->buffer_map, init->buffers_offset );
-       if (!dev_priv->buffer_map) {
+       DRM_FIND_MAP( dev->agp_buffer_map, init->buffers_offset );
+       if (!dev->agp_buffer_map) {
                dev->dev_private = (void *)dev_priv;
                i810_dma_cleanup(dev);
                DRM_ERROR("can not find dma buffer map!\n");
@@ -1407,6 +1407,7 @@ static int i810_driver_dma_quiescent(drm_device_t *dev)
 
 void i810_driver_register_fns(drm_device_t *dev)
 {
+       dev->dev_priv_size = sizeof(drm_i810_buf_priv_t);
        dev->fn_tbl.pretakedown = i810_driver_pretakedown;
        dev->fn_tbl.release = i810_driver_release;
        dev->fn_tbl.dma_quiescent = i810_driver_dma_quiescent;
index 736c20d769459de4924601edb48d01e52b5e723a..67c5c88bf5438d46a28b29665c8c63a6e7bb5b17 100644 (file)
@@ -53,7 +53,6 @@ typedef struct _drm_i810_ring_buffer{
 
 typedef struct drm_i810_private {
        drm_map_t *sarea_map;
-       drm_map_t *buffer_map;
        drm_map_t *mmio_map;
 
        drm_i810_sarea_t *sarea_priv;
index f5b5701930ea3357b7a287af4600fce6e9a05721..767db0e7b355ef9f846a8f42596ea5af8ec2a766 100644 (file)
 #define __HAVE_IRQ          0
 #endif
 
-
-/* Buffer customization:
- */
-
-#define DRIVER_BUF_PRIV_T      drm_i830_buf_priv_t
-
-#define DRIVER_AGP_BUFFERS_MAP( dev )                                  \
-       ((drm_i830_private_t *)((dev)->dev_private))->buffer_map
-
 #endif
index 16568da0087e0de37fdc06ad2ed5e26c8619f519..77eb78b7d1d585d382fc26dbb4eb826fcf182daf 100644 (file)
@@ -378,8 +378,8 @@ static int i830_dma_initialize(drm_device_t *dev,
                DRM_ERROR("can not find mmio map!\n");
                return -EINVAL;
        }
-       DRM_FIND_MAP( dev_priv->buffer_map, init->buffers_offset );
-       if(!dev_priv->buffer_map) {
+       DRM_FIND_MAP( dev->agp_buffer_map, init->buffers_offset );
+       if(!dev->agp_buffer_map) {
                dev->dev_private = (void *)dev_priv;
                i830_dma_cleanup(dev);
                DRM_ERROR("can not find dma buffer map!\n");
@@ -1602,6 +1602,7 @@ static int i830_driver_dma_quiescent(drm_device_t *dev)
 
 void i830_driver_register_fns(drm_device_t *dev)
 {
+       dev->dev_priv_size = sizeof(drm_i830_buf_priv_t);
        dev->fn_tbl.pretakedown = i830_driver_pretakedown;
        dev->fn_tbl.release = i830_driver_release;
        dev->fn_tbl.dma_quiescent = i830_driver_dma_quiescent;
index c6d805fc714faaa4ad9473cd6ca5f8b3f08d400f..ad4de4c3bf2b90b8b877447ffaa2827b0355c140 100644 (file)
@@ -53,7 +53,6 @@ typedef struct _drm_i830_ring_buffer{
 
 typedef struct drm_i830_private {
        drm_map_t *sarea_map;
-       drm_map_t *buffer_map;
        drm_map_t *mmio_map;
 
        drm_i830_sarea_t *sarea_priv;
index 09396cbd37e59c532d7cc75d6440faed617ef6fc..f2813846b14ac2c962424aa61e3b38cc95c7988a 100644 (file)
 #define __HAVE_VBL_IRQ         1
 #define __HAVE_SHARED_IRQ       1
 
-/* Buffer customization:
- */
-#define DRIVER_BUF_PRIV_T      drm_mga_buf_priv_t
-
-#define DRIVER_AGP_BUFFERS_MAP( dev )                                  \
-       ((drm_mga_private_t *)((dev)->dev_private))->buffers
-
 #endif
index fafd42efeb2613892852975ff11567cee162c734..7854a1d20946a56d0696fde99ef6c5adfb6fe898 100644 (file)
@@ -533,8 +533,8 @@ static int mga_do_init_dma( drm_device_t *dev, drm_mga_init_t *init )
                mga_do_cleanup_dma( dev );
                return DRM_ERR(EINVAL);
        }
-       DRM_FIND_MAP( dev_priv->buffers, init->buffers_offset );
-       if(!dev_priv->buffers) {
+       DRM_FIND_MAP( dev->agp_buffer_map, init->buffers_offset );
+       if(!dev->agp_buffer_map) {
                DRM_ERROR( "failed to find dma buffer region!\n" );
                /* Assign dev_private so we can do cleanup. */
                dev->dev_private = (void *)dev_priv;
@@ -548,11 +548,11 @@ static int mga_do_init_dma( drm_device_t *dev, drm_mga_init_t *init )
 
        DRM_IOREMAP( dev_priv->warp, dev );
        DRM_IOREMAP( dev_priv->primary, dev );
-       DRM_IOREMAP( dev_priv->buffers, dev );
+       DRM_IOREMAP( dev->agp_buffer_map, dev );
 
        if(!dev_priv->warp->handle ||
           !dev_priv->primary->handle ||
-          !dev_priv->buffers->handle ) {
+          !dev->agp_buffer_map->handle ) {
                DRM_ERROR( "failed to ioremap agp regions!\n" );
                /* Assign dev_private so we can do cleanup. */
                dev->dev_private = (void *)dev_priv;
@@ -646,8 +646,8 @@ int mga_do_cleanup_dma( drm_device_t *dev )
                        DRM_IOREMAPFREE( dev_priv->warp, dev );
                if ( dev_priv->primary != NULL )
                        DRM_IOREMAPFREE( dev_priv->primary, dev );
-               if ( dev_priv->buffers != NULL )
-                       DRM_IOREMAPFREE( dev_priv->buffers, dev );
+               if ( dev->agp_buffer_map != NULL )
+                       DRM_IOREMAPFREE( dev->agp_buffer_map, dev );
 
                if ( dev_priv->head != NULL ) {
                        mga_freelist_cleanup( dev );
index 14fe1d876771a1c5e7b37421e2a31d625598a076..a76b4234e0735f595ead3477a33b4a0c474a7030 100644 (file)
 #define __HAVE_VBL_IRQ         1
 #define __HAVE_SHARED_IRQ       1
 
-/* Buffer customization:
- */
-#define DRIVER_BUF_PRIV_T      drm_r128_buf_priv_t
-
-#define DRIVER_AGP_BUFFERS_MAP( dev )                                  \
-       ((drm_r128_private_t *)((dev)->dev_private))->buffers
-
 #endif
index 22d38b70c09df523ce3edfdb2bb25ea7e136549e..83612e57173a4b375ff577d750e50d891bda9367 100644 (file)
@@ -488,8 +488,8 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init )
                r128_do_cleanup_cce( dev );
                return DRM_ERR(EINVAL);
        }
-       DRM_FIND_MAP( dev_priv->buffers, init->buffers_offset );
-       if(!dev_priv->buffers) {
+       DRM_FIND_MAP( dev->agp_buffer_map, init->buffers_offset );
+       if(!dev->agp_buffer_map) {
                DRM_ERROR("could not find dma buffer region!\n");
                dev->dev_private = (void *)dev_priv;
                r128_do_cleanup_cce( dev );
@@ -515,10 +515,10 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init )
        if ( !dev_priv->is_pci ) {
                DRM_IOREMAP( dev_priv->cce_ring, dev );
                DRM_IOREMAP( dev_priv->ring_rptr, dev );
-               DRM_IOREMAP( dev_priv->buffers, dev );
+               DRM_IOREMAP( dev->agp_buffer_map, dev );
                if(!dev_priv->cce_ring->handle ||
                   !dev_priv->ring_rptr->handle ||
-                  !dev_priv->buffers->handle) {
+                  !dev->agp_buffer_map->handle) {
                        DRM_ERROR("Could not ioremap agp regions!\n");
                        dev->dev_private = (void *)dev_priv;
                        r128_do_cleanup_cce( dev );
@@ -531,7 +531,7 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init )
                        (void *)dev_priv->cce_ring->offset;
                dev_priv->ring_rptr->handle =
                        (void *)dev_priv->ring_rptr->offset;
-               dev_priv->buffers->handle = (void *)dev_priv->buffers->offset;
+               dev->agp_buffer_map->handle = (void *)dev->agp_buffer_map->offset;
        }
 
 #if __REALLY_HAVE_AGP
@@ -604,8 +604,8 @@ int r128_do_cleanup_cce( drm_device_t *dev )
                                DRM_IOREMAPFREE( dev_priv->cce_ring, dev );
                        if ( dev_priv->ring_rptr != NULL )
                                DRM_IOREMAPFREE( dev_priv->ring_rptr, dev );
-                       if ( dev_priv->buffers != NULL )
-                               DRM_IOREMAPFREE( dev_priv->buffers, dev );
+                       if ( dev->agp_buffer_map != NULL )
+                               DRM_IOREMAPFREE( dev->agp_buffer_map, dev );
                } else
 #endif
                {
index 9df32e566263e564c77df834ba8b844f90fa8729..12ca9b4f5bcb3aaf5e93b15697c5583de28a9a3d 100644 (file)
@@ -100,7 +100,6 @@ typedef struct drm_r128_private {
        drm_local_map_t *mmio;
        drm_local_map_t *cce_ring;
        drm_local_map_t *ring_rptr;
-       drm_local_map_t *buffers;
        drm_local_map_t *agp_textures;
 } drm_r128_private_t;
 
index 76b0593bc53520ca2d5506ebca67cab30704f183..88d7715a9e3d4e9d5bff0f82704963329a20e8e9 100644 (file)
@@ -667,7 +667,7 @@ static void r128_cce_dispatch_indirect( drm_device_t *dev,
                 */
                if ( dwords & 1 ) {
                        u32 *data = (u32 *)
-                               ((char *)dev_priv->buffers->handle
+                               ((char *)dev->agp_buffer_map->handle
                                 + buf->offset + start);
                        data[dwords++] = cpu_to_le32( R128_CCE_PACKET2 );
                }
@@ -713,7 +713,7 @@ static void r128_cce_dispatch_indices( drm_device_t *dev,
        drm_r128_buf_priv_t *buf_priv = buf->dev_private;
        drm_r128_sarea_t *sarea_priv = dev_priv->sarea_priv;
        int format = sarea_priv->vc_format;
-       int offset = dev_priv->buffers->offset - dev_priv->cce_buffers_offset;
+       int offset = dev->agp_buffer_map->offset - dev_priv->cce_buffers_offset;
        int prim = buf_priv->prim;
        u32 *data;
        int dwords;
@@ -733,7 +733,7 @@ static void r128_cce_dispatch_indices( drm_device_t *dev,
 
                dwords = (end - start + 3) / sizeof(u32);
 
-               data = (u32 *)((char *)dev_priv->buffers->handle
+               data = (u32 *)((char *)dev->agp_buffer_map->handle
                               + buf->offset + start);
 
                data[0] = cpu_to_le32( CCE_PACKET3( R128_3D_RNDR_GEN_INDX_PRIM,
@@ -857,7 +857,7 @@ static int r128_cce_dispatch_blit( DRMFILE filp,
 
        dwords = (blit->width * blit->height) >> dword_shift;
 
-       data = (u32 *)((char *)dev_priv->buffers->handle + buf->offset);
+       data = (u32 *)((char *)dev->agp_buffer_map->handle + buf->offset);
 
        data[0] = cpu_to_le32( CCE_PACKET3( R128_CNTL_HOSTDATA_BLT, dwords + 6 ) );
        data[1] = cpu_to_le32( (R128_GMC_DST_PITCH_OFFSET_CNTL |
@@ -1712,6 +1712,7 @@ static void r128_driver_pretakedown(drm_device_t *dev)
 
 void r128_driver_register_fns(drm_device_t *dev)
 {
+       dev->dev_priv_size = sizeof(drm_r128_buf_priv_t);
        dev->fn_tbl.prerelease = r128_driver_prerelease;
        dev->fn_tbl.pretakedown = r128_driver_pretakedown;
 }
index cdbcf349787a246956db8cf957eceaf8c5fbb50b..39fb0be906aa4761aa792c935489c4821f08046d 100644 (file)
 #define __HAVE_VBL_IRQ         1
 #define __HAVE_SHARED_IRQ       1
 
-
-/* Buffer customization:
- */
-#define DRIVER_BUF_PRIV_T      drm_radeon_buf_priv_t
-
-#define DRIVER_AGP_BUFFERS_MAP( dev )                          \
-       ((drm_radeon_private_t *)((dev)->dev_private))->buffers
-
 #endif
index f6964908a18e559123a051f405e44d9ea9b1c014..1c172b28279f53cd6d3a56c0425490a11dbe9e84 100644 (file)
@@ -1139,8 +1139,8 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
                radeon_do_cleanup_cp(dev);
                return DRM_ERR(EINVAL);
        }
-       DRM_FIND_MAP( dev_priv->buffers, init->buffers_offset );
-       if(!dev_priv->buffers) {
+       DRM_FIND_MAP( dev->agp_buffer_map, init->buffers_offset );
+       if(!dev->agp_buffer_map) {
                DRM_ERROR("could not find dma buffer region!\n");
                dev->dev_private = (void *)dev_priv;
                radeon_do_cleanup_cp(dev);
@@ -1165,10 +1165,10 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
        if ( !dev_priv->is_pci ) {
                DRM_IOREMAP( dev_priv->cp_ring, dev );
                DRM_IOREMAP( dev_priv->ring_rptr, dev );
-               DRM_IOREMAP( dev_priv->buffers, dev );
+               DRM_IOREMAP( dev->agp_buffer_map, dev );
                if(!dev_priv->cp_ring->handle ||
                   !dev_priv->ring_rptr->handle ||
-                  !dev_priv->buffers->handle) {
+                  !dev->agp_buffer_map->handle) {
                        DRM_ERROR("could not find ioremap agp regions!\n");
                        dev->dev_private = (void *)dev_priv;
                        radeon_do_cleanup_cp(dev);
@@ -1181,14 +1181,14 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
                        (void *)dev_priv->cp_ring->offset;
                dev_priv->ring_rptr->handle =
                        (void *)dev_priv->ring_rptr->offset;
-               dev_priv->buffers->handle = (void *)dev_priv->buffers->offset;
+               dev->agp_buffer_map->handle = (void *)dev->agp_buffer_map->offset;
 
                DRM_DEBUG( "dev_priv->cp_ring->handle %p\n",
                           dev_priv->cp_ring->handle );
                DRM_DEBUG( "dev_priv->ring_rptr->handle %p\n",
                           dev_priv->ring_rptr->handle );
-               DRM_DEBUG( "dev_priv->buffers->handle %p\n",
-                          dev_priv->buffers->handle );
+               DRM_DEBUG( "dev->agp_buffer_map->handle %p\n",
+                          dev->agp_buffer_map->handle );
        }
 
        dev_priv->fb_location = ( RADEON_READ( RADEON_MC_FB_LOCATION )
@@ -1213,12 +1213,12 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
 
 #if __REALLY_HAVE_AGP
        if ( !dev_priv->is_pci )
-               dev_priv->gart_buffers_offset = (dev_priv->buffers->offset
+               dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset
                                                - dev->agp->base
                                                + dev_priv->gart_vm_start);
        else
 #endif
-               dev_priv->gart_buffers_offset = (dev_priv->buffers->offset
+               dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset
                                                - dev->sg->handle
                                                + dev_priv->gart_vm_start);
 
@@ -1292,8 +1292,8 @@ int radeon_do_cleanup_cp( drm_device_t *dev )
                                DRM_IOREMAPFREE( dev_priv->cp_ring, dev );
                        if ( dev_priv->ring_rptr != NULL )
                                DRM_IOREMAPFREE( dev_priv->ring_rptr, dev );
-                       if ( dev_priv->buffers != NULL )
-                               DRM_IOREMAPFREE( dev_priv->buffers, dev );
+                       if ( dev->agp_buffer_map != NULL )
+                               DRM_IOREMAPFREE( dev->agp_buffer_map, dev );
                } else
 #endif
                {
index e24e0ec09d02462fe6cc9f10011e73b015b62081..f0aa0dc237ad72e53d31e3871c5df28ab9b0dba9 100644 (file)
@@ -138,7 +138,6 @@ typedef struct drm_radeon_private {
        drm_local_map_t *mmio;
        drm_local_map_t *cp_ring;
        drm_local_map_t *ring_rptr;
-       drm_local_map_t *buffers;
        drm_local_map_t *gart_textures;
 
        struct mem_block *gart_heap;
index fb212d5e8360933dc7d673837dbe96ae8e4ba056..b159bcc0744885843fe2a6d0698af4ffca87160b 100644 (file)
@@ -1247,7 +1247,7 @@ static void radeon_cp_dispatch_indirect( drm_device_t *dev,
                 */
                if ( dwords & 1 ) {
                        u32 *data = (u32 *)
-                               ((char *)dev_priv->buffers->handle
+                               ((char *)dev->agp_buffer_map->handle
                                 + buf->offset + start);
                        data[dwords++] = RADEON_CP_PACKET2;
                }
@@ -1301,7 +1301,7 @@ static void radeon_cp_dispatch_indices( drm_device_t *dev,
 
        dwords = (prim->finish - prim->start + 3) / sizeof(u32);
 
-       data = (u32 *)((char *)dev_priv->buffers->handle +
+       data = (u32 *)((char *)dev->agp_buffer_map->handle +
                       elt_buf->offset + prim->start);
 
        data[0] = CP_PACKET3( RADEON_3D_RNDR_GEN_INDX_PRIM, dwords-2 );
@@ -1445,7 +1445,7 @@ static int radeon_cp_dispatch_texture( DRMFILE filp,
 
                /* Dispatch the indirect buffer.
                 */
-               buffer = (u32*)((char*)dev_priv->buffers->handle + buf->offset);
+               buffer = (u32*)((char*)dev->agp_buffer_map->handle + buf->offset);
                dwords = size / 4;
                buffer[0] = CP_PACKET3( RADEON_CNTL_HOSTDATA_BLT, dwords + 6 );
                buffer[1] = (RADEON_GMC_DST_PITCH_OFFSET_CNTL |
@@ -2548,6 +2548,12 @@ int radeon_cp_setparam( DRM_IOCTL_ARGS ) {
        return 0;
 }
 
+/* When a client dies:
+ *    - Check for and clean up flipped page state
+ *    - Free any alloced GART memory.
+ *
+ * DRM infrastructure takes care of reclaiming dma buffers.
+ */
 static void radeon_driver_prerelease(drm_device_t *dev, DRMFILE filp)
 {
        if ( dev->dev_private ) {                               
@@ -2576,6 +2582,7 @@ static void radeon_driver_open_helper(drm_device_t *dev, drm_file_t *filp_priv)
 
 void radeon_driver_register_fns(struct drm_device *dev)
 {      
+       dev->dev_priv_size = sizeof(drm_radeon_buf_priv_t);
        dev->fn_tbl.prerelease = radeon_driver_prerelease;
        dev->fn_tbl.pretakedown = radeon_driver_pretakedown;
        dev->fn_tbl.open_helper = radeon_driver_open_helper;
index 7bdc99c0a158a9cbfc68cdf6685b2edef24eea98..bdd4f4e19331af72a7599efa843ad8e05e64555d 100644 (file)
 
 #define __HAVE_COUNTERS                5
 
-/* Buffer customization:
- */
-#define DRIVER_AGP_BUFFERS_MAP( dev )                                  \
-       ((drm_sis_private_t *)((dev)->dev_private))->buffers
-
-extern int sis_init_context(int context);
-extern int sis_final_context(int context);
-
-#define DRIVER_CTX_CTOR sis_init_context
-#define DRIVER_CTX_DTOR sis_final_context
-
 #endif
index 40e7f463e9c593e91e38c983723537ff034ad819..a87001819331a1a5a706f02427e211f22a98cf6b 100644 (file)
@@ -31,8 +31,6 @@
 #include "sis_ds.h"
 
 typedef struct drm_sis_private {
-       drm_map_t *buffers;
-
        memHeap_t *AGPHeap;
        memHeap_t *FBHeap;
 } drm_sis_private_t;
index fb7e7dc5cf15c136e91e36db201909b8f04ca8c2..1a055a0e27ca2ffe948c826c80277b8f90a7d79c 100644 (file)
@@ -326,7 +326,7 @@ int sis_ioctl_agp_free( DRM_IOCTL_ARGS )
        return 0;
 }
 
-int sis_init_context(int context)
+int sis_init_context(struct drm_device *dev, int context)
 {
        int i;
 
@@ -358,7 +358,7 @@ int sis_init_context(int context)
        return 1;
 }
 
-int sis_final_context(int context)
+int sis_final_context(struct drm_device *dev, int context)
 {
        int i;
 
@@ -407,4 +407,6 @@ int sis_final_context(int context)
 
 void DRM(driver_register_fns)(drm_device_t *dev)
 {
+       dev->fn_tbl.context_ctor = sis_init_context;
+       dev->fn_tbl.context_dtor = sis_final_context;
 }