net/mlx5: add ConnectX6-DX device ID
[dpdk.git] / drivers / net / hinic / hinic_pmd_ethdev.c
index b2cc0e4..9f37a40 100644 (file)
 #define HINIC_MIN_RX_BUF_SIZE          1024
 #define HINIC_MAX_UC_MAC_ADDRS         128
 #define HINIC_MAX_MC_MAC_ADDRS         2048
+
+#define HINIC_DEFAULT_BURST_SIZE       32
+#define HINIC_DEFAULT_NB_QUEUES                1
+#define HINIC_DEFAULT_RING_SIZE                1024
+
 /*
  * vlan_id is a 12 bit number.
  * The VFTA array is actually a 4096 bit array, 128 of 32bit elements.
@@ -70,6 +75,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 +739,8 @@ hinic_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)
                                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 |
@@ -749,6 +758,14 @@ hinic_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)
        info->rx_desc_lim = hinic_rx_desc_lim;
        info->tx_desc_lim = hinic_tx_desc_lim;
 
+       /* Driver-preferred Rx/Tx parameters */
+       info->default_rxportconf.burst_size = HINIC_DEFAULT_BURST_SIZE;
+       info->default_txportconf.burst_size = HINIC_DEFAULT_BURST_SIZE;
+       info->default_rxportconf.nb_queues = HINIC_DEFAULT_NB_QUEUES;
+       info->default_txportconf.nb_queues = HINIC_DEFAULT_NB_QUEUES;
+       info->default_rxportconf.ring_size = HINIC_DEFAULT_RING_SIZE;
+       info->default_txportconf.ring_size = HINIC_DEFAULT_RING_SIZE;
+
        return 0;
 }
 
@@ -792,6 +809,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 +826,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:
@@ -2140,6 +2170,23 @@ static int hinic_dev_xstats_get(struct rte_eth_dev *dev,
        return count;
 }
 
+static void hinic_rxq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,
+                               struct rte_eth_rxq_info *qinfo)
+{
+       struct hinic_rxq  *rxq = dev->data->rx_queues[queue_id];
+
+       qinfo->mp = rxq->mb_pool;
+       qinfo->nb_desc = rxq->q_depth;
+}
+
+static void hinic_txq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,
+                               struct rte_eth_txq_info *qinfo)
+{
+       struct hinic_txq  *txq = dev->data->tx_queues[queue_id];
+
+       qinfo->nb_desc = txq->q_depth;
+}
+
 /**
  * DPDK callback to retrieve names of extended device statistics
  *
@@ -2478,11 +2525,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)
@@ -2861,6 +2903,8 @@ static const struct eth_dev_ops hinic_pmd_ops = {
        .xstats_get                    = hinic_dev_xstats_get,
        .xstats_reset                  = hinic_dev_xstats_reset,
        .xstats_get_names              = hinic_dev_xstats_get_names,
+       .rxq_info_get                  = hinic_rxq_info_get,
+       .txq_info_get                  = hinic_txq_info_get,
        .mac_addr_set                  = hinic_set_mac_addr,
        .mac_addr_remove               = hinic_mac_addr_remove,
        .mac_addr_add                  = hinic_mac_addr_add,
@@ -2894,6 +2938,8 @@ static const struct eth_dev_ops hinic_pmd_vf_ops = {
        .xstats_get                    = hinic_dev_xstats_get,
        .xstats_reset                  = hinic_dev_xstats_reset,
        .xstats_get_names              = hinic_dev_xstats_get_names,
+       .rxq_info_get                  = hinic_rxq_info_get,
+       .txq_info_get                  = hinic_txq_info_get,
        .mac_addr_set                  = hinic_set_mac_addr,
        .mac_addr_remove               = hinic_mac_addr_remove,
        .mac_addr_add                  = hinic_mac_addr_add,