Commit d361e46c authored by Alexander Viro's avatar Alexander Viro Committed by Linus Torvalds

[PATCH] sparse: rme96xx annotation

rme96xx annotated
parent c55cab84
...@@ -661,13 +661,13 @@ inline int rme96xx_getispace(struct dmabuf * dma, unsigned int hwp) ...@@ -661,13 +661,13 @@ inline int rme96xx_getispace(struct dmabuf * dma, unsigned int hwp)
} }
inline int rme96xx_copyfromuser(struct dmabuf* dma,const char* buffer,int count,int hop) inline int rme96xx_copyfromuser(struct dmabuf* dma,const char __user * buffer,int count,int hop)
{ {
int swptr = dma->writeptr; int swptr = dma->writeptr;
switch (dma->format) { switch (dma->format) {
case AFMT_S32_BLOCKED: case AFMT_S32_BLOCKED:
{ {
char* buf = (char*)buffer; char __user * buf = (char __user *)buffer;
int cnt = count/dma->outchannels; int cnt = count/dma->outchannels;
int i; int i;
for (i=0;i < dma->outchannels;i++) { for (i=0;i < dma->outchannels;i++) {
...@@ -686,7 +686,7 @@ inline int rme96xx_copyfromuser(struct dmabuf* dma,const char* buffer,int count, ...@@ -686,7 +686,7 @@ inline int rme96xx_copyfromuser(struct dmabuf* dma,const char* buffer,int count,
int i,j; int i,j;
int cnt = count/dma->outchannels; int cnt = count/dma->outchannels;
for (i=0;i < dma->outchannels + dma->mono;i++) { for (i=0;i < dma->outchannels + dma->mono;i++) {
short* sbuf = (short*)buffer + i*(!dma->mono); short __user * sbuf = (short __user *)buffer + i*(!dma->mono);
short* hwbuf =(short*) &dma->s->playbuf[(dma->outoffset + i)*RME96xx_DMA_MAX_SAMPLES]; short* hwbuf =(short*) &dma->s->playbuf[(dma->outoffset + i)*RME96xx_DMA_MAX_SAMPLES];
hwbuf+=(swptr>>1); hwbuf+=(swptr>>1);
for (j=0;j<(cnt>>1);j++) { for (j=0;j<(cnt>>1);j++) {
...@@ -710,13 +710,13 @@ inline int rme96xx_copyfromuser(struct dmabuf* dma,const char* buffer,int count, ...@@ -710,13 +710,13 @@ inline int rme96xx_copyfromuser(struct dmabuf* dma,const char* buffer,int count,
} }
/* The count argument is the number of bytes */ /* The count argument is the number of bytes */
inline int rme96xx_copytouser(struct dmabuf* dma,const char* buffer,int count,int hop) inline int rme96xx_copytouser(struct dmabuf* dma,const char __user* buffer,int count,int hop)
{ {
int swptr = dma->readptr; int swptr = dma->readptr;
switch (dma->format) { switch (dma->format) {
case AFMT_S32_BLOCKED: case AFMT_S32_BLOCKED:
{ {
char* buf = (char*)buffer; char __user * buf = (char __user *)buffer;
int cnt = count/dma->inchannels; int cnt = count/dma->inchannels;
int i; int i;
...@@ -736,7 +736,7 @@ inline int rme96xx_copytouser(struct dmabuf* dma,const char* buffer,int count,in ...@@ -736,7 +736,7 @@ inline int rme96xx_copytouser(struct dmabuf* dma,const char* buffer,int count,in
int i,j; int i,j;
int cnt = count/dma->inchannels; int cnt = count/dma->inchannels;
for (i=0;i < dma->inchannels;i++) { for (i=0;i < dma->inchannels;i++) {
short* sbuf = (short*)buffer + i; short __user * sbuf = (short __user *)buffer + i;
short* hwbuf =(short*) &dma->s->recbuf[(dma->inoffset + i)*RME96xx_DMA_MAX_SAMPLES]; short* hwbuf =(short*) &dma->s->recbuf[(dma->inoffset + i)*RME96xx_DMA_MAX_SAMPLES];
hwbuf+=(swptr>>1); hwbuf+=(swptr>>1);
for (j=0;j<(cnt>>1);j++) { for (j=0;j<(cnt>>1);j++) {
...@@ -1121,7 +1121,6 @@ module_exit(cleanup_rme96xx); ...@@ -1121,7 +1121,6 @@ module_exit(cleanup_rme96xx);
static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, unsigned long arg) static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, unsigned long arg)
{ {
struct dmabuf * dma = (struct dmabuf *)file->private_data; struct dmabuf * dma = (struct dmabuf *)file->private_data;
rme96xx_info *s = dma->s; rme96xx_info *s = dma->s;
unsigned long flags; unsigned long flags;
...@@ -1129,6 +1128,8 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, ...@@ -1129,6 +1128,8 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
count_info cinfo; count_info cinfo;
int count; int count;
int val = 0; int val = 0;
void __user *argp = (void __user *)arg;
int __user *p = argp;
VALIDATE_STATE(s); VALIDATE_STATE(s);
...@@ -1136,7 +1137,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, ...@@ -1136,7 +1137,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
switch (cmd) { switch (cmd) {
case OSS_GETVERSION: case OSS_GETVERSION:
return put_user(SOUND_VERSION, (int *)arg); return put_user(SOUND_VERSION, p);
case SNDCTL_DSP_SYNC: case SNDCTL_DSP_SYNC:
#if 0 #if 0
...@@ -1149,14 +1150,14 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, ...@@ -1149,14 +1150,14 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
return 0; return 0;
case SNDCTL_DSP_GETCAPS: case SNDCTL_DSP_GETCAPS:
return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME | DSP_CAP_TRIGGER | DSP_CAP_MMAP, (int *)arg); return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME | DSP_CAP_TRIGGER | DSP_CAP_MMAP, p);
case SNDCTL_DSP_RESET: case SNDCTL_DSP_RESET:
// rme96xx_clearbufs(dma); // rme96xx_clearbufs(dma);
return 0; return 0;
case SNDCTL_DSP_SPEED: case SNDCTL_DSP_SPEED:
if (get_user(val, (int *)arg)) if (get_user(val, p))
return -EFAULT; return -EFAULT;
if (val >= 0) { if (val >= 0) {
/* generally it's not a problem if we change the speed /* generally it's not a problem if we change the speed
...@@ -1195,10 +1196,10 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, ...@@ -1195,10 +1196,10 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
spin_unlock_irqrestore(&s->lock, flags); spin_unlock_irqrestore(&s->lock, flags);
} }
DBG(printk("speed set to %d\n",val)); DBG(printk("speed set to %d\n",val));
return put_user(val, (int *)arg); return put_user(val, p);
case SNDCTL_DSP_STEREO: /* this plays a mono file on two channels */ case SNDCTL_DSP_STEREO: /* this plays a mono file on two channels */
if (get_user(val, (int *)arg)) if (get_user(val, p))
return -EFAULT; return -EFAULT;
if (!val) { if (!val) {
...@@ -1216,7 +1217,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, ...@@ -1216,7 +1217,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
return 0; return 0;
case SNDCTL_DSP_CHANNELS: case SNDCTL_DSP_CHANNELS:
/* remember to check for resonable offset/channel pairs here */ /* remember to check for resonable offset/channel pairs here */
if (get_user(val, (int *)arg)) if (get_user(val, p))
return -EFAULT; return -EFAULT;
if (file->f_mode & FMODE_WRITE) { if (file->f_mode & FMODE_WRITE) {
...@@ -1236,14 +1237,14 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, ...@@ -1236,14 +1237,14 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
dma->mono=0; dma->mono=0;
return put_user(val, (int *)arg); return put_user(val, p);
case SNDCTL_DSP_GETFMTS: /* Returns a mask */ case SNDCTL_DSP_GETFMTS: /* Returns a mask */
return put_user(RME96xx_FMT, (int *)arg); return put_user(RME96xx_FMT, p);
case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/ case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/
DBG(printk("setting to format %x\n",val)); DBG(printk("setting to format %x\n",val));
if (get_user(val, (int *)arg)) if (get_user(val, p))
return -EFAULT; return -EFAULT;
if (val != AFMT_QUERY) { if (val != AFMT_QUERY) {
if (val & RME96xx_FMT) if (val & RME96xx_FMT)
...@@ -1257,7 +1258,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, ...@@ -1257,7 +1258,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
break; break;
} }
} }
return put_user(dma->format, (int *)arg); return put_user(dma->format, p);
case SNDCTL_DSP_POST: case SNDCTL_DSP_POST:
return 0; return 0;
...@@ -1270,10 +1271,10 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, ...@@ -1270,10 +1271,10 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
if (file->f_mode & FMODE_WRITE && s->ctrl & CTRL_DAC2_EN) if (file->f_mode & FMODE_WRITE && s->ctrl & CTRL_DAC2_EN)
val |= PCM_ENABLE_OUTPUT; val |= PCM_ENABLE_OUTPUT;
#endif #endif
return put_user(val, (int *)arg); return put_user(val, p);
case SNDCTL_DSP_SETTRIGGER: case SNDCTL_DSP_SETTRIGGER:
if (get_user(val, (int *)arg)) if (get_user(val, p))
return -EFAULT; return -EFAULT;
#if 0 #if 0
if (file->f_mode & FMODE_READ) { if (file->f_mode & FMODE_READ) {
...@@ -1309,7 +1310,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, ...@@ -1309,7 +1310,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
abinfo.fragstotal = 2; abinfo.fragstotal = 2;
abinfo.fragments = (count > s->fragsize); abinfo.fragments = (count > s->fragsize);
return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0; return copy_to_user(argp, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
case SNDCTL_DSP_GETISPACE: case SNDCTL_DSP_GETISPACE:
if (!(file->f_mode & FMODE_READ)) if (!(file->f_mode & FMODE_READ))
...@@ -1323,7 +1324,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, ...@@ -1323,7 +1324,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
abinfo.bytes = (count*dma->inchannels)>>dma->formatshift; abinfo.bytes = (count*dma->inchannels)>>dma->formatshift;
abinfo.fragstotal = 2; abinfo.fragstotal = 2;
abinfo.fragments = count > s->fragsize; abinfo.fragments = count > s->fragsize;
return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0; return copy_to_user(argp, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
case SNDCTL_DSP_NONBLOCK: case SNDCTL_DSP_NONBLOCK:
file->f_flags |= O_NONBLOCK; file->f_flags |= O_NONBLOCK;
...@@ -1339,7 +1340,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, ...@@ -1339,7 +1340,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
if (count < 0) if (count < 0)
count += s->fragsize<<1; count += s->fragsize<<1;
return put_user(count, (int *)arg); return put_user(count, p);
/* check out how to use mmaped mode (can only be blocked !!!) */ /* check out how to use mmaped mode (can only be blocked !!!) */
...@@ -1359,7 +1360,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, ...@@ -1359,7 +1360,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
dma->readptr &= s->fragsize<<1; dma->readptr &= s->fragsize<<1;
spin_unlock_irqrestore(&s->lock,flags); spin_unlock_irqrestore(&s->lock,flags);
if (copy_to_user((void *)arg, &cinfo, sizeof(cinfo))) if (copy_to_user(argp, &cinfo, sizeof(cinfo)))
return -EFAULT; return -EFAULT;
return 0; return 0;
...@@ -1378,14 +1379,14 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, ...@@ -1378,14 +1379,14 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
if (dma->mmapped) if (dma->mmapped)
dma->writeptr &= s->fragsize<<1; dma->writeptr &= s->fragsize<<1;
spin_unlock_irqrestore(&s->lock,flags); spin_unlock_irqrestore(&s->lock,flags);
if (copy_to_user((void *)arg, &cinfo, sizeof(cinfo))) if (copy_to_user(argp, &cinfo, sizeof(cinfo)))
return -EFAULT; return -EFAULT;
return 0; return 0;
case SNDCTL_DSP_GETBLKSIZE: case SNDCTL_DSP_GETBLKSIZE:
return put_user(s->fragsize, (int *)arg); return put_user(s->fragsize, p);
case SNDCTL_DSP_SETFRAGMENT: case SNDCTL_DSP_SETFRAGMENT:
if (get_user(val, (int *)arg)) if (get_user(val, p))
return -EFAULT; return -EFAULT;
val&=0xffff; val&=0xffff;
val -= 7; val -= 7;
...@@ -1399,7 +1400,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, ...@@ -1399,7 +1400,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
if ((file->f_mode & FMODE_READ && s->dma_adc.subdivision) || if ((file->f_mode & FMODE_READ && s->dma_adc.subdivision) ||
(file->f_mode & FMODE_WRITE && s->dma_dac2.subdivision)) (file->f_mode & FMODE_WRITE && s->dma_dac2.subdivision))
return -EINVAL; return -EINVAL;
if (get_user(val, (int *)arg)) if (get_user(val, p))
return -EFAULT; return -EFAULT;
if (val != 1 && val != 2 && val != 4) if (val != 1 && val != 2 && val != 4)
return -EINVAL; return -EINVAL;
...@@ -1413,10 +1414,10 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, ...@@ -1413,10 +1414,10 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
case SOUND_PCM_READ_RATE: case SOUND_PCM_READ_RATE:
/* HP20020201 */ /* HP20020201 */
s->rate = rme96xx_get_sample_rate_status(s); s->rate = rme96xx_get_sample_rate_status(s);
return put_user(s->rate, (int *)arg); return put_user(s->rate, p);
case SOUND_PCM_READ_CHANNELS: case SOUND_PCM_READ_CHANNELS:
return put_user(dma->outchannels, (int *)arg); return put_user(dma->outchannels, p);
case SOUND_PCM_READ_BITS: case SOUND_PCM_READ_BITS:
switch (dma->format) { switch (dma->format) {
...@@ -1427,7 +1428,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd, ...@@ -1427,7 +1428,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
val = 16; val = 16;
break; break;
} }
return put_user(val, (int *)arg); return put_user(val, p);
case SOUND_PCM_WRITE_FILTER: case SOUND_PCM_WRITE_FILTER:
case SNDCTL_DSP_SETSYNCRO: case SNDCTL_DSP_SETSYNCRO:
...@@ -1529,7 +1530,7 @@ static int rme96xx_release(struct inode *in, struct file *file) ...@@ -1529,7 +1530,7 @@ static int rme96xx_release(struct inode *in, struct file *file)
} }
static ssize_t rme96xx_write(struct file *file, const char *buffer, size_t count, loff_t *ppos) static ssize_t rme96xx_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos)
{ {
struct dmabuf *dma = (struct dmabuf *)file->private_data; struct dmabuf *dma = (struct dmabuf *)file->private_data;
ssize_t ret = 0; ssize_t ret = 0;
...@@ -1597,7 +1598,7 @@ static ssize_t rme96xx_write(struct file *file, const char *buffer, size_t count ...@@ -1597,7 +1598,7 @@ static ssize_t rme96xx_write(struct file *file, const char *buffer, size_t count
return ret; return ret;
} }
static ssize_t rme96xx_read(struct file *file, char *buffer, size_t count, loff_t *ppos) static ssize_t rme96xx_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos)
{ {
struct dmabuf *dma = (struct dmabuf *)file->private_data; struct dmabuf *dma = (struct dmabuf *)file->private_data;
ssize_t ret = 0; ssize_t ret = 0;
...@@ -1793,6 +1794,8 @@ static int rme96xx_mixer_ioctl(struct inode *inode, struct file *file, unsigned ...@@ -1793,6 +1794,8 @@ static int rme96xx_mixer_ioctl(struct inode *inode, struct file *file, unsigned
rme96xx_info *s = (rme96xx_info *)file->private_data; rme96xx_info *s = (rme96xx_info *)file->private_data;
u32 status; u32 status;
int spdifrate; int spdifrate;
void __user *argp = (void __user *)arg;
int __user *p = argp;
status = readl(s->iobase + RME96xx_status_register); status = readl(s->iobase + RME96xx_status_register);
/* hack to convert rev 1.5 SPDIF rate to "crystalrate" format HP 20020201 */ /* hack to convert rev 1.5 SPDIF rate to "crystalrate" format HP 20020201 */
...@@ -1802,7 +1805,7 @@ static int rme96xx_mixer_ioctl(struct inode *inode, struct file *file, unsigned ...@@ -1802,7 +1805,7 @@ static int rme96xx_mixer_ioctl(struct inode *inode, struct file *file, unsigned
VALIDATE_STATE(s); VALIDATE_STATE(s);
if (cmd == SOUND_MIXER_PRIVATE1) { if (cmd == SOUND_MIXER_PRIVATE1) {
rme_mixer mixer; rme_mixer mixer;
if (copy_from_user(&mixer,(void*)arg,sizeof(mixer))) if (copy_from_user(&mixer,argp,sizeof(mixer)))
return -EFAULT; return -EFAULT;
mixer.devnr &= RME96xx_MASK_DEVS; mixer.devnr &= RME96xx_MASK_DEVS;
...@@ -1825,14 +1828,14 @@ static int rme96xx_mixer_ioctl(struct inode *inode, struct file *file, unsigned ...@@ -1825,14 +1828,14 @@ static int rme96xx_mixer_ioctl(struct inode *inode, struct file *file, unsigned
mixer.o_offset = s->dma[mixer.devnr].outoffset; mixer.o_offset = s->dma[mixer.devnr].outoffset;
mixer.i_offset = s->dma[mixer.devnr].inoffset; mixer.i_offset = s->dma[mixer.devnr].inoffset;
return copy_to_user((void *)arg, &mixer, sizeof(mixer)) ? -EFAULT : 0; return copy_to_user(argp, &mixer, sizeof(mixer)) ? -EFAULT : 0;
} }
if (cmd == SOUND_MIXER_PRIVATE2) { if (cmd == SOUND_MIXER_PRIVATE2) {
return put_user(status, (int *)arg); return put_user(status, p);
} }
if (cmd == SOUND_MIXER_PRIVATE3) { if (cmd == SOUND_MIXER_PRIVATE3) {
u32 control; u32 control;
if (copy_from_user(&control,(void*)arg,sizeof(control))) if (copy_from_user(&control,argp,sizeof(control)))
return -EFAULT; return -EFAULT;
if (file->f_mode & FMODE_WRITE) { if (file->f_mode & FMODE_WRITE) {
s->control_register &= ~RME96xx_mixer_allowed; s->control_register &= ~RME96xx_mixer_allowed;
...@@ -1840,7 +1843,7 @@ static int rme96xx_mixer_ioctl(struct inode *inode, struct file *file, unsigned ...@@ -1840,7 +1843,7 @@ static int rme96xx_mixer_ioctl(struct inode *inode, struct file *file, unsigned
writel(control,s->iobase + RME96xx_control_register); writel(control,s->iobase + RME96xx_control_register);
} }
return put_user(s->control_register, (int *)arg); return put_user(s->control_register, p);
} }
return -1; return -1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment