From: Xiaoyun Wang <cloud.wangxiaoyun@huawei.com>
This patch supports LRO offload.
Signed-off-by: Ziyang Xuan <xuanziyang2@huawei.com>
---
drivers/net/hinic/hinic_pmd_ethdev.c | 26 +++++++++++++++++++-------
1 file changed, 19 insertions(+), 7 deletions(-)
@@ -64,6 +64,9 @@
#define HINIC_PKTLEN_TO_MTU(pktlen) \
((pktlen) - (ETH_HLEN + ETH_CRC_LEN))
+/* lro numer limit for one packet */
+#define HINIC_LRO_WQE_NUM_DEFAULT 8
+
/** Driver-specific log messages type. */
int hinic_logtype;
@@ -722,7 +725,8 @@ static void hinic_get_speed_capa(struct rte_eth_dev *dev, uint32_t *speed_capa)
DEV_RX_OFFLOAD_TCP_CKSUM |
DEV_RX_OFFLOAD_VLAN_FILTER |
DEV_RX_OFFLOAD_SCATTER |
- DEV_RX_OFFLOAD_JUMBO_FRAME;
+ DEV_RX_OFFLOAD_JUMBO_FRAME |
+ DEV_RX_OFFLOAD_TCP_LRO;
info->tx_queue_offload_capa = 0;
info->tx_offload_capa = DEV_TX_OFFLOAD_VLAN_INSERT |
@@ -781,6 +785,7 @@ static int hinic_rxtx_configure(struct rte_eth_dev *dev)
{
int err;
struct hinic_nic_dev *nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);
+ bool lro_en;
/* rx configure, if rss enable, need to init default configuration */
err = hinic_rx_configure(dev);
@@ -797,6 +802,18 @@ static int hinic_rxtx_configure(struct rte_eth_dev *dev)
goto set_rx_mode_fail;
}
+ /* config lro */
+ lro_en = dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_TCP_LRO ?
+ true : false;
+
+ err = hinic_set_rx_lro(nic_dev->hwdev, lro_en, lro_en,
+ HINIC_LRO_WQE_NUM_DEFAULT);
+ if (err) {
+ PMD_DRV_LOG(ERR, "%s lro failed, err: %d",
+ lro_en ? "Enable" : "Disable", err);
+ goto set_rx_mode_fail;
+ }
+
return HINIC_OK;
set_rx_mode_fail:
@@ -2418,11 +2435,6 @@ static int hinic_set_default_hw_feature(struct hinic_nic_dev *nic_dev)
if (err)
return err;
- /* disable LRO */
- err = hinic_set_rx_lro(nic_dev->hwdev, 0, 0, (u8)0);
- if (err)
- return err;
-
/* Set pause enable, and up will disable pfc. */
err = hinic_set_default_pause_feature(nic_dev);
if (err)
@@ -2811,7 +2823,7 @@ static void hinic_dev_close(struct rte_eth_dev *dev)
static const struct eth_dev_ops hinic_pmd_vf_ops = {
.dev_configure = hinic_dev_configure,
.dev_infos_get = hinic_dev_infos_get,
- .fw_version_get = hinic_fw_version_get,
+ .fw_version_get = hinic_fw_version_get,
.rx_queue_setup = hinic_rx_queue_setup,
.tx_queue_setup = hinic_tx_queue_setup,
.dev_start = hinic_dev_start,