From 16dbe6abdd83b55071f4fe3b884e8cac59cc2353 Mon Sep 17 00:00:00 2001 From: Somnath Kotur Date: Mon, 6 Jul 2020 13:55:01 +0530 Subject: [PATCH] net/bnxt: enable filter ctrl ops for port representor Inorder to offload flows on the vfrep device, it must be populated with rte_flow_ops. This patch enables the same. Signed-off-by: Somnath Kotur Signed-off-by: Venkat Duvvuru Reviewed-by: Ajit Khaparde --- drivers/net/bnxt/bnxt.h | 5 +++++ drivers/net/bnxt/bnxt_ethdev.c | 9 +++++++-- drivers/net/bnxt/bnxt_reps.c | 3 +-- drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 8 ++++++-- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h index f16bf33196..f69ba24933 100644 --- a/drivers/net/bnxt/bnxt.h +++ b/drivers/net/bnxt/bnxt.h @@ -897,4 +897,9 @@ void bnxt_flow_cnt_alarm_cb(void *arg); int bnxt_flow_stats_req(struct bnxt *bp); int bnxt_flow_stats_cnt(struct bnxt *bp); uint32_t bnxt_get_speed_capabilities(struct bnxt *bp); + +int +bnxt_filter_ctrl_op(struct rte_eth_dev *dev, + enum rte_filter_type filter_type, + enum rte_filter_op filter_op, void *arg); #endif diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index 3b9d3fbe73..d228223517 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -3746,7 +3746,7 @@ free_filter: return ret; } -static int +int bnxt_filter_ctrl_op(struct rte_eth_dev *dev, enum rte_filter_type filter_type, enum rte_filter_op filter_op, void *arg) @@ -3754,7 +3754,12 @@ bnxt_filter_ctrl_op(struct rte_eth_dev *dev, struct bnxt *bp = dev->data->dev_private; int ret = 0; - ret = is_bnxt_in_error(dev->data->dev_private); + if (BNXT_ETH_DEV_IS_REPRESENTOR(dev)) { + struct bnxt_vf_representor *vfr = dev->data->dev_private; + bp = vfr->parent_dev->data->dev_private; + } + + ret = is_bnxt_in_error(bp); if (ret) return ret; diff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c index 47e2dd72bb..c425e69aaf 100644 --- a/drivers/net/bnxt/bnxt_reps.c +++ b/drivers/net/bnxt/bnxt_reps.c @@ -29,6 +29,7 @@ static const struct eth_dev_ops bnxt_vf_rep_dev_ops = { .dev_stop = bnxt_vf_rep_dev_stop_op, .stats_get = bnxt_vf_rep_stats_get_op, .stats_reset = bnxt_vf_rep_stats_reset_op, + .filter_ctrl = bnxt_filter_ctrl_op }; uint16_t @@ -132,8 +133,6 @@ bnxt_vf_rep_tx_burst(void *tx_queue, pthread_mutex_unlock(&parent->rep_info->vfr_lock); return rc; - - return 0; } int bnxt_vf_representor_init(struct rte_eth_dev *eth_dev, void *params) diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c index 469ad36152..397d0a92fe 100644 --- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c +++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c @@ -923,9 +923,13 @@ bnxt_ulp_cntxt_ptr2_flow_db_get(struct bnxt_ulp_context *ulp_ctx) struct bnxt_ulp_context * bnxt_ulp_eth_dev_ptr2_cntxt_get(struct rte_eth_dev *dev) { - struct bnxt *bp; + struct bnxt *bp = (struct bnxt *)dev->data->dev_private; + + if (BNXT_ETH_DEV_IS_REPRESENTOR(dev)) { + struct bnxt_vf_representor *vfr = dev->data->dev_private; + bp = vfr->parent_dev->data->dev_private; + } - bp = (struct bnxt *)dev->data->dev_private; if (!bp) { BNXT_TF_DBG(ERR, "Bnxt private data is not initialized\n"); return NULL; -- 2.20.1