net/ixgbe: add API to update SBP bit

Add ixgbe API to enable SBP bit in FCTRL register
to allow receiving packets that may otherwise be
considered length errors by ixgbe and dropped

Signed-off-by: Shweta Choudaha <shweta.choudaha@att.com>
Reviewed-by: Chas Williams <chas3@att.com>
Reviewed-by: Luca Boccassi <bluca@debian.org>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
This commit is contained in:
Shweta Choudaha 2018-04-10 16:42:46 +01:00 committed by Ferruh Yigit
parent 169a9da64a
commit c2071c19ad
3 changed files with 42 additions and 0 deletions

View File

@ -881,6 +881,34 @@ rte_pmd_ixgbe_set_tc_bw_alloc(uint16_t port,
return 0;
}
int __rte_experimental
rte_pmd_ixgbe_upd_fctrl_sbp(uint16_t port, int enable)
{
struct ixgbe_hw *hw;
struct rte_eth_dev *dev;
uint32_t fctrl;
RTE_ETH_VALID_PORTID_OR_ERR_RET(port, -ENODEV);
dev = &rte_eth_devices[port];
if (!is_ixgbe_supported(dev))
return -ENOTSUP;
hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
if (!hw)
return -ENOTSUP;
fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL);
/* If 'enable' set the SBP bit else clear it */
if (enable)
fctrl |= IXGBE_FCTRL_SBP;
else
fctrl &= ~(IXGBE_FCTRL_SBP);
IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl);
return 0;
}
#ifdef RTE_LIBRTE_IXGBE_BYPASS
int
rte_pmd_ixgbe_bypass_init(uint16_t port_id)

View File

@ -708,4 +708,17 @@ enum {
((x) > RTE_PMD_IXGBE_BYPASS_TMT_OFF && \
(x) < RTE_PMD_IXGBE_BYPASS_TMT_NUM))
/**
* @param port
* The port identifier of the Ethernet device.
* @param enable
* 0 to disable and nonzero to enable 'SBP' bit in FCTRL register
* to receive all packets
* @return
* - (0) if successful.
* - (-ENODEV) if *port* invalid.
* - (-ENOTSUP) if hardware doesn't support this feature.
*/
int __rte_experimental
rte_pmd_ixgbe_upd_fctrl_sbp(uint16_t port, int enable);
#endif /* _PMD_IXGBE_H_ */

View File

@ -60,4 +60,5 @@ EXPERIMENTAL {
rte_pmd_ixgbe_mdio_unlock;
rte_pmd_ixgbe_mdio_unlocked_read;
rte_pmd_ixgbe_mdio_unlocked_write;
rte_pmd_ixgbe_upd_fctrl_sbp;
};