patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / sound / core / rawmidi.c
index 81be9e5..df904d1 100644 (file)
@@ -27,6 +27,7 @@
 #include <linux/slab.h>
 #include <linux/time.h>
 #include <linux/wait.h>
+#include <linux/moduleparam.h>
 #include <sound/rawmidi.h>
 #include <sound/info.h>
 #include <sound/control.h>
@@ -40,10 +41,11 @@ MODULE_LICENSE("GPL");
 #ifdef CONFIG_SND_OSSEMUL
 static int midi_map[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = 0};
 static int amidi_map[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = 1};
-MODULE_PARM(midi_map, "1-" __MODULE_STRING(SNDRV_CARDS) "i");
+static int boot_devs;
+module_param_array(midi_map, int, boot_devs, 0444);
 MODULE_PARM_DESC(midi_map, "Raw MIDI device number assigned to 1st OSS device.");
 MODULE_PARM_SYNTAX(midi_map, "default:0,skill:advanced");
-MODULE_PARM(amidi_map, "1-" __MODULE_STRING(SNDRV_CARDS) "i");
+module_param_array(amidi_map, int, boot_devs, 0444);
 MODULE_PARM_DESC(amidi_map, "Raw MIDI device number assigned to 2nd OSS device.");
 MODULE_PARM_SYNTAX(amidi_map, "default:1,skill:advanced");
 #endif /* CONFIG_SND_OSSEMUL */
@@ -541,7 +543,7 @@ int snd_rawmidi_info(snd_rawmidi_substream_t *substream, snd_rawmidi_info_t *inf
        return 0;
 }
 
