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