Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c
Show First 20 Lines • Show All 48 Lines • ▼ Show 20 Lines | |||||
#include <sys/eventhandler.h> | #include <sys/eventhandler.h> | ||||
#include <sys/sockio.h> | #include <sys/sockio.h> | ||||
#include <sys/sysctl.h> | #include <sys/sysctl.h> | ||||
#include "en.h" | #include "en.h" | ||||
#include "en_port.h" | #include "en_port.h" | ||||
NETDUMP_DEFINE(mlx4_en); | DEBUGNET_DEFINE(mlx4_en); | ||||
static void mlx4_en_sysctl_stat(struct mlx4_en_priv *priv); | static void mlx4_en_sysctl_stat(struct mlx4_en_priv *priv); | ||||
static void mlx4_en_sysctl_conf(struct mlx4_en_priv *priv); | static void mlx4_en_sysctl_conf(struct mlx4_en_priv *priv); | ||||
#ifdef CONFIG_NET_RX_BUSY_POLL | #ifdef CONFIG_NET_RX_BUSY_POLL | ||||
/* must be called with local_bh_disable()d */ | /* must be called with local_bh_disable()d */ | ||||
static int mlx4_en_low_latency_recv(struct napi_struct *napi) | static int mlx4_en_low_latency_recv(struct napi_struct *napi) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 2,236 Lines • ▼ Show 20 Lines | ifmedia_init(&priv->media, IFM_IMASK | IFM_ETH_FMASK, | ||||
mlx4_en_media_change, mlx4_en_media_status); | mlx4_en_media_change, mlx4_en_media_status); | ||||
ifmedia_add(&priv->media, IFM_ETHER | IFM_FDX | IFM_1000_T, 0, NULL); | ifmedia_add(&priv->media, IFM_ETHER | IFM_FDX | IFM_1000_T, 0, NULL); | ||||
ifmedia_add(&priv->media, IFM_ETHER | IFM_FDX | IFM_10G_SR, 0, NULL); | ifmedia_add(&priv->media, IFM_ETHER | IFM_FDX | IFM_10G_SR, 0, NULL); | ||||
ifmedia_add(&priv->media, IFM_ETHER | IFM_FDX | IFM_10G_CX4, 0, NULL); | ifmedia_add(&priv->media, IFM_ETHER | IFM_FDX | IFM_10G_CX4, 0, NULL); | ||||
ifmedia_add(&priv->media, IFM_ETHER | IFM_FDX | IFM_40G_CR4, 0, NULL); | ifmedia_add(&priv->media, IFM_ETHER | IFM_FDX | IFM_40G_CR4, 0, NULL); | ||||
ifmedia_add(&priv->media, IFM_ETHER | IFM_AUTO, 0, NULL); | ifmedia_add(&priv->media, IFM_ETHER | IFM_AUTO, 0, NULL); | ||||
ifmedia_set(&priv->media, IFM_ETHER | IFM_AUTO); | ifmedia_set(&priv->media, IFM_ETHER | IFM_AUTO); | ||||
NETDUMP_SET(dev, mlx4_en); | DEBUGNET_SET(dev, mlx4_en); | ||||
en_warn(priv, "Using %d TX rings\n", prof->tx_ring_num); | en_warn(priv, "Using %d TX rings\n", prof->tx_ring_num); | ||||
en_warn(priv, "Using %d RX rings\n", prof->rx_ring_num); | en_warn(priv, "Using %d RX rings\n", prof->rx_ring_num); | ||||
priv->registered = 1; | priv->registered = 1; | ||||
en_warn(priv, "Using %d TX rings\n", prof->tx_ring_num); | en_warn(priv, "Using %d TX rings\n", prof->tx_ring_num); | ||||
en_warn(priv, "Using %d RX rings\n", prof->rx_ring_num); | en_warn(priv, "Using %d RX rings\n", prof->rx_ring_num); | ||||
▲ Show 20 Lines • Show All 567 Lines • ▼ Show 20 Lines | SYSCTL_ADD_U64(ctx, ring_list, OID_AUTO, "packets", | ||||
CTLFLAG_RD, &rx_ring->packets, 0, "RX packets"); | CTLFLAG_RD, &rx_ring->packets, 0, "RX packets"); | ||||
SYSCTL_ADD_U64(ctx, ring_list, OID_AUTO, "bytes", | SYSCTL_ADD_U64(ctx, ring_list, OID_AUTO, "bytes", | ||||
CTLFLAG_RD, &rx_ring->bytes, 0, "RX bytes"); | CTLFLAG_RD, &rx_ring->bytes, 0, "RX bytes"); | ||||
SYSCTL_ADD_U64(ctx, ring_list, OID_AUTO, "error", | SYSCTL_ADD_U64(ctx, ring_list, OID_AUTO, "error", | ||||
CTLFLAG_RD, &rx_ring->errors, 0, "RX soft errors"); | CTLFLAG_RD, &rx_ring->errors, 0, "RX soft errors"); | ||||
} | } | ||||
} | } | ||||
#ifdef NETDUMP | #ifdef DEBUGNET | ||||
static void | static void | ||||
mlx4_en_netdump_init(struct ifnet *dev, int *nrxr, int *ncl, int *clsize) | mlx4_en_debugnet_init(struct ifnet *dev, int *nrxr, int *ncl, int *clsize) | ||||
{ | { | ||||
struct mlx4_en_priv *priv; | struct mlx4_en_priv *priv; | ||||
priv = if_getsoftc(dev); | priv = if_getsoftc(dev); | ||||
mutex_lock(&priv->mdev->state_lock); | mutex_lock(&priv->mdev->state_lock); | ||||
*nrxr = priv->rx_ring_num; | *nrxr = priv->rx_ring_num; | ||||
*ncl = NETDUMP_MAX_IN_FLIGHT; | *ncl = DEBUGNET_MAX_IN_FLIGHT; | ||||
*clsize = priv->rx_mb_size; | *clsize = priv->rx_mb_size; | ||||
mutex_unlock(&priv->mdev->state_lock); | mutex_unlock(&priv->mdev->state_lock); | ||||
} | } | ||||
static void | static void | ||||
mlx4_en_netdump_event(struct ifnet *dev, enum netdump_ev event) | mlx4_en_debugnet_event(struct ifnet *dev, enum debugnet_ev event) | ||||
{ | { | ||||
} | } | ||||
static int | static int | ||||
mlx4_en_netdump_transmit(struct ifnet *dev, struct mbuf *m) | mlx4_en_debugnet_transmit(struct ifnet *dev, struct mbuf *m) | ||||
{ | { | ||||
struct mlx4_en_priv *priv; | struct mlx4_en_priv *priv; | ||||
int err; | int err; | ||||
priv = if_getsoftc(dev); | priv = if_getsoftc(dev); | ||||
if ((if_getdrvflags(dev) & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != | if ((if_getdrvflags(dev) & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != | ||||
IFF_DRV_RUNNING || !priv->link_state) | IFF_DRV_RUNNING || !priv->link_state) | ||||
return (ENOENT); | return (ENOENT); | ||||
err = mlx4_en_xmit(priv, 0, &m); | err = mlx4_en_xmit(priv, 0, &m); | ||||
if (err != 0 && m != NULL) | if (err != 0 && m != NULL) | ||||
m_freem(m); | m_freem(m); | ||||
return (err); | return (err); | ||||
} | } | ||||
static int | static int | ||||
mlx4_en_netdump_poll(struct ifnet *dev, int count) | mlx4_en_debugnet_poll(struct ifnet *dev, int count) | ||||
{ | { | ||||
struct mlx4_en_priv *priv; | struct mlx4_en_priv *priv; | ||||
priv = if_getsoftc(dev); | priv = if_getsoftc(dev); | ||||
if ((if_getdrvflags(dev) & IFF_DRV_RUNNING) == 0 || !priv->link_state) | if ((if_getdrvflags(dev) & IFF_DRV_RUNNING) == 0 || !priv->link_state) | ||||
return (ENOENT); | return (ENOENT); | ||||
mlx4_poll_interrupts(priv->mdev->dev); | mlx4_poll_interrupts(priv->mdev->dev); | ||||
return (0); | return (0); | ||||
} | } | ||||
#endif /* NETDUMP */ | #endif /* DEBUGNET */ |