net/enic: enable flow API for VF representor
[dpdk.git] / drivers / net / hns3 / hns3_ethdev_vf.c
index a083585..037a5be 100644 (file)
@@ -822,6 +822,10 @@ hns3vf_dev_configure(struct rte_eth_dev *dev)
                goto cfg_err;
 
        hns->rx_simple_allowed = true;
+       hns->rx_vec_allowed = true;
+       hns->tx_simple_allowed = true;
+       hns->tx_vec_allowed = true;
+
        hns3_init_rx_ptype_tble(dev);
 
        hw->adapter_state = HNS3_NIC_CONFIGURED;
@@ -867,6 +871,25 @@ hns3vf_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
                return -EIO;
        }
 
+       /*
+        * when Rx of scattered packets is off, we have some possibility of
+        * using vector Rx process function or simple Rx functions in hns3 PMD
+        * driver. If the input MTU is increased and the maximum length of
+        * received packets is greater than the length of a buffer for Rx
+        * packet, the hardware network engine needs to use multiple BDs and
+        * buffers to store these packets. This will cause problems when still
+        * using vector Rx process function or simple Rx function to receiving
+        * packets. So, when Rx of scattered packets is off and device is
+        * started, it is not permitted to increase MTU so that the maximum
+        * length of Rx packets is greater than Rx buffer length.
+        */
+       if (dev->data->dev_started && !dev->data->scattered_rx &&
+           frame_size > hw->rx_buf_len) {
+               hns3_err(hw, "failed to set mtu because current is "
+                       "not scattered rx mode");
+               return -EOPNOTSUPP;
+       }
+
        rte_spinlock_lock(&hw->lock);
        ret = hns3vf_config_mtu(hw, mtu);
        if (ret) {
@@ -956,6 +979,10 @@ hns3vf_dev_infos_get(struct rte_eth_dev *eth_dev, struct rte_eth_dev_info *info)
                .rx_drop_en = 1,
                .offloads = 0,
        };
+       info->default_txconf = (struct rte_eth_txconf) {
+               .tx_rs_thresh = HNS3_DEFAULT_TX_RS_THRESH,
+               .offloads = 0,
+       };
 
        info->vmdq_queue_num = 0;
 
@@ -2540,6 +2567,7 @@ static const struct eth_dev_ops hns3vf_eth_dev_ops = {
        .rxq_info_get       = hns3_rxq_info_get,
        .txq_info_get       = hns3_txq_info_get,
        .rx_burst_mode_get  = hns3_rx_burst_mode_get,
+       .tx_burst_mode_get  = hns3_tx_burst_mode_get,
        .mac_addr_add       = hns3vf_add_mac_addr,
        .mac_addr_remove    = hns3vf_remove_mac_addr,
        .mac_addr_set       = hns3vf_set_default_mac_addr,