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:
parent
9929362348
commit
0555cb987a
@ -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)
|
|||||||
/* 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,
|
|||||||
*/
|
*/
|
||||||
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
|
||||||
|
Loading…
Reference in New Issue
Block a user