Lines Matching refs:rq
49 struct mlx5e_rq_param rq; member
838 struct mlx5e_rq *rq = &pch->rq; in mlx5e_update_stats_locked() local
839 struct mlx5e_rq_stats *rq_stats = &pch->rq.stats; in mlx5e_update_stats_locked()
842 rq_stats->sw_lro_queued = rq->lro.lro_queued; in mlx5e_update_stats_locked()
843 rq_stats->sw_lro_flushed = rq->lro.lro_flushed; in mlx5e_update_stats_locked()
1195 struct mlx5e_rq *rq) in mlx5e_create_rq() argument
1224 &rq->dma_tag))) in mlx5e_create_rq()
1227 err = mlx5_wq_ll_create(mdev, ¶m->wq, rqc_wq, &rq->wq, in mlx5e_create_rq()
1228 &rq->wq_ctrl); in mlx5e_create_rq()
1232 rq->wq.db = &rq->wq.db[MLX5_RCV_DBR]; in mlx5e_create_rq()
1234 err = mlx5e_get_wqe_sz(priv, &rq->wqe_sz, &rq->nsegs); in mlx5e_create_rq()
1238 wq_sz = mlx5_wq_ll_get_size(&rq->wq); in mlx5e_create_rq()
1240 err = -tcp_lro_init_args(&rq->lro, priv->ifp, TCP_LRO_ENTRIES, wq_sz); in mlx5e_create_rq()
1244 rq->mbuf = malloc_domainset(wq_sz * sizeof(rq->mbuf[0]), M_MLX5EN, in mlx5e_create_rq()
1247 struct mlx5e_rx_wqe *wqe = mlx5_wq_ll_get_wqe(&rq->wq, i); in mlx5e_create_rq()
1250 err = -bus_dmamap_create(rq->dma_tag, 0, &rq->mbuf[i].dma_map); in mlx5e_create_rq()
1253 bus_dmamap_destroy(rq->dma_tag, rq->mbuf[i].dma_map); in mlx5e_create_rq()
1258 for (j = 0; j < rq->nsegs; j++) in mlx5e_create_rq()
1262 INIT_WORK(&rq->dim.work, mlx5e_dim_work); in mlx5e_create_rq()
1264 rq->dim.mode = NET_DIM_CQ_PERIOD_MODE_DISABLED; in mlx5e_create_rq()
1267 struct mlx5e_channel_param, rq)->rx_cq.cqc; in mlx5e_create_rq()
1271 rq->dim.mode = NET_DIM_CQ_PERIOD_MODE_START_FROM_EQE; in mlx5e_create_rq()
1274 rq->dim.mode = NET_DIM_CQ_PERIOD_MODE_START_FROM_CQE; in mlx5e_create_rq()
1277 rq->dim.mode = NET_DIM_CQ_PERIOD_MODE_DISABLED; in mlx5e_create_rq()
1282 rq->ifp = priv->ifp; in mlx5e_create_rq()
1283 rq->channel = c; in mlx5e_create_rq()
1284 rq->ix = c->ix; in mlx5e_create_rq()
1287 mlx5e_create_stats(&rq->stats.ctx, SYSCTL_CHILDREN(priv->sysctl_ifnet), in mlx5e_create_rq()
1289 rq->stats.arg); in mlx5e_create_rq()
1293 free(rq->mbuf, M_MLX5EN); in mlx5e_create_rq()
1294 tcp_lro_free(&rq->lro); in mlx5e_create_rq()
1296 mlx5_wq_destroy(&rq->wq_ctrl); in mlx5e_create_rq()
1298 bus_dma_tag_destroy(rq->dma_tag); in mlx5e_create_rq()
1304 mlx5e_destroy_rq(struct mlx5e_rq *rq) in mlx5e_destroy_rq() argument
1310 sysctl_ctx_free(&rq->stats.ctx); in mlx5e_destroy_rq()
1313 tcp_lro_free(&rq->lro); in mlx5e_destroy_rq()
1315 wq_sz = mlx5_wq_ll_get_size(&rq->wq); in mlx5e_destroy_rq()
1317 if (rq->mbuf[i].mbuf != NULL) { in mlx5e_destroy_rq()
1318 if (rq->mbuf[i].ipsec_mtag != NULL) in mlx5e_destroy_rq()
1319 m_tag_free(&rq->mbuf[i].ipsec_mtag->tag); in mlx5e_destroy_rq()
1320 bus_dmamap_unload(rq->dma_tag, rq->mbuf[i].dma_map); in mlx5e_destroy_rq()
1321 m_freem(rq->mbuf[i].mbuf); in mlx5e_destroy_rq()
1323 bus_dmamap_destroy(rq->dma_tag, rq->mbuf[i].dma_map); in mlx5e_destroy_rq()
1325 free(rq->mbuf, M_MLX5EN); in mlx5e_destroy_rq()
1326 mlx5_wq_destroy(&rq->wq_ctrl); in mlx5e_destroy_rq()
1327 bus_dma_tag_destroy(rq->dma_tag); in mlx5e_destroy_rq()
1331 mlx5e_enable_rq(struct mlx5e_rq *rq, struct mlx5e_rq_param *param) in mlx5e_enable_rq() argument
1333 struct mlx5e_channel *c = rq->channel; in mlx5e_enable_rq()
1344 sizeof(u64) * rq->wq_ctrl.buf.npages; in mlx5e_enable_rq()
1360 MLX5_SET(wq, wq, log_wq_pg_sz, rq->wq_ctrl.buf.page_shift - in mlx5e_enable_rq()
1362 MLX5_SET64(wq, wq, dbr_addr, rq->wq_ctrl.db.dma); in mlx5e_enable_rq()
1364 mlx5_fill_page_array(&rq->wq_ctrl.buf, in mlx5e_enable_rq()
1367 err = mlx5_core_create_rq(mdev, in, inlen, &rq->rqn); in mlx5e_enable_rq()
1375 mlx5e_modify_rq(struct mlx5e_rq *rq, int curr_state, int next_state) in mlx5e_modify_rq() argument
1377 struct mlx5e_channel *c = rq->channel; in mlx5e_modify_rq()
1393 MLX5_SET(modify_rq_in, in, rqn, rq->rqn); in mlx5e_modify_rq()
1405 mlx5e_disable_rq(struct mlx5e_rq *rq) in mlx5e_disable_rq() argument
1407 struct mlx5e_channel *c = rq->channel; in mlx5e_disable_rq()
1411 mlx5_core_destroy_rq(mdev, rq->rqn); in mlx5e_disable_rq()
1417 struct mlx5e_rq *rq) in mlx5e_open_rq() argument
1421 err = mlx5e_create_rq(c, param, rq); in mlx5e_open_rq()
1426 MLX5_SET(rqc, param->rqc, cqn, c->rq.cq.mcq.cqn); in mlx5e_open_rq()
1428 err = mlx5e_enable_rq(rq, param); in mlx5e_open_rq()
1432 err = mlx5e_modify_rq(rq, MLX5_RQC_STATE_RST, MLX5_RQC_STATE_RDY); in mlx5e_open_rq()
1436 c->rq.enabled = 1; in mlx5e_open_rq()
1441 mlx5e_disable_rq(rq); in mlx5e_open_rq()
1443 mlx5e_destroy_rq(rq); in mlx5e_open_rq()
1449 mlx5e_close_rq(struct mlx5e_rq *rq) in mlx5e_close_rq() argument
1451 mtx_lock(&rq->mtx); in mlx5e_close_rq()
1452 rq->enabled = 0; in mlx5e_close_rq()
1453 callout_stop(&rq->watchdog); in mlx5e_close_rq()
1454 mtx_unlock(&rq->mtx); in mlx5e_close_rq()
1456 mlx5e_modify_rq(rq, MLX5_RQC_STATE_RDY, MLX5_RQC_STATE_ERR); in mlx5e_close_rq()
1460 mlx5e_close_rq_wait(struct mlx5e_rq *rq) in mlx5e_close_rq_wait() argument
1463 mtx_lock(&rq->mtx); in mlx5e_close_rq_wait()
1464 MPASS(rq->enabled == 0); in mlx5e_close_rq_wait()
1465 while (rq->processing > 0) { in mlx5e_close_rq_wait()
1470 msleep_sbt(&rq->processing, &rq->mtx, 0, "mlx5ecrq", in mlx5e_close_rq_wait()
1473 mtx_unlock(&rq->mtx); in mlx5e_close_rq_wait()
1474 mlx5e_disable_rq(rq); in mlx5e_close_rq_wait()
1475 mlx5e_close_cq(&rq->cq); in mlx5e_close_rq_wait()
1476 cancel_work_sync(&rq->dim.work); in mlx5e_close_rq_wait()
1477 mlx5e_destroy_rq(rq); in mlx5e_close_rq_wait()
2190 mtx_init(&c->rq.mtx, "mlx5rx", MTX_NETWORK_LOCK, MTX_DEF); in mlx5e_chan_static_init()
2192 callout_init_mtx(&c->rq.watchdog, &c->rq.mtx, 0); in mlx5e_chan_static_init()
2230 callout_drain(&c->rq.watchdog); in mlx5e_chan_static_destroy()
2232 mtx_destroy(&c->rq.mtx); in mlx5e_chan_static_destroy()
2252 MLX5E_ZERO(&c->rq, mlx5e_rq_zero_start); in mlx5e_open_channel()
2263 err = mlx5e_open_cq(c->priv, &cparam->rx_cq, &c->rq.cq, in mlx5e_open_channel()
2276 err = mlx5e_open_rq(c, &cparam->rq, &c->rq); in mlx5e_open_channel()
2282 c->rq.cq.mcq.comp(&c->rq.cq.mcq, NULL); in mlx5e_open_channel()
2294 mlx5e_close_cq(&c->rq.cq); in mlx5e_open_channel()
2306 mlx5e_close_rq(&c->rq); in mlx5e_close_channel()
2312 mlx5e_close_rq_wait(&c->rq); in mlx5e_close_channel_wait()
2486 mlx5e_build_rq_param(priv, &cparam->rq); in mlx5e_build_channel_param()
2583 mlx5e_refresh_rq_params(struct mlx5e_priv *priv, struct mlx5e_rq *rq) in mlx5e_refresh_rq_params() argument
2604 mtx_lock(&rq->mtx); in mlx5e_refresh_rq_params()
2605 rq->dim.mode = NET_DIM_CQ_PERIOD_MODE_DISABLED; in mlx5e_refresh_rq_params()
2606 mtx_unlock(&rq->mtx); in mlx5e_refresh_rq_params()
2609 cancel_work_sync(&rq->dim.work); in mlx5e_refresh_rq_params()
2616 retval = mlx5_core_modify_cq_moderation_mode(priv->mdev, &rq->cq.mcq, in mlx5e_refresh_rq_params()
2620 mtx_lock(&rq->mtx); in mlx5e_refresh_rq_params()
2621 rq->dim.mode = dim_mode; in mlx5e_refresh_rq_params()
2622 rq->dim.state = 0; in mlx5e_refresh_rq_params()
2623 rq->dim.profile_ix = MLX5E_DIM_DEFAULT_PROFILE; in mlx5e_refresh_rq_params()
2624 mtx_unlock(&rq->mtx); in mlx5e_refresh_rq_params()
2626 retval = mlx5_core_modify_cq_moderation_mode(priv->mdev, &rq->cq.mcq, in mlx5e_refresh_rq_params()
2634 return (mlx5_core_modify_cq_moderation(priv->mdev, &rq->cq.mcq, in mlx5e_refresh_rq_params()
2645 err = mlx5e_refresh_rq_params(priv, &c->rq); in mlx5e_refresh_channel_params_sub()
2831 MLX5_SET(rqtc, rqtc, rq_num[i], priv->channel[ix].rq.rqn); in mlx5e_activate_rqt()
2855 MLX5_SET(rqtc, rqtc, rq_num[0], priv->channel[ix].rq.rqn); in mlx5e_activate_rqt()
4167 struct mlx5e_rq *rq = &ch->rq; in mlx5e_disable_rx_dma() local
4171 mtx_lock(&rq->mtx); in mlx5e_disable_rx_dma()
4172 rq->enabled = 0; in mlx5e_disable_rx_dma()
4173 callout_stop(&rq->watchdog); in mlx5e_disable_rx_dma()
4174 mtx_unlock(&rq->mtx); in mlx5e_disable_rx_dma()
4176 err = mlx5e_modify_rq(rq, MLX5_RQC_STATE_RDY, MLX5_RQC_STATE_ERR); in mlx5e_disable_rx_dma()
4178 mlx5_en_err(rq->ifp, in mlx5e_disable_rx_dma()
4182 while (!mlx5_wq_ll_is_empty(&rq->wq)) { in mlx5e_disable_rx_dma()
4185 rq->cq.mcq.comp(&rq->cq.mcq, NULL); in mlx5e_disable_rx_dma()
4193 err = mlx5e_modify_rq(rq, MLX5_RQC_STATE_ERR, MLX5_RQC_STATE_RST); in mlx5e_disable_rx_dma()
4195 mlx5_en_err(rq->ifp, in mlx5e_disable_rx_dma()
4203 struct mlx5e_rq *rq = &ch->rq; in mlx5e_enable_rx_dma() local
4207 rq->wq.wqe_ctr = 0; in mlx5e_enable_rx_dma()
4208 mlx5_wq_ll_update_db_record(&rq->wq); in mlx5e_enable_rx_dma()
4209 err = mlx5e_modify_rq(rq, MLX5_RQC_STATE_RST, MLX5_RQC_STATE_RDY); in mlx5e_enable_rx_dma()
4211 mlx5_en_err(rq->ifp, in mlx5e_enable_rx_dma()
4215 rq->enabled = 1; in mlx5e_enable_rx_dma()
4218 rq->cq.mcq.comp(&rq->cq.mcq, NULL); in mlx5e_enable_rx_dma()