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
This commit is contained in:
Mark Johnston 2018-05-06 00:47:39 +00:00
parent ded669627a
commit 6eadb68b14
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=333287
2 changed files with 60 additions and 0 deletions

View file

@ -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, int fflag,
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 */

View file

@ -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>