Remove i8x0 files from the BSD side. These were not actually ported, and
authorEric Anholt <anholt@freebsd.org>
Wed, 28 Aug 2002 04:33:02 +0000 (04:33 +0000)
committerEric Anholt <anholt@freebsd.org>
Wed, 28 Aug 2002 04:33:02 +0000 (04:33 +0000)
    when they do get ported most of them won't live in these directories.

12 files changed:
bsd/i810.h [deleted file]
bsd/i810/Makefile [deleted file]
bsd/i810_dma.c [deleted file]
bsd/i810_drm.h [deleted file]
bsd/i810_drv.c [deleted file]
bsd/i810_drv.h [deleted file]
bsd/i830.h [deleted file]
bsd/i830/Makefile [deleted file]
bsd/i830_dma.c [deleted file]
bsd/i830_drm.h [deleted file]
bsd/i830_drv.c [deleted file]
bsd/i830_drv.h [deleted file]

diff --git a/bsd/i810.h b/bsd/i810.h
deleted file mode 100644 (file)
index a5152bc..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/* i810.h -- Intel i810/i815 DRM template customization -*- linux-c -*-
- * Created: Thu Feb 15 00:01:12 2001 by gareth@valinux.com
- *
- * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors:
- *    Gareth Hughes <gareth@valinux.com>
- */
-
-#ifndef __I810_H__
-#define __I810_H__
-
-/* This remains constant for all DRM template files.
- */
-#define DRM(x) i810_##x
-
-/* General customization:
- */
-#define __HAVE_AGP             1
-#define __MUST_HAVE_AGP                1
-#define __HAVE_MTRR            1
-#define __HAVE_CTX_BITMAP      1
-
-/* Driver customization:
- */
-#define __HAVE_RELEASE         1
-#define DRIVER_RELEASE() do {                                          \
-       i810_reclaim_buffers( dev, priv->pid );                         \
-} while (0)
-
-/* DMA customization:
- */
-#define __HAVE_DMA             1
-#define __HAVE_DMA_QUEUE       1
-#define __HAVE_DMA_WAITLIST    1
-#define __HAVE_DMA_RECLAIM     1
-
-#define __HAVE_DMA_QUIESCENT   1
-#define DRIVER_DMA_QUIESCENT() do {                                    \
-       i810_dma_quiescent( dev );                                      \
-} while (0)
-
-#define __HAVE_DMA_IRQ         1
-#define __HAVE_DMA_IRQ_BH      1
-#define __HAVE_SHARED_IRQ       1
-#define DRIVER_PREINSTALL() do {                                       \
-       drm_i810_private_t *dev_priv =                                  \
-               (drm_i810_private_t *)dev->dev_private;                 \
-       u16 tmp;                                                        \
-       tmp = I810_READ16( I810REG_HWSTAM );                            \
-       tmp = tmp & 0x6000;                                             \
-       I810_WRITE16( I810REG_HWSTAM, tmp );                            \
-                                                                       \
-       tmp = I810_READ16( I810REG_INT_MASK_R );                        \
-       tmp = tmp & 0x6000;             /* Unmask interrupts */         \
-       I810_WRITE16( I810REG_INT_MASK_R, tmp );                        \
-       tmp = I810_READ16( I810REG_INT_ENABLE_R );                      \
-       tmp = tmp & 0x6000;             /* Disable all interrupts */    \
-       I810_WRITE16( I810REG_INT_ENABLE_R, tmp );                      \
-} while (0)
-
-#define DRIVER_POSTINSTALL() do {                                      \
-       drm_i810_private_t *dev_priv =                                  \
-               (drm_i810_private_t *)dev->dev_private;                 \
-       u16 tmp;                                                        \
-       tmp = I810_READ16( I810REG_INT_ENABLE_R );                      \
-       tmp = tmp & 0x6000;                                             \
-       tmp = tmp | 0x0003;     /* Enable bp & user interrupts */       \
-       I810_WRITE16( I810REG_INT_ENABLE_R, tmp );                      \
-} while (0)
-
-#define DRIVER_UNINSTALL() do {                                                \
-       drm_i810_private_t *dev_priv =                                  \
-               (drm_i810_private_t *)dev->dev_private;                 \
-       u16 tmp;                                                        \
-       if ( dev_priv ) {                                               \
-               tmp = I810_READ16( I810REG_INT_IDENTITY_R );            \
-               tmp = tmp & ~(0x6000);  /* Clear all interrupts */      \
-               if ( tmp != 0 )                                         \
-                       I810_WRITE16( I810REG_INT_IDENTITY_R, tmp );    \
-                                                                       \
-               tmp = I810_READ16( I810REG_INT_ENABLE_R );              \
-               tmp = tmp & 0x6000;     /* Disable all interrupts */    \
-               I810_WRITE16( I810REG_INT_ENABLE_R, tmp );              \
-       }                                                               \
-} while (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
diff --git a/bsd/i810/Makefile b/bsd/i810/Makefile
deleted file mode 100644 (file)
index c518c7e..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# $FreeBSD$
-
-KMOD=  i810
-NOMAN= YES
-SRCS=  i810_drv.c i810_dma.c
-SRCS+= device_if.h bus_if.h pci_if.h opt_drm_linux.h
-CFLAGS+=       ${DEBUG_FLAGS} -I. -I..
-
-@:
-       ln -sf /sys @
-
-machine:
-       ln -sf /sys/i386/include machine
-
-.if ${MACHINE_ARCH} == "i386"
-# This line enables linux ioctl handling
-# If you want support for this uncomment this line
-#I810_OPTS=     "\#define DRM_LINUX" 1
-.endif
-
-opt_drm_linux.h:
-       touch opt_drm_linux.h
-       echo $(I810_OPTS) >> opt_drm_linux.h
-
-.include <bsd.kmod.mk>
diff --git a/bsd/i810_dma.c b/bsd/i810_dma.c
deleted file mode 100644 (file)
index d860faf..0000000
+++ /dev/null
@@ -1,1223 +0,0 @@
-/* i810_dma.c -- DMA support for the i810 -*- linux-c -*-
- * Created: Mon Dec 13 01:50:01 1999 by jhartmann@precisioninsight.com
- *
- * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
- * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Authors: Rickard E. (Rik) Faith <faith@valinux.com>
- *         Jeff Hartmann <jhartmann@valinux.com>
- *          Keith Whitwell <keithw@valinux.com>
- *
- */
-
-
-#include "i810.h"
-#include "drmP.h"
-#include "drm.h"
-#include "i810_drm.h"
-#include "i810_drv.h"
-
-#define I810_BUF_FREE          2
-#define I810_BUF_CLIENT                1
-#define I810_BUF_HARDWARE              0
-
-#define I810_BUF_UNMAPPED 0
-#define I810_BUF_MAPPED   1
-
-#define RING_LOCALS    unsigned int outring, ringmask; volatile char *virt;
-
-#define BEGIN_LP_RING(n) do {                          \
-       if (I810_VERBOSE)                               \
-               DRM_DEBUG("BEGIN_LP_RING(%d) in %s\n",  \
-                         n, __FUNCTION__);             \
-       if (dev_priv->ring.space < n*4)                 \
-               i810_wait_ring(dev, n*4);               \
-       dev_priv->ring.space -= n*4;                    \
-       outring = dev_priv->ring.tail;                  \
-       ringmask = dev_priv->ring.tail_mask;            \
-       virt = dev_priv->ring.virtual_start;            \
-} while (0)
-
-#define ADVANCE_LP_RING() do {                                 \
-       if (I810_VERBOSE) DRM_DEBUG("ADVANCE_LP_RING\n");       \
-       dev_priv->ring.tail = outring;                          \
-       I810_WRITE(LP_RING + RING_TAIL, outring);               \
-} while(0)
-
-#define OUT_RING(n) do {                                               \
-       if (I810_VERBOSE) DRM_DEBUG("   OUT_RING %x\n", (int)(n));      \
-       *(volatile unsigned int *)(virt + outring) = n;                 \
-       outring += 4;                                                   \
-       outring &= ringmask;                                            \
-} while (0);
-
-static __inline__ void i810_print_status_page(drm_device_t *dev)
-{
-       drm_device_dma_t *dma = dev->dma;
-       drm_i810_private_t *dev_priv = dev->dev_private;
-       u32 *temp = (u32 *)dev_priv->hw_status_page;
-       int i;
-
-       DRM_DEBUG(  "hw_status: Interrupt Status : %x\n", temp[0]);
-       DRM_DEBUG(  "hw_status: LpRing Head ptr : %x\n", temp[1]);
-       DRM_DEBUG(  "hw_status: IRing Head ptr : %x\n", temp[2]);
-       DRM_DEBUG(  "hw_status: Reserved : %x\n", temp[3]);
-       DRM_DEBUG(  "hw_status: Driver Counter : %d\n", temp[5]);
-       for(i = 6; i < dma->buf_count + 6; i++) {
-               DRM_DEBUG( "buffer status idx : %d used: %d\n", i - 6, temp[i]);
-       }
-}
-
-static drm_buf_t *i810_freelist_get(drm_device_t *dev)
-{
-       drm_device_dma_t *dma = dev->dma;
-       int              i;
-       char            failed;
-
-       /* Linear search might not be the best solution */
-
-       for (i = 0; i < dma->buf_count; i++) {
-               drm_buf_t *buf = dma->buflist[ i ];
-               drm_i810_buf_priv_t *buf_priv = buf->dev_private;
-               /* In use is already a pointer */
-               _DRM_CAS(buf_priv->in_use, I810_BUF_FREE, I810_BUF_CLIENT,
-                                                       failed);
-               if (!failed)
-                       return buf;
-       }
-       return NULL;
-}
-
-/* This should only be called if the buffer is not sent to the hardware
- * yet, the hardware updates in use for us once its on the ring buffer.
- */
-
-static int i810_freelist_put(drm_device_t *dev, drm_buf_t *buf)
-{
-       drm_i810_buf_priv_t *buf_priv = buf->dev_private;
-       char failed;
-
-       /* In use is already a pointer */
-       _DRM_CAS(buf_priv->in_use, I810_BUF_CLIENT, I810_BUF_FREE, failed);
-       if(failed) {
-               DRM_ERROR("Freeing buffer thats not in use : %d\n", buf->idx);
-               return DRM_ERR( EINVAL );
-       }
-
-       return 0;
-}
-
-#if 0
-int i810_mmap_buffers(struct file *filp, struct vm_area_struct *vma)
-{
-       DRM_DEVICE;
-       drm_i810_private_t  *dev_priv;
-       drm_buf_t           *buf;
-       drm_i810_buf_priv_t *buf_priv;
-
-       lock_kernel();
-       dev_priv = dev->dev_private;
-       buf      = dev_priv->mmap_buffer;
-       buf_priv = buf->dev_private;
-
-       vma->vm_flags |= (VM_IO | VM_DONTCOPY);
-       vma->vm_file = filp;
-
-       buf_priv->currently_mapped = I810_BUF_MAPPED;
-       unlock_kernel();
-
-       if (remap_page_range(vma->vm_start,
-                            VM_OFFSET(vma),
-                            vma->vm_end - vma->vm_start,
-                            vma->vm_page_prot)) return DRM_ERR(EAGAIN);
-       return 0;
-}
-#endif
-
-static int i810_map_buffer(drm_buf_t *buf, struct file *filp)
-{
-       DRM_DEVICE;
-       drm_i810_buf_priv_t *buf_priv = buf->dev_private;
-       drm_i810_private_t *dev_priv = dev->dev_private;
-       struct file_operations *old_fops;
-       int retcode = 0;
-
-       if(buf_priv->currently_mapped == I810_BUF_MAPPED) return DRM_ERR(EINVAL);
-
-       if(VM_DONTCOPY != 0) {
-#if LINUX_VERSION_CODE <= 0x020402
-               down( &current->mm->mmap_sem );
-#else
-               down_write( &current->mm->mmap_sem );
-#endif
-               old_fops = filp->f_op;
-               filp->f_op = &i810_buffer_fops;
-               dev_priv->mmap_buffer = buf;
-               buf_priv->virtual = (void *)do_mmap(filp, 0, buf->total,
-                                                   PROT_READ|PROT_WRITE,
-                                                   MAP_SHARED,
-                                                   buf->bus_address);
-               dev_priv->mmap_buffer = NULL;
-               filp->f_op = old_fops;
-               if ((unsigned long)buf_priv->virtual > -1024UL) {
-                       /* Real error */
-                       DRM_DEBUG("mmap error\n");
-                       retcode = (signed int)buf_priv->virtual;
-                       buf_priv->virtual = 0;
-               }
-#if LINUX_VERSION_CODE <= 0x020402
-               up( &current->mm->mmap_sem );
-#else
-               up_write( &current->mm->mmap_sem );
-#endif
-       } else {
-               buf_priv->virtual = buf_priv->kernel_virtual;
-               buf_priv->currently_mapped = I810_BUF_MAPPED;
-       }
-       return retcode;
-}
-
-static int i810_unmap_buffer(drm_buf_t *buf)
-{
-       drm_i810_buf_priv_t *buf_priv = buf->dev_private;
-       int retcode = 0;
-
-       if(VM_DONTCOPY != 0) {
-               if(buf_priv->currently_mapped != I810_BUF_MAPPED)
-                       return DRM_ERR(EINVAL);
-#if LINUX_VERSION_CODE <= 0x020402
-               down( &current->mm->mmap_sem );
-#else
-               down_write( &current->mm->mmap_sem );
-#endif
-               retcode = do_munmap(current->mm,
-                                   (unsigned long)buf_priv->virtual,
-                                   (size_t) buf->total);
-#if LINUX_VERSION_CODE <= 0x020402
-               up( &current->mm->mmap_sem );
-#else
-               up_write( &current->mm->mmap_sem );
-#endif
-       }
-       buf_priv->currently_mapped = I810_BUF_UNMAPPED;
-       buf_priv->virtual = 0;
-
-       return retcode;
-}
-
-static int i810_dma_get_buffer(drm_device_t *dev, drm_i810_dma_t *d,
-                              struct file *filp)
-{
-       drm_file_t        *priv   = filp->private_data;
-       drm_buf_t         *buf;
-       drm_i810_buf_priv_t *buf_priv;
-       int retcode = 0;
-
-       buf = i810_freelist_get(dev);
-       if (!buf) {
-               retcode = -ENOMEM;
-               DRM_DEBUG("retcode=%d\n", retcode);
-               return DRM_ERR(retcode);
-       }
-
-       retcode = i810_map_buffer(buf, filp);
-       if(retcode) {
-               i810_freelist_put(dev, buf);
-               DRM_DEBUG("mapbuf failed, retcode %d\n", retcode);
-               return retcode;
-       }
-       buf->pid     = priv->pid;
-       buf_priv = buf->dev_private;
-       d->granted = 1;
-       d->request_idx = buf->idx;
-       d->request_size = buf->total;
-       d->virtual = buf_priv->virtual;
-
-       return retcode;
-}
-
-static unsigned long i810_alloc_page(drm_device_t *dev)
-{
-       unsigned long address;
-
-       address = __get_free_page(GFP_KERNEL);
-       if(address == 0UL)
-               return 0;
-
-       atomic_inc(&virt_to_page(address)->count);
-       set_bit(PG_locked, &virt_to_page(address)->flags);
-
-       return address;
-}
-
-static void i810_free_page(drm_device_t *dev, unsigned long page)
-{
-       if(page == 0UL)
-               return;
-
-       atomic_dec(&virt_to_page(page)->count);
-       clear_bit(PG_locked, &virt_to_page(page)->flags);
-       DRM_WAKEUP(&virt_to_page(page)->wait);
-       free_page(page);
-       return;
-}
-
-static int i810_dma_cleanup(drm_device_t *dev)
-{
-       drm_device_dma_t *dma = dev->dma;
-
-       if(dev->dev_private) {
-               int i;
-               drm_i810_private_t *dev_priv =
-                       (drm_i810_private_t *) dev->dev_private;
-
-               if(dev_priv->ring.virtual_start) {
-                       DRM(ioremapfree)((void *) dev_priv->ring.virtual_start,
-                                        dev_priv->ring.Size);
-               }
-               if(dev_priv->hw_status_page != 0UL) {
-                       i810_free_page(dev, dev_priv->hw_status_page);
-                       /* Need to rewrite hardware status page */
-                       I810_WRITE(0x02080, 0x1ffff000);
-               }
-               DRM(free)(dev->dev_private, sizeof(drm_i810_private_t),
-                        DRM_MEM_DRIVER);
-               dev->dev_private = NULL;
-
-               for (i = 0; i < dma->buf_count; i++) {
-                       drm_buf_t *buf = dma->buflist[ i ];
-                       drm_i810_buf_priv_t *buf_priv = buf->dev_private;
-                       DRM(ioremapfree)(buf_priv->kernel_virtual, buf->total);
-               }
-       }
-       return 0;
-}
-
-static int i810_wait_ring(drm_device_t *dev, int n)
-{
-       drm_i810_private_t *dev_priv = dev->dev_private;
-       drm_i810_ring_buffer_t *ring = &(dev_priv->ring);
-       int iters = 0;
-       unsigned long end;
-       unsigned int last_head = I810_READ(LP_RING + RING_HEAD) & HEAD_ADDR;
-
-       end = jiffies + (HZ*3);
-       while (ring->space < n) {
-               int i;
-
-               ring->head = I810_READ(LP_RING + RING_HEAD) & HEAD_ADDR;
-               ring->space = ring->head - (ring->tail+8);
-               if (ring->space < 0) ring->space += ring->Size;
-
-               if (ring->head != last_head)
-                  end = jiffies + (HZ*3);
-
-               iters++;
-               if((signed)(end - jiffies) <= 0) {
-                       DRM_ERROR("space: %d wanted %d\n", ring->space, n);
-                       DRM_ERROR("lockup\n");
-                       goto out_wait_ring;
-               }
-
-               for (i = 0 ; i < 2000 ; i++) ;
-       }
-
-out_wait_ring:
-       return iters;
-}
-
-static void i810_kernel_lost_context(drm_device_t *dev)
-{
-       drm_i810_private_t *dev_priv = dev->dev_private;
-       drm_i810_ring_buffer_t *ring = &(dev_priv->ring);
-
-       ring->head = I810_READ(LP_RING + RING_HEAD) & HEAD_ADDR;
-       ring->tail = I810_READ(LP_RING + RING_TAIL);
-       ring->space = ring->head - (ring->tail+8);
-       if (ring->space < 0) ring->space += ring->Size;
-}
-
-static int i810_freelist_init(drm_device_t *dev, drm_i810_private_t *dev_priv)
-{
-       drm_device_dma_t *dma = dev->dma;
-       int my_idx = 24;
-       u32 *hw_status = (u32 *)(dev_priv->hw_status_page + my_idx);
-       int i;
-
-       if(dma->buf_count > 1019) {
-               /* Not enough space in the status page for the freelist */
-               return DRM_ERR(EINVAL);
-       }
-
-       for (i = 0; i < dma->buf_count; i++) {
-               drm_buf_t *buf = dma->buflist[ i ];
-               drm_i810_buf_priv_t *buf_priv = buf->dev_private;
-
-               buf_priv->in_use = hw_status++;
-               buf_priv->my_use_idx = my_idx;
-               my_idx += 4;
-
-               *buf_priv->in_use = I810_BUF_FREE;
-
-               buf_priv->kernel_virtual = DRM(ioremap)(buf->bus_address,
-                                                       buf->total);
-       }
-       return 0;
-}
-
-static int i810_dma_initialize(drm_device_t *dev,
-                              drm_i810_private_t *dev_priv,
-                              drm_i810_init_t *init)
-{
-       drm_map_list_entry_t *listentry;
-
-       memset(dev_priv, 0, sizeof(drm_i810_private_t));
-
-       TAILQ_FOREACH(listentry, dev->maplist, link) {
-               drm_map_t *map = listentry->map;
-               if (map->type == _DRM_SHM &&
-                       map->flags & _DRM_CONTAINS_LOCK) {
-                       dev_priv->sarea = map;
-                       break;
-               }
-       }
-       
-       if(!dev_priv->sarea_map) {
-               dev->dev_private = (void *)dev_priv;
-               i810_dma_cleanup(dev);
-               DRM_ERROR("can not find sarea!\n");
-               return DRM_ERR(EINVAL);
-       }
-       DRM_FIND_MAP( dev_priv->mmio_map, init->mmio_offset );
-       if(!dev_priv->mmio_map) {
-               dev->dev_private = (void *)dev_priv;
-               i810_dma_cleanup(dev);
-               DRM_ERROR("can not find mmio map!\n");
-               return DRM_ERR(EINVAL);
-       }
-       DRM_FIND_MAP( dev_priv->buffer_map, init->buffers_offset );
-       if(!dev_priv->buffer_map) {
-               dev->dev_private = (void *)dev_priv;
-               i810_dma_cleanup(dev);
-               DRM_ERROR("can not find dma buffer map!\n");
-               return DRM_ERR(EINVAL);
-       }
-
-       dev_priv->sarea_priv = (drm_i810_sarea_t *)
-               ((u8 *)dev_priv->sarea_map->handle +
-                init->sarea_priv_offset);
-
-       atomic_set(&dev_priv->flush_done, 0);
-       init_waitqueue_head(&dev_priv->flush_queue);
-
-       dev_priv->ring.Start = init->ring_start;
-       dev_priv->ring.End = init->ring_end;
-       dev_priv->ring.Size = init->ring_size;
-
-       dev_priv->ring.virtual_start = DRM(ioremap)(dev->agp->base +
-                                                   init->ring_start,
-                                                   init->ring_size);
-
-       if (dev_priv->ring.virtual_start == NULL) {
-               dev->dev_private = (void *) dev_priv;
-               i810_dma_cleanup(dev);
-               DRM_ERROR("can not ioremap virtual address for"
-                         " ring buffer\n");
-               return DRM_ERR(ENOMEM);
-       }
-
-       dev_priv->ring.tail_mask = dev_priv->ring.Size - 1;
-
-       dev_priv->w = init->w;
-       dev_priv->h = init->h;
-       dev_priv->pitch = init->pitch;
-       dev_priv->back_offset = init->back_offset;
-       dev_priv->depth_offset = init->depth_offset;
-
-       dev_priv->front_di1 = init->front_offset | init->pitch_bits;
-       dev_priv->back_di1 = init->back_offset | init->pitch_bits;
-       dev_priv->zi1 = init->depth_offset | init->pitch_bits;
-
-       /* Program Hardware Status Page */
-       dev_priv->hw_status_page = i810_alloc_page(dev);
-       if(dev_priv->hw_status_page == 0UL) {
-               dev->dev_private = (void *)dev_priv;
-               i810_dma_cleanup(dev);
-               DRM_ERROR("Can not allocate hardware status page\n");
-               return DRM_ERR(ENOMEM);
-       }
-       memset((void *) dev_priv->hw_status_page, 0, PAGE_SIZE);
-       DRM_DEBUG("hw status page @ %lx\n", dev_priv->hw_status_page);
-
-       I810_WRITE(0x02080, virt_to_bus((void *)dev_priv->hw_status_page));
-       DRM_DEBUG("Enabled hardware status page\n");
-
-       /* Now we need to init our freelist */
-       if(i810_freelist_init(dev, dev_priv) != 0) {
-               dev->dev_private = (void *)dev_priv;
-               i810_dma_cleanup(dev);
-               DRM_ERROR("Not enough space in the status page for"
-                         " the freelist\n");
-               return DRM_ERR(ENOMEM);
-       }
-       dev->dev_private = (void *)dev_priv;
-
-       return 0;
-}
-
-int i810_dma_init( DRM_IOCTL_ARGS )
-{
-       DRM_DEVICE;
-       drm_i810_private_t *dev_priv;
-       drm_i810_init_t init;
-       int retcode = 0;
-
-       DRM_COPY_FROM_USER_IOCTL( init, (drm_i810_init_t *) data, sizeof(init) );
-
-       switch(init.func) {
-               case I810_INIT_DMA:
-                       dev_priv = DRM(alloc)(sizeof(drm_i810_private_t),
-                                            DRM_MEM_DRIVER);
-                       if(dev_priv == NULL) return DRM_ERR(ENOMEM);
-                       retcode = i810_dma_initialize(dev, dev_priv, &init);
-               break;
-               case I810_CLEANUP_DMA:
-                       retcode = i810_dma_cleanup(dev);
-               break;
-               default:
-                       retcode = -EINVAL;
-               break;
-       }
-
-       return DRM_ERR(retcode);
-}
-
-
-
-/* Most efficient way to verify state for the i810 is as it is
- * emitted.  Non-conformant state is silently dropped.
- *
- * Use 'volatile' & local var tmp to force the emitted values to be
- * identical to the verified ones.
- */
-static void i810EmitContextVerified( drm_device_t *dev,
-                                    volatile unsigned int *code )
-{
-       drm_i810_private_t *dev_priv = dev->dev_private;
-       int i, j = 0;
-       unsigned int tmp;
-       RING_LOCALS;
-
-       BEGIN_LP_RING( I810_CTX_SETUP_SIZE );
-
-       OUT_RING( GFX_OP_COLOR_FACTOR );
-       OUT_RING( code[I810_CTXREG_CF1] );
-
-       OUT_RING( GFX_OP_STIPPLE );
-       OUT_RING( code[I810_CTXREG_ST1] );
-
-       for ( i = 4 ; i < I810_CTX_SETUP_SIZE ; i++ ) {
-               tmp = code[i];
-
-               if ((tmp & (7<<29)) == (3<<29) &&
-                   (tmp & (0x1f<<24)) < (0x1d<<24))
-               {
-                       OUT_RING( tmp );
-                       j++;
-               }
-       }
-
-       if (j & 1)
-               OUT_RING( 0 );
-
-       ADVANCE_LP_RING();
-}
-
-static void i810EmitTexVerified( drm_device_t *dev,
-                                volatile unsigned int *code )
-{
-       drm_i810_private_t *dev_priv = dev->dev_private;
-       int i, j = 0;
-       unsigned int tmp;
-       RING_LOCALS;
-
-       BEGIN_LP_RING( I810_TEX_SETUP_SIZE );
-
-       OUT_RING( GFX_OP_MAP_INFO );
-       OUT_RING( code[I810_TEXREG_MI1] );
-       OUT_RING( code[I810_TEXREG_MI2] );
-       OUT_RING( code[I810_TEXREG_MI3] );
-
-       for ( i = 4 ; i < I810_TEX_SETUP_SIZE ; i++ ) {
-               tmp = code[i];
-
-               if ((tmp & (7<<29)) == (3<<29) &&
-                   (tmp & (0x1f<<24)) < (0x1d<<24))
-               {
-                       OUT_RING( tmp );
-                       j++;
-               }
-       }
-
-       if (j & 1)
-               OUT_RING( 0 );
-
-       ADVANCE_LP_RING();
-}
-
-
-/* Need to do some additional checking when setting the dest buffer.
- */
-static void i810EmitDestVerified( drm_device_t *dev,
-                                 volatile unsigned int *code )
-{
-       drm_i810_private_t *dev_priv = dev->dev_private;
-       unsigned int tmp;
-       RING_LOCALS;
-
-       BEGIN_LP_RING( I810_DEST_SETUP_SIZE + 2 );
-
-       tmp = code[I810_DESTREG_DI1];
-       if (tmp == dev_priv->front_di1 || tmp == dev_priv->back_di1) {
-               OUT_RING( CMD_OP_DESTBUFFER_INFO );
-               OUT_RING( tmp );
-       } else
-          DRM_DEBUG("bad di1 %x (allow %x or %x)\n",
-                    tmp, dev_priv->front_di1, dev_priv->back_di1);
-
-       /* invarient:
-        */
-       OUT_RING( CMD_OP_Z_BUFFER_INFO );
-       OUT_RING( dev_priv->zi1 );
-
-       OUT_RING( GFX_OP_DESTBUFFER_VARS );
-       OUT_RING( code[I810_DESTREG_DV1] );
-
-       OUT_RING( GFX_OP_DRAWRECT_INFO );
-       OUT_RING( code[I810_DESTREG_DR1] );
-       OUT_RING( code[I810_DESTREG_DR2] );
-       OUT_RING( code[I810_DESTREG_DR3] );
-       OUT_RING( code[I810_DESTREG_DR4] );
-       OUT_RING( 0 );
-
-       ADVANCE_LP_RING();
-}
-
-
-
-static void i810EmitState( drm_device_t *dev )
-{
-       drm_i810_private_t *dev_priv = dev->dev_private;
-       drm_i810_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       unsigned int dirty = sarea_priv->dirty;
-
-       if (dirty & I810_UPLOAD_BUFFERS) {
-               i810EmitDestVerified( dev, sarea_priv->BufferState );
-               sarea_priv->dirty &= ~I810_UPLOAD_BUFFERS;
-       }
-
-       if (dirty & I810_UPLOAD_CTX) {
-               i810EmitContextVerified( dev, sarea_priv->ContextState );
-               sarea_priv->dirty &= ~I810_UPLOAD_CTX;
-       }
-
-       if (dirty & I810_UPLOAD_TEX0) {
-               i810EmitTexVerified( dev, sarea_priv->TexState[0] );
-               sarea_priv->dirty &= ~I810_UPLOAD_TEX0;
-       }
-
-       if (dirty & I810_UPLOAD_TEX1) {
-               i810EmitTexVerified( dev, sarea_priv->TexState[1] );
-               sarea_priv->dirty &= ~I810_UPLOAD_TEX1;
-       }
-}
-
-
-
-/* need to verify
- */
-static void i810_dma_dispatch_clear( drm_device_t *dev, int flags,
-                                    unsigned int clear_color,
-                                    unsigned int clear_zval )
-{
-       drm_i810_private_t *dev_priv = dev->dev_private;
-       drm_i810_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       int nbox = sarea_priv->nbox;
-       drm_clip_rect_t *pbox = sarea_priv->boxes;
-       int pitch = dev_priv->pitch;
-       int cpp = 2;
-       int i;
-       RING_LOCALS;
-
-       i810_kernel_lost_context(dev);
-
-       if (nbox > I810_NR_SAREA_CLIPRECTS)
-               nbox = I810_NR_SAREA_CLIPRECTS;
-
-       for (i = 0 ; i < nbox ; i++, pbox++) {
-               unsigned int x = pbox->x1;
-               unsigned int y = pbox->y1;
-               unsigned int width = (pbox->x2 - x) * cpp;
-               unsigned int height = pbox->y2 - y;
-               unsigned int start = y * pitch + x * cpp;
-
-               if (pbox->x1 > pbox->x2 ||
-                   pbox->y1 > pbox->y2 ||
-                   pbox->x2 > dev_priv->w ||
-                   pbox->y2 > dev_priv->h)
-                       continue;
-
-               if ( flags & I810_FRONT ) {
-                       DRM_DEBUG("clear front\n");
-                       BEGIN_LP_RING( 6 );
-                       OUT_RING( BR00_BITBLT_CLIENT |
-                                 BR00_OP_COLOR_BLT | 0x3 );
-                       OUT_RING( BR13_SOLID_PATTERN | (0xF0 << 16) | pitch );
-                       OUT_RING( (height << 16) | width );
-                       OUT_RING( start );
-                       OUT_RING( clear_color );
-                       OUT_RING( 0 );
-                       ADVANCE_LP_RING();
-               }
-
-               if ( flags & I810_BACK ) {
-                       DRM_DEBUG("clear back\n");
-                       BEGIN_LP_RING( 6 );
-                       OUT_RING( BR00_BITBLT_CLIENT |
-                                 BR00_OP_COLOR_BLT | 0x3 );
-                       OUT_RING( BR13_SOLID_PATTERN | (0xF0 << 16) | pitch );
-                       OUT_RING( (height << 16) | width );
-                       OUT_RING( dev_priv->back_offset + start );
-                       OUT_RING( clear_color );
-                       OUT_RING( 0 );
-                       ADVANCE_LP_RING();
-               }
-
-               if ( flags & I810_DEPTH ) {
-                       DRM_DEBUG("clear depth\n");
-                       BEGIN_LP_RING( 6 );
-                       OUT_RING( BR00_BITBLT_CLIENT |
-                                 BR00_OP_COLOR_BLT | 0x3 );
-                       OUT_RING( BR13_SOLID_PATTERN | (0xF0 << 16) | pitch );
-                       OUT_RING( (height << 16) | width );
-                       OUT_RING( dev_priv->depth_offset + start );
-                       OUT_RING( clear_zval );
-                       OUT_RING( 0 );
-                       ADVANCE_LP_RING();
-               }
-       }
-}
-
-static void i810_dma_dispatch_swap( drm_device_t *dev )
-{
-       drm_i810_private_t *dev_priv = dev->dev_private;
-       drm_i810_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       int nbox = sarea_priv->nbox;
-       drm_clip_rect_t *pbox = sarea_priv->boxes;
-       int pitch = dev_priv->pitch;
-       int cpp = 2;
-       int ofs = dev_priv->back_offset;
-       int i;
-       RING_LOCALS;
-
-       DRM_DEBUG("swapbuffers\n");
-
-       i810_kernel_lost_context(dev);
-
-       if (nbox > I810_NR_SAREA_CLIPRECTS)
-               nbox = I810_NR_SAREA_CLIPRECTS;
-
-       for (i = 0 ; i < nbox; i++, pbox++)
-       {
-               unsigned int w = pbox->x2 - pbox->x1;
-               unsigned int h = pbox->y2 - pbox->y1;
-               unsigned int dst = pbox->x1*cpp + pbox->y1*pitch;
-               unsigned int start = ofs + dst;
-
-               if (pbox->x1 > pbox->x2 ||
-                   pbox->y1 > pbox->y2 ||
-                   pbox->x2 > dev_priv->w ||
-                   pbox->y2 > dev_priv->h)
-                       continue;
-
-               DRM_DEBUG("dispatch swap %d,%d-%d,%d!\n",
-                         pbox[i].x1, pbox[i].y1,
-                         pbox[i].x2, pbox[i].y2);
-
-               BEGIN_LP_RING( 6 );
-               OUT_RING( BR00_BITBLT_CLIENT | BR00_OP_SRC_COPY_BLT | 0x4 );
-               OUT_RING( pitch | (0xCC << 16));
-               OUT_RING( (h << 16) | (w * cpp));
-               OUT_RING( dst );
-               OUT_RING( pitch );
-               OUT_RING( start );
-               ADVANCE_LP_RING();
-       }
-}
-
-
-static void i810_dma_dispatch_vertex(drm_device_t *dev,
-                                    drm_buf_t *buf,
-                                    int discard,
-                                    int used)
-{
-       drm_i810_private_t *dev_priv = dev->dev_private;
-       drm_i810_buf_priv_t *buf_priv = buf->dev_private;
-       drm_i810_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       drm_clip_rect_t *box = sarea_priv->boxes;
-       int nbox = sarea_priv->nbox;
-       unsigned long address = (unsigned long)buf->bus_address;
-       unsigned long start = address - dev->agp->base;
-       int i = 0;
-       char failed;
-       RING_LOCALS;
-
-       i810_kernel_lost_context(dev);
-
-       if (nbox > I810_NR_SAREA_CLIPRECTS)
-               nbox = I810_NR_SAREA_CLIPRECTS;
-
-       if (discard) {
-               _DRM_CAS(buf_priv->in_use, I810_BUF_CLIENT,
-                           I810_BUF_HARDWARE, failed);
-               if (failed)
-                       DRM_DEBUG("xxxx 2\n");
-       }
-
-       if (used > 4*1024)
-               used = 0;
-
-       if (sarea_priv->dirty)
-          i810EmitState( dev );
-
-       DRM_DEBUG("dispatch vertex addr 0x%lx, used 0x%x nbox %d\n",
-                 address, used, nbox);
-
-       dev_priv->counter++;
-       DRM_DEBUG(  "dispatch counter : %ld\n", dev_priv->counter);
-       DRM_DEBUG(  "i810_dma_dispatch\n");
-       DRM_DEBUG(  "start : %lx\n", start);
-       DRM_DEBUG(  "used : %d\n", used);
-       DRM_DEBUG(  "start + used - 4 : %ld\n", start + used - 4);
-
-       if (buf_priv->currently_mapped == I810_BUF_MAPPED) {
-               *(u32 *)buf_priv->virtual = (GFX_OP_PRIMITIVE |
-                                            sarea_priv->vertex_prim |
-                                            ((used/4)-2));
-
-               if (used & 4) {
-                       *(u32 *)((u32)buf_priv->virtual + used) = 0;
-                       used += 4;
-               }
-
-               i810_unmap_buffer(buf);
-       }
-
-       if (used) {
-               do {
-                       if (i < nbox) {
-                               BEGIN_LP_RING(4);
-                               OUT_RING( GFX_OP_SCISSOR | SC_UPDATE_SCISSOR |
-                                         SC_ENABLE );
-                               OUT_RING( GFX_OP_SCISSOR_INFO );
-                               OUT_RING( box[i].x1 | (box[i].y1<<16) );
-                               OUT_RING( (box[i].x2-1) | ((box[i].y2-1)<<16) );
-                               ADVANCE_LP_RING();
-                       }
-
-                       BEGIN_LP_RING(4);
-                       OUT_RING( CMD_OP_BATCH_BUFFER );
-                       OUT_RING( start | BB1_PROTECTED );
-                       OUT_RING( start + used - 4 );
-                       OUT_RING( 0 );
-                       ADVANCE_LP_RING();
-
-               } while (++i < nbox);
-       }
-
-       BEGIN_LP_RING(10);
-       OUT_RING( CMD_STORE_DWORD_IDX );
-       OUT_RING( 20 );
-       OUT_RING( dev_priv->counter );
-       OUT_RING( 0 );
-
-       if (discard) {
-               OUT_RING( CMD_STORE_DWORD_IDX );
-               OUT_RING( buf_priv->my_use_idx );
-               OUT_RING( I810_BUF_FREE );
-               OUT_RING( 0 );
-       }
-
-       OUT_RING( CMD_REPORT_HEAD );
-       OUT_RING( 0 );
-       ADVANCE_LP_RING();
-}
-
-
-/* Interrupts are only for flushing */
-void i810_dma_service(int irq, void *device, struct pt_regs *regs)
-{
-       drm_device_t     *dev = (drm_device_t *)device;
-       drm_i810_private_t *dev_priv = (drm_i810_private_t *)dev->dev_private;
-       u16 temp;
-
-       atomic_inc(&dev->counts[_DRM_STAT_IRQ]);
-       temp = I810_READ16(I810REG_INT_IDENTITY_R);
-       temp = temp & ~(0x6000);
-       if(temp != 0) I810_WRITE16(I810REG_INT_IDENTITY_R,
-                                  temp); /* Clear all interrupts */
-       else
-          return;
-
-       queue_task(&dev->tq, &tq_immediate);
-       mark_bh(IMMEDIATE_BH);
-}
-
-void i810_dma_immediate_bh(void *device)
-{
-       drm_device_t *dev = (drm_device_t *) device;
-       drm_i810_private_t *dev_priv = (drm_i810_private_t *)dev->dev_private;
-
-       atomic_set(&dev_priv->flush_done, 1);
-       DRM_WAKEUP_INT(&dev_priv->flush_queue);
-}
-
-static inline void i810_dma_emit_flush(drm_device_t *dev)
-{
-       drm_i810_private_t *dev_priv = dev->dev_private;
-       RING_LOCALS;
-
-       i810_kernel_lost_context(dev);
-
-       BEGIN_LP_RING(2);
-       OUT_RING( CMD_REPORT_HEAD );
-       OUT_RING( GFX_OP_USER_INTERRUPT );
-       ADVANCE_LP_RING();
-
-/*     i810_wait_ring( dev, dev_priv->ring.Size - 8 ); */
-/*             atomic_set(&dev_priv->flush_done, 1); */
-/*             DRM_WAKEUP_INT(&dev_priv->flush_queue); */
-}
-
-static inline void i810_dma_quiescent_emit(drm_device_t *dev)
-{
-       drm_i810_private_t *dev_priv = dev->dev_private;
-       RING_LOCALS;
-
-       i810_kernel_lost_context(dev);
-
-       BEGIN_LP_RING(4);
-       OUT_RING( INST_PARSER_CLIENT | INST_OP_FLUSH | INST_FLUSH_MAP_CACHE );
-       OUT_RING( CMD_REPORT_HEAD );
-       OUT_RING( 0 );
-       OUT_RING( GFX_OP_USER_INTERRUPT );
-       ADVANCE_LP_RING();
-
-/*     i810_wait_ring( dev, dev_priv->ring.Size - 8 ); */
-/*             atomic_set(&dev_priv->flush_done, 1); */
-/*             DRM_WAKEUP_INT(&dev_priv->flush_queue); */
-}
-
-void i810_dma_quiescent(drm_device_t *dev)
-{
-       DECLARE_WAITQUEUE(entry, current);
-       drm_i810_private_t *dev_priv = (drm_i810_private_t *)dev->dev_private;
-       unsigned long end;
-
-       if(dev_priv == NULL) {
-               return;
-       }
-       atomic_set(&dev_priv->flush_done, 0);
-       add_wait_queue(&dev_priv->flush_queue, &entry);
-       end = jiffies + (HZ*3);
-
-       for (;;) {
-               current->state = TASK_INTERRUPTIBLE;
-               i810_dma_quiescent_emit(dev);
-               if (atomic_read(&dev_priv->flush_done) == 1) break;
-               if((signed)(end - jiffies) <= 0) {
-                       DRM_ERROR("lockup\n");
-                       break;
-               }
-               schedule_timeout(HZ*3);
-               if (signal_pending(current)) {
-                       break;
-               }
-       }
-
-       current->state = TASK_RUNNING;
-       remove_wait_queue(&dev_priv->flush_queue, &entry);
-
-       return;
-}
-
-static int i810_flush_queue(drm_device_t *dev)
-{
-       DECLARE_WAITQUEUE(entry, current);
-       drm_i810_private_t *dev_priv = (drm_i810_private_t *)dev->dev_private;
-       drm_device_dma_t *dma = dev->dma;
-       unsigned long end;
-       int i, ret = 0;
-
-       if(dev_priv == NULL) {
-               return 0;
-       }
-       atomic_set(&dev_priv->flush_done, 0);
-       add_wait_queue(&dev_priv->flush_queue, &entry);
-       end = jiffies + (HZ*3);
-       for (;;) {
-               current->state = TASK_INTERRUPTIBLE;
-               i810_dma_emit_flush(dev);
-               if (atomic_read(&dev_priv->flush_done) == 1) break;
-               if((signed)(end - jiffies) <= 0) {
-                       DRM_ERROR("lockup\n");
-                       break;
-               }
-               schedule_timeout(HZ*3);
-               if (signal_pending(current)) {
-                       ret = -EINTR; /* Can't restart */
-                       break;
-               }
-       }
-
-       current->state = TASK_RUNNING;
-       remove_wait_queue(&dev_priv->flush_queue, &entry);
-
-
-       for (i = 0; i < dma->buf_count; i++) {
-               drm_buf_t *buf = dma->buflist[ i ];
-               drm_i810_buf_priv_t *buf_priv = buf->dev_private;
-
-               char failed;
-               _DRM_CAS(buf_priv->in_use, I810_BUF_HARDWARE,
-                                  I810_BUF_FREE, failed);
-
-               if (!failed)
-                       DRM_DEBUG("reclaimed from HARDWARE\n");
-               if (used == I810_BUF_CLIENT)
-                       DRM_DEBUG("still on client HARDWARE\n");
-       }
-
-       return ret;
-}
-
-/* Must be called with the lock held */
-void i810_reclaim_buffers(drm_device_t *dev, pid_t pid)
-{
-       drm_device_dma_t *dma = dev->dma;
-       int              i;
-
-       if (!dma) return;
-       if (!dev->dev_private) return;
-       if (!dma->buflist) return;
-
-        i810_flush_queue(dev);
-
-       for (i = 0; i < dma->buf_count; i++) {
-               drm_buf_t *buf = dma->buflist[ i ];
-               drm_i810_buf_priv_t *buf_priv = buf->dev_private;
-
-               if (buf->pid == pid && buf_priv) {
-                       char failed;
-                       _DRM_CAS(buf_priv->in_use, I810_BUF_CLIENT,
-                                          I810_BUF_FREE, failed);
-
-                       if (!failed)
-       
-                               DRM_DEBUG("reclaimed from client\n");
-                       if(buf_priv->currently_mapped == I810_BUF_MAPPED)
-                               buf_priv->currently_mapped = I810_BUF_UNMAPPED;
-               }
-       }
-}
-
-int i810_flush_ioctl( DRM_IOCTL_ARGS )
-{
-       DRM_DEVICE;
-
-       DRM_DEBUG("i810_flush_ioctl\n");
-       if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) {
-               DRM_ERROR("i810_flush_ioctl called without lock held\n");
-               return DRM_ERR( EINVAL );
-       }
-
-       i810_flush_queue(dev);
-       return 0;
-}
-
-
-int i810_dma_vertex( DRM_IOCTL_ARGS )
-{
-       DRM_DEVICE;
-       drm_device_dma_t *dma = dev->dma;
-       drm_i810_private_t *dev_priv = (drm_i810_private_t *)dev->dev_private;
-       u32 *hw_status = (u32 *)dev_priv->hw_status_page;
-       drm_i810_sarea_t *sarea_priv = (drm_i810_sarea_t *)
-                                       dev_priv->sarea_priv;
-       drm_i810_vertex_t vertex;
-
-       DRM_COPY_FROM_USER_IOCTL( vertex, (drm_i810_vertex_t *) data, sizeof(vertex) );
-
-       if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) {
-               DRM_ERROR("i810_dma_vertex called without lock held\n");
-               return DRM_ERR( EINVAL );
-       }
-
-       DRM_DEBUG("i810 dma vertex, idx %d used %d discard %d\n",
-                 vertex.idx, vertex.used, vertex.discard);
-
-       if(vertex.idx < 0 || vertex.idx > dma->buf_count) return DRM_ERR(EINVAL);
-
-       i810_dma_dispatch_vertex( dev,
-                                 dma->buflist[ vertex.idx ],
-                                 vertex.discard, vertex.used );
-
-       atomic_add(vertex.used, &dev->counts[_DRM_STAT_SECONDARY]);
-       atomic_inc(&dev->counts[_DRM_STAT_DMA]);
-       sarea_priv->last_enqueue = dev_priv->counter-1;
-       sarea_priv->last_dispatch = (int) hw_status[5];
-
-       return 0;
-}
-
-
-
-int i810_clear_bufs( DRM_IOCTL_ARGS )
-{
-       DRM_DEVICE;
-       drm_i810_clear_t clear;
-
-       DRM_COPY_FROM_USER_IOCTL( clear, (drm_i810_clear_t *) data, sizeof(clear) );
-
-       if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) {
-               DRM_ERROR("i810_clear_bufs called without lock held\n");
-               return DRM_ERR( EINVAL );
-       }
-
-       /* GH: Someone's doing nasty things... */
-       if (!dev->dev_private) {
-               return DRM_ERR(EINVAL);
-       }
-
-       i810_dma_dispatch_clear( dev, clear.flags,
-                                clear.clear_color,
-                                clear.clear_depth );
-       return 0;
-}
-
-int i810_swap_bufs( DRM_IOCTL_ARGS )
-{
-       DRM_DEVICE;
-
-       DRM_DEBUG("i810_swap_bufs\n");
-
-       if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) {
-               DRM_ERROR("i810_swap_buf called without lock held\n");
-               return DRM_ERR( EINVAL );
-       }
-
-       i810_dma_dispatch_swap( dev );
-       return 0;
-}
-
-int i810_getage( DRM_IOCTL_ARGS )
-{
-       DRM_DEVICE;
-       drm_i810_private_t *dev_priv = (drm_i810_private_t *)dev->dev_private;
-       u32 *hw_status = (u32 *)dev_priv->hw_status_page;
-       drm_i810_sarea_t *sarea_priv = (drm_i810_sarea_t *)
-                                       dev_priv->sarea_priv;
-
-       sarea_priv->last_dispatch = (int) hw_status[5];
-       return 0;
-}
-
-int i810_getbuf( DRM_IOCTL_ARGS )
-{
-       DRM_DEVICE;
-       int               retcode   = 0;
-       drm_i810_dma_t    d;
-       drm_i810_private_t *dev_priv = (drm_i810_private_t *)dev->dev_private;
-       u32 *hw_status = (u32 *)dev_priv->hw_status_page;
-       drm_i810_sarea_t *sarea_priv = (drm_i810_sarea_t *)
-                                       dev_priv->sarea_priv;
-
-       DRM_DEBUG("getbuf\n");
-       DRM_COPY_FROM_USER_IOCTL( d, (drm_i810_dma_t *) data, sizeof(d) );
-
-       if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) {
-               DRM_ERROR("i810_dma called without lock held\n");
-               return DRM_ERR( EINVAL );
-       }
-
-       d.granted = 0;
-
-       retcode = i810_dma_get_buffer(dev, &d, filp);
-
-       DRM_DEBUG("i810_dma: %d returning %d, granted = %d\n",
-                 DRM_CURRENTPID, retcode, d.granted);
-
-       DRM_COPY_TO_USER_IOCTL( (drm_dma_t *) data, d, sizeof(d) );
-       sarea_priv->last_dispatch = (int) hw_status[5];
-
-       return DRM_ERR(retcode);
-}
-
-int i810_copybuf( DRM_IOCTL_ARGS )
-{
-       DRM_DEVICE;
-       drm_i810_copy_t   d;
-       drm_i810_private_t *dev_priv = (drm_i810_private_t *)dev->dev_private;
-       u32 *hw_status = (u32 *)dev_priv->hw_status_page;
-       drm_i810_sarea_t *sarea_priv = (drm_i810_sarea_t *)
-                                       dev_priv->sarea_priv;
-       drm_buf_t *buf;
-       drm_i810_buf_priv_t *buf_priv;
-       drm_device_dma_t *dma = dev->dma;
-
-       if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) {
-               DRM_ERROR("i810_dma called without lock held\n");
-               return DRM_ERR( EINVAL );
-       }
-
-       DRM_COPY_FROM_USER_IOCTL( d, (drm_i810_copy_t *) data, sizeof(d) );
-
-        if(d.idx < 0 || d.idx > dma->buf_count) return DRM_ERR(EINVAL);
-       buf = dma->buflist[ d.idx ];
-       buf_priv = buf->dev_private;
-       if (buf_priv->currently_mapped != I810_BUF_MAPPED) return DRM_ERR(EPERM);
-       if(d.used < 0 || d.used > buf->total) return DRM_ERR(EINVAL);
-
-       if (DRM_COPY_FROM_USER(buf_priv->virtual, d.address, d.used))
-               return DRM_ERR( EFAULT );
-
-       sarea_priv->last_dispatch = (int) hw_status[5];
-
-       return 0;
-}
-
-int i810_docopy( DRM_IOCTL_ARGS )
-{
-       if(VM_DONTCOPY == 0) return 1;
-       return 0;
-}
diff --git a/bsd/i810_drm.h b/bsd/i810_drm.h
deleted file mode 100644 (file)
index 990e50e..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-#ifndef _I810_DRM_H_
-#define _I810_DRM_H_
-
-/* WARNING: These defines must be the same as what the Xserver uses.
- * if you change them, you must change the defines in the Xserver.
- */
-
-#ifndef _I810_DEFINES_
-#define _I810_DEFINES_
-
-#define I810_DMA_BUF_ORDER             12
-#define I810_DMA_BUF_SZ                (1<<I810_DMA_BUF_ORDER)
-#define I810_DMA_BUF_NR                256
-#define I810_NR_SAREA_CLIPRECTS        8
-
-/* Each region is a minimum of 64k, and there are at most 64 of them.
- */
-#define I810_NR_TEX_REGIONS 64
-#define I810_LOG_MIN_TEX_REGION_SIZE 16
-#endif
-
-#define I810_UPLOAD_TEX0IMAGE  0x1 /* handled clientside */
-#define I810_UPLOAD_TEX1IMAGE  0x2 /* handled clientside */
-#define I810_UPLOAD_CTX        0x4
-#define I810_UPLOAD_BUFFERS    0x8
-#define I810_UPLOAD_TEX0       0x10
-#define I810_UPLOAD_TEX1       0x20
-#define I810_UPLOAD_CLIPRECTS  0x40
-
-
-/* Indices into buf.Setup where various bits of state are mirrored per
- * context and per buffer.  These can be fired at the card as a unit,
- * or in a piecewise fashion as required.
- */
-
-/* Destbuffer state 
- *    - backbuffer linear offset and pitch -- invarient in the current dri
- *    - zbuffer linear offset and pitch -- also invarient
- *    - drawing origin in back and depth buffers.
- *
- * Keep the depth/back buffer state here to acommodate private buffers
- * in the future.
- */
-#define I810_DESTREG_DI0  0    /* CMD_OP_DESTBUFFER_INFO (2 dwords) */
-#define I810_DESTREG_DI1  1
-#define I810_DESTREG_DV0  2    /* GFX_OP_DESTBUFFER_VARS (2 dwords) */
-#define I810_DESTREG_DV1  3
-#define I810_DESTREG_DR0  4    /* GFX_OP_DRAWRECT_INFO (4 dwords) */
-#define I810_DESTREG_DR1  5
-#define I810_DESTREG_DR2  6
-#define I810_DESTREG_DR3  7
-#define I810_DESTREG_DR4  8
-#define I810_DEST_SETUP_SIZE 10
-
-/* Context state
- */
-#define I810_CTXREG_CF0   0    /* GFX_OP_COLOR_FACTOR */
-#define I810_CTXREG_CF1   1    
-#define I810_CTXREG_ST0   2     /* GFX_OP_STIPPLE */
-#define I810_CTXREG_ST1   3
-#define I810_CTXREG_VF    4    /* GFX_OP_VERTEX_FMT */
-#define I810_CTXREG_MT    5    /* GFX_OP_MAP_TEXELS */
-#define I810_CTXREG_MC0   6    /* GFX_OP_MAP_COLOR_STAGES - stage 0 */
-#define I810_CTXREG_MC1   7     /* GFX_OP_MAP_COLOR_STAGES - stage 1 */
-#define I810_CTXREG_MC2   8    /* GFX_OP_MAP_COLOR_STAGES - stage 2 */
-#define I810_CTXREG_MA0   9    /* GFX_OP_MAP_ALPHA_STAGES - stage 0 */
-#define I810_CTXREG_MA1   10   /* GFX_OP_MAP_ALPHA_STAGES - stage 1 */
-#define I810_CTXREG_MA2   11   /* GFX_OP_MAP_ALPHA_STAGES - stage 2 */
-#define I810_CTXREG_SDM   12   /* GFX_OP_SRC_DEST_MONO */
-#define I810_CTXREG_FOG   13   /* GFX_OP_FOG_COLOR */
-#define I810_CTXREG_B1    14   /* GFX_OP_BOOL_1 */
-#define I810_CTXREG_B2    15   /* GFX_OP_BOOL_2 */
-#define I810_CTXREG_LCS   16   /* GFX_OP_LINEWIDTH_CULL_SHADE_MODE */
-#define I810_CTXREG_PV    17   /* GFX_OP_PV_RULE -- Invarient! */
-#define I810_CTXREG_ZA    18   /* GFX_OP_ZBIAS_ALPHAFUNC */
-#define I810_CTXREG_AA    19   /* GFX_OP_ANTIALIAS */
-#define I810_CTX_SETUP_SIZE 20 
-
-/* Texture state (per tex unit)
- */
-#define I810_TEXREG_MI0  0     /* GFX_OP_MAP_INFO (4 dwords) */
-#define I810_TEXREG_MI1  1     
-#define I810_TEXREG_MI2  2     
-#define I810_TEXREG_MI3  3     
-#define I810_TEXREG_MF   4     /* GFX_OP_MAP_FILTER */
-#define I810_TEXREG_MLC  5     /* GFX_OP_MAP_LOD_CTL */
-#define I810_TEXREG_MLL  6     /* GFX_OP_MAP_LOD_LIMITS */
-#define I810_TEXREG_MCS  7     /* GFX_OP_MAP_COORD_SETS ??? */
-#define I810_TEX_SETUP_SIZE 8
-
-#define I810_FRONT   0x1
-#define I810_BACK    0x2
-#define I810_DEPTH   0x4
-
-
-typedef struct _drm_i810_init {
-       enum {
-               I810_INIT_DMA = 0x01,
-               I810_CLEANUP_DMA = 0x02
-       } func;
-#if CONFIG_XFREE86_VERSION < XFREE86_VERSION(4,1,0,0)
-       int ring_map_idx;
-       int buffer_map_idx;
-#else
-       unsigned int mmio_offset;
-       unsigned int buffers_offset;
-#endif
-       int sarea_priv_offset;
-       unsigned int ring_start;
-       unsigned int ring_end;
-       unsigned int ring_size;
-       unsigned int front_offset;
-       unsigned int back_offset;
-       unsigned int depth_offset;
-       unsigned int overlay_offset;
-       unsigned int overlay_physical;
-       unsigned int w;
-       unsigned int h;
-       unsigned int pitch;
-       unsigned int pitch_bits; 
-} drm_i810_init_t;
-
-/* Warning: If you change the SAREA structure you must change the Xserver
- * structure as well */
-
-typedef struct _drm_i810_tex_region {
-       unsigned char next, prev; /* indices to form a circular LRU  */
-       unsigned char in_use;   /* owned by a client, or free? */
-       int age;                /* tracked by clients to update local LRU's */
-} drm_i810_tex_region_t;
-
-typedef struct _drm_i810_sarea {
-       unsigned int ContextState[I810_CTX_SETUP_SIZE];
-       unsigned int BufferState[I810_DEST_SETUP_SIZE];
-       unsigned int TexState[2][I810_TEX_SETUP_SIZE];
-       unsigned int dirty;
-
-       unsigned int nbox;
-       drm_clip_rect_t boxes[I810_NR_SAREA_CLIPRECTS];
-
-       /* Maintain an LRU of contiguous regions of texture space.  If
-        * you think you own a region of texture memory, and it has an
-        * age different to the one you set, then you are mistaken and
-        * it has been stolen by another client.  If global texAge
-        * hasn't changed, there is no need to walk the list.
-        *
-        * These regions can be used as a proxy for the fine-grained
-        * texture information of other clients - by maintaining them
-        * in the same lru which is used to age their own textures,
-        * clients have an approximate lru for the whole of global
-        * texture space, and can make informed decisions as to which
-        * areas to kick out.  There is no need to choose whether to
-        * kick out your own texture or someone else's - simply eject
-        * them all in LRU order.  
-        */
-   
-       drm_i810_tex_region_t texList[I810_NR_TEX_REGIONS+1]; 
-                               /* Last elt is sentinal */
-        int texAge;            /* last time texture was uploaded */
-        int last_enqueue;      /* last time a buffer was enqueued */
-       int last_dispatch;      /* age of the most recently dispatched buffer */
-       int last_quiescent;     /*  */
-       int ctxOwner;           /* last context to upload state */
-
-       int vertex_prim;
-
-} drm_i810_sarea_t;
-
-/* WARNING: If you change any of these defines, make sure to change the
- * defines in the Xserver file (xf86drmMga.h)
- */
-
-/* i810 specific ioctls
- * The device specific ioctl range is 0x40 to 0x79.
- */
-#define DRM_IOCTL_I810_INIT            DRM_IOW( 0x40, drm_i810_init_t)
-#define DRM_IOCTL_I810_VERTEX          DRM_IOW( 0x41, drm_i810_vertex_t)
-#define DRM_IOCTL_I810_CLEAR           DRM_IOW( 0x42, drm_i810_clear_t)
-#define DRM_IOCTL_I810_FLUSH           DRM_IO(  0x43)
-#define DRM_IOCTL_I810_GETAGE          DRM_IO(  0x44)
-#define DRM_IOCTL_I810_GETBUF          DRM_IOWR(0x45, drm_i810_dma_t)
-#define DRM_IOCTL_I810_SWAP            DRM_IO(  0x46)
-#define DRM_IOCTL_I810_COPY            DRM_IOW( 0x47, drm_i810_copy_t)
-#define DRM_IOCTL_I810_DOCOPY          DRM_IO(  0x48)
-#define DRM_IOCTL_I810_OV0INFO         DRM_IOR( 0x49, drm_i810_overlay_t)
-#define DRM_IOCTL_I810_FSTATUS         DRM_IO ( 0x4a)
-#define DRM_IOCTL_I810_OV0FLIP         DRM_IO ( 0x4b)
-#define DRM_IOCTL_I810_MC              DRM_IOW( 0x4c, drm_i810_mc_t)
-#define DRM_IOCTL_I810_RSTATUS         DRM_IO ( 0x4d )
-
-typedef struct _drm_i810_clear {
-       int clear_color;
-       int clear_depth;
-       int flags;
-} drm_i810_clear_t;
-
-/* These may be placeholders if we have more cliprects than
- * I810_NR_SAREA_CLIPRECTS.  In that case, the client sets discard to
- * false, indicating that the buffer will be dispatched again with a
- * new set of cliprects.
- */
-typedef struct _drm_i810_vertex {
-       int idx;                /* buffer index */
-       int used;               /* nr bytes in use */
-       int discard;            /* client is finished with the buffer? */
-} drm_i810_vertex_t;
-
-typedef struct _drm_i810_copy_t {
-       int idx;                /* buffer index */
-       int used;               /* nr bytes in use */
-       void *address;          /* Address to copy from */
-} drm_i810_copy_t;
-
-typedef struct drm_i810_dma {
-       void *virtual;
-       int request_idx;
-       int request_size;
-       int granted;
-} drm_i810_dma_t;
-
-#endif /* _I810_DRM_H_ */
diff --git a/bsd/i810_drv.c b/bsd/i810_drv.c
deleted file mode 100644 (file)
index 3d96cb4..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/* i810_drv.c -- I810 driver -*- linux-c -*-
- * Created: Mon Dec 13 01:56:22 1999 by jhartmann@precisioninsight.com
- *
- * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
- * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors:
- *    Rickard E. (Rik) Faith <faith@valinux.com>
- *    Jeff Hartmann <jhartmann@valinux.com>
- *    Gareth Hughes <gareth@valinux.com>
- */
-
-
-#include <sys/types.h>
-#include <sys/bus.h>
-#include <pci/pcivar.h>
-
-#include "i810.h"
-#include "drmP.h"
-#include "drm.h"
-#include "i810_drm.h"
-#include "i810_drv.h"
-
-#define DRIVER_AUTHOR          "VA Linux Systems Inc."
-
-#define DRIVER_NAME            "i810"
-#define DRIVER_DESC            "Intel i810"
-#define DRIVER_DATE            "20010616"
-
-#define DRIVER_MAJOR           1
-#define DRIVER_MINOR           2
-#define DRIVER_PATCHLEVEL      0
-
-/* Device IDs unknown.  Can someone help?  anholt@teleport.com */
-drm_chipinfo_t DRM(devicelist)[] = {
-       {0, 0, 0, NULL}
-};
-
-#define DRIVER_IOCTLS                                                      \
-       [DRM_IOCTL_NR(DRM_IOCTL_I810_INIT)]   = { i810_dma_init,    1, 1 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_I810_VERTEX)] = { i810_dma_vertex,  1, 0 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_I810_CLEAR)]  = { i810_clear_bufs,  1, 0 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_I810_FLUSH)]  = { i810_flush_ioctl, 1, 0 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_I810_GETAGE)] = { i810_getage,      1, 0 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_I810_GETBUF)] = { i810_getbuf,      1, 0 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_I810_SWAP)]   = { i810_swap_bufs,   1, 0 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_I810_COPY)]   = { i810_copybuf,     1, 0 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_I810_DOCOPY)] = { i810_docopy,      1, 0 },
-
-
-#define __HAVE_COUNTERS         4
-#define __HAVE_COUNTER6         _DRM_STAT_IRQ
-#define __HAVE_COUNTER7         _DRM_STAT_PRIMARY
-#define __HAVE_COUNTER8         _DRM_STAT_SECONDARY
-#define __HAVE_COUNTER9         _DRM_STAT_DMA
-
-
-#include "drm_agpsupport.h"
-#include "drm_auth.h"
-#include "drm_bufs.h"
-#include "drm_context.h"
-#include "drm_dma.h"
-#include "drm_drawable.h"
-#include "drm_drv.h"
-
-
-#include "drm_fops.h"
-#include "drm_init.h"
-#include "drm_ioctl.h"
-#include "drm_lock.h"
-#include "drm_lists.h"
-#include "drm_memory.h"
-#include "drm_vm.h"
-#include "drm_sysctl.h"
-
-DRIVER_MODULE(i810, pci, i810_driver, i810_devclass, 0, 0);
diff --git a/bsd/i810_drv.h b/bsd/i810_drv.h
deleted file mode 100644 (file)
index ae7018d..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/* i810_drv.h -- Private header for the Matrox g200/g400 driver -*- linux-c -*-
- * Created: Mon Dec 13 01:50:01 1999 by jhartmann@precisioninsight.com
- *
- * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
- * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
- * All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Authors: Rickard E. (Rik) Faith <faith@valinux.com>
- *         Jeff Hartmann <jhartmann@valinux.com>
- *
- */
-
-#ifndef _I810_DRV_H_
-#define _I810_DRV_H_
-
-typedef struct drm_i810_buf_priv {
-       u32 *in_use;
-       int my_use_idx;
-       int currently_mapped;
-       void *virtual;
-       void *kernel_virtual;
-       int map_count;
-       struct vm_area_struct *vma;
-} drm_i810_buf_priv_t;
-
-typedef struct _drm_i810_ring_buffer{
-       int tail_mask;
-       unsigned long Start;
-       unsigned long End;
-       unsigned long Size;
-       u8 *virtual_start;
-       int head;
-       int tail;
-       int space;
-} drm_i810_ring_buffer_t;
-
-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;
-       drm_i810_ring_buffer_t ring;
-
-       unsigned long hw_status_page;
-       unsigned long counter;
-
-       atomic_t flush_done;
-       wait_queue_head_t flush_queue;  /* Processes waiting until flush    */
-       drm_buf_t *mmap_buffer;
-
-
-       u32 front_di1, back_di1, zi1;
-
-       int back_offset;
-       int depth_offset;
-       int w, h;
-       int pitch;
-} drm_i810_private_t;
-
-                               /* i810_dma.c */
-extern int  i810_dma_schedule(drm_device_t *dev, int locked);
-extern int  i810_getbuf( DRM_IOCTL_ARGS );
-extern int  i810_dma_init( DRM_IOCTL_ARGS );
-extern int  i810_flush_ioctl( DRM_IOCTL_ARGS );
-extern int  i810_getage( DRM_IOCTL_ARGS );
-extern int i810_mmap_buffers(struct file *filp, struct vm_area_struct *vma);
-extern int i810_copybuf( DRM_IOCTL_ARGS );
-extern int i810_docopy( DRM_IOCTL_ARGS );
-
-extern void i810_dma_quiescent(drm_device_t *dev);
-
-#define I810_VERBOSE 0
-
-
-int i810_dma_vertex( DRM_IOCTL_ARGS );
-int i810_swap_bufs( DRM_IOCTL_ARGS );
-int i810_clear_bufs( DRM_IOCTL_ARGS );
-
-#define I810_BASE(reg)         ((unsigned long) \
-                               dev_priv->mmio_map->handle)
-#define I810_ADDR(reg)         (I810_BASE(reg) + reg)
-#define I810_DEREF(reg)                *(__volatile__ int *)I810_ADDR(reg)
-#define I810_READ(reg)         I810_DEREF(reg)
-#define I810_WRITE(reg,val)    do { I810_DEREF(reg) = val; } while (0)
-#define I810_DEREF16(reg)      *(__volatile__ u16 *)I810_ADDR(reg)
-#define I810_READ16(reg)       I810_DEREF16(reg)
-#define I810_WRITE16(reg,val)  do { I810_DEREF16(reg) = val; } while (0)
-
-
-#define GFX_OP_USER_INTERRUPT          ((0<<29)|(2<<23))
-#define GFX_OP_BREAKPOINT_INTERRUPT    ((0<<29)|(1<<23))
-#define CMD_REPORT_HEAD                        (7<<23)
-#define CMD_STORE_DWORD_IDX            ((0x21<<23) | 0x1)
-#define CMD_OP_BATCH_BUFFER  ((0x0<<29)|(0x30<<23)|0x1)
-
-#define INST_PARSER_CLIENT   0x00000000
-#define INST_OP_FLUSH        0x02000000
-#define INST_FLUSH_MAP_CACHE 0x00000001
-
-
-#define BB1_START_ADDR_MASK   (~0x7)
-#define BB1_PROTECTED         (1<<0)
-#define BB1_UNPROTECTED       (0<<0)
-#define BB2_END_ADDR_MASK     (~0x7)
-
-#define I810REG_HWSTAM         0x02098
-#define I810REG_INT_IDENTITY_R 0x020a4
-#define I810REG_INT_MASK_R     0x020a8
-#define I810REG_INT_ENABLE_R   0x020a0
-
-#define LP_RING                0x2030
-#define HP_RING                0x2040
-#define RING_TAIL                      0x00
-#define TAIL_ADDR              0x000FFFF8
-#define RING_HEAD                      0x04
-#define HEAD_WRAP_COUNT        0xFFE00000
-#define HEAD_WRAP_ONE          0x00200000
-#define HEAD_ADDR              0x001FFFFC
-#define RING_START                     0x08
-#define START_ADDR             0x00FFFFF8
-#define RING_LEN                       0x0C
-#define RING_NR_PAGES          0x000FF000
-#define RING_REPORT_MASK       0x00000006
-#define RING_REPORT_64K        0x00000002
-#define RING_REPORT_128K       0x00000004
-#define RING_NO_REPORT         0x00000000
-#define RING_VALID_MASK        0x00000001
-#define RING_VALID             0x00000001
-#define RING_INVALID           0x00000000
-
-#define GFX_OP_SCISSOR         ((0x3<<29)|(0x1c<<24)|(0x10<<19))
-#define SC_UPDATE_SCISSOR       (0x1<<1)
-#define SC_ENABLE_MASK          (0x1<<0)
-#define SC_ENABLE               (0x1<<0)
-
-#define GFX_OP_SCISSOR_INFO    ((0x3<<29)|(0x1d<<24)|(0x81<<16)|(0x1))
-#define SCI_YMIN_MASK      (0xffff<<16)
-#define SCI_XMIN_MASK      (0xffff<<0)
-#define SCI_YMAX_MASK      (0xffff<<16)
-#define SCI_XMAX_MASK      (0xffff<<0)
-
-#define GFX_OP_COLOR_FACTOR      ((0x3<<29)|(0x1d<<24)|(0x1<<16)|0x0)
-#define GFX_OP_STIPPLE           ((0x3<<29)|(0x1d<<24)|(0x83<<16))
-#define GFX_OP_MAP_INFO          ((0x3<<29)|(0x1d<<24)|0x2)
-#define GFX_OP_DESTBUFFER_VARS   ((0x3<<29)|(0x1d<<24)|(0x85<<16)|0x0)
-#define GFX_OP_DRAWRECT_INFO     ((0x3<<29)|(0x1d<<24)|(0x80<<16)|(0x3))
-#define GFX_OP_PRIMITIVE         ((0x3<<29)|(0x1f<<24))
-
-#define CMD_OP_Z_BUFFER_INFO     ((0x0<<29)|(0x16<<23))
-#define CMD_OP_DESTBUFFER_INFO   ((0x0<<29)|(0x15<<23))
-
-#define BR00_BITBLT_CLIENT   0x40000000
-#define BR00_OP_COLOR_BLT    0x10000000
-#define BR00_OP_SRC_COPY_BLT 0x10C00000
-#define BR13_SOLID_PATTERN   0x80000000
-
-
-
-#endif
diff --git a/bsd/i830.h b/bsd/i830.h
deleted file mode 100644 (file)
index fb7a0b3..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/* i830.h -- Intel I830 DRM template customization -*- linux-c -*-
- * Created: Thu Feb 15 00:01:12 2001 by gareth@valinux.com
- *
- * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors:
- *    Gareth Hughes <gareth@valinux.com>
- */
-
-#ifndef __I830_H__
-#define __I830_H__
-
-/* This remains constant for all DRM template files.
- */
-#define DRM(x) i830_##x
-
-/* General customization:
- */
-#define __HAVE_AGP             1
-#define __MUST_HAVE_AGP                1
-#define __HAVE_MTRR            1
-#define __HAVE_CTX_BITMAP      1
-
-/* Driver customization:
- */
-#define __HAVE_RELEASE         1
-#define DRIVER_RELEASE() do {                                          \
-       i830_reclaim_buffers( dev, priv->pid );                         \
-} while (0)
-
-/* DMA customization:
- */
-#define __HAVE_DMA             1
-#define __HAVE_DMA_QUEUE       1
-#define __HAVE_DMA_WAITLIST    1
-#define __HAVE_DMA_RECLAIM     1
-
-#define __HAVE_DMA_QUIESCENT   1
-#define DRIVER_DMA_QUIESCENT() do {                                    \
-       i830_dma_quiescent( dev );                                      \
-} while (0)
-
-#define __HAVE_DMA_IRQ         1
-#define __HAVE_DMA_IRQ_BH      1
-#define __HAVE_SHARED_IRQ       1
-#define DRIVER_PREINSTALL() do {                                       \
-       drm_i830_private_t *dev_priv =                                  \
-               (drm_i830_private_t *)dev->dev_private;                 \
-       u16 tmp;                                                        \
-       tmp = I830_READ16( I830REG_HWSTAM );                            \
-       tmp = tmp & 0x6000;                                             \
-       I830_WRITE16( I830REG_HWSTAM, tmp );                            \
-                                                                       \
-       tmp = I830_READ16( I830REG_INT_MASK_R );                        \
-       tmp = tmp & 0x6000;             /* Unmask interrupts */         \
-       I830_WRITE16( I830REG_INT_MASK_R, tmp );                        \
-       tmp = I830_READ16( I830REG_INT_ENABLE_R );                      \
-       tmp = tmp & 0x6000;             /* Disable all interrupts */    \
-       I830_WRITE16( I830REG_INT_ENABLE_R, tmp );                      \
-} while (0)
-
-#define DRIVER_POSTINSTALL() do {                                      \
-       drm_i830_private_t *dev_priv =                                  \
-               (drm_i830_private_t *)dev->dev_private; \
-       u16 tmp;                                                        \
-       tmp = I830_READ16( I830REG_INT_ENABLE_R );                      \
-       tmp = tmp & 0x6000;                                             \
-       tmp = tmp | 0x0003;     /* Enable bp & user interrupts */       \
-       I830_WRITE16( I830REG_INT_ENABLE_R, tmp );                      \
-} while (0)
-
-#define DRIVER_UNINSTALL() do {                                                \
-       drm_i830_private_t *dev_priv =                                  \
-               (drm_i830_private_t *)dev->dev_private;                 \
-       u16 tmp;                                                        \
-       if ( dev_priv ) {                                               \
-               tmp = I830_READ16( I830REG_INT_IDENTITY_R );            \
-               tmp = tmp & ~(0x6000);  /* Clear all interrupts */      \
-               if ( tmp != 0 )                                         \
-                       I830_WRITE16( I830REG_INT_IDENTITY_R, tmp );    \
-                                                                       \
-               tmp = I830_READ16( I830REG_INT_ENABLE_R );              \
-               tmp = tmp & 0x6000;     /* Disable all interrupts */    \
-               I830_WRITE16( I830REG_INT_ENABLE_R, tmp );              \
-       }                                                               \
-} while (0)
-
-/* 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
diff --git a/bsd/i830/Makefile b/bsd/i830/Makefile
deleted file mode 100644 (file)
index c973cf9..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# $FreeBSD$
-
-KMOD=  i830
-NOMAN= YES
-SRCS=  i830_drv.c i830_dma.c
-SRCS+= device_if.h bus_if.h pci_if.h opt_drm_linux.h
-CFLAGS+=       ${DEBUG_FLAGS} -I. -I..
-
-@:
-       ln -sf /sys @
-
-machine:
-       ln -sf /sys/i386/include machine
-
-.if ${MACHINE_ARCH} == "i386"
-# This line enables linux ioctl handling
-# If you want support for this uncomment this line
-#I830_OPTS=     "\#define DRM_LINUX" 1
-.endif
-
-opt_drm_linux.h:
-       touch opt_drm_linux.h
-       echo $(I830_OPTS) >> opt_drm_linux.h
-
-.include <bsd.kmod.mk>
diff --git a/bsd/i830_dma.c b/bsd/i830_dma.c
deleted file mode 100644 (file)
index fbdc952..0000000
+++ /dev/null
@@ -1,1420 +0,0 @@
-/* i830_dma.c -- DMA support for the I830 -*- linux-c -*-
- * Created: Mon Dec 13 01:50:01 1999 by jhartmann@precisioninsight.com
- *
- * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
- * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Authors: Rickard E. (Rik) Faith <faith@valinux.com>
- *         Jeff Hartmann <jhartmann@valinux.com>
- *      Keith Whitwell <keithw@valinux.com>
- *      Abraham vd Merwe <abraham@2d3d.co.za>
- *
- */
-
-#define __NO_VERSION__
-#include "i830.h"
-#include "drmP.h"
-#include "drm.h"
-#include "i830_drm.h"
-#include "i830_drv.h"
-#include <linux/interrupt.h>   /* For task queue support */
-
-/* in case we don't have a 2.3.99-pre6 kernel or later: */
-#ifndef VM_DONTCOPY
-#define VM_DONTCOPY 0
-#endif
-
-#define I830_BUF_FREE          2
-#define I830_BUF_CLIENT                1
-#define I830_BUF_HARDWARE              0
-
-#define I830_BUF_UNMAPPED 0
-#define I830_BUF_MAPPED   1
-
-#define RING_LOCALS    unsigned int outring, ringmask; volatile char *virt;
-
-
-#define DO_IDLE_WORKAROUND()                                   \
-do {                                                           \
-   int _head;                                                  \
-   int _tail;                                                  \
-   int _i;                                                     \
-   do {                                                        \
-      _head = I830_READ(LP_RING + RING_HEAD) & HEAD_ADDR;      \
-      _tail = I830_READ(LP_RING + RING_TAIL) & TAIL_ADDR;      \
-      for(_i = 0; _i < 65535; _i++);                           \
-   } while(_head != _tail);                                    \
-} while(0)
-
-#define I830_SYNC_WORKAROUND 0
-
-#define BEGIN_LP_RING(n) do {                          \
-       if (I830_VERBOSE)                               \
-               DRM_DEBUG("BEGIN_LP_RING(%d) in %s\n",  \
-                         n, __FUNCTION__);             \
-       if (I830_SYNC_WORKAROUND)                       \
-               DO_IDLE_WORKAROUND();                   \
-       if (dev_priv->ring.space < n*4)                 \
-               i830_wait_ring(dev, n*4);               \
-       dev_priv->ring.space -= n*4;                    \
-       outring = dev_priv->ring.tail;                  \
-       ringmask = dev_priv->ring.tail_mask;            \
-       virt = dev_priv->ring.virtual_start;            \
-} while (0)
-
-#define ADVANCE_LP_RING() do {                                 \
-       if (I830_VERBOSE) DRM_DEBUG("ADVANCE_LP_RING\n");       \
-       dev_priv->ring.tail = outring;                          \
-       I830_WRITE(LP_RING + RING_TAIL, outring);               \
-} while(0)
-
-#define OUT_RING(n) do {                                               \
-       if (I830_VERBOSE) DRM_DEBUG("   OUT_RING %x\n", (int)(n));      \
-       *(volatile unsigned int *)(virt + outring) = n;                 \
-       outring += 4;                                                   \
-       outring &= ringmask;                                            \
-} while (0)
-
-static inline void i830_print_status_page(drm_device_t *dev)
-{
-       drm_device_dma_t *dma = dev->dma;
-       drm_i830_private_t *dev_priv = dev->dev_private;
-       u32 *temp = (u32 *)dev_priv->hw_status_page;
-       int i;
-
-       DRM_DEBUG(  "hw_status: Interrupt Status : %x\n", temp[0]);
-       DRM_DEBUG(  "hw_status: LpRing Head ptr : %x\n", temp[1]);
-       DRM_DEBUG(  "hw_status: IRing Head ptr : %x\n", temp[2]);
-       DRM_DEBUG(  "hw_status: Reserved : %x\n", temp[3]);
-       DRM_DEBUG(  "hw_status: Driver Counter : %d\n", temp[5]);
-       for(i = 9; i < dma->buf_count + 9; i++) {
-               DRM_DEBUG( "buffer status idx : %d used: %d\n", i - 9, temp[i]);
-       }
-}
-
-static drm_buf_t *i830_freelist_get(drm_device_t *dev)
-{
-       drm_device_dma_t *dma = dev->dma;
-       int              i;
-       int              used;
-   
-       /* Linear search might not be the best solution */
-
-       for (i = 0; i < dma->buf_count; i++) {
-               drm_buf_t *buf = dma->buflist[ i ];
-               drm_i830_buf_priv_t *buf_priv = buf->dev_private;
-               /* In use is already a pointer */
-               used = cmpxchg(buf_priv->in_use, I830_BUF_FREE, 
-                              I830_BUF_CLIENT);
-               if(used == I830_BUF_FREE) {
-                       return buf;
-               }
-       }
-       return NULL;
-}
-
-/* This should only be called if the buffer is not sent to the hardware
- * yet, the hardware updates in use for us once its on the ring buffer.
- */
-
-static int i830_freelist_put(drm_device_t *dev, drm_buf_t *buf)
-{
-       drm_i830_buf_priv_t *buf_priv = buf->dev_private;
-       int used;
-   
-       /* In use is already a pointer */
-       used = cmpxchg(buf_priv->in_use, I830_BUF_CLIENT, I830_BUF_FREE);
-       if(used != I830_BUF_CLIENT) {
-               DRM_ERROR("Freeing buffer thats not in use : %d\n", buf->idx);
-               return -EINVAL;
-       }
-   
-       return 0;
-}
-
-static struct file_operations i830_buffer_fops = {
-       open:    DRM(open),
-       flush:   DRM(flush),
-       release: DRM(release),
-       ioctl:   DRM(ioctl),
-       mmap:    i830_mmap_buffers,
-       read:    DRM(read),
-       fasync:  DRM(fasync),
-       poll:    DRM(poll),
-};
-
-int i830_mmap_buffers(struct file *filp, struct vm_area_struct *vma)
-{
-       drm_file_t          *priv         = filp->private_data;
-       drm_device_t        *dev;
-       drm_i830_private_t  *dev_priv;
-       drm_buf_t           *buf;
-       drm_i830_buf_priv_t *buf_priv;
-
-       lock_kernel();
-       dev      = priv->dev;
-       dev_priv = dev->dev_private;
-       buf      = dev_priv->mmap_buffer;
-       buf_priv = buf->dev_private;
-   
-       vma->vm_flags |= (VM_IO | VM_DONTCOPY);
-       vma->vm_file = filp;
-   
-       buf_priv->currently_mapped = I830_BUF_MAPPED;
-       unlock_kernel();
-
-       if (remap_page_range(vma->vm_start,
-                            VM_OFFSET(vma),
-                            vma->vm_end - vma->vm_start,
-                            vma->vm_page_prot)) return -EAGAIN;
-       return 0;
-}
-
-static int i830_map_buffer(drm_buf_t *buf, struct file *filp)
-{
-       drm_file_t        *priv   = filp->private_data;
-       drm_device_t      *dev    = priv->dev;
-       drm_i830_buf_priv_t *buf_priv = buf->dev_private;
-       drm_i830_private_t *dev_priv = dev->dev_private;
-       struct file_operations *old_fops;
-       int retcode = 0;
-
-       if(buf_priv->currently_mapped == I830_BUF_MAPPED) return -EINVAL;
-
-       if(VM_DONTCOPY != 0) {
-#if LINUX_VERSION_CODE <= 0x020402
-               down( &current->mm->mmap_sem );
-#else
-               down_write( &current->mm->mmap_sem );
-#endif
-               old_fops = filp->f_op;
-               filp->f_op = &i830_buffer_fops;
-               dev_priv->mmap_buffer = buf;
-               buf_priv->virtual = (void *)do_mmap(filp, 0, buf->total, 
-                                                   PROT_READ|PROT_WRITE,
-                                                   MAP_SHARED, 
-                                                   buf->bus_address);
-               dev_priv->mmap_buffer = NULL;
-               filp->f_op = old_fops;
-               if ((unsigned long)buf_priv->virtual > -1024UL) {
-                       /* Real error */
-                       DRM_DEBUG("mmap error\n");
-                       retcode = (signed int)buf_priv->virtual;
-                       buf_priv->virtual = 0;
-               }
-#if LINUX_VERSION_CODE <= 0x020402
-               up( &current->mm->mmap_sem );
-#else
-               up_write( &current->mm->mmap_sem );
-#endif
-       } else {
-               buf_priv->virtual = buf_priv->kernel_virtual;
-               buf_priv->currently_mapped = I830_BUF_MAPPED;
-       }
-       return retcode;
-}
-
-static int i830_unmap_buffer(drm_buf_t *buf)
-{
-       drm_i830_buf_priv_t *buf_priv = buf->dev_private;
-       int retcode = 0;
-
-       if(VM_DONTCOPY != 0) {
-               if(buf_priv->currently_mapped != I830_BUF_MAPPED) 
-                       return -EINVAL;
-#if LINUX_VERSION_CODE <= 0x020402
-               down( &current->mm->mmap_sem );
-#else
-               down_write( &current->mm->mmap_sem );
-#endif
-#if LINUX_VERSION_CODE < 0x020399
-               retcode = do_munmap((unsigned long)buf_priv->virtual, 
-                                   (size_t) buf->total);
-#else
-               retcode = do_munmap(current->mm, 
-                                   (unsigned long)buf_priv->virtual, 
-                                   (size_t) buf->total);
-#endif
-#if LINUX_VERSION_CODE <= 0x020402
-               up( &current->mm->mmap_sem );
-#else
-               up_write( &current->mm->mmap_sem );
-#endif
-       }
-       buf_priv->currently_mapped = I830_BUF_UNMAPPED;
-       buf_priv->virtual = 0;
-
-       return retcode;
-}
-
-static int i830_dma_get_buffer(drm_device_t *dev, drm_i830_dma_t *d, 
-                              struct file *filp)
-{
-       drm_file_t        *priv   = filp->private_data;
-       drm_buf_t         *buf;
-       drm_i830_buf_priv_t *buf_priv;
-       int retcode = 0;
-
-       buf = i830_freelist_get(dev);
-       if (!buf) {
-               retcode = -ENOMEM;
-               DRM_DEBUG("retcode=%d\n", retcode);
-               return retcode;
-       }
-   
-       retcode = i830_map_buffer(buf, filp);
-       if(retcode) {
-               i830_freelist_put(dev, buf);
-               DRM_DEBUG("mapbuf failed, retcode %d\n", retcode);
-               return retcode;
-       }
-       buf->pid     = priv->pid;
-       buf_priv = buf->dev_private;    
-       d->granted = 1;
-       d->request_idx = buf->idx;
-       d->request_size = buf->total;
-       d->virtual = buf_priv->virtual;
-
-       return retcode;
-}
-
-static unsigned long i830_alloc_page(drm_device_t *dev)
-{
-       unsigned long address;
-   
-       address = __get_free_page(GFP_KERNEL);
-       if(address == 0UL) 
-               return 0;
-       
-       atomic_inc(&virt_to_page(address)->count);
-       set_bit(PG_locked, &virt_to_page(address)->flags);
-   
-       return address;
-}
-
-static void i830_free_page(drm_device_t *dev, unsigned long page)
-{
-       if(page == 0UL) 
-               return;
-       
-       atomic_dec(&virt_to_page(page)->count);
-       clear_bit(PG_locked, &virt_to_page(page)->flags);
-       wake_up(&virt_to_page(page)->wait);
-       free_page(page);
-       return;
-}
-
-static int i830_dma_cleanup(drm_device_t *dev)
-{
-       drm_device_dma_t *dma = dev->dma;
-
-       if(dev->dev_private) {
-               int i;
-               drm_i830_private_t *dev_priv = 
-                       (drm_i830_private_t *) dev->dev_private;
-          
-               if(dev_priv->ring.virtual_start) {
-                       DRM(ioremapfree)((void *) dev_priv->ring.virtual_start,
-                                        dev_priv->ring.Size);
-               }
-               if(dev_priv->hw_status_page != 0UL) {
-                       i830_free_page(dev, dev_priv->hw_status_page);
-                       /* Need to rewrite hardware status page */
-                       I830_WRITE(0x02080, 0x1ffff000);
-               }
-               DRM(free)(dev->dev_private, sizeof(drm_i830_private_t), 
-                        DRM_MEM_DRIVER);
-               dev->dev_private = NULL;
-
-               for (i = 0; i < dma->buf_count; i++) {
-                       drm_buf_t *buf = dma->buflist[ i ];
-                       drm_i830_buf_priv_t *buf_priv = buf->dev_private;
-                       DRM(ioremapfree)(buf_priv->kernel_virtual, buf->total);
-               }
-       }
-       return 0;
-}
-
-static int i830_wait_ring(drm_device_t *dev, int n)
-{
-       drm_i830_private_t *dev_priv = dev->dev_private;
-       drm_i830_ring_buffer_t *ring = &(dev_priv->ring);
-       int iters = 0;
-       unsigned long end;
-       unsigned int last_head = I830_READ(LP_RING + RING_HEAD) & HEAD_ADDR;
-
-       end = jiffies + (HZ*3);
-       while (ring->space < n) {
-               int i;
-       
-               ring->head = I830_READ(LP_RING + RING_HEAD) & HEAD_ADDR;
-               ring->space = ring->head - (ring->tail+8);
-               if (ring->space < 0) ring->space += ring->Size;
-          
-               if (ring->head != last_head) {
-                       end = jiffies + (HZ*3);
-                       last_head = ring->head;
-               }
-         
-               iters++;
-               if((signed)(end - jiffies) <= 0) {
-                       DRM_ERROR("space: %d wanted %d\n", ring->space, n);
-                       DRM_ERROR("lockup\n");
-                       goto out_wait_ring;
-               }
-
-               for (i = 0 ; i < 2000 ; i++) ;
-       }
-
-out_wait_ring:   
-       return iters;
-}
-
-static void i830_kernel_lost_context(drm_device_t *dev)
-{
-       drm_i830_private_t *dev_priv = dev->dev_private;
-       drm_i830_ring_buffer_t *ring = &(dev_priv->ring);
-      
-       ring->head = I830_READ(LP_RING + RING_HEAD) & HEAD_ADDR;
-       ring->tail = I830_READ(LP_RING + RING_TAIL);
-       ring->space = ring->head - (ring->tail+8);
-       if (ring->space < 0) ring->space += ring->Size;
-}
-
-static int i830_freelist_init(drm_device_t *dev, drm_i830_private_t *dev_priv)
-{
-       drm_device_dma_t *dma = dev->dma;
-       int my_idx = 36;
-       u32 *hw_status = (u32 *)(dev_priv->hw_status_page + my_idx);
-       int i;
-
-       if(dma->buf_count > 1019) {
-               /* Not enough space in the status page for the freelist */
-               return -EINVAL;
-       }
-
-       for (i = 0; i < dma->buf_count; i++) {
-               drm_buf_t *buf = dma->buflist[ i ];
-               drm_i830_buf_priv_t *buf_priv = buf->dev_private;
-
-               buf_priv->in_use = hw_status++;
-               buf_priv->my_use_idx = my_idx;
-               my_idx += 4;
-
-               *buf_priv->in_use = I830_BUF_FREE;
-
-               buf_priv->kernel_virtual = DRM(ioremap)(buf->bus_address, 
-                                                       buf->total);
-       }
-       return 0;
-}
-
-static int i830_dma_initialize(drm_device_t *dev, 
-                              drm_i830_private_t *dev_priv,
-                              drm_i830_init_t *init)
-{
-       struct list_head *list;
-
-       memset(dev_priv, 0, sizeof(drm_i830_private_t));
-
-       list_for_each(list, &dev->maplist->head) {
-               drm_map_list_t *r_list = (drm_map_list_t *)list;
-               if( r_list->map &&
-                   r_list->map->type == _DRM_SHM &&
-                   r_list->map->flags & _DRM_CONTAINS_LOCK ) {
-                       dev_priv->sarea_map = r_list->map;
-                       break;
-               }
-       }
-
-       if(!dev_priv->sarea_map) {
-               dev->dev_private = (void *)dev_priv;
-               i830_dma_cleanup(dev);
-               DRM_ERROR("can not find sarea!\n");
-               return -EINVAL;
-       }
-       DRM_FIND_MAP( dev_priv->mmio_map, init->mmio_offset );
-       if(!dev_priv->mmio_map) {
-               dev->dev_private = (void *)dev_priv;
-               i830_dma_cleanup(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) {
-               dev->dev_private = (void *)dev_priv;
-               i830_dma_cleanup(dev);
-               DRM_ERROR("can not find dma buffer map!\n");
-               return -EINVAL;
-       }
-
-       dev_priv->sarea_priv = (drm_i830_sarea_t *)
-               ((u8 *)dev_priv->sarea_map->handle +
-                init->sarea_priv_offset);
-
-       atomic_set(&dev_priv->flush_done, 0);
-       init_waitqueue_head(&dev_priv->flush_queue);
-
-       dev_priv->ring.Start = init->ring_start;
-       dev_priv->ring.End = init->ring_end;
-       dev_priv->ring.Size = init->ring_size;
-
-       dev_priv->ring.virtual_start = DRM(ioremap)(dev->agp->base + 
-                                                   init->ring_start, 
-                                                   init->ring_size);
-
-       if (dev_priv->ring.virtual_start == NULL) {
-               dev->dev_private = (void *) dev_priv;
-               i830_dma_cleanup(dev);
-               DRM_ERROR("can not ioremap virtual address for"
-                         " ring buffer\n");
-               return -ENOMEM;
-       }
-
-       dev_priv->ring.tail_mask = dev_priv->ring.Size - 1;
-   
-       dev_priv->w = init->w;
-       dev_priv->h = init->h;
-       dev_priv->pitch = init->pitch;
-       dev_priv->back_offset = init->back_offset;
-       dev_priv->depth_offset = init->depth_offset;
-
-       dev_priv->front_di1 = init->front_offset | init->pitch_bits;
-       dev_priv->back_di1 = init->back_offset | init->pitch_bits;
-       dev_priv->zi1 = init->depth_offset | init->pitch_bits;
-
-       dev_priv->cpp = init->cpp;
-       /* We are using seperate values as placeholders for mechanisms for
-        * private backbuffer/depthbuffer usage.
-        */
-
-       dev_priv->back_pitch = init->back_pitch;
-       dev_priv->depth_pitch = init->depth_pitch;
-
-       /* Program Hardware Status Page */
-       dev_priv->hw_status_page = i830_alloc_page(dev);
-       if(dev_priv->hw_status_page == 0UL) {
-               dev->dev_private = (void *)dev_priv;
-               i830_dma_cleanup(dev);
-               DRM_ERROR("Can not allocate hardware status page\n");
-               return -ENOMEM;
-       }
-       memset((void *) dev_priv->hw_status_page, 0, PAGE_SIZE);
-       DRM_DEBUG("hw status page @ %lx\n", dev_priv->hw_status_page);
-   
-       I830_WRITE(0x02080, virt_to_bus((void *)dev_priv->hw_status_page));
-       DRM_DEBUG("Enabled hardware status page\n");
-   
-       /* Now we need to init our freelist */
-       if(i830_freelist_init(dev, dev_priv) != 0) {
-               dev->dev_private = (void *)dev_priv;
-               i830_dma_cleanup(dev);
-               DRM_ERROR("Not enough space in the status page for"
-                         " the freelist\n");
-               return -ENOMEM;
-       }
-       dev->dev_private = (void *)dev_priv;
-
-       return 0;
-}
-
-int i830_dma_init(struct inode *inode, struct file *filp,
-                 unsigned int cmd, unsigned long arg)
-{
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->dev;
-       drm_i830_private_t *dev_priv;
-       drm_i830_init_t init;
-       int retcode = 0;
-       
-       if (copy_from_user(&init, (drm_i830_init_t *)arg, sizeof(init)))
-               return -EFAULT;
-       
-       switch(init.func) {
-               case I830_INIT_DMA:
-                       dev_priv = DRM(alloc)(sizeof(drm_i830_private_t), 
-                                             DRM_MEM_DRIVER);
-                       if(dev_priv == NULL) return -ENOMEM;
-                       retcode = i830_dma_initialize(dev, dev_priv, &init);
-               break;
-               case I830_CLEANUP_DMA:
-                       retcode = i830_dma_cleanup(dev);
-               break;
-               default:
-                       retcode = -EINVAL;
-               break;
-       }
-   
-       return retcode;
-}
-
-/* Most efficient way to verify state for the i830 is as it is
- * emitted.  Non-conformant state is silently dropped.
- *
- * Use 'volatile' & local var tmp to force the emitted values to be
- * identical to the verified ones.
- */
-static void i830EmitContextVerified( drm_device_t *dev, 
-                                    volatile unsigned int *code )
-{
-       drm_i830_private_t *dev_priv = dev->dev_private;
-       int i, j = 0;
-       unsigned int tmp;
-       RING_LOCALS;
-
-       BEGIN_LP_RING( I830_CTX_SETUP_SIZE );
-       for ( i = 0 ; i < I830_CTX_SETUP_SIZE ; i++ ) {
-               tmp = code[i];
-
-#if 0
-               if ((tmp & (7<<29)) == (3<<29) &&
-                   (tmp & (0x1f<<24)) < (0x1d<<24)) {
-                       OUT_RING( tmp ); 
-                       j++;
-               } else {
-                       printk("Skipping %d\n", i);
-               }
-#else
-               OUT_RING( tmp ); 
-               j++;
-#endif
-       }
-
-       if (j & 1) 
-               OUT_RING( 0 ); 
-
-       ADVANCE_LP_RING();
-}
-
-static void i830EmitTexVerified( drm_device_t *dev, 
-                                volatile unsigned int *code ) 
-{
-       drm_i830_private_t *dev_priv = dev->dev_private;
-       int i, j = 0;
-       unsigned int tmp;
-       RING_LOCALS;
-
-       BEGIN_LP_RING( I830_TEX_SETUP_SIZE );
-
-       OUT_RING( GFX_OP_MAP_INFO );
-       OUT_RING( code[I830_TEXREG_MI1] );
-       OUT_RING( code[I830_TEXREG_MI2] );
-       OUT_RING( code[I830_TEXREG_MI3] );
-       OUT_RING( code[I830_TEXREG_MI4] );
-       OUT_RING( code[I830_TEXREG_MI5] );
-
-       for ( i = 6 ; i < I830_TEX_SETUP_SIZE ; i++ ) {
-               tmp = code[i];
-               OUT_RING( tmp ); 
-               j++;
-       } 
-
-       if (j & 1) 
-               OUT_RING( 0 ); 
-
-       ADVANCE_LP_RING();
-}
-
-static void i830EmitTexBlendVerified( drm_device_t *dev, 
-                                    volatile unsigned int *code,
-                                    volatile unsigned int num)
-{
-       drm_i830_private_t *dev_priv = dev->dev_private;
-       int i, j = 0;
-       unsigned int tmp;
-       RING_LOCALS;
-
-       BEGIN_LP_RING( num );
-
-       for ( i = 0 ; i < num ; i++ ) {
-               tmp = code[i];
-               OUT_RING( tmp );
-               j++;
-       }
-
-       if (j & 1) 
-               OUT_RING( 0 ); 
-
-       ADVANCE_LP_RING();
-}
-
-static void i830EmitTexPalette( drm_device_t *dev,
-                               unsigned int *palette,
-                               int number,
-                               int is_shared )
-{
-       drm_i830_private_t *dev_priv = dev->dev_private;
-       int i;
-       RING_LOCALS;
-
-       BEGIN_LP_RING( 258 );
-
-       if(is_shared == 1) {
-               OUT_RING(CMD_OP_MAP_PALETTE_LOAD |
-                        MAP_PALETTE_NUM(0) |
-                        MAP_PALETTE_BOTH);
-       } else {
-               OUT_RING(CMD_OP_MAP_PALETTE_LOAD | MAP_PALETTE_NUM(number));
-       }
-       for(i = 0; i < 256; i++) {
-               OUT_RING(palette[i]);
-       }
-       OUT_RING(0);
-}
-
-/* Need to do some additional checking when setting the dest buffer.
- */
-static void i830EmitDestVerified( drm_device_t *dev, 
-                                 volatile unsigned int *code ) 
-{      
-       drm_i830_private_t *dev_priv = dev->dev_private;
-       unsigned int tmp;
-       RING_LOCALS;
-
-       BEGIN_LP_RING( I830_DEST_SETUP_SIZE + 6 );
-
-       tmp = code[I830_DESTREG_CBUFADDR];
-       if (tmp == dev_priv->front_di1) {
-               /* Don't use fence when front buffer rendering */
-               OUT_RING( CMD_OP_DESTBUFFER_INFO );
-               OUT_RING( BUF_3D_ID_COLOR_BACK | 
-                         BUF_3D_PITCH(dev_priv->back_pitch * dev_priv->cpp) );
-               OUT_RING( tmp );
-
-               OUT_RING( CMD_OP_DESTBUFFER_INFO );
-               OUT_RING( BUF_3D_ID_DEPTH |
-                         BUF_3D_PITCH(dev_priv->depth_pitch * dev_priv->cpp));
-               OUT_RING( dev_priv->zi1 );
-       } else if(tmp == dev_priv->back_di1) {
-               OUT_RING( CMD_OP_DESTBUFFER_INFO );
-               OUT_RING( BUF_3D_ID_COLOR_BACK | 
-                         BUF_3D_PITCH(dev_priv->back_pitch * dev_priv->cpp) |
-                         BUF_3D_USE_FENCE);
-               OUT_RING( tmp );
-
-               OUT_RING( CMD_OP_DESTBUFFER_INFO );
-               OUT_RING( BUF_3D_ID_DEPTH | BUF_3D_USE_FENCE | 
-                         BUF_3D_PITCH(dev_priv->depth_pitch * dev_priv->cpp));
-               OUT_RING( dev_priv->zi1 );
-       } else {
-               DRM_DEBUG("bad di1 %x (allow %x or %x)\n",
-                         tmp, dev_priv->front_di1, dev_priv->back_di1);
-       }
-
-       /* invarient:
-        */
-
-
-       OUT_RING( GFX_OP_DESTBUFFER_VARS );
-       OUT_RING( code[I830_DESTREG_DV1] );
-
-       OUT_RING( GFX_OP_DRAWRECT_INFO );
-       OUT_RING( code[I830_DESTREG_DR1] );
-       OUT_RING( code[I830_DESTREG_DR2] );
-       OUT_RING( code[I830_DESTREG_DR3] );
-       OUT_RING( code[I830_DESTREG_DR4] );
-
-       /* Need to verify this */
-       tmp = code[I830_DESTREG_SENABLE];
-       if((tmp & ~0x3) == GFX_OP_SCISSOR_ENABLE) {
-               OUT_RING( tmp );
-       } else {
-               DRM_DEBUG("bad scissor enable\n");
-               OUT_RING( 0 );
-       }
-
-       OUT_RING( code[I830_DESTREG_SENABLE] );
-
-       OUT_RING( GFX_OP_SCISSOR_RECT );
-       OUT_RING( code[I830_DESTREG_SR1] );
-       OUT_RING( code[I830_DESTREG_SR2] );
-
-       ADVANCE_LP_RING();
-}
-
-static void i830EmitState( drm_device_t *dev )
-{
-       drm_i830_private_t *dev_priv = dev->dev_private;
-       drm_i830_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       unsigned int dirty = sarea_priv->dirty;
-
-       if (dirty & I830_UPLOAD_BUFFERS) {
-               i830EmitDestVerified( dev, sarea_priv->BufferState );
-               sarea_priv->dirty &= ~I830_UPLOAD_BUFFERS;
-       }
-
-       if (dirty & I830_UPLOAD_CTX) {
-               i830EmitContextVerified( dev, sarea_priv->ContextState );
-               sarea_priv->dirty &= ~I830_UPLOAD_CTX;
-       }
-
-       if (dirty & I830_UPLOAD_TEX0) {
-               i830EmitTexVerified( dev, sarea_priv->TexState[0] );
-               sarea_priv->dirty &= ~I830_UPLOAD_TEX0;
-       }
-
-       if (dirty & I830_UPLOAD_TEX1) {
-               i830EmitTexVerified( dev, sarea_priv->TexState[1] );
-               sarea_priv->dirty &= ~I830_UPLOAD_TEX1;
-       }
-
-       if (dirty & I830_UPLOAD_TEXBLEND0) {
-               i830EmitTexBlendVerified( dev, sarea_priv->TexBlendState[0],
-                               sarea_priv->TexBlendStateWordsUsed[0]);
-               sarea_priv->dirty &= ~I830_UPLOAD_TEXBLEND0;
-       }
-
-       if (dirty & I830_UPLOAD_TEXBLEND1) {
-               i830EmitTexBlendVerified( dev, sarea_priv->TexBlendState[1],
-                               sarea_priv->TexBlendStateWordsUsed[1]);
-               sarea_priv->dirty &= ~I830_UPLOAD_TEXBLEND1;
-       }
-
-       if (dirty & I830_UPLOAD_TEX_PALETTE_SHARED) {
-          i830EmitTexPalette(dev, sarea_priv->Palette[0], 0, 1);
-       } else {
-          if (dirty & I830_UPLOAD_TEX_PALETTE_N(0)) {
-             i830EmitTexPalette(dev, sarea_priv->Palette[0], 0, 0);
-             sarea_priv->dirty &= ~I830_UPLOAD_TEX_PALETTE_N(0);
-          }
-          if (dirty & I830_UPLOAD_TEX_PALETTE_N(1)) {
-             i830EmitTexPalette(dev, sarea_priv->Palette[1], 1, 0);
-             sarea_priv->dirty &= ~I830_UPLOAD_TEX_PALETTE_N(1);
-          }
-       }
-}
-
-static void i830_dma_dispatch_clear( drm_device_t *dev, int flags, 
-                                   unsigned int clear_color,
-                                   unsigned int clear_zval,
-                                   unsigned int clear_depthmask)
-{
-       drm_i830_private_t *dev_priv = dev->dev_private;
-       drm_i830_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       int nbox = sarea_priv->nbox;
-       drm_clip_rect_t *pbox = sarea_priv->boxes;
-       int pitch = dev_priv->pitch;
-       int cpp = dev_priv->cpp;
-       int i;
-       unsigned int BR13, CMD, D_CMD;
-       RING_LOCALS;
-
-       i830_kernel_lost_context(dev);
-
-       switch(cpp) {
-       case 2: 
-               BR13 = (0xF0 << 16) | (pitch * cpp) | (1<<24);
-               D_CMD = CMD = XY_COLOR_BLT_CMD;
-               break;
-       case 4:
-               BR13 = (0xF0 << 16) | (pitch * cpp) | (1<<24) | (1<<25);
-               CMD = (XY_COLOR_BLT_CMD | XY_COLOR_BLT_WRITE_ALPHA | 
-                      XY_COLOR_BLT_WRITE_RGB);
-               D_CMD = XY_COLOR_BLT_CMD;
-               if(clear_depthmask & 0x00ffffff)
-                       D_CMD |= XY_COLOR_BLT_WRITE_RGB;
-               if(clear_depthmask & 0xff000000)
-                       D_CMD |= XY_COLOR_BLT_WRITE_ALPHA;
-               break;
-       default:
-               BR13 = (0xF0 << 16) | (pitch * cpp) | (1<<24);
-               D_CMD = CMD = XY_COLOR_BLT_CMD;
-               break;
-       }
-
-       if (nbox > I830_NR_SAREA_CLIPRECTS)
-               nbox = I830_NR_SAREA_CLIPRECTS;
-
-       for (i = 0 ; i < nbox ; i++, pbox++) {
-               if (pbox->x1 > pbox->x2 ||
-                   pbox->y1 > pbox->y2 ||
-                   pbox->x2 > dev_priv->w ||
-                   pbox->y2 > dev_priv->h)
-                       continue;
-
-               if ( flags & I830_FRONT ) {         
-                       DRM_DEBUG("clear front\n");
-                       BEGIN_LP_RING( 6 );         
-                       OUT_RING( CMD );
-                       OUT_RING( BR13 );
-                       OUT_RING( (pbox->y1 << 16) | pbox->x1 );
-                       OUT_RING( (pbox->y2 << 16) | pbox->x2 );
-                       OUT_RING( 0 );
-                       OUT_RING( clear_color );
-                       ADVANCE_LP_RING();
-               }
-
-               if ( flags & I830_BACK ) {
-                       DRM_DEBUG("clear back\n");
-                       BEGIN_LP_RING( 6 );         
-                       OUT_RING( CMD );
-                       OUT_RING( BR13 );
-                       OUT_RING( (pbox->y1 << 16) | pbox->x1 );
-                       OUT_RING( (pbox->y2 << 16) | pbox->x2 );
-                       OUT_RING( dev_priv->back_offset );
-                       OUT_RING( clear_color );
-                       ADVANCE_LP_RING();
-               }
-
-               if ( flags & I830_DEPTH ) {
-                       DRM_DEBUG("clear depth\n");
-                       BEGIN_LP_RING( 6 );
-                       OUT_RING( D_CMD );
-                       OUT_RING( BR13 );
-                       OUT_RING( (pbox->y1 << 16) | pbox->x1 );
-                       OUT_RING( (pbox->y2 << 16) | pbox->x2 );
-                       OUT_RING( dev_priv->depth_offset );
-                       OUT_RING( clear_zval );
-                       ADVANCE_LP_RING();
-               }
-       }
-}
-
-static void i830_dma_dispatch_swap( drm_device_t *dev )
-{
-       drm_i830_private_t *dev_priv = dev->dev_private;
-       drm_i830_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       int nbox = sarea_priv->nbox;
-       drm_clip_rect_t *pbox = sarea_priv->boxes;
-       int pitch = dev_priv->pitch;
-       int cpp = dev_priv->cpp;
-       int ofs = dev_priv->back_offset;
-       int i;
-       unsigned int CMD, BR13;
-       RING_LOCALS;
-
-       DRM_DEBUG("swapbuffers\n");
-
-       switch(cpp) {
-       case 2: 
-               BR13 = (pitch * cpp) | (0xCC << 16) | (1<<24);
-               CMD = XY_SRC_COPY_BLT_CMD;
-               break;
-       case 4:
-               BR13 = (pitch * cpp) | (0xCC << 16) | (1<<24) | (1<<25);
-               CMD = (XY_SRC_COPY_BLT_CMD | XY_SRC_COPY_BLT_WRITE_ALPHA |
-                      XY_SRC_COPY_BLT_WRITE_RGB);
-               break;
-       default:
-               BR13 = (pitch * cpp) | (0xCC << 16) | (1<<24);
-               CMD = XY_SRC_COPY_BLT_CMD;
-               break;
-       }
-
-       i830_kernel_lost_context(dev);
-
-       if (nbox > I830_NR_SAREA_CLIPRECTS)
-               nbox = I830_NR_SAREA_CLIPRECTS;
-
-       for (i = 0 ; i < nbox; i++, pbox++) 
-       {
-               if (pbox->x1 > pbox->x2 ||
-                   pbox->y1 > pbox->y2 ||
-                   pbox->x2 > dev_priv->w ||
-                   pbox->y2 > dev_priv->h)
-                       continue;
-               DRM_DEBUG("dispatch swap %d,%d-%d,%d!\n",
-                         pbox->x1, pbox->y1,
-                         pbox->x2, pbox->y2);
-
-               BEGIN_LP_RING( 8 );
-               OUT_RING( CMD );
-               OUT_RING( BR13 );
-
-               OUT_RING( (pbox->y1 << 16) |
-                         pbox->x1 );
-               OUT_RING( (pbox->y2 << 16) |
-                         pbox->x2 );
-
-               OUT_RING( 0 /* front ofs always zero */ );
-               OUT_RING( (pbox->y1 << 16) |
-                         pbox->x1 );
-
-               OUT_RING( BR13 & 0xffff );
-               OUT_RING( ofs );
-
-               ADVANCE_LP_RING();
-       }
-}
-
-
-static void i830_dma_dispatch_vertex(drm_device_t *dev, 
-                                    drm_buf_t *buf,
-                                    int discard,
-                                    int used)
-{
-       drm_i830_private_t *dev_priv = dev->dev_private;
-       drm_i830_buf_priv_t *buf_priv = buf->dev_private;
-       drm_i830_sarea_t *sarea_priv = dev_priv->sarea_priv;
-       drm_clip_rect_t *box = sarea_priv->boxes;
-       int nbox = sarea_priv->nbox;
-       unsigned long address = (unsigned long)buf->bus_address;
-       unsigned long start = address - dev->agp->base;     
-       int i = 0, u;
-       RING_LOCALS;
-
-       i830_kernel_lost_context(dev);
-
-       if (nbox > I830_NR_SAREA_CLIPRECTS) 
-               nbox = I830_NR_SAREA_CLIPRECTS;
-
-       if (discard) {
-               u = cmpxchg(buf_priv->in_use, I830_BUF_CLIENT, 
-                           I830_BUF_HARDWARE);
-               if(u != I830_BUF_CLIENT) {
-                       DRM_DEBUG("xxxx 2\n");
-               }
-       }
-
-       if (used > 4*1024) 
-               used = 0;
-
-       if (sarea_priv->dirty)
-          i830EmitState( dev );
-
-       DRM_DEBUG("dispatch vertex addr 0x%lx, used 0x%x nbox %d\n", 
-                 address, used, nbox);
-
-       dev_priv->counter++;
-       DRM_DEBUG(  "dispatch counter : %ld\n", dev_priv->counter);
-       DRM_DEBUG(  "i830_dma_dispatch\n");
-       DRM_DEBUG(  "start : %lx\n", start);
-       DRM_DEBUG(  "used : %d\n", used);
-       DRM_DEBUG(  "start + used - 4 : %ld\n", start + used - 4);
-
-       if (buf_priv->currently_mapped == I830_BUF_MAPPED) {
-               *(u32 *)buf_priv->virtual = (GFX_OP_PRIMITIVE |
-                                            sarea_priv->vertex_prim |
-                                            ((used/4)-2));
-               
-               if (used & 4) {
-                       *(u32 *)((u32)buf_priv->virtual + used) = 0;
-                       used += 4;
-               }
-
-               i830_unmap_buffer(buf);
-       }
-                  
-       if (used) {
-               do {
-                       if (i < nbox) {
-                               BEGIN_LP_RING(6);
-                               OUT_RING( GFX_OP_DRAWRECT_INFO );
-                               OUT_RING( sarea_priv->BufferState[I830_DESTREG_DR1] );
-                               OUT_RING( box[i].x1 | (box[i].y1<<16) );
-                               OUT_RING( box[i].x2 | (box[i].y2<<16) );
-                               OUT_RING( sarea_priv->BufferState[I830_DESTREG_DR4] );
-                               OUT_RING( 0 );
-                               ADVANCE_LP_RING();
-                       }
-
-                       BEGIN_LP_RING(4);
-
-                       OUT_RING( MI_BATCH_BUFFER );
-                       OUT_RING( start | MI_BATCH_NON_SECURE );
-                       OUT_RING( start + used - 4 );
-                       OUT_RING( 0 );
-                       ADVANCE_LP_RING();
-                       
-               } while (++i < nbox);
-       }
-
-       BEGIN_LP_RING(10);
-       OUT_RING( CMD_STORE_DWORD_IDX );
-       OUT_RING( 20 );
-       OUT_RING( dev_priv->counter );
-       OUT_RING( 0 );
-
-       if (discard) {
-               OUT_RING( CMD_STORE_DWORD_IDX );
-               OUT_RING( buf_priv->my_use_idx );
-               OUT_RING( I830_BUF_FREE );
-               OUT_RING( 0 );
-       }
-
-       OUT_RING( CMD_REPORT_HEAD );
-       OUT_RING( 0 );
-       ADVANCE_LP_RING();
-}
-
-/* Interrupts are only for flushing */
-void i830_dma_service(int irq, void *device, struct pt_regs *regs)
-{
-       drm_device_t     *dev = (drm_device_t *)device;
-       drm_i830_private_t *dev_priv = (drm_i830_private_t *)dev->dev_private;
-       u16 temp;
-   
-       temp = I830_READ16(I830REG_INT_IDENTITY_R);
-       temp = temp & ~(0x6000);
-       if(temp != 0) I830_WRITE16(I830REG_INT_IDENTITY_R, 
-                                  temp); /* Clear all interrupts */
-       else
-          return;
-       queue_task(&dev->tq, &tq_immediate);
-       mark_bh(IMMEDIATE_BH);
-}
-
-void DRM(dma_immediate_bh)(void *device)
-{
-       drm_device_t *dev = (drm_device_t *) device;
-       drm_i830_private_t *dev_priv = (drm_i830_private_t *)dev->dev_private;
-
-       atomic_set(&dev_priv->flush_done, 1);
-       wake_up_interruptible(&dev_priv->flush_queue);
-}
-
-static inline void i830_dma_emit_flush(drm_device_t *dev)
-{
-       drm_i830_private_t *dev_priv = dev->dev_private;
-       RING_LOCALS;
-
-       i830_kernel_lost_context(dev);
-
-       BEGIN_LP_RING(2);
-       OUT_RING( CMD_REPORT_HEAD );
-       OUT_RING( GFX_OP_USER_INTERRUPT );
-       ADVANCE_LP_RING();
-
-       i830_wait_ring( dev, dev_priv->ring.Size - 8 );
-       atomic_set(&dev_priv->flush_done, 1);
-       wake_up_interruptible(&dev_priv->flush_queue);
-}
-
-static inline void i830_dma_quiescent_emit(drm_device_t *dev)
-{
-       drm_i830_private_t *dev_priv = dev->dev_private;
-       RING_LOCALS;
-
-       i830_kernel_lost_context(dev);
-
-       BEGIN_LP_RING(4);
-       OUT_RING( INST_PARSER_CLIENT | INST_OP_FLUSH | INST_FLUSH_MAP_CACHE );
-       OUT_RING( CMD_REPORT_HEAD );
-       OUT_RING( 0 );
-       OUT_RING( GFX_OP_USER_INTERRUPT );
-       ADVANCE_LP_RING();
-
-       i830_wait_ring( dev, dev_priv->ring.Size - 8 );
-       atomic_set(&dev_priv->flush_done, 1);
-       wake_up_interruptible(&dev_priv->flush_queue);
-}
-
-void i830_dma_quiescent(drm_device_t *dev)
-{
-       DECLARE_WAITQUEUE(entry, current);
-       drm_i830_private_t *dev_priv = (drm_i830_private_t *)dev->dev_private;
-       unsigned long end;      
-
-       if(dev_priv == NULL) {
-               return;
-       }
-       atomic_set(&dev_priv->flush_done, 0);
-       add_wait_queue(&dev_priv->flush_queue, &entry);
-       end = jiffies + (HZ*3);
-   
-       for (;;) {
-               current->state = TASK_INTERRUPTIBLE;
-               i830_dma_quiescent_emit(dev);
-               if (atomic_read(&dev_priv->flush_done) == 1) break;
-               if((signed)(end - jiffies) <= 0) {
-                       DRM_ERROR("lockup\n");
-                       break;
-               }          
-               schedule_timeout(HZ*3);
-               if (signal_pending(current)) {
-                       break;
-               }
-       }
-   
-       current->state = TASK_RUNNING;
-       remove_wait_queue(&dev_priv->flush_queue, &entry);
-   
-       return;
-}
-
-static int i830_flush_queue(drm_device_t *dev)
-{
-       DECLARE_WAITQUEUE(entry, current);
-       drm_i830_private_t *dev_priv = (drm_i830_private_t *)dev->dev_private;
-       drm_device_dma_t *dma = dev->dma;
-       unsigned long end;
-       int i, ret = 0;      
-
-       if(dev_priv == NULL) {
-               return 0;
-       }
-       atomic_set(&dev_priv->flush_done, 0);
-       add_wait_queue(&dev_priv->flush_queue, &entry);
-       end = jiffies + (HZ*3);
-       for (;;) {
-               current->state = TASK_INTERRUPTIBLE;
-               i830_dma_emit_flush(dev);
-               if (atomic_read(&dev_priv->flush_done) == 1) break;
-               if((signed)(end - jiffies) <= 0) {
-                       DRM_ERROR("lockup\n");
-                       break;
-               }          
-               schedule_timeout(HZ*3);
-               if (signal_pending(current)) {
-                       ret = -EINTR; /* Can't restart */
-                       break;
-               }
-       }
-   
-       current->state = TASK_RUNNING;
-       remove_wait_queue(&dev_priv->flush_queue, &entry);
-
-
-       for (i = 0; i < dma->buf_count; i++) {
-               drm_buf_t *buf = dma->buflist[ i ];
-               drm_i830_buf_priv_t *buf_priv = buf->dev_private;
-          
-               int used = cmpxchg(buf_priv->in_use, I830_BUF_HARDWARE, 
-                                  I830_BUF_FREE);
-
-               if (used == I830_BUF_HARDWARE)
-                       DRM_DEBUG("reclaimed from HARDWARE\n");
-               if (used == I830_BUF_CLIENT)
-                       DRM_DEBUG("still on client HARDWARE\n");
-       }
-
-       return ret;
-}
-
-/* Must be called with the lock held */
-void i830_reclaim_buffers(drm_device_t *dev, pid_t pid)
-{
-       drm_device_dma_t *dma = dev->dma;
-       int              i;
-
-       if (!dma) return;
-       if (!dev->dev_private) return;
-       if (!dma->buflist) return;
-
-        i830_flush_queue(dev);
-
-       for (i = 0; i < dma->buf_count; i++) {
-               drm_buf_t *buf = dma->buflist[ i ];
-               drm_i830_buf_priv_t *buf_priv = buf->dev_private;
-          
-               if (buf->pid == pid && buf_priv) {
-                       int used = cmpxchg(buf_priv->in_use, I830_BUF_CLIENT, 
-                                          I830_BUF_FREE);
-
-                       if (used == I830_BUF_CLIENT)
-                               DRM_DEBUG("reclaimed from client\n");
-                       if(buf_priv->currently_mapped == I830_BUF_MAPPED)
-                               buf_priv->currently_mapped = I830_BUF_UNMAPPED;
-               }
-       }
-}
-
-int i830_flush_ioctl(struct inode *inode, struct file *filp, 
-                    unsigned int cmd, unsigned long arg)
-{
-       drm_file_t        *priv   = filp->private_data;
-       drm_device_t      *dev    = priv->dev;
-   
-       DRM_DEBUG("i830_flush_ioctl\n");
-       if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) {
-               DRM_ERROR("i830_flush_ioctl called without lock held\n");
-               return -EINVAL;
-       }
-
-       i830_flush_queue(dev);
-       return 0;
-}
-
-int i830_dma_vertex(struct inode *inode, struct file *filp,
-              unsigned int cmd, unsigned long arg)
-{
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->dev;
-       drm_device_dma_t *dma = dev->dma;
-       drm_i830_private_t *dev_priv = (drm_i830_private_t *)dev->dev_private;
-       u32 *hw_status = (u32 *)dev_priv->hw_status_page;
-       drm_i830_sarea_t *sarea_priv = (drm_i830_sarea_t *) 
-                                       dev_priv->sarea_priv; 
-       drm_i830_vertex_t vertex;
-
-       if (copy_from_user(&vertex, (drm_i830_vertex_t *)arg, sizeof(vertex)))
-               return -EFAULT;
-
-       if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) {
-               DRM_ERROR("i830_dma_vertex called without lock held\n");
-               return -EINVAL;
-       }
-
-       DRM_DEBUG("i830 dma vertex, idx %d used %d discard %d\n",
-                 vertex.idx, vertex.used, vertex.discard);
-
-       if(vertex.idx < 0 || vertex.idx > dma->buf_count) return -EINVAL;
-
-       i830_dma_dispatch_vertex( dev, 
-                                 dma->buflist[ vertex.idx ], 
-                                 vertex.discard, vertex.used );
-
-       sarea_priv->last_enqueue = dev_priv->counter-1;
-       sarea_priv->last_dispatch = (int) hw_status[5];
-   
-       return 0;
-}
-
-int i830_clear_bufs(struct inode *inode, struct file *filp,
-                  unsigned int cmd, unsigned long arg)
-{
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->dev;
-       drm_i830_clear_t clear;
-
-       if (copy_from_user(&clear, (drm_i830_clear_t *)arg, sizeof(clear)))
-               return -EFAULT;
-   
-       if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) {
-               DRM_ERROR("i830_clear_bufs called without lock held\n");
-               return -EINVAL;
-       }
-
-       /* GH: Someone's doing nasty things... */
-       if (!dev->dev_private) {
-               return -EINVAL;
-       }
-
-       i830_dma_dispatch_clear( dev, clear.flags, 
-                                clear.clear_color, 
-                                clear.clear_depth,
-                                clear.clear_depthmask);
-       return 0;
-}
-
-int i830_swap_bufs(struct inode *inode, struct file *filp,
-                 unsigned int cmd, unsigned long arg)
-{
-       drm_file_t *priv = filp->private_data;
-       drm_device_t *dev = priv->dev;
-   
-       DRM_DEBUG("i830_swap_bufs\n");
-
-       if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) {
-               DRM_ERROR("i830_swap_buf called without lock held\n");
-               return -EINVAL;
-       }
-
-       i830_dma_dispatch_swap( dev );
-       return 0;
-}
-
-int i830_getage(struct inode *inode, struct file *filp, unsigned int cmd,
-               unsigned long arg)
-{
-       drm_file_t        *priv     = filp->private_data;
-       drm_device_t      *dev      = priv->dev;
-       drm_i830_private_t *dev_priv = (drm_i830_private_t *)dev->dev_private;
-       u32 *hw_status = (u32 *)dev_priv->hw_status_page;
-       drm_i830_sarea_t *sarea_priv = (drm_i830_sarea_t *) 
-                                       dev_priv->sarea_priv; 
-
-       sarea_priv->last_dispatch = (int) hw_status[5];
-       return 0;
-}
-
-int i830_getbuf(struct inode *inode, struct file *filp, unsigned int cmd,
-               unsigned long arg)
-{
-       drm_file_t        *priv     = filp->private_data;
-       drm_device_t      *dev      = priv->dev;
-       int               retcode   = 0;
-       drm_i830_dma_t    d;
-       drm_i830_private_t *dev_priv = (drm_i830_private_t *)dev->dev_private;
-       u32 *hw_status = (u32 *)dev_priv->hw_status_page;
-       drm_i830_sarea_t *sarea_priv = (drm_i830_sarea_t *) 
-                                       dev_priv->sarea_priv; 
-
-       DRM_DEBUG("getbuf\n");
-       if (copy_from_user(&d, (drm_i830_dma_t *)arg, sizeof(d)))
-               return -EFAULT;
-   
-       if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) {
-               DRM_ERROR("i830_dma called without lock held\n");
-               return -EINVAL;
-       }
-       
-       d.granted = 0;
-
-       retcode = i830_dma_get_buffer(dev, &d, filp);
-
-       DRM_DEBUG("i830_dma: %d returning %d, granted = %d\n",
-                 current->pid, retcode, d.granted);
-
-       if (copy_to_user((drm_dma_t *)arg, &d, sizeof(d)))
-               return -EFAULT;
-       sarea_priv->last_dispatch = (int) hw_status[5];
-
-       return retcode;
-}
-
-int i830_copybuf(struct inode *inode, struct file *filp, unsigned int cmd,
-               unsigned long arg)
-{
-       drm_file_t        *priv     = filp->private_data;
-       drm_device_t      *dev      = priv->dev;
-       drm_i830_copy_t   d;
-       drm_i830_private_t *dev_priv = (drm_i830_private_t *)dev->dev_private;
-       u32 *hw_status = (u32 *)dev_priv->hw_status_page;
-       drm_i830_sarea_t *sarea_priv = (drm_i830_sarea_t *) 
-                                       dev_priv->sarea_priv; 
-       drm_buf_t *buf;
-       drm_i830_buf_priv_t *buf_priv;
-       drm_device_dma_t *dma = dev->dma;
-
-       if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) {
-               DRM_ERROR("i830_dma called without lock held\n");
-               return -EINVAL;
-       }
-   
-       if (copy_from_user(&d, (drm_i830_copy_t *)arg, sizeof(d)))
-               return -EFAULT;
-
-       if(d.idx < 0 || d.idx > dma->buf_count) return -EINVAL;
-       buf = dma->buflist[ d.idx ];
-       buf_priv = buf->dev_private;
-       if (buf_priv->currently_mapped != I830_BUF_MAPPED) return -EPERM;
-
-       if(d.used < 0 || d.used > buf->total) return -EINVAL;
-
-       if (copy_from_user(buf_priv->virtual, d.address, d.used))
-               return -EFAULT;
-
-       sarea_priv->last_dispatch = (int) hw_status[5];
-
-       return 0;
-}
-
-int i830_docopy(struct inode *inode, struct file *filp, unsigned int cmd,
-               unsigned long arg)
-{
-       if(VM_DONTCOPY == 0) return 1;
-       return 0;
-}
diff --git a/bsd/i830_drm.h b/bsd/i830_drm.h
deleted file mode 100644 (file)
index 725ad36..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-#ifndef _I830_DRM_H_
-#define _I830_DRM_H_
-
-/* WARNING: These defines must be the same as what the Xserver uses.
- * if you change them, you must change the defines in the Xserver.
- */
-
-#ifndef _I830_DEFINES_
-#define _I830_DEFINES_
-
-#define I830_DMA_BUF_ORDER             12
-#define I830_DMA_BUF_SZ                (1<<I830_DMA_BUF_ORDER)
-#define I830_DMA_BUF_NR                256
-#define I830_NR_SAREA_CLIPRECTS        8
-
-/* Each region is a minimum of 64k, and there are at most 64 of them.
- */
-#define I830_NR_TEX_REGIONS 64
-#define I830_LOG_MIN_TEX_REGION_SIZE 16
-
-/* if defining I830_ENABLE_4_TEXTURES, do it in i830_3d_reg.h, too */
-#if !defined(I830_ENABLE_4_TEXTURES)
-#define I830_TEXTURE_COUNT     2
-#define I830_TEXBLEND_COUNT    2       /* always same as TEXTURE_COUNT? */
-#else /* defined(I830_ENABLE_4_TEXTURES) */
-#define I830_TEXTURE_COUNT     4
-#define I830_TEXBLEND_COUNT    4       /* always same as TEXTURE_COUNT? */
-#endif /* I830_ENABLE_4_TEXTURES */
-
-#define I830_TEXBLEND_SIZE     12      /* (4 args + op) * 2 + COLOR_FACTOR */
-
-#define I830_UPLOAD_CTX                        0x1
-#define I830_UPLOAD_BUFFERS            0x2
-#define I830_UPLOAD_CLIPRECTS          0x4
-#define I830_UPLOAD_TEX0_IMAGE         0x100 /* handled clientside */
-#define I830_UPLOAD_TEX0_CUBE          0x200 /* handled clientside */
-#define I830_UPLOAD_TEX1_IMAGE         0x400 /* handled clientside */
-#define I830_UPLOAD_TEX1_CUBE          0x800 /* handled clientside */
-#define I830_UPLOAD_TEX2_IMAGE         0x1000 /* handled clientside */
-#define I830_UPLOAD_TEX2_CUBE          0x2000 /* handled clientside */
-#define I830_UPLOAD_TEX3_IMAGE         0x4000 /* handled clientside */
-#define I830_UPLOAD_TEX3_CUBE          0x8000 /* handled clientside */
-#define I830_UPLOAD_TEX_N_IMAGE(n)     (0x100 << (n * 2))
-#define I830_UPLOAD_TEX_N_CUBE(n)      (0x200 << (n * 2))
-#define I830_UPLOAD_TEXIMAGE_MASK      0xff00
-#define I830_UPLOAD_TEX0                       0x10000
-#define I830_UPLOAD_TEX1                       0x20000
-#define I830_UPLOAD_TEX2                       0x40000
-#define I830_UPLOAD_TEX3                       0x80000
-#define I830_UPLOAD_TEX_N(n)           (0x10000 << (n))
-#define I830_UPLOAD_TEX_MASK           0xf0000
-#define I830_UPLOAD_TEXBLEND0          0x100000
-#define I830_UPLOAD_TEXBLEND1          0x200000
-#define I830_UPLOAD_TEXBLEND2          0x400000
-#define I830_UPLOAD_TEXBLEND3          0x800000
-#define I830_UPLOAD_TEXBLEND_N(n)      (0x100000 << (n))
-#define I830_UPLOAD_TEXBLEND_MASK      0xf00000
-#define I830_UPLOAD_TEX_PALETTE_N(n)    (0x1000000 << (n))
-#define I830_UPLOAD_TEX_PALETTE_SHARED 0x4000000
-
-/* Indices into buf.Setup where various bits of state are mirrored per
- * context and per buffer.  These can be fired at the card as a unit,
- * or in a piecewise fashion as required.
- */
-
-/* Destbuffer state 
- *    - backbuffer linear offset and pitch -- invarient in the current dri
- *    - zbuffer linear offset and pitch -- also invarient
- *    - drawing origin in back and depth buffers.
- *
- * Keep the depth/back buffer state here to acommodate private buffers
- * in the future.
- */
-
-#define I830_DESTREG_CBUFADDR 0
-/* Invarient */
-#define I830_DESTREG_DBUFADDR 1
-#define I830_DESTREG_DV0 2
-#define I830_DESTREG_DV1 3
-#define I830_DESTREG_SENABLE 4
-#define I830_DESTREG_SR0 5
-#define I830_DESTREG_SR1 6
-#define I830_DESTREG_SR2 7
-#define I830_DESTREG_DR0 8
-#define I830_DESTREG_DR1 9
-#define I830_DESTREG_DR2 10
-#define I830_DESTREG_DR3 11
-#define I830_DESTREG_DR4 12
-#define I830_DEST_SETUP_SIZE 13
-
-/* Context state
- */
-#define I830_CTXREG_STATE1             0
-#define I830_CTXREG_STATE2             1
-#define I830_CTXREG_STATE3             2
-#define I830_CTXREG_STATE4             3
-#define I830_CTXREG_STATE5             4
-#define I830_CTXREG_IALPHAB            5
-#define I830_CTXREG_STENCILTST         6
-#define I830_CTXREG_ENABLES_1          7
-#define I830_CTXREG_ENABLES_2          8
-#define I830_CTXREG_AA                 9
-#define I830_CTXREG_FOGCOLOR           10
-#define I830_CTXREG_BLENDCOLR0         11
-#define I830_CTXREG_BLENDCOLR          12 /* Dword 1 of 2 dword command */
-#define I830_CTXREG_VF                 13
-#define I830_CTXREG_VF2                        14
-#define I830_CTXREG_MCSB0              15
-#define I830_CTXREG_MCSB1              16
-#define I830_CTX_SETUP_SIZE            17
-
-/* Texture state (per tex unit)
- */
-
-#define I830_TEXREG_MI0        0       /* GFX_OP_MAP_INFO (6 dwords) */
-#define I830_TEXREG_MI1        1
-#define I830_TEXREG_MI2        2
-#define I830_TEXREG_MI3        3
-#define I830_TEXREG_MI4        4
-#define I830_TEXREG_MI5        5
-#define I830_TEXREG_MF 6       /* GFX_OP_MAP_FILTER */
-#define I830_TEXREG_MLC        7       /* GFX_OP_MAP_LOD_CTL */
-#define I830_TEXREG_MLL        8       /* GFX_OP_MAP_LOD_LIMITS */
-#define I830_TEXREG_MCS        9       /* GFX_OP_MAP_COORD_SETS */
-#define I830_TEX_SETUP_SIZE 10
-
-#define I830_FRONT   0x1
-#define I830_BACK    0x2
-#define I830_DEPTH   0x4
-
-#endif /* _I830_DEFINES_ */
-
-typedef struct _drm_i830_init {
-       enum {
-               I830_INIT_DMA = 0x01,
-               I830_CLEANUP_DMA = 0x02
-       } func;
-       unsigned int mmio_offset;
-       unsigned int buffers_offset;
-       int sarea_priv_offset;
-       unsigned int ring_start;
-       unsigned int ring_end;
-       unsigned int ring_size;
-       unsigned int front_offset;
-       unsigned int back_offset;
-       unsigned int depth_offset;
-       unsigned int w;
-       unsigned int h;
-       unsigned int pitch;
-       unsigned int pitch_bits;
-       unsigned int back_pitch;
-       unsigned int depth_pitch;
-       unsigned int cpp;
-} drm_i830_init_t;
-
-/* Warning: If you change the SAREA structure you must change the Xserver
- * structure as well */
-
-typedef struct _drm_i830_tex_region {
-       unsigned char next, prev; /* indices to form a circular LRU  */
-       unsigned char in_use;   /* owned by a client, or free? */
-       int age;                /* tracked by clients to update local LRU's */
-} drm_i830_tex_region_t;
-
-typedef struct _drm_i830_sarea {
-       unsigned int ContextState[I830_CTX_SETUP_SIZE];
-       unsigned int BufferState[I830_DEST_SETUP_SIZE];
-       unsigned int TexState[I830_TEXTURE_COUNT][I830_TEX_SETUP_SIZE];
-       unsigned int TexBlendState[I830_TEXBLEND_COUNT][I830_TEXBLEND_SIZE];
-       unsigned int TexBlendStateWordsUsed[I830_TEXBLEND_COUNT];
-       unsigned int Palette[2][256];
-       unsigned int dirty;
-
-       unsigned int nbox;
-       drm_clip_rect_t boxes[I830_NR_SAREA_CLIPRECTS];
-
-       /* Maintain an LRU of contiguous regions of texture space.  If
-        * you think you own a region of texture memory, and it has an
-        * age different to the one you set, then you are mistaken and
-        * it has been stolen by another client.  If global texAge
-        * hasn't changed, there is no need to walk the list.
-        *
-        * These regions can be used as a proxy for the fine-grained
-        * texture information of other clients - by maintaining them
-        * in the same lru which is used to age their own textures,
-        * clients have an approximate lru for the whole of global
-        * texture space, and can make informed decisions as to which
-        * areas to kick out.  There is no need to choose whether to
-        * kick out your own texture or someone else's - simply eject
-        * them all in LRU order.  
-        */
-
-       drm_i830_tex_region_t texList[I830_NR_TEX_REGIONS+1]; 
-                               /* Last elt is sentinal */
-        int texAge;            /* last time texture was uploaded */
-        int last_enqueue;      /* last time a buffer was enqueued */
-       int last_dispatch;      /* age of the most recently dispatched buffer */
-       int last_quiescent;     /*  */
-       int ctxOwner;           /* last context to upload state */
-
-       int vertex_prim;
-} drm_i830_sarea_t;
-
-/* I830 specific ioctls
- * The device specific ioctl range is 0x40 to 0x79.
- */
-#define DRM_IOCTL_I830_INIT            DRM_IOW( 0x40, drm_i830_init_t)
-#define DRM_IOCTL_I830_VERTEX          DRM_IOW( 0x41, drm_i830_vertex_t)
-#define DRM_IOCTL_I830_CLEAR           DRM_IOW( 0x42, drm_i830_clear_t)
-#define DRM_IOCTL_I830_FLUSH           DRM_IO ( 0x43)
-#define DRM_IOCTL_I830_GETAGE          DRM_IO ( 0x44)
-#define DRM_IOCTL_I830_GETBUF          DRM_IOWR(0x45, drm_i830_dma_t)
-#define DRM_IOCTL_I830_SWAP            DRM_IO ( 0x46)
-#define DRM_IOCTL_I830_COPY            DRM_IOW( 0x47, drm_i830_copy_t)
-#define DRM_IOCTL_I830_DOCOPY          DRM_IO ( 0x48)
-
-typedef struct _drm_i830_clear {
-       int clear_color;
-       int clear_depth;
-       int flags;
-       unsigned int clear_colormask;
-       unsigned int clear_depthmask;
-} drm_i830_clear_t;
-
-
-
-/* These may be placeholders if we have more cliprects than
- * I830_NR_SAREA_CLIPRECTS.  In that case, the client sets discard to
- * false, indicating that the buffer will be dispatched again with a
- * new set of cliprects.
- */
-typedef struct _drm_i830_vertex {
-       int idx;                /* buffer index */
-       int used;               /* nr bytes in use */
-       int discard;            /* client is finished with the buffer? */
-} drm_i830_vertex_t;
-
-typedef struct _drm_i830_copy_t {
-       int idx;                /* buffer index */
-       int used;               /* nr bytes in use */
-       void *address;          /* Address to copy from */
-} drm_i830_copy_t;
-
-typedef struct drm_i830_dma {
-       void *virtual;
-       int request_idx;
-       int request_size;
-       int granted;
-} drm_i830_dma_t;
-
-#endif /* _I830_DRM_H_ */
diff --git a/bsd/i830_drv.c b/bsd/i830_drv.c
deleted file mode 100644 (file)
index ad31d1e..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/* i830_drv.c -- I810 driver -*- linux-c -*-
- * Created: Mon Dec 13 01:56:22 1999 by jhartmann@precisioninsight.com
- *
- * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
- * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors:
- *    Rickard E. (Rik) Faith <faith@valinux.com>
- *    Jeff Hartmann <jhartmann@valinux.com>
- *    Gareth Hughes <gareth@valinux.com>
- *    Abraham vd Merwe <abraham@2d3d.co.za>
- */
-
-#include <linux/config.h>
-#include "i830.h"
-#include "drmP.h"
-#include "drm.h"
-#include "i830_drm.h"
-#include "i830_drv.h"
-
-#define DRIVER_AUTHOR          "VA Linux Systems Inc."
-
-#define DRIVER_NAME            "i830"
-#define DRIVER_DESC            "Intel 830M"
-#define DRIVER_DATE            "20011004"
-
-#define DRIVER_MAJOR           1
-#define DRIVER_MINOR           2
-#define DRIVER_PATCHLEVEL      0
-
-#define DRIVER_IOCTLS                                                      \
-       [DRM_IOCTL_NR(DRM_IOCTL_I830_INIT)]   = { i830_dma_init,    1, 1 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_I830_VERTEX)] = { i830_dma_vertex,  1, 0 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_I830_CLEAR)]  = { i830_clear_bufs,  1, 0 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_I830_FLUSH)]  = { i830_flush_ioctl, 1, 0 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_I830_GETAGE)] = { i830_getage,      1, 0 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_I830_GETBUF)] = { i830_getbuf,      1, 0 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_I830_SWAP)]   = { i830_swap_bufs,   1, 0 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_I830_COPY)]   = { i830_copybuf,     1, 0 }, \
-       [DRM_IOCTL_NR(DRM_IOCTL_I830_DOCOPY)] = { i830_docopy,      1, 0 },
-
-#define __HAVE_COUNTERS         4
-#define __HAVE_COUNTER6         _DRM_STAT_IRQ
-#define __HAVE_COUNTER7         _DRM_STAT_PRIMARY
-#define __HAVE_COUNTER8         _DRM_STAT_SECONDARY
-#define __HAVE_COUNTER9         _DRM_STAT_DMA
-
-
-#include "drm_agpsupport.h"
-#include "drm_auth.h"
-#include "drm_bufs.h"
-#include "drm_context.h"
-#include "drm_dma.h"
-#include "drm_drawable.h"
-#include "drm_drv.h"
-
-#ifndef MODULE
-/* DRM(options) is called by the kernel to parse command-line options
- * passed via the boot-loader (e.g., LILO).  It calls the insmod option
- * routine, drm_parse_drm.
- */
-
-/* JH- We have to hand expand the string ourselves because of the cpp.  If
- * anyone can think of a way that we can fit into the __setup macro without
- * changing it, then please send the solution my way.
- */
-static int __init i830_options( char *str )
-{
-   DRM(parse_options)( str );
-   return 1;
-}
-
-__setup( DRIVER_NAME "=", i830_options );
-#endif
-
-#include "drm_fops.h"
-#include "drm_init.h"
-#include "drm_ioctl.h"
-#include "drm_lock.h"
-#include "drm_lists.h"
-#include "drm_memory.h"
-#include "drm_proc.h"
-#include "drm_vm.h"
-#include "drm_stub.h"
diff --git a/bsd/i830_drv.h b/bsd/i830_drv.h
deleted file mode 100644 (file)
index 4e9d6c8..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-/* i830_drv.h -- Private header for the I830 driver -*- linux-c -*-
- * Created: Mon Dec 13 01:50:01 1999 by jhartmann@precisioninsight.com
- *
- * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
- * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
- * All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Authors: Rickard E. (Rik) Faith <faith@valinux.com>
- *         Jeff Hartmann <jhartmann@valinux.com>
- *
- */
-
-#ifndef _I830_DRV_H_
-#define _I830_DRV_H_
-
-typedef struct drm_i830_buf_priv {
-       u32 *in_use;
-       int my_use_idx;
-       int currently_mapped;
-       void *virtual;
-       void *kernel_virtual;
-       int map_count;
-       struct vm_area_struct *vma;
-} drm_i830_buf_priv_t;
-
-typedef struct _drm_i830_ring_buffer{
-       int tail_mask;
-       unsigned long Start;
-       unsigned long End;
-       unsigned long Size;
-       u8 *virtual_start;
-       int head;
-       int tail;
-       int space;
-} drm_i830_ring_buffer_t;
-
-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;
-       drm_i830_ring_buffer_t ring;
-
-       unsigned long hw_status_page;
-       unsigned long counter;
-
-       atomic_t flush_done;
-       wait_queue_head_t flush_queue;  /* Processes waiting until flush    */
-       drm_buf_t *mmap_buffer;
-       
-       u32 front_di1, back_di1, zi1;
-       
-       int back_offset;
-       int depth_offset;
-       int w, h;
-       int pitch;
-       int back_pitch;
-       int depth_pitch;
-       unsigned int cpp;
-} drm_i830_private_t;
-
-                               /* i830_dma.c */
-extern int  i830_dma_schedule(drm_device_t *dev, int locked);
-extern int  i830_getbuf(struct inode *inode, struct file *filp,
-                       unsigned int cmd, unsigned long arg);
-extern int  i830_dma_init(struct inode *inode, struct file *filp,
-                         unsigned int cmd, unsigned long arg);
-extern int  i830_flush_ioctl(struct inode *inode, struct file *filp,
-                            unsigned int cmd, unsigned long arg);
-extern void i830_reclaim_buffers(drm_device_t *dev, pid_t pid);
-extern int  i830_getage(struct inode *inode, struct file *filp, unsigned int cmd,
-                       unsigned long arg);
-extern int i830_mmap_buffers(struct file *filp, struct vm_area_struct *vma);
-extern int i830_copybuf(struct inode *inode, struct file *filp, 
-                       unsigned int cmd, unsigned long arg);
-extern int i830_docopy(struct inode *inode, struct file *filp, 
-                      unsigned int cmd, unsigned long arg);
-
-extern void i830_dma_quiescent(drm_device_t *dev);
-
-extern int i830_dma_vertex(struct inode *inode, struct file *filp,
-                         unsigned int cmd, unsigned long arg);
-
-extern int i830_swap_bufs(struct inode *inode, struct file *filp,
-                        unsigned int cmd, unsigned long arg);
-
-extern int i830_clear_bufs(struct inode *inode, struct file *filp,
-                         unsigned int cmd, unsigned long arg);
-
-#define I830_VERBOSE 0
-
-#define I830_BASE(reg)         ((unsigned long) \
-                               dev_priv->mmio_map->handle)
-#define I830_ADDR(reg)         (I830_BASE(reg) + reg)
-#define I830_DEREF(reg)                *(__volatile__ int *)I830_ADDR(reg)
-#define I830_READ(reg)         I830_DEREF(reg)
-#define I830_WRITE(reg,val)    do { I830_DEREF(reg) = val; } while (0)
-#define I830_DEREF16(reg)      *(__volatile__ u16 *)I830_ADDR(reg)
-#define I830_READ16(reg)       I830_DEREF16(reg)
-#define I830_WRITE16(reg,val)  do { I830_DEREF16(reg) = val; } while (0)
-
-#define GFX_OP_USER_INTERRUPT          ((0<<29)|(2<<23))
-#define GFX_OP_BREAKPOINT_INTERRUPT    ((0<<29)|(1<<23))
-#define CMD_REPORT_HEAD                        (7<<23)
-#define CMD_STORE_DWORD_IDX            ((0x21<<23) | 0x1)
-#define CMD_OP_BATCH_BUFFER  ((0x0<<29)|(0x30<<23)|0x1)
-
-#define INST_PARSER_CLIENT   0x00000000
-#define INST_OP_FLUSH        0x02000000
-#define INST_FLUSH_MAP_CACHE 0x00000001
-
-
-#define BB1_START_ADDR_MASK   (~0x7)
-#define BB1_PROTECTED         (1<<0)
-#define BB1_UNPROTECTED       (0<<0)
-#define BB2_END_ADDR_MASK     (~0x7)
-
-#define I830REG_HWSTAM         0x02098
-#define I830REG_INT_IDENTITY_R 0x020a4
-#define I830REG_INT_MASK_R     0x020a8
-#define I830REG_INT_ENABLE_R   0x020a0
-
-#define LP_RING                0x2030
-#define HP_RING                0x2040
-#define RING_TAIL                      0x00
-#define TAIL_ADDR              0x000FFFF8
-#define RING_HEAD                      0x04
-#define HEAD_WRAP_COUNT        0xFFE00000
-#define HEAD_WRAP_ONE          0x00200000
-#define HEAD_ADDR              0x001FFFFC
-#define RING_START                     0x08
-#define START_ADDR             0x00FFFFF8
-#define RING_LEN                       0x0C
-#define RING_NR_PAGES          0x000FF000 
-#define RING_REPORT_MASK       0x00000006
-#define RING_REPORT_64K        0x00000002
-#define RING_REPORT_128K       0x00000004
-#define RING_NO_REPORT         0x00000000
-#define RING_VALID_MASK        0x00000001
-#define RING_VALID             0x00000001
-#define RING_INVALID           0x00000000
-
-#define GFX_OP_SCISSOR         ((0x3<<29)|(0x1c<<24)|(0x10<<19))
-#define SC_UPDATE_SCISSOR       (0x1<<1)
-#define SC_ENABLE_MASK          (0x1<<0)
-#define SC_ENABLE               (0x1<<0)
-
-#define GFX_OP_SCISSOR_INFO    ((0x3<<29)|(0x1d<<24)|(0x81<<16)|(0x1))
-#define SCI_YMIN_MASK      (0xffff<<16)
-#define SCI_XMIN_MASK      (0xffff<<0)
-#define SCI_YMAX_MASK      (0xffff<<16)
-#define SCI_XMAX_MASK      (0xffff<<0)
-
-#define GFX_OP_SCISSOR_ENABLE   ((0x3<<29)|(0x1c<<24)|(0x10<<19))
-#define GFX_OP_SCISSOR_RECT     ((0x3<<29)|(0x1d<<24)|(0x81<<16)|1)
-#define GFX_OP_COLOR_FACTOR      ((0x3<<29)|(0x1d<<24)|(0x1<<16)|0x0)
-#define GFX_OP_STIPPLE           ((0x3<<29)|(0x1d<<24)|(0x83<<16))
-#define GFX_OP_MAP_INFO          ((0x3<<29)|(0x1d<<24)|0x4)
-#define GFX_OP_DESTBUFFER_VARS   ((0x3<<29)|(0x1d<<24)|(0x85<<16)|0x0)
-#define GFX_OP_DRAWRECT_INFO     ((0x3<<29)|(0x1d<<24)|(0x80<<16)|(0x3))
-#define GFX_OP_PRIMITIVE         ((0x3<<29)|(0x1f<<24))
-
-#define CMD_OP_DESTBUFFER_INFO  ((0x3<<29)|(0x1d<<24)|(0x8e<<16)|1)
-
-
-#define BR00_BITBLT_CLIENT   0x40000000
-#define BR00_OP_COLOR_BLT    0x10000000
-#define BR00_OP_SRC_COPY_BLT 0x10C00000
-#define BR13_SOLID_PATTERN   0x80000000
-
-#define BUF_3D_ID_COLOR_BACK    (0x3<<24)
-#define BUF_3D_ID_DEPTH         (0x7<<24)
-#define BUF_3D_USE_FENCE        (1<<23)
-#define BUF_3D_PITCH(x)         (((x)/4)<<2)
-
-#define CMD_OP_MAP_PALETTE_LOAD        ((3<<29)|(0x1d<<24)|(0x82<<16)|255)
-#define MAP_PALETTE_NUM(x)     ((x<<8) & (1<<8))
-#define MAP_PALETTE_BOTH       (1<<11)
-
-#define XY_COLOR_BLT_CMD               ((2<<29)|(0x50<<22)|0x4)
-#define XY_COLOR_BLT_WRITE_ALPHA       (1<<21)
-#define XY_COLOR_BLT_WRITE_RGB         (1<<20)
-
-#define XY_SRC_COPY_BLT_CMD             ((2<<29)|(0x53<<22)|6)
-#define XY_SRC_COPY_BLT_WRITE_ALPHA     (1<<21)
-#define XY_SRC_COPY_BLT_WRITE_RGB       (1<<20)
-
-#define MI_BATCH_BUFFER        ((0x30<<23)|1)
-#define MI_BATCH_NON_SECURE    (1)
-
-
-#endif
-