]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/char/drm/drm_fops.c
drm: lindent the drm directory.
[mv-sheeva.git] / drivers / char / drm / drm_fops.c
index a1f4e9cd64edd17406cf2b6349c37a2039a9fac2..e0124a9ba14a41457b4f4f382880876ec19c990a 100644 (file)
@@ -1,7 +1,7 @@
 /**
- * \file drm_fops.
+ * \file drm_fops.c
  * File operations for DRM
- * 
+ *
  * \author Rickard E. (Rik) Faith <faith@valinux.com>
  * \author Daryll Strauss <daryll@valinux.com>
  * \author Gareth Hughes <gareth@valinux.com>
 #include "drmP.h"
 #include <linux/poll.h>
 
-static int drm_open_helper(struct inode *inode, struct file *filp, drm_device_t *dev);
+static int drm_open_helper(struct inode *inode, struct file *filp,
+                          drm_device_t * dev);
 
-static int drm_setup( drm_device_t *dev )
+static int drm_setup(drm_device_t * dev)
 {
        int i;
        int ret;
 
-       if (dev->driver->presetup)
-       {
-               ret=dev->driver->presetup(dev);
-               if (ret!=0) 
+       if (dev->driver->presetup) {
+               ret = dev->driver->presetup(dev);
+               if (ret != 0)
                        return ret;
        }
 
-       atomic_set( &dev->ioctl_count, 0 );
-       atomic_set( &dev->vma_count, 0 );
+       atomic_set(&dev->ioctl_count, 0);
+       atomic_set(&dev->vma_count, 0);
        dev->buf_use = 0;
-       atomic_set( &dev->buf_alloc, 0 );
+       atomic_set(&dev->buf_alloc, 0);
 
-       if (drm_core_check_feature(dev, DRIVER_HAVE_DMA))
-       {
-               i = drm_dma_setup( dev );
-               if ( i < 0 )
+       if (drm_core_check_feature(dev, DRIVER_HAVE_DMA)) {
+               i = drm_dma_setup(dev);
+               if (i < 0)
                        return i;
        }
 
-       for ( i = 0 ; i < DRM_ARRAY_SIZE(dev->counts) ; i++ )
-               atomic_set( &dev->counts[i], 0 );
+       for (i = 0; i < DRM_ARRAY_SIZE(dev->counts); i++)
+               atomic_set(&dev->counts[i], 0);
 
-       for ( i = 0 ; i < DRM_HASH_SIZE ; i++ ) {
+       for (i = 0; i < DRM_HASH_SIZE; i++) {
                dev->magiclist[i].head = NULL;
                dev->magiclist[i].tail = NULL;
        }
 
-       dev->ctxlist = drm_alloc(sizeof(*dev->ctxlist),
-                                 DRM_MEM_CTXLIST);
-       if(dev->ctxlist == NULL) return -ENOMEM;
+       dev->ctxlist = drm_alloc(sizeof(*dev->ctxlist), DRM_MEM_CTXLIST);
+       if (dev->ctxlist == NULL)
+               return -ENOMEM;
        memset(dev->ctxlist, 0, sizeof(*dev->ctxlist));
        INIT_LIST_HEAD(&dev->ctxlist->head);
 
        dev->vmalist = NULL;
        dev->sigdata.lock = dev->lock.hw_lock = NULL;
-       init_waitqueue_head( &dev->lock.lock_queue );
+       init_waitqueue_head(&dev->lock.lock_queue);
        dev->queue_count = 0;
        dev->queue_reserved = 0;
        dev->queue_slots = 0;
@@ -91,7 +90,7 @@ static int drm_setup( drm_device_t *dev )
        dev->last_context = 0;
        dev->last_switch = 0;
        dev->last_checked = 0;
-       init_waitqueue_head( &dev->context_wait );
+       init_waitqueue_head(&dev->context_wait);
        dev->if_version = 0;
 
        dev->ctx_start = 0;
@@ -101,14 +100,14 @@ static int drm_setup( drm_device_t *dev )
        dev->buf_wp = dev->buf;
        dev->buf_end = dev->buf + DRM_BSZ;
        dev->buf_async = NULL;
-       init_waitqueue_head( &dev->buf_readers );
-       init_waitqueue_head( &dev->buf_writers );
+       init_waitqueue_head(&dev->buf_readers);
+       init_waitqueue_head(&dev->buf_writers);
 
-       DRM_DEBUG( "\n" );
+       DRM_DEBUG("\n");
 
        /*
         * The kernel's context could be created here, but is now created
-        * in drm_dma_enqueue.  This is more resource-efficient for
+        * in drm_dma_enqueue.  This is more resource-efficient for
         * hardware that does not do DMA, but may mean that
         * drm_select_queue fails between the time the interrupt is
         * initialized and the time the queues are initialized.
@@ -121,7 +120,7 @@ static int drm_setup( drm_device_t *dev )
 
 /**
  * Open file.
- * 
+ *
  * \param inode device inode
  * \param filp file pointer.
  * \return zero on success or a negative number on failure.
@@ -130,7 +129,7 @@ static int drm_setup( drm_device_t *dev )
  * increments the device open count. If the open count was previous at zero,
  * i.e., it's the first that the device is open, then calls setup().
  */
