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>