Module Name:    src
Committed By:   rin
Date:           Wed Jan 30 11:11:45 UTC 2019

Modified Files:
        src/sys/dev/usb: if_mue.c

Log Message:
Fix mue_sethwcsum():
- Check appropriate flags to enable RX checksum offloading.
- We don't support ICMP/IGMP checksum offloading.

Tested both on LAN7800 and 7500.


To generate a diff of this commit:
cvs rdiff -u -r1.28 -r1.29 src/sys/dev/usb/if_mue.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/usb/if_mue.c
diff -u src/sys/dev/usb/if_mue.c:1.28 src/sys/dev/usb/if_mue.c:1.29
--- src/sys/dev/usb/if_mue.c:1.28	Tue Jan 22 03:42:28 2019
+++ src/sys/dev/usb/if_mue.c	Wed Jan 30 11:11:45 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_mue.c,v 1.28 2019/01/22 03:42:28 msaitoh Exp $	*/
+/*	$NetBSD: if_mue.c,v 1.29 2019/01/30 11:11:45 rin Exp $	*/
 /*	$OpenBSD: if_mue.c,v 1.3 2018/08/04 16:42:46 jsg Exp $	*/
 
 /*
@@ -20,7 +20,7 @@
 /* Driver for Microchip LAN7500/LAN7800 chipsets. */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_mue.c,v 1.28 2019/01/22 03:42:28 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_mue.c,v 1.29 2019/01/30 11:11:45 rin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -1402,17 +1402,23 @@ mue_sethwcsum(struct mue_softc *sc)
 	reg = (sc->mue_flags & LAN7500) ? MUE_7500_RFE_CTL : MUE_7800_RFE_CTL;
 	val = mue_csr_read(sc, reg);
 
-	if (ifp->if_capenable & (IFCAP_CSUM_TCPv4_Rx|IFCAP_CSUM_UDPv4_Rx)) {
-		DPRINTF(sc, "enabled\n");
-		val |= MUE_RFE_CTL_IGMP_COE | MUE_RFE_CTL_ICMP_COE;
-		val |= MUE_RFE_CTL_TCPUDP_COE | MUE_RFE_CTL_IP_COE;
+	if (ifp->if_capenable & IFCAP_CSUM_IPv4_Rx) {
+		DPRINTF(sc, "RX IPv4 hwcsum enabled\n");
+		val |= MUE_RFE_CTL_IP_COE;
 	} else {
-		DPRINTF(sc, "disabled\n");
-		val &=
-		    ~(MUE_RFE_CTL_IGMP_COE | MUE_RFE_CTL_ICMP_COE);
-		val &=
-		    ~(MUE_RFE_CTL_TCPUDP_COE | MUE_RFE_CTL_IP_COE);
-        }
+		DPRINTF(sc, "RX IPv4 hwcsum disabled\n");
+		val &= ~MUE_RFE_CTL_IP_COE;
+	}
+
+	if (ifp->if_capenable &
+	    (IFCAP_CSUM_TCPv4_Rx | IFCAP_CSUM_UDPv4_Rx |
+	     IFCAP_CSUM_TCPv6_Rx | IFCAP_CSUM_UDPv6_Rx)) {
+		DPRINTF(sc, "RX L4 hwcsum enabled\n");
+		val |= MUE_RFE_CTL_TCPUDP_COE;
+	} else {
+		DPRINTF(sc, "RX L4 hwcsum disabled\n");
+		val &= ~MUE_RFE_CTL_TCPUDP_COE;
+	}
 
 	val &= ~MUE_RFE_CTL_VLAN_FILTER;
 

Reply via email to