net/enic: use contiguous allocation for DMA memory
[dpdk.git] / drivers / net / enic / enic_res.c
index c8ded86..e7ad676 100644 (file)
@@ -4,7 +4,7 @@
  */
 
 #include "enic_compat.h"
-#include "rte_ethdev.h"
+#include "rte_ethdev_driver.h"
 #include "wq_enet_desc.h"
 #include "rq_enet_desc.h"
 #include "cq_enet_desc.h"
@@ -128,6 +128,26 @@ int enic_get_vnic_config(struct enic *enic)
                c->intr_timer_usec,
                c->loop_tag);
 
+       /* RSS settings from vNIC */
+       enic->reta_size = ENIC_RSS_RETA_SIZE;
+       enic->hash_key_size = ENIC_RSS_HASH_KEY_SIZE;
+       enic->flow_type_rss_offloads = 0;
+       if (ENIC_SETTING(enic, RSSHASH_IPV4))
+               enic->flow_type_rss_offloads |= ETH_RSS_IPV4;
+       if (ENIC_SETTING(enic, RSSHASH_TCPIPV4))
+               enic->flow_type_rss_offloads |= ETH_RSS_NONFRAG_IPV4_TCP;
+       if (ENIC_SETTING(enic, RSSHASH_IPV6))
+               enic->flow_type_rss_offloads |= ETH_RSS_IPV6;
+       if (ENIC_SETTING(enic, RSSHASH_TCPIPV6))
+               enic->flow_type_rss_offloads |= ETH_RSS_NONFRAG_IPV6_TCP;
+       if (ENIC_SETTING(enic, RSSHASH_IPV6_EX))
+               enic->flow_type_rss_offloads |= ETH_RSS_IPV6_EX;
+       if (ENIC_SETTING(enic, RSSHASH_TCPIPV6_EX))
+               enic->flow_type_rss_offloads |= ETH_RSS_IPV6_TCP_EX;
+       /* Zero offloads if RSS is not enabled */
+       if (!ENIC_SETTING(enic, RSS))
+               enic->flow_type_rss_offloads = 0;
+
        return 0;
 }
 
@@ -202,7 +222,8 @@ void enic_free_vnic_resources(struct enic *enic)
                        vnic_rq_free(&enic->rq[i]);
        for (i = 0; i < enic->cq_count; i++)
                vnic_cq_free(&enic->cq[i]);
-       vnic_intr_free(&enic->intr);
+       for (i = 0; i < enic->intr_count; i++)
+               vnic_intr_free(&enic->intr[i]);
 }
 
 void enic_get_res_counts(struct enic *enic)