This patch supports LRO offload.
Signed-off-by: Xiaoyun wang <cloud.wangxiaoyun@huawei.com>
---
doc/guides/nics/features/hinic.ini | 1 +
doc/guides/nics/hinic.rst | 1 +
drivers/net/hinic/hinic_pmd_ethdev.c | 24 ++++++++++++++++++------
3 files changed, 20 insertions(+), 6 deletions(-)
@@ -13,6 +13,7 @@ MTU update = Y
Jumbo frame = Y
Scattered Rx = Y
TSO = Y
+LRO = Y
Promiscuous mode = Y
Allmulticast mode = Y
Unicast MAC filter = Y
@@ -33,6 +33,7 @@ Features
- Flow director
- Set Link down or up
- FW version
+- LRO
Prerequisites
-------------
@@ -70,6 +70,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;
@@ -731,7 +734,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 |
@@ -792,6 +796,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);
@@ -808,6 +813,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:
@@ -2478,11 +2495,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)