aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
Diffstat (limited to 'sound')
-rw-r--r--sound/oss/au1550_ac97.c54
-rw-r--r--sound/oss/dmasound/dmasound_core.c35
-rw-r--r--sound/oss/msnd_pinnacle.c15
-rw-r--r--sound/oss/sh_dac_audio.c18
-rw-r--r--sound/oss/swarm_cs4297a.c24
-rw-r--r--sound/oss/vwsnd.c24
6 files changed, 119 insertions, 51 deletions
diff --git a/sound/oss/au1550_ac97.c b/sound/oss/au1550_ac97.c
index fb913e568de1..0fd256ceea6b 100644
--- a/sound/oss/au1550_ac97.c
+++ b/sound/oss/au1550_ac97.c
@@ -827,22 +827,26 @@ mixdev_ioctl(struct ac97_codec *codec, unsigned int cmd,
827 return codec->mixer_ioctl(codec, cmd, arg); 827 return codec->mixer_ioctl(codec, cmd, arg);
828} 828}
829 829
830static int 830static long
831au1550_ioctl_mixdev(struct inode *inode, struct file *file, 831au1550_ioctl_mixdev(struct file *file, unsigned int cmd, unsigned long arg)
832 unsigned int cmd, unsigned long arg)
833{ 832{
834 struct au1550_state *s = (struct au1550_state *)file->private_data; 833 struct au1550_state *s = (struct au1550_state *)file->private_data;
835 struct ac97_codec *codec = s->codec; 834 struct ac97_codec *codec = s->codec;
835 int ret;
836
837 lock_kernel();
838 ret = mixdev_ioctl(codec, cmd, arg);
839 unlock_kernel();
836 840
837 return mixdev_ioctl(codec, cmd, arg); 841 return ret;
838} 842}
839 843
840static /*const */ struct file_operations au1550_mixer_fops = { 844static /*const */ struct file_operations au1550_mixer_fops = {
841 owner:THIS_MODULE, 845 .owner = THIS_MODULE,
842 llseek:au1550_llseek, 846 .llseek = au1550_llseek,
843 ioctl:au1550_ioctl_mixdev, 847 .unlocked_ioctl = au1550_ioctl_mixdev,
844 open:au1550_open_mixdev, 848 .open = au1550_open_mixdev,
845 release:au1550_release_mixdev, 849 .release = au1550_release_mixdev,
846}; 850};
847 851
848static int 852static int
@@ -1346,8 +1350,7 @@ dma_count_done(struct dmabuf *db)
1346 1350
1347 1351
1348static int 1352static int
1349au1550_ioctl(struct inode *inode, struct file *file, unsigned int cmd, 1353au1550_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
1350 unsigned long arg)
1351{ 1354{
1352 struct au1550_state *s = (struct au1550_state *)file->private_data; 1355 struct au1550_state *s = (struct au1550_state *)file->private_data;
1353 unsigned long flags; 1356 unsigned long flags;
@@ -1783,6 +1786,17 @@ au1550_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
1783 return mixdev_ioctl(s->codec, cmd, arg); 1786 return mixdev_ioctl(s->codec, cmd, arg);
1784} 1787}
1785 1788
1789static long
1790au1550_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
1791{
1792 int ret;
1793
1794 lock_kernel();
1795 ret = au1550_ioctl(file, cmd, arg);
1796 unlock_kernel();
1797
1798 return ret;
1799}
1786 1800
1787static int 1801static int
1788au1550_open(struct inode *inode, struct file *file) 1802au1550_open(struct inode *inode, struct file *file)
@@ -1893,15 +1907,15 @@ au1550_release(struct inode *inode, struct file *file)
1893} 1907}
1894 1908
1895static /*const */ struct file_operations au1550_audio_fops = { 1909static /*const */ struct file_operations au1550_audio_fops = {
1896 owner: THIS_MODULE, 1910 .owner = THIS_MODULE,
1897 llseek: au1550_llseek, 1911 .llseek = au1550_llseek,
1898 read: au1550_read, 1912 .read = au1550_read,
1899 write: au1550_write, 1913 .write = au1550_write,
1900 poll: au1550_poll, 1914 .poll = au1550_poll,
1901 ioctl: au1550_ioctl, 1915 .unlocked_ioctl = au1550_unlocked_ioctl,
1902 mmap: au1550_mmap, 1916 .mmap = au1550_mmap,
1903 open: au1550_open, 1917 .open = au1550_open,
1904 release: au1550_release, 1918 .release = au1550_release,
1905}; 1919};
1906 1920
1907MODULE_AUTHOR("Advanced Micro Devices (AMD), dan@embeddededge.com"); 1921MODULE_AUTHOR("Advanced Micro Devices (AMD), dan@embeddededge.com");
diff --git a/sound/oss/dmasound/dmasound_core.c b/sound/oss/dmasound/dmasound_core.c
index 5a4f38c0f480..6ecd41abb066 100644
--- a/sound/oss/dmasound/dmasound_core.c
+++ b/sound/oss/dmasound/dmasound_core.c
@@ -341,8 +341,8 @@ static int mixer_release(struct inode *inode, struct file *file)
341 unlock_kernel(); 341 unlock_kernel();
342 return 0; 342 return 0;
343} 343}
344static int mixer_ioctl(struct inode *inode, struct file *file, u_int cmd, 344
345 u_long arg) 345static int mixer_ioctl(struct file *file, u_int cmd, u_long arg)
346{ 346{
347 if (_SIOC_DIR(cmd) & _SIOC_WRITE) 347 if (_SIOC_DIR(cmd) & _SIOC_WRITE)
348 mixer.modify_counter++; 348 mixer.modify_counter++;
@@ -366,11 +366,22 @@ static int mixer_ioctl(struct inode *inode, struct file *file, u_int cmd,
366 return -EINVAL; 366 return -EINVAL;
367} 367}
368 368
369static long mixer_unlocked_ioctl(struct file *file, u_int cmd, u_long arg)
370{
371 int ret;
372
373 lock_kernel();
374 ret = mixer_ioctl(file, cmd, arg);
375 unlock_kernel();
376
377 return ret;
378}
379
369static const struct file_operations mixer_fops = 380static const struct file_operations mixer_fops =
370{ 381{
371 .owner = THIS_MODULE, 382 .owner = THIS_MODULE,
372 .llseek = no_llseek, 383 .llseek = no_llseek,
373 .ioctl = mixer_ioctl, 384 .unlocked_ioctl = mixer_unlocked_ioctl,
374 .open = mixer_open, 385 .open = mixer_open,
375 .release = mixer_release, 386 .release = mixer_release,
376}; 387};
@@ -963,8 +974,7 @@ printk("dmasound_core: tried to set_queue_frags on a locked queue\n") ;
963 return 0 ; 974 return 0 ;
964} 975}
965 976
966static int sq_ioctl(struct inode *inode, struct file *file, u_int cmd, 977static int sq_ioctl(struct file *file, u_int cmd, u_long arg)
967 u_long arg)
968{ 978{
969 int val, result; 979 int val, result;
970 u_long fmt; 980 u_long fmt;
@@ -1122,18 +1132,29 @@ static int sq_ioctl(struct inode *inode, struct file *file, u_int cmd,
1122 return IOCTL_OUT(arg,val); 1132 return IOCTL_OUT(arg,val);
1123 1133
1124 default: 1134 default:
1125 return mixer_ioctl(inode, file, cmd, arg); 1135 return mixer_ioctl(file, cmd, arg);
1126 } 1136 }
1127 return -EINVAL; 1137 return -EINVAL;
1128} 1138}
1129 1139
1140static long sq_unlocked_ioctl(struct file *file, u_int cmd, u_long arg)
1141{
1142 int ret;
1143
1144 lock_kernel();
1145 ret = sq_ioctl(file, cmd, arg);
1146 unlock_kernel();
1147
1148 return ret;
1149}
1150
1130static const struct file_operations sq_fops = 1151static const struct file_operations sq_fops =
1131{ 1152{
1132 .owner = THIS_MODULE, 1153 .owner = THIS_MODULE,
1133 .llseek = no_llseek, 1154 .llseek = no_llseek,
1134 .write = sq_write, 1155 .write = sq_write,
1135 .poll = sq_poll, 1156 .poll = sq_poll,
1136 .ioctl = sq_ioctl, 1157 .unlocked_ioctl = sq_unlocked_ioctl,
1137 .open = sq_open, 1158 .open = sq_open,
1138 .release = sq_release, 1159 .release = sq_release,
1139}; 1160};
diff --git a/sound/oss/msnd_pinnacle.c b/sound/oss/msnd_pinnacle.c
index 153d822bf9a3..9ffd29f32aa5 100644
--- a/sound/oss/msnd_pinnacle.c
+++ b/sound/oss/msnd_pinnacle.c
@@ -639,21 +639,26 @@ static int mixer_ioctl(unsigned int cmd, unsigned long arg)
639 return -EINVAL; 639 return -EINVAL;
640} 640}
641 641
642static int dev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) 642static long dev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
643{ 643{
644 int minor = iminor(inode); 644 int minor = iminor(inode);
645 int ret;
645 646
646 if (cmd == OSS_GETVERSION) { 647 if (cmd == OSS_GETVERSION) {
647 int sound_version = SOUND_VERSION; 648 int sound_version = SOUND_VERSION;
648 return put_user(sound_version, (int __user *)arg); 649 return put_user(sound_version, (int __user *)arg);
649 } 650 }
650 651
652 ret = -EINVAL;
653
654 lock_kernel();
651 if (minor == dev.dsp_minor) 655 if (minor == dev.dsp_minor)
652 return dsp_ioctl(file, cmd, arg); 656 ret = dsp_ioctl(file, cmd, arg);
653 else if (minor == dev.mixer_minor) 657 else if (minor == dev.mixer_minor)
654 return mixer_ioctl(cmd, arg); 658 ret = mixer_ioctl(cmd, arg);
659 unlock_kernel();
655 660
656 return -EINVAL; 661 return ret;
657} 662}
658 663
659static void dsp_write_flush(void) 664static void dsp_write_flush(void)
@@ -1109,7 +1114,7 @@ static const struct file_operations dev_fileops = {
1109 .owner = THIS_MODULE, 1114 .owner = THIS_MODULE,
1110 .read = dev_read, 1115 .read = dev_read,
1111 .write = dev_write, 1116 .write = dev_write,
1112 .ioctl = dev_ioctl, 1117 .unlocked_ioctl = dev_ioctl,
1113 .open = dev_open, 1118 .open = dev_open,
1114 .release = dev_release, 1119 .release = dev_release,
1115}; 1120};
diff --git a/sound/oss/sh_dac_audio.c b/sound/oss/sh_dac_audio.c
index 8f0be4053a5a..fdb58eb83d4e 100644
--- a/sound/oss/sh_dac_audio.c
+++ b/sound/oss/sh_dac_audio.c
@@ -15,6 +15,7 @@
15#include <linux/linkage.h> 15#include <linux/linkage.h>
16#include <linux/slab.h> 16#include <linux/slab.h>
17#include <linux/fs.h> 17#include <linux/fs.h>
18#include <linux/smp_lock.h>
18#include <linux/sound.h> 19#include <linux/sound.h>
19#include <linux/smp_lock.h> 20#include <linux/smp_lock.h>
20#include <linux/soundcard.h> 21#include <linux/soundcard.h>
@@ -93,7 +94,7 @@ static void dac_audio_set_rate(void)
93 wakeups_per_second = ktime_set(0, 1000000000 / rate); 94 wakeups_per_second = ktime_set(0, 1000000000 / rate);
94} 95}
95 96
96static int dac_audio_ioctl(struct inode *inode, struct file *file, 97static int dac_audio_ioctl(struct file *file,
97 unsigned int cmd, unsigned long arg) 98 unsigned int cmd, unsigned long arg)
98{ 99{
99 int val; 100 int val;
@@ -159,6 +160,17 @@ static int dac_audio_ioctl(struct inode *inode, struct file *file,
159 return -EINVAL; 160 return -EINVAL;
160} 161}
161 162
163static long dac_audio_unlocked_ioctl(struct file *file, u_int cmd, u_long arg)
164{
165 int ret;
166
167 lock_kernel();
168 ret = dac_audio_ioctl(file, cmd, arg);
169 unlock_kernel();
170
171 return ret;
172}
173
162static ssize_t dac_audio_write(struct file *file, const char *buf, size_t count, 174static ssize_t dac_audio_write(struct file *file, const char *buf, size_t count,
163 loff_t * ppos) 175 loff_t * ppos)
164{ 176{
@@ -242,8 +254,8 @@ static int dac_audio_release(struct inode *inode, struct file *file)
242 254
243const struct file_operations dac_audio_fops = { 255const struct file_operations dac_audio_fops = {
244 .read = dac_audio_read, 256 .read = dac_audio_read,
245 .write = dac_audio_write, 257 .write = dac_audio_write,
246 .ioctl = dac_audio_ioctl, 258 .unlocked_ioctl = dac_audio_unlocked_ioctl,
247 .open = dac_audio_open, 259 .open = dac_audio_open,
248 .release = dac_audio_release, 260 .release = dac_audio_release,
249}; 261};
diff --git a/sound/oss/swarm_cs4297a.c b/sound/oss/swarm_cs4297a.c
index 34b0838793a6..b15840ad2527 100644
--- a/sound/oss/swarm_cs4297a.c
+++ b/sound/oss/swarm_cs4297a.c
@@ -1571,11 +1571,15 @@ static int cs4297a_release_mixdev(struct inode *inode, struct file *file)
1571} 1571}
1572 1572
1573 1573
1574static int cs4297a_ioctl_mixdev(struct inode *inode, struct file *file, 1574static int cs4297a_ioctl_mixdev(struct file *file,
1575 unsigned int cmd, unsigned long arg) 1575 unsigned int cmd, unsigned long arg)
1576{ 1576{
1577 return mixer_ioctl((struct cs4297a_state *) file->private_data, cmd, 1577 int ret;
1578 lock_kernel();
1579 ret = mixer_ioctl((struct cs4297a_state *) file->private_data, cmd,
1578 arg); 1580 arg);
1581 unlock_kernel();
1582 return ret;
1579} 1583}
1580 1584
1581 1585
@@ -1585,7 +1589,7 @@ static int cs4297a_ioctl_mixdev(struct inode *inode, struct file *file,
1585static const struct file_operations cs4297a_mixer_fops = { 1589static const struct file_operations cs4297a_mixer_fops = {
1586 .owner = THIS_MODULE, 1590 .owner = THIS_MODULE,
1587 .llseek = no_llseek, 1591 .llseek = no_llseek,
1588 .ioctl = cs4297a_ioctl_mixdev, 1592 .unlocked_ioctl = cs4297a_ioctl_mixdev,
1589 .open = cs4297a_open_mixdev, 1593 .open = cs4297a_open_mixdev,
1590 .release = cs4297a_release_mixdev, 1594 .release = cs4297a_release_mixdev,
1591}; 1595};
@@ -1949,7 +1953,7 @@ static int cs4297a_mmap(struct file *file, struct vm_area_struct *vma)
1949} 1953}
1950 1954
1951 1955
1952static int cs4297a_ioctl(struct inode *inode, struct file *file, 1956static int cs4297a_ioctl(struct file *file,
1953 unsigned int cmd, unsigned long arg) 1957 unsigned int cmd, unsigned long arg)
1954{ 1958{
1955 struct cs4297a_state *s = 1959 struct cs4297a_state *s =
@@ -2342,6 +2346,16 @@ static int cs4297a_ioctl(struct inode *inode, struct file *file,
2342 return mixer_ioctl(s, cmd, arg); 2346 return mixer_ioctl(s, cmd, arg);
2343} 2347}
2344 2348
2349static long cs4297a_unlocked_ioctl(struct file *file, u_int cmd, u_long arg)
2350{
2351 int ret;
2352
2353 lock_kernel();
2354 ret = cs4297a_ioctl(file, cmd, arg);
2355 unlock_kernel();
2356
2357 return ret;
2358}
2345 2359
2346static int cs4297a_release(struct inode *inode, struct file *file) 2360static int cs4297a_release(struct inode *inode, struct file *file)
2347{ 2361{
@@ -2511,7 +2525,7 @@ static const struct file_operations cs4297a_audio_fops = {
2511 .read = cs4297a_read, 2525 .read = cs4297a_read,
2512 .write = cs4297a_write, 2526 .write = cs4297a_write,
2513 .poll = cs4297a_poll, 2527 .poll = cs4297a_poll,
2514 .ioctl = cs4297a_ioctl, 2528 .unlocked_ioctl = cs4297a_unlocked_ioctl,
2515 .mmap = cs4297a_mmap, 2529 .mmap = cs4297a_mmap,
2516 .open = cs4297a_open, 2530 .open = cs4297a_open,
2517 .release = cs4297a_release, 2531 .release = cs4297a_release,
diff --git a/sound/oss/vwsnd.c b/sound/oss/vwsnd.c
index 99c94c48558c..8cd73cdd88af 100644
--- a/sound/oss/vwsnd.c
+++ b/sound/oss/vwsnd.c
@@ -2429,8 +2429,7 @@ static unsigned int vwsnd_audio_poll(struct file *file,
2429 return mask; 2429 return mask;
2430} 2430}
2431 2431
2432static int vwsnd_audio_do_ioctl(struct inode *inode, 2432static int vwsnd_audio_do_ioctl(struct file *file,
2433 struct file *file,
2434 unsigned int cmd, 2433 unsigned int cmd,
2435 unsigned long arg) 2434 unsigned long arg)
2436{ 2435{
@@ -2446,8 +2445,8 @@ static int vwsnd_audio_do_ioctl(struct inode *inode,
2446 int ival; 2445 int ival;
2447 2446
2448 2447
2449 DBGEV("(inode=0x%p, file=0x%p, cmd=0x%x, arg=0x%lx)\n", 2448 DBGEV("(file=0x%p, cmd=0x%x, arg=0x%lx)\n",
2450 inode, file, cmd, arg); 2449 file, cmd, arg);
2451 switch (cmd) { 2450 switch (cmd) {
2452 case OSS_GETVERSION: /* _SIOR ('M', 118, int) */ 2451 case OSS_GETVERSION: /* _SIOR ('M', 118, int) */
2453 DBGX("OSS_GETVERSION\n"); 2452 DBGX("OSS_GETVERSION\n");
@@ -2885,17 +2884,19 @@ static int vwsnd_audio_do_ioctl(struct inode *inode,
2885 return -EINVAL; 2884 return -EINVAL;
2886} 2885}
2887 2886
2888static int vwsnd_audio_ioctl(struct inode *inode, 2887static long vwsnd_audio_ioctl(struct file *file,
2889 struct file *file,
2890 unsigned int cmd, 2888 unsigned int cmd,
2891 unsigned long arg) 2889 unsigned long arg)
2892{ 2890{
2893 vwsnd_dev_t *devc = (vwsnd_dev_t *) file->private_data; 2891 vwsnd_dev_t *devc = (vwsnd_dev_t *) file->private_data;
2894 int ret; 2892 int ret;
2895 2893
2894 lock_kernel();
2896 mutex_lock(&devc->io_mutex); 2895 mutex_lock(&devc->io_mutex);
2897 ret = vwsnd_audio_do_ioctl(inode, file, cmd, arg); 2896 ret = vwsnd_audio_do_ioctl(file, cmd, arg);
2898 mutex_unlock(&devc->io_mutex); 2897 mutex_unlock(&devc->io_mutex);
2898 unlock_kernel();
2899
2899 return ret; 2900 return ret;
2900} 2901}
2901 2902
@@ -3049,7 +3050,7 @@ static const struct file_operations vwsnd_audio_fops = {
3049 .read = vwsnd_audio_read, 3050 .read = vwsnd_audio_read,
3050 .write = vwsnd_audio_write, 3051 .write = vwsnd_audio_write,
3051 .poll = vwsnd_audio_poll, 3052 .poll = vwsnd_audio_poll,
3052 .ioctl = vwsnd_audio_ioctl, 3053 .unlocked_ioctl = vwsnd_audio_ioctl,
3053 .mmap = vwsnd_audio_mmap, 3054 .mmap = vwsnd_audio_mmap,
3054 .open = vwsnd_audio_open, 3055 .open = vwsnd_audio_open,
3055 .release = vwsnd_audio_release, 3056 .release = vwsnd_audio_release,
@@ -3211,8 +3212,7 @@ static int mixer_write_ioctl(vwsnd_dev_t *devc, unsigned int nr, void __user *ar
3211 3212
3212/* This is the ioctl entry to the mixer driver. */ 3213/* This is the ioctl entry to the mixer driver. */
3213 3214
3214static int vwsnd_mixer_ioctl(struct inode *ioctl, 3215static long vwsnd_mixer_ioctl(struct file *file,
3215 struct file *file,
3216 unsigned int cmd, 3216 unsigned int cmd,
3217 unsigned long arg) 3217 unsigned long arg)
3218{ 3218{
@@ -3223,6 +3223,7 @@ static int vwsnd_mixer_ioctl(struct inode *ioctl,
3223 3223
3224 DBGEV("(devc=0x%p, cmd=0x%x, arg=0x%lx)\n", devc, cmd, arg); 3224 DBGEV("(devc=0x%p, cmd=0x%x, arg=0x%lx)\n", devc, cmd, arg);
3225 3225
3226 lock_kernel();
3226 mutex_lock(&devc->mix_mutex); 3227 mutex_lock(&devc->mix_mutex);
3227 { 3228 {
3228 if ((cmd & ~nrmask) == MIXER_READ(0)) 3229 if ((cmd & ~nrmask) == MIXER_READ(0))
@@ -3233,13 +3234,14 @@ static int vwsnd_mixer_ioctl(struct inode *ioctl,
3233 retval = -EINVAL; 3234 retval = -EINVAL;
3234 } 3235 }
3235 mutex_unlock(&devc->mix_mutex); 3236 mutex_unlock(&devc->mix_mutex);
3237 unlock_kernel();
3236 return retval; 3238 return retval;
3237} 3239}
3238 3240
3239static const struct file_operations vwsnd_mixer_fops = { 3241static const struct file_operations vwsnd_mixer_fops = {
3240 .owner = THIS_MODULE, 3242 .owner = THIS_MODULE,
3241 .llseek = no_llseek, 3243 .llseek = no_llseek,
3242 .ioctl = vwsnd_mixer_ioctl, 3244 .unlocked_ioctl = vwsnd_mixer_ioctl,
3243 .open = vwsnd_mixer_open, 3245 .open = vwsnd_mixer_open,
3244 .release = vwsnd_mixer_release, 3246 .release = vwsnd_mixer_release,
3245}; 3247};