From 354fb1f00e21b237e6d264ca227d55d83cdb659f Mon Sep 17 00:00:00 2001 From: Alan Hourihane Date: Thu, 29 Mar 2001 16:21:29 +0000 Subject: [PATCH] kernel updates for gamma --- linux/gamma.h | 5 ++++ linux/gamma_dma.c | 63 +++++++++++++++++++++++++++-------------------- linux/gamma_drm.h | 4 +++ 3 files changed, 45 insertions(+), 27 deletions(-) diff --git a/linux/gamma.h b/linux/gamma.h index 83f6cdc1..9d52554c 100644 --- a/linux/gamma.h +++ b/linux/gamma.h @@ -74,6 +74,11 @@ #define DRIVER_PREINSTALL() do { \ drm_gamma_private_t *dev_priv = \ (drm_gamma_private_t *)dev->dev_private;\ +printk("map is 0x%x 0x%x 0x%x 0x%x\n", \ +dev_priv->mmio0->handle, \ +dev_priv->mmio1->handle, \ +dev_priv->mmio2->handle, \ +dev_priv->mmio3->handle); \ while(GAMMA_READ(GAMMA_INFIFOSPACE) < 2); \ GAMMA_WRITE( GAMMA_GCOMMANDMODE, 0x00000004 ); \ GAMMA_WRITE( GAMMA_GDMACONTROL, 0x00000000 ); \ diff --git a/linux/gamma_dma.c b/linux/gamma_dma.c index 88201959..ebed4635 100644 --- a/linux/gamma_dma.c +++ b/linux/gamma_dma.c @@ -264,19 +264,10 @@ static int gamma_do_dma(drm_device_t *dev, int locked) buf->time_dispatched = get_cycles(); #endif -/* WE NOW ARE ON LOGICAL PAGES!!! */ -#if 0 -printk("0x%x 0x%x 0x%x\n",dev_priv->buffers->handle,dev_priv->buffers->size,dev_priv->buffers->offset); -printk("start of dma buffer 0x%x 0x%x 0x%x 0x%x\n", - *(unsigned int *)dev_priv->buffers->handle, - *(unsigned int *)((void*)dev_priv->buffers->handle+(buf->idx<<12)+4), - *(unsigned int *)((void*)dev_priv->buffers->handle+(buf->idx<<12)+8), - *(unsigned int *)((void*)dev_priv->buffers->handle+(buf->idx<<12)+12)); -#endif -address = buf->idx << 12; -#if 1 + /* WE NOW ARE ON LOGICAL PAGES!!! - overriding address */ + address = buf->idx << 12; + gamma_dma_dispatch(dev, address, length); -#endif gamma_free_buffer(dev, dma->this_buffer); dma->this_buffer = buf; @@ -641,8 +632,7 @@ int gamma_dma(struct inode *inode, struct file *filp, unsigned int cmd, static int gamma_do_init_dma( drm_device_t *dev, drm_gamma_init_t *init ) { - drm_gamma_private_t *dev_priv = - (drm_gamma_private_t *)dev->dev_private; + drm_gamma_private_t *dev_priv; drm_device_dma_t *dma = dev->dma; drm_buf_t *buf; unsigned int *pagebuf; @@ -652,6 +642,38 @@ static int gamma_do_init_dma( drm_device_t *dev, drm_gamma_init_t *init ) DRM_DEBUG( "%s\n", __FUNCTION__ ); + dev_priv = DRM(alloc)( sizeof(drm_gamma_private_t), + DRM_MEM_DRIVER ); + if ( !dev_priv ) + return -ENOMEM; + + dev->dev_private = (void *)dev_priv; + + memset( dev_priv, 0, sizeof(drm_gamma_private_t) ); + +#if 0 + dev_priv->sarea_priv = + (drm_gamma_sarea_t *)((u8 *)dev_priv->sarea->handle + + init->sarea_priv_offset); +#endif + + DRM_FIND_MAP( dev_priv->mmio0, init->mmio0 ); + DRM_FIND_MAP( dev_priv->mmio1, init->mmio1 ); + DRM_FIND_MAP( dev_priv->mmio2, init->mmio2 ); + DRM_FIND_MAP( dev_priv->mmio3, init->mmio3 ); + +printk("dma map is 0x%x 0x%x 0x%x 0x%x\n", +dev_priv->mmio0, +dev_priv->mmio1, +dev_priv->mmio2, +dev_priv->mmio3); + +printk("dma map is 0x%x 0x%x 0x%x 0x%x\n", +dev_priv->mmio0->handle, +dev_priv->mmio1->handle, +dev_priv->mmio2->handle, +dev_priv->mmio3->handle); + if (init->pcimode) { buf = dma->buflist[GLINT_DRI_BUF_COUNT]; pgt = buf->address; @@ -664,21 +686,8 @@ static int gamma_do_init_dma( drm_device_t *dev, drm_gamma_init_t *init ) buf = dma->buflist[GLINT_DRI_BUF_COUNT]; } else { - /* some of this currently isn't used */ - dev_priv = DRM(alloc)( sizeof(drm_gamma_private_t), - DRM_MEM_DRIVER ); - if ( !dev_priv ) - return -ENOMEM; - dev->dev_private = (void *)dev_priv; - - memset( dev_priv, 0, sizeof(drm_gamma_private_t) ); - DRM_FIND_MAP( dev_priv->buffers, init->buffers_offset ); - dev_priv->sarea_priv = - (drm_gamma_sarea_t *)((u8 *)dev_priv->sarea->handle + - init->sarea_priv_offset); - DRM_IOREMAP( dev_priv->buffers ); buf = dma->buflist[GLINT_DRI_BUF_COUNT]; diff --git a/linux/gamma_drm.h b/linux/gamma_drm.h index 9061d08c..4a14f1ff 100644 --- a/linux/gamma_drm.h +++ b/linux/gamma_drm.h @@ -66,6 +66,10 @@ typedef struct drm_gamma_init { int sarea_priv_offset; int pcimode; + unsigned int mmio0; + unsigned int mmio1; + unsigned int mmio2; + unsigned int mmio3; unsigned int buffers_offset; } drm_gamma_init_t;