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