José Fonseca wrote:

First thing is to remove references to the ring* variables in DRM and DDX!

I've done this now. The diff is attached.

After that we need to define the macros for MMIO in DRM and write some
utility functions for stuff like "wait for card is idle". Both these
things can be based on what is done on the existing DDX driver.

I have to do some other work right now but perhaps I'll get to this tonight.

Regards,
Andreas Karrenbauer

Index: drivers/savage/savage_common.h
===================================================================
RCS file: 
/cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/drivers/savage/Attic/savage_common.h,v
retrieving revision 1.1.2.3
diff -u -r1.1.2.3 savage_common.h
--- drivers/savage/savage_common.h      2 Mar 2003 20:43:51 -0000       1.1.2.3
+++ drivers/savage/savage_common.h      5 Mar 2003 19:48:22 -0000
@@ -45,6 +45,7 @@
    } func;
    unsigned long sarea_priv_offset;
    int is_pci;
+   int bci_mode;
    int agp_size;
    int usec_timeout;
 
Index: drivers/savage/savage_dri.c
===================================================================
RCS file: 
/cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/drivers/savage/Attic/savage_dri.c,v
retrieving revision 1.1.2.4
diff -u -r1.1.2.4 savage_dri.c
--- drivers/savage/savage_dri.c 2 Mar 2003 20:43:51 -0000       1.1.2.4
+++ drivers/savage/savage_dri.c 5 Mar 2003 19:48:25 -0000
@@ -592,13 +592,13 @@
                                /* Map bci region */
     /* FIXME: lookup BCI region size */
     psav->bciSize = SAVAGE_NEWMMIO_REGSIZE;
-    if (drmAddMap(psav->drmFD, psav->bciBase, psav->bciSize,
+    if (drmAddMap(psav->drmFD, (unsigned long) psav->BciMem, psav->bciSize,
                  DRM_REGISTERS, DRM_READ_ONLY, &psav->bciHandle) < 0) {
        return FALSE;
     }
     xf86DrvMsg(pScreen->myNum, X_INFO,
-              "[drm] bci region handle = 0x%08lx\n", psav->registerHandle);
-
+              "[drm] bci region handle = 0x%08lx\n", psav->bciHandle);
+    
     return TRUE;
 }
 
@@ -609,14 +609,17 @@
     int            cpp   = ( pScrn->bitsPerPixel + 1 ) / 8;
     drmSavageInit  drmInfo;
 
+    xf86DrvMsg( pScreen->myNum, X_INFO, "[dri] trying to init kernel driver ...\n" );
+
     memset(&drmInfo, 0, sizeof(drmSavageInit));
 
     drmInfo.func                = DRM_SAVAGE_INIT_BCI;
     
     drmInfo.sarea_priv_offset   = sizeof(XF86DRISAREARec);
     drmInfo.is_pci              = psav->IsPCI;
+    drmInfo.bci_mode            = psav->BCIMode; 
     drmInfo.agp_size            = psav->agpSize*1024*1024;
-    drmInfo.usec_timeout        = psav->BCIusecTimeout;
+    drmInfo.usec_timeout        = SAVAGE_DEFAULT_BCI_TIMEOUT; /* FIXME: 
psav->BCIusecTimeout; */
 
     drmInfo.fb_bpp              = pScrn->bitsPerPixel;
     drmInfo.depth_bpp           = pScrn->bitsPerPixel;
@@ -934,7 +937,7 @@
                                            < SAVAGE_MAX_DRAWABLES
                                            ? SAREA_MAX_DRAWABLES
                                            : SAVAGE_MAX_DRAWABLES);
-    
+
 #ifdef PER_CONTEXT_SAREA
     /* This is only here for testing per-context SAREAs.  When used, the
        magic number below would be properly defined in a header file. */
@@ -984,6 +987,8 @@
     pDRIInfo->createDummyCtx     = TRUE;
     pDRIInfo->createDummyCtxPriv = FALSE;
 
+       xf86DrvMsg( pScreen->myNum, X_INFO,
+               "[dri] trying to init DRI screen ...\n" );
     if (!DRIScreenInit(pScreen, pDRIInfo, &psav->drmFD)) {
        xf86DrvMsg(pScreen->myNum, X_ERROR,
                   "[dri] DRIScreenInit failed.  Disabling DRI.\n");
@@ -1109,6 +1114,8 @@
                                 * mappings here.
                                 */
     if (!SAVAGEDRIMapInit(psav, pScreen)) {
+       xf86DrvMsg( pScreen->myNum, X_ERROR, 
+               "[dri] dri map init has failed!\n" );
        SAVAGEDRICloseScreen(pScreen);
        return FALSE;
     }
Index: drivers/savage/savage_dri.h
===================================================================
RCS file: 
/cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/drivers/savage/Attic/savage_dri.h,v
retrieving revision 1.1.2.3
diff -u -r1.1.2.3 savage_dri.h
--- drivers/savage/savage_dri.h 1 Mar 2003 11:18:10 -0000       1.1.2.3
+++ drivers/savage/savage_dri.h 5 Mar 2003 19:48:25 -0000
@@ -12,7 +12,7 @@
 #define SAVAGE_DEFAULT_BUFFER_SIZE  2 /* MB (must be page aligned) */
 #define SAVAGE_DEFAULT_AGP_TEX_SIZE 1 /* MB (must be page aligned) */
 
-#define SAVAGE_DEFAULT_CP_TIMEOUT   10000  /* usecs */
+#define SAVAGE_DEFAULT_BCI_TIMEOUT   10000  /* usecs */
 
 #define SAVAGE_AGP_MAX_MODE         4
 
Index: drivers/savage/savage_driver.c
===================================================================
RCS file: 
/cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c,v
retrieving revision 1.9.2.1
diff -u -r1.9.2.1 savage_driver.c
--- drivers/savage/savage_driver.c      2 Mar 2003 20:43:51 -0000       1.9.2.1
+++ drivers/savage/savage_driver.c      5 Mar 2003 19:48:34 -0000
@@ -2261,8 +2261,8 @@
     }
     psav->ShadowCounter = 0;
 
-#if XF86DRI
-    psav->directRenderingEnabled = FALSE;
+#ifdef XF86DRI
+       psav->directRenderingEnabled = FALSE;
 #endif
 
     SavageSave(pScrn);
@@ -2310,15 +2310,10 @@
        }
     }
 
-#if XF86DRI
-    if ( psav->directRenderingEnabled ) 
-       psav->directRenderingEnabled = SAVAGEDRIFinishScreenInit( pScreen );
-    if ( psav->directRenderingEnabled )
-       xf86DrvMsg( pScrn->scrnIndex, X_INFO, "Direct Rendering enabled!\n" );
-    else 
-       xf86DrvMsg( pScrn->scrnIndex, X_INFO, "Direct Rendering disabled!\n" ); 
+#ifdef XF86DRI
+       psav->directRenderingEnabled = SAVAGEDRIScreenInit( pScreen );
 #endif
-    
+
     /* must be after RGB ordering fixed */
     fbPictureInit (pScreen, 0, 0);
 
@@ -2394,6 +2389,13 @@
     if (serverGeneration == 1)
        xf86ShowUnusedOptions(pScrn->scrnIndex, pScrn->options);
 
+#ifdef XF86DRI
+       if ( psav->directRenderingEnabled ) 
+               psav->directRenderingEnabled = SAVAGEDRIFinishScreenInit( pScreen );
+       if ( psav->directRenderingEnabled )
+               xf86DrvMsg( pScrn->scrnIndex, X_INFO, "Direct Rendering enabled!\n" );
+       else xf86DrvMsg( pScrn->scrnIndex, X_INFO, "Direct Rendering disabled!\n" );   
 
+#endif
     return TRUE;
 }
 
@@ -2822,6 +2824,13 @@
     SavageRegPtr SavageSavePtr = &psav->SavedReg;
 
     TRACE(("SavageCloseScreen\n"));
+
+#ifdef XF86DRI
+    if ( psav->directRenderingEnabled ) {
+       SAVAGEDRICloseScreen( pScreen );
+       psav->directRenderingEnabled = FALSE;
+    }  
+#endif
 
     if (psav->pVbe)
       vbeFree(psav->pVbe);
