The original functions of promiscuous mode can't process the representor port rightly, revise the logic to do that.
Fixes: e1124c4f8a45 ("net/nfp: add flower representor framework") Signed-off-by: Chaoyong He <chaoyong...@corigine.com> --- drivers/net/nfp/flower/nfp_flower.h | 2 ++ drivers/net/nfp/flower/nfp_flower_representor.c | 47 +++---------------------- drivers/net/nfp/flower/nfp_flower_representor.h | 2 ++ drivers/net/nfp/nfp_common.c | 10 +++++- 4 files changed, 17 insertions(+), 44 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower.h b/drivers/net/nfp/flower/nfp_flower.h index 12a0fb5..f199741 100644 --- a/drivers/net/nfp/flower/nfp_flower.h +++ b/drivers/net/nfp/flower/nfp_flower.h @@ -6,6 +6,8 @@ #ifndef _NFP_FLOWER_H_ #define _NFP_FLOWER_H_ +#include "../nfp_common.h" + /* * Flower fallback and ctrl path always adds and removes * 8 bytes of prepended data. Tx descriptors must point diff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c index f1cd298..5809c83 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.c +++ b/drivers/net/nfp/flower/nfp_flower_representor.c @@ -414,45 +414,6 @@ } static int -nfp_flower_repr_promiscuous_enable(struct rte_eth_dev *dev) -{ - struct nfp_net_hw *pf_hw; - struct nfp_flower_representor *repr; - - repr = (struct nfp_flower_representor *)dev->data->dev_private; - pf_hw = repr->app_fw_flower->pf_hw; - - if (!(pf_hw->cap & NFP_NET_CFG_CTRL_PROMISC)) { - PMD_DRV_LOG(INFO, "Promiscuous mode not supported"); - return -ENOTSUP; - } - - if (pf_hw->ctrl & NFP_NET_CFG_CTRL_PROMISC) { - PMD_DRV_LOG(INFO, "Promiscuous mode already enabled"); - return 0; - } - - return nfp_net_promisc_enable(pf_hw->eth_dev); -} - -static int -nfp_flower_repr_promiscuous_disable(struct rte_eth_dev *dev) -{ - struct nfp_net_hw *pf_hw; - struct nfp_flower_representor *repr; - - repr = (struct nfp_flower_representor *)dev->data->dev_private; - pf_hw = repr->app_fw_flower->pf_hw; - - if ((pf_hw->ctrl & NFP_NET_CFG_CTRL_PROMISC) == 0) { - PMD_DRV_LOG(INFO, "Promiscuous mode already disabled"); - return 0; - } - - return nfp_net_promisc_disable(pf_hw->eth_dev); -} - -static int nfp_flower_repr_mac_addr_set(struct rte_eth_dev *ethdev, struct rte_ether_addr *mac_addr) { @@ -566,8 +527,8 @@ .stats_get = nfp_flower_repr_stats_get, .stats_reset = nfp_flower_repr_stats_reset, - .promiscuous_enable = nfp_flower_repr_promiscuous_enable, - .promiscuous_disable = nfp_flower_repr_promiscuous_disable, + .promiscuous_enable = nfp_net_promisc_enable, + .promiscuous_disable = nfp_net_promisc_enable, .mac_addr_set = nfp_flower_repr_mac_addr_set, }; @@ -587,8 +548,8 @@ .stats_get = nfp_flower_repr_stats_get, .stats_reset = nfp_flower_repr_stats_reset, - .promiscuous_enable = nfp_flower_repr_promiscuous_enable, - .promiscuous_disable = nfp_flower_repr_promiscuous_disable, + .promiscuous_enable = nfp_net_promisc_enable, + .promiscuous_disable = nfp_net_promisc_enable, .mac_addr_set = nfp_flower_repr_mac_addr_set, diff --git a/drivers/net/nfp/flower/nfp_flower_representor.h b/drivers/net/nfp/flower/nfp_flower_representor.h index af44ef3..685cbe4 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.h +++ b/drivers/net/nfp/flower/nfp_flower_representor.h @@ -6,6 +6,8 @@ #ifndef _NFP_FLOWER_REPRESENTOR_H_ #define _NFP_FLOWER_REPRESENTOR_H_ +#include "nfp_flower.h" + /* * enum nfp_repr_type - type of representor * @NFP_REPR_TYPE_PHYS_PORT: external NIC port diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c index 277ea23..463eb64 100644 --- a/drivers/net/nfp/nfp_common.c +++ b/drivers/net/nfp/nfp_common.c @@ -37,6 +37,8 @@ #include "nfpcore/nfp_rtsym.h" #include "nfpcore/nfp_nsp.h" +#include "flower/nfp_flower_representor.h" + #include "nfp_common.h" #include "nfp_ctrl.h" #include "nfp_rxtx.h" @@ -412,10 +414,16 @@ uint32_t new_ctrl, update = 0; struct nfp_net_hw *hw; int ret; + struct nfp_flower_representor *repr; PMD_DRV_LOG(DEBUG, "Promiscuous mode enable"); - hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private); + if ((dev->data->dev_flags & RTE_ETH_DEV_REPRESENTOR) != 0) { + repr = dev->data->dev_private; + hw = repr->app_fw_flower->pf_hw; + } else { + hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private); + } if (!(hw->cap & NFP_NET_CFG_CTRL_PROMISC)) { PMD_INIT_LOG(INFO, "Promiscuous mode not supported"); -- 1.8.3.1