dect
/
linux-2.6
Archived
13
0
Fork 0

staging/fwserial: Limit tx/rx to 1394-2008 spec maximum

Per this conversation https://lkml.org/lkml/2012/11/27/587
limit the maximum transmission to the IEEE 1394-2008 specification
maximum size of 4096 bytes for asynchronous packets.

Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Acked-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Peter Hurley 2012-11-28 14:51:23 -05:00 committed by Greg Kroah-Hartman
parent 9929362348
commit 0555cb987a
3 changed files with 4 additions and 7 deletions

View File

@ -12,9 +12,6 @@ TODOs
1. This driver uses the same unregistered vendor id that the firewire core does 1. This driver uses the same unregistered vendor id that the firewire core does
(0xd00d1e). Perhaps this could be exposed as a define in (0xd00d1e). Perhaps this could be exposed as a define in
firewire-constants.h? firewire-constants.h?
2. MAX_ASYNC_PAYLOAD needs to be publicly exposed by core/ohci
- otherwise how will this driver know the max size of address window to
open for one packet write?
3. Maybe device_max_receive() and link_speed_to_max_payload() should be 3. Maybe device_max_receive() and link_speed_to_max_payload() should be
taken up by the firewire core? taken up by the firewire core?
4. To avoid dropping rx data while still limiting the maximum buffering, 4. To avoid dropping rx data while still limiting the maximum buffering,

View File

@ -179,7 +179,7 @@ static void dump_profile(struct seq_file *m, struct stats *stats)
/* Returns the max receive packet size for the given card */ /* Returns the max receive packet size for the given card */
static inline int device_max_receive(struct fw_device *fw_device) static inline int device_max_receive(struct fw_device *fw_device)
{ {
return 1 << (clamp_t(int, fw_device->max_rec, 8U, 13U) + 1); return 1 << (clamp_t(int, fw_device->max_rec, 8U, 11U) + 1);
} }
static void fwtty_log_tx_error(struct fwtty_port *port, int rcode) static void fwtty_log_tx_error(struct fwtty_port *port, int rcode)

View File

@ -374,10 +374,10 @@ static inline void fwtty_bind_console(struct fwtty_port *port,
*/ */
static inline int link_speed_to_max_payload(unsigned speed) static inline int link_speed_to_max_payload(unsigned speed)
{ {
static const int max_async[] = { 307, 614, 1229, 2458, 4916, 9832, }; static const int max_async[] = { 307, 614, 1229, 2458, };
BUILD_BUG_ON(ARRAY_SIZE(max_async) - 1 != SCODE_3200); BUILD_BUG_ON(ARRAY_SIZE(max_async) - 1 != SCODE_800);
speed = clamp(speed, (unsigned) SCODE_100, (unsigned) SCODE_3200); speed = clamp(speed, (unsigned) SCODE_100, (unsigned) SCODE_800);
if (limit_bw) if (limit_bw)
return max_async[speed]; return max_async[speed];
else else