summaryrefslogtreecommitdiff
path: root/linux
diff options
context:
space:
mode:
authorDave Airlie <airlied@linux.ie>2004-08-30 11:34:51 +0000
committerDave Airlie <airlied@linux.ie>2004-08-30 11:34:51 +0000
commitda6b44849763fac5ccb7d7511128454c6c2a92c7 (patch)
treeeeacf7b240241350c040dc4751f4a4c3d9d52502 /linux
parent7809efc8c32520e6b25c143ee3276edbf534ed14 (diff)
implement drm_core_check_feature and use it .. looks lots nicer
Diffstat (limited to 'linux')
-rw-r--r--linux/drmP.h5
-rw-r--r--linux/drm_bufs.h24
-rw-r--r--linux/drm_dma.h2
-rw-r--r--linux/drm_drv.h26
-rw-r--r--linux/drm_irq.h16
-rw-r--r--linux/drm_memory.h6
-rw-r--r--linux/drm_scatter.h4
-rw-r--r--linux/drm_vm.h4
-rw-r--r--linux/i810_dma.c2
9 files changed, 47 insertions, 42 deletions
diff --git a/linux/drmP.h b/linux/drmP.h
index 384390de..495277f6 100644
--- a/linux/drmP.h
+++ b/linux/drmP.h
@@ -683,6 +683,11 @@ typedef struct drm_device {
u32 driver_features;
} drm_device_t;
+static __inline__ int drm_core_check_feature(struct drm_device *dev, int feature)
+{
+ return ((dev->driver_features & feature) ? 1 : 0);
+}
+
extern void DRM(driver_register_fns)(struct drm_device *dev);
/******************************************************************/
diff --git a/linux/drm_bufs.h b/linux/drm_bufs.h
index fbde072c..9d837332 100644
--- a/linux/drm_bufs.h
+++ b/linux/drm_bufs.h
@@ -103,7 +103,7 @@ int DRM(initmap)( drm_device_t *dev, unsigned int offset, unsigned int size, int
map->offset += dev->hose->mem_space->start;
#endif
#if __OS_HAS_MTRR
- if ( dev->driver_features & DRIVER_USE_MTRR) {
+ if ( drm_core_check_feature(dev, DRIVER_USE_MTRR) ) {
if ( map->type == _DRM_FRAME_BUFFER ||
(map->flags & _DRM_WRITE_COMBINING) ) {
map->mtrr = mtrr_add( map->offset, map->size,
@@ -201,7 +201,7 @@ int DRM(addmap)( struct inode *inode, struct file *filp,
map->offset += dev->hose->mem_space->start;
#endif
#if __OS_HAS_MTRR
- if (dev->driver_features & DRIVER_USE_MTRR) {
+ if (drm_core_check_feature(dev, DRIVER_USE_MTRR)) {
if ( map->type == _DRM_FRAME_BUFFER ||
(map->flags & _DRM_WRITE_COMBINING) ) {
map->mtrr = mtrr_add( map->offset, map->size,
@@ -236,7 +236,7 @@ int DRM(addmap)( struct inode *inode, struct file *filp,
break;
#if __OS_HAS_AGP
case _DRM_AGP:
- if (dev->driver_features & DRIVER_USE_AGP) {
+ if (drm_core_check_feature(dev, DRIVER_USE_AGP)) {
#ifdef __alpha__
map->offset += dev->hose->mem_space->start;
#endif
@@ -611,7 +611,7 @@ int DRM(addbufs_pci)( struct inode *inode, struct file *filp,
drm_buf_t **temp_buflist;
drm_buf_desc_t __user *argp = (void __user *)arg;
- if (!(dev->driver_features & DRIVER_PCI_DMA)) return -EINVAL;
+ if (!drm_core_check_feature(dev, DRIVER_PCI_DMA)) return -EINVAL;
if ( !dma ) return -EINVAL;
@@ -841,7 +841,7 @@ int DRM(addbufs_sg)( struct inode *inode, struct file *filp,
int i;
drm_buf_t **temp_buflist;
- if (!(dev->driver_features & DRIVER_SG)) return -EINVAL;
+ if (!drm_core_check_feature(dev, DRIVER_SG)) return -EINVAL;
if ( !dma ) return -EINVAL;
@@ -1006,7 +1006,7 @@ int DRM(addbufs)( struct inode *inode, struct file *filp,
drm_file_t *priv = filp->private_data;
drm_device_t *dev = priv->dev;
- if (!(dev->driver_features & DRIVER_HAVE_DMA))
+ if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
return -EINVAL;
if ( copy_from_user( &request, (drm_buf_desc_t __user *)arg,
@@ -1053,7 +1053,7 @@ int DRM(infobufs)( struct inode *inode, struct file *filp,
int i;
int count;
- if (!(dev->driver_features & DRIVER_HAVE_DMA))
+ if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
return -EINVAL;
if ( !dma ) return -EINVAL;
@@ -1137,7 +1137,7 @@ int DRM(markbufs)( struct inode *inode, struct file *filp,
int order;
drm_buf_entry_t *entry;
- if (!(dev->driver_features & DRIVER_HAVE_DMA))
+ if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
return -EINVAL;
if ( !dma ) return -EINVAL;
@@ -1187,7 +1187,7 @@ int DRM(freebufs)( struct inode *inode, struct file *filp,
int idx;
drm_buf_t *buf;
- if (!(dev->driver_features & DRIVER_HAVE_DMA))
+ if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
return -EINVAL;
if ( !dma ) return -EINVAL;
@@ -1247,7 +1247,7 @@ int DRM(mapbufs)( struct inode *inode, struct file *filp,
drm_buf_map_t request;
int i;
- if (!(dev->driver_features & DRIVER_HAVE_DMA))
+ if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
return -EINVAL;
if ( !dma ) return -EINVAL;
@@ -1264,8 +1264,8 @@ int DRM(mapbufs)( struct inode *inode, struct file *filp,
return -EFAULT;
if ( request.count >= dma->buf_count ) {
- if (( (dev->driver_features & DRIVER_USE_AGP) && (dma->flags & _DRM_DMA_USE_AGP)) ||
- ( (dev->driver_features & DRIVER_SG) && (dma->flags & _DRM_DMA_USE_SG)) ) {
+ if (( drm_core_check_feature(dev, DRIVER_USE_AGP) && (dma->flags & _DRM_DMA_USE_AGP)) ||
+ ( drm_core_check_feature(dev, DRIVER_SG) && (dma->flags & _DRM_DMA_USE_SG)) ) {
drm_map_t *map = dev->agp_buffer_map;
if ( !map ) {
diff --git a/linux/drm_dma.h b/linux/drm_dma.h
index da9a90b6..05a5936a 100644
--- a/linux/drm_dma.h
+++ b/linux/drm_dma.h
@@ -144,7 +144,7 @@ void DRM(free_buffer)(drm_device_t *dev, drm_buf_t *buf)
buf->filp = NULL;
buf->used = 0;
- if ( (dev->driver_features & DRIVER_DMA_QUEUE) && waitqueue_active(&buf->dma_wait)) {
+ if ( drm_core_check_feature(dev, DRIVER_DMA_QUEUE) && waitqueue_active(&buf->dma_wait)) {
wake_up_interruptible(&buf->dma_wait);
}
}
diff --git a/linux/drm_drv.h b/linux/drm_drv.h
index 51877e83..69d3003c 100644
--- a/linux/drm_drv.h
+++ b/linux/drm_drv.h
@@ -199,7 +199,7 @@ static int DRM(setup)( drm_device_t *dev )
dev->buf_use = 0;
atomic_set( &dev->buf_alloc, 0 );
- if (dev->driver_features & DRIVER_HAVE_DMA)
+ if (drm_core_check_feature(dev, DRIVER_HAVE_DMA))
{
i = DRM(dma_setup)( dev );
if ( i < 0 )
@@ -349,7 +349,7 @@ static int DRM(takedown)( drm_device_t *dev )
#if __OS_HAS_AGP
/* Clear AGP information */
- if ( (dev->driver_features & DRIVER_USE_AGP) && dev->agp ) {
+ if ( drm_core_check_feature(dev, DRIVER_USE_AGP) && dev->agp ) {
drm_agp_mem_t *entry;
drm_agp_mem_t *nexte;
@@ -400,7 +400,7 @@ static int DRM(takedown)( drm_device_t *dev )
break;
case _DRM_SCATTER_GATHER:
/* Handle it */
- if (dev->driver_features & DRIVER_SG && dev->sg) {
+ if (drm_core_check_feature(dev, DRIVER_SG) && dev->sg) {
DRM(sg_cleanup)(dev->sg);
dev->sg = NULL;
}
@@ -414,7 +414,7 @@ static int DRM(takedown)( drm_device_t *dev )
}
- if ( (dev->driver_features & DRIVER_DMA_QUEUE) && dev->queuelist ) {
+ if ( drm_core_check_feature(dev, DRIVER_DMA_QUEUE) && dev->queuelist ) {
for ( i = 0 ; i < dev->queue_count ; i++ ) {
if ( dev->queuelist[i] ) {
@@ -431,7 +431,7 @@ static int DRM(takedown)( drm_device_t *dev )
}
dev->queue_count = 0;
- if (dev->driver_features & DRIVER_HAVE_DMA)
+ if (drm_core_check_feature(dev, DRIVER_HAVE_DMA))
DRM(dma_takedown)( dev );
if ( dev->lock.hw_lock ) {
@@ -510,16 +510,16 @@ static int drm_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
goto error_out_unreg;
#if __OS_HAS_AGP
- if (dev->driver_features & DRIVER_USE_AGP) {
+ if (drm_core_check_feature(dev, DRIVER_USE_AGP)) {
dev->agp = DRM(agp_init)();
- if ( (dev->driver_features & DRIVER_REQUIRE_AGP) && dev->agp == NULL ) {
+ if ( drm_core_check_feature(dev, DRIVER_REQUIRE_AGP) && dev->agp == NULL ) {
DRM_ERROR( "Cannot initialize the agpgart module.\n" );
retcode = -EINVAL;
goto error_out_unreg;
}
#if __OS_HAS_MTRR
- if (dev->driver_features & DRIVER_USE_MTRR) {
+ if (drm_core_check_feature(dev, DRIVER_USE_MTRR)) {
if (dev->agp)
dev->agp->agp_mtrr = mtrr_add( dev->agp->agp_info.aper_base,
dev->agp->agp_info.aper_size*1024*1024,
@@ -682,7 +682,7 @@ static void __exit drm_cleanup( drm_device_t *dev )
case _DRM_FRAME_BUFFER:
#if __OS_HAS_MTRR
- if ( dev->driver_features & DRIVER_USE_MTRR) {
+ if ( drm_core_check_feature(dev, DRIVER_USE_MTRR)) {
if ( map->mtrr >= 0 ) {
int retcode;
retcode = mtrr_del( map->mtrr,
@@ -722,7 +722,7 @@ static void __exit drm_cleanup( drm_device_t *dev )
#if __OS_HAS_AGP
#if __OS_HAS_MTRR
- if ( (dev->driver_features & DRIVER_USE_MTRR) && dev->agp && dev->agp->agp_mtrr >= 0 ) {
+ if ( drm_core_check_feature(dev, DRIVER_USE_MTRR) && dev->agp && dev->agp->agp_mtrr >= 0 ) {
int retval;
retval = mtrr_del( dev->agp->agp_mtrr,
dev->agp->agp_info.aper_base,
@@ -730,7 +730,7 @@ static void __exit drm_cleanup( drm_device_t *dev )
DRM_DEBUG( "mtrr_del=%d\n", retval );
}
#endif
- if ( (dev->driver_features & DRIVER_USE_AGP) && dev->agp ) {
+ if ( drm_core_check_feature(dev, DRIVER_USE_AGP) && dev->agp ) {
DRM(agp_uninit)();
DRM(free)( dev->agp, sizeof(*dev->agp), DRM_MEM_AGPLISTS );
dev->agp = NULL;
@@ -937,7 +937,7 @@ int DRM(release)( struct inode *inode, struct file *filp )
}
}
- if (dev->driver_features & DRIVER_HAVE_DMA)
+ if (drm_core_check_feature(dev, DRIVER_HAVE_DMA))
{
dev->fn_tbl.reclaim_buffers(filp);
}
@@ -1100,7 +1100,7 @@ int DRM(lock)( struct inode *inode, struct file *filp,
lock.context, current->pid,
dev->lock.hw_lock->lock, lock.flags );
- if (dev->driver_features & DRIVER_DMA_QUEUE)
+ if (drm_core_check_feature(dev, DRIVER_DMA_QUEUE))
if ( lock.context < 0 )
return -EINVAL;
diff --git a/linux/drm_irq.h b/linux/drm_irq.h
index b34f1ce4..a1622c0e 100644
--- a/linux/drm_irq.h
+++ b/linux/drm_irq.h
@@ -58,7 +58,7 @@ int DRM(irq_by_busid)(struct inode *inode, struct file *filp,
drm_irq_busid_t __user *argp = (void __user *)arg;
drm_irq_busid_t p;
- if (!(dev->driver_features & DRIVER_HAVE_IRQ))
+ if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
return -EINVAL;
if (copy_from_user(&p, argp, sizeof(p)))
@@ -94,7 +94,7 @@ int DRM(irq_install)( drm_device_t *dev )
int ret;
unsigned long sh_flags=0;
- if (!(dev->driver_features & DRIVER_HAVE_IRQ ))
+ if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ ))
return -EINVAL;
if ( dev->irq == 0 )
@@ -121,7 +121,7 @@ int DRM(irq_install)( drm_device_t *dev )
dev->dma->next_queue = NULL;
dev->dma->this_buffer = NULL;
- if (dev->driver_features & DRIVER_IRQ_VBL) {
+ if (drm_core_check_feature(dev, DRIVER_IRQ_VBL)) {
init_waitqueue_head(&dev->vbl_queue);
spin_lock_init( &dev->vbl_lock );
@@ -135,7 +135,7 @@ int DRM(irq_install)( drm_device_t *dev )
dev->fn_tbl.irq_preinstall(dev);
/* Install handler */
- if (dev->driver_features & DRIVER_IRQ_SHARED)
+ if (drm_core_check_feature(dev, DRIVER_IRQ_SHARED))
sh_flags = SA_SHIRQ;
ret = request_irq( dev->irq, dev->fn_tbl.irq_handler,
@@ -164,7 +164,7 @@ int DRM(irq_uninstall)( drm_device_t *dev )
{
int irq_enabled;
- if (!(dev->driver_features & DRIVER_HAVE_IRQ ))
+ if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ ))
return -EINVAL;
down( &dev->struct_sem );
@@ -209,14 +209,14 @@ int DRM(control)( struct inode *inode, struct file *filp,
switch ( ctl.func ) {
case DRM_INST_HANDLER:
- if (!(dev->driver_features & DRIVER_HAVE_IRQ))
+ if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
return 0;
if (dev->if_version < DRM_IF_VERSION(1, 2) &&
ctl.irq != dev->irq)
return -EINVAL;
return DRM(irq_install)( dev );
case DRM_UNINST_HANDLER:
- if (!(dev->driver_features & DRIVER_HAVE_IRQ))
+ if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
return 0;
return DRM(irq_uninstall)( dev );
default:
@@ -253,7 +253,7 @@ int DRM(wait_vblank)( DRM_IOCTL_ARGS )
int ret = 0;
unsigned int flags;
- if (!(dev->driver_features & DRIVER_IRQ_VBL))
+ if (!drm_core_check_feature(dev, DRIVER_IRQ_VBL))
return -EINVAL;
if (!dev->irq)
diff --git a/linux/drm_memory.h b/linux/drm_memory.h
index 669bef08..38084ccc 100644
--- a/linux/drm_memory.h
+++ b/linux/drm_memory.h
@@ -144,7 +144,7 @@ drm_follow_page (void *vaddr)
static inline void *drm_ioremap(unsigned long offset, unsigned long size, drm_device_t *dev)
{
#if __OS_HAS_AGP && defined(VMAP_4_ARGS)
- if ( (dev->driver_features & DRIVER_USE_AGP) && dev->agp && dev->agp->cant_use_aperture) {
+ if ( drm_core_check_feature(dev, DRIVER_USE_AGP) && dev->agp && dev->agp->cant_use_aperture) {
drm_map_t *map = drm_lookup_map(offset, size, dev);
if (map && map->type == _DRM_AGP)
@@ -159,7 +159,7 @@ static inline void *drm_ioremap_nocache(unsigned long offset, unsigned long size
drm_device_t *dev)
{
#if __OS_HAS_AGP&& defined(VMAP_4_ARGS)
- if ( (dev->driver_features & DRIVER_USE_AGP) && dev->agp && dev->agp->cant_use_aperture) {
+ if ( drm_core_check_feature(dev, DRIVER_USE_AGP) && dev->agp && dev->agp->cant_use_aperture) {
drm_map_t *map = drm_lookup_map(offset, size, dev);
if (map && map->type == _DRM_AGP)
@@ -178,7 +178,7 @@ static inline void drm_ioremapfree(void *pt, unsigned long size, drm_device_t *d
* routines for handling mappings in the AGP space. Hopefully this can be done in
* a future revision of the interface...
*/
- if ((dev->driver_features & DRIVER_USE_AGP) && dev->agp && dev->agp->cant_use_aperture
+ if (drm_core_check_feature(dev, DRIVER_USE_AGP) && dev->agp && dev->agp->cant_use_aperture
&& ((unsigned long) pt >= VMALLOC_START && (unsigned long) pt < VMALLOC_END))
{
unsigned long offset;
diff --git a/linux/drm_scatter.h b/linux/drm_scatter.h
index 3f0bc10c..888e6296 100644
--- a/linux/drm_scatter.h
+++ b/linux/drm_scatter.h
@@ -73,7 +73,7 @@ int DRM(sg_alloc)( struct inode *inode, struct file *filp,
DRM_DEBUG( "%s\n", __FUNCTION__ );
- if ( dev->driver_features & DRIVER_SG )
+ if ( drm_core_check_feature(dev, DRIVER_SG ))
return -EINVAL;
if ( dev->sg )
@@ -209,7 +209,7 @@ int DRM(sg_free)( struct inode *inode, struct file *filp,
drm_scatter_gather_t request;
drm_sg_mem_t *entry;
- if ( dev->driver_features & DRIVER_SG )
+ if ( drm_core_check_feature(dev, DRIVER_SG ))
return -EINVAL;
if ( copy_from_user( &request,
diff --git a/linux/drm_vm.h b/linux/drm_vm.h
index ed5d53d2..f13db00b 100644
--- a/linux/drm_vm.h
+++ b/linux/drm_vm.h
@@ -206,7 +206,7 @@ void DRM(vm_shm_close)(struct vm_area_struct *vma)
case _DRM_REGISTERS:
case _DRM_FRAME_BUFFER:
#if __OS_HAS_MTRR
- if ((dev->driver_features & DRIVER_USE_MTRR) && map->mtrr >= 0) {
+ if (drm_core_check_feature(dev, DRIVER_USE_MTRR) && map->mtrr >= 0) {
int retcode;
retcode = mtrr_del(map->mtrr,
map->offset,
@@ -583,7 +583,7 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma)
switch (map->type) {
case _DRM_AGP:
#if __OS_HAS_AGP
- if ((dev->driver_features & DRIVER_USE_AGP) && dev->agp->cant_use_aperture) {
+ if (drm_core_check_feature(dev, DRIVER_USE_AGP) && dev->agp->cant_use_aperture) {
/*
* On some platforms we can't talk to bus dma address from the CPU, so for
* memory of type DRM_AGP, we'll deal with sorting out the real physical
diff --git a/linux/i810_dma.c b/linux/i810_dma.c
index 51dddb3d..fe8f5c1d 100644
--- a/linux/i810_dma.c
+++ b/linux/i810_dma.c
@@ -242,7 +242,7 @@ int i810_dma_cleanup(drm_device_t *dev)
* may not have been called from userspace and after dev_private
* is freed, it's too late.
*/
- if ( (dev->driver_features & DRIVER_HAVE_IRQ) && dev->irq_enabled )
+ if ( drm_core_check_feature(dev, DRIVER_HAVE_IRQ) && dev->irq_enabled )
DRM(irq_uninstall)(dev);
if (dev->dev_private) {