patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / sound / oss / emu10k1 / audio.c
index 42fae03..1aac365 100644 (file)
@@ -50,7 +50,7 @@ static void calculate_ofrag(struct woinst *);
 static void calculate_ifrag(struct wiinst *);
 
 /* Audio file operations */
-static ssize_t emu10k1_audio_read(struct file *file, char *buffer, size_t count, loff_t * ppos)
+static ssize_t emu10k1_audio_read(struct file *file, char __user *buffer, size_t count, loff_t * ppos)
 {
        struct emu10k1_wavedevice *wave_dev = (struct emu10k1_wavedevice *) file->private_data;
        struct wiinst *wiinst = wave_dev->wiinst;
@@ -112,7 +112,7 @@ static ssize_t emu10k1_audio_read(struct file *file, char *buffer, size_t count,
                    || (bytestocopy >= count)) {
                        bytestocopy = min_t(u32, bytestocopy, count);
 
-                       emu10k1_wavein_xferdata(wiinst, (u8 *) buffer, &bytestocopy);
+                       emu10k1_wavein_xferdata(wiinst, (u8 __user *)buffer, &bytestocopy);
 
                        count -= bytestocopy;
                        buffer += bytestocopy;
@@ -137,7 +137,7 @@ static ssize_t emu10k1_audio_read(struct file *file, char *buffer, size_t count,
        return ret;
 }
 
-static ssize_t emu10k1_audio_write(struct file *file, const char *buffer, size_t count, loff_t * ppos)
+static ssize_t emu10k1_audio_write(struct file *file, const char __user *buffer, size_t count, loff_t * ppos)
 {
        struct emu10k1_wavedevice *wave_dev = (struct emu10k1_wavedevice *) file->private_data;
        struct woinst *woinst = wave_dev->woinst;
@@ -212,7 +212,7 @@ static ssize_t emu10k1_audio_write(struct file *file, const char *buffer, size_t
 
                        bytestocopy = min_t(u32, bytestocopy, count);
 
-                       emu10k1_waveout_xferdata(woinst, (u8 *) buffer, &bytestocopy);
+                       emu10k1_waveout_xferdata(woinst, (u8 __user *) buffer, &bytestocopy);
 
                        count -= bytestocopy;
                        buffer += bytestocopy * woinst->num_voices;
@@ -254,6 +254,7 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
        int val = 0;
        u32 bytestocopy;
        unsigned long flags;
+       int __user *p = (int __user *)arg;
 
        DPF(4, "emu10k1_audio_ioctl()\n");
 
@@ -266,7 +267,7 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
        switch (cmd) {
        case OSS_GETVERSION:
                DPF(2, "OSS_GETVERSION:\n");
-               return put_user(SOUND_VERSION, (int *) arg);
+               return put_user(SOUND_VERSION, p);
 
        case SNDCTL_DSP_RESET:
                DPF(2, "SNDCTL_DSP_RESET:\n");
@@ -352,11 +353,11 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
                DPF(2, "SNDCTL_DSP_GETCAPS:\n");
                return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME |
                                DSP_CAP_TRIGGER | DSP_CAP_MMAP |
-                               DSP_CAP_COPROC| DSP_CAP_MULTI, (int *) arg);
+                               DSP_CAP_COPROC| DSP_CAP_MULTI, p);
        case SNDCTL_DSP_SPEED:
                DPF(2, "SNDCTL_DSP_SPEED:\n");
 
-               if (get_user(val, (int *) arg))
+               if (get_user(val, p))
                        return -EFAULT;
 
                DPD(2, "val is %d\n", val);
@@ -402,21 +403,21 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
                                DPD(2, "set playback sampling rate -> %d\n", val);
                        }
 
-                       return put_user(val, (int *) arg);
+                       return put_user(val, p);
                } else {
                        if (file->f_mode & FMODE_READ)
                                val = wiinst->format.samplingrate;
                        else if (file->f_mode & FMODE_WRITE)
                                val = woinst->format.samplingrate;
 
-                       return put_user(val, (int *) arg);
+                       return put_user(val, p);
                }
                break;
 
        case SNDCTL_DSP_STEREO:
                DPF(2, "SNDCTL_DSP_STEREO:\n");
 
-               if (get_user(val, (int *) arg))
+               if (get_user(val, p))
                        return -EFAULT;
 
                DPD(2, " val is %d\n", val);
@@ -460,14 +461,14 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
                        DPD(2, "set playback stereo -> %d\n", val);
                }
 
-               return put_user(val, (int *) arg);
+               return put_user(val, p);
 
                break;
 
        case SNDCTL_DSP_CHANNELS:
                DPF(2, "SNDCTL_DSP_CHANNELS:\n");
 
-               if (get_user(val, (int *) arg))
+               if (get_user(val, p))
                        return -EFAULT;
 
                DPD(2, " val is %d\n", val);
@@ -510,14 +511,14 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
                                DPD(2, "set playback number of channels -> %d\n", val);
                        }
 
-                       return put_user(val, (int *) arg);
+                       return put_user(val, p);
                } else {
                        if (file->f_mode & FMODE_READ)
                                val = wiinst->format.channels;
                        else if (file->f_mode & FMODE_WRITE)
                                val = woinst->format.channels;
 
-                       return put_user(val, (int *) arg);
+                       return put_user(val, p);
                }
                break;
 
@@ -533,12 +534,12 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
                                                     wave_dev->card->pt.enable_gpr_name) >= 0)
                                val |= AFMT_AC3;
                }
