xref: /dpdk/drivers/net/enic/enic_main.c (revision ceccf8dc7c3d7797e380f12b45cd3ea1d7396b58)
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 __rte_weak bool
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 }
1834