net/sfc: allow to query RSS key and HF in isolated mode
[dpdk.git] / drivers / net / sfc / sfc_ethdev.c
index 1b6499f..00f0880 100644 (file)
@@ -171,6 +171,9 @@ sfc_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
                sa->dp_rx->get_dev_info(dev_info);
        if (sa->dp_tx->get_dev_info != NULL)
                sa->dp_tx->get_dev_info(dev_info);
+
+       dev_info->dev_capa = RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP |
+                            RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP;
 }
 
 static const uint32_t *
@@ -441,8 +444,6 @@ sfc_rx_queue_release(void *queue)
 
        sfc_log_init(sa, "RxQ=%u", sw_index);
 
-       sa->eth_dev->data->rx_queues[sw_index] = NULL;
-
        sfc_rx_qfini(sa, sw_index);
 
        sfc_adapter_unlock(sa);
@@ -497,9 +498,6 @@ sfc_tx_queue_release(void *queue)
 
        sfc_adapter_lock(sa);
 
-       SFC_ASSERT(sw_index < sa->eth_dev->data->nb_tx_queues);
-       sa->eth_dev->data->tx_queues[sw_index] = NULL;
-
        sfc_tx_qfini(sa, sw_index);
 
        sfc_adapter_unlock(sa);
@@ -874,14 +872,12 @@ sfc_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
        }
 
        /*
-        * The driver does not use it, but other PMDs update jumbo_frame
+        * The driver does not use it, but other PMDs update jumbo frame
         * flag and max_rx_pkt_len when MTU is set.
         */
        if (mtu > ETHER_MAX_LEN) {
                struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode;
-
                rxmode->offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;
-               rxmode->jumbo_frame = 1;
        }
 
        dev->data->dev_conf.rxmode.max_rx_pkt_len = sa->port.pdu;
@@ -1029,7 +1025,7 @@ sfc_set_mc_addr_list(struct rte_eth_dev *dev, struct ether_addr *mc_addr_set,
        if (rc != 0)
                sfc_err(sa, "cannot set multicast address list (rc = %u)", rc);
 
-       SFC_ASSERT(rc > 0);
+       SFC_ASSERT(rc >= 0);
        return -rc;
 }
 
@@ -1057,9 +1053,7 @@ sfc_rx_queue_info_get(struct rte_eth_dev *dev, uint16_t rx_queue_id,
        qinfo->conf.rx_free_thresh = rxq->refill_threshold;
        qinfo->conf.rx_drop_en = 1;
        qinfo->conf.rx_deferred_start = rxq_info->deferred_start;
-       qinfo->conf.offloads = DEV_RX_OFFLOAD_IPV4_CKSUM |
-                              DEV_RX_OFFLOAD_UDP_CKSUM |
-                              DEV_RX_OFFLOAD_TCP_CKSUM;
+       qinfo->conf.offloads = dev->data->dev_conf.rxmode.offloads;
        if (rxq_info->type_flags & EFX_RXQ_FLAG_SCATTER) {
                qinfo->conf.offloads |= DEV_RX_OFFLOAD_SCATTER;
                qinfo->scattered_rx = 1;
@@ -1089,7 +1083,6 @@ sfc_tx_queue_info_get(struct rte_eth_dev *dev, uint16_t tx_queue_id,
 
        memset(qinfo, 0, sizeof(*qinfo));
 
-       qinfo->conf.txq_flags = txq_info->txq->flags;
        qinfo->conf.offloads = txq_info->txq->offloads;
        qinfo->conf.tx_free_thresh = txq_info->txq->free_thresh;
        qinfo->conf.tx_deferred_start = txq_info->deferred_start;
@@ -1148,6 +1141,9 @@ sfc_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id)
        if (sa->state != SFC_ADAPTER_STARTED)
                goto fail_not_started;
 
+       if (sa->rxq_info[rx_queue_id].rxq == NULL)
+               goto fail_not_setup;
+
        rc = sfc_rx_qstart(sa, rx_queue_id);
        if (rc != 0)
                goto fail_rx_qstart;
@@ -1159,6 +1155,7 @@ sfc_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id)
        return 0;
 
 fail_rx_qstart:
+fail_not_setup:
 fail_not_started:
        sfc_adapter_unlock(sa);
        SFC_ASSERT(rc > 0);
@@ -1196,6 +1193,9 @@ sfc_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id)
        if (sa->state != SFC_ADAPTER_STARTED)
                goto fail_not_started;
 
+       if (sa->txq_info[tx_queue_id].txq == NULL)
+               goto fail_not_setup;
+
        rc = sfc_tx_qstart(sa, tx_queue_id);
        if (rc != 0)
                goto fail_tx_qstart;
@@ -1207,6 +1207,7 @@ sfc_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id)
 
 fail_tx_qstart:
 
+fail_not_setup:
 fail_not_started:
        sfc_adapter_unlock(sa);
        SFC_ASSERT(rc > 0);
@@ -1353,9 +1354,8 @@ sfc_dev_rss_hash_conf_get(struct rte_eth_dev *dev,
 {
        struct sfc_adapter *sa = dev->data->dev_private;
        struct sfc_rss *rss = &sa->rss;
-       struct sfc_port *port = &sa->port;
 
-       if (rss->context_type != EFX_RX_SCALE_EXCLUSIVE || port->isolated)
+       if (rss->context_type != EFX_RX_SCALE_EXCLUSIVE)
                return -ENOTSUP;
 
        if (rss->channels == 0)
@@ -2097,9 +2097,7 @@ RTE_PMD_REGISTER_PARAM_STRING(net_sfc_efx,
        SFC_KVARG_RXD_WAIT_TIMEOUT_NS "=<long> "
        SFC_KVARG_STATS_UPDATE_PERIOD_MS "=<long>");
 
-RTE_INIT(sfc_driver_register_logtype);
-static void
-sfc_driver_register_logtype(void)
+RTE_INIT(sfc_driver_register_logtype)
 {
        int ret;