common/sfc_efx/base: implement Tx control path for Riverhead
[dpdk.git] / drivers / net / enic / enic_main.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2008-2017 Cisco Systems, Inc.  All rights reserved.
3  * Copyright 2007 Nuova Systems, Inc.  All rights reserved.
4  */
5
6 #include <stdio.h>
7
8 #include <sys/stat.h>
9 #include <sys/mman.h>
10 #include <fcntl.h>
11
12 #include <rte_pci.h>
13 #include <rte_bus_pci.h>
14 #include <rte_memzone.h>
15 #include <rte_malloc.h>
16 #include <rte_mbuf.h>
17 #include <rte_string_fns.h>
18 #include <rte_ethdev_driver.h>
19
20 #include "enic_compat.h"
21 #include "enic.h"
22 #include "wq_enet_desc.h"
23 #include "rq_enet_desc.h"
24 #include "cq_enet_desc.h"
25 #include "vnic_enet.h"
26 #include "vnic_dev.h"
27 #include "vnic_wq.h"
28 #include "vnic_rq.h"
29 #include "vnic_cq.h"
30 #include "vnic_intr.h"
31 #include "vnic_nic.h"
32
33 static inline int enic_is_sriov_vf(struct enic *enic)
34 {
35         return enic->pdev->id.device_id == PCI_DEVICE_ID_CISCO_VIC_ENET_VF;
36 }
37
38 static int is_zero_addr(uint8_t *addr)
39 {
40         return !(addr[0] |  addr[1] | addr[2] | addr[3] | addr[4] | addr[5]);
41 }
42
43 static int is_mcast_addr(uint8_t *addr)
44 {
45         return addr[0] & 1;
46 }
47
48 static int is_eth_addr_valid(uint8_t *addr)
49 {
50         return !is_mcast_addr(addr) && !is_zero_addr(addr);
51 }
52
53 void
54 enic_rxmbuf_queue_release(__rte_unused struct enic *enic, struct vnic_rq *rq)
55 {
56         uint16_t i;
57
58         if (!rq || !rq->mbuf_ring) {
59                 dev_debug(enic, "Pointer to rq or mbuf_ring is NULL");
60                 return;
61         }
62
63         for (i = 0; i < rq->ring.desc_count; i++) {
64                 if (rq->mbuf_ring[i]) {
65                         rte_pktmbuf_free_seg(rq->mbuf_ring[i]);
66                         rq->mbuf_ring[i] = NULL;
67                 }
68         }
69 }
70
71 void enic_free_wq_buf(struct rte_mbuf **buf)
72 {
73         struct rte_mbuf *mbuf = *buf;
74
75         rte_pktmbuf_free_seg(mbuf);
76         *buf = NULL;
77 }
78
79 static void enic_log_q_error(struct enic *enic)
80 {
81         unsigned int i;
82         uint32_t error_status;
83
84         for (i = 0; i < enic->wq_count; i++) {
85                 error_status = vnic_wq_error_status(&enic->wq[i]);
86                 if (error_status)
87                         dev_err(enic, "WQ[%d] error_status %d\n", i,
88                                 error_status);
89         }
90
91         for (i = 0; i < enic_vnic_rq_count(enic); i++) {
92                 if (!enic->rq[i].in_use)
93                         continue;
94                 error_status = vnic_rq_error_status(&enic->rq[i]);
95                 if (error_status)
96                         dev_err(enic, "RQ[%d] error_status %d\n", i,
97                                 error_status);
98         }
99 }
100
101 static void enic_clear_soft_stats(struct enic *enic)
102 {
103         struct enic_soft_stats *soft_stats = &enic->soft_stats;
104         rte_atomic64_clear(&soft_stats->rx_nombuf);
105         rte_atomic64_clear(&soft_stats->rx_packet_errors);
106         rte_atomic64_clear(&soft_stats->tx_oversized);
107 }
108
109 static void enic_init_soft_stats(struct enic *enic)
110 {
111         struct enic_soft_stats *soft_stats = &enic->soft_stats;
112         rte_atomic64_init(&soft_stats->rx_nombuf);
113         rte_atomic64_init(&soft_stats->rx_packet_errors);
114         rte_atomic64_init(&soft_stats->tx_oversized);
115         enic_clear_soft_stats(enic);
116 }
117
118 int enic_dev_stats_clear(struct enic *enic)
119 {
120         int ret;
121
122         ret = vnic_dev_stats_clear(enic->vdev);
123         if (ret != 0) {
124                 dev_err(enic, "Error in clearing stats\n");
125                 return ret;
126         }
127         enic_clear_soft_stats(enic);
128
129         return 0;
130 }
131
132 int enic_dev_stats_get(struct enic *enic, struct rte_eth_stats *r_stats)
133 {
134         struct vnic_stats *stats;
135         struct enic_soft_stats *soft_stats = &enic->soft_stats;
136         int64_t rx_truncated;
137         uint64_t rx_packet_errors;
138         int ret = vnic_dev_stats_dump(enic->vdev, &stats);
139
140         if (ret) {
141                 dev_err(enic, "Error in getting stats\n");
142                 return ret;
143         }
144
145         /* The number of truncated packets can only be calculated by
146          * subtracting a hardware counter from error packets received by
147          * the driver. Note: this causes transient inaccuracies in the
148          * ipackets count. Also, the length of truncated packets are
149          * counted in ibytes even though truncated packets are dropped
150          * which can make ibytes be slightly higher than it should be.
151          */
152         rx_packet_errors = rte_atomic64_read(&soft_stats->rx_packet_errors);
153         rx_truncated = rx_packet_errors - stats->rx.rx_errors;
154
155         r_stats->ipackets = stats->rx.rx_frames_ok - rx_truncated;
156         r_stats->opackets = stats->tx.tx_frames_ok;
157
158         r_stats->ibytes = stats->rx.rx_bytes_ok;
159         r_stats->obytes = stats->tx.tx_bytes_ok;
160
161         r_stats->ierrors = stats->rx.rx_errors + stats->rx.rx_drop;
162         r_stats->oerrors = stats->tx.tx_errors
163                            + rte_atomic64_read(&soft_stats->tx_oversized);
164
165         r_stats->imissed = stats->rx.rx_no_bufs + rx_truncated;
166
167         r_stats->rx_nombuf = rte_atomic64_read(&soft_stats->rx_nombuf);
168         return 0;
169 }
170
171 int enic_del_mac_address(struct enic *enic, int mac_index)
172 {
173         struct rte_eth_dev *eth_dev = enic->rte_dev;
174         uint8_t *mac_addr = eth_dev->data->mac_addrs[mac_index].addr_bytes;
175
176         return vnic_dev_del_addr(enic->vdev, mac_addr);
177 }
178
179 int enic_set_mac_address(struct enic *enic, uint8_t *mac_addr)
180 {
181         int err;
182
183         if (!is_eth_addr_valid(mac_addr)) {
184                 dev_err(enic, "invalid mac address\n");
185                 return -EINVAL;
186         }
187
188         err = vnic_dev_add_addr(enic->vdev, mac_addr);
189         if (err)
190                 dev_err(enic, "add mac addr failed\n");
191         return err;
192 }
193
194 void enic_free_rq_buf(struct rte_mbuf **mbuf)
195 {
196         if (*mbuf == NULL)
197                 return;
198
199         rte_pktmbuf_free(*mbuf);
200         *mbuf = NULL;
201 }
202
203 void enic_init_vnic_resources(struct enic *enic)
204 {
205         unsigned int error_interrupt_enable = 1;
206         unsigned int error_interrupt_offset = 0;
207         unsigned int rxq_interrupt_enable = 0;
208         unsigned int rxq_interrupt_offset = ENICPMD_RXQ_INTR_OFFSET;
209         unsigned int index = 0;
210         unsigned int cq_idx;
211         struct vnic_rq *data_rq;
212
213         if (enic->rte_dev->data->dev_conf.intr_conf.rxq)
214                 rxq_interrupt_enable = 1;
215
216         for (index = 0; index < enic->rq_count; index++) {
217                 cq_idx = enic_cq_rq(enic, enic_rte_rq_idx_to_sop_idx(index));
218
219                 vnic_rq_init(&enic->rq[enic_rte_rq_idx_to_sop_idx(index)],
220                         cq_idx,
221                         error_interrupt_enable,
222                         error_interrupt_offset);
223
224                 data_rq = &enic->rq[enic_rte_rq_idx_to_data_idx(index, enic)];
225                 if (data_rq->in_use)
226                         vnic_rq_init(data_rq,
227                                      cq_idx,
228                                      error_interrupt_enable,
229                                      error_interrupt_offset);
230                 vnic_cq_init(&enic->cq[cq_idx],
231                         0 /* flow_control_enable */,
232                         1 /* color_enable */,
233                         0 /* cq_head */,
234                         0 /* cq_tail */,
235                         1 /* cq_tail_color */,
236                         rxq_interrupt_enable,
237                         1 /* cq_entry_enable */,
238                         0 /* cq_message_enable */,
239                         rxq_interrupt_offset,
240                         0 /* cq_message_addr */);
241                 if (rxq_interrupt_enable)
242                         rxq_interrupt_offset++;
243         }
244
245         for (index = 0; index < enic->wq_count; index++) {
246                 vnic_wq_init(&enic->wq[index],
247                         enic_cq_wq(enic, index),
248                         error_interrupt_enable,
249                         error_interrupt_offset);
250                 /* Compute unsupported ol flags for enic_prep_pkts() */
251                 enic->wq[index].tx_offload_notsup_mask =
252                         PKT_TX_OFFLOAD_MASK ^ enic->tx_offload_mask;
253
254                 cq_idx = enic_cq_wq(enic, index);
255                 vnic_cq_init(&enic->cq[cq_idx],
256                         0 /* flow_control_enable */,
257                         1 /* color_enable */,
258                         0 /* cq_head */,
259                         0 /* cq_tail */,
260                         1 /* cq_tail_color */,
261                         0 /* interrupt_enable */,
262                         0 /* cq_entry_enable */,
263                         1 /* cq_message_enable */,
264                         0 /* interrupt offset */,
265                         (uint64_t)enic->wq[index].cqmsg_rz->iova);
266         }
267
268         for (index = 0; index < enic->intr_count; index++) {
269                 vnic_intr_init(&enic->intr[index],
270                                enic->config.intr_timer_usec,
271                                enic->config.intr_timer_type,
272                                /*mask_on_assertion*/1);
273         }
274 }
275
276
277 int
278 enic_alloc_rx_queue_mbufs(struct enic *enic, struct vnic_rq *rq)
279 {
280         struct rte_mbuf *mb;
281         struct rq_enet_desc *rqd = rq->ring.descs;
282         unsigned i;
283         dma_addr_t dma_addr;
284         uint32_t max_rx_pkt_len;
285         uint16_t rq_buf_len;
286
287         if (!rq->in_use)
288                 return 0;
289
290         dev_debug(enic, "queue %u, allocating %u rx queue mbufs\n", rq->index,
291                   rq->ring.desc_count);
292
293         /*
294          * If *not* using scatter and the mbuf size is greater than the
295          * requested max packet size (max_rx_pkt_len), then reduce the
296          * posted buffer size to max_rx_pkt_len. HW still receives packets
297          * larger than max_rx_pkt_len, but they will be truncated, which we
298          * drop in the rx handler. Not ideal, but better than returning
299          * large packets when the user is not expecting them.
300          */
301         max_rx_pkt_len = enic->rte_dev->data->dev_conf.rxmode.max_rx_pkt_len;
302         rq_buf_len = rte_pktmbuf_data_room_size(rq->mp) - RTE_PKTMBUF_HEADROOM;
303         if (max_rx_pkt_len < rq_buf_len && !rq->data_queue_enable)
304                 rq_buf_len = max_rx_pkt_len;
305         for (i = 0; i < rq->ring.desc_count; i++, rqd++) {
306                 mb = rte_mbuf_raw_alloc(rq->mp);
307                 if (mb == NULL) {
308                         dev_err(enic, "RX mbuf alloc failed queue_id=%u\n",
309                         (unsigned)rq->index);
310                         return -ENOMEM;
311                 }
312
313                 mb->data_off = RTE_PKTMBUF_HEADROOM;
314                 dma_addr = (dma_addr_t)(mb->buf_iova
315                            + RTE_PKTMBUF_HEADROOM);
316                 rq_enet_desc_enc(rqd, dma_addr,
317                                 (rq->is_sop ? RQ_ENET_TYPE_ONLY_SOP
318                                 : RQ_ENET_TYPE_NOT_SOP),
319                                 rq_buf_len);
320                 rq->mbuf_ring[i] = mb;
321         }
322         /*
323          * Do not post the buffers to the NIC until we enable the RQ via
324          * enic_start_rq().
325          */
326         rq->need_initial_post = true;
327         /* Initialize fetch index while RQ is disabled */
328         iowrite32(0, &rq->ctrl->fetch_index);
329         return 0;
330 }
331
332 /*
333  * Post the Rx buffers for the first time. enic_alloc_rx_queue_mbufs() has
334  * allocated the buffers and filled the RQ descriptor ring. Just need to push
335  * the post index to the NIC.
336  */
337 static void
338 enic_initial_post_rx(struct enic *enic, struct vnic_rq *rq)
339 {
340         if (!rq->in_use || !rq->need_initial_post)
341                 return;
342
343         /* make sure all prior writes are complete before doing the PIO write */
344         rte_rmb();
345
346         /* Post all but the last buffer to VIC. */
347         rq->posted_index = rq->ring.desc_count - 1;
348
349         rq->rx_nb_hold = 0;
350
351         dev_debug(enic, "port=%u, qidx=%u, Write %u posted idx, %u sw held\n",
352                 enic->port_id, rq->index, rq->posted_index, rq->rx_nb_hold);
353         iowrite32(rq->posted_index, &rq->ctrl->posted_index);
354         rte_rmb();
355         rq->need_initial_post = false;
356 }
357
358 void *
359 enic_alloc_consistent(void *priv, size_t size,
360         dma_addr_t *dma_handle, uint8_t *name)
361 {
362         void *vaddr;
363         const struct rte_memzone *rz;
364         *dma_handle = 0;
365         struct enic *enic = (struct enic *)priv;
366         struct enic_memzone_entry *mze;
367
368         rz = rte_memzone_reserve_aligned((const char *)name, size,
369                         SOCKET_ID_ANY, RTE_MEMZONE_IOVA_CONTIG, ENIC_PAGE_SIZE);
370         if (!rz) {
371                 pr_err("%s : Failed to allocate memory requested for %s\n",
372                         __func__, name);
373                 return NULL;
374         }
375
376         vaddr = rz->addr;
377         *dma_handle = (dma_addr_t)rz->iova;
378
379         mze = rte_malloc("enic memzone entry",
380                          sizeof(struct enic_memzone_entry), 0);
381
382         if (!mze) {
383                 pr_err("%s : Failed to allocate memory for memzone list\n",
384                        __func__);
385                 rte_memzone_free(rz);
386                 return NULL;
387         }
388
389         mze->rz = rz;
390
391         rte_spinlock_lock(&enic->memzone_list_lock);
392         LIST_INSERT_HEAD(&enic->memzone_list, mze, entries);
393         rte_spinlock_unlock(&enic->memzone_list_lock);
394
395         return vaddr;
396 }
397
398 void
399 enic_free_consistent(void *priv,
400                      __rte_unused size_t size,
401                      void *vaddr,
402                      dma_addr_t dma_handle)
403 {
404         struct enic_memzone_entry *mze;
405         struct enic *enic = (struct enic *)priv;
406
407         rte_spinlock_lock(&enic->memzone_list_lock);
408         LIST_FOREACH(mze, &enic->memzone_list, entries) {
409                 if (mze->rz->addr == vaddr &&
410                     mze->rz->iova == dma_handle)
411                         break;
412         }
413         if (mze == NULL) {
414                 rte_spinlock_unlock(&enic->memzone_list_lock);
415                 dev_warning(enic,
416                             "Tried to free memory, but couldn't find it in the memzone list\n");
417                 return;
418         }
419         LIST_REMOVE(mze, entries);
420         rte_spinlock_unlock(&enic->memzone_list_lock);
421         rte_memzone_free(mze->rz);
422         rte_free(mze);
423 }
424
425 int enic_link_update(struct rte_eth_dev *eth_dev)
426 {
427         struct enic *enic = pmd_priv(eth_dev);
428         struct rte_eth_link link;
429
430         memset(&link, 0, sizeof(link));
431         link.link_status = enic_get_link_status(enic);
432         link.link_duplex = ETH_LINK_FULL_DUPLEX;
433         link.link_speed = vnic_dev_port_speed(enic->vdev);
434
435         return rte_eth_linkstatus_set(eth_dev, &link);
436 }
437
438 static void
439 enic_intr_handler(void *arg)
440 {
441         struct rte_eth_dev *dev = (struct rte_eth_dev *)arg;
442         struct enic *enic = pmd_priv(dev);
443
444         vnic_intr_return_all_credits(&enic->intr[ENICPMD_LSC_INTR_OFFSET]);
445
446         enic_link_update(dev);
447         rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_INTR_LSC, NULL);
448         enic_log_q_error(enic);
449         /* Re-enable irq in case of INTx */
450         rte_intr_ack(&enic->pdev->intr_handle);
451 }
452
453 static int enic_rxq_intr_init(struct enic *enic)
454 {
455         struct rte_intr_handle *intr_handle;
456         uint32_t rxq_intr_count, i;
457         int err;
458
459         intr_handle = enic->rte_dev->intr_handle;
460         if (!enic->rte_dev->data->dev_conf.intr_conf.rxq)
461                 return 0;
462         /*
463          * Rx queue interrupts only work when we have MSI-X interrupts,
464          * one per queue. Sharing one interrupt is technically
465          * possible with VIC, but it is not worth the complications it brings.
466          */
467         if (!rte_intr_cap_multiple(intr_handle)) {
468                 dev_err(enic, "Rx queue interrupts require MSI-X interrupts"
469                         " (vfio-pci driver)\n");
470                 return -ENOTSUP;
471         }
472         rxq_intr_count = enic->intr_count - ENICPMD_RXQ_INTR_OFFSET;
473         err = rte_intr_efd_enable(intr_handle, rxq_intr_count);
474         if (err) {
475                 dev_err(enic, "Failed to enable event fds for Rx queue"
476                         " interrupts\n");
477                 return err;
478         }
479         intr_handle->intr_vec = rte_zmalloc("enic_intr_vec",
480                                             rxq_intr_count * sizeof(int), 0);
481         if (intr_handle->intr_vec == NULL) {
482                 dev_err(enic, "Failed to allocate intr_vec\n");
483                 return -ENOMEM;
484         }
485         for (i = 0; i < rxq_intr_count; i++)
486                 intr_handle->intr_vec[i] = i + ENICPMD_RXQ_INTR_OFFSET;
487         return 0;
488 }
489
490 static void enic_rxq_intr_deinit(struct enic *enic)
491 {
492         struct rte_intr_handle *intr_handle;
493
494         intr_handle = enic->rte_dev->intr_handle;
495         rte_intr_efd_disable(intr_handle);
496         if (intr_handle->intr_vec != NULL) {
497                 rte_free(intr_handle->intr_vec);
498                 intr_handle->intr_vec = NULL;
499         }
500 }
501
502 static void enic_prep_wq_for_simple_tx(struct enic *enic, uint16_t queue_idx)
503 {
504         struct wq_enet_desc *desc;
505         struct vnic_wq *wq;
506         unsigned int i;
507
508         /*
509          * Fill WQ descriptor fields that never change. Every descriptor is
510          * one packet, so set EOP. Also set CQ_ENTRY every ENIC_WQ_CQ_THRESH
511          * descriptors (i.e. request one completion update every 32 packets).
512          */
513         wq = &enic->wq[queue_idx];
514         desc = (struct wq_enet_desc *)wq->ring.descs;
515         for (i = 0; i < wq->ring.desc_count; i++, desc++) {
516                 desc->header_length_flags = 1 << WQ_ENET_FLAGS_EOP_SHIFT;
517                 if (i % ENIC_WQ_CQ_THRESH == ENIC_WQ_CQ_THRESH - 1)
518                         desc->header_length_flags |=
519                                 (1 << WQ_ENET_FLAGS_CQ_ENTRY_SHIFT);
520         }
521 }
522
523 /*
524  * The 'strong' version is in enic_rxtx_vec_avx2.c. This weak version is used
525  * used when that file is not compiled.
526  */
527 __rte_weak bool
528 enic_use_vector_rx_handler(__rte_unused struct rte_eth_dev *eth_dev)
529 {
530         return false;
531 }
532
533 void enic_pick_rx_handler(struct rte_eth_dev *eth_dev)
534 {
535         struct enic *enic = pmd_priv(eth_dev);
536
537         /*
538          * Preference order:
539          * 1. The vectorized handler if possible and requested.
540          * 2. The non-scatter, simplified handler if scatter Rx is not used.
541          * 3. The default handler as a fallback.
542          */
543         if (enic_use_vector_rx_handler(eth_dev))
544                 return;
545         if (enic->rq_count > 0 && enic->rq[0].data_queue_enable == 0) {
546                 ENICPMD_LOG(DEBUG, " use the non-scatter Rx handler");
547                 eth_dev->rx_pkt_burst = &enic_noscatter_recv_pkts;
548         } else {
549                 ENICPMD_LOG(DEBUG, " use the normal Rx handler");
550                 eth_dev->rx_pkt_burst = &enic_recv_pkts;
551         }
552 }
553
554 /* Secondary process uses this to set the Tx handler */
555 void enic_pick_tx_handler(struct rte_eth_dev *eth_dev)
556 {
557         struct enic *enic = pmd_priv(eth_dev);
558
559         if (enic->use_simple_tx_handler) {
560                 ENICPMD_LOG(DEBUG, " use the simple tx handler");
561                 eth_dev->tx_pkt_burst = &enic_simple_xmit_pkts;
562         } else {
563                 ENICPMD_LOG(DEBUG, " use the default tx handler");
564                 eth_dev->tx_pkt_burst = &enic_xmit_pkts;
565         }
566 }
567
568 int enic_enable(struct enic *enic)
569 {
570         unsigned int index;
571         int err;
572         struct rte_eth_dev *eth_dev = enic->rte_dev;
573         uint64_t simple_tx_offloads;
574         uintptr_t p;
575
576         if (enic->enable_avx2_rx) {
577                 struct rte_mbuf mb_def = { .buf_addr = 0 };
578
579                 /*
580                  * mbuf_initializer contains const-after-init fields of
581                  * receive mbufs (i.e. 64 bits of fields from rearm_data).
582                  * It is currently used by the vectorized handler.
583                  */
584                 mb_def.nb_segs = 1;
585                 mb_def.data_off = RTE_PKTMBUF_HEADROOM;
586                 mb_def.port = enic->port_id;
587                 rte_mbuf_refcnt_set(&mb_def, 1);
588                 rte_compiler_barrier();
589                 p = (uintptr_t)&mb_def.rearm_data;
590                 enic->mbuf_initializer = *(uint64_t *)p;
591         }
592
593         eth_dev->data->dev_link.link_speed = vnic_dev_port_speed(enic->vdev);
594         eth_dev->data->dev_link.link_duplex = ETH_LINK_FULL_DUPLEX;
595
596         /* vnic notification of link status has already been turned on in
597          * enic_dev_init() which is called during probe time.  Here we are
598          * just turning on interrupt vector 0 if needed.
599          */
600         if (eth_dev->data->dev_conf.intr_conf.lsc)
601                 vnic_dev_notify_set(enic->vdev, 0);
602
603         err = enic_rxq_intr_init(enic);
604         if (err)
605                 return err;
606         if (enic_clsf_init(enic))
607                 dev_warning(enic, "Init of hash table for clsf failed."\
608                         "Flow director feature will not work\n");
609
610         /* Initialize flowman if not already initialized during probe */
611         if (enic->fm == NULL && enic_fm_init(enic))
612                 dev_warning(enic, "Init of flowman failed.\n");
613
614         for (index = 0; index < enic->rq_count; index++) {
615                 err = enic_alloc_rx_queue_mbufs(enic,
616                         &enic->rq[enic_rte_rq_idx_to_sop_idx(index)]);
617                 if (err) {
618                         dev_err(enic, "Failed to alloc sop RX queue mbufs\n");
619                         return err;
620                 }
621                 err = enic_alloc_rx_queue_mbufs(enic,
622                         &enic->rq[enic_rte_rq_idx_to_data_idx(index, enic)]);
623                 if (err) {
624                         /* release the allocated mbufs for the sop rq*/
625                         enic_rxmbuf_queue_release(enic,
626                                 &enic->rq[enic_rte_rq_idx_to_sop_idx(index)]);
627
628                         dev_err(enic, "Failed to alloc data RX queue mbufs\n");
629                         return err;
630                 }
631         }
632
633         /*
634          * Use the simple TX handler if possible. Only checksum offloads
635          * and vlan insertion are supported.
636          */
637         simple_tx_offloads = enic->tx_offload_capa &
638                 (DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM |
639                  DEV_TX_OFFLOAD_VLAN_INSERT |
640                  DEV_TX_OFFLOAD_IPV4_CKSUM |
641                  DEV_TX_OFFLOAD_UDP_CKSUM |
642                  DEV_TX_OFFLOAD_TCP_CKSUM);
643         if ((eth_dev->data->dev_conf.txmode.offloads &
644              ~simple_tx_offloads) == 0) {
645                 ENICPMD_LOG(DEBUG, " use the simple tx handler");
646                 eth_dev->tx_pkt_burst = &enic_simple_xmit_pkts;
647                 for (index = 0; index < enic->wq_count; index++)
648                         enic_prep_wq_for_simple_tx(enic, index);
649                 enic->use_simple_tx_handler = 1;
650         } else {
651                 ENICPMD_LOG(DEBUG, " use the default tx handler");
652                 eth_dev->tx_pkt_burst = &enic_xmit_pkts;
653         }
654
655         enic_pick_rx_handler(eth_dev);
656
657         for (index = 0; index < enic->wq_count; index++)
658                 enic_start_wq(enic, index);
659         for (index = 0; index < enic->rq_count; index++)
660                 enic_start_rq(enic, index);
661
662         vnic_dev_add_addr(enic->vdev, enic->mac_addr);
663
664         vnic_dev_enable_wait(enic->vdev);
665
666         /* Register and enable error interrupt */
667         rte_intr_callback_register(&(enic->pdev->intr_handle),
668                 enic_intr_handler, (void *)enic->rte_dev);
669
670         rte_intr_enable(&(enic->pdev->intr_handle));
671         /* Unmask LSC interrupt */
672         vnic_intr_unmask(&enic->intr[ENICPMD_LSC_INTR_OFFSET]);
673
674         return 0;
675 }
676
677 int enic_alloc_intr_resources(struct enic *enic)
678 {
679         int err;
680         unsigned int i;
681
682         dev_info(enic, "vNIC resources used:  "\
683                 "wq %d rq %d cq %d intr %d\n",
684                 enic->wq_count, enic_vnic_rq_count(enic),
685                 enic->cq_count, enic->intr_count);
686
687         for (i = 0; i < enic->intr_count; i++) {
688                 err = vnic_intr_alloc(enic->vdev, &enic->intr[i], i);
689                 if (err) {
690                         enic_free_vnic_resources(enic);
691                         return err;
692                 }
693         }
694         return 0;
695 }
696
697 void enic_free_rq(void *rxq)
698 {
699         struct vnic_rq *rq_sop, *rq_data;
700         struct enic *enic;
701
702         if (rxq == NULL)
703                 return;
704
705         rq_sop = (struct vnic_rq *)rxq;
706         enic = vnic_dev_priv(rq_sop->vdev);
707         rq_data = &enic->rq[rq_sop->data_queue_idx];
708
709         if (rq_sop->free_mbufs) {
710                 struct rte_mbuf **mb;
711                 int i;
712
713                 mb = rq_sop->free_mbufs;
714                 for (i = ENIC_RX_BURST_MAX - rq_sop->num_free_mbufs;
715                      i < ENIC_RX_BURST_MAX; i++)
716                         rte_pktmbuf_free(mb[i]);
717                 rte_free(rq_sop->free_mbufs);
718                 rq_sop->free_mbufs = NULL;
719                 rq_sop->num_free_mbufs = 0;
720         }
721
722         enic_rxmbuf_queue_release(enic, rq_sop);
723         if (rq_data->in_use)
724                 enic_rxmbuf_queue_release(enic, rq_data);
725
726         rte_free(rq_sop->mbuf_ring);
727         if (rq_data->in_use)
728                 rte_free(rq_data->mbuf_ring);
729
730         rq_sop->mbuf_ring = NULL;
731         rq_data->mbuf_ring = NULL;
732
733         vnic_rq_free(rq_sop);
734         if (rq_data->in_use)
735                 vnic_rq_free(rq_data);
736
737         vnic_cq_free(&enic->cq[enic_sop_rq_idx_to_cq_idx(rq_sop->index)]);
738
739         rq_sop->in_use = 0;
740         rq_data->in_use = 0;
741 }
742
743 void enic_start_wq(struct enic *enic, uint16_t queue_idx)
744 {
745         struct rte_eth_dev_data *data = enic->dev_data;
746         vnic_wq_enable(&enic->wq[queue_idx]);
747         data->tx_queue_state[queue_idx] = RTE_ETH_QUEUE_STATE_STARTED;
748 }
749
750 int enic_stop_wq(struct enic *enic, uint16_t queue_idx)
751 {
752         struct rte_eth_dev_data *data = enic->dev_data;
753         int ret;
754
755         ret = vnic_wq_disable(&enic->wq[queue_idx]);
756         if (ret)
757                 return ret;
758
759         data->tx_queue_state[queue_idx] = RTE_ETH_QUEUE_STATE_STOPPED;
760         return 0;
761 }
762
763 void enic_start_rq(struct enic *enic, uint16_t queue_idx)
764 {
765         struct rte_eth_dev_data *data = enic->dev_data;
766         struct vnic_rq *rq_sop;
767         struct vnic_rq *rq_data;
768         rq_sop = &enic->rq[enic_rte_rq_idx_to_sop_idx(queue_idx)];
769         rq_data = &enic->rq[rq_sop->data_queue_idx];
770
771         if (rq_data->in_use) {
772                 vnic_rq_enable(rq_data);
773                 enic_initial_post_rx(enic, rq_data);
774         }
775         rte_mb();
776         vnic_rq_enable(rq_sop);
777         enic_initial_post_rx(enic, rq_sop);
778         data->rx_queue_state[queue_idx] = RTE_ETH_QUEUE_STATE_STARTED;
779 }
780
781 int enic_stop_rq(struct enic *enic, uint16_t queue_idx)
782 {
783         struct rte_eth_dev_data *data = enic->dev_data;
784         int ret1 = 0, ret2 = 0;
785         struct vnic_rq *rq_sop;
786         struct vnic_rq *rq_data;
787         rq_sop = &enic->rq[enic_rte_rq_idx_to_sop_idx(queue_idx)];
788         rq_data = &enic->rq[rq_sop->data_queue_idx];
789
790         ret2 = vnic_rq_disable(rq_sop);
791         rte_mb();
792         if (rq_data->in_use)
793                 ret1 = vnic_rq_disable(rq_data);
794
795         if (ret2)
796                 return ret2;
797         else if (ret1)
798                 return ret1;
799
800         data->rx_queue_state[queue_idx] = RTE_ETH_QUEUE_STATE_STOPPED;
801         return 0;
802 }
803
804 int enic_alloc_rq(struct enic *enic, uint16_t queue_idx,
805         unsigned int socket_id, struct rte_mempool *mp,
806         uint16_t nb_desc, uint16_t free_thresh)
807 {
808         struct enic_vf_representor *vf;
809         int rc;
810         uint16_t sop_queue_idx;
811         uint16_t data_queue_idx;
812         uint16_t cq_idx;
813         struct vnic_rq *rq_sop;
814         struct vnic_rq *rq_data;
815         unsigned int mbuf_size, mbufs_per_pkt;
816         unsigned int nb_sop_desc, nb_data_desc;
817         uint16_t min_sop, max_sop, min_data, max_data;
818         uint32_t max_rx_pkt_len;
819
820         /*
821          * Representor uses a reserved PF queue. Translate representor
822          * queue number to PF queue number.
823          */
824         if (enic_is_vf_rep(enic)) {
825                 RTE_ASSERT(queue_idx == 0);
826                 vf = VF_ENIC_TO_VF_REP(enic);
827                 sop_queue_idx = vf->pf_rq_sop_idx;
828                 data_queue_idx = vf->pf_rq_data_idx;
829                 enic = vf->pf;
830                 queue_idx = sop_queue_idx;
831         } else {
832                 sop_queue_idx = enic_rte_rq_idx_to_sop_idx(queue_idx);
833                 data_queue_idx = enic_rte_rq_idx_to_data_idx(queue_idx, enic);
834         }
835         cq_idx = enic_cq_rq(enic, sop_queue_idx);
836         rq_sop = &enic->rq[sop_queue_idx];
837         rq_data = &enic->rq[data_queue_idx];
838         rq_sop->is_sop = 1;
839         rq_sop->data_queue_idx = data_queue_idx;
840         rq_data->is_sop = 0;
841         rq_data->data_queue_idx = 0;
842         rq_sop->socket_id = socket_id;
843         rq_sop->mp = mp;
844         rq_data->socket_id = socket_id;
845         rq_data->mp = mp;
846         rq_sop->in_use = 1;
847         rq_sop->rx_free_thresh = free_thresh;
848         rq_data->rx_free_thresh = free_thresh;
849         dev_debug(enic, "Set queue_id:%u free thresh:%u\n", queue_idx,
850                   free_thresh);
851
852         mbuf_size = (uint16_t)(rte_pktmbuf_data_room_size(mp) -
853                                RTE_PKTMBUF_HEADROOM);
854         /* max_rx_pkt_len includes the ethernet header and CRC. */
855         max_rx_pkt_len = enic->rte_dev->data->dev_conf.rxmode.max_rx_pkt_len;
856
857         if (enic->rte_dev->data->dev_conf.rxmode.offloads &
858             DEV_RX_OFFLOAD_SCATTER) {
859                 dev_info(enic, "Rq %u Scatter rx mode enabled\n", queue_idx);
860                 /* ceil((max pkt len)/mbuf_size) */
861                 mbufs_per_pkt = (max_rx_pkt_len + mbuf_size - 1) / mbuf_size;
862         } else {
863                 dev_info(enic, "Scatter rx mode disabled\n");
864                 mbufs_per_pkt = 1;
865                 if (max_rx_pkt_len > mbuf_size) {
866                         dev_warning(enic, "The maximum Rx packet size (%u) is"
867                                     " larger than the mbuf size (%u), and"
868                                     " scatter is disabled. Larger packets will"
869                                     " be truncated.\n",
870                                     max_rx_pkt_len, mbuf_size);
871                 }
872         }
873
874         if (mbufs_per_pkt > 1) {
875                 dev_info(enic, "Rq %u Scatter rx mode in use\n", queue_idx);
876                 rq_sop->data_queue_enable = 1;
877                 rq_data->in_use = 1;
878                 /*
879                  * HW does not directly support rxmode.max_rx_pkt_len. HW always
880                  * receives packet sizes up to the "max" MTU.
881                  * If not using scatter, we can achieve the effect of dropping
882                  * larger packets by reducing the size of posted buffers.
883                  * See enic_alloc_rx_queue_mbufs().
884                  */
885                 if (max_rx_pkt_len <
886                     enic_mtu_to_max_rx_pktlen(enic->max_mtu)) {
887                         dev_warning(enic, "rxmode.max_rx_pkt_len is ignored"
888                                     " when scatter rx mode is in use.\n");
889                 }
890         } else {
891                 dev_info(enic, "Rq %u Scatter rx mode not being used\n",
892                          queue_idx);
893                 rq_sop->data_queue_enable = 0;
894                 rq_data->in_use = 0;
895         }
896
897         /* number of descriptors have to be a multiple of 32 */
898         nb_sop_desc = (nb_desc / mbufs_per_pkt) & ENIC_ALIGN_DESCS_MASK;
899         nb_data_desc = (nb_desc - nb_sop_desc) & ENIC_ALIGN_DESCS_MASK;
900
901         rq_sop->max_mbufs_per_pkt = mbufs_per_pkt;
902         rq_data->max_mbufs_per_pkt = mbufs_per_pkt;
903
904         if (mbufs_per_pkt > 1) {
905                 min_sop = ENIC_RX_BURST_MAX;
906                 max_sop = ((enic->config.rq_desc_count /
907                             (mbufs_per_pkt - 1)) & ENIC_ALIGN_DESCS_MASK);
908                 min_data = min_sop * (mbufs_per_pkt - 1);
909                 max_data = enic->config.rq_desc_count;
910         } else {
911                 min_sop = ENIC_RX_BURST_MAX;
912                 max_sop = enic->config.rq_desc_count;
913                 min_data = 0;
914                 max_data = 0;
915         }
916
917         if (nb_desc < (min_sop + min_data)) {
918                 dev_warning(enic,
919                             "Number of rx descs too low, adjusting to minimum\n");
920                 nb_sop_desc = min_sop;
921                 nb_data_desc = min_data;
922         } else if (nb_desc > (max_sop + max_data)) {
923                 dev_warning(enic,
924                             "Number of rx_descs too high, adjusting to maximum\n");
925                 nb_sop_desc = max_sop;
926                 nb_data_desc = max_data;
927         }
928         if (mbufs_per_pkt > 1) {
929                 dev_info(enic, "For max packet size %u and mbuf size %u valid"
930                          " rx descriptor range is %u to %u\n",
931                          max_rx_pkt_len, mbuf_size, min_sop + min_data,
932                          max_sop + max_data);
933         }
934         dev_info(enic, "Using %d rx descriptors (sop %d, data %d)\n",
935                  nb_sop_desc + nb_data_desc, nb_sop_desc, nb_data_desc);
936
937         /* Allocate sop queue resources */
938         rc = vnic_rq_alloc(enic->vdev, rq_sop, sop_queue_idx,
939                 nb_sop_desc, sizeof(struct rq_enet_desc));
940         if (rc) {
941                 dev_err(enic, "error in allocation of sop rq\n");
942                 goto err_exit;
943         }
944         nb_sop_desc = rq_sop->ring.desc_count;
945
946         if (rq_data->in_use) {
947                 /* Allocate data queue resources */
948                 rc = vnic_rq_alloc(enic->vdev, rq_data, data_queue_idx,
949                                    nb_data_desc,
950                                    sizeof(struct rq_enet_desc));
951                 if (rc) {
952                         dev_err(enic, "error in allocation of data rq\n");
953                         goto err_free_rq_sop;
954                 }
955                 nb_data_desc = rq_data->ring.desc_count;
956         }
957         rc = vnic_cq_alloc(enic->vdev, &enic->cq[cq_idx], cq_idx,
958                            socket_id, nb_sop_desc + nb_data_desc,
959                            sizeof(struct cq_enet_rq_desc));
960         if (rc) {
961                 dev_err(enic, "error in allocation of cq for rq\n");
962                 goto err_free_rq_data;
963         }
964
965         /* Allocate the mbuf rings */
966         rq_sop->mbuf_ring = (struct rte_mbuf **)
967                 rte_zmalloc_socket("rq->mbuf_ring",
968                                    sizeof(struct rte_mbuf *) * nb_sop_desc,
969                                    RTE_CACHE_LINE_SIZE, rq_sop->socket_id);
970         if (rq_sop->mbuf_ring == NULL)
971                 goto err_free_cq;
972
973         if (rq_data->in_use) {
974                 rq_data->mbuf_ring = (struct rte_mbuf **)
975                         rte_zmalloc_socket("rq->mbuf_ring",
976                                 sizeof(struct rte_mbuf *) * nb_data_desc,
977                                 RTE_CACHE_LINE_SIZE, rq_sop->socket_id);
978                 if (rq_data->mbuf_ring == NULL)
979                         goto err_free_sop_mbuf;
980         }
981
982         rq_sop->free_mbufs = (struct rte_mbuf **)
983                 rte_zmalloc_socket("rq->free_mbufs",
984                                    sizeof(struct rte_mbuf *) *
985                                    ENIC_RX_BURST_MAX,
986                                    RTE_CACHE_LINE_SIZE, rq_sop->socket_id);
987         if (rq_sop->free_mbufs == NULL)
988                 goto err_free_data_mbuf;
989         rq_sop->num_free_mbufs = 0;
990
991         rq_sop->tot_nb_desc = nb_desc; /* squirl away for MTU update function */
992
993         return 0;
994
995 err_free_data_mbuf:
996         rte_free(rq_data->mbuf_ring);
997 err_free_sop_mbuf:
998         rte_free(rq_sop->mbuf_ring);
999 err_free_cq:
1000         /* cleanup on error */
1001         vnic_cq_free(&enic->cq[cq_idx]);
1002 err_free_rq_data:
1003         if (rq_data->in_use)
1004                 vnic_rq_free(rq_data);
1005 err_free_rq_sop:
1006         vnic_rq_free(rq_sop);
1007 err_exit:
1008         return -ENOMEM;
1009 }
1010
1011 void enic_free_wq(void *txq)
1012 {
1013         struct vnic_wq *wq;
1014         struct enic *enic;
1015
1016         if (txq == NULL)
1017                 return;
1018
1019         wq = (struct vnic_wq *)txq;
1020         enic = vnic_dev_priv(wq->vdev);
1021         rte_memzone_free(wq->cqmsg_rz);
1022         vnic_wq_free(wq);
1023         vnic_cq_free(&enic->cq[enic->rq_count + wq->index]);
1024 }
1025
1026 int enic_alloc_wq(struct enic *enic, uint16_t queue_idx,
1027         unsigned int socket_id, uint16_t nb_desc)
1028 {
1029         struct enic_vf_representor *vf;
1030         int err;
1031         struct vnic_wq *wq;
1032         unsigned int cq_index;
1033         char name[RTE_MEMZONE_NAMESIZE];
1034         static int instance;
1035
1036         /*
1037          * Representor uses a reserved PF queue. Translate representor
1038          * queue number to PF queue number.
1039          */
1040         if (enic_is_vf_rep(enic)) {
1041                 RTE_ASSERT(queue_idx == 0);
1042                 vf = VF_ENIC_TO_VF_REP(enic);
1043                 queue_idx = vf->pf_wq_idx;
1044                 cq_index = vf->pf_wq_cq_idx;
1045                 enic = vf->pf;
1046         } else {
1047                 cq_index = enic_cq_wq(enic, queue_idx);
1048         }
1049         wq = &enic->wq[queue_idx];
1050         wq->socket_id = socket_id;
1051         /*
1052          * rte_eth_tx_queue_setup() checks min, max, and alignment. So just
1053          * print an info message for diagnostics.
1054          */
1055         dev_info(enic, "TX Queues - effective number of descs:%d\n", nb_desc);
1056
1057         /* Allocate queue resources */
1058         err = vnic_wq_alloc(enic->vdev, &enic->wq[queue_idx], queue_idx,
1059                 nb_desc,
1060                 sizeof(struct wq_enet_desc));
1061         if (err) {
1062                 dev_err(enic, "error in allocation of wq\n");
1063                 return err;
1064         }
1065
1066         err = vnic_cq_alloc(enic->vdev, &enic->cq[cq_index], cq_index,
1067                 socket_id, nb_desc,
1068                 sizeof(struct cq_enet_wq_desc));
1069         if (err) {
1070                 vnic_wq_free(wq);
1071                 dev_err(enic, "error in allocation of cq for wq\n");
1072         }
1073
1074         /* setup up CQ message */
1075         snprintf((char *)name, sizeof(name),
1076                  "vnic_cqmsg-%s-%d-%d", enic->bdf_name, queue_idx,
1077                 instance++);
1078
1079         wq->cqmsg_rz = rte_memzone_reserve_aligned((const char *)name,
1080                         sizeof(uint32_t), SOCKET_ID_ANY,
1081                         RTE_MEMZONE_IOVA_CONTIG, ENIC_PAGE_SIZE);
1082         if (!wq->cqmsg_rz)
1083                 return -ENOMEM;
1084
1085         return err;
1086 }
1087
1088 int enic_disable(struct enic *enic)
1089 {
1090         unsigned int i;
1091         int err;
1092
1093         for (i = 0; i < enic->intr_count; i++) {
1094                 vnic_intr_mask(&enic->intr[i]);
1095                 (void)vnic_intr_masked(&enic->intr[i]); /* flush write */
1096         }
1097         enic_rxq_intr_deinit(enic);
1098         rte_intr_disable(&enic->pdev->intr_handle);
1099         rte_intr_callback_unregister(&enic->pdev->intr_handle,
1100                                      enic_intr_handler,
1101                                      (void *)enic->rte_dev);
1102
1103         vnic_dev_disable(enic->vdev);
1104
1105         enic_clsf_destroy(enic);
1106         enic_fm_destroy(enic);
1107
1108         if (!enic_is_sriov_vf(enic))
1109                 vnic_dev_del_addr(enic->vdev, enic->mac_addr);
1110
1111         for (i = 0; i < enic->wq_count; i++) {
1112                 err = vnic_wq_disable(&enic->wq[i]);
1113                 if (err)
1114                         return err;
1115         }
1116         for (i = 0; i < enic_vnic_rq_count(enic); i++) {
1117                 if (enic->rq[i].in_use) {
1118                         err = vnic_rq_disable(&enic->rq[i]);
1119                         if (err)
1120                                 return err;
1121                 }
1122         }
1123
1124         /* If we were using interrupts, set the interrupt vector to -1
1125          * to disable interrupts.  We are not disabling link notifcations,
1126          * though, as we want the polling of link status to continue working.
1127          */
1128         if (enic->rte_dev->data->dev_conf.intr_conf.lsc)
1129                 vnic_dev_notify_set(enic->vdev, -1);
1130
1131         vnic_dev_set_reset_flag(enic->vdev, 1);
1132
1133         for (i = 0; i < enic->wq_count; i++)
1134                 vnic_wq_clean(&enic->wq[i], enic_free_wq_buf);
1135
1136         for (i = 0; i < enic_vnic_rq_count(enic); i++)
1137                 if (enic->rq[i].in_use)
1138                         vnic_rq_clean(&enic->rq[i], enic_free_rq_buf);
1139         for (i = 0; i < enic->cq_count; i++)
1140                 vnic_cq_clean(&enic->cq[i]);
1141         for (i = 0; i < enic->intr_count; i++)
1142                 vnic_intr_clean(&enic->intr[i]);
1143
1144         return 0;
1145 }
1146
1147 static int enic_dev_wait(struct vnic_dev *vdev,
1148         int (*start)(struct vnic_dev *, int),
1149         int (*finished)(struct vnic_dev *, int *),
1150         int arg)
1151 {
1152         int done;
1153         int err;
1154         int i;
1155
1156         err = start(vdev, arg);
1157         if (err)
1158                 return err;
1159
1160         /* Wait for func to complete...2 seconds max */
1161         for (i = 0; i < 2000; i++) {
1162                 err = finished(vdev, &done);
1163                 if (err)
1164                         return err;
1165                 if (done)
1166                         return 0;
1167                 usleep(1000);
1168         }
1169         return -ETIMEDOUT;
1170 }
1171
1172 static int enic_dev_open(struct enic *enic)
1173 {
1174         int err;
1175         int flags = CMD_OPENF_IG_DESCCACHE;
1176
1177         err = enic_dev_wait(enic->vdev, vnic_dev_open,
1178                 vnic_dev_open_done, flags);
1179         if (err)
1180                 dev_err(enic_get_dev(enic),
1181                         "vNIC device open failed, err %d\n", err);
1182
1183         return err;
1184 }
1185
1186 static int enic_set_rsskey(struct enic *enic, uint8_t *user_key)
1187 {
1188         dma_addr_t rss_key_buf_pa;
1189         union vnic_rss_key *rss_key_buf_va = NULL;
1190         int err, i;
1191         uint8_t name[RTE_MEMZONE_NAMESIZE];
1192
1193         RTE_ASSERT(user_key != NULL);
1194         snprintf((char *)name, sizeof(name), "rss_key-%s", enic->bdf_name);
1195         rss_key_buf_va = enic_alloc_consistent(enic, sizeof(union vnic_rss_key),
1196                 &rss_key_buf_pa, name);
1197         if (!rss_key_buf_va)
1198                 return -ENOMEM;
1199
1200         for (i = 0; i < ENIC_RSS_HASH_KEY_SIZE; i++)
1201                 rss_key_buf_va->key[i / 10].b[i % 10] = user_key[i];
1202
1203         err = enic_set_rss_key(enic,
1204                 rss_key_buf_pa,
1205                 sizeof(union vnic_rss_key));
1206
1207         /* Save for later queries */
1208         if (!err) {
1209                 rte_memcpy(&enic->rss_key, rss_key_buf_va,
1210                            sizeof(union vnic_rss_key));
1211         }
1212         enic_free_consistent(enic, sizeof(union vnic_rss_key),
1213                 rss_key_buf_va, rss_key_buf_pa);
1214
1215         return err;
1216 }
1217
1218 int enic_set_rss_reta(struct enic *enic, union vnic_rss_cpu *rss_cpu)
1219 {
1220         dma_addr_t rss_cpu_buf_pa;
1221         union vnic_rss_cpu *rss_cpu_buf_va = NULL;
1222         int err;
1223         uint8_t name[RTE_MEMZONE_NAMESIZE];
1224
1225         snprintf((char *)name, sizeof(name), "rss_cpu-%s", enic->bdf_name);
1226         rss_cpu_buf_va = enic_alloc_consistent(enic, sizeof(union vnic_rss_cpu),
1227                 &rss_cpu_buf_pa, name);
1228         if (!rss_cpu_buf_va)
1229                 return -ENOMEM;
1230
1231         rte_memcpy(rss_cpu_buf_va, rss_cpu, sizeof(union vnic_rss_cpu));
1232
1233         err = enic_set_rss_cpu(enic,
1234                 rss_cpu_buf_pa,
1235                 sizeof(union vnic_rss_cpu));
1236
1237         enic_free_consistent(enic, sizeof(union vnic_rss_cpu),
1238                 rss_cpu_buf_va, rss_cpu_buf_pa);
1239
1240         /* Save for later queries */
1241         if (!err)
1242                 rte_memcpy(&enic->rss_cpu, rss_cpu, sizeof(union vnic_rss_cpu));
1243         return err;
1244 }
1245
1246 static int enic_set_niccfg(struct enic *enic, uint8_t rss_default_cpu,
1247         uint8_t rss_hash_type, uint8_t rss_hash_bits, uint8_t rss_base_cpu,
1248         uint8_t rss_enable)
1249 {
1250         const uint8_t tso_ipid_split_en = 0;
1251         int err;
1252
1253         err = enic_set_nic_cfg(enic,
1254                 rss_default_cpu, rss_hash_type,
1255                 rss_hash_bits, rss_base_cpu,
1256                 rss_enable, tso_ipid_split_en,
1257                 enic->ig_vlan_strip_en);
1258
1259         return err;
1260 }
1261
1262 /* Initialize RSS with defaults, called from dev_configure */
1263 int enic_init_rss_nic_cfg(struct enic *enic)
1264 {
1265         static uint8_t default_rss_key[] = {
1266                 85, 67, 83, 97, 119, 101, 115, 111, 109, 101,
1267                 80, 65, 76, 79, 117, 110, 105, 113, 117, 101,
1268                 76, 73, 78, 85, 88, 114, 111, 99, 107, 115,
1269                 69, 78, 73, 67, 105, 115, 99, 111, 111, 108,
1270         };
1271         struct rte_eth_rss_conf rss_conf;
1272         union vnic_rss_cpu rss_cpu;
1273         int ret, i;
1274
1275         rss_conf = enic->rte_dev->data->dev_conf.rx_adv_conf.rss_conf;
1276         /*
1277          * If setting key for the first time, and the user gives us none, then
1278          * push the default key to NIC.
1279          */
1280         if (rss_conf.rss_key == NULL) {
1281                 rss_conf.rss_key = default_rss_key;
1282                 rss_conf.rss_key_len = ENIC_RSS_HASH_KEY_SIZE;
1283         }
1284         ret = enic_set_rss_conf(enic, &rss_conf);
1285         if (ret) {
1286                 dev_err(enic, "Failed to configure RSS\n");
1287                 return ret;
1288         }
1289         if (enic->rss_enable) {
1290                 /* If enabling RSS, use the default reta */
1291                 for (i = 0; i < ENIC_RSS_RETA_SIZE; i++) {
1292                         rss_cpu.cpu[i / 4].b[i % 4] =
1293                                 enic_rte_rq_idx_to_sop_idx(i % enic->rq_count);
1294                 }
1295                 ret = enic_set_rss_reta(enic, &rss_cpu);
1296                 if (ret)
1297                         dev_err(enic, "Failed to set RSS indirection table\n");
1298         }
1299         return ret;
1300 }
1301
1302 int enic_setup_finish(struct enic *enic)
1303 {
1304         enic_init_soft_stats(enic);
1305
1306         /* switchdev: enable promisc mode on PF */
1307         if (enic->switchdev_mode) {
1308                 vnic_dev_packet_filter(enic->vdev,
1309                                        0 /* directed  */,
1310                                        0 /* multicast */,
1311                                        0 /* broadcast */,
1312                                        1 /* promisc   */,
1313                                        0 /* allmulti  */);
1314                 enic->promisc = 1;
1315                 enic->allmulti = 0;
1316                 return 0;
1317         }
1318         /* Default conf */
1319         vnic_dev_packet_filter(enic->vdev,
1320                 1 /* directed  */,
1321                 1 /* multicast */,
1322                 1 /* broadcast */,
1323                 0 /* promisc   */,
1324                 1 /* allmulti  */);
1325
1326         enic->promisc = 0;
1327         enic->allmulti = 1;
1328
1329         return 0;
1330 }
1331
1332 static int enic_rss_conf_valid(struct enic *enic,
1333                                struct rte_eth_rss_conf *rss_conf)
1334 {
1335         /* RSS is disabled per VIC settings. Ignore rss_conf. */
1336         if (enic->flow_type_rss_offloads == 0)
1337                 return 0;
1338         if (rss_conf->rss_key != NULL &&
1339             rss_conf->rss_key_len != ENIC_RSS_HASH_KEY_SIZE) {
1340                 dev_err(enic, "Given rss_key is %d bytes, it must be %d\n",
1341                         rss_conf->rss_key_len, ENIC_RSS_HASH_KEY_SIZE);
1342                 return -EINVAL;
1343         }
1344         if (rss_conf->rss_hf != 0 &&
1345             (rss_conf->rss_hf & enic->flow_type_rss_offloads) == 0) {
1346                 dev_err(enic, "Given rss_hf contains none of the supported"
1347                         " types\n");
1348                 return -EINVAL;
1349         }
1350         return 0;
1351 }
1352
1353 /* Set hash type and key according to rss_conf */
1354 int enic_set_rss_conf(struct enic *enic, struct rte_eth_rss_conf *rss_conf)
1355 {
1356         struct rte_eth_dev *eth_dev;
1357         uint64_t rss_hf;
1358         uint8_t rss_hash_type;
1359         uint8_t rss_enable;
1360         int ret;
1361
1362         RTE_ASSERT(rss_conf != NULL);
1363         ret = enic_rss_conf_valid(enic, rss_conf);
1364         if (ret) {
1365                 dev_err(enic, "RSS configuration (rss_conf) is invalid\n");
1366                 return ret;
1367         }
1368
1369         eth_dev = enic->rte_dev;
1370         rss_hash_type = 0;
1371         rss_hf = rss_conf->rss_hf & enic->flow_type_rss_offloads;
1372         if (enic->rq_count > 1 &&
1373             (eth_dev->data->dev_conf.rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG) &&
1374             rss_hf != 0) {
1375                 rss_enable = 1;
1376                 if (rss_hf & (ETH_RSS_IPV4 | ETH_RSS_FRAG_IPV4 |
1377                               ETH_RSS_NONFRAG_IPV4_OTHER))
1378                         rss_hash_type |= NIC_CFG_RSS_HASH_TYPE_IPV4;
1379                 if (rss_hf & ETH_RSS_NONFRAG_IPV4_TCP)
1380                         rss_hash_type |= NIC_CFG_RSS_HASH_TYPE_TCP_IPV4;
1381                 if (rss_hf & ETH_RSS_NONFRAG_IPV4_UDP) {
1382                         rss_hash_type |= NIC_CFG_RSS_HASH_TYPE_UDP_IPV4;
1383                         if (enic->udp_rss_weak) {
1384                                 /*
1385                                  * 'TCP' is not a typo. The "weak" version of
1386                                  * UDP RSS requires both the TCP and UDP bits
1387                                  * be set. It does enable TCP RSS as well.
1388                                  */
1389                                 rss_hash_type |= NIC_CFG_RSS_HASH_TYPE_TCP_IPV4;
1390                         }
1391                 }
1392                 if (rss_hf & (ETH_RSS_IPV6 | ETH_RSS_IPV6_EX |
1393                               ETH_RSS_FRAG_IPV6 | ETH_RSS_NONFRAG_IPV6_OTHER))
1394                         rss_hash_type |= NIC_CFG_RSS_HASH_TYPE_IPV6;
1395                 if (rss_hf & (ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_IPV6_TCP_EX))
1396                         rss_hash_type |= NIC_CFG_RSS_HASH_TYPE_TCP_IPV6;
1397                 if (rss_hf & (ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_IPV6_UDP_EX)) {
1398                         rss_hash_type |= NIC_CFG_RSS_HASH_TYPE_UDP_IPV6;
1399                         if (enic->udp_rss_weak)
1400                                 rss_hash_type |= NIC_CFG_RSS_HASH_TYPE_TCP_IPV6;
1401                 }
1402         } else {
1403                 rss_enable = 0;
1404                 rss_hf = 0;
1405         }
1406
1407         /* Set the hash key if provided */
1408         if (rss_enable && rss_conf->rss_key) {
1409                 ret = enic_set_rsskey(enic, rss_conf->rss_key);
1410                 if (ret) {
1411                         dev_err(enic, "Failed to set RSS key\n");
1412                         return ret;
1413                 }
1414         }
1415
1416         ret = enic_set_niccfg(enic, ENIC_RSS_DEFAULT_CPU, rss_hash_type,
1417                               ENIC_RSS_HASH_BITS, ENIC_RSS_BASE_CPU,
1418                               rss_enable);
1419         if (!ret) {
1420                 enic->rss_hf = rss_hf;
1421                 enic->rss_hash_type = rss_hash_type;
1422                 enic->rss_enable = rss_enable;
1423         } else {
1424                 dev_err(enic, "Failed to update RSS configurations."
1425                         " hash=0x%x\n", rss_hash_type);
1426         }
1427         return ret;
1428 }
1429
1430 int enic_set_vlan_strip(struct enic *enic)
1431 {
1432         /*
1433          * Unfortunately, VLAN strip on/off and RSS on/off are configured
1434          * together. So, re-do niccfg, preserving the current RSS settings.
1435          */
1436         return enic_set_niccfg(enic, ENIC_RSS_DEFAULT_CPU, enic->rss_hash_type,
1437                                ENIC_RSS_HASH_BITS, ENIC_RSS_BASE_CPU,
1438                                enic->rss_enable);
1439 }
1440
1441 int enic_add_packet_filter(struct enic *enic)
1442 {
1443         /* switchdev ignores packet filters */
1444         if (enic->switchdev_mode) {
1445                 ENICPMD_LOG(DEBUG, " switchdev: ignore packet filter");
1446                 return 0;
1447         }
1448         /* Args -> directed, multicast, broadcast, promisc, allmulti */
1449         return vnic_dev_packet_filter(enic->vdev, 1, 1, 1,
1450                 enic->promisc, enic->allmulti);
1451 }
1452
1453 int enic_get_link_status(struct enic *enic)
1454 {
1455         return vnic_dev_link_status(enic->vdev);
1456 }
1457
1458 static void enic_dev_deinit(struct enic *enic)
1459 {
1460         /* stop link status checking */
1461         vnic_dev_notify_unset(enic->vdev);
1462
1463         /* mac_addrs is freed by rte_eth_dev_release_port() */
1464         rte_free(enic->cq);
1465         rte_free(enic->intr);
1466         rte_free(enic->rq);
1467         rte_free(enic->wq);
1468 }
1469
1470
1471 int enic_set_vnic_res(struct enic *enic)
1472 {
1473         struct rte_eth_dev *eth_dev = enic->rte_dev;
1474         int rc = 0;
1475         unsigned int required_rq, required_wq, required_cq, required_intr;
1476
1477         /* Always use two vNIC RQs per eth_dev RQ, regardless of Rx scatter. */
1478         required_rq = eth_dev->data->nb_rx_queues * 2;
1479         required_wq = eth_dev->data->nb_tx_queues;
1480         required_cq = eth_dev->data->nb_rx_queues + eth_dev->data->nb_tx_queues;
1481         required_intr = 1; /* 1 for LSC even if intr_conf.lsc is 0 */
1482         if (eth_dev->data->dev_conf.intr_conf.rxq) {
1483                 required_intr += eth_dev->data->nb_rx_queues;
1484         }
1485         ENICPMD_LOG(DEBUG, "Required queues for PF: rq %u wq %u cq %u",
1486                     required_rq, required_wq, required_cq);
1487         if (enic->vf_required_rq) {
1488                 /* Queues needed for VF representors */
1489                 required_rq += enic->vf_required_rq;
1490                 required_wq += enic->vf_required_wq;
1491                 required_cq += enic->vf_required_cq;
1492                 ENICPMD_LOG(DEBUG, "Required queues for VF representors: rq %u wq %u cq %u",
1493                             enic->vf_required_rq, enic->vf_required_wq,
1494                             enic->vf_required_cq);
1495         }
1496
1497         if (enic->conf_rq_count < required_rq) {
1498                 dev_err(dev, "Not enough Receive queues. Requested:%u which uses %d RQs on VIC, Configured:%u\n",
1499                         eth_dev->data->nb_rx_queues,
1500                         required_rq, enic->conf_rq_count);
1501                 rc = -EINVAL;
1502         }
1503         if (enic->conf_wq_count < required_wq) {
1504                 dev_err(dev, "Not enough Transmit queues. Requested:%u, Configured:%u\n",
1505                         eth_dev->data->nb_tx_queues, enic->conf_wq_count);
1506                 rc = -EINVAL;
1507         }
1508
1509         if (enic->conf_cq_count < required_cq) {
1510                 dev_err(dev, "Not enough Completion queues. Required:%u, Configured:%u\n",
1511                         required_cq, enic->conf_cq_count);
1512                 rc = -EINVAL;
1513         }
1514         if (enic->conf_intr_count < required_intr) {
1515                 dev_err(dev, "Not enough Interrupts to support Rx queue"
1516                         " interrupts. Required:%u, Configured:%u\n",
1517                         required_intr, enic->conf_intr_count);
1518                 rc = -EINVAL;
1519         }
1520
1521         if (rc == 0) {
1522                 enic->rq_count = eth_dev->data->nb_rx_queues;
1523                 enic->wq_count = eth_dev->data->nb_tx_queues;
1524                 enic->cq_count = enic->rq_count + enic->wq_count;
1525                 enic->intr_count = required_intr;
1526         }
1527
1528         return rc;
1529 }
1530
1531 /* Initialize the completion queue for an RQ */
1532 static int
1533 enic_reinit_rq(struct enic *enic, unsigned int rq_idx)
1534 {
1535         struct vnic_rq *sop_rq, *data_rq;
1536         unsigned int cq_idx;
1537         int rc = 0;
1538
1539         sop_rq = &enic->rq[enic_rte_rq_idx_to_sop_idx(rq_idx)];
1540         data_rq = &enic->rq[enic_rte_rq_idx_to_data_idx(rq_idx, enic)];
1541         cq_idx = enic_cq_rq(enic, rq_idx);
1542
1543         vnic_cq_clean(&enic->cq[cq_idx]);
1544         vnic_cq_init(&enic->cq[cq_idx],
1545                      0 /* flow_control_enable */,
1546                      1 /* color_enable */,
1547                      0 /* cq_head */,
1548                      0 /* cq_tail */,
1549                      1 /* cq_tail_color */,
1550                      0 /* interrupt_enable */,
1551                      1 /* cq_entry_enable */,
1552                      0 /* cq_message_enable */,
1553                      0 /* interrupt offset */,
1554                      0 /* cq_message_addr */);
1555
1556
1557         vnic_rq_init_start(sop_rq, enic_cq_rq(enic,
1558                            enic_rte_rq_idx_to_sop_idx(rq_idx)), 0,
1559                            sop_rq->ring.desc_count - 1, 1, 0);
1560         if (data_rq->in_use) {
1561                 vnic_rq_init_start(data_rq,
1562                                    enic_cq_rq(enic,
1563                                    enic_rte_rq_idx_to_data_idx(rq_idx, enic)),
1564                                    0, data_rq->ring.desc_count - 1, 1, 0);
1565         }
1566
1567         rc = enic_alloc_rx_queue_mbufs(enic, sop_rq);
1568         if (rc)
1569                 return rc;
1570
1571         if (data_rq->in_use) {
1572                 rc = enic_alloc_rx_queue_mbufs(enic, data_rq);
1573                 if (rc) {
1574                         enic_rxmbuf_queue_release(enic, sop_rq);
1575                         return rc;
1576                 }
1577         }
1578
1579         return 0;
1580 }
1581
1582 /* The Cisco NIC can send and receive packets up to a max packet size
1583  * determined by the NIC type and firmware. There is also an MTU
1584  * configured into the NIC via the CIMC/UCSM management interface
1585  * which can be overridden by this function (up to the max packet size).
1586  * Depending on the network setup, doing so may cause packet drops
1587  * and unexpected behavior.
1588  */
1589 int enic_set_mtu(struct enic *enic, uint16_t new_mtu)
1590 {
1591         unsigned int rq_idx;
1592         struct vnic_rq *rq;
1593         int rc = 0;
1594         uint16_t old_mtu;       /* previous setting */
1595         uint16_t config_mtu;    /* Value configured into NIC via CIMC/UCSM */
1596         struct rte_eth_dev *eth_dev = enic->rte_dev;
1597
1598         old_mtu = eth_dev->data->mtu;
1599         config_mtu = enic->config.mtu;
1600
1601         if (rte_eal_process_type() != RTE_PROC_PRIMARY)
1602                 return -E_RTE_SECONDARY;
1603
1604         if (new_mtu > enic->max_mtu) {
1605                 dev_err(enic,
1606                         "MTU not updated: requested (%u) greater than max (%u)\n",
1607                         new_mtu, enic->max_mtu);
1608                 return -EINVAL;
1609         }
1610         if (new_mtu < ENIC_MIN_MTU) {
1611                 dev_info(enic,
1612                         "MTU not updated: requested (%u) less than min (%u)\n",
1613                         new_mtu, ENIC_MIN_MTU);
1614                 return -EINVAL;
1615         }
1616         if (new_mtu > config_mtu)
1617                 dev_warning(enic,
1618                         "MTU (%u) is greater than value configured in NIC (%u)\n",
1619                         new_mtu, config_mtu);
1620
1621         /* Update the MTU and maximum packet length */
1622         eth_dev->data->mtu = new_mtu;
1623         eth_dev->data->dev_conf.rxmode.max_rx_pkt_len =
1624                 enic_mtu_to_max_rx_pktlen(new_mtu);
1625
1626         /*
1627          * If the device has not started (enic_enable), nothing to do.
1628          * Later, enic_enable() will set up RQs reflecting the new maximum
1629          * packet length.
1630          */
1631         if (!eth_dev->data->dev_started)
1632                 goto set_mtu_done;
1633
1634         /*
1635          * The device has started, re-do RQs on the fly. In the process, we
1636          * pick up the new maximum packet length.
1637          *
1638          * Some applications rely on the ability to change MTU without stopping
1639          * the device. So keep this behavior for now.
1640          */
1641         rte_spinlock_lock(&enic->mtu_lock);
1642
1643         /* Stop traffic on all RQs */
1644         for (rq_idx = 0; rq_idx < enic->rq_count * 2; rq_idx++) {
1645                 rq = &enic->rq[rq_idx];
1646                 if (rq->is_sop && rq->in_use) {
1647                         rc = enic_stop_rq(enic,
1648                                           enic_sop_rq_idx_to_rte_idx(rq_idx));
1649                         if (rc) {
1650                                 dev_err(enic, "Failed to stop Rq %u\n", rq_idx);
1651                                 goto set_mtu_done;
1652                         }
1653                 }
1654         }
1655
1656         /* replace Rx function with a no-op to avoid getting stale pkts */
1657         eth_dev->rx_pkt_burst = enic_dummy_recv_pkts;
1658         rte_mb();
1659
1660         /* Allow time for threads to exit the real Rx function. */
1661         usleep(100000);
1662
1663         /* now it is safe to reconfigure the RQs */
1664
1665
1666         /* free and reallocate RQs with the new MTU */
1667         for (rq_idx = 0; rq_idx < enic->rq_count; rq_idx++) {
1668                 rq = &enic->rq[enic_rte_rq_idx_to_sop_idx(rq_idx)];
1669                 if (!rq->in_use)
1670                         continue;
1671
1672                 enic_free_rq(rq);
1673                 rc = enic_alloc_rq(enic, rq_idx, rq->socket_id, rq->mp,
1674                                    rq->tot_nb_desc, rq->rx_free_thresh);
1675                 if (rc) {
1676                         dev_err(enic,
1677                                 "Fatal MTU alloc error- No traffic will pass\n");
1678                         goto set_mtu_done;
1679                 }
1680
1681                 rc = enic_reinit_rq(enic, rq_idx);
1682                 if (rc) {
1683                         dev_err(enic,
1684                                 "Fatal MTU RQ reinit- No traffic will pass\n");
1685                         goto set_mtu_done;
1686                 }
1687         }
1688
1689         /* put back the real receive function */
1690         rte_mb();
1691         enic_pick_rx_handler(eth_dev);
1692         rte_mb();
1693
1694         /* restart Rx traffic */
1695         for (rq_idx = 0; rq_idx < enic->rq_count; rq_idx++) {
1696                 rq = &enic->rq[enic_rte_rq_idx_to_sop_idx(rq_idx)];
1697                 if (rq->is_sop && rq->in_use)
1698                         enic_start_rq(enic, rq_idx);
1699         }
1700
1701 set_mtu_done:
1702         dev_info(enic, "MTU changed from %u to %u\n",  old_mtu, new_mtu);
1703         rte_spinlock_unlock(&enic->mtu_lock);
1704         return rc;
1705 }
1706
1707 static int enic_dev_init(struct enic *enic)
1708 {
1709         int err;
1710         struct rte_eth_dev *eth_dev = enic->rte_dev;
1711
1712         vnic_dev_intr_coal_timer_info_default(enic->vdev);
1713
1714         /* Get vNIC configuration
1715         */
1716         err = enic_get_vnic_config(enic);
1717         if (err) {
1718                 dev_err(dev, "Get vNIC configuration failed, aborting\n");
1719                 return err;
1720         }
1721
1722         /* Get available resource counts */
1723         enic_get_res_counts(enic);
1724         if (enic->conf_rq_count == 1) {
1725                 dev_err(enic, "Running with only 1 RQ configured in the vNIC is not supported.\n");
1726                 dev_err(enic, "Please configure 2 RQs in the vNIC for each Rx queue used by DPDK.\n");
1727                 dev_err(enic, "See the ENIC PMD guide for more information.\n");
1728                 return -EINVAL;
1729         }
1730         /* Queue counts may be zeros. rte_zmalloc returns NULL in that case. */
1731         enic->cq = rte_zmalloc("enic_vnic_cq", sizeof(struct vnic_cq) *
1732                                enic->conf_cq_count, 8);
1733         enic->intr = rte_zmalloc("enic_vnic_intr", sizeof(struct vnic_intr) *
1734                                  enic->conf_intr_count, 8);
1735         enic->rq = rte_zmalloc("enic_vnic_rq", sizeof(struct vnic_rq) *
1736                                enic->conf_rq_count, 8);
1737         enic->wq = rte_zmalloc("enic_vnic_wq", sizeof(struct vnic_wq) *
1738                                enic->conf_wq_count, 8);
1739         if (enic->conf_cq_count > 0 && enic->cq == NULL) {
1740                 dev_err(enic, "failed to allocate vnic_cq, aborting.\n");
1741                 return -1;
1742         }
1743         if (enic->conf_intr_count > 0 && enic->intr == NULL) {
1744                 dev_err(enic, "failed to allocate vnic_intr, aborting.\n");
1745                 return -1;
1746         }
1747         if (enic->conf_rq_count > 0 && enic->rq == NULL) {
1748                 dev_err(enic, "failed to allocate vnic_rq, aborting.\n");
1749                 return -1;
1750         }
1751         if (enic->conf_wq_count > 0 && enic->wq == NULL) {
1752                 dev_err(enic, "failed to allocate vnic_wq, aborting.\n");
1753                 return -1;
1754         }
1755
1756         /* Get the supported filters */
1757         enic_fdir_info(enic);
1758
1759         eth_dev->data->mac_addrs = rte_zmalloc("enic_mac_addr",
1760                                         sizeof(struct rte_ether_addr) *
1761                                         ENIC_UNICAST_PERFECT_FILTERS, 0);
1762         if (!eth_dev->data->mac_addrs) {
1763                 dev_err(enic, "mac addr storage alloc failed, aborting.\n");
1764                 return -1;
1765         }
1766         rte_ether_addr_copy((struct rte_ether_addr *)enic->mac_addr,
1767                         eth_dev->data->mac_addrs);
1768
1769         vnic_dev_set_reset_flag(enic->vdev, 0);
1770
1771         LIST_INIT(&enic->flows);
1772
1773         /* set up link status checking */
1774         vnic_dev_notify_set(enic->vdev, -1); /* No Intr for notify */
1775
1776         /*
1777          * When Geneve with options offload is available, always disable it
1778          * first as it can interfere with user flow rules.
1779          */
1780         if (enic->geneve_opt_avail) {
1781                 /*
1782                  * Disabling fails if the feature is provisioned but
1783                  * not enabled. So ignore result and do not log error.
1784                  */
1785                 vnic_dev_overlay_offload_ctrl(enic->vdev,
1786                         OVERLAY_FEATURE_GENEVE,
1787                         OVERLAY_OFFLOAD_DISABLE);
1788         }
1789         enic->overlay_offload = false;
1790         if (enic->disable_overlay && enic->vxlan) {
1791                 /*
1792                  * Explicitly disable overlay offload as the setting is
1793                  * sticky, and resetting vNIC does not disable it.
1794                  */
1795                 if (vnic_dev_overlay_offload_ctrl(enic->vdev,
1796                                                   OVERLAY_FEATURE_VXLAN,
1797                                                   OVERLAY_OFFLOAD_DISABLE)) {
1798                         dev_err(enic, "failed to disable overlay offload\n");
1799                 } else {
1800                         dev_info(enic, "Overlay offload is disabled\n");
1801                 }
1802         }
1803         if (!enic->disable_overlay && enic->vxlan &&
1804             /* 'VXLAN feature' enables VXLAN, NVGRE, and GENEVE. */
1805             vnic_dev_overlay_offload_ctrl(enic->vdev,
1806                                           OVERLAY_FEATURE_VXLAN,
1807                                           OVERLAY_OFFLOAD_ENABLE) == 0) {
1808                 enic->tx_offload_capa |=
1809                         DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM |
1810                         DEV_TX_OFFLOAD_GENEVE_TNL_TSO |
1811                         DEV_TX_OFFLOAD_VXLAN_TNL_TSO;
1812                 enic->tx_offload_mask |=
1813                         PKT_TX_OUTER_IPV6 |
1814                         PKT_TX_OUTER_IPV4 |
1815                         PKT_TX_OUTER_IP_CKSUM |
1816                         PKT_TX_TUNNEL_MASK;
1817                 enic->overlay_offload = true;
1818                 dev_info(enic, "Overlay offload is enabled\n");
1819         }
1820         /* Geneve with options offload requires overlay offload */
1821         if (enic->overlay_offload && enic->geneve_opt_avail &&
1822             enic->geneve_opt_request) {
1823                 if (vnic_dev_overlay_offload_ctrl(enic->vdev,
1824                                 OVERLAY_FEATURE_GENEVE,
1825                                 OVERLAY_OFFLOAD_ENABLE)) {
1826                         dev_err(enic, "failed to enable geneve+option\n");
1827                 } else {
1828                         enic->geneve_opt_enabled = 1;
1829                         dev_info(enic, "Geneve with options is enabled\n");
1830                 }
1831         }
1832         /*
1833          * Reset the vxlan port if HW vxlan parsing is available. It
1834          * is always enabled regardless of overlay offload
1835          * enable/disable.
1836          */
1837         if (enic->vxlan) {
1838                 enic->vxlan_port = RTE_VXLAN_DEFAULT_PORT;
1839                 /*
1840                  * Reset the vxlan port to the default, as the NIC firmware
1841                  * does not reset it automatically and keeps the old setting.
1842                  */
1843                 if (vnic_dev_overlay_offload_cfg(enic->vdev,
1844                                                  OVERLAY_CFG_VXLAN_PORT_UPDATE,
1845                                                  RTE_VXLAN_DEFAULT_PORT)) {
1846                         dev_err(enic, "failed to update vxlan port\n");
1847                         return -EINVAL;
1848                 }
1849         }
1850
1851         if (enic_fm_init(enic))
1852                 dev_warning(enic, "Init of flowman failed.\n");
1853         return 0;
1854
1855 }
1856
1857 static void lock_devcmd(void *priv)
1858 {
1859         struct enic *enic = priv;
1860
1861         rte_spinlock_lock(&enic->devcmd_lock);
1862 }
1863
1864 static void unlock_devcmd(void *priv)
1865 {
1866         struct enic *enic = priv;
1867
1868         rte_spinlock_unlock(&enic->devcmd_lock);
1869 }
1870
1871 int enic_probe(struct enic *enic)
1872 {
1873         struct rte_pci_device *pdev = enic->pdev;
1874         int err = -1;
1875
1876         dev_debug(enic, "Initializing ENIC PMD\n");
1877
1878         /* if this is a secondary process the hardware is already initialized */
1879         if (rte_eal_process_type() != RTE_PROC_PRIMARY)
1880                 return 0;
1881
1882         enic->bar0.vaddr = (void *)pdev->mem_resource[0].addr;
1883         enic->bar0.len = pdev->mem_resource[0].len;
1884
1885         /* Register vNIC device */
1886         enic->vdev = vnic_dev_register(NULL, enic, enic->pdev, &enic->bar0, 1);
1887         if (!enic->vdev) {
1888                 dev_err(enic, "vNIC registration failed, aborting\n");
1889                 goto err_out;
1890         }
1891
1892         LIST_INIT(&enic->memzone_list);
1893         rte_spinlock_init(&enic->memzone_list_lock);
1894
1895         vnic_register_cbacks(enic->vdev,
1896                 enic_alloc_consistent,
1897                 enic_free_consistent);
1898
1899         /*
1900          * Allocate the consistent memory for stats upfront so both primary and
1901          * secondary processes can dump stats.
1902          */
1903         err = vnic_dev_alloc_stats_mem(enic->vdev);
1904         if (err) {
1905                 dev_err(enic, "Failed to allocate cmd memory, aborting\n");
1906                 goto err_out_unregister;
1907         }
1908         /* Issue device open to get device in known state */
1909         err = enic_dev_open(enic);
1910         if (err) {
1911                 dev_err(enic, "vNIC dev open failed, aborting\n");
1912                 goto err_out_unregister;
1913         }
1914
1915         /* Set ingress vlan rewrite mode before vnic initialization */
1916         dev_debug(enic, "Set ig_vlan_rewrite_mode=%u\n",
1917                   enic->ig_vlan_rewrite_mode);
1918         err = vnic_dev_set_ig_vlan_rewrite_mode(enic->vdev,
1919                 enic->ig_vlan_rewrite_mode);
1920         if (err) {
1921                 dev_err(enic,
1922                         "Failed to set ingress vlan rewrite mode, aborting.\n");
1923                 goto err_out_dev_close;
1924         }
1925
1926         /* Issue device init to initialize the vnic-to-switch link.
1927          * We'll start with carrier off and wait for link UP
1928          * notification later to turn on carrier.  We don't need
1929          * to wait here for the vnic-to-switch link initialization
1930          * to complete; link UP notification is the indication that
1931          * the process is complete.
1932          */
1933
1934         err = vnic_dev_init(enic->vdev, 0);
1935         if (err) {
1936                 dev_err(enic, "vNIC dev init failed, aborting\n");
1937                 goto err_out_dev_close;
1938         }
1939
1940         err = enic_dev_init(enic);
1941         if (err) {
1942                 dev_err(enic, "Device initialization failed, aborting\n");
1943                 goto err_out_dev_close;
1944         }
1945
1946         /* Use a PF spinlock to serialize devcmd from PF and VF representors */
1947         if (enic->switchdev_mode) {
1948                 rte_spinlock_init(&enic->devcmd_lock);
1949                 vnic_register_lock(enic->vdev, lock_devcmd, unlock_devcmd);
1950         }
1951         return 0;
1952
1953 err_out_dev_close:
1954         vnic_dev_close(enic->vdev);
1955 err_out_unregister:
1956         vnic_dev_unregister(enic->vdev);
1957 err_out:
1958         return err;
1959 }
1960
1961 void enic_remove(struct enic *enic)
1962 {
1963         enic_dev_deinit(enic);
1964         vnic_dev_close(enic->vdev);
1965         vnic_dev_unregister(enic->vdev);
1966 }