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