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
nexedi
linux
Commits
95a02b3c
Commit
95a02b3c
authored
Jun 21, 2004
by
Alexander Viro
Committed by
Linus Torvalds
Jun 21, 2004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] sparse: raw1394 annotation
parent
d9de55ab
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
48 additions
and
55 deletions
+48
-55
drivers/ieee1394/raw1394-private.h
drivers/ieee1394/raw1394-private.h
+2
-2
drivers/ieee1394/raw1394.c
drivers/ieee1394/raw1394.c
+41
-48
drivers/ieee1394/raw1394.h
drivers/ieee1394/raw1394.h
+5
-5
No files found.
drivers/ieee1394/raw1394-private.h
View file @
95a02b3c
...
...
@@ -35,11 +35,11 @@ struct file_info {
struct
list_head
addr_list
;
u8
*
fcp_buffer
;
u8
__user
*
fcp_buffer
;
/* old ISO API */
u64
listen_channels
;
quadlet_t
*
iso_buffer
;
quadlet_t
__user
*
iso_buffer
;
size_t
iso_buffer_length
;
u8
notification
;
/* (busreset-notification) RAW1394_NOTIFY_OFF/ON */
...
...
drivers/ieee1394/raw1394.c
View file @
95a02b3c
...
...
@@ -56,11 +56,11 @@
#include "raw1394-private.h"
#if BITS_PER_LONG == 64
#define int2ptr(x) ((void *)x)
#define ptr2int(x) ((u64)x)
#define int2ptr(x) ((void
__user
*)x)
#define ptr2int(x) ((u64)
(unsigned long)(void __user *)
x)
#else
#define int2ptr(x) ((void *)(u32)x)
#define ptr2int(x) ((u64)(u
32
)x)
#define int2ptr(x) ((void
__user
*)(u32)x)
#define ptr2int(x) ((u64)(u
nsigned long)(void __user *
)x)
#endif
#ifdef CONFIG_IEEE1394_VERBOSEDEBUG
...
...
@@ -410,7 +410,7 @@ static void fcp_request(struct hpsb_host *host, int nodeid, int direction,
}
static
ssize_t
raw1394_read
(
struct
file
*
file
,
char
*
buffer
,
size_t
count
,
static
ssize_t
raw1394_read
(
struct
file
*
file
,
char
__user
*
buffer
,
size_t
count
,
loff_t
*
offset_is_ignored
)
{
struct
file_info
*
fi
=
(
struct
file_info
*
)
file
->
private_data
;
...
...
@@ -602,7 +602,7 @@ static void handle_fcp_listen(struct file_info *fi, struct pending_request *req)
if
(
fi
->
fcp_buffer
)
{
req
->
req
.
error
=
RAW1394_ERROR_ALREADY
;
}
else
{
fi
->
fcp_buffer
=
(
u8
*
)
int2ptr
(
req
->
req
.
recvb
);
fi
->
fcp_buffer
=
int2ptr
(
req
->
req
.
recvb
);
}
}
else
{
if
(
!
fi
->
fcp_buffer
)
{
...
...
@@ -826,7 +826,7 @@ static int handle_async_send(struct file_info *fi, struct pending_request *req)
return
sizeof
(
struct
raw1394_request
);
}
if
(
copy_from_user
(
packet
->
data
,
((
u8
*
)
int2ptr
(
req
->
req
.
sendb
)
)
+
header_length
,
if
(
copy_from_user
(
packet
->
data
,
int2ptr
(
req
->
req
.
sendb
)
+
header_length
,
packet
->
data_size
))
{
req
->
req
.
error
=
RAW1394_ERROR_MEMFAULT
;
req
->
req
.
length
=
0
;
...
...
@@ -964,9 +964,8 @@ static int arm_read (struct hpsb_host *host, int nodeid, quadlet_t *buffer,
arm_req
->
buffer
=
NULL
;
arm_resp
->
buffer
=
NULL
;
if
(
rcode
==
RCODE_COMPLETE
)
{
arm_resp
->
buffer
=
((
byte_t
*
)(
arm_resp
)
+
(
sizeof
(
struct
arm_response
)));
memcpy
(
arm_resp
->
buffer
,
byte_t
*
buf
=
(
byte_t
*
)
arm_resp
+
sizeof
(
struct
arm_response
);
memcpy
(
buf
,
(
arm_addr
->
addr_space_buffer
)
+
(
addr
-
(
arm_addr
->
start
)),
length
);
arm_resp
->
buffer
=
int2ptr
((
arm_addr
->
recvb
)
+
...
...
@@ -1091,10 +1090,9 @@ static int arm_write (struct hpsb_host *host, int nodeid, int destid,
(
sizeof
(
struct
arm_request_response
)));
arm_resp
=
(
struct
arm_response
*
)
((
byte_t
*
)(
arm_req
)
+
(
sizeof
(
struct
arm_request
)));
arm_req
->
buffer
=
((
byte_t
*
)(
arm_resp
)
+
(
sizeof
(
struct
arm_response
)));
arm_resp
->
buffer
=
NULL
;
memcpy
(
arm_req
->
buffer
,
data
,
length
);
memcpy
((
byte_t
*
)
arm_resp
+
sizeof
(
struct
arm_response
),
data
,
length
);
arm_req
->
buffer
=
int2ptr
((
arm_addr
->
recvb
)
+
sizeof
(
struct
arm_request_response
)
+
sizeof
(
struct
arm_request
)
+
...
...
@@ -1233,6 +1231,7 @@ static int arm_lock (struct hpsb_host *host, int nodeid, quadlet_t *store,
}
}
if
(
arm_addr
->
notification_options
&
ARM_LOCK
)
{
byte_t
*
buf1
,
*
buf2
;
DBGMSG
(
"arm_lock -> entering notification-section"
);
req
=
__alloc_pending_request
(
SLAB_ATOMIC
);
if
(
!
req
)
{
...
...
@@ -1258,26 +1257,22 @@ static int arm_lock (struct hpsb_host *host, int nodeid, quadlet_t *store,
(
sizeof
(
struct
arm_request_response
)));
arm_resp
=
(
struct
arm_response
*
)
((
byte_t
*
)(
arm_req
)
+
(
sizeof
(
struct
arm_request
)));
arm_req
->
buffer
=
((
byte_t
*
)(
arm_resp
)
+
(
sizeof
(
struct
arm_response
)));
arm_resp
->
buffer
=
((
byte_t
*
)(
arm_req
->
buffer
)
+
(
2
*
sizeof
(
*
store
)));
buf1
=
(
byte_t
*
)
arm_resp
+
sizeof
(
struct
arm_response
);
buf2
=
buf1
+
2
*
sizeof
(
*
store
);
if
((
ext_tcode
==
EXTCODE_FETCH_ADD
)
||
(
ext_tcode
==
EXTCODE_LITTLE_ADD
))
{
arm_req
->
buffer_length
=
sizeof
(
*
store
);
memcpy
(
arm_req
->
buffer
,
&
data
,
sizeof
(
*
store
));
memcpy
(
buf1
,
&
data
,
sizeof
(
*
store
));
}
else
{
arm_req
->
buffer_length
=
2
*
sizeof
(
*
store
);
memcpy
(
arm_req
->
buffer
,
&
arg
,
sizeof
(
*
store
));
memcpy
(((
arm_req
->
buffer
)
+
sizeof
(
*
store
)),
&
data
,
sizeof
(
*
store
));
memcpy
(
buf1
,
&
arg
,
sizeof
(
*
store
));
memcpy
(
buf1
+
sizeof
(
*
store
),
&
data
,
sizeof
(
*
store
));
}
if
(
rcode
==
RCODE_COMPLETE
)
{
arm_resp
->
buffer_length
=
sizeof
(
*
store
);
memcpy
(
arm_resp
->
buffer
,
&
old
,
sizeof
(
*
store
));
memcpy
(
buf2
,
&
old
,
sizeof
(
*
store
));
}
else
{
arm_resp
->
buffer
=
NULL
;
arm_resp
->
buffer_length
=
0
;
}
req
->
file_info
=
fi
;
...
...
@@ -1438,6 +1433,7 @@ static int arm_lock64 (struct hpsb_host *host, int nodeid, octlet_t *store,
}
}
if
(
arm_addr
->
notification_options
&
ARM_LOCK
)
{
byte_t
*
buf1
,
*
buf2
;
DBGMSG
(
"arm_lock64 -> entering notification-section"
);
req
=
__alloc_pending_request
(
SLAB_ATOMIC
);
if
(
!
req
)
{
...
...
@@ -1463,26 +1459,22 @@ static int arm_lock64 (struct hpsb_host *host, int nodeid, octlet_t *store,
(
sizeof
(
struct
arm_request_response
)));
arm_resp
=
(
struct
arm_response
*
)
((
byte_t
*
)(
arm_req
)
+
(
sizeof
(
struct
arm_request
)));
arm_req
->
buffer
=
((
byte_t
*
)(
arm_resp
)
+
(
sizeof
(
struct
arm_response
)));
arm_resp
->
buffer
=
((
byte_t
*
)(
arm_req
->
buffer
)
+
(
2
*
sizeof
(
*
store
)));
buf1
=
(
byte_t
*
)
arm_resp
+
sizeof
(
struct
arm_response
);
buf2
=
buf1
+
2
*
sizeof
(
*
store
);
if
((
ext_tcode
==
EXTCODE_FETCH_ADD
)
||
(
ext_tcode
==
EXTCODE_LITTLE_ADD
))
{
arm_req
->
buffer_length
=
sizeof
(
*
store
);
memcpy
(
arm_req
->
buffer
,
&
data
,
sizeof
(
*
store
));
memcpy
(
buf1
,
&
data
,
sizeof
(
*
store
));
}
else
{
arm_req
->
buffer_length
=
2
*
sizeof
(
*
store
);
memcpy
(
arm_req
->
buffer
,
&
arg
,
sizeof
(
*
store
));
memcpy
(((
arm_req
->
buffer
)
+
sizeof
(
*
store
)),
&
data
,
sizeof
(
*
store
));
memcpy
(
buf1
,
&
arg
,
sizeof
(
*
store
));
memcpy
(
buf1
+
sizeof
(
*
store
),
&
data
,
sizeof
(
*
store
));
}
if
(
rcode
==
RCODE_COMPLETE
)
{
arm_resp
->
buffer_length
=
sizeof
(
*
store
);
memcpy
(
arm_resp
->
buffer
,
&
old
,
sizeof
(
*
store
));
memcpy
(
buf2
,
&
old
,
sizeof
(
*
store
));
}
else
{
arm_resp
->
buffer
=
NULL
;
arm_resp
->
buffer_length
=
0
;
}
req
->
file_info
=
fi
;
...
...
@@ -2146,7 +2138,7 @@ static int state_connected(struct file_info *fi, struct pending_request *req)
}
static
ssize_t
raw1394_write
(
struct
file
*
file
,
const
char
*
buffer
,
size_t
count
,
static
ssize_t
raw1394_write
(
struct
file
*
file
,
const
char
__user
*
buffer
,
size_t
count
,
loff_t
*
offset_is_ignored
)
{
struct
file_info
*
fi
=
(
struct
file_info
*
)
file
->
private_data
;
...
...
@@ -2262,7 +2254,7 @@ static void raw1394_iso_fill_status(struct hpsb_iso *iso, struct raw1394_iso_sta
stat
->
xmit_cycle
=
iso
->
xmit_cycle
;
}
static
int
raw1394_iso_xmit_init
(
struct
file_info
*
fi
,
void
*
uaddr
)
static
int
raw1394_iso_xmit_init
(
struct
file_info
*
fi
,
void
__user
*
uaddr
)
{
struct
raw1394_iso_status
stat
;
...
...
@@ -2294,7 +2286,7 @@ static int raw1394_iso_xmit_init(struct file_info *fi, void *uaddr)
return
0
;
}
static
int
raw1394_iso_recv_init
(
struct
file_info
*
fi
,
void
*
uaddr
)
static
int
raw1394_iso_recv_init
(
struct
file_info
*
fi
,
void
__user
*
uaddr
)
{
struct
raw1394_iso_status
stat
;
...
...
@@ -2322,7 +2314,7 @@ static int raw1394_iso_recv_init(struct file_info *fi, void *uaddr)
return
0
;
}
static
int
raw1394_iso_get_status
(
struct
file_info
*
fi
,
void
*
uaddr
)
static
int
raw1394_iso_get_status
(
struct
file_info
*
fi
,
void
__user
*
uaddr
)
{
struct
raw1394_iso_status
stat
;
struct
hpsb_iso
*
iso
=
fi
->
iso_handle
;
...
...
@@ -2338,7 +2330,7 @@ static int raw1394_iso_get_status(struct file_info *fi, void *uaddr)
}
/* copy N packet_infos out of the ringbuffer into user-supplied array */
static
int
raw1394_iso_recv_packets
(
struct
file_info
*
fi
,
void
*
uaddr
)
static
int
raw1394_iso_recv_packets
(
struct
file_info
*
fi
,
void
__user
*
uaddr
)
{
struct
raw1394_iso_packets
upackets
;
unsigned
int
packet
=
fi
->
iso_handle
->
first_packet
;
...
...
@@ -2369,7 +2361,7 @@ static int raw1394_iso_recv_packets(struct file_info *fi, void *uaddr)
}
/* copy N packet_infos from user to ringbuffer, and queue them for transmission */
static
int
raw1394_iso_send_packets
(
struct
file_info
*
fi
,
void
*
uaddr
)
static
int
raw1394_iso_send_packets
(
struct
file_info
*
fi
,
void
__user
*
uaddr
)
{
struct
raw1394_iso_packets
upackets
;
int
i
,
rv
;
...
...
@@ -2426,14 +2418,15 @@ static int raw1394_mmap(struct file *file, struct vm_area_struct *vma)
static
int
raw1394_ioctl
(
struct
inode
*
inode
,
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
file_info
*
fi
=
file
->
private_data
;
void
__user
*
argp
=
(
void
__user
*
)
arg
;
switch
(
fi
->
iso_state
)
{
case
RAW1394_ISO_INACTIVE
:
switch
(
cmd
)
{
case
RAW1394_IOC_ISO_XMIT_INIT
:
return
raw1394_iso_xmit_init
(
fi
,
(
void
*
)
arg
);
return
raw1394_iso_xmit_init
(
fi
,
argp
);
case
RAW1394_IOC_ISO_RECV_INIT
:
return
raw1394_iso_recv_init
(
fi
,
(
void
*
)
arg
);
return
raw1394_iso_recv_init
(
fi
,
argp
);
default:
break
;
}
...
...
@@ -2443,7 +2436,7 @@ static int raw1394_ioctl(struct inode *inode, struct file *file, unsigned int cm
case
RAW1394_IOC_ISO_RECV_START
:
{
/* copy args from user-space */
int
args
[
3
];
if
(
copy_from_user
(
&
args
[
0
],
(
void
*
)
arg
,
sizeof
(
args
)))
if
(
copy_from_user
(
&
args
[
0
],
argp
,
sizeof
(
args
)))
return
-
EFAULT
;
return
hpsb_iso_recv_start
(
fi
->
iso_handle
,
args
[
0
],
args
[
1
],
args
[
2
]);
}
...
...
@@ -2457,14 +2450,14 @@ static int raw1394_ioctl(struct inode *inode, struct file *file, unsigned int cm
case
RAW1394_IOC_ISO_RECV_SET_CHANNEL_MASK
:
{
/* copy the u64 from user-space */
u64
mask
;
if
(
copy_from_user
(
&
mask
,
(
void
*
)
arg
,
sizeof
(
mask
)))
if
(
copy_from_user
(
&
mask
,
argp
,
sizeof
(
mask
)))
return
-
EFAULT
;
return
hpsb_iso_recv_set_channel_mask
(
fi
->
iso_handle
,
mask
);
}
case
RAW1394_IOC_ISO_GET_STATUS
:
return
raw1394_iso_get_status
(
fi
,
(
void
*
)
arg
);
return
raw1394_iso_get_status
(
fi
,
argp
);
case
RAW1394_IOC_ISO_RECV_PACKETS
:
return
raw1394_iso_recv_packets
(
fi
,
(
void
*
)
arg
);
return
raw1394_iso_recv_packets
(
fi
,
argp
);
case
RAW1394_IOC_ISO_RECV_RELEASE_PACKETS
:
return
hpsb_iso_recv_release_packets
(
fi
->
iso_handle
,
arg
);
case
RAW1394_IOC_ISO_RECV_FLUSH
:
...
...
@@ -2482,7 +2475,7 @@ static int raw1394_ioctl(struct inode *inode, struct file *file, unsigned int cm
case
RAW1394_IOC_ISO_XMIT_START
:
{
/* copy two ints from user-space */
int
args
[
2
];
if
(
copy_from_user
(
&
args
[
0
],
(
void
*
)
arg
,
sizeof
(
args
)))
if
(
copy_from_user
(
&
args
[
0
],
argp
,
sizeof
(
args
)))
return
-
EFAULT
;
return
hpsb_iso_xmit_start
(
fi
->
iso_handle
,
args
[
0
],
args
[
1
]);
}
...
...
@@ -2492,9 +2485,9 @@ static int raw1394_ioctl(struct inode *inode, struct file *file, unsigned int cm
hpsb_iso_stop
(
fi
->
iso_handle
);
return
0
;
case
RAW1394_IOC_ISO_GET_STATUS
:
return
raw1394_iso_get_status
(
fi
,
(
void
*
)
arg
);
return
raw1394_iso_get_status
(
fi
,
argp
);
case
RAW1394_IOC_ISO_XMIT_PACKETS
:
return
raw1394_iso_send_packets
(
fi
,
(
void
*
)
arg
);
return
raw1394_iso_send_packets
(
fi
,
argp
);
case
RAW1394_IOC_ISO_SHUTDOWN
:
raw1394_iso_shutdown
(
fi
);
return
0
;
...
...
drivers/ieee1394/raw1394.h
View file @
95a02b3c
...
...
@@ -105,18 +105,18 @@ typedef struct arm_request {
__u8
extended_transaction_code
;
__u32
generation
;
__u16
buffer_length
;
__u8
*
buffer
;
__u8
__user
*
buffer
;
}
*
arm_request_t
;
typedef
struct
arm_response
{
__s32
response_code
;
__u16
buffer_length
;
__u8
*
buffer
;
__u8
__user
*
buffer
;
}
*
arm_response_t
;
typedef
struct
arm_request_response
{
struct
arm_request
*
request
;
struct
arm_response
*
response
;
struct
arm_request
__user
*
request
;
struct
arm_response
__user
*
response
;
}
*
arm_request_response_t
;
/* rawiso API */
...
...
@@ -136,7 +136,7 @@ struct raw1394_iso_packet_info {
/* argument for RAW1394_ISO_RECV/XMIT_PACKETS ioctls */
struct
raw1394_iso_packets
{
__u32
n_packets
;
struct
raw1394_iso_packet_info
*
infos
;
struct
raw1394_iso_packet_info
__user
*
infos
;
};
struct
raw1394_iso_config
{
...
...
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