From a553ebcd127325cecb231fd1c8ddcba6f0e320e2 Mon Sep 17 00:00:00 2001 From: Gareth Hughes Date: Sun, 15 Oct 2000 13:57:49 +0000 Subject: [PATCH] Add support for indirect buffers. Clean up the way vertex and indirect buffes are handled. The way buffers are acquired will probably be changed back to what it was originally, using the DRM_DMA-style ioctl. Texture uploads should grab as many buffers as needed in a single ioctl. --- linux-core/r128_drv.c | 8 +++++--- linux/r128_bufs.c | 2 +- linux/r128_cce.c | 24 +++++------------------- linux/r128_drm.h | 7 ++++--- linux/r128_drv.c | 8 +++++--- linux/r128_drv.h | 9 +++++---- linux/r128_state.c | 6 +++--- 7 files changed, 28 insertions(+), 36 deletions(-) diff --git a/linux-core/r128_drv.c b/linux-core/r128_drv.c index 81909f94..51811d7b 100644 --- a/linux-core/r128_drv.c +++ b/linux-core/r128_drv.c @@ -24,8 +24,10 @@ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * - * Authors: Rickard E. (Rik) Faith - * Kevin E. Martin + * Authors: + * Rickard E. (Rik) Faith + * Kevin E. Martin + * Gareth Hughes * */ @@ -35,7 +37,7 @@ #define R128_NAME "r128" #define R128_DESC "ATI Rage 128" -#define R128_DATE "20001015" +#define R128_DATE "20001016" #define R128_MAJOR 1 #define R128_MINOR 1 #define R128_PATCHLEVEL 0 diff --git a/linux/r128_bufs.c b/linux/r128_bufs.c index bf3dff7f..86a63a42 100644 --- a/linux/r128_bufs.c +++ b/linux/r128_bufs.c @@ -235,7 +235,7 @@ int r128_mapbufs(struct inode *inode, struct file *filp, unsigned int cmd, if (dma->flags & _DRM_DMA_USE_AGP) { drm_map_t *map; - map = dev_priv->vertex_buffers; + map = dev_priv->buffers; if (!map) { retcode = -EINVAL; goto done; diff --git a/linux/r128_cce.c b/linux/r128_cce.c index e95a8471..1283a0ab 100644 --- a/linux/r128_cce.c +++ b/linux/r128_cce.c @@ -24,7 +24,8 @@ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * - * Authors: Kevin E. Martin + * Authors: + * Gareth Hughes * */ @@ -129,12 +130,6 @@ static void r128_status(drm_device_t *dev) } -/* ================================================================ - * GH: Done from here down - */ - - - /* ================================================================ * Engine, FIFO control */ @@ -458,14 +453,9 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init ) DO_FIND_MAP( dev_priv->fb, init->fb_offset ); DO_FIND_MAP( dev_priv->mmio, init->mmio_offset ); - DO_FIND_MAP( dev_priv->cce_ring, init->ring_offset ); DO_FIND_MAP( dev_priv->ring_rptr, init->ring_rptr_offset ); - - DO_FIND_MAP( dev_priv->vertex_buffers, - init->vertex_buffers_offset ); - DO_FIND_MAP( dev_priv->indirect_buffers, - init->indirect_buffers_offset ); + DO_FIND_MAP( dev_priv->buffers, init->buffers_offset ); if ( !dev_priv->is_pci ) { DO_FIND_MAP( dev_priv->agp_textures, @@ -478,8 +468,7 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init ) DO_REMAP( dev_priv->cce_ring ); DO_REMAP( dev_priv->ring_rptr ); - DO_REMAP( dev_priv->vertex_buffers ); - DO_REMAP( dev_priv->indirect_buffers ); + DO_REMAP( dev_priv->buffers ); #if 0 if ( !dev_priv->is_pci ) { DO_REMAP( dev_priv->agp_textures ); @@ -518,8 +507,7 @@ static int r128_do_cleanup_cce( drm_device_t *dev ) DO_REMAPFREE( dev_priv->cce_ring ); DO_REMAPFREE( dev_priv->ring_rptr ); - DO_REMAPFREE( dev_priv->vertex_buffers ); - DO_REMAPFREE( dev_priv->indirect_buffers ); + DO_REMAPFREE( dev_priv->buffers ); #if 0 if ( !dev_priv->is_pci ) { DO_REMAPFREE( dev_priv->agp_textures ); @@ -682,7 +670,6 @@ int r128_engine_reset( struct inode *inode, struct file *filp, /* ================================================================ * Freelist management */ -#if 0 #define R128_BUFFER_USED 0xffffffff #define R128_BUFFER_FREE 0 @@ -731,7 +718,6 @@ static int r128_freelist_init( drm_device_t *dev ) return 0; } -#endif drm_buf_t *r128_freelist_get( drm_device_t *dev ) { diff --git a/linux/r128_drm.h b/linux/r128_drm.h index fb7b53b5..b9250a2f 100644 --- a/linux/r128_drm.h +++ b/linux/r128_drm.h @@ -24,7 +24,9 @@ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * - * Authors: Kevin E. Martin + * Authors: + * Kevin E. Martin + * Gareth Hughes * */ @@ -179,8 +181,7 @@ typedef struct drm_r128_init { unsigned int mmio_offset; unsigned int ring_offset; unsigned int ring_rptr_offset; - unsigned int vertex_buffers_offset; - unsigned int indirect_buffers_offset; + unsigned int buffers_offset; unsigned int agp_textures_offset; } drm_r128_init_t; diff --git a/linux/r128_drv.c b/linux/r128_drv.c index 81909f94..51811d7b 100644 --- a/linux/r128_drv.c +++ b/linux/r128_drv.c @@ -24,8 +24,10 @@ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * - * Authors: Rickard E. (Rik) Faith - * Kevin E. Martin + * Authors: + * Rickard E. (Rik) Faith + * Kevin E. Martin + * Gareth Hughes * */ @@ -35,7 +37,7 @@ #define R128_NAME "r128" #define R128_DESC "ATI Rage 128" -#define R128_DATE "20001015" +#define R128_DATE "20001016" #define R128_MAJOR 1 #define R128_MINOR 1 #define R128_PATCHLEVEL 0 diff --git a/linux/r128_drv.h b/linux/r128_drv.h index a4110442..b531ae54 100644 --- a/linux/r128_drv.h +++ b/linux/r128_drv.h @@ -24,8 +24,10 @@ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * - * Authors: Rickard E. (Rik) Faith - * Kevin E. Martin + * Authors: + * Rickard E. (Rik) Faith + * Kevin E. Martin + * Gareth Hughes * */ @@ -87,8 +89,7 @@ typedef struct drm_r128_private { drm_map_t *mmio; drm_map_t *cce_ring; drm_map_t *ring_rptr; - drm_map_t *vertex_buffers; - drm_map_t *indirect_buffers; + drm_map_t *buffers; drm_map_t *agp_textures; } drm_r128_private_t; diff --git a/linux/r128_state.c b/linux/r128_state.c index 03c2da67..5cf622f6 100644 --- a/linux/r128_state.c +++ b/linux/r128_state.c @@ -23,7 +23,8 @@ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * - * Authors: Gareth Hughes + * Authors: + * Gareth Hughes * */ @@ -504,8 +505,7 @@ static void r128_cce_dispatch_vertex( drm_device_t *dev, int vertsize = sarea_priv->vertsize; int format = sarea_priv->vc_format; int index = buf->idx; - int offset = dev_priv->vertex_buffers->offset - + buf->offset - dev->agp->base; + int offset = dev_priv->buffers->offset + buf->offset - dev->agp->base; int size = buf->used / (vertsize * sizeof(u32)); int prim; int i = 0;