Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 25 Mar 2015 21:53:17 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r280635 - projects/ifnet/sys/dev/cadence
Message-ID:  <201503252153.t2PLrH3S025844@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius
Date: Wed Mar 25 21:53:16 2015
New Revision: 280635
URL: https://svnweb.freebsd.org/changeset/base/280635

Log:
  Some minor cleanups:
  - No reason to store cgem_hwassist in softc. We need only generate it
    in response to SIOCSIFCAP.
  - Simplify SIOCSIFCAP.
  - Remove CGEM_DRV_OACTIVE, which is a remembrance about IFF_DRV_OACTIVE,
    which is descendant of IFF_OACTIVE and was a flag to synchronise the
    stack and the driver in the era of giant locked kernels.
  - Do not modify cgem_if_flags in any place except SIOCSIFFLAGS.
  - Remove unneeded includes.

Modified:
  projects/ifnet/sys/dev/cadence/if_cgem.c

Modified: projects/ifnet/sys/dev/cadence/if_cgem.c
==============================================================================
--- projects/ifnet/sys/dev/cadence/if_cgem.c	Wed Mar 25 21:41:20 2015	(r280634)
+++ projects/ifnet/sys/dev/cadence/if_cgem.c	Wed Mar 25 21:53:16 2015	(r280635)
@@ -54,8 +54,6 @@ __FBSDID("$FreeBSD$");
 #include <net/if.h>
 #include <net/if_dl.h>
 #include <net/if_media.h>
-#include <net/if_mib.h>
-#include <net/if_types.h>
 
 #ifdef INET
 #include <netinet/in.h>
@@ -64,9 +62,6 @@ __FBSDID("$FreeBSD$");
 #include <netinet/ip.h>
 #endif
 
-#include <net/bpf.h>
-#include <net/bpfdesc.h>
-
 #include <dev/fdt/fdt_common.h>
 #include <dev/ofw/ofw_bus.h>
 #include <dev/ofw/ofw_bus_subr.h>
@@ -96,7 +91,6 @@ __FBSDID("$FreeBSD$");
 				 CSUM_TCP_IPV6 | CSUM_UDP_IPV6)
 
 #define CGEM_DRV_RUNNING	0x0001
-#define CGEM_DRV_OACTIVE	0x0002
 
 struct cgem_softc {
 	if_t			ifp;
@@ -107,7 +101,6 @@ struct cgem_softc {
 	int			cgem_if_flags;
 	int			cgem_drv_flags;
 	uint32_t		cgem_capenable;
-	uint64_t		cgem_hwassist;
 	struct resource 	*mem_res;
 	struct resource 	*irq_res;
 	void			*intrhand;
@@ -669,8 +662,6 @@ cgem_clean_tx(struct cgem_softc *sc)
 		else
 			sc->txring_tl_ptr++;
 		sc->txring_queued--;
-
-		sc->cgem_drv_flags &= ~CGEM_DRV_OACTIVE;
 	}
 }
 
@@ -686,9 +677,6 @@ cgem_start_locked(struct cgem_softc *sc)
 
 	CGEM_ASSERT_LOCKED(sc);
 
