Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
d361e46c
Commit
d361e46c
authored
Jun 03, 2004
by
Alexander Viro
Committed by
Linus Torvalds
Jun 03, 2004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] sparse: rme96xx annotation
rme96xx annotated
parent
c55cab84
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
40 additions
and
37 deletions
+40
-37
sound/oss/rme96xx.c
sound/oss/rme96xx.c
+40
-37
No files found.
sound/oss/rme96xx.c
View file @
d361e46c
...
...
@@ -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
;
switch
(
dma
->
format
)
{
case
AFMT_S32_BLOCKED
:
{
char
*
buf
=
(
char
*
)
buffer
;
char
__user
*
buf
=
(
char
__user
*
)
buffer
;
int
cnt
=
count
/
dma
->
outchannels
;
int
i
;
for
(
i
=
0
;
i
<
dma
->
outchannels
;
i
++
)
{
...
...
@@ -686,7 +686,7 @@ inline int rme96xx_copyfromuser(struct dmabuf* dma,const char* buffer,int count,
int
i
,
j
;
int
cnt
=
count
/
dma
->
outchannels
;
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
];
hwbuf
+=
(
swptr
>>
1
);
for
(
j
=
0
;
j
<
(
cnt
>>
1
);
j
++
)
{
...
...
@@ -710,13 +710,13 @@ inline int rme96xx_copyfromuser(struct dmabuf* dma,const char* buffer,int count,
}
/* 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
;
switch
(
dma
->
format
)
{
case
AFMT_S32_BLOCKED
:
{
char
*
buf
=
(
char
*
)
buffer
;
char
__user
*
buf
=
(
char
__user
*
)
buffer
;
int
cnt
=
count
/
dma
->
inchannels
;
int
i
;
...
...
@@ -736,7 +736,7 @@ inline int rme96xx_copytouser(struct dmabuf* dma,const char* buffer,int count,in
int
i
,
j
;
int
cnt
=
count
/
dma
->
inchannels
;
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
];
hwbuf
+=
(
swptr
>>
1
);
for
(
j
=
0
;
j
<
(
cnt
>>
1
);
j
++
)
{
...
...
@@ -1121,7 +1121,6 @@ module_exit(cleanup_rme96xx);
static
int
rme96xx_ioctl
(
struct
inode
*
in
,
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
dmabuf
*
dma
=
(
struct
dmabuf
*
)
file
->
private_data
;
rme96xx_info
*
s
=
dma
->
s
;
unsigned
long
flags
;
...
...
@@ -1129,6 +1128,8 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
count_info
cinfo
;
int
count
;
int
val
=
0
;
void
__user
*
argp
=
(
void
__user
*
)
arg
;
int
__user
*
p
=
argp
;
VALIDATE_STATE
(
s
);
...
...
@@ -1136,7 +1137,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
switch
(
cmd
)
{
case
OSS_GETVERSION
:
return
put_user
(
SOUND_VERSION
,
(
int
*
)
arg
);
return
put_user
(
SOUND_VERSION
,
p
);
case
SNDCTL_DSP_SYNC
:
#if 0
...
...
@@ -1149,14 +1150,14 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
return
0
;
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
:
// rme96xx_clearbufs(dma);
return
0
;
case
SNDCTL_DSP_SPEED
:
if
(
get_user
(
val
,
(
int
*
)
arg
))
if
(
get_user
(
val
,
p
))
return
-
EFAULT
;
if
(
val
>=
0
)
{
/* 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,
spin_unlock_irqrestore
(
&
s
->
lock
,
flags
);
}
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 */
if
(
get_user
(
val
,
(
int
*
)
arg
))
if
(
get_user
(
val
,
p
))
return
-
EFAULT
;
if
(
!
val
)
{
...
...
@@ -1216,7 +1217,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
return
0
;
case
SNDCTL_DSP_CHANNELS
:
/* remember to check for resonable offset/channel pairs here */
if
(
get_user
(
val
,
(
int
*
)
arg
))
if
(
get_user
(
val
,
p
))
return
-
EFAULT
;
if
(
file
->
f_mode
&
FMODE_WRITE
)
{
...
...
@@ -1236,14 +1237,14 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
dma
->
mono
=
0
;
return
put_user
(
val
,
(
int
*
)
arg
);
return
put_user
(
val
,
p
);
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*/
DBG
(
printk
(
"setting to format %x
\n
"
,
val
));
if
(
get_user
(
val
,
(
int
*
)
arg
))
if
(
get_user
(
val
,
p
))
return
-
EFAULT
;
if
(
val
!=
AFMT_QUERY
)
{
if
(
val
&
RME96xx_FMT
)
...
...
@@ -1257,7 +1258,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
break
;
}
}
return
put_user
(
dma
->
format
,
(
int
*
)
arg
);
return
put_user
(
dma
->
format
,
p
);
case
SNDCTL_DSP_POST
:
return
0
;
...
...
@@ -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)
val |= PCM_ENABLE_OUTPUT;
#endif
return
put_user
(
val
,
(
int
*
)
arg
);
return
put_user
(
val
,
p
);
case
SNDCTL_DSP_SETTRIGGER
:
if
(
get_user
(
val
,
(
int
*
)
arg
))
if
(
get_user
(
val
,
p
))
return
-
EFAULT
;
#if 0
if (file->f_mode & FMODE_READ) {
...
...
@@ -1309,7 +1310,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
abinfo
.
fragstotal
=
2
;
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
:
if
(
!
(
file
->
f_mode
&
FMODE_READ
))
...
...
@@ -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
.
fragstotal
=
2
;
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
:
file
->
f_flags
|=
O_NONBLOCK
;
...
...
@@ -1339,7 +1340,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
if
(
count
<
0
)
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 !!!) */
...
...
@@ -1359,7 +1360,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
dma
->
readptr
&=
s
->
fragsize
<<
1
;
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
0
;
...
...
@@ -1378,14 +1379,14 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
if
(
dma
->
mmapped
)
dma
->
writeptr
&=
s
->
fragsize
<<
1
;
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
0
;
case
SNDCTL_DSP_GETBLKSIZE
:
return
put_user
(
s
->
fragsize
,
(
int
*
)
arg
);
return
put_user
(
s
->
fragsize
,
p
);
case
SNDCTL_DSP_SETFRAGMENT
:
if
(
get_user
(
val
,
(
int
*
)
arg
))
if
(
get_user
(
val
,
p
))
return
-
EFAULT
;
val
&=
0xffff
;
val
-=
7
;
...
...
@@ -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) ||
(file->f_mode & FMODE_WRITE && s->dma_dac2.subdivision))
return -EINVAL;
if (get_user(val,
(int *)arg
))
if (get_user(val,
p
))
return -EFAULT;
if (val != 1 && val != 2 && val != 4)
return -EINVAL;
...
...
@@ -1413,10 +1414,10 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
case
SOUND_PCM_READ_RATE
:
/* HP20020201 */
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
:
return
put_user
(
dma
->
outchannels
,
(
int
*
)
arg
);
return
put_user
(
dma
->
outchannels
,
p
);
case
SOUND_PCM_READ_BITS
:
switch
(
dma
->
format
)
{
...
...
@@ -1427,7 +1428,7 @@ static int rme96xx_ioctl(struct inode *in, struct file *file, unsigned int cmd,
val
=
16
;
break
;
}
return
put_user
(
val
,
(
int
*
)
arg
);
return
put_user
(
val
,
p
);
case
SOUND_PCM_WRITE_FILTER
:
case
SNDCTL_DSP_SETSYNCRO
:
...
...
@@ -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
;
ssize_t
ret
=
0
;
...
...
@@ -1597,7 +1598,7 @@ static ssize_t rme96xx_write(struct file *file, const char *buffer, size_t count
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
;
ssize_t
ret
=
0
;
...
...
@@ -1793,6 +1794,8 @@ static int rme96xx_mixer_ioctl(struct inode *inode, struct file *file, unsigned
rme96xx_info
*
s
=
(
rme96xx_info
*
)
file
->
private_data
;
u32
status
;
int
spdifrate
;
void
__user
*
argp
=
(
void
__user
*
)
arg
;
int
__user
*
p
=
argp
;
status
=
readl
(
s
->
iobase
+
RME96xx_status_register
);
/* 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
VALIDATE_STATE
(
s
);
if
(
cmd
==
SOUND_MIXER_PRIVATE1
)
{
rme_mixer
mixer
;
if
(
copy_from_user
(
&
mixer
,
(
void
*
)
arg
,
sizeof
(
mixer
)))
if
(
copy_from_user
(
&
mixer
,
argp
,
sizeof
(
mixer
)))
return
-
EFAULT
;
mixer
.
devnr
&=
RME96xx_MASK_DEVS
;
...
...
@@ -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
.
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
)
{
return
put_user
(
status
,
(
int
*
)
arg
);
return
put_user
(
status
,
p
);
}
if
(
cmd
==
SOUND_MIXER_PRIVATE3
)
{
u32
control
;
if
(
copy_from_user
(
&
control
,
(
void
*
)
arg
,
sizeof
(
control
)))
if
(
copy_from_user
(
&
control
,
argp
,
sizeof
(
control
)))
return
-
EFAULT
;
if
(
file
->
f_mode
&
FMODE_WRITE
)
{
s
->
control_register
&=
~
RME96xx_mixer_allowed
;
...
...
@@ -1840,7 +1843,7 @@ static int rme96xx_mixer_ioctl(struct inode *inode, struct file *file, unsigned
writel
(
control
,
s
->
iobase
+
RME96xx_control_register
);
}
return
put_user
(
s
->
control_register
,
(
int
*
)
arg
);
return
put_user
(
s
->
control_register
,
p
);
}
return
-
1
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment