Merge the trunk onto the tdfx-2-1 branch. Now up to date with 4.0.1.

This commit is contained in:
Daryll Strauss 2000-07-11 19:37:14 +00:00
parent dc2701a9f6
commit 3fdcc554e2
12 changed files with 55 additions and 23 deletions

View file

@ -27,7 +27,7 @@
* Authors: Rickard E. (Rik) Faith <faith@valinux.com> * Authors: Rickard E. (Rik) Faith <faith@valinux.com>
* Kevin E. Martin <martin@valinux.com> * Kevin E. Martin <martin@valinux.com>
* *
* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/xf86drm.c,v 1.10 2000/02/23 04:47:23 martin Exp $ * $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/xf86drm.c,v 1.14 2000/06/27 16:42:07 alanh Exp $
* *
*/ */
@ -68,6 +68,13 @@ extern int xf86RemoveSIGIOHandler(int fd);
# endif # endif
#endif #endif
#ifdef __alpha__
extern unsigned long _bus_base(void);
#define BUS_BASE _bus_base()
#else
#define BUS_BASE (0)
#endif
/* Not all systems have MAP_FAILED defined */ /* Not all systems have MAP_FAILED defined */
#ifndef MAP_FAILED #ifndef MAP_FAILED
#define MAP_FAILED ((void *)-1) #define MAP_FAILED ((void *)-1)
@ -270,7 +277,7 @@ static int drmOpenByName(const char *name)
#if defined(XFree86Server) #if defined(XFree86Server)
mode = xf86ConfigDRI.mode ? xf86ConfigDRI.mode : DRM_DEV_MODE; mode = xf86ConfigDRI.mode ? xf86ConfigDRI.mode : DRM_DEV_MODE;
group = xf86ConfigDRI.group ? xf86ConfigDRI.group : DRM_DEV_GID; group = (xf86ConfigDRI.group >= 0) ? xf86ConfigDRI.group : DRM_DEV_GID;
#endif #endif
#if defined(XFree86Server) #if defined(XFree86Server)
@ -496,6 +503,10 @@ int drmAddMap(int fd,
drm_map_t map; drm_map_t map;
map.offset = offset; map.offset = offset;
#ifdef __alpha__
if (!(type & DRM_SHM))
map.offset += BUS_BASE;
#endif
map.size = size; map.size = size;
map.handle = 0; map.handle = 0;
map.type = type; map.type = type;

View file

@ -25,7 +25,7 @@
* *
* Authors: Rickard E. (Rik) Faith <faith@valinux.com> * Authors: Rickard E. (Rik) Faith <faith@valinux.com>
* *
* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/xf86drmHash.c,v 1.2 2000/02/23 04:47:23 martin Exp $ * $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/xf86drmHash.c,v 1.3 2000/06/17 00:03:34 martin Exp $
* *
* DESCRIPTION * DESCRIPTION
* *

View file

@ -25,7 +25,7 @@
* *
* Authors: Rickard E. (Rik) Faith <faith@valinux.com> * Authors: Rickard E. (Rik) Faith <faith@valinux.com>
* *
* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/xf86drmRandom.c,v 1.3 2000/02/23 04:47:23 martin Exp $ * $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/xf86drmRandom.c,v 1.4 2000/06/17 00:03:34 martin Exp $
* *
* DESCRIPTION * DESCRIPTION
* *

View file

@ -25,7 +25,7 @@
* *
* Authors: Rickard E. (Rik) Faith <faith@valinux.com> * Authors: Rickard E. (Rik) Faith <faith@valinux.com>
* *
* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/xf86drmSL.c,v 1.2 2000/02/23 04:47:24 martin Exp $ * $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/xf86drmSL.c,v 1.3 2000/06/17 00:03:34 martin Exp $
* *
* DESCRIPTION * DESCRIPTION
* *

View file

@ -9,7 +9,7 @@
# Note 2! The CFLAGS definitions are now inherited from the # Note 2! The CFLAGS definitions are now inherited from the
# parent makes.. # parent makes..
# #
# $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/Makefile.kernel,v 1.5 2000/02/14 06:27:25 martin Exp $ # $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/Makefile.kernel,v 1.6 2000/06/17 00:03:34 martin Exp $
L_TARGET := libdrm.a L_TARGET := libdrm.a

View file

@ -211,7 +211,7 @@ static int i810_unmap_buffer(drm_buf_t *buf)
if(buf_priv->currently_mapped != I810_BUF_MAPPED) return -EINVAL; if(buf_priv->currently_mapped != I810_BUF_MAPPED) return -EINVAL;
down(&current->mm->mmap_sem); down(&current->mm->mmap_sem);
retcode = do_munmap((unsigned long)buf_priv->virtual, retcode = do_munmap(current->mm, (unsigned long)buf_priv->virtual,
(size_t) buf->total); (size_t) buf->total);
buf_priv->currently_mapped = I810_BUF_UNMAPPED; buf_priv->currently_mapped = I810_BUF_UNMAPPED;
buf_priv->virtual = 0; buf_priv->virtual = 0;

View file

@ -369,6 +369,13 @@ int r128_init(void)
#ifdef DRM_AGP #ifdef DRM_AGP
dev->agp = drm_agp_init(); dev->agp = drm_agp_init();
if (dev->agp == NULL) {
DRM_ERROR("Cannot initialize agpgart module.\n");
drm_proc_cleanup();
misc_deregister(&r128_misc);
r128_takedown(dev);
return -ENOMEM;
}
#ifdef CONFIG_MTRR #ifdef CONFIG_MTRR
dev->agp->agp_mtrr = mtrr_add(dev->agp->agp_info.aper_base, dev->agp->agp_mtrr = mtrr_add(dev->agp->agp_info.aper_base,

View file

@ -9,7 +9,7 @@
# Note 2! The CFLAGS definitions are now inherited from the # Note 2! The CFLAGS definitions are now inherited from the
# parent makes.. # parent makes..
# #
# $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/Makefile.kernel,v 1.5 2000/02/14 06:27:25 martin Exp $ # $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/Makefile.kernel,v 1.6 2000/06/17 00:03:34 martin Exp $
L_TARGET := libdrm.a L_TARGET := libdrm.a

View file

@ -211,7 +211,7 @@ static int i810_unmap_buffer(drm_buf_t *buf)
if(buf_priv->currently_mapped != I810_BUF_MAPPED) return -EINVAL; if(buf_priv->currently_mapped != I810_BUF_MAPPED) return -EINVAL;
down(&current->mm->mmap_sem); down(&current->mm->mmap_sem);
retcode = do_munmap((unsigned long)buf_priv->virtual, retcode = do_munmap(current->mm, (unsigned long)buf_priv->virtual,
(size_t) buf->total); (size_t) buf->total);
buf_priv->currently_mapped = I810_BUF_UNMAPPED; buf_priv->currently_mapped = I810_BUF_UNMAPPED;
buf_priv->virtual = 0; buf_priv->virtual = 0;

View file

@ -572,10 +572,12 @@ int mga_dma_schedule(drm_device_t *dev, int locked)
{ {
drm_mga_private_t *dev_priv = (drm_mga_private_t *)dev->dev_private; drm_mga_private_t *dev_priv = (drm_mga_private_t *)dev->dev_private;
drm_device_dma_t *dma = dev->dma; drm_device_dma_t *dma = dev->dma;
int retval = 0;
if (test_and_set_bit(0, &dev->dma_flag)) { if (test_and_set_bit(0, &dev->dma_flag)) {
atomic_inc(&dma->total_missed_dma); atomic_inc(&dma->total_missed_dma);
return -EBUSY; retval = -EBUSY;
goto sch_out_wakeup;
} }
DRM_DEBUG("%s\n", __FUNCTION__); DRM_DEBUG("%s\n", __FUNCTION__);
@ -591,7 +593,8 @@ int mga_dma_schedule(drm_device_t *dev, int locked)
atomic_inc(&dma->total_missed_lock); atomic_inc(&dma->total_missed_lock);
clear_bit(0, &dev->dma_flag); clear_bit(0, &dev->dma_flag);
DRM_DEBUG("Not locked\n"); DRM_DEBUG("Not locked\n");
return -EBUSY; retval = -EBUSY;
goto sch_out_wakeup;
} }
DRM_DEBUG("I'm locked\n"); DRM_DEBUG("I'm locked\n");
@ -621,12 +624,12 @@ int mga_dma_schedule(drm_device_t *dev, int locked)
} }
} }
sch_out_wakeup:
if(test_bit(MGA_IN_FLUSH, &dev_priv->dispatch_status) && if(test_bit(MGA_IN_FLUSH, &dev_priv->dispatch_status) &&
dev_priv->next_prim->num_dwords == 0 &&
atomic_read(&dev_priv->pending_bufs) == 0) { atomic_read(&dev_priv->pending_bufs) == 0) {
/* Everything has been processed by the hardware */ /* Everything has been processed by the hardware */
clear_bit(MGA_IN_FLUSH, &dev_priv->dispatch_status); clear_bit(MGA_IN_FLUSH, &dev_priv->dispatch_status);
wake_up_interruptible(&dev_priv->flush_queue); wake_up_interruptible(&dev_priv->flush_queue);
} }
if(test_bit(MGA_IN_GETBUF, &dev_priv->dispatch_status) && if(test_bit(MGA_IN_GETBUF, &dev_priv->dispatch_status) &&
@ -641,7 +644,7 @@ int mga_dma_schedule(drm_device_t *dev, int locked)
} }
clear_bit(0, &dev->dma_flag); clear_bit(0, &dev->dma_flag);
return 0; return retval;
} }
static void mga_dma_service(int irq, void *device, struct pt_regs *regs) static void mga_dma_service(int irq, void *device, struct pt_regs *regs)
@ -956,11 +959,11 @@ static int mga_flush_queue(drm_device_t *dev)
} }
if(dev_priv->next_prim->num_dwords != 0) { if(dev_priv->next_prim->num_dwords != 0) {
set_bit(MGA_IN_FLUSH, &dev_priv->dispatch_status);
current->state = TASK_INTERRUPTIBLE; current->state = TASK_INTERRUPTIBLE;
add_wait_queue(&dev_priv->flush_queue, &entry); add_wait_queue(&dev_priv->flush_queue, &entry);
set_bit(MGA_IN_FLUSH, &dev_priv->dispatch_status);
mga_dma_schedule(dev, 0);
for (;;) { for (;;) {
mga_dma_schedule(dev, 0);
if (!test_bit(MGA_IN_FLUSH, if (!test_bit(MGA_IN_FLUSH,
&dev_priv->dispatch_status)) &dev_priv->dispatch_status))
break; break;
@ -1093,14 +1096,15 @@ int mga_flush_ioctl(struct inode *inode, struct file *filp,
} }
if(lock.flags & _DRM_LOCK_FLUSH || lock.flags & _DRM_LOCK_FLUSH_ALL) { if(lock.flags & _DRM_LOCK_FLUSH || lock.flags & _DRM_LOCK_FLUSH_ALL) {
drm_mga_prim_buf_t *temp_buf = drm_mga_prim_buf_t *temp_buf;
dev_priv->prim_bufs[dev_priv->current_prim_idx];
temp_buf = dev_priv->current_prim;
if(temp_buf && temp_buf->num_dwords) { if(temp_buf && temp_buf->num_dwords) {
set_bit(MGA_BUF_FORCE_FIRE, &temp_buf->buffer_status); set_bit(MGA_BUF_FORCE_FIRE, &temp_buf->buffer_status);
mga_advance_primary(dev); mga_advance_primary(dev);
mga_dma_schedule(dev, 1);
} }
mga_dma_schedule(dev, 1);
} }
if(lock.flags & _DRM_LOCK_QUIESCENT) { if(lock.flags & _DRM_LOCK_QUIESCENT) {
mga_flush_queue(dev); mga_flush_queue(dev);

View file

@ -546,7 +546,6 @@ static void mga_dma_dispatch_vertex(drm_device_t * dev, drm_buf_t * buf)
10 + 15 * MGA_NR_SAREA_CLIPRECTS); 10 + 15 * MGA_NR_SAREA_CLIPRECTS);
PRIM_OVERFLOW(dev, dev_priv, primary_needed); PRIM_OVERFLOW(dev, dev_priv, primary_needed);
mgaEmitState(dev_priv); mgaEmitState(dev_priv);
do { do {
if (i < sarea_priv->nbox) { if (i < sarea_priv->nbox) {
DRM_DEBUG("idx %d Emit box %d/%d:" DRM_DEBUG("idx %d Emit box %d/%d:"
@ -572,7 +571,6 @@ static void mga_dma_dispatch_vertex(drm_device_t * dev, drm_buf_t * buf)
PRIMADVANCE(dev_priv); PRIMADVANCE(dev_priv);
} while (++i < sarea_priv->nbox); } while (++i < sarea_priv->nbox);
} }
if (buf_priv->discard) { if (buf_priv->discard) {
if (buf_priv->dispatched == 1) if (buf_priv->dispatched == 1)
AGEBUF(dev_priv, buf_priv); AGEBUF(dev_priv, buf_priv);
@ -748,10 +746,15 @@ static void mga_dma_dispatch_swap(drm_device_t * dev)
DRM_DEBUG("%s\n", __FUNCTION__); DRM_DEBUG("%s\n", __FUNCTION__);
primary_needed = nbox * 5; primary_needed = nbox * 5;
primary_needed += 60; primary_needed += 65;
PRIM_OVERFLOW(dev, dev_priv, primary_needed); PRIM_OVERFLOW(dev, dev_priv, primary_needed);
PRIMGETPTR(dev_priv); PRIMGETPTR(dev_priv);
PRIMOUTREG(MGAREG_DMAPAD, 0);
PRIMOUTREG(MGAREG_DMAPAD, 0);
PRIMOUTREG(MGAREG_DWGSYNC, 0x7100);
PRIMOUTREG(MGAREG_DWGSYNC, 0x7000);
PRIMOUTREG(MGAREG_DSTORG, dev_priv->frontOffset); PRIMOUTREG(MGAREG_DSTORG, dev_priv->frontOffset);
PRIMOUTREG(MGAREG_MACCESS, dev_priv->mAccess); PRIMOUTREG(MGAREG_MACCESS, dev_priv->mAccess);
PRIMOUTREG(MGAREG_SRCORG, dev_priv->backOffset); PRIMOUTREG(MGAREG_SRCORG, dev_priv->backOffset);

View file

@ -369,6 +369,13 @@ int r128_init(void)
#ifdef DRM_AGP #ifdef DRM_AGP
dev->agp = drm_agp_init(); dev->agp = drm_agp_init();
if (dev->agp == NULL) {
DRM_ERROR("Cannot initialize agpgart module.\n");
drm_proc_cleanup();
misc_deregister(&r128_misc);
r128_takedown(dev);
return -ENOMEM;
}
#ifdef CONFIG_MTRR #ifdef CONFIG_MTRR
dev->agp->agp_mtrr = mtrr_add(dev->agp->agp_info.aper_base, dev->agp->agp_mtrr = mtrr_add(dev->agp->agp_info.aper_base,