-static int snd_rawmidi_info_user(snd_rawmidi_substream_t *substream, snd_rawmidi_info_t * _info)
+static int snd_rawmidi_info_user(snd_rawmidi_substream_t *substream, snd_rawmidi_info_t __user * _info)
 {
        snd_rawmidi_info_t info;
        int err;
@@ -577,7 +579,7 @@ int snd_rawmidi_info_select(snd_card_t *card, snd_rawmidi_info_t *info)
 }
 
 static int snd_rawmidi_info_select_user(snd_card_t *card,
-                                       snd_rawmidi_info_t *_info)
+                                       snd_rawmidi_info_t __user *_info)
 {
        int err;
        snd_rawmidi_info_t info;
@@ -677,17 +679,18 @@ static int snd_rawmidi_ioctl(struct inode *inode, struct file *file,
                             unsigned int cmd, unsigned long arg)
 {
        snd_rawmidi_file_t *rfile;
+       void __user *argp = (void __user *)arg;
 
        rfile = snd_magic_cast(snd_rawmidi_file_t, file->private_data, return -ENXIO);
        if (((cmd >> 8) & 0xff) != 'W')
                return -ENOTTY;
        switch (cmd) {
        case SNDRV_RAWMIDI_IOCTL_PVERSION:
-               return put_user(SNDRV_RAWMIDI_VERSION, (int *)arg) ? -EFAULT : 0;
+               return put_user(SNDRV_RAWMIDI_VERSION, (int __user *)argp) ? -EFAULT : 0;
        case SNDRV_RAWMIDI_IOCTL_INFO:
        {
                snd_rawmidi_stream_t stream;
-               snd_rawmidi_info_t *info = (snd_rawmidi_info_t *) arg;
+               snd_rawmidi_info_t __user *info = argp;
                if (get_user(stream, &info->stream))
                        return -EFAULT;
                switch (stream) {
@@ -702,7 +705,7 @@ static int snd_rawmidi_ioctl(struct inode *inode, struct file *file,
        case SNDRV_RAWMIDI_IOCTL_PARAMS:
        {
                snd_rawmidi_params_t params;
-               if (copy_from_user(&params, (snd_rawmidi_params_t *) arg, sizeof(snd_rawmidi_params_t)))
+               if (copy_from_user(&params, argp, sizeof(snd_rawmidi_params_t)))
                        return -EFAULT;
                switch (params.stream) {
                case SNDRV_RAWMIDI_STREAM_OUTPUT:
@@ -721,7 +724,7 @@ static int snd_rawmidi_ioctl(struct inode *inode, struct file *file,
        {
                int err = 0;
                snd_rawmidi_status_t status;
-               if (copy_from_user(&status, (snd_rawmidi_status_t *) arg, sizeof(snd_rawmidi_status_t)))
+               if (copy_from_user(&status, argp, sizeof(snd_rawmidi_status_t)))
                        return -EFAULT;
                switch (status.stream) {
                case SNDRV_RAWMIDI_STREAM_OUTPUT:
@@ -739,14 +742,14 @@ static int snd_rawmidi_ioctl(struct inode *inode, struct file *file,
                }
                if (err < 0)
                        return err;
-               if (copy_to_user((snd_rawmidi_status_t *) arg, &status, sizeof(snd_rawmidi_status_t)))
+               if (copy_to_user(argp, &status, sizeof(snd_rawmidi_status_t)))
                        return -EFAULT;
                return 0;
        }
        case SNDRV_RAWMIDI_IOCTL_DROP:
        {
                int val;
-               if (get_user(val, (long *) arg))
+               if (get_user(val, (long __user *) argp))
                        return -EFAULT;
                switch (val) {
                case SNDRV_RAWMIDI_STREAM_OUTPUT:
@@ -760,7 +763,7 @@ static int snd_rawmidi_ioctl(struct inode *inode, struct file *file,
        case SNDRV_RAWMIDI_IOCTL_DRAIN:
        {
                int val;
-               if (get_user(val, (long *) arg))
+               if (get_user(val, (long __user *) argp))
                        return -EFAULT;
                switch (val) {
                case SNDRV_RAWMIDI_STREAM_OUTPUT:
@@ -786,6 +789,7 @@ static int snd_rawmidi_ioctl(struct inode *inode, struct file *file,
 int snd_rawmidi_control_ioctl(snd_card_t * card, snd_ctl_file_t * control,
                              unsigned int cmd, unsigned long arg)
 {
+       void __user *argp = (void __user *)arg;
        unsigned int tmp;
 
        tmp = card->number * SNDRV_RAWMIDI_DEVICES;
@@ -794,7 +798,7 @@ int snd_rawmidi_control_ioctl(snd_card_t * card, snd_ctl_file_t * control,
        {
                int device;
                
-               if (get_user(device, (int *)arg))
+               if (get_user(device, (int __user *)argp))
                        return -EFAULT;
                device = device < 0 ? 0 : device + 1;
                while (device < SNDRV_RAWMIDI_DEVICES) {
@@ -804,7 +808,7 @@ int snd_rawmidi_control_ioctl(snd_card_t * card, snd_ctl_file_t * control,
                }
                if (device == SNDRV_RAWMIDI_DEVICES)
                        device = -1;
-               if (put_user(device, (int *)arg))
+               if (put_user(device, (int __user *)argp))
                        return -EFAULT;
                return 0;
        }
@@ -812,13 +816,13 @@ int snd_rawmidi_control_ioctl(snd_card_t * card, snd_ctl_file_t * control,
        {
                int val;
                
-               if (get_user(val, (int *)arg))
+               if (get_user(val, (int __user *)argp))
                        return -EFAULT;
                control->prefer_rawmidi_subdevice = val;
                return 0;
        }
        case SNDRV_CTL_IOCTL_RAWMIDI_INFO:
-               return snd_rawmidi_info_select_user(card, (snd_rawmidi_info_t *)arg);
+               return snd_rawmidi_info_select_user(card, argp);
        }
        return -ENOIOCTLCMD;
 }
@@ -932,7 +936,7 @@ long snd_rawmidi_kernel_read(snd_rawmidi_substream_t *substream, unsigned char *
        return snd_rawmidi_kernel_read1(substream, buf, count, 1);
 }
 
-static ssize_t snd_rawmidi_read(struct file *file, char *buf, size_t count, loff_t *offset)
+static ssize_t snd_rawmidi_read(struct file *file, char __user *buf, size_t count, loff_t *offset)
 {
        long result;
        int count1;
@@ -1164,7 +1168,7 @@ long snd_rawmidi_kernel_write(snd_rawmidi_substream_t * substream, const unsigne
        return snd_rawmidi_kernel_write1(substream, buf, count, 1);
 }
 
-static ssize_t snd_rawmidi_write(struct file *file, const char *buf, size_t count, loff_t *offset)
+static ssize_t snd_rawmidi_write(struct file *file, const char __user *buf, size_t count, loff_t *offset)
 {
        long result, timeout;
        int count1;
@@ -1637,26 +1641,6 @@ static void __exit alsa_rawmidi_exit(void)
 module_init(alsa_rawmidi_init)
 module_exit(alsa_rawmidi_exit)
 
-#ifndef MODULE
-#ifdef CONFIG_SND_OSSEMUL
-/* format is: snd-rawmidi=midi_map,amidi_map */
-
-static int __init alsa_rawmidi_setup(char *str)
-{
-       static unsigned __initdata nr_dev = 0;
-
-       if (nr_dev >= SNDRV_CARDS)
-               return 0;
-       (void)(get_option(&str,&midi_map[nr_dev]) == 2 &&
-              get_option(&str,&amidi_map[nr_dev]) == 2);
-       nr_dev++;
-       return 1;
-}
-
-__setup("snd-rawmidi=", alsa_rawmidi_setup);
-#endif /* CONFIG_SND_OSSEMUL */
-#endif /* ifndef MODULE */
-
 EXPORT_SYMBOL(snd_rawmidi_output_params);
 EXPORT_SYMBOL(snd_rawmidi_input_params);
 EXPORT_SYMBOL(snd_rawmidi_drop_output);