Index: drivers/savage/savage_driver.h
===================================================================
RCS file: 
/cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.h,v
retrieving revision 1.7.2.4
diff -u -r1.7.2.4 savage_driver.h
--- drivers/savage/savage_driver.h      2 Mar 2003 20:43:51 -0000       1.7.2.4
+++ drivers/savage/savage_driver.h      5 Mar 2003 19:48:35 -0000
@@ -261,6 +261,13 @@
     int                        textureOffset;
     int                        textureSize;
     int                        log2TexGran;
+  
+   /* I don't know wether we ever will use this stuff
+   */
+  Bool noBackBuffer;
+  int  BCIMode;           /* BCI mode that server/clients use */
+  unsigned long bciBase;
+  drmHandle pciMemHandle;
 #endif
     
     /* Support for XVideo */
Index: os-support/linux/drm/kernel/savage_bci.c
===================================================================
RCS file: 
/cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/Attic/savage_bci.c,v
retrieving revision 1.1.2.1
diff -u -r1.1.2.1 savage_bci.c
--- os-support/linux/drm/kernel/savage_bci.c    2 Mar 2003 21:44:26 -0000       1.1.2.1
+++ os-support/linux/drm/kernel/savage_bci.c    5 Mar 2003 19:48:45 -0000
@@ -42,11 +42,13 @@
 {
        drm_savage_private_t *dev_priv;
        u32 tmp;
-       DRM_INFO( "[drm] initializing bci ...\n" );
+       DRM_INFO( "initializing bci ...\n" );
 
        dev_priv = DRM(alloc)( sizeof(drm_savage_private_t), DRM_MEM_DRIVER );
-       if ( dev_priv == NULL )
+       if ( dev_priv == NULL ) {
+               DRM_ERROR( "memory allocation for dev_priv failed!\n" );
                return DRM_ERR(ENOMEM);
+       }
 
        memset( dev_priv, 0, sizeof(drm_savage_private_t) );
 
@@ -62,7 +64,7 @@
        dev_priv->usec_timeout = init->usec_timeout;
        if ( dev_priv->usec_timeout < 1 ||
             dev_priv->usec_timeout > SAVAGE_MAX_USEC_TIMEOUT ) {
-               DRM_DEBUG( "TIMEOUT problem!\n" );
+               DRM_ERROR( "TIMEOUT problem!\n" );
                dev->dev_private = (void *)dev_priv;
                savage_do_cleanup_bci(dev);
                return DRM_ERR(EINVAL);
@@ -104,6 +106,7 @@
        dev_priv->depth_pitch_offset = (((dev_priv->depth_pitch/64) << 22) |
                                        (dev_priv->depth_offset >> 10));
 
+       DRM_INFO( "looking for sarea ...\n" );
        DRM_GETSAREA();
        
        if(!dev_priv->sarea) {
@@ -113,6 +116,7 @@
                return DRM_ERR(EINVAL);
        }
 
+       DRM_INFO( "looking for framebuffer ...\n" );
        DRM_FIND_MAP( dev_priv->fb, init->fb_offset );
        if(!dev_priv->fb) {
                DRM_ERROR("could not find framebuffer!\n");
@@ -120,6 +124,8 @@
                savage_do_cleanup_bci(dev);
                return DRM_ERR(EINVAL);
        }
+
+       DRM_INFO( "looking for mmio region ...\n" );
        DRM_FIND_MAP( dev_priv->mmio, init->mmio_offset );
        if(!dev_priv->mmio) {
                DRM_ERROR("could not find mmio region!\n");
@@ -127,20 +133,17 @@
                savage_do_cleanup_bci(dev);
                return DRM_ERR(EINVAL);
        }
-       DRM_FIND_MAP( dev_priv->bci_ring, init->ring_offset );
-       if(!dev_priv->bci_ring) {
-               DRM_ERROR("could not find bci ring region!\n");
-               dev->dev_private = (void *)dev_priv;
-               savage_do_cleanup_bci(dev);
-               return DRM_ERR(EINVAL);
-       }
-       DRM_FIND_MAP( dev_priv->ring_rptr, init->ring_rptr_offset );
-       if(!dev_priv->ring_rptr) {
-               DRM_ERROR("could not find ring read pointer!\n");
+
+       DRM_INFO( "looking for bci region ...\n" );
+       DRM_FIND_MAP( dev_priv->bci, init->bci_offset );
+       if(!dev_priv->bci) {
+               DRM_ERROR("could not find bci region!\n");
                dev->dev_private = (void *)dev_priv;
                savage_do_cleanup_bci(dev);
                return DRM_ERR(EINVAL);
        }
+/* FIXME: we do not support this right now */
+#if 0
        DRM_FIND_MAP( dev_priv->buffers, init->buffers_offset );
        if(!dev_priv->buffers) {
                DRM_ERROR("could not find dma buffer region!\n");
@@ -150,6 +153,7 @@
        }
 
        if ( !dev_priv->is_pci ) {
+               DRM_INFO( "looking for agp texture region ...\n" );
                DRM_FIND_MAP( dev_priv->agp_textures,
                              init->agp_textures_offset );
                if(!dev_priv->agp_textures) {
@@ -160,33 +164,32 @@
                }
        }
 
+#endif
+
        dev_priv->sarea_priv =
                (drm_savage_sarea_t *)((u8 *)dev_priv->sarea->handle +
                                       init->sarea_priv_offset);
 
        if ( !dev_priv->is_pci ) {
-               DRM_IOREMAP( dev_priv->bci_ring );
-               DRM_IOREMAP( dev_priv->ring_rptr );
+               /* FIXME: we do not support this right now */
+#if 0
+               DRM_IOREMAP( dev_priv->bci );
                DRM_IOREMAP( dev_priv->buffers );
-               if(!dev_priv->bci_ring->handle ||
-                  !dev_priv->ring_rptr->handle ||
+               if(!dev_priv->bci->handle ||
                   !dev_priv->buffers->handle) {
                        DRM_ERROR("could not find ioremap agp regions!\n");
                        dev->dev_private = (void *)dev_priv;
                        savage_do_cleanup_bci(dev);
                        return DRM_ERR(EINVAL);
                }
+#endif
        } else {
-               dev_priv->bci_ring->handle =
-                       (void *)dev_priv->bci_ring->offset;
-               dev_priv->ring_rptr->handle =
-                       (void *)dev_priv->ring_rptr->offset;
+               dev_priv->bci->handle =
+                       (void *)dev_priv->bci->offset;
                dev_priv->buffers->handle = (void *)dev_priv->buffers->offset;
 
-               DRM_DEBUG( "dev_priv->bci_ring->handle %p\n",
-                          dev_priv->bci_ring->handle );
-               DRM_DEBUG( "dev_priv->ring_rptr->handle %p\n",
-                          dev_priv->ring_rptr->handle );
+               DRM_DEBUG( "dev_priv->bci->handle %p\n",
+                          dev_priv->bci->handle );
                DRM_DEBUG( "dev_priv->buffers->handle %p\n",
                           dev_priv->buffers->handle );
        }
@@ -212,20 +215,6 @@
        DRM_DEBUG( "dev_priv->agp_buffers_offset 0x%lx\n",
                   dev_priv->agp_buffers_offset );
 
-       dev_priv->ring.head = ((__volatile__ u32 *)
-                              dev_priv->ring_rptr->handle);
-
-       dev_priv->ring.start = (u32 *)dev_priv->bci_ring->handle;
-       dev_priv->ring.end = ((u32 *)dev_priv->bci_ring->handle
-                             + init->ring_size / sizeof(u32));
-       dev_priv->ring.size = init->ring_size;
-       dev_priv->ring.size_l2qw = DRM(order)( init->ring_size / 8 );
-
-       dev_priv->ring.tail_mask =
-               (dev_priv->ring.size / sizeof(u32)) - 1;
-
-       dev_priv->ring.high_mark = SAVAGE_RING_HIGH_MARK;
-
 #if __REALLY_HAVE_SG
        if ( dev_priv->is_pci ) {
                if (!DRM(ati_pcigart_init)( dev, &dev_priv->phys_pci_gart,
@@ -266,8 +255,6 @@
        }
 #endif /* __REALLY_HAVE_SG */
 
-/* FIXME:      savage_bci_init_ring_buffer( dev, dev_priv ); */
-
        dev_priv->last_buf = 0;
 
        dev->dev_private = (void *)dev_priv;
@@ -279,15 +266,14 @@
 
 int savage_do_cleanup_bci( drm_device_t *dev )
 {
-       DRM_DEBUG( "\n" );
+       DRM_INFO( "cleaning up bci ...\n" );
 
        if ( dev->dev_private ) {
                drm_savage_private_t *dev_priv = dev->dev_private;
 
                if ( !dev_priv->is_pci ) {
-                       DRM_IOREMAPFREE( dev_priv->bci_ring );
-                       DRM_IOREMAPFREE( dev_priv->ring_rptr );
-                       DRM_IOREMAPFREE( dev_priv->buffers );
+                       /* FIXME: DRM_IOREMAPFREE( dev_priv->bci ); */
+                       /* FIXME: DRM_IOREMAPFREE( dev_priv->buffers ); */
                } else {
 #if __REALLY_HAVE_SG
                        if (!DRM(ati_pcigart_cleanup)( dev,
Index: os-support/linux/drm/kernel/savage_drm.h
===================================================================
RCS file: 
/cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/Attic/savage_drm.h,v
retrieving revision 1.1.2.1
diff -u -r1.1.2.1 savage_drm.h
--- os-support/linux/drm/kernel/savage_drm.h    2 Mar 2003 21:44:26 -0000       1.1.2.1
+++ os-support/linux/drm/kernel/savage_drm.h    5 Mar 2003 19:48:45 -0000
@@ -159,7 +159,6 @@
        int is_pci;
        int bci_mode;
        int agp_size;
-       int ring_size;
        int usec_timeout;
 
        unsigned int fb_bpp;
@@ -170,8 +169,7 @@
 
        unsigned long fb_offset;
        unsigned long mmio_offset;
-       unsigned long ring_offset;
-       unsigned long ring_rptr_offset;
+       unsigned long bci_offset;
        unsigned long buffers_offset;
        unsigned long agp_textures_offset;
 } drm_savage_init_t;
Index: os-support/linux/drm/kernel/savage_drv.h
===================================================================
RCS file: 
/cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/Attic/savage_drv.h,v
retrieving revision 1.1.2.1
diff -u -r1.1.2.1 savage_drv.h
--- os-support/linux/drm/kernel/savage_drv.h    2 Mar 2003 21:44:26 -0000       1.1.2.1
+++ os-support/linux/drm/kernel/savage_drv.h    5 Mar 2003 19:48:45 -0000
@@ -38,19 +38,6 @@
        struct drm_radeon_freelist *prev;
 } drm_savage_freelist_t;
 
-typedef struct drm_savage_ring_buffer {
-       u32 *start;
-       u32 *end;
-       int size;
-       int size_l2qw;
-
-       volatile u32 *head;
-       u32 tail;
-       u32 tail_mask;
-       int space;
-
-       int high_mark;
-} drm_savage_ring_buffer_t;
 
 typedef struct drm_savage_depth_clear_t {
        u32 rb3d_cntl;
@@ -68,7 +55,6 @@
 };
 
 typedef struct drm_savage_private {
-       drm_savage_ring_buffer_t ring;
        drm_savage_sarea_t *sarea_priv;
 
        int agp_size;
@@ -86,8 +72,6 @@
 
        int usec_timeout;
 
-       int is_r200;
-
        int is_pci;
        unsigned long phys_pci_gart;
        dma_addr_t bus_pci_gart;
@@ -126,8 +110,7 @@
        drm_map_t *sarea;
        drm_map_t *fb;
        drm_map_t *mmio;
-       drm_map_t *bci_ring;
-       drm_map_t *ring_rptr;
+       drm_map_t *bci;
        drm_map_t *buffers;
        drm_map_t *agp_textures;
 

Reply via email to