-int drm_open( struct inode *inode, struct file *filp )
+int drm_open(struct inode *inode, struct file *filp)
 {
        drm_device_t *dev = NULL;
        int minor = iminor(inode);
@@ -138,26 +137,27 @@ int drm_open( struct inode *inode, struct file *filp )
 
        if (!((minor >= 0) && (minor < drm_cards_limit)))
                return -ENODEV;
-               
+
        if (!drm_heads[minor])
                return -ENODEV;
 
        if (!(dev = drm_heads[minor]->dev))
                return -ENODEV;
-       
-       retcode = drm_open_helper( inode, filp, dev );
-       if ( !retcode ) {
-               atomic_inc( &dev->counts[_DRM_STAT_OPENS] );
-               spin_lock( &dev->count_lock );
-               if ( !dev->open_count++ ) {
-                       spin_unlock( &dev->count_lock );
-                       return drm_setup( dev );
+
+       retcode = drm_open_helper(inode, filp, dev);
+       if (!retcode) {
+               atomic_inc(&dev->counts[_DRM_STAT_OPENS]);
+               spin_lock(&dev->count_lock);
+               if (!dev->open_count++) {
+                       spin_unlock(&dev->count_lock);
+                       return drm_setup(dev);
                }
-               spin_unlock( &dev->count_lock );
+               spin_unlock(&dev->count_lock);
        }
 
        return retcode;
 }
+
 EXPORT_SYMBOL(drm_open);
 
 /**
@@ -172,7 +172,7 @@ EXPORT_SYMBOL(drm_open);
  * data from its list and free it. Decreases the open count and if it reaches
  * zero calls takedown().
  */
-int drm_release( struct inode *inode, struct file *filp )
+int drm_release(struct inode *inode, struct file *filp)
 {
        drm_file_t *priv = filp->private_data;
        drm_device_t *dev;
@@ -181,7 +181,7 @@ int drm_release( struct inode *inode, struct file *filp )
        lock_kernel();
        dev = priv->head->dev;
 
-       DRM_DEBUG( "open_count = %d\n", dev->open_count );
+       DRM_DEBUG("open_count = %d\n", dev->open_count);
 
        if (dev->driver->prerelease)
                dev->driver->prerelease(dev, filp);
@@ -190,194 +190,199 @@ int drm_release( struct inode *inode, struct file *filp )
         * Begin inline drm_release
         */
 
-       DRM_DEBUG( "pid = %d, device = 0x%lx, open_count = %d\n",
-                  current->pid, (long)old_encode_dev(priv->head->device), dev->open_count );
+       DRM_DEBUG("pid = %d, device = 0x%lx, open_count = %d\n",
+                 current->pid, (long)old_encode_dev(priv->head->device),
+                 dev->open_count);
+
+       if (priv->lock_count && dev->lock.hw_lock &&
+           _DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) &&
+           dev->lock.filp == filp) {
+               DRM_DEBUG("File %p released, freeing lock for context %d\n",
+                         filp, _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock));
 
-       if ( priv->lock_count && dev->lock.hw_lock &&
-            _DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) &&
-            dev->lock.filp == filp ) {
-               DRM_DEBUG( "File %p released, freeing lock for context %d\n",
-                       filp,
-                       _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock) );
-               
                if (dev->driver->release)
                        dev->driver->release(dev, filp);
 
-               drm_lock_free( dev, &dev->lock.hw_lock->lock,
-                               _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock) );
+               drm_lock_free(dev, &dev->lock.hw_lock->lock,
+                             _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock));
 