-	if ((sc->cgem_drv_flags & CGEM_DRV_OACTIVE) != 0)
-		return;
-
 	for (;;) {
 		/* Check that there is room in the descriptor ring. */
 		if (sc->txring_queued >=
@@ -700,7 +688,6 @@ cgem_start_locked(struct cgem_softc *sc)
 			/* Still no room? */
 			if (sc->txring_queued >=
 			    CGEM_NUM_TX_DESCS - TX_MAX_DMA_SEGS * 2) {
-				sc->cgem_drv_flags |= CGEM_DRV_OACTIVE;
 				sc->txfull++;
 				break;
 			}
@@ -1179,24 +1166,17 @@ cgem_ioctl(if_t ifp, u_long cmd, void *d
 
 	case SIOCSIFCAP:
 		CGEM_LOCK(sc);
-		mask = sc->cgem_capenable ^ ifr->ifr_reqcap;
-
+		mask = ifr->ifr_reqcap ^ ifr->ifr_curcap;
+		ifr->ifr_hwassist = 0;
 		if ((mask & IFCAP_TXCSUM) != 0) {
 			if ((ifr->ifr_reqcap & IFCAP_TXCSUM) != 0) {
 				/* Turn on TX checksumming. */
-				sc->cgem_capenable |= IFCAP_TXCSUM |
-					IFCAP_TXCSUM_IPV6;
-				sc->cgem_hwassist |= CGEM_CKSUM_ASSIST;
-
+				ifr->ifr_hwassist |= CGEM_CKSUM_ASSIST;
 				WR4(sc, CGEM_DMA_CFG,
 				    RD4(sc, CGEM_DMA_CFG) |
 				     CGEM_DMA_CFG_CHKSUM_GEN_OFFLOAD_EN);
 			} else {
 				/* Turn off TX checksumming. */
-				sc->cgem_capenable &= ~(IFCAP_TXCSUM |
-							IFCAP_TXCSUM_IPV6);
-				sc->cgem_hwassist &= ~CGEM_CKSUM_ASSIST;
-
 				WR4(sc, CGEM_DMA_CFG,
 				    RD4(sc, CGEM_DMA_CFG) &
 				     ~CGEM_DMA_CFG_CHKSUM_GEN_OFFLOAD_EN);
@@ -1205,21 +1185,17 @@ cgem_ioctl(if_t ifp, u_long cmd, void *d
 		if ((mask & IFCAP_RXCSUM) != 0) {
 			if ((ifr->ifr_reqcap & IFCAP_RXCSUM) != 0) {
 				/* Turn on RX checksumming. */
-				sc->cgem_capenable |= IFCAP_RXCSUM |
-					IFCAP_RXCSUM_IPV6;
-
 				WR4(sc, CGEM_NET_CFG,
 				    RD4(sc, CGEM_NET_CFG) |
 				     CGEM_NET_CFG_RX_CHKSUM_OFFLD_EN);
 			} else {
 				/* Turn off RX checksumming. */
-				sc->cgem_capenable &= ~(IFCAP_RXCSUM |
-							IFCAP_RXCSUM_IPV6);
 				WR4(sc, CGEM_NET_CFG,
 				    RD4(sc, CGEM_NET_CFG) &
 				     ~CGEM_NET_CFG_RX_CHKSUM_OFFLD_EN);
 			}
 		}
+		sc->cgem_capenable = ifr->ifr_reqcap;
 		CGEM_UNLOCK(sc);
 		break;
 	default:
@@ -1673,18 +1649,15 @@ cgem_attach(device_t dev)
 		return (err);
 	}
 
-	/* Disable hardware checksumming by default. */
-	sc->cgem_hwassist = 0;
-	sc->cgem_capenable = IFCAP_VLAN_MTU;
-
 	sc->rxbufs = DEFAULT_NUM_RX_BUFS;
 	sc->rxhangwar = 1;
 
+	/* Disable hardware checksumming by default. */
+	ifat.ifat_hwassist = 0;
+	ifat.ifat_capenable = sc->cgem_capenable = IFCAP_VLAN_MTU;
 	ifat.ifat_softc = sc;
 	ifat.ifat_dunit = device_get_unit(dev);
-	ifat.ifat_lla =eaddr;
-	ifat.ifat_hwassist = sc->cgem_hwassist;
-	ifat.ifat_capenable = sc->cgem_capenable;
+	ifat.ifat_lla = eaddr;
 	sc->ifp = if_attach(&ifat);
 
 	/* Set up TX and RX descriptor area. */
@@ -1728,7 +1701,6 @@ cgem_detach(device_t dev)
 		cgem_stop(sc);
 		CGEM_UNLOCK(sc);
 		callout_drain(&sc->tick_ch);
-		sc->cgem_if_flags &= ~IFF_UP;
 	}
 
 	if (sc->miibus != NULL) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201503252153.t2PLrH3S025844>