> -----Original Message----- > From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of Yanglong Wu > Sent: Monday, November 20, 2017 12:06 PM > To: dev@dpdk.org > Cc: Wu, Yanglong <yanglong...@intel.com> > Subject: [dpdk-dev] [PATCH] net/i40e: i40e support mac loopback
"i40e" in the title can be omitted. > > According to loopback mode, setup loopback link or not. > If loopback link is setted, packets will be sent to rx_q from tx_q > directly.Loopback mode can be used to support testing task. > > Signed-off-by: Yanglong Wu <yanglong...@intel.com> > --- > drivers/net/i40e/base/i40e_adminq_cmd.h | 1 + > drivers/net/i40e/i40e_ethdev.c | 12 +++++++++++ > 2 files changed, 13 insertions(+) > > diff --git a/drivers/net/i40e/base/i40e_adminq_cmd.h > b/drivers/net/i40e/base/i40e_adminq_cmd.h > index c36da2a32..8171f877b 100644 > --- a/drivers/net/i40e/base/i40e_adminq_cmd.h > +++ b/drivers/net/i40e/base/i40e_adminq_cmd.h > @@ -2128,6 +2128,7 @@ > I40E_CHECK_CMD_LENGTH(i40e_aqc_an_advt_reg); > /* Set Loopback mode (0x0618) */ > struct i40e_aqc_set_lb_mode { > __le16 lb_mode; > +#define I40E_AQ_LB_MODE_NONE 0x0 Don't define it in base code, can move it to i40e PMD. > #define I40E_AQ_LB_PHY_LOCAL 0x01 > #define I40E_AQ_LB_PHY_REMOTE 0x02 > #define I40E_AQ_LB_MAC_LOCAL 0x04 > diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c > index f40c463aa..2e6aa9d0d 100644 > --- a/drivers/net/i40e/i40e_ethdev.c > +++ b/drivers/net/i40e/i40e_ethdev.c > @@ -2048,6 +2048,17 @@ i40e_dev_start(struct rte_eth_dev *dev) > } > } > > + /* Enable mac loopback mode */ > + if (hw->mac.type == I40E_MAC_XL710 && Only I40E_MAC_XL710 supports loopback mode? > + (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(INFO, "fail to set loopback link"); Better to use 'ERR' to replace 'INFO'. > + 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 | > -- > 2.11.0