From owner-svn-src-user@FreeBSD.ORG Tue Apr 27 02:14:42 2010 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A1C011065670; Tue, 27 Apr 2010 02:14:42 +0000 (UTC) (envelope-from jmallett@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9131F8FC14; Tue, 27 Apr 2010 02:14:42 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o3R2Eg76068712; Tue, 27 Apr 2010 02:14:42 GMT (envelope-from jmallett@svn.freebsd.org) Received: (from jmallett@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o3R2EgWp068709; Tue, 27 Apr 2010 02:14:42 GMT (envelope-from jmallett@svn.freebsd.org) Message-Id: <201004270214.o3R2EgWp068709@svn.freebsd.org> From: Juli Mallett Date: Tue, 27 Apr 2010 02:14:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r207257 - user/jmallett/octeon/sys/mips/cavium/octe X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Apr 2010 02:14:42 -0000 Author: jmallett Date: Tue Apr 27 02:14:42 2010 New Revision: 207257 URL: http://svn.freebsd.org/changeset/base/207257 Log: o) Remove the enabling of cvm_oct_common_set_multicast_list(). It's not quite ready and seems to basically not work. o) Avoid some gratuitous link state renegotiations since those are very, very slow. (Inspired in part by em(4).) Modified: user/jmallett/octeon/sys/mips/cavium/octe/ethernet-common.c user/jmallett/octeon/sys/mips/cavium/octe/octe.c Modified: user/jmallett/octeon/sys/mips/cavium/octe/ethernet-common.c ============================================================================== --- user/jmallett/octeon/sys/mips/cavium/octe/ethernet-common.c Tue Apr 27 01:00:22 2010 (r207256) +++ user/jmallett/octeon/sys/mips/cavium/octe/ethernet-common.c Tue Apr 27 02:14:42 2010 (r207257) @@ -100,6 +100,7 @@ static struct ifnet_stats *cvm_oct_commo */ void cvm_oct_common_set_multicast_list(struct ifnet *ifp) { +#if 0 cvmx_gmxx_prtx_cfg_t gmx_cfg; cvm_oct_private_t *priv = (cvm_oct_private_t *)ifp->if_softc; int interface = INTERFACE(priv->port); @@ -132,6 +133,7 @@ void cvm_oct_common_set_multicast_list(s cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmx_cfg.u64); } +#endif } Modified: user/jmallett/octeon/sys/mips/cavium/octe/octe.c ============================================================================== --- user/jmallett/octeon/sys/mips/cavium/octe/octe.c Tue Apr 27 01:00:22 2010 (r207256) +++ user/jmallett/octeon/sys/mips/cavium/octe/octe.c Tue Apr 27 02:14:42 2010 (r207257) @@ -38,6 +38,8 @@ * attach the specific PHY for each interface without an miibus in between. */ +#include "opt_inet.h" + #include #include #include @@ -58,6 +60,11 @@ #include #include +#ifdef INET +#include +#include +#endif + #include #include @@ -230,7 +237,8 @@ octe_init(void *arg) priv = arg; ifp = priv->ifp; - octe_stop(priv); + if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) + octe_stop(priv); if (priv->open != NULL) priv->open(ifp); @@ -238,8 +246,6 @@ octe_init(void *arg) if (priv->miibus != NULL) mii_mediachg(device_get_softc(priv->miibus)); - cvm_oct_common_set_multicast_list(ifp); - ifp->if_drv_flags |= IFF_DRV_RUNNING; ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; } @@ -253,6 +259,9 @@ octe_stop(void *arg) priv = arg; ifp = priv->ifp; + if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) + return; + if (priv->stop != NULL) priv->stop(ifp); @@ -394,12 +403,37 @@ octe_ioctl(struct ifnet *ifp, u_long cmd cvm_oct_private_t *priv; struct mii_data *mii; struct ifreq *ifr; +#ifdef INET + struct ifaddr *ifa; +#endif int error; priv = ifp->if_softc; ifr = (struct ifreq *)data; +#ifdef INET + ifa = (struct ifaddr *)data; +#endif switch (cmd) { + case SIOCSIFADDR: +#ifdef INET + /* + * Avoid reinitialization unless it's necessary. + */ + if (ifa->ifa_addr->sa_family == AF_INET) { + ifp->if_flags |= IFF_UP; + if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) + octe_init(priv); + arp_ifinit(ifp, ifa); + + return (0); + } +#endif + error = ether_ioctl(ifp, cmd, data); + if (error != 0) + return (error); + return (0); + case SIOCSIFFLAGS: if ((ifp->if_flags & IFF_UP) != 0) { if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)