summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2000-01-20 04:56:42 +0000
committerKeith Whitwell <keith@tungstengraphics.com>2000-01-20 04:56:42 +0000
commit3e69b2967e3f1c422db2671ffed2ad16d1125f42 (patch)
tree7a960e710932c017f28fbe389a903a6ce80ef56f
parent9cdbd34ae38cb1414302fd44885c7955c92493cc (diff)
debug commit for jeff
-rw-r--r--linux-core/i810_dma.c84
-rw-r--r--linux-core/i810_drv.c81
-rw-r--r--linux/Makefile.linux8
-rw-r--r--linux/agpsupport.c2
-rw-r--r--linux/i810_dma.c84
-rw-r--r--linux/i810_drv.c81
-rw-r--r--linux/memory.c5
7 files changed, 116 insertions, 229 deletions
diff --git a/linux-core/i810_dma.c b/linux-core/i810_dma.c
index 11249536..85496c44 100644
--- a/linux-core/i810_dma.c
+++ b/linux-core/i810_dma.c
@@ -32,19 +32,19 @@
#define __NO_VERSION__
#include "drmP.h"
-#include "mga_drv.h"
+#include "i810_drv.h"
#include <linux/interrupt.h> /* For task queue support */
-#define MGA_REG(reg) 0 /* for now */
-#define MGA_BASE(reg) ((unsigned long) \
- dev->maplist[MGA_REG(reg)]->handle)
-#define MGA_ADDR(reg) (MGA_BASE(reg) + MGA_OFF(reg))
-#define MGA_DEREF(reg) *(__volatile__ int *)MGA_ADDR(reg)
-#define MGA_READ(reg) MGA_DEREF(reg)
-#define MGA_WRITE(reg,val) do { MGA_DEREF(reg) = val; } while (0)
+#define I810_REG(reg) 0 /* for now */
+#define I810_BASE(reg) ((unsigned long) \
+ dev->maplist[I810_REG(reg)]->handle)
+#define I810_ADDR(reg) (I810_BASE(reg) + I810_OFF(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)
-typedef _mga_primary_buffer {
+typedef _i810_primary_buffer {
u32 *head;
u32 *dma_ptr;
u8 tempIndex[4];
@@ -52,9 +52,9 @@ typedef _mga_primary_buffer {
int num_dwords;
int max_dwords;
unsigned long phys_head;
-} mgaPrimBuf;
+} i810PrimBuf;
-static mgaPrimBuf buffer;
+static i810PrimBuf buffer;
typedef enum {
TT_GENERAL,
TT_BLIT,
@@ -83,7 +83,7 @@ buffer.num_dwords += 5; \
#define CHECK_OVERFLOW(length) do { \
if((buffer.max_dwords - buffer.num_dwords) < length) { \
- mga_prim_overflow(); \
+ i810_prim_overflow(); \
} \
}while(0)
@@ -96,14 +96,14 @@ static inline void i810_dma_dispatch(drm_device_t *dev, unsigned long address,
int use_agp = PDEA_pagpxfer_enable;
CHECK_OVERFLOW(10);
- DMAOUTREG(MGAREG_DMAPAD, 0);
- DMAOUTREG(MGAREG_DMAPAD, 0);
- DMAOUTREG(MGAREG_SECADDRESS, address | transferType);
- DMAOUTREG(MGAREG_SECEND, (address + length) | use_agp);
- DMAOUTREG(MGAREG_DMAPAD, 0);
- DMAOUTREG(MGAREG_DMAPAD, 0);
- DMAOUTREG(MGAREG_DWGSYNC, 0);
- DMAOUTREG(MGAREG_SOFTRAP, 0);
+ DMAOUTREG(I810REG_DMAPAD, 0);
+ DMAOUTREG(I810REG_DMAPAD, 0);
+ DMAOUTREG(I810REG_SECADDRESS, address | transferType);
+ DMAOUTREG(I810REG_SECEND, (address + length) | use_agp);
+ DMAOUTREG(I810REG_DMAPAD, 0);
+ DMAOUTREG(I810REG_DMAPAD, 0);
+ DMAOUTREG(I810REG_DWGSYNC, 0);
+ DMAOUTREG(I810REG_SOFTRAP, 0);
/* Needs to write out to PRIMEND */
}
@@ -159,7 +159,7 @@ static void i810_dma_service(int irq, void *device, struct pt_regs *regs)
GAMMA_WRITE(GAMMA_GDELAYTIMER, 0xc350/2); /* 0x05S */
GAMMA_WRITE(GAMMA_GCOMMANDINTFLAGS, 8);
GAMMA_WRITE(GAMMA_GINTFLAGS, 0x2001);
- if (mga_dma_is_ready(dev)) {
+ if (i810_dma_is_ready(dev)) {
/* Free previous buffer */
if (test_and_set_bit(0, &dev->dma_flag)) {
atomic_inc(&dma->total_missed_free);
@@ -227,7 +227,7 @@ static int i810_do_dma(drm_device_t *dev, int locked)
return 0;
}
- if (!mga_dma_is_ready(dev)) {
+ if (!i810_dma_is_ready(dev)) {
clear_bit(0, &dev->dma_flag);
return -EBUSY;
}
@@ -273,7 +273,7 @@ static int i810_do_dma(drm_device_t *dev, int locked)
buf->time_dispatched = get_cycles();
#endif
- mga_dma_dispatch(dev, address, length);
+ i810_dma_dispatch(dev, address, length);
drm_free_buffer(dev, dma->this_buffer);
dma->this_buffer = buf;
@@ -346,14 +346,14 @@ again:
or the DMA engine wasn't ready. Try
again. */
atomic_inc(&dma->total_tried);
- if (!(retcode = mga_do_dma(dev, locked))) {
+ if (!(retcode = i810_do_dma(dev, locked))) {
atomic_inc(&dma->total_hit);
++processed;
}
} else {
do {
next = drm_select_queue(dev,
- mga_dma_schedule_timer_wrapper);
+ i810_dma_schedule_timer_wrapper);
if (next >= 0) {
q = dev->queuelist[next];
buf = drm_waitlist_get(&q->waitlist);
@@ -366,7 +366,7 @@ again:
}
} while (next >= 0 && !dma->next_buffer);
if (dma->next_buffer) {
- if (!(retcode = mga_do_dma(dev, locked))) {
+ if (!(retcode = i810_do_dma(dev, locked))) {
++processed;
}
}
@@ -375,9 +375,9 @@ again:
if (--expire) {
if (missed != atomic_read(&dma->total_missed_sched)) {
atomic_inc(&dma->total_lost);
- if (mga_dma_is_ready(dev)) goto again;
+ if (i810_dma_is_ready(dev)) goto again;
}
- if (processed && mga_dma_is_ready(dev)) {
+ if (processed && i810_dma_is_ready(dev)) {
atomic_inc(&dma->total_lost);
processed = 0;
goto again;
@@ -506,7 +506,7 @@ static int i810_dma_priority(drm_device_t *dev, drm_dma_t *d)
buf->time_queued = get_cycles();
buf->time_dispatched = buf->time_queued;
#endif
- mga_dma_dispatch(dev, address, length);
+ i810_dma_dispatch(dev, address, length);
atomic_add(length, &dma->total_bytes);
atomic_inc(&dma->total_dmas);
@@ -519,7 +519,7 @@ static int i810_dma_priority(drm_device_t *dev, drm_dma_t *d)
cleanup:
if (last_buf) {
- mga_dma_ready(dev);
+ i810_dma_ready(dev);
drm_free_buffer(dev, last_buf);
}
@@ -551,7 +551,7 @@ static int i810_dma_send_buffers(drm_device_t *dev, drm_dma_t *d)
return retcode;
}
- mga_dma_schedule(dev, 0);
+ i810_dma_schedule(dev, 0);
if (d->flags & _DRM_DMA_BLOCK) {
DRM_DEBUG("%d waiting\n", current->pid);
@@ -621,9 +621,9 @@ int i810_dma(struct inode *inode, struct file *filp, unsigned int cmd,
if (d.send_count) {
if (d.flags & _DRM_DMA_PRIORITY)
- retcode = mga_dma_priority(dev, &d);
+ retcode = i810_dma_priority(dev, &d);
else
- retcode = mga_dma_send_buffers(dev, &d);
+ retcode = i810_dma_send_buffers(dev, &d);
}
d.granted_count = 0;
@@ -665,16 +665,16 @@ int i810_irq_install(drm_device_t *dev, int irq)
dev->tq.next = NULL;
dev->tq.sync = 0;
- dev->tq.routine = mga_dma_schedule_tq_wrapper;
+ dev->tq.routine = i810_dma_schedule_tq_wrapper;
dev->tq.data = dev;
/* Before installing handler */
- MGA_WRITE(MGAREG_IEN, 0);
+ I810_WRITE(I810REG_IEN, 0);
/* Install handler */
if ((retcode = request_irq(dev->irq,
- mga_dma_service,
+ i810_dma_service,
0,
dev->devname,
dev))) {
@@ -685,7 +685,7 @@ int i810_irq_install(drm_device_t *dev, int irq)
}
/* After installing handler */
- MGA_WRITE(MGAREG_IEN, 0x00000001);
+ I810_WRITE(I810REG_IEN, 0x00000001);
return 0;
}
@@ -702,7 +702,7 @@ int i810_irq_uninstall(drm_device_t *dev)
DRM_DEBUG("%d\n", irq);
- MGA_WRITE(MGAREG_IEN, 0);
+ I810_WRITE(I810REG_IEN, 0);
free_irq(irq, dev);
return 0;
@@ -721,11 +721,11 @@ int i810_control(struct inode *inode, struct file *filp, unsigned int cmd,
switch (ctl.func) {
case DRM_INST_HANDLER:
- if ((retcode = mga_irq_install(dev, ctl.irq)))
+ if ((retcode = i810_irq_install(dev, ctl.irq)))
return retcode;
break;
case DRM_UNINST_HANDLER:
- if ((retcode = mga_irq_uninstall(dev)))
+ if ((retcode = i810_irq_uninstall(dev)))
return retcode;
break;
default:
@@ -812,9 +812,9 @@ int i810_lock(struct inode *inode, struct file *filp, unsigned int cmd,
if (!ret) {
if (lock.flags & _DRM_LOCK_READY)
- mga_dma_ready(dev);
+ i810_dma_ready(dev);
if (lock.flags & _DRM_LOCK_QUIESCENT)
- mga_dma_quiescent(dev);
+ i810_dma_quiescent(dev);
}
DRM_DEBUG("%d %s\n", lock.context, ret ? "interrupted" : "has lock");
diff --git a/linux-core/i810_drv.c b/linux-core/i810_drv.c
index f93c4ca0..20c0d571 100644
--- a/linux-core/i810_drv.c
+++ b/linux-core/i810_drv.c
@@ -37,7 +37,7 @@ EXPORT_SYMBOL(i810_init);
EXPORT_SYMBOL(i810_cleanup);
#define I810_NAME "i810"
-#define I810_DESC "Matrox g200/g400"
+#define I810_DESC "Intel i810"
#define I810_DATE "19991213"
#define I810_MAJOR 0
#define I810_MINOR 0
@@ -71,14 +71,19 @@ static drm_ioctl_desc_t i810_ioctls[] = {
[DRM_IOCTL_NR(DRM_IOCTL_SET_UNIQUE)] = { drm_setunique, 1, 1 },
[DRM_IOCTL_NR(DRM_IOCTL_BLOCK)] = { drm_block, 1, 1 },
[DRM_IOCTL_NR(DRM_IOCTL_UNBLOCK)] = { drm_unblock, 1, 1 },
+#if 0
[DRM_IOCTL_NR(DRM_IOCTL_CONTROL)] = { i810_control, 1, 1 },
+#endif
[DRM_IOCTL_NR(DRM_IOCTL_AUTH_MAGIC)] = { drm_authmagic, 1, 1 },
[DRM_IOCTL_NR(DRM_IOCTL_ADD_MAP)] = { drm_addmap, 1, 1 },
+
+#if 0
[DRM_IOCTL_NR(DRM_IOCTL_ADD_BUFS)] = { i810_addbufs, 1, 1 },
[DRM_IOCTL_NR(DRM_IOCTL_MARK_BUFS)] = { i810_markbufs, 1, 1 },
[DRM_IOCTL_NR(DRM_IOCTL_INFO_BUFS)] = { i810_infobufs, 1, 0 },
[DRM_IOCTL_NR(DRM_IOCTL_MAP_BUFS)] = { i810_mapbufs, 1, 0 },
[DRM_IOCTL_NR(DRM_IOCTL_FREE_BUFS)] = { i810_freebufs, 1, 0 },
+#endif
[DRM_IOCTL_NR(DRM_IOCTL_ADD_CTX)] = { i810_addctx, 1, 1 },
[DRM_IOCTL_NR(DRM_IOCTL_RM_CTX)] = { i810_rmctx, 1, 1 },
@@ -99,7 +104,7 @@ static drm_ioctl_desc_t i810_ioctls[] = {
[DRM_IOCTL_NR(DRM_IOCTL_AGP_ACQUIRE)] = {drm_agp_acquire, 1, 1},
[DRM_IOCTL_NR(DRM_IOCTL_AGP_RELEASE)] = {drm_agp_release, 1, 1},
[DRM_IOCTL_NR(DRM_IOCTL_AGP_ENABLE)] = {drm_agp_enable, 1, 1},
- [DRM_IOCTL_NR(DRM_IOCTL_AGP_INFO)] = {drm_agp_info, 1, 1},
+ [DRM_IOCTL_NR(DRM_IOCTL_AGP_INFO)] = {drm_agp_info, 1, 0},
[DRM_IOCTL_NR(DRM_IOCTL_AGP_ALLOC)] = {drm_agp_alloc, 1, 1},
[DRM_IOCTL_NR(DRM_IOCTL_AGP_FREE)] = {drm_agp_free, 1, 1},
[DRM_IOCTL_NR(DRM_IOCTL_AGP_BIND)] = {drm_agp_unbind, 1, 1},
@@ -228,7 +233,7 @@ static int i810_takedown(drm_device_t *dev)
DRM_DEBUG("\n");
- if (dev->irq) i810_irq_uninstall(dev);
+/* if (dev->irq) i810_irq_uninstall(dev); */
down(&dev->struct_sem);
del_timer(&dev->timer);
@@ -552,33 +557,7 @@ int i810_lock(struct inode *inode, struct file *filp, unsigned int cmd,
lock.context, current->pid, dev->lock.hw_lock->lock,
lock.flags);
-#if 0
- /* dev->queue_count == 0 right now for
- i810. FIXME? */
- if (lock.context < 0 || lock.context >= dev->queue_count)
- return -EINVAL;
-#endif
-
if (!ret) {
-#if 0
- if (_DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock)
- != lock.context) {
- long j = jiffies - dev->lock.lock_time;
-
- if (lock.context == i810_res_ctx.handle &&
- j >= 0 && j < DRM_LOCK_SLICE) {
- /* Can't take lock if we just had it and
- there is contention. */
- DRM_DEBUG("%d (pid %d) delayed j=%d dev=%d jiffies=%d\n",
- lock.context, current->pid, j,
- dev->lock.lock_time, jiffies);
- current->state = TASK_INTERRUPTIBLE;
- current->policy |= SCHED_YIELD;
- schedule_timeout(DRM_LOCK_SLICE-j);
- DRM_DEBUG("jiffies=%d\n", jiffies);
- }
- }
-#endif
add_wait_queue(&dev->lock.lock_queue, &entry);
for (;;) {
if (!dev->lock.hw_lock) {
@@ -597,9 +576,7 @@ int i810_lock(struct inode *inode, struct file *filp, unsigned int cmd,
/* Contention */
atomic_inc(&dev->total_sleeps);
current->state = TASK_INTERRUPTIBLE;
-#if 1
current->policy |= SCHED_YIELD;
-#endif
schedule();
if (signal_pending(current)) {
ret = -ERESTARTSYS;
@@ -610,58 +587,20 @@ int i810_lock(struct inode *inode, struct file *filp, unsigned int cmd,
remove_wait_queue(&dev->lock.lock_queue, &entry);
}
-#if 0
- if (!ret && dev->last_context != lock.context &&
- lock.context != i810_res_ctx.handle &&
- dev->last_context != i810_res_ctx.handle) {
- add_wait_queue(&dev->context_wait, &entry);
- current->state = TASK_INTERRUPTIBLE;
- /* PRE: dev->last_context != lock.context */
- i810_context_switch(dev, dev->last_context, lock.context);
- /* POST: we will wait for the context
- switch and will dispatch on a later call
- when dev->last_context == lock.context
- NOTE WE HOLD THE LOCK THROUGHOUT THIS
- TIME! */
- current->policy |= SCHED_YIELD;
- schedule();
- current->state = TASK_RUNNING;
- remove_wait_queue(&dev->context_wait, &entry);
- if (signal_pending(current)) {
- ret = -EINTR;
- } else if (dev->last_context != lock.context) {
- DRM_ERROR("Context mismatch: %d %d\n",
- dev->last_context, lock.context);
- }
- }
-#endif
-
if (!ret) {
if (lock.flags & _DRM_LOCK_READY) {
/* Wait for space in DMA/FIFO */
}
if (lock.flags & _DRM_LOCK_QUIESCENT) {
/* Make hardware quiescent */
-#if 0
- i810_quiescent(dev);
-#endif
}
}
-#if 0
- DRM_ERROR("pid = %5d, old counter = %5ld\n",
- current->pid, current->counter);
-#endif
if (lock.context != i810_res_ctx.handle) {
current->counter = 5;
current->priority = DEF_PRIORITY/4;
}
-#if 0
- while (current->counter > 25)
- current->counter >>= 1; /* decrease time slice */
- DRM_ERROR("pid = %5d, new counter = %5ld\n",
- current->pid, current->counter);
-#endif
+
DRM_DEBUG("%d %s\n", lock.context, ret ? "interrupted" : "has lock");
#if DRM_DMA_HISTOGRAM
@@ -694,7 +633,7 @@ int i810_unlock(struct inode *inode, struct file *filp, unsigned int cmd,
if (_DRM_LOCK_IS_CONT(dev->lock.hw_lock->lock))
atomic_inc(&dev->total_contends);
drm_lock_transfer(dev, &dev->lock.hw_lock->lock, DRM_KERNEL_CONTEXT);
- i810_dma_schedule(dev, 1);
+/* i810_dma_schedule(dev, 1); */
if (!dev->context_flag) {
if (drm_lock_free(dev, &dev->lock.hw_lock->lock,
DRM_KERNEL_CONTEXT)) {
diff --git a/linux/Makefile.linux b/linux/Makefile.linux
index 1dcddccf..85624020 100644
--- a/linux/Makefile.linux
+++ b/linux/Makefile.linux
@@ -56,7 +56,7 @@ MODVERSIONS := $(shell \
# **** End of SMP/MODVERSIONS detection
-MODS= gamma.o tdfx.o mga.o r128.o
+MODS= gamma.o tdfx.o mga.o r128.o i810.o
LIBS= libdrm.a
PROGS= drmstat
@@ -77,6 +77,9 @@ MGAHEADERS= mga_drv.h $(DRMHEADERS)
R128OBJS= r128_drv.o r128_context.o
R128HEADERS= r128_drv.h $(DRMHEADERS)
+I810OBJS= i810_drv.o i810_context.o
+I810HEADERS= i810_drv.h $(DRMHEADERS)
+
PROGOBJS= drmstat.po xf86drm.po xf86drmHash.po xf86drmRandom.po sigio.po
PROGHEADERS= xf86drm.h $(DRMHEADERS)
@@ -121,6 +124,9 @@ mga.o: $(MGAOBJS) $(LIBS)
r128.o: $(R128OBJS) $(LIBS)
$(LD) -r $^ -o $@
+i810.o: $(I810OBJS) $(LIBS)
+ $(LD) -r $^ -o $@
+
drmstat: $(PROGOBJS)
$(CC) $(PRGCFLAGS) $^ $(PRGLIBS) -o $@
diff --git a/linux/agpsupport.c b/linux/agpsupport.c
index 9497e2ae..0e25c615 100644
--- a/linux/agpsupport.c
+++ b/linux/agpsupport.c
@@ -269,7 +269,7 @@ drm_agp_head_t *drm_agp_init(void)
*fill->f = (drm_agp_func_u)get_module_symbol(NULL, n);
#endif
*fill->f = (drm_agp_func_u)get_module_symbol(NULL, n);
- DRM_DEBUG("%s resolves to 0x%08lx\n", n, (*fill->f).address);
+ printk("%s resolves to 0x%08lx\n", n, (*fill->f).address);
if (!(*fill->f).address) agp_available = 0;
}
diff --git a/linux/i810_dma.c b/linux/i810_dma.c
index 11249536..85496c44 100644
--- a/linux/i810_dma.c
+++ b/linux/i810_dma.c
@@ -32,19 +32,19 @@
#define __NO_VERSION__
#include "drmP.h"
-#include "mga_drv.h"
+#include "i810_drv.h"
#include <linux/interrupt.h> /* For task queue support */
-#define MGA_REG(reg) 0 /* for now */
-#define MGA_BASE(reg) ((unsigned long) \
- dev->maplist[MGA_REG(reg)]->handle)
-#define MGA_ADDR(reg) (MGA_BASE(reg) + MGA_OFF(reg))
-#define MGA_DEREF(reg) *(__volatile__ int *)MGA_ADDR(reg)
-#define MGA_READ(reg) MGA_DEREF(reg)
-#define MGA_WRITE(reg,val) do { MGA_DEREF(reg) = val; } while (0)
+#define I810_REG(reg) 0 /* for now */
+#define I810_BASE(reg) ((unsigned long) \
+ dev->maplist[I810_REG(reg)]->handle)
+#define I810_ADDR(reg) (I810_BASE(reg) + I810_OFF(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)
-typedef _mga_primary_buffer {
+typedef _i810_primary_buffer {
u32 *head;
u32 *dma_ptr;
u8 tempIndex[4];
@@ -52,9 +52,9 @@ typedef _mga_primary_buffer {
int num_dwords;
int max_dwords;
unsigned long phys_head;
-} mgaPrimBuf;
+} i810PrimBuf;
-static mgaPrimBuf buffer;
+static i810PrimBuf buffer;
typedef enum {
TT_GENERAL,
TT_BLIT,
@@ -83,7 +83,7 @@ buffer.num_dwords += 5; \
#define CHECK_OVERFLOW(length) do { \
if((buffer.max_dwords - buffer.num_dwords) < length) { \
- mga_prim_overflow(); \
+ i810_prim_overflow(); \
} \
}while(0)
@@ -96,14 +96,14 @@ static inline void i810_dma_dispatch(drm_device_t *dev, unsigned long address,
int use_agp = PDEA_pagpxfer_enable;
CHECK_OVERFLOW(10);
- DMAOUTREG(MGAREG_DMAPAD, 0);
- DMAOUTREG(MGAREG_DMAPAD, 0);
- DMAOUTREG(MGAREG_SECADDRESS, address | transferType);
- DMAOUTREG(MGAREG_SECEND, (address + length) | use_agp);
- DMAOUTREG(MGAREG_DMAPAD, 0);
- DMAOUTREG(MGAREG_DMAPAD, 0);
- DMAOUTREG(MGAREG_DWGSYNC, 0);
- DMAOUTREG(MGAREG_SOFTRAP, 0);
+ DMAOUTREG(I810REG_DMAPAD, 0);
+ DMAOUTREG(I810REG_DMAPAD, 0);
+ DMAOUTREG(I810REG_SECADDRESS, address | transferType);
+ DMAOUTREG(I810REG_SECEND, (address + length) | use_agp);
+ DMAOUTREG(I810REG_DMAPAD, 0);
+ DMAOUTREG(I810REG_DMAPAD, 0);
+ DMAOUTREG(I810REG_DWGSYNC, 0);
+ DMAOUTREG(I810REG_SOFTRAP, 0);
/* Needs to write out to PRIMEND */
}
@@ -159,7 +159,7 @@ static void i810_dma_service(int irq, void *device, struct pt_regs *regs)
GAMMA_WRITE(GAMMA_GDELAYTIMER, 0xc350/2); /* 0x05S */
GAMMA_WRITE(GAMMA_GCOMMANDINTFLAGS, 8);
GAMMA_WRITE(GAMMA_GINTFLAGS, 0x2001);
- if (mga_dma_is_ready(dev)) {
+ if (i810_dma_is_ready(dev)) {
/* Free previous buffer */
if (test_and_set_bit(0, &dev->dma_flag)) {
atomic_inc(&dma->total_missed_free);
@@ -227,7 +227,7 @@ static int i810_do_dma(drm_device_t *dev, int locked)
return 0;
}
- if (!mga_dma_is_ready(dev)) {
+ if (!i810_dma_is_ready(dev)) {
clear_bit(0, &dev->dma_flag);
return -EBUSY;
}
@@ -273,7 +273,7 @@ static int i810_do_dma(drm_device_t *dev, int locked)
buf->time_dispatched = get_cycles();
#endif
- mga_dma_dispatch(dev, address, length);
+ i810_dma_dispatch(dev, address, length);
drm_free_buffer(dev, dma->this_buffer);
dma->this_buffer = buf;
@@ -346,14 +346,14 @@ again:
or the DMA engine wasn't ready. Try
again. */
atomic_inc(&dma->total_tried);
- if (!(retcode = mga_do_dma(dev, locked))) {
+ if (!(retcode = i810_do_dma(dev, locked))) {
atomic_inc(&dma->total_hit);
++processed;
}
} else {
do {
next = drm_select_queue(dev,
- mga_dma_schedule_timer_wrapper);
+ i810_dma_schedule_timer_wrapper);
if (next >= 0) {
q = dev->queuelist[next];
buf = drm_waitlist_get(&q->waitlist);
@@ -366,7 +366,7 @@ again:
}
} while (next >= 0 && !dma->next_buffer);
if (dma->next_buffer) {
- if (!(retcode = mga_do_dma(dev, locked))) {
+ if (!(retcode = i810_do_dma(dev, locked))) {
++processed;
}
}
@@ -375,9 +375,9 @@ again:
if (--expire) {
if (missed != atomic_read(&dma->total_missed_sched)) {
atomic_inc(&dma->total_lost);
- if (mga_dma_is_ready(dev)) goto again;
+ if (i810_dma_is_ready(dev)) goto again;
}
- if (processed && mga_dma_is_ready(dev)) {
+ if (processed && i810_dma_is_ready(dev)) {
atomic_inc(&dma->total_lost);
processed = 0;
goto again;
@@ -506,7 +506,7 @@ static int i810_dma_priority(drm_device_t *dev, drm_dma_t *d)
buf->time_queued = get_cycles();
buf->time_dispatched = buf->time_queued;
#endif
- mga_dma_dispatch(dev, address, length);
+ i810_dma_dispatch(dev, address, length);
atomic_add(length, &dma->total_bytes);
atomic_inc(&dma->total_dmas);
@@ -519,7 +519,7 @@ static int i810_dma_priority(drm_device_t *dev, drm_dma_t *d)
cleanup:
if (last_buf) {
- mga_dma_ready(dev);
+ i810_dma_ready(dev);
drm_free_buffer(dev, last_buf);
}
@@ -551,7 +551,7 @@ static int i810_dma_send_buffers(drm_device_t *dev, drm_dma_t *d)
return retcode;
}
- mga_dma_schedule(dev, 0);
+ i810_dma_schedule(dev, 0);
if (d->flags & _DRM_DMA_BLOCK) {
DRM_DEBUG("%d waiting\n", current->pid);
@@ -621,9 +621,9 @@ int i810_dma(struct inode *inode, struct file *filp, unsigned int cmd,
if (d.send_count) {
if (d.flags & _DRM_DMA_PRIORITY)
- retcode = mga_dma_priority(dev, &d);
+ retcode = i810_dma_priority(dev, &d);
else
- retcode = mga_dma_send_buffers(dev, &d);
+ retcode = i810_dma_send_buffers(dev, &d);
}
d.granted_count = 0;
@@ -665,16 +665,16 @@ int i810_irq_install(drm_device_t *dev, int irq)
dev->tq.next = NULL;
dev->tq.sync = 0;
- dev->tq.routine = mga_dma_schedule_tq_wrapper;
+ dev->tq.routine = i810_dma_schedule_tq_wrapper;
dev->tq.data = dev;
/* Before installing handler */
- MGA_WRITE(MGAREG_IEN, 0);
+ I810_WRITE(I810REG_IEN, 0);
/* Install handler */
if ((retcode = request_irq(dev->irq,
- mga_dma_service,
+ i810_dma_service,
0,
dev->devname,
dev))) {
@@ -685,7 +685,7 @@ int i810_irq_install(drm_device_t *dev, int irq)
}
/* After installing handler */
- MGA_WRITE(MGAREG_IEN, 0x00000001);
+ I810_WRITE(I810REG_IEN, 0x00000001);
return 0;
}
@@ -702,7 +702,7 @@ int i810_irq_uninstall(drm_device_t *dev)
DRM_DEBUG("%d\n", irq);
- MGA_WRITE(MGAREG_IEN, 0);
+ I810_WRITE(I810REG_IEN, 0);
free_irq(irq, dev);
return 0;
@@ -721,11 +721,11 @@ int i810_control(struct inode *inode, struct file *filp, unsigned int cmd,
switch (ctl.func) {
case DRM_INST_HANDLER:
- if ((retcode = mga_irq_install(dev, ctl.irq)))
+ if ((retcode = i810_irq_install(dev, ctl.irq)))
return retcode;
break;
case DRM_UNINST_HANDLER:
- if ((retcode = mga_irq_uninstall(dev)))
+ if ((retcode = i810_irq_uninstall(dev)))
return retcode;
break;
default:
@@ -812,9 +812,9 @@ int i810_lock(struct inode *inode, struct file *filp, unsigned int cmd,
if (!ret) {
if (lock.flags & _DRM_LOCK_READY)
- mga_dma_ready(dev);
+ i810_dma_ready(dev);
if (lock.flags & _DRM_LOCK_QUIESCENT)
- mga_dma_quiescent(dev);
+ i810_dma_quiescent(dev);
}
DRM_DEBUG("%d %s\n", lock.context, ret ? "interrupted" : "has lock");
diff --git a/linux/i810_drv.c b/linux/i810_drv.c
index f93c4ca0..20c0d571 100644
--- a/linux/i810_drv.c
+++ b/linux/i810_drv.c
@@ -37,7 +37,7 @@ EXPORT_SYMBOL(i810_init);
EXPORT_SYMBOL(i810_cleanup);
#define I810_NAME "i810"
-#define I810_DESC "Matrox g200/g400"
+#define I810_DESC "Intel i810"
#define I810_DATE "19991213"
#define I810_MAJOR 0
#define I810_MINOR 0
@@ -71,14 +71,19 @@ static drm_ioctl_desc_t i810_ioctls[] = {
[DRM_IOCTL_NR(DRM_IOCTL_SET_UNIQUE)] = { drm_setunique, 1, 1 },
[DRM_IOCTL_NR(DRM_IOCTL_BLOCK)] = { drm_block, 1, 1 },
[DRM_IOCTL_NR(DRM_IOCTL_UNBLOCK)] = { drm_unblock, 1, 1 },
+#if 0
[DRM_IOCTL_NR(DRM_IOCTL_CONTROL)] = { i810_control, 1, 1 },
+#endif
[DRM_IOCTL_NR(DRM_IOCTL_AUTH_MAGIC)] = { drm_authmagic, 1, 1 },
[DRM_IOCTL_NR(DRM_IOCTL_ADD_MAP)] = { drm_addmap, 1, 1 },
+
+#if 0
[DRM_IOCTL_NR(DRM_IOCTL_ADD_BUFS)] = { i810_addbufs, 1, 1 },
[DRM_IOCTL_NR(DRM_IOCTL_MARK_BUFS)] = { i810_markbufs, 1, 1 },
[DRM_IOCTL_NR(DRM_IOCTL_INFO_BUFS)] = { i810_infobufs, 1, 0 },
[DRM_IOCTL_NR(DRM_IOCTL_MAP_BUFS)] = { i810_mapbufs, 1, 0 },
[DRM_IOCTL_NR(DRM_IOCTL_FREE_BUFS)] = { i810_freebufs, 1, 0 },
+#endif
[DRM_IOCTL_NR(DRM_IOCTL_ADD_CTX)] = { i810_addctx, 1, 1 },
[DRM_IOCTL_NR(DRM_IOCTL_RM_CTX)] = { i810_rmctx, 1, 1 },
@@ -99,7 +104,7 @@ static drm_ioctl_desc_t i810_ioctls[] = {
[DRM_IOCTL_NR(DRM_IOCTL_AGP_ACQUIRE)] = {drm_agp_acquire, 1, 1},
[DRM_IOCTL_NR(DRM_IOCTL_AGP_RELEASE)] = {drm_agp_release, 1, 1},
[DRM_IOCTL_NR(DRM_IOCTL_AGP_ENABLE)] = {drm_agp_enable, 1, 1},
- [DRM_IOCTL_NR(DRM_IOCTL_AGP_INFO)] = {drm_agp_info, 1, 1},
+ [DRM_IOCTL_NR(DRM_IOCTL_AGP_INFO)] = {drm_agp_info, 1, 0},
[DRM_IOCTL_NR(DRM_IOCTL_AGP_ALLOC)] = {drm_agp_alloc, 1, 1},
[DRM_IOCTL_NR(DRM_IOCTL_AGP_FREE)] = {drm_agp_free, 1, 1},
[DRM_IOCTL_NR(DRM_IOCTL_AGP_BIND)] = {drm_agp_unbind, 1, 1},
@@ -228,7 +233,7 @@ static int i810_takedown(drm_device_t *dev)
DRM_DEBUG("\n");
- if (dev->irq) i810_irq_uninstall(dev);
+/* if (dev->irq) i810_irq_uninstall(dev); */
down(&dev->struct_sem);
del_timer(&dev->timer);
@@ -552,33 +557,7 @@ int i810_lock(struct inode *inode, struct file *filp, unsigned int cmd,
lock.context, current->pid, dev->lock.hw_lock->lock,
lock.flags);
-#if 0
- /* dev->queue_count == 0 right now for
- i810. FIXME? */
- if (lock.context < 0 || lock.context >= dev->queue_count)
- return -EINVAL;
-#endif
-
if (!ret) {
-#if 0
- if (_DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock)
- != lock.context) {
- long j = jiffies - dev->lock.lock_time;
-
- if (lock.context == i810_res_ctx.handle &&
- j >= 0 && j < DRM_LOCK_SLICE) {
- /* Can't take lock if we just had it and
- there is contention. */
- DRM_DEBUG("%d (pid %d) delayed j=%d dev=%d jiffies=%d\n",
- lock.context, current->pid, j,
- dev->lock.lock_time, jiffies);
- current->state = TASK_INTERRUPTIBLE;
- current->policy |= SCHED_YIELD;
- schedule_timeout(DRM_LOCK_SLICE-j);
- DRM_DEBUG("jiffies=%d\n", jiffies);
- }
- }
-#endif
add_wait_queue(&dev->lock.lock_queue, &entry);
for (;;) {
if (!dev->lock.hw_lock) {
@@ -597,9 +576,7 @@ int i810_lock(struct inode *inode, struct file *filp, unsigned int cmd,
/* Contention */
atomic_inc(&dev->total_sleeps);
current->state = TASK_INTERRUPTIBLE;
-#if 1
current->policy |= SCHED_YIELD;
-#endif
schedule();
if (signal_pending(current)) {
ret = -ERESTARTSYS;
@@ -610,58 +587,20 @@ int i810_lock(struct inode *inode, struct file *filp, unsigned int cmd,
remove_wait_queue(&dev->lock.lock_queue, &entry);
}
-#if 0
- if (!ret && dev->last_context != lock.context &&
- lock.context != i810_res_ctx.handle &&
- dev->last_context != i810_res_ctx.handle) {
- add_wait_queue(&dev->context_wait, &entry);
- current->state = TASK_INTERRUPTIBLE;
- /* PRE: dev->last_context != lock.context */
- i810_context_switch(dev, dev->last_context, lock.context);
- /* POST: we will wait for the context
- switch and will dispatch on a later call
- when dev->last_context == lock.context
- NOTE WE HOLD THE LOCK THROUGHOUT THIS
- TIME! */
- current->policy |= SCHED_YIELD;
- schedule();
- current->state = TASK_RUNNING;
- remove_wait_queue(&dev->context_wait, &entry);
- if (signal_pending(current)) {
- ret = -EINTR;
- } else if (dev->last_context != lock.context) {
- DRM_ERROR("Context mismatch: %d %d\n",
- dev->last_context, lock.context);
- }
- }
-#endif
-
if (!ret) {
if (lock.flags & _DRM_LOCK_READY) {
/* Wait for space in DMA/FIFO */
}
if (lock.flags & _DRM_LOCK_QUIESCENT) {
/* Make hardware quiescent */
-#if 0
- i810_quiescent(dev);
-#endif
}
}
-#if 0
- DRM_ERROR("pid = %5d, old counter = %5ld\n",
- current->pid, current->counter);
-#endif
if (lock.context != i810_res_ctx.handle) {
current->counter = 5;
current->priority = DEF_PRIORITY/4;
}
-#if 0
- while (current->counter > 25)
- current->counter >>= 1; /* decrease time slice */
- DRM_ERROR("pid = %5d, new counter = %5ld\n",
- current->pid, current->counter);
-#endif
+
DRM_DEBUG("%d %s\n", lock.context, ret ? "interrupted" : "has lock");
#if DRM_DMA_HISTOGRAM
@@ -694,7 +633,7 @@ int i810_unlock(struct inode *inode, struct file *filp, unsigned int cmd,
if (_DRM_LOCK_IS_CONT(dev->lock.hw_lock->lock))
atomic_inc(&dev->total_contends);
drm_lock_transfer(dev, &dev->lock.hw_lock->lock, DRM_KERNEL_CONTEXT);
- i810_dma_schedule(dev, 1);
+/* i810_dma_schedule(dev, 1); */
if (!dev->context_flag) {
if (drm_lock_free(dev, &dev->lock.hw_lock->lock,
DRM_KERNEL_CONTEXT)) {
diff --git a/linux/memory.c b/linux/memory.c
index b7579156..e9ac8b52 100644
--- a/linux/memory.c
+++ b/linux/memory.c
@@ -390,13 +390,15 @@ int drm_free_agp(agp_memory *handle, int pages)
int drm_bind_agp(agp_memory *handle, unsigned int start)
{
int retcode = -EINVAL;
-
+
+ printk("drm_bind_agp called\n");
if (!handle) {
DRM_MEM_ERROR(DRM_MEM_BOUNDAGP,
"Attempt to bind NULL AGP handle\n");
return retcode;
}
+ printk("drm_agp.bind_memory : %p\n", drm_agp.bind_memory);
if (drm_agp.bind_memory) {
if (!(retcode = (*drm_agp.bind_memory)(handle, start))) {
spin_lock(&drm_mem_lock);
@@ -404,6 +406,7 @@ int drm_bind_agp(agp_memory *handle, unsigned int start)
drm_mem_stats[DRM_MEM_BOUNDAGP].bytes_allocated
+= handle->page_count << PAGE_SHIFT;
spin_unlock(&drm_mem_lock);
+ printk("drm_agp.bind_memory: retcode %d\n", retcode);
return retcode;
}
}