diff options
author | Eric Anholt <anholt@freebsd.org> | 2003-04-24 19:09:55 +0000 |
---|---|---|
committer | Eric Anholt <anholt@freebsd.org> | 2003-04-24 19:09:55 +0000 |
commit | a147df879b3b850612222759c14f4142d2406e74 (patch) | |
tree | aea9241e04e3cefbe123228568bbe3b07d41e9eb /bsd | |
parent | d6a82ff9c160acbb7db5bee2cde45818d1e8548e (diff) |
Remove more gamma DMA infrastructure. Most of this code was copied straight
from linux, so it could be added back if some driver needed it in the
future.
Diffstat (limited to 'bsd')
-rw-r--r-- | bsd/drmP.h | 48 | ||||
-rw-r--r-- | bsd/drm_bufs.h | 36 | ||||
-rw-r--r-- | bsd/drm_context.h | 2 | ||||
-rw-r--r-- | bsd/drm_dma.h | 22 | ||||
-rw-r--r-- | bsd/drm_drv.h | 39 | ||||
-rw-r--r-- | bsd/drm_ioctl.h | 2 | ||||
-rw-r--r-- | bsd/drm_sysctl.h | 51 |
7 files changed, 3 insertions, 197 deletions
@@ -52,12 +52,6 @@ #ifndef __HAVE_DMA_IRQ #define __HAVE_DMA_IRQ 0 #endif -#ifndef __HAVE_DMA_WAITLIST -#define __HAVE_DMA_WAITLIST 0 -#endif -#ifndef __HAVE_DMA_FREELIST -#define __HAVE_DMA_FREELIST 0 -#endif #define DRM_DEBUG_CODE 0 /* Include debugging code (if > 1, then also include looping detection. */ @@ -159,12 +153,9 @@ typedef struct drm_buf { void *address; /* Address of buffer */ unsigned long bus_address; /* Bus address of buffer */ struct drm_buf *next; /* Kernel-only: used for free list */ - __volatile__ int waiting; /* On kernel DMA queue */ __volatile__ int pending; /* On hardware DMA queue */ - wait_queue_head_t dma_wait; /* Processes waiting */ DRMFILE filp; /* Unique identifier of holding process */ int context; /* Kernel queue for this buffer */ - int while_locked;/* Dispatch this buffer while locked */ enum { DRM_LIST_NONE = 0, DRM_LIST_FREE = 1, @@ -194,10 +185,8 @@ typedef struct drm_freelist { atomic_t count; /* Number of free buffers */ drm_buf_t *next; /* End pointer */ - wait_queue_head_t waiting; /* Processes waiting on free bufs */ int low_mark; /* Low water mark */ int high_mark; /* High water mark */ - atomic_t wfh; /* If waiting for high mark */ DRM_SPINTYPE lock; } drm_freelist_t; @@ -230,24 +219,6 @@ struct drm_file { struct drm_device *devXX; }; -typedef struct drm_queue { - atomic_t use_count; /* Outstanding uses (+1) */ - atomic_t finalization; /* Finalization in progress */ - atomic_t block_count; /* Count of processes waiting */ - atomic_t block_read; /* Queue blocked for reads */ - wait_queue_head_t read_queue; /* Processes waiting on block_read */ - atomic_t block_write; /* Queue blocked for writes */ - wait_queue_head_t write_queue; /* Processes waiting on block_write */ -#if 1 - atomic_t total_queued; /* Total queued statistic */ - atomic_t total_flushed;/* Total flushes statistic */ - atomic_t total_locks; /* Total locks statistics */ -#endif - drm_ctx_flags_t flags; /* Context preserving and 2D-only */ - drm_waitlist_t waitlist; /* Pending buffers */ - wait_queue_head_t flush_queue; /* Processes waiting until flush */ -} drm_queue_t; - typedef struct drm_lock_data { drm_hw_lock_t *hw_lock; /* Hardware lock */ DRMFILE filp; /* Unique identifier of holding process (NULL is kernel)*/ @@ -271,8 +242,6 @@ typedef struct drm_device_dma { /* DMA support */ drm_buf_t *this_buffer; /* Buffer being sent */ drm_buf_t *next_buffer; /* Selected buffer to send */ - drm_queue_t *next_queue; /* Queue from which buffer selected*/ - wait_queue_head_t waiting; /* Processes waiting on free bufs */ } drm_device_dma_t; #if __REALLY_HAVE_AGP @@ -366,7 +335,6 @@ struct drm_device { /* Memory management */ drm_map_list_t *maplist; /* Linked list of regions */ - int map_count; /* Number of mappable regions */ drm_local_map_t **context_sareas; int max_context; @@ -374,10 +342,6 @@ struct drm_device { drm_lock_data_t lock; /* Information on hardware lock */ /* DMA queues (contexts) */ - int queue_count; /* Number of active DMA queues */ - int queue_reserved; /* Number of reserved DMA queues */ - int queue_slots; /* Actual length of queuelist */ - drm_queue_t **queuelist; /* Vector of pointers to DMA queues */ drm_device_dma_t *dma; /* Optional pointer for DMA support */ /* Context support */ @@ -391,13 +355,8 @@ struct drm_device { #endif void *irqh; /* Handle from bus_setup_intr */ atomic_t context_flag; /* Context swapping flag */ - atomic_t interrupt_flag; /* Interruption handler flag */ - atomic_t dma_flag; /* DMA dispatch flag */ struct callout timer; /* Timer for delaying ctx switch */ - wait_queue_head_t context_wait; /* Processes waiting on ctx switch */ - int last_checked; /* Last context checked for DMA */ int last_context; /* Last current context */ - unsigned long last_switch; /* jiffies at last context switch */ #if __FreeBSD_version >= 400005 struct task task; #endif @@ -505,13 +464,6 @@ extern int DRM(waitlist_destroy)(drm_waitlist_t *bl); extern int DRM(waitlist_put)(drm_waitlist_t *bl, drm_buf_t *buf); extern drm_buf_t *DRM(waitlist_get)(drm_waitlist_t *bl); #endif -#if __HAVE_DMA_FREELIST -extern int DRM(freelist_create)(drm_freelist_t *bl, int count); -extern int DRM(freelist_destroy)(drm_freelist_t *bl); -extern int DRM(freelist_put)(drm_device_t *dev, drm_freelist_t *bl, - drm_buf_t *buf); -extern drm_buf_t *DRM(freelist_get)(drm_freelist_t *bl, int block); -#endif #endif /* __HAVE_DMA */ #if __HAVE_VBL_IRQ extern int DRM(vblank_wait)(drm_device_t *dev, unsigned int *vbl_seq); diff --git a/bsd/drm_bufs.h b/bsd/drm_bufs.h index 05e5eec9..af9e76f1 100644 --- a/bsd/drm_bufs.h +++ b/bsd/drm_bufs.h @@ -310,10 +310,6 @@ static void DRM(cleanup_buf_error)(drm_buf_entry_t *entry) sizeof(*entry->buflist), DRM_MEM_BUFS); -#if __HAVE_DMA_FREELIST - DRM(freelist_destroy)(&entry->freelist); -#endif - entry->buf_count = 0; } } @@ -390,9 +386,7 @@ static int DRM(addbufs_agp)(drm_device_t *dev, drm_buf_desc_t *request) buf->bus_address = agp_offset + offset; buf->address = (void *)(agp_offset + offset); buf->next = NULL; - buf->waiting = 0; buf->pending = 0; - buf->dma_wait = 0; buf->filp = NULL; buf->dev_priv_size = sizeof(DRIVER_BUF_PRIV_T); @@ -435,12 +429,6 @@ static int DRM(addbufs_agp)(drm_device_t *dev, drm_buf_desc_t *request) DRM_DEBUG( "dma->buf_count : %d\n", dma->buf_count ); DRM_DEBUG( "entry->buf_count : %d\n", entry->buf_count ); -#if __HAVE_DMA_FREELIST - DRM(freelist_create)( &entry->freelist, entry->buf_count ); - for ( i = 0 ; i < entry->buf_count ; i++ ) { - DRM(freelist_put)( dev, &entry->freelist, &entry->buflist[i] ); - } -#endif DRM_UNLOCK; request->count = entry->buf_count; @@ -476,9 +464,8 @@ static int DRM(addbufs_pci)(drm_device_t *dev, drm_buf_desc_t *request) order = DRM(order)(request->size); size = 1 << order; - DRM_DEBUG( "count=%d, size=%d (%d), order=%d, queue_count=%d\n", - request->count, request->size, size, - order, dev->queue_count ); + DRM_DEBUG( "count=%d, size=%d (%d), order=%d\n", + request->count, request->size, size, order ); if ( order < DRM_MIN_ORDER || order > DRM_MAX_ORDER ) return DRM_ERR(EINVAL); @@ -561,9 +548,7 @@ static int DRM(addbufs_pci)(drm_device_t *dev, drm_buf_desc_t *request) buf->offset = (dma->byte_count + byte_count + offset); buf->address = (void *)(page + offset); buf->next = NULL; - buf->waiting = 0; buf->pending = 0; - buf->dma_wait = 0; buf->filp = NULL; DRM_DEBUG( "buffer %d @ %p\n", entry->buf_count, buf->address ); @@ -593,12 +578,6 @@ static int DRM(addbufs_pci)(drm_device_t *dev, drm_buf_desc_t *request) dma->page_count += entry->seg_count << page_order; dma->byte_count += PAGE_SIZE * (entry->seg_count << page_order); -#if __HAVE_DMA_FREELIST - DRM(freelist_create)( &entry->freelist, entry->buf_count ); - for ( i = 0 ; i < entry->buf_count ; i++ ) { - DRM(freelist_put)( dev, &entry->freelist, &entry->buflist[i] ); - } -#endif DRM_UNLOCK; request->count = entry->buf_count; @@ -681,9 +660,7 @@ static int DRM(addbufs_sg)(drm_device_t *dev, drm_buf_desc_t *request) buf->bus_address = agp_offset + offset; buf->address = (void *)(agp_offset + offset + dev->sg->handle); buf->next = NULL; - buf->waiting = 0; buf->pending = 0; - buf->dma_wait = 0; buf->filp = NULL; buf->dev_priv_size = sizeof(DRIVER_BUF_PRIV_T); @@ -732,12 +709,6 @@ static int DRM(addbufs_sg)(drm_device_t *dev, drm_buf_desc_t *request) DRM_DEBUG( "dma->buf_count : %d\n", dma->buf_count ); DRM_DEBUG( "entry->buf_count : %d\n", entry->buf_count ); -#if __HAVE_DMA_FREELIST - DRM(freelist_create)( &entry->freelist, entry->buf_count ); - for ( i = 0 ; i < entry->buf_count ; i++ ) { - DRM(freelist_put)( dev, &entry->freelist, &entry->buflist[i] ); - } -#endif DRM_UNLOCK; request->count = entry->buf_count; @@ -763,9 +734,6 @@ int DRM(addbufs)( DRM_IOCTL_ARGS ) if (request.count < 0 || request.count > 4096) return DRM_ERR(EINVAL); - if (dev->queue_count) - return DRM_ERR(EBUSY); /* Not while in use */ - DRM_SPINLOCK(&dev->count_lock); if (dev->buf_use) { DRM_SPINUNLOCK(&dev->count_lock); diff --git a/bsd/drm_context.h b/bsd/drm_context.h index 2293a806..dabf5ca9 100644 --- a/bsd/drm_context.h +++ b/bsd/drm_context.h @@ -226,7 +226,6 @@ int DRM(context_switch)( drm_device_t *dev, int old, int new ) int DRM(context_switch_complete)( drm_device_t *dev, int new ) { dev->last_context = new; /* PRE/POST: This is the _only_ writer. */ - dev->last_switch = jiffies; if ( !_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) ) { DRM_ERROR( "Lock isn't held after context switch\n" ); @@ -236,7 +235,6 @@ int DRM(context_switch_complete)( drm_device_t *dev, int new ) when the kernel holds the lock, release that lock here. */ clear_bit( 0, &dev->context_flag ); - DRM_WAKEUP( (void *)&dev->context_wait ); return 0; } diff --git a/bsd/drm_dma.h b/bsd/drm_dma.h index 27ce05e3..238dca3e 100644 --- a/bsd/drm_dma.h +++ b/bsd/drm_dma.h @@ -98,9 +98,6 @@ void DRM(dma_takedown)(drm_device_t *dev) dma->bufs[i].buf_count * sizeof(*dma->bufs[0].buflist), DRM_MEM_BUFS); -#if __HAVE_DMA_FREELIST - DRM(freelist_destroy)(&dma->bufs[i].freelist); -#endif } } @@ -124,25 +121,9 @@ void DRM(free_buffer)(drm_device_t *dev, drm_buf_t *buf) { if (!buf) return; - buf->waiting = 0; buf->pending = 0; buf->filp = NULL; buf->used = 0; - - if ( buf->dma_wait ) { - wakeup( (void *)&buf->dma_wait ); - buf->dma_wait = 0; - } -#if __HAVE_DMA_FREELIST - else { - drm_device_dma_t *dma = dev->dma; - /* If processes are waiting, the last one - to wake will put the buffer on the free - list. If no processes are waiting, we - put the buffer on the freelist here. */ - DRM(freelist_put)(dev, &dma->bufs[buf->order].freelist, buf); - } -#endif } #if !__HAVE_DMA_RECLAIM @@ -191,11 +172,8 @@ int DRM(irq_install)( drm_device_t *dev, int irq ) DRM_DEBUG( "%s: irq=%d\n", __FUNCTION__, irq ); dev->context_flag = 0; - dev->interrupt_flag = 0; - dev->dma_flag = 0; dev->dma->next_buffer = NULL; - dev->dma->next_queue = NULL; dev->dma->this_buffer = NULL; #if __HAVE_DMA_IRQ_BH diff --git a/bsd/drm_drv.h b/bsd/drm_drv.h index f1184906..828f774b 100644 --- a/bsd/drm_drv.h +++ b/bsd/drm_drv.h @@ -62,9 +62,6 @@ #ifndef __HAVE_DMA_QUEUE #define __HAVE_DMA_QUEUE 0 #endif -#ifndef __HAVE_MULTIPLE_DMA_QUEUES -#define __HAVE_MULTIPLE_DMA_QUEUES 0 -#endif #ifndef __HAVE_DMA_SCHEDULE #define __HAVE_DMA_SCHEDULE 0 #endif @@ -478,27 +475,17 @@ static int DRM(setup)( drm_device_t *dev ) if(dev->maplist == NULL) return DRM_ERR(ENOMEM); memset(dev->maplist, 0, sizeof(*dev->maplist)); TAILQ_INIT(dev->maplist); - dev->map_count = 0; dev->lock.hw_lock = NULL; dev->lock.lock_queue = 0; - dev->queue_count = 0; - dev->queue_reserved = 0; - dev->queue_slots = 0; - dev->queuelist = NULL; dev->irq = 0; dev->context_flag = 0; - dev->interrupt_flag = 0; - dev->dma_flag = 0; dev->last_context = 0; - dev->last_switch = 0; - dev->last_checked = 0; #if __FreeBSD_version >= 500000 callout_init( &dev->timer, 1 ); #else callout_init( &dev->timer ); #endif - dev->context_wait = 0; #ifdef __FreeBSD__ dev->buf_sigio = NULL; @@ -633,25 +620,6 @@ static int DRM(takedown)( drm_device_t *dev ) dev->maplist = NULL; } -#if __HAVE_DMA_QUEUE || __HAVE_MULTIPLE_DMA_QUEUES - if ( dev->queuelist ) { - for ( i = 0 ; i < dev->queue_count ; i++ ) { - DRM(waitlist_destroy)( &dev->queuelist[i]->waitlist ); - if ( dev->queuelist[i] ) { - DRM(free)( dev->queuelist[i], - sizeof(*dev->queuelist[0]), - DRM_MEM_QUEUES ); - dev->queuelist[i] = NULL; - } - } - DRM(free)( dev->queuelist, - dev->queue_slots * sizeof(*dev->queuelist), - DRM_MEM_QUEUES ); - dev->queuelist = NULL; - } - dev->queue_count = 0; -#endif - #if __HAVE_DMA DRM(dma_takedown)( dev ); #endif @@ -1075,9 +1043,6 @@ int DRM(lock)( DRM_IOCTL_ARGS ) DRM_DEVICE; drm_lock_t lock; int ret = 0; -#if __HAVE_MULTIPLE_DMA_QUEUES - drm_queue_t *q; -#endif DRM_COPY_FROM_USER_IOCTL( lock, (drm_lock_t *)data, sizeof(lock) ); @@ -1094,10 +1059,6 @@ int DRM(lock)( DRM_IOCTL_ARGS ) #if __HAVE_DMA_QUEUE if ( lock.context < 0 ) return DRM_ERR(EINVAL); -#elif __HAVE_MULTIPLE_DMA_QUEUES - if ( lock.context < 0 || lock.context >= dev->queue_count ) - return DRM_ERR(EINVAL); - q = dev->queuelist[lock.context]; #endif if ( !ret ) { diff --git a/bsd/drm_ioctl.h b/bsd/drm_ioctl.h index 1e2771e9..3e4f8908 100644 --- a/bsd/drm_ioctl.h +++ b/bsd/drm_ioctl.h @@ -139,7 +139,7 @@ int DRM(getmap)( DRM_IOCTL_ARGS ) idx = map.offset; DRM_LOCK; - if (idx < 0 || idx >= dev->map_count) { + if (idx < 0) { DRM_UNLOCK; return DRM_ERR(EINVAL); } diff --git a/bsd/drm_sysctl.h b/bsd/drm_sysctl.h index 90922462..dd4ef1f9 100644 --- a/bsd/drm_sysctl.h +++ b/bsd/drm_sysctl.h @@ -9,7 +9,6 @@ static int DRM(name_info)DRM_SYSCTL_HANDLER_ARGS; static int DRM(vm_info)DRM_SYSCTL_HANDLER_ARGS; static int DRM(clients_info)DRM_SYSCTL_HANDLER_ARGS; -static int DRM(queues_info)DRM_SYSCTL_HANDLER_ARGS; static int DRM(bufs_info)DRM_SYSCTL_HANDLER_ARGS; struct DRM(sysctl_list) { @@ -20,7 +19,6 @@ struct DRM(sysctl_list) { { "mem", DRM(mem_info) }, { "vm", DRM(vm_info) }, { "clients", DRM(clients_info) }, - { "queues", DRM(queues_info) }, { "bufs", DRM(bufs_info) }, }; #define DRM_SYSCTL_ENTRIES (sizeof(DRM(sysctl_list))/sizeof(DRM(sysctl_list)[0])) @@ -164,55 +162,6 @@ static int DRM(vm_info)DRM_SYSCTL_HANDLER_ARGS } -static int DRM(_queues_info)DRM_SYSCTL_HANDLER_ARGS -{ - drm_device_t *dev = arg1; - int i; - drm_queue_t *q; - char buf[128]; - int error; - - DRM_SYSCTL_PRINT(" ctx/flags use fin" - " blk/rw/rwf wait flushed queued" - " locks\n\n"); - for (i = 0; i < dev->queue_count; i++) { - q = dev->queuelist[i]; - atomic_inc(&q->use_count); - DRM_SYSCTL_PRINT_RET(atomic_dec(&q->use_count), - "%5d/0x%03x %5d %5d" - " %5d/%c%c/%c%c%c %5d %10d %10d %10d\n", - i, - q->flags, - atomic_read(&q->use_count), - atomic_read(&q->finalization), - atomic_read(&q->block_count), - atomic_read(&q->block_read) ? 'r' : '-', - atomic_read(&q->block_write) ? 'w' : '-', - q->read_queue ? 'r':'-', - q->write_queue ? 'w':'-', - q->flush_queue ? 'f':'-', - (int)DRM_BUFCOUNT(&q->waitlist), - atomic_read(&q->total_flushed), - atomic_read(&q->total_queued), - atomic_read(&q->total_locks)); - atomic_dec(&q->use_count); - } - - SYSCTL_OUT(req, "", 1); - return 0; -} - -static int DRM(queues_info) DRM_SYSCTL_HANDLER_ARGS -{ - drm_device_t *dev = arg1; - int ret; - - DRM_LOCK; - ret = DRM(_queues_info)(oidp, arg1, arg2, req); - DRM_UNLOCK; - return ret; -} - /* drm_bufs_info is called whenever a process reads hw.dri.0.bufs. */ |