net/sfc: allow to query RSS key and HF when RSS is disabled
[dpdk.git] / drivers / net / sfc / sfc_ethdev.c
index 531539e..b2e17f2 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);
@@ -1027,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;
 }
 
@@ -1055,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;
@@ -1145,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;
@@ -1156,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);
@@ -1193,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;
@@ -1204,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);
@@ -1350,14 +1354,10 @@ 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)
-               return -EINVAL;
-
        sfc_adapter_lock(sa);
 
        /*
@@ -2094,9 +2094,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;