Commit 0555cb98 authored by Peter Hurley's avatar Peter Hurley Committed by Greg Kroah-Hartman

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: default avatarPeter Hurley <peter@hurleysoftware.com>
Acked-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 99293623
...@@ -12,9 +12,6 @@ TODOs ...@@ -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,
......
...@@ -179,7 +179,7 @@ static void dump_profile(struct seq_file *m, struct stats *stats) ...@@ -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)
......
...@@ -374,10 +374,10 @@ static inline void fwtty_bind_console(struct fwtty_port *port, ...@@ -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
......
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