Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -12,9 +12,6 @@ TODOs
1. This driver uses the same unregistered vendor id that the firewire core does
     (0xd00d1e). Perhaps this could be exposed as a define in
     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
     taken up by the firewire core?
4. To avoid dropping rx data while still limiting the maximum buffering,
+1 −1
Original line number Diff line number Diff line
@@ -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 */
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)
+3 −3
Original line number Diff line number Diff line
@@ -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 const int max_async[] = { 307, 614, 1229, 2458, 4916, 9832, };
	BUILD_BUG_ON(ARRAY_SIZE(max_async) - 1 != SCODE_3200);
	static const int max_async[] = { 307, 614, 1229, 2458, };
	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)
		return max_async[speed];
	else