From 3a838ab649dfb2248f76dc2fefa74d0c912885c3 Mon Sep 17 00:00:00 2001 From: Yanglong Wu Date: Tue, 2 Jan 2018 10:41:23 +0800 Subject: [PATCH] net/i40e: support MAC loopback According to loopback mode, setup loopback link or not. If loopback link is set, packets transmitted will be looped back to received side directly. Signed-off-by: Yanglong Wu Acked-by: Beilei Xing --- doc/guides/rel_notes/release_18_02.rst | 6 ++++++ drivers/net/i40e/i40e_ethdev.c | 10 ++++++++++ drivers/net/i40e/i40e_ethdev.h | 3 ++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/doc/guides/rel_notes/release_18_02.rst b/doc/guides/rel_notes/release_18_02.rst index 24b67bb8b1..f3f196bbf5 100644 --- a/doc/guides/rel_notes/release_18_02.rst +++ b/doc/guides/rel_notes/release_18_02.rst @@ -41,6 +41,12 @@ New Features Also, make sure to start the actual text at the margin. ========================================================= +* **Add MAC loopback support for i40e.** + + Add MAC loopback support for i40e in order to support test task asked by + users. According to the device configuration, it will setup TX->RX loopback + link or not. + API Changes ----------- diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 0bb1af7706..6a0d77dcf3 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -2019,6 +2019,16 @@ i40e_dev_start(struct rte_eth_dev *dev) } } + /* Enable mac loopback mode */ + if (dev->data->dev_conf.lpbk_mode == I40E_AQ_LB_MODE_NONE || + dev->data->dev_conf.lpbk_mode == I40E_AQ_LB_PHY_LOCAL) { + ret = i40e_aq_set_lb_modes(hw, dev->data->dev_conf.lpbk_mode, NULL); + if (ret != I40E_SUCCESS) { + PMD_DRV_LOG(ERR, "fail to set loopback link"); + goto err_up; + } + } + /* Apply link configure */ if (dev->data->dev_conf.link_speeds & ~(ETH_LINK_SPEED_100M | ETH_LINK_SPEED_1G | ETH_LINK_SPEED_10G | diff --git a/drivers/net/i40e/i40e_ethdev.h b/drivers/net/i40e/i40e_ethdev.h index ab661a97d5..52a13ca379 100644 --- a/drivers/net/i40e/i40e_ethdev.h +++ b/drivers/net/i40e/i40e_ethdev.h @@ -32,7 +32,8 @@ #define I40E_NUM_MACADDR_MAX 64 /* Maximum number of VFs */ #define I40E_MAX_VF 128 - +/*flag of no loopback*/ +#define I40E_AQ_LB_MODE_NONE 0x0 /* * vlan_id is a 12 bit number. * The VFTA array is actually a 4096 bit array, 128 of 32bit elements. -- 2.20.1