From: Ajit Khaparde <ajit.khaparde@broadcom.com>
To: dev@dpdk.org
Cc: Stephen Hurd <stephen.hurd@broadcom.com>
Subject: [dpdk-dev] [PATCH 10/28] bnxt: support for VF VLAN filtering
Date: Mon, 27 Mar 2017 22:48:45 -0500 [thread overview]
Message-ID: <20170328034903.41482-11-ajit.khaparde@broadcom.com> (raw)
In-Reply-To: <20170328034903.41482-1-ajit.khaparde@broadcom.com>
This patch adds support to enable/disable hardware VF VLAN filtering
of received VLAN packets tagged with a specified VLAN Tag Identifier.
This patch also modifies testpmd to call the appropriate function
when bnxt PMD is in use.
Signed-off-by: Stephen Hurd <stephen.hurd@broadcom.com>
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
app/test-pmd/cmdline.c | 5 +++++
drivers/net/bnxt/bnxt_hwrm.c | 18 ++++++++++++++++++
drivers/net/bnxt/bnxt_hwrm.h | 1 +
drivers/net/bnxt/rte_pmd_bnxt.c | 30 ++++++++++++++++++++++++++++++
drivers/net/bnxt/rte_pmd_bnxt.h | 22 ++++++++++++++++++++++
drivers/net/bnxt/rte_pmd_bnxt_version.map | 1 +
6 files changed, 77 insertions(+)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 6e51260..a93297e 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -6919,6 +6919,11 @@ cmd_vf_rx_vlan_filter_parsed(void *parsed_result,
ret = rte_pmd_ixgbe_set_vf_vlan_filter(res->port_id,
res->vlan_id, res->vf_mask, is_add);
#endif
+#ifdef RTE_LIBRTE_BNXT_PMD
+ if (ret == -ENOTSUP)
+ ret = rte_pmd_bnxt_set_vf_vlan_filter(res->port_id,
+ res->vlan_id, res->vf_mask, is_add);
+#endif
#ifdef RTE_LIBRTE_I40E_PMD
if (ret == -ENOTSUP)
ret = rte_pmd_i40e_set_vf_vlan_filter(res->port_id,
diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index b8bd8cb..0aa2234 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -2089,3 +2089,21 @@ int bnxt_hwrm_func_bw_cfg(struct bnxt *bp, uint16_t vf,
return rc;
}
+
+int bnxt_hwrm_set_vf_vlan(struct bnxt *bp, int vf, uint16_t vlan)
+{
+ struct hwrm_func_cfg_input req = {0};
+ struct hwrm_func_cfg_output *resp = bp->hwrm_cmd_resp_addr;
+ int rc = 0;
+
+ HWRM_PREP(req, FUNC_CFG, -1, resp);
+ req.flags = rte_cpu_to_le_32(bp->pf.vf_info[vf].func_cfg_flags);
+ req.fid = rte_cpu_to_le_16(bp->pf.vf_info[vf].fid);
+ req.enables |= rte_cpu_to_le_32(HWRM_FUNC_CFG_INPUT_ENABLES_DFLT_VLAN);
+ req.dflt_vlan = rte_cpu_to_le_16(vlan);
+
+ rc = bnxt_hwrm_send_message(bp, &req, sizeof(req));
+ HWRM_CHECK_RESULT;
+
+ return rc;
+}
diff --git a/drivers/net/bnxt/bnxt_hwrm.h b/drivers/net/bnxt/bnxt_hwrm.h
index c07c648..2f245e5 100644
--- a/drivers/net/bnxt/bnxt_hwrm.h
+++ b/drivers/net/bnxt/bnxt_hwrm.h
@@ -112,6 +112,7 @@ int bnxt_hwrm_allocate_vfs(struct bnxt *bp, int num_vfs);
int bnxt_hwrm_func_vf_stall(struct bnxt *bp, uint16_t vf, uint8_t on);
int bnxt_hwrm_func_vf_mac(struct bnxt *bp, uint16_t vf, uint8_t *mac_addr);
int bnxt_hwrm_pf_evb_mode(struct bnxt *bp);
+int bnxt_hwrm_set_vf_vlan(struct bnxt *bp, int vf, uint16_t vlan);
int bnxt_hwrm_func_bw_cfg(struct bnxt *bp, uint16_t vf,
uint16_t max_bw, uint16_t enables);
#endif
diff --git a/drivers/net/bnxt/rte_pmd_bnxt.c b/drivers/net/bnxt/rte_pmd_bnxt.c
index a4e5417..901e356 100644
--- a/drivers/net/bnxt/rte_pmd_bnxt.c
+++ b/drivers/net/bnxt/rte_pmd_bnxt.c
@@ -218,3 +218,33 @@ int rte_pmd_bnxt_set_vf_rate_limit(uint8_t port, uint16_t vf,
return rc;
}
+int rte_pmd_bnxt_set_vf_vlan_filter(uint8_t port, uint16_t vlan,
+ uint64_t vf_mask, uint8_t vlan_on)
+{
+ struct rte_eth_dev *eth_dev;
+ struct rte_eth_dev_info dev_info;
+ struct bnxt *bp;
+ int i;
+ int ret;
+ int rc = 0;
+
+ RTE_ETH_VALID_PORTID_OR_ERR_RET(port, -ENODEV);
+
+ eth_dev = &rte_eth_devices[port];
+ rte_eth_dev_info_get(port, &dev_info);
+ bp = (struct bnxt *)eth_dev->data->dev_private;
+
+ if (!bp->pf.vf_info)
+ return -EINVAL;
+
+ for (i = 0; vf_mask; i++, vf_mask >>= 1) {
+ if (vf_mask & 1) {
+ ret = bnxt_hwrm_set_vf_vlan(bp, i, vlan_on ? vlan : 0);
+ if (ret)
+ rc = ret;
+ }
+ }
+
+ return rc;
+}
+
diff --git a/drivers/net/bnxt/rte_pmd_bnxt.h b/drivers/net/bnxt/rte_pmd_bnxt.h
index ffacda5..3237cec 100644
--- a/drivers/net/bnxt/rte_pmd_bnxt.h
+++ b/drivers/net/bnxt/rte_pmd_bnxt.h
@@ -130,4 +130,26 @@ int rte_pmd_bnxt_set_all_queues_drop_en(uint8_t port, uint8_t on);
*/
int rte_pmd_bnxt_set_vf_rate_limit(uint8_t port, uint16_t vf,
uint16_t tx_rate, uint64_t q_msk);
+
+/**
+ * Enable/Disable hardware VF VLAN filtering by an Ethernet device of
+ * received VLAN packets tagged with a given VLAN Tag Identifier.
+ *
+ * @param port
+ * The port identifier of the Ethernet device.
+ * @param vlan
+ * The VLAN Tag Identifier whose filtering must be enabled or disabled.
+ * @param vf_mask
+ * Bitmap listing which VFs participate in the VLAN filtering.
+ * @param vlan_on
+ * 1 - Enable VFs VLAN filtering.
+ * 0 - Disable VFs VLAN filtering.
+ * @return
+ * - (0) if successful.
+ * - (-ENOTSUP) if hardware doesn't support.
+ * - (-ENODEV) if *port_id* invalid.
+ * - (-EINVAL) if bad parameter.
+ */
+int rte_pmd_bnxt_set_vf_vlan_filter(uint8_t port, uint16_t vlan,
+ uint64_t vf_mask, uint8_t vlan_on);
#endif /* _PMD_BNXT_H_ */
diff --git a/drivers/net/bnxt/rte_pmd_bnxt_version.map b/drivers/net/bnxt/rte_pmd_bnxt_version.map
index d01b1e0..8af7ee0 100644
--- a/drivers/net/bnxt/rte_pmd_bnxt_version.map
+++ b/drivers/net/bnxt/rte_pmd_bnxt_version.map
@@ -4,5 +4,6 @@ DPDK_17.05 {
rte_pmd_bnxt_set_tx_loopback;
rte_pmd_bnxt_set_all_queues_drop_en;
rte_pmd_bnxt_set_vf_mac_addr;
+ rte_pmd_bnxt_set_vf_vlan_filter;
};
--
2.10.1 (Apple Git-78)
next prev parent reply other threads:[~2017-03-28 3:49 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-28 3:48 [dpdk-dev] [PATCH 00/28] bnxt: new features, bug fixes and more Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 01/28] bnxt: add hwrm_func_cfg_input/output structures Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 02/28] bnxt: add code to support PF, VF configuration Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 03/28] bnxt: add additonal HWRM debug info to error messages Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 04/28] bnxt: add new HWRM commands Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 05/28] bnxt: add support for PF/VF communications Ajit Khaparde
2017-05-11 17:00 ` Ferruh Yigit
2017-05-11 17:07 ` Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 06/28] bnxt: add new HWRM commands to query VNIC info Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 07/28] bnxt: add functions for tx_loopback and queues_drop_en Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 08/28] bnxt: support setting VF mac address Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 09/28] bnxt: add code to support VF QOS configuration Ajit Khaparde
2017-03-28 3:48 ` Ajit Khaparde [this message]
2017-03-28 3:48 ` [dpdk-dev] [PATCH 11/28] bnxt: set the VMDQ pool size correctly Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 12/28] bnxt: improve some of the log messages Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 13/28] bnxt: fix interrupt handler Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 14/28] bnxt: Add support for udp_tunnel_port_add/del dev_ops Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 15/28] bnxt: Update tx offload capabilities Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 16/28] bnxt: add support for set VF MAC anti spoof Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 17/28] bnxt: implement VF VLAN stripq functionality Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 18/28] bnxt: support lack of huge pages Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 19/28] bnxt: add code to configure a default VF VLAN Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 20/28] bnxt: Add support to set VF rxmode Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 21/28] bnxt: Add VF stats get/reset functions Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 22/28] bnxt: Add newlines to all RTE_LOG() format strings Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 23/28] bnxt: Add support for VLAN filter and strip dev_ops Ajit Khaparde
2017-03-28 3:48 ` [dpdk-dev] [PATCH 24/28] bnxt: Add support for mac_addr_set dev_op Ajit Khaparde
2017-03-28 3:49 ` [dpdk-dev] [PATCH 25/28] bnxt: add support for xstats Ajit Khaparde
2017-03-28 3:49 ` [dpdk-dev] [PATCH 26/28] bnxt: use only long BDs in Tx path Ajit Khaparde
2017-03-28 3:49 ` [dpdk-dev] [PATCH 27/28] bnxt: add support for set_mc_addr_list dev_op Ajit Khaparde
2017-03-28 3:49 ` [dpdk-dev] [PATCH 28/28] bnxt: update to HWRM version 1.7.4 Ajit Khaparde
2017-03-29 12:14 ` [dpdk-dev] [PATCH 00/28] bnxt: new features, bug fixes and more Ferruh Yigit
2017-03-29 15:45 ` Ferruh Yigit
2017-03-29 19:31 ` Ajit Khaparde
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170328034903.41482-11-ajit.khaparde@broadcom.com \
--to=ajit.khaparde@broadcom.com \
--cc=dev@dpdk.org \
--cc=stephen.hurd@broadcom.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).