Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c
Show First 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | |||||
#include <dev/mlx4/cq.h> | #include <dev/mlx4/cq.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); | |||||
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) | ||||
{ | { | ||||
struct mlx4_en_cq *cq = container_of(napi, struct mlx4_en_cq, napi); | struct mlx4_en_cq *cq = container_of(napi, struct mlx4_en_cq, napi); | ||||
▲ Show 20 Lines • Show All 2,242 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); | |||||
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 565 Lines • ▼ Show 20 Lines | for (i = 0; i < priv->rx_ring_num; i++) { | ||||
SYSCTL_ADD_U64(ctx, ring_list, OID_AUTO, "packets", | 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 | |||||
static void | |||||
mlx4_en_netdump_init(struct ifnet *dev, int *nrxr, int *ncl, int *clsize) | |||||
{ | |||||
struct mlx4_en_priv *priv; | |||||
priv = if_getsoftc(dev); | |||||
mutex_lock(&priv->mdev->state_lock); | |||||
*nrxr = priv->rx_ring_num; | |||||
*ncl = NETDUMP_MAX_IN_FLIGHT; | |||||
*clsize = priv->rx_mb_size; | |||||
mutex_unlock(&priv->mdev->state_lock); | |||||
} | |||||
static void | |||||
mlx4_en_netdump_event(struct ifnet *dev, enum netdump_ev event) | |||||
{ | |||||
} | |||||
static int | |||||
mlx4_en_netdump_transmit(struct ifnet *dev, struct mbuf *m) | |||||
{ | |||||
struct mlx4_en_priv *priv; | |||||
int err; | |||||
priv = if_getsoftc(dev); | |||||
if ((if_getdrvflags(dev) & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != | |||||
IFF_DRV_RUNNING || !priv->link_state) | |||||
return (ENOENT); | |||||
err = mlx4_en_xmit(priv, 0, &m); | |||||
if (err != 0 && m != NULL) | |||||
m_freem(m); | |||||
return (err); | |||||
} | |||||
static int | |||||
mlx4_en_netdump_poll(struct ifnet *dev, int count) | |||||
{ | |||||
struct mlx4_en_priv *priv; | |||||
priv = if_getsoftc(dev); | |||||
if ((if_getdrvflags(dev) & IFF_DRV_RUNNING) == 0 || !priv->link_state) | |||||
return (ENOENT); | |||||
mlx4_poll_interrupts(priv->mdev->dev); | |||||
return (0); | |||||
} | |||||
#endif /* NETDUMP */ |