-                               /* FIXME: may require heavy-handed reset of
-                                   hardware at this point, possibly
-                                   processed via a callback to the X
-                                   server. */
-       }
-       else if ( dev->driver->release && priv->lock_count && dev->lock.hw_lock ) {
+               /* FIXME: may require heavy-handed reset of
+                  hardware at this point, possibly
+                  processed via a callback to the X
+                  server. */
+       } else if (dev->driver->release && priv->lock_count
+                  && dev->lock.hw_lock) {
                /* The lock is required to reclaim buffers */
-               DECLARE_WAITQUEUE( entry, current );
+               DECLARE_WAITQUEUE(entry, current);
 
-               add_wait_queue( &dev->lock.lock_queue, &entry );
+               add_wait_queue(&dev->lock.lock_queue, &entry);
                for (;;) {
                        __set_current_state(TASK_INTERRUPTIBLE);
-                       if ( !dev->lock.hw_lock ) {
+                       if (!dev->lock.hw_lock) {
                                /* Device has been unregistered */
                                retcode = -EINTR;
                                break;
                        }
-                       if ( drm_lock_take( &dev->lock.hw_lock->lock,
-                                            DRM_KERNEL_CONTEXT ) ) {
-                               dev->lock.filp      = filp;
+                       if (drm_lock_take(&dev->lock.hw_lock->lock,
+                                         DRM_KERNEL_CONTEXT)) {
+                               dev->lock.filp = filp;
                                dev->lock.lock_time = jiffies;
-                                atomic_inc( &dev->counts[_DRM_STAT_LOCKS] );
+                               atomic_inc(&dev->counts[_DRM_STAT_LOCKS]);
                                break;  /* Got lock */
                        }
-                               /* Contention */
+                       /* Contention */
                        schedule();
-                       if ( signal_pending( current ) ) {
+                       if (signal_pending(current)) {
                                retcode = -ERESTARTSYS;
                                break;
                        }
                }
                __set_current_state(TASK_RUNNING);
-               remove_wait_queue( &dev->lock.lock_queue, &entry );
-               if( !retcode ) {
+               remove_wait_queue(&dev->lock.lock_queue, &entry);
+               if (!retcode) {
                        if (dev->driver->release)
                                dev->driver->release(dev, filp);
-                       drm_lock_free( dev, &dev->lock.hw_lock->lock,
-                                       DRM_KERNEL_CONTEXT );
+                       drm_lock_free(dev, &dev->lock.hw_lock->lock,
+                                     DRM_KERNEL_CONTEXT);
                }
        }
-       
-       if (drm_core_check_feature(dev, DRIVER_HAVE_DMA) && !dev->driver->release)
-       {
+
+       if (drm_core_check_feature(dev, DRIVER_HAVE_DMA)
+           && !dev->driver->release) {
                dev->driver->reclaim_buffers(dev, filp);
        }
 
-       drm_fasync( -1, filp, 0 );
+       drm_fasync(-1, filp, 0);
 
-       down( &dev->ctxlist_sem );
-       if ( dev->ctxlist && (!list_empty(&dev->ctxlist->head))) {
+       down(&dev->ctxlist_sem);
+       if (dev->ctxlist && (!list_empty(&dev->ctxlist->head))) {
                drm_ctx_list_t *pos, *n;
 
-               list_for_each_entry_safe( pos, n, &dev->ctxlist->head, head ) {
-                       if ( pos->tag == priv &&
-                            pos->handle != DRM_KERNEL_CONTEXT ) {
+               list_for_each_entry_safe(pos, n, &dev->ctxlist->head, head) {
+                       if (pos->tag == priv &&
+                           pos->handle != DRM_KERNEL_CONTEXT) {
                                if (dev->driver->context_dtor)
-                                       dev->driver->context_dtor(dev, pos->handle);
+                                       dev->driver->context_dtor(dev,
+                                                                 pos->handle);
 
-                               drm_ctxbitmap_free( dev, pos->handle );
+                               drm_ctxbitmap_free(dev, pos->handle);
 
-                               list_del( &pos->head );
-                               drm_free( pos, sizeof(*pos), DRM_MEM_CTXLIST );
+                               list_del(&pos->head);
+                               drm_free(pos, sizeof(*pos), DRM_MEM_CTXLIST);
                                --dev->ctx_count;
                        }
                }
        }
-       up( &dev->ctxlist_sem );
+       up(&dev->ctxlist_sem);
 
-       down( &dev->struct_sem );
-       if ( priv->remove_auth_on_close == 1 ) {
+       down(&dev->struct_sem);
+       if (priv->remove_auth_on_close == 1) {
                drm_file_t *temp = dev->file_first;
-               while ( temp ) {
+               while (temp) {
                        temp->authenticated = 0;
                        temp = temp->next;
                }
        }
-       if ( priv->prev ) {
+       if (priv->prev) {
                priv->prev->next = priv->next;
        } else {
-               dev->file_first  = priv->next;
+               dev->file_first = priv->next;
        }
-       if ( priv->next ) {
+       if (priv->next) {
                priv->next->prev = priv->prev;
        } else {
-               dev->file_last   = priv->prev;
+               dev->file_last = priv->prev;
        }
-       up( &dev->struct_sem );
-       
+       up(&dev->struct_sem);
+
        if (dev->driver->free_filp_priv)
                dev->driver->free_filp_priv(dev, priv);
 
-       drm_free( priv, sizeof(*priv), DRM_MEM_FILES );
+       drm_free(priv, sizeof(*priv), DRM_MEM_FILES);
 
        /* ========================================================
         * End inline drm_release
         */
 
-       atomic_inc( &dev->counts[_DRM_STAT_CLOSES] );
-       spin_lock( &dev->count_lock );
-       if ( !--dev->open_count ) {
-               if ( atomic_read( &dev->ioctl_count ) || dev->blocked ) {
-                       DRM_ERROR( "Device busy: %d %d\n",
-                                  atomic_read( &dev->ioctl_count ),
-                                  dev->blocked );
-                       spin_unlock( &dev->count_lock );
+       atomic_inc(&dev->counts[_DRM_STAT_CLOSES]);
+       spin_lock(&dev->count_lock);
+       if (!--dev->open_count) {
+               if (atomic_read(&dev->ioctl_count) || dev->blocked) {
+                       DRM_ERROR("Device busy: %d %d\n",
+                                 atomic_read(&dev->ioctl_count), dev->blocked);
+                       spin_unlock(&dev->count_lock);
                        unlock_kernel();
                        return -EBUSY;
                }
-               spin_unlock( &dev->count_lock );
+               spin_unlock(&dev->count_lock);
                unlock_kernel();
-               return drm_takedown( dev );
+               return drm_takedown(dev);
        }
-       spin_unlock( &dev->count_lock );
+       spin_unlock(&dev->count_lock);
 
        unlock_kernel();
 
        return retcode;
 }
+
 EXPORT_SYMBOL(drm_release);
 
 /**
- * Called whenever a process opens /dev/drm. 
+ * Called whenever a process opens /dev/drm.
  *
  * \param inode device inode.
  * \param filp file pointer.
  * \param dev device.
  * \return zero on success or a negative number on failure.
- * 
+ *
  * Creates and initializes a drm_file structure for the file private data in \p
  * filp and add it into the double linked list in \p dev.
  */
-static int drm_open_helper(struct inode *inode, struct file *filp, drm_device_t *dev)
+static int drm_open_helper(struct inode *inode, struct file *filp,
+                          drm_device_t * dev)
 {
-       int          minor = iminor(inode);
-       drm_file_t   *priv;
+       int minor = iminor(inode);
+       drm_file_t *priv;
        int ret;
 
-       if (filp->f_flags & O_EXCL)   return -EBUSY; /* No exclusive opens */
-       if (!drm_cpu_valid())        return -EINVAL;
+       if (filp->f_flags & O_EXCL)
+               return -EBUSY;  /* No exclusive opens */
+       if (!drm_cpu_valid())
+               return -EINVAL;
 
        DRM_DEBUG("pid = %d, minor = %d\n", current->pid, minor);
 
-       priv                = drm_alloc(sizeof(*priv), DRM_MEM_FILES);
-       if(!priv) return -ENOMEM;
+       priv = drm_alloc(sizeof(*priv), DRM_MEM_FILES);
+       if (!priv)
+               return -ENOMEM;
 
        memset(priv, 0, sizeof(*priv));
-       filp->private_data  = priv;
-       priv->uid           = current->euid;
-       priv->pid           = current->pid;
-       priv->minor         = minor;
-       priv->head          = drm_heads[minor];
-       priv->ioctl_count   = 0;
+       filp->private_data = priv;
+       priv->uid = current->euid;
+       priv->pid = current->pid;
+       priv->minor = minor;
+       priv->head = drm_heads[minor];
+       priv->ioctl_count = 0;
        priv->authenticated = capable(CAP_SYS_ADMIN);
-       priv->lock_count    = 0;
+       priv->lock_count = 0;
 
        if (dev->driver->open_helper) {
-               ret=dev->driver->open_helper(dev, priv);
+               ret = dev->driver->open_helper(dev, priv);
                if (ret < 0)
                        goto out_free;
        }
 
        down(&dev->struct_sem);
        if (!dev->file_last) {
-               priv->next      = NULL;
-               priv->prev      = NULL;
+               priv->next = NULL;
+               priv->prev = NULL;
                dev->file_first = priv;
-               dev->file_last  = priv;
+               dev->file_last = priv;
        } else {
-               priv->next           = NULL;
-               priv->prev           = dev->file_last;
+               priv->next = NULL;
+               priv->prev = dev->file_last;
                dev->file_last->next = priv;
-               dev->file_last       = priv;
+               dev->file_last = priv;
        }
        up(&dev->struct_sem);
 
@@ -394,42 +399,48 @@ static int drm_open_helper(struct inode *inode, struct file *filp, drm_device_t
                }
                if (!dev->hose) {
                        struct pci_bus *b = pci_bus_b(pci_root_buses.next);
-                       if (b) dev->hose = b->sysdata;
+                       if (b)
+                               dev->hose = b->sysdata;
                }
        }
 #endif
 
        return 0;
-out_free:
+      out_free:
        drm_free(priv, sizeof(*priv), DRM_MEM_FILES);
-       filp->private_data=NULL;
+       filp->private_data = NULL;
        return ret;
 }
 
 /** No-op. */
 int drm_flush(struct file *filp)
 {
-       drm_file_t    *priv   = filp->private_data;
-       drm_device_t  *dev    = priv->head->dev;
+       drm_file_t *priv = filp->private_data;
+       drm_device_t *dev = priv->head->dev;
 
        DRM_DEBUG("pid = %d, device = 0x%lx, open_count = %d\n",
-                 current->pid, (long)old_encode_dev(priv->head->device), dev->open_count);
+                 current->pid, (long)old_encode_dev(priv->head->device),
+                 dev->open_count);
        return 0;
 }
+
 EXPORT_SYMBOL(drm_flush);
 
 /** No-op. */
 int drm_fasync(int fd, struct file *filp, int on)
 {
-       drm_file_t    *priv   = filp->private_data;
-       drm_device_t  *dev    = priv->head->dev;
-       int           retcode;
+       drm_file_t *priv = filp->private_data;
+       drm_device_t *dev = priv->head->dev;
+       int retcode;
 
-       DRM_DEBUG("fd = %d, device = 0x%lx\n", fd, (long)old_encode_dev(priv->head->device));
+       DRM_DEBUG("fd = %d, device = 0x%lx\n", fd,
+                 (long)old_encode_dev(priv->head->device));
        retcode = fasync_helper(fd, filp, on, &dev->buf_async);
-       if (retcode < 0) return retcode;
+       if (retcode < 0)
+               return retcode;
        return 0;
 }
+
 EXPORT_SYMBOL(drm_fasync);
 
 /** No-op. */
@@ -437,5 +448,5 @@ unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait)
 {
        return 0;
 }
-EXPORT_SYMBOL(drm_poll);
 
+EXPORT_SYMBOL(drm_poll);