Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 6 May 2018 00:47:39 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r333287 - head/sys/dev/bxe
Message-ID:  <201805060047.w460ldT7084800@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markj
Date: Sun May  6 00:47:39 2018
New Revision: 333287
URL: https://svnweb.freebsd.org/changeset/base/333287

Log:
  Add netdump support to bxe(4).
  
  Tested with a NetXtreme II BCM57810 adapter.
  
  Reviewed by:	davidcs
  MFC after:	1 month
  Sponsored by:	Dell EMC Isilon
  Differential Revision:	https://reviews.freebsd.org/D15257

Modified:
  head/sys/dev/bxe/bxe.c
  head/sys/dev/bxe/bxe.h

Modified: head/sys/dev/bxe/bxe.c
==============================================================================
--- head/sys/dev/bxe/bxe.c	Sun May  6 00:45:41 2018	(r333286)
+++ head/sys/dev/bxe/bxe.c	Sun May  6 00:47:39 2018	(r333287)
@@ -236,6 +236,8 @@ MODULE_DEPEND(bxe, pci, 1, 1, 1);
 MODULE_DEPEND(bxe, ether, 1, 1, 1);
 DRIVER_MODULE(bxe, pci, bxe_driver, bxe_devclass, 0, 0);
 
+NETDUMP_DEFINE(bxe);
+
 /* resources needed for unloading a previously loaded device */
 
 #define BXE_PREV_WAIT_NEEDED 1
@@ -12789,6 +12791,9 @@ bxe_init_ifnet(struct bxe_softc *sc)
     /* attach to the Ethernet interface list */
     ether_ifattach(ifp, sc->link_params.mac_addr);
 
+    /* Attach driver netdump methods. */
+    NETDUMP_SET(ifp, bxe);
+
     return (0);
 }
 
@@ -19186,3 +19191,57 @@ bxe_eioctl(struct cdev *dev, u_long cmd, caddr_t data,
 
     return (rval);
 }
+
+#ifdef NETDUMP
+static void
+bxe_netdump_init(struct ifnet *ifp, int *nrxr, int *ncl, int *clsize)
+{
+	struct bxe_softc *sc;
+
+	sc = if_getsoftc(ifp);
+	BXE_CORE_LOCK(sc);
+	*nrxr = sc->num_queues;
+	*ncl = NETDUMP_MAX_IN_FLIGHT;
+	*clsize = sc->fp[0].mbuf_alloc_size;
+	BXE_CORE_UNLOCK(sc);
+}
+
+static void
+bxe_netdump_event(struct ifnet *ifp __unused, enum netdump_ev event __unused)
+{
+}
+
+static int
+bxe_netdump_transmit(struct ifnet *ifp, struct mbuf *m)
+{
+	struct bxe_softc *sc;
+	int error;
+
+	sc = if_getsoftc(ifp);
+	if ((if_getdrvflags(ifp) & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) !=
+	    IFF_DRV_RUNNING || !sc->link_vars.link_up)
+		return (ENOENT);
+
+	error = bxe_tx_encap(&sc->fp[0], &m);
+	if (error != 0 && m != NULL)
+		m_freem(m);
+	return (error);
+}
+
+static int
+bxe_netdump_poll(struct ifnet *ifp, int count)
+{
+	struct bxe_softc *sc;
+	int i;
+
+	sc = if_getsoftc(ifp);
+	if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0 ||
+	    !sc->link_vars.link_up)
+		return (ENOENT);
+
+	for (i = 0; i < sc->num_queues; i++)
+		(void)bxe_rxeof(sc, &sc->fp[0]);
+	(void)bxe_txeof(sc, &sc->fp[0]);
+	return (0);
+}
+#endif /* NETDUMP */

Modified: head/sys/dev/bxe/bxe.h
==============================================================================
--- head/sys/dev/bxe/bxe.h	Sun May  6 00:45:41 2018	(r333286)
+++ head/sys/dev/bxe/bxe.h	Sun May  6 00:47:39 2018	(r333287)
@@ -70,6 +70,7 @@ __FBSDID("$FreeBSD$");
 #include <netinet/ip6.h>
 #include <netinet/tcp.h>
 #include <netinet/udp.h>
+#include <netinet/netdump/netdump.h>
 
 #include <dev/pci/pcireg.h>
 #include <dev/pci/pcivar.h>



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