net/mlx5e: Hide all implementation details of mlx5e_rx_res
[sfrench/cifs-2.6.git] / drivers / net / ethernet / mellanox / mlx5 / core / en_rep.c
index 2c54951c240dd5fab6a043be71e80d69791a7ec7..f6e96b7d4698eb728253123c35707a89ccf4724b 100644 (file)
@@ -655,7 +655,7 @@ static int mlx5e_create_rep_ttc_table(struct mlx5e_priv *priv)
                                              MLX5_FLOW_NAMESPACE_KERNEL);
 
        /* The inner_ttc in the ttc params is intentionally not set */
-       ttc_params.any_tt_tirn = res->channels[0].direct_tir.tirn;
+       ttc_params.any_tt_tirn = mlx5e_rx_res_get_tirn_direct(res, 0);
        mlx5e_set_ttc_ft_params(&ttc_params);
 
        if (rep->vport != MLX5_VPORT_UPLINK)
@@ -663,7 +663,7 @@ static int mlx5e_create_rep_ttc_table(struct mlx5e_priv *priv)
                ttc_params.ft_attr.level = MLX5E_TTC_FT_LEVEL + 1;
 
        for (tt = 0; tt < MLX5E_NUM_INDIR_TIRS; tt++)
-               ttc_params.indir_tirn[tt] = res->rss[tt].indir_tir.tirn;
+               ttc_params.indir_tirn[tt] = mlx5e_rx_res_get_tirn_rss(res, tt);
 
        err = mlx5e_create_ttc_table(priv, &ttc_params, &priv->fs.ttc);
        if (err) {
@@ -758,14 +758,13 @@ int mlx5e_rep_bond_update(struct mlx5e_priv *priv, bool cleanup)
 static int mlx5e_init_rep_rx(struct mlx5e_priv *priv)
 {
        struct mlx5_core_dev *mdev = priv->mdev;
+       struct mlx5e_lro_param lro_param;
        int err;
 
-       priv->rx_res = kvzalloc(sizeof(*priv->rx_res), GFP_KERNEL);
+       priv->rx_res = mlx5e_rx_res_alloc();
        if (!priv->rx_res)
                return -ENOMEM;
 
-       mlx5e_build_rss_params(&priv->rx_res->rss_params, priv->channels.params.num_channels);
-
        mlx5e_init_l2_addr(priv);
 
        err = mlx5e_open_drop_rq(priv, &priv->drop_rq);
@@ -774,25 +773,16 @@ static int mlx5e_init_rep_rx(struct mlx5e_priv *priv)
                return err;
        }
 
-       err = mlx5e_create_indirect_rqt(priv);
+       lro_param = mlx5e_get_lro_param(&priv->channels.params);
+       err = mlx5e_rx_res_init(priv->rx_res, priv->mdev, 0,
+                               priv->max_nch, priv->drop_rq.rqn, &lro_param,
+                               priv->channels.params.num_channels);
        if (err)
                goto err_close_drop_rq;
 
-       err = mlx5e_create_direct_rqts(priv);
-       if (err)
-               goto err_destroy_indirect_rqts;
-
-       err = mlx5e_create_indirect_tirs(priv, false);
-       if (err)
-               goto err_destroy_direct_rqts;
-
-       err = mlx5e_create_direct_tirs(priv);
-       if (err)
-               goto err_destroy_indirect_tirs;
-
        err = mlx5e_create_rep_ttc_table(priv);
        if (err)
-               goto err_destroy_direct_tirs;
+               goto err_destroy_rx_res;
 
        err = mlx5e_create_rep_root_ft(priv);
        if (err)
@@ -810,17 +800,11 @@ err_destroy_root_ft:
        mlx5e_destroy_rep_root_ft(priv);
 err_destroy_ttc_table:
        mlx5e_destroy_ttc_table(priv, &priv->fs.ttc);
-err_destroy_direct_tirs:
-       mlx5e_destroy_direct_tirs(priv);
-err_destroy_indirect_tirs:
-       mlx5e_destroy_indirect_tirs(priv);
-err_destroy_direct_rqts:
-       mlx5e_destroy_direct_rqts(priv);
-err_destroy_indirect_rqts:
-       mlx5e_rqt_destroy(&priv->rx_res->indir_rqt);
+err_destroy_rx_res:
+       mlx5e_rx_res_destroy(priv->rx_res);
 err_close_drop_rq:
        mlx5e_close_drop_rq(&priv->drop_rq);
-       kvfree(priv->rx_res);
+       mlx5e_rx_res_free(priv->rx_res);
        priv->rx_res = NULL;
        return err;
 }
@@ -831,12 +815,9 @@ static void mlx5e_cleanup_rep_rx(struct mlx5e_priv *priv)
        rep_vport_rx_rule_destroy(priv);
        mlx5e_destroy_rep_root_ft(priv);
        mlx5e_destroy_ttc_table(priv, &priv->fs.ttc);
-       mlx5e_destroy_direct_tirs(priv);
-       mlx5e_destroy_indirect_tirs(priv);
-       mlx5e_destroy_direct_rqts(priv);
-       mlx5e_rqt_destroy(&priv->rx_res->indir_rqt);
+       mlx5e_rx_res_destroy(priv->rx_res);
        mlx5e_close_drop_rq(&priv->drop_rq);
-       kvfree(priv->rx_res);
+       mlx5e_rx_res_free(priv->rx_res);
        priv->rx_res = NULL;
 }