VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / sound / oss / gus_wave.c
index 1aadc7e..ed7333c 100644 (file)
@@ -978,6 +978,13 @@ int __init gus_wave_detect(int baseaddr)
        unsigned long   loc;
        unsigned char   val;
 
+       if (!request_region(baseaddr, 16, "GUS"))
+               return 0;
+       if (!request_region(baseaddr + 0x100, 12, "GUS")) { /* 0x10c-> is MAX */
+               release_region(baseaddr, 16);
+               return 0;
+       }
+
        gus_base = baseaddr;
 
        gus_write8(0x4c, 0);    /* Reset GF1 */
@@ -1015,8 +1022,11 @@ int __init gus_wave_detect(int baseaddr)
 
        /* See if there is first block there.... */
        gus_poke(0L, 0xaa);
-       if (gus_peek(0L) != 0xaa)
-               return (0);
+       if (gus_peek(0L) != 0xaa) {
+               release_region(baseaddr + 0x100, 12);
+               release_region(baseaddr, 16);
+               return 0;
+       }
 
        /* Now zero it out so that I can check for mirroring .. */
        gus_poke(0L, 0x00);
@@ -1045,7 +1055,7 @@ int __init gus_wave_detect(int baseaddr)
        return 1;
 }
 
-static int guswave_ioctl(int dev, unsigned int cmd, caddr_t arg)
+static int guswave_ioctl(int dev, unsigned int cmd, void __user *arg)
 {
 
        switch (cmd) 
@@ -1622,7 +1632,7 @@ static void guswave_close(int dev)
                DMAbuf_close_dma(gus_devnum);
 }
 
-static int guswave_load_patch(int dev, int format, const char *addr,
+static int guswave_load_patch(int dev, int format, const char __user *addr,
                   int offs, int count, int pmgr_flag)
 {
        struct patch_info patch;
@@ -1780,7 +1790,7 @@ static int guswave_load_patch(int dev, int format, const char *addr,
 
                        for (i = 0; i < blk_sz; i++)
                        {
-                               get_user(*(unsigned char *) &data, (unsigned char *) &((addr)[sizeof_patch + i]));
+                               get_user(*(unsigned char *) &data, (unsigned char __user *) &((addr)[sizeof_patch + i]));
                                if (patch.mode & WAVE_UNSIGNED)
                                        if (!(patch.mode & WAVE_16_BITS) || (i & 0x01))
                                                data ^= 0x80;   /* Convert to signed */
@@ -2082,14 +2092,14 @@ static int gus_audio_set_bits(int bits)
        return bits;
 }
 
-static int gus_audio_ioctl(int dev, unsigned int cmd, caddr_t arg)
+static int gus_audio_ioctl(int dev, unsigned int cmd, void __user *arg)
 {
        int val;
 
        switch (cmd) 
        {
                case SOUND_PCM_WRITE_RATE:
-                       if (get_user(val, (int *)arg))
+                       if (get_user(val, (int __user*)arg))
                                return -EFAULT;
                        val = gus_audio_set_speed(val);
                        break;
@@ -2099,13 +2109,13 @@ static int gus_audio_ioctl(int dev, unsigned int cmd, caddr_t arg)
                        break;
 
                case SNDCTL_DSP_STEREO:
-                       if (get_user(val, (int *)arg))
+                       if (get_user(val, (int __user *)arg))
                                return -EFAULT;
                        val = gus_audio_set_channels(val + 1) - 1;
                        break;
 
                case SOUND_PCM_WRITE_CHANNELS:
-                       if (get_user(val, (int *)arg))
+                       if (get_user(val, (int __user *)arg))
                                return -EFAULT;
                        val = gus_audio_set_channels(val);
                        break;
@@ -2115,7 +2125,7 @@ static int gus_audio_ioctl(int dev, unsigned int cmd, caddr_t arg)
                        break;
                
                case SNDCTL_DSP_SETFMT:
-                       if (get_user(val, (int *)arg))
+                       if (get_user(val, (int __user *)arg))
                                return -EFAULT;
                        val = gus_audio_set_bits(val);
                        break;
@@ -2131,7 +2141,7 @@ static int gus_audio_ioctl(int dev, unsigned int cmd, caddr_t arg)
                default:
                        return -EINVAL;
        }
-       return put_user(val, (int *)arg);
+       return put_user(val, (int __user *)arg);
 }
 
 static void gus_audio_reset(int dev)
@@ -2687,19 +2697,19 @@ static void set_input_volumes(void)
 #define MIX_DEVS       (SOUND_MASK_MIC|SOUND_MASK_LINE| \
                         SOUND_MASK_SYNTH|SOUND_MASK_PCM)
 
-int gus_default_mixer_ioctl(int dev, unsigned int cmd, caddr_t arg)
+int gus_default_mixer_ioctl(int dev, unsigned int cmd, void __user *arg)
 {
        int vol, val;
 
        if (((cmd >> 8) & 0xff) != 'M')
                return -EINVAL;
 
-       if (!access_ok(VERIFY_WRITE, (int *)arg, sizeof(int)))
+       if (!access_ok(VERIFY_WRITE, arg, sizeof(int)))
                return -EFAULT;
 
        if (_SIOC_DIR(cmd) & _SIOC_WRITE) 
        {
-               if (__get_user(val, (int *) arg))
+               if (__get_user(val, (int __user *) arg))
                        return -EFAULT;
 
                switch (cmd & 0xff) 
@@ -2810,7 +2820,7 @@ int gus_default_mixer_ioctl(int dev, unsigned int cmd, caddr_t arg)
                                return -EINVAL;
                }
        }
-       return __put_user(val, (int *)arg);
+       return __put_user(val, (int __user *)arg);
 }
 
 static struct mixer_operations gus_mixer_operations =