Module Name:    src
Committed By:   rin
Date:           Thu Jan 31 15:21:05 UTC 2019

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

Log Message:
Fix previous:
- axen_coe() should be called from axen_init(), not axen_ax88179_init().
- Simplify logic in axen_coe(); AXEN_[RT]XCOE_OFF = 0.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/sys/dev/usb/if_axen.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_axen.c
diff -u src/sys/dev/usb/if_axen.c:1.19 src/sys/dev/usb/if_axen.c:1.20
--- src/sys/dev/usb/if_axen.c:1.19	Wed Jan 30 11:13:25 2019
+++ src/sys/dev/usb/if_axen.c	Thu Jan 31 15:21:05 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_axen.c,v 1.19 2019/01/30 11:13:25 rin Exp $	*/
+/*	$NetBSD: if_axen.c,v 1.20 2019/01/31 15:21:05 rin Exp $	*/
 /*	$OpenBSD: if_axen.c,v 1.3 2013/10/21 10:10:22 yuo Exp $	*/
 
 /*
@@ -23,7 +23,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_axen.c,v 1.19 2019/01/30 11:13:25 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_axen.c,v 1.20 2019/01/31 15:21:05 rin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -568,9 +568,6 @@ axen_ax88179_init(struct axen_softc *sc)
 	axen_cmd(sc, AXEN_CMD_MAC_WRITE, 1, AXEN_PAUSE_HIGH_WATERMARK, &val);
 
 	/* Set RX/TX configuration. */
-	/* Offloadng enable */
-	axen_setcoe(sc);
-
 	/* Set RX control register */
 	ctl = AXEN_RXCTL_IPE | AXEN_RXCTL_DROPCRCERR | AXEN_RXCTL_AUTOB;
 	ctl |= AXEN_RXCTL_ACPT_PHY_MCAST | AXEN_RXCTL_ACPT_ALL_MCAST;
@@ -626,41 +623,35 @@ axen_setcoe(struct axen_softc *sc)
 	uint64_t enabled = ifp->if_capenable;
 	uint8_t val;
 
-	if (enabled & (IFCAP_CSUM_IPv4_Rx |
-	     IFCAP_CSUM_TCPv4_Rx | IFCAP_CSUM_UDPv4_Rx |
-	     IFCAP_CSUM_TCPv6_Rx | IFCAP_CSUM_UDPv6_Rx)) {
-		val = 0;
-		if (enabled & IFCAP_CSUM_IPv4_Rx)
-			val |= AXEN_RXCOE_IPv4;
-		if (enabled & IFCAP_CSUM_TCPv4_Rx)
-			val |= AXEN_RXCOE_TCPv4;
-		if (enabled & IFCAP_CSUM_UDPv4_Rx)
-			val |= AXEN_RXCOE_UDPv4;
-		if (enabled & IFCAP_CSUM_TCPv6_Rx)
-			val |= AXEN_RXCOE_TCPv6;
-		if (enabled & IFCAP_CSUM_UDPv6_Rx)
-			val |= AXEN_RXCOE_UDPv6;
-	} else
-		val = AXEN_RXCOE_OFF;
+	axen_lock_mii(sc);
+
+	val = AXEN_RXCOE_OFF;
+	if (enabled & IFCAP_CSUM_IPv4_Rx)
+		val |= AXEN_RXCOE_IPv4;
+	if (enabled & IFCAP_CSUM_TCPv4_Rx)
+		val |= AXEN_RXCOE_TCPv4;
+	if (enabled & IFCAP_CSUM_UDPv4_Rx)
+		val |= AXEN_RXCOE_UDPv4;
+	if (enabled & IFCAP_CSUM_TCPv6_Rx)
+		val |= AXEN_RXCOE_TCPv6;
+	if (enabled & IFCAP_CSUM_UDPv6_Rx)
+		val |= AXEN_RXCOE_UDPv6;
 	axen_cmd(sc, AXEN_CMD_MAC_WRITE, 1, AXEN_RX_COE, &val);
 
-	if (enabled & (IFCAP_CSUM_IPv4_Tx |
-	     IFCAP_CSUM_TCPv4_Tx | IFCAP_CSUM_UDPv4_Tx |
-	     IFCAP_CSUM_TCPv6_Tx | IFCAP_CSUM_UDPv6_Tx)) {
-		val = 0;
-		if (enabled & IFCAP_CSUM_IPv4_Tx)
-			val |= AXEN_TXCOE_IPv4;
-		if (enabled & IFCAP_CSUM_TCPv4_Tx)
-			val |= AXEN_TXCOE_TCPv4;
-		if (enabled & IFCAP_CSUM_UDPv4_Tx)
-			val |= AXEN_TXCOE_UDPv4;
-		if (enabled & IFCAP_CSUM_TCPv6_Tx)
-			val |= AXEN_TXCOE_TCPv6;
-		if (enabled & IFCAP_CSUM_UDPv6_Tx)
-			val |= AXEN_TXCOE_UDPv6;
-	} else
-		val = AXEN_TXCOE_OFF;
+	val = AXEN_TXCOE_OFF;
+	if (enabled & IFCAP_CSUM_IPv4_Tx)
+		val |= AXEN_TXCOE_IPv4;
+	if (enabled & IFCAP_CSUM_TCPv4_Tx)
+		val |= AXEN_TXCOE_TCPv4;
+	if (enabled & IFCAP_CSUM_UDPv4_Tx)
+		val |= AXEN_TXCOE_UDPv4;
+	if (enabled & IFCAP_CSUM_TCPv6_Tx)
+		val |= AXEN_TXCOE_TCPv6;
+	if (enabled & IFCAP_CSUM_UDPv6_Tx)
+		val |= AXEN_TXCOE_UDPv6;
 	axen_cmd(sc, AXEN_CMD_MAC_WRITE, 1, AXEN_TX_COE, &val);
+
+	axen_unlock_mii(sc);
 }
 
 static int
@@ -1391,6 +1382,9 @@ axen_init(struct ifnet *ifp)
 	axen_cmd(sc, AXEN_CMD_MAC_WRITE, 1, AXEN_UNK_28, &bval);
 	axen_unlock_mii(sc);
 
+	/* Configure offloading engine. */
+	axen_setcoe(sc);
+
 	/* Program promiscuous mode and multicast filters. */
 	axen_iff(sc);
 
@@ -1496,9 +1490,7 @@ axen_ioctl(struct ifnet *ifp, u_long cmd
 			axen_iff(sc);
 			break;
 		case SIOCSIFCAP:
-			axen_lock_mii(sc);
 			axen_setcoe(sc);
-			axen_unlock_mii(sc);
 			break;
 		default:
 			break;

Reply via email to