From patchwork Wed Sep 8 08:37:37 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiawen Wu X-Patchwork-Id: 98291 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 98CA7A0C56; Wed, 8 Sep 2021 10:37:36 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 045F4411B5; Wed, 8 Sep 2021 10:36:47 +0200 (CEST) Received: from smtpbguseast2.qq.com (smtpbguseast2.qq.com [54.204.34.130]) by mails.dpdk.org (Postfix) with ESMTP id BA634411B8 for ; Wed, 8 Sep 2021 10:36:44 +0200 (CEST) X-QQ-mid: bizesmtp47t1631090200tow6w7aa Received: from wxdbg.localdomain.com (unknown [183.129.236.74]) by esmtp6.qq.com (ESMTP) with id ; Wed, 08 Sep 2021 16:36:39 +0800 (CST) X-QQ-SSF: 01400000002000E0G000B00A0000000 X-QQ-FEAT: HH6/KuQOBEaX0tiTvLj10F9zNL7H7ILmOXtWuixYXQJIuPZvGmQE4b4NMaIZF PJ+hsT7R7zD6SxMBXvmf2CtiDXCq86kpZseDv4SaFn9Kyh4MefIxXgrvR+vg11N0qQEp6/+ XjnIsapeOE4psr2nOQzBjP+NCiypdNKeWU8X9o0TOun4coHXm7IKak+SAIsY0s+JrPCopRW f5MDkKdmrklMrpsg8WRmGWE3xTdGbrSXYXaH927hK2naPMEltTJ8SgVBElD+cIPx2ri3JLl Daq4nQVZKqXgHZ5CkzJB/Rt/S/MPXIVUq3REYwXNyZCmsBD4atIQf6OhOt0frrxpjexoykP e7Aqli3iuNMUHg1q4g9aMbOcHPUW2skyuzIVPjT X-QQ-GoodBg: 2 From: Jiawen Wu To: dev@dpdk.org Cc: Jiawen Wu Date: Wed, 8 Sep 2021 16:37:37 +0800 Message-Id: <20210908083758.312055-12-jiawenwu@trustnetic.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210908083758.312055-1-jiawenwu@trustnetic.com> References: <20210908083758.312055-1-jiawenwu@trustnetic.com> MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:trustnetic.com:qybgforeign:qybgforeign7 X-QQ-Bgrelay: 1 Subject: [dpdk-dev] [PATCH 11/32] net/ngbe: add device promiscuous and allmulticast mode X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Support to enable/disable promiscuous and allmulticast mode for a port. Signed-off-by: Jiawen Wu --- doc/guides/nics/features/ngbe.ini | 2 + doc/guides/nics/ngbe.rst | 2 + drivers/net/ngbe/ngbe_ethdev.c | 63 +++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) diff --git a/doc/guides/nics/features/ngbe.ini b/doc/guides/nics/features/ngbe.ini index bdb06916e1..2f38f1e843 100644 --- a/doc/guides/nics/features/ngbe.ini +++ b/doc/guides/nics/features/ngbe.ini @@ -12,6 +12,8 @@ MTU update = Y Jumbo frame = Y Scattered Rx = Y TSO = Y +Promiscuous mode = Y +Allmulticast mode = Y CRC offload = P VLAN offload = P QinQ offload = P diff --git a/doc/guides/nics/ngbe.rst b/doc/guides/nics/ngbe.rst index 64c07e4741..8333fba9cd 100644 --- a/doc/guides/nics/ngbe.rst +++ b/doc/guides/nics/ngbe.rst @@ -15,6 +15,8 @@ Features - Checksum offload - VLAN/QinQ stripping and inserting - TSO offload +- Promiscuous mode +- Multicast mode - Port hardware statistics - Jumbo frames - Link state information diff --git a/drivers/net/ngbe/ngbe_ethdev.c b/drivers/net/ngbe/ngbe_ethdev.c index 29f35d9e8d..ce71edd6d8 100644 --- a/drivers/net/ngbe/ngbe_ethdev.c +++ b/drivers/net/ngbe/ngbe_ethdev.c @@ -1674,6 +1674,65 @@ ngbe_dev_link_update(struct rte_eth_dev *dev, int wait_to_complete) return ngbe_dev_link_update_share(dev, wait_to_complete); } +static int +ngbe_dev_promiscuous_enable(struct rte_eth_dev *dev) +{ + struct ngbe_hw *hw = ngbe_dev_hw(dev); + uint32_t fctrl; + + fctrl = rd32(hw, NGBE_PSRCTL); + fctrl |= (NGBE_PSRCTL_UCP | NGBE_PSRCTL_MCP); + wr32(hw, NGBE_PSRCTL, fctrl); + + return 0; +} + +static int +ngbe_dev_promiscuous_disable(struct rte_eth_dev *dev) +{ + struct ngbe_hw *hw = ngbe_dev_hw(dev); + uint32_t fctrl; + + fctrl = rd32(hw, NGBE_PSRCTL); + fctrl &= (~NGBE_PSRCTL_UCP); + if (dev->data->all_multicast == 1) + fctrl |= NGBE_PSRCTL_MCP; + else + fctrl &= (~NGBE_PSRCTL_MCP); + wr32(hw, NGBE_PSRCTL, fctrl); + + return 0; +} + +static int +ngbe_dev_allmulticast_enable(struct rte_eth_dev *dev) +{ + struct ngbe_hw *hw = ngbe_dev_hw(dev); + uint32_t fctrl; + + fctrl = rd32(hw, NGBE_PSRCTL); + fctrl |= NGBE_PSRCTL_MCP; + wr32(hw, NGBE_PSRCTL, fctrl); + + return 0; +} + +static int +ngbe_dev_allmulticast_disable(struct rte_eth_dev *dev) +{ + struct ngbe_hw *hw = ngbe_dev_hw(dev); + uint32_t fctrl; + + if (dev->data->promiscuous == 1) + return 0; /* must remain in all_multicast mode */ + + fctrl = rd32(hw, NGBE_PSRCTL); + fctrl &= (~NGBE_PSRCTL_MCP); + wr32(hw, NGBE_PSRCTL, fctrl); + + return 0; +} + /** * It clears the interrupt causes and enables the interrupt. * It will be called once only during NIC initialized. @@ -2109,6 +2168,10 @@ static const struct eth_dev_ops ngbe_eth_dev_ops = { .dev_stop = ngbe_dev_stop, .dev_close = ngbe_dev_close, .dev_reset = ngbe_dev_reset, + .promiscuous_enable = ngbe_dev_promiscuous_enable, + .promiscuous_disable = ngbe_dev_promiscuous_disable, + .allmulticast_enable = ngbe_dev_allmulticast_enable, + .allmulticast_disable = ngbe_dev_allmulticast_disable, .link_update = ngbe_dev_link_update, .stats_get = ngbe_dev_stats_get, .xstats_get = ngbe_dev_xstats_get,