-               return put_user(val, (int *) arg);
+               return put_user(val, p);
 
        case SNDCTL_DSP_SETFMT: /* Same as SNDCTL_DSP_SAMPLESIZE */
                DPF(2, "SNDCTL_DSP_SETFMT:\n");
 
-               if (get_user(val, (int *) arg))
+               if (get_user(val, p))
                        return -EFAULT;
 
                DPD(2, " val is %d\n", val);
@@ -582,14 +583,14 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
                                DPD(2, "set playback format -> %d\n", val);
                        }
 
-                       return put_user(val, (int *) arg);
+                       return put_user(val, p);
                } else {
                        if (file->f_mode & FMODE_READ)
                                val = wiinst->format.id;
                        else if (file->f_mode & FMODE_WRITE)
                                val = woinst->format.id;
 
-                       return put_user(val, (int *) arg);
+                       return put_user(val, p);
                }
                break;
 
@@ -600,7 +601,7 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
                else if (file->f_mode & FMODE_WRITE)
                        val = woinst->format.bitsperchannel;
 
-               return put_user(val, (int *) arg);
+               return put_user(val, p);
 
        case SOUND_PCM_READ_RATE:
 
@@ -609,7 +610,7 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
                else if (file->f_mode & FMODE_WRITE)
                        val = woinst->format.samplingrate;
 
-               return put_user(val, (int *) arg);
+               return put_user(val, p);
 
        case SOUND_PCM_READ_CHANNELS:
 
@@ -618,7 +619,7 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
                else if (file->f_mode & FMODE_WRITE)
                        val = woinst->format.channels;
 
-               return put_user(val, (int *) arg);
+               return put_user(val, p);
 
        case SOUND_PCM_WRITE_FILTER:
                DPF(2, "SOUND_PCM_WRITE_FILTER: not implemented\n");
@@ -641,12 +642,12 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
                if (file->f_mode & FMODE_READ && (wave_dev->enablebits & PCM_ENABLE_INPUT))
                        val |= PCM_ENABLE_INPUT;
 
-               return put_user(val, (int *) arg);
+               return put_user(val, p);
 
        case SNDCTL_DSP_SETTRIGGER:
                DPF(2, "SNDCTL_DSP_SETTRIGGER:\n");
 
-               if (get_user(val, (int *) arg))
+               if (get_user(val, p))
                        return -EFAULT;
 
                if (file->f_mode & FMODE_WRITE) {
@@ -708,7 +709,7 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
                        info.fragstotal = woinst->buffer.numfrags * woinst->num_voices;
                        info.fragments = info.bytes / info.fragsize;
 
-                       if (copy_to_user((int *) arg, &info, sizeof(info)))
+                       if (copy_to_user(p, &info, sizeof(info)))
                                return -EFAULT;
                }
                break;
@@ -737,7 +738,7 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
                        info.fragments = info.bytes / wiinst->buffer.fragment_size;
                        info.fragsize = wiinst->buffer.fragment_size;
 
-                       if (copy_to_user((int *) arg, &info, sizeof(info)))
+                       if (copy_to_user(p, &info, sizeof(info)))
                                return -EFAULT;
                }
                break;
@@ -765,7 +766,7 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
                val *= woinst->num_voices;
                spin_unlock_irqrestore(&woinst->lock, flags);
 
-               return put_user(val, (int *) arg);
+               return put_user(val, p);
 
        case SNDCTL_DSP_GETIPTR:
                {
@@ -795,7 +796,7 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
 
                        spin_unlock_irqrestore(&wiinst->lock, flags);
 
-                       if (copy_to_user((void *) arg, &cinfo, sizeof(cinfo)))
+                       if (copy_to_user(p, &cinfo, sizeof(cinfo)))
                                return -EFAULT;
                }
                break;
@@ -841,7 +842,7 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
 
                        spin_unlock_irqrestore(&woinst->lock, flags);
 
-                       if (copy_to_user((void *) arg, &cinfo, sizeof(cinfo)))
+                       if (copy_to_user(p, &cinfo, sizeof(cinfo)))
                                return -EFAULT;
                }
                break;
@@ -867,7 +868,7 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
                        spin_unlock_irqrestore(&wiinst->lock, flags);
                }
 
-               return put_user(val, (int *) arg);
+               return put_user(val, p);
 
                break;
 
@@ -892,7 +893,7 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
        case SNDCTL_DSP_SETFRAGMENT:
                DPF(2, "SNDCTL_DSP_SETFRAGMENT:\n");
 
-               if (get_user(val, (int *) arg))
+               if (get_user(val, p))
                        return -EFAULT;
 
                DPD(2, "val is %#x\n", val);
@@ -930,7 +931,7 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
                        if (!buf)
                                return -ENOMEM;
 
-                       if (copy_from_user(buf, (copr_buffer *) arg, sizeof(copr_buffer))) {
+                       if (copy_from_user(buf, p, sizeof(copr_buffer))) {
                                kfree (buf);
                                return -EFAULT;
                        }
@@ -969,7 +970,7 @@ static int emu10k1_audio_ioctl(struct inode *inode, struct file *file, unsigned
                                for (i = 0; i < buf->len; i++)
                                        ((u32 *) buf->data)[i] = sblive_readptr(wave_dev->card, buf->offs + i, buf->flags);
 
-                               if (copy_to_user((copr_buffer *) arg, buf, sizeof(copr_buffer))) {
+                               if (copy_to_user(p, buf, sizeof(copr_buffer))) {
                                        kfree(buf);
                                        return -EFAULT;
                                }