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