Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/mlx5/mlx5_en/mlx5_en_main.c
Show First 20 Lines • Show All 666 Lines • ▼ Show 20 Lines | mlx5e_create_rq(struct mlx5e_channel *c, | ||||
wq_sz = mlx5_wq_ll_get_size(&rq->wq); | wq_sz = mlx5_wq_ll_get_size(&rq->wq); | ||||
err = -tcp_lro_init_args(&rq->lro, c->ifp, TCP_LRO_ENTRIES, wq_sz); | err = -tcp_lro_init_args(&rq->lro, c->ifp, TCP_LRO_ENTRIES, wq_sz); | ||||
if (err) | if (err) | ||||
goto err_rq_wq_destroy; | goto err_rq_wq_destroy; | ||||
rq->mbuf = malloc(wq_sz * sizeof(rq->mbuf[0]), M_MLX5EN, M_WAITOK | M_ZERO); | rq->mbuf = malloc(wq_sz * sizeof(rq->mbuf[0]), M_MLX5EN, M_WAITOK | M_ZERO); | ||||
if (rq->mbuf == NULL) { | |||||
err = -ENOMEM; | |||||
goto err_lro_init; | |||||
} | |||||
for (i = 0; i != wq_sz; i++) { | for (i = 0; i != wq_sz; i++) { | ||||
struct mlx5e_rx_wqe *wqe = mlx5_wq_ll_get_wqe(&rq->wq, i); | struct mlx5e_rx_wqe *wqe = mlx5_wq_ll_get_wqe(&rq->wq, i); | ||||
uint32_t byte_count = rq->wqe_sz - MLX5E_NET_IP_ALIGN; | uint32_t byte_count = rq->wqe_sz - MLX5E_NET_IP_ALIGN; | ||||
err = -bus_dmamap_create(rq->dma_tag, 0, &rq->mbuf[i].dma_map); | err = -bus_dmamap_create(rq->dma_tag, 0, &rq->mbuf[i].dma_map); | ||||
if (err != 0) { | if (err != 0) { | ||||
while (i--) | while (i--) | ||||
bus_dmamap_destroy(rq->dma_tag, rq->mbuf[i].dma_map); | bus_dmamap_destroy(rq->dma_tag, rq->mbuf[i].dma_map); | ||||
Show All 11 Lines | mlx5e_create_rq(struct mlx5e_channel *c, | ||||
snprintf(buffer, sizeof(buffer), "rxstat%d", c->ix); | snprintf(buffer, sizeof(buffer), "rxstat%d", c->ix); | ||||
mlx5e_create_stats(&rq->stats.ctx, SYSCTL_CHILDREN(priv->sysctl_ifnet), | mlx5e_create_stats(&rq->stats.ctx, SYSCTL_CHILDREN(priv->sysctl_ifnet), | ||||
buffer, mlx5e_rq_stats_desc, MLX5E_RQ_STATS_NUM, | buffer, mlx5e_rq_stats_desc, MLX5E_RQ_STATS_NUM, | ||||
rq->stats.arg); | rq->stats.arg); | ||||
return (0); | return (0); | ||||
err_rq_mbuf_free: | err_rq_mbuf_free: | ||||
free(rq->mbuf, M_MLX5EN); | free(rq->mbuf, M_MLX5EN); | ||||
err_lro_init: | |||||
tcp_lro_free(&rq->lro); | tcp_lro_free(&rq->lro); | ||||
err_rq_wq_destroy: | err_rq_wq_destroy: | ||||
mlx5_wq_destroy(&rq->wq_ctrl); | mlx5_wq_destroy(&rq->wq_ctrl); | ||||
err_free_dma_tag: | err_free_dma_tag: | ||||
bus_dma_tag_destroy(rq->dma_tag); | bus_dma_tag_destroy(rq->dma_tag); | ||||
done: | done: | ||||
return (err); | return (err); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 188 Lines • ▼ Show 20 Lines | |||||
static int | static int | ||||
mlx5e_alloc_sq_db(struct mlx5e_sq *sq) | mlx5e_alloc_sq_db(struct mlx5e_sq *sq) | ||||
{ | { | ||||
int wq_sz = mlx5_wq_cyc_get_size(&sq->wq); | int wq_sz = mlx5_wq_cyc_get_size(&sq->wq); | ||||
int err; | int err; | ||||
int x; | int x; | ||||
sq->mbuf = malloc(wq_sz * sizeof(sq->mbuf[0]), M_MLX5EN, M_WAITOK | M_ZERO); | sq->mbuf = malloc(wq_sz * sizeof(sq->mbuf[0]), M_MLX5EN, M_WAITOK | M_ZERO); | ||||
if (sq->mbuf == NULL) | |||||
return (-ENOMEM); | |||||
/* Create DMA descriptor MAPs */ | /* Create DMA descriptor MAPs */ | ||||
for (x = 0; x != wq_sz; x++) { | for (x = 0; x != wq_sz; x++) { | ||||
err = -bus_dmamap_create(sq->dma_tag, 0, &sq->mbuf[x].dma_map); | err = -bus_dmamap_create(sq->dma_tag, 0, &sq->mbuf[x].dma_map); | ||||
if (err != 0) { | if (err != 0) { | ||||
while (x--) | while (x--) | ||||
bus_dmamap_destroy(sq->dma_tag, sq->mbuf[x].dma_map); | bus_dmamap_destroy(sq->dma_tag, sq->mbuf[x].dma_map); | ||||
free(sq->mbuf, M_MLX5EN); | free(sq->mbuf, M_MLX5EN); | ||||
▲ Show 20 Lines • Show All 600 Lines • ▼ Show 20 Lines | mlx5e_open_channel(struct mlx5e_priv *priv, int ix, | ||||
struct mlx5e_channel_param *cparam, | struct mlx5e_channel_param *cparam, | ||||
struct mlx5e_channel *volatile *cp) | struct mlx5e_channel *volatile *cp) | ||||
{ | { | ||||
struct mlx5e_channel *c; | struct mlx5e_channel *c; | ||||
u8 rx_moderation_mode; | u8 rx_moderation_mode; | ||||
int err; | int err; | ||||
c = malloc(sizeof(*c), M_MLX5EN, M_WAITOK | M_ZERO); | c = malloc(sizeof(*c), M_MLX5EN, M_WAITOK | M_ZERO); | ||||
if (c == NULL) | |||||
return (-ENOMEM); | |||||
c->priv = priv; | c->priv = priv; | ||||
c->ix = ix; | c->ix = ix; | ||||
c->cpu = 0; | c->cpu = 0; | ||||
c->pdev = &priv->mdev->pdev->dev; | c->pdev = &priv->mdev->pdev->dev; | ||||
c->ifp = priv->ifp; | c->ifp = priv->ifp; | ||||
c->mkey_be = cpu_to_be32(priv->mr.key); | c->mkey_be = cpu_to_be32(priv->mr.key); | ||||
c->num_tc = priv->num_tc; | c->num_tc = priv->num_tc; | ||||
▲ Show 20 Lines • Show All 183 Lines • ▼ Show 20 Lines | mlx5e_open_channels(struct mlx5e_priv *priv) | ||||
struct mlx5e_channel_param cparam; | struct mlx5e_channel_param cparam; | ||||
void *ptr; | void *ptr; | ||||
int err; | int err; | ||||
int i; | int i; | ||||
int j; | int j; | ||||
priv->channel = malloc(priv->params.num_channels * | priv->channel = malloc(priv->params.num_channels * | ||||
sizeof(struct mlx5e_channel *), M_MLX5EN, M_WAITOK | M_ZERO); | sizeof(struct mlx5e_channel *), M_MLX5EN, M_WAITOK | M_ZERO); | ||||
if (priv->channel == NULL) | |||||
return (-ENOMEM); | |||||
mlx5e_build_channel_param(priv, &cparam); | mlx5e_build_channel_param(priv, &cparam); | ||||
for (i = 0; i < priv->params.num_channels; i++) { | for (i = 0; i < priv->params.num_channels; i++) { | ||||
err = mlx5e_open_channel(priv, i, &cparam, &priv->channel[i]); | err = mlx5e_open_channel(priv, i, &cparam, &priv->channel[i]); | ||||
if (err) | if (err) | ||||
goto err_close_channels; | goto err_close_channels; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 1,151 Lines • ▼ Show 20 Lines | mlx5e_create_ifp(struct mlx5_core_dev *mdev) | ||||
int i; | int i; | ||||
u32 eth_proto_cap; | u32 eth_proto_cap; | ||||
if (mlx5e_check_required_hca_cap(mdev)) { | if (mlx5e_check_required_hca_cap(mdev)) { | ||||
mlx5_core_dbg(mdev, "mlx5e_check_required_hca_cap() failed\n"); | mlx5_core_dbg(mdev, "mlx5e_check_required_hca_cap() failed\n"); | ||||
return (NULL); | return (NULL); | ||||
} | } | ||||
priv = malloc(sizeof(*priv), M_MLX5EN, M_WAITOK | M_ZERO); | priv = malloc(sizeof(*priv), M_MLX5EN, M_WAITOK | M_ZERO); | ||||
if (priv == NULL) { | |||||
mlx5_core_err(mdev, "malloc() failed\n"); | |||||
return (NULL); | |||||
} | |||||
mlx5e_priv_mtx_init(priv); | mlx5e_priv_mtx_init(priv); | ||||
ifp = priv->ifp = if_alloc(IFT_ETHER); | ifp = priv->ifp = if_alloc(IFT_ETHER); | ||||
if (ifp == NULL) { | if (ifp == NULL) { | ||||
mlx5_core_err(mdev, "if_alloc() failed\n"); | mlx5_core_err(mdev, "if_alloc() failed\n"); | ||||
goto err_free_priv; | goto err_free_priv; | ||||
} | } | ||||
ifp->if_softc = priv; | ifp->if_softc = priv; | ||||
▲ Show 20 Lines • Show All 280 Lines • Show Last 20 Lines |