Merge to Fedora kernel-2.6.18-1.2224_FC5 patched with stable patch-2.6.18.1-vs2.0...
[linux-2.6.git] / sound / oss / btaudio.c
index 2a7ea80..324a81f 100644 (file)
@@ -32,6 +32,8 @@
 #include <linux/soundcard.h>
 #include <linux/slab.h>
 #include <linux/kdev_t.h>
+#include <linux/mutex.h>
+
 #include <asm/uaccess.h>
 #include <asm/io.h>
 
@@ -104,11 +106,11 @@ struct btaudio {
        struct pci_dev *pci;
        unsigned int   irq;
        unsigned long  mem;
-       unsigned long  *mmio;
+       unsigned long  __iomem *mmio;
 
        /* locking */
        int            users;
-       struct semaphore lock;
+       struct mutex lock;
 
        /* risc instructions */
        unsigned int   risc_size;
@@ -440,7 +442,7 @@ static struct file_operations btaudio_mixer_fops = {
 static int btaudio_dsp_open(struct inode *inode, struct file *file,
                            struct btaudio *bta, int analog)
 {
-       down(&bta->lock);
+       mutex_lock(&bta->lock);
        if (bta->users)
                goto busy;
        bta->users++;
@@ -452,11 +454,11 @@ static int btaudio_dsp_open(struct inode *inode, struct file *file,
        bta->read_count = 0;
        bta->sampleshift = 0;
 
-       up(&bta->lock);
+       mutex_unlock(&bta->lock);
        return 0;
 
  busy:
-       up(&bta->lock);
+       mutex_unlock(&bta->lock);
        return -EBUSY;
 }
 
@@ -496,11 +498,11 @@ static int btaudio_dsp_release(struct inode *inode, struct file *file)
 {
        struct btaudio *bta = file->private_data;
 
-       down(&bta->lock);
+       mutex_lock(&bta->lock);
        if (bta->recording)
                stop_recording(bta);
        bta->users--;
-       up(&bta->lock);
+       mutex_unlock(&bta->lock);
        return 0;
 }
 
@@ -513,7 +515,7 @@ static ssize_t btaudio_dsp_read(struct file *file, char __user *buffer,
        DECLARE_WAITQUEUE(wait, current);
 
        add_wait_queue(&bta->readq, &wait);
-       down(&bta->lock);
+       mutex_lock(&bta->lock);
        while (swcount > 0) {
                if (0 == bta->read_count) {
                        if (!bta->recording) {
@@ -528,10 +530,10 @@ static ssize_t btaudio_dsp_read(struct file *file, char __user *buffer,
                                        ret = -EAGAIN;
                                break;
                        }
-                       up(&bta->lock);
+                       mutex_unlock(&bta->lock);
                        current->state = TASK_INTERRUPTIBLE;
                        schedule();
-                       down(&bta->lock);
+                       mutex_lock(&bta->lock);
                        if(signal_pending(current)) {
                                if (0 == ret)
                                        ret = -EINTR;
@@ -558,7 +560,7 @@ static ssize_t btaudio_dsp_read(struct file *file, char __user *buffer,
                        __s16 __user *dst = (__s16 __user *)(buffer + ret);
                        __s16 avg;
                        int n = ndst>>1;
-                       if (0 != verify_area(VERIFY_WRITE,dst,ndst)) {
+                       if (!access_ok(VERIFY_WRITE, dst, ndst)) {
                                if (0 == ret)
                                        ret = -EFAULT;
                                break;
@@ -574,7 +576,7 @@ static ssize_t btaudio_dsp_read(struct file *file, char __user *buffer,
                        __u8 *src = bta->buf_cpu + bta->read_offset;
                        __u8 __user *dst = buffer + ret;
                        int n = ndst;
-                       if (0 != verify_area(VERIFY_WRITE,dst,ndst)) {
+                       if (!access_ok(VERIFY_WRITE, dst, ndst)) {
                                if (0 == ret)
                                        ret = -EFAULT;
                                break;
@@ -587,7 +589,7 @@ static ssize_t btaudio_dsp_read(struct file *file, char __user *buffer,
                        __u16 *src = (__u16*)(bta->buf_cpu + bta->read_offset);
                        __u16 __user *dst = (__u16 __user *)(buffer + ret);
                        int n = ndst>>1;
-                       if (0 != verify_area(VERIFY_WRITE,dst,ndst)) {
+                       if (!access_ok(VERIFY_WRITE,dst,ndst)) {
                                if (0 == ret)
                                        ret = -EFAULT;
                                break;
@@ -604,7 +606,7 @@ static ssize_t btaudio_dsp_read(struct file *file, char __user *buffer,
                if (bta->read_offset == bta->buf_size)
                        bta->read_offset = 0;
        }
-       up(&bta->lock);
+       mutex_unlock(&bta->lock);
        remove_wait_queue(&bta->readq, &wait);
        current->state = TASK_RUNNING;
        return ret;
@@ -651,10 +653,10 @@ static int btaudio_dsp_ioctl(struct inode *inode, struct file *file,
                        bta->decimation  = 0;
                }
                if (bta->recording) {
-                       down(&bta->lock);
+                       mutex_lock(&bta->lock);
                        stop_recording(bta);
                        start_recording(bta);
-                       up(&bta->lock);
+                       mutex_unlock(&bta->lock);
                }
                /* fall through */
         case SOUND_PCM_READ_RATE:
@@ -716,10 +718,10 @@ static int btaudio_dsp_ioctl(struct inode *inode, struct file *file,
                        else
                                bta->bits = 16;
                        if (bta->recording) {
-                               down(&bta->lock);
+                               mutex_lock(&bta->lock);
                                stop_recording(bta);
                                start_recording(bta);
-                               up(&bta->lock);
+                               mutex_unlock(&bta->lock);
                        }
                }
                if (debug)
@@ -736,9 +738,9 @@ static int btaudio_dsp_ioctl(struct inode *inode, struct file *file,
 
         case SNDCTL_DSP_RESET:
                if (bta->recording) {
-                       down(&bta->lock);
+                       mutex_lock(&bta->lock);
                        stop_recording(bta);
-                       up(&bta->lock);
+                       mutex_unlock(&bta->lock);
                }
                return 0;
         case SNDCTL_DSP_GETBLKSIZE:
@@ -941,7 +943,7 @@ static int __devinit btaudio_probe(struct pci_dev *pci_dev,
        if (rate)
                bta->rate = rate;
        
-       init_MUTEX(&bta->lock);
+       mutex_init(&bta->lock);
         init_waitqueue_head(&bta->readq);
 
        if (-1 != latency) {
@@ -961,10 +963,10 @@ static int __devinit btaudio_probe(struct pci_dev *pci_dev,
        /* init hw */
         btwrite(0, REG_GPIO_DMA_CTL);
         btwrite(0, REG_INT_MASK);
-        btwrite(~0x0UL, REG_INT_STAT);
+        btwrite(~0U, REG_INT_STAT);
        pci_set_master(pci_dev);
 
-       if ((rc = request_irq(bta->irq, btaudio_irq, SA_SHIRQ|SA_INTERRUPT,
+       if ((rc = request_irq(bta->irq, btaudio_irq, IRQF_SHARED|IRQF_DISABLED,
                              "btaudio",(void *)bta)) < 0) {
                printk(KERN_WARNING
                       "btaudio: can't request irq (rc=%d)\n",rc);
@@ -1033,7 +1035,7 @@ static void __devexit btaudio_remove(struct pci_dev *pci_dev)
        /* turn off all DMA / IRQs */
         btand(~15, REG_GPIO_DMA_CTL);
         btwrite(0, REG_INT_MASK);
-        btwrite(~0x0UL, REG_INT_STAT);
+        btwrite(~0U, REG_INT_STAT);
 
        /* unregister devices */
        if (digital) {
@@ -1101,7 +1103,7 @@ static int btaudio_init_module(void)
               digital ? "digital" : "",
               analog && digital ? "+" : "",
               analog ? "analog" : "");
-       return pci_module_init(&btaudio_pci_driver);
+       return pci_register_driver(&btaudio_pci_driver);
 }
 
 static void btaudio_cleanup_module(void)
@@ -1113,15 +1115,15 @@ static void btaudio_cleanup_module(void)
 module_init(btaudio_init_module);
 module_exit(btaudio_cleanup_module);
 
-MODULE_PARM(dsp1,"i");
-MODULE_PARM(dsp2,"i");
-MODULE_PARM(mixer,"i");
-MODULE_PARM(debug,"i");
-MODULE_PARM(irq_debug,"i");
-MODULE_PARM(digital,"i");
-MODULE_PARM(analog,"i");
-MODULE_PARM(rate,"i");
-MODULE_PARM(latency,"i");
+module_param(dsp1, int, S_IRUGO);
+module_param(dsp2, int, S_IRUGO);
+module_param(mixer, int, S_IRUGO);
+module_param(debug, int, S_IRUGO | S_IWUSR);
+module_param(irq_debug, int, S_IRUGO | S_IWUSR);
+module_param(digital, int, S_IRUGO);
+module_param(analog, int, S_IRUGO);
+module_param(rate, int, S_IRUGO);
+module_param(latency, int, S_IRUGO);
 MODULE_PARM_DESC(latency,"pci latency timer");
 
 MODULE_DEVICE_TABLE(pci, btaudio_pci_tbl);