Lines Matching defs:enic

52 #include "enic.h"
57 static SYSCTL_NODE(_hw, OID_AUTO, enic, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
108 static int enic_dev_open(struct enic *);
109 static int enic_dev_init(struct enic *);
119 static void enic_update_packet_filter(struct enic *enic);
141 "enic", enic_methods, sizeof(struct enic_softc)
144 DRIVER_MODULE(enic, pci, enic_driver, 0, 0);
145 IFLIB_PNP_INFO(pci, enic, enic_vendor_info_array);
146 MODULE_VERSION(enic, 2);
148 MODULE_DEPEND(enic, pci, 1, 1, 1);
149 MODULE_DEPEND(enic, ether, 1, 1, 1);
150 MODULE_DEPEND(enic, iflib, 1, 1, 1);
184 "enic", enic_iflib_methods, sizeof(struct enic_softc)
301 static void enic_set_rx_coal_setting(struct enic *enic)
305 struct enic_rx_coal *rx_coal = &enic->rx_coalesce_setting;
309 * 3. Update it in enic->rx_coalesce_setting
311 speed = vnic_dev_port_speed(enic->vdev);
324 for (index = 0; index < enic->rq_count; index++)
325 enic->cq[index].cur_rx_coal_timeval =
326 enic->config.intr_timer_usec;
337 struct enic *enic;
369 enic = &softc->enic;
370 enic->softc = softc;
373 enic->vdev = vdev;
374 vdev->priv = enic;
378 enic->vdev = vdev;
379 vnic_dev_cmd_init(enic->vdev);
389 vnic_register_cbacks(enic->vdev, enic_alloc_consistent,
397 err = vnic_dev_alloc_stats_mem(enic->vdev);
400 dev_err(enic, "Failed to allocate cmd memory, aborting\n");
403 vnic_dev_stats_clear(enic->vdev);
404 ret = vnic_dev_stats_dump(enic->vdev, &stats);
406 dev_err(enic, "Error in getting stats\n");
409 err = vnic_dev_alloc_counter_mem(enic->vdev);
411 dev_err(enic, "Failed to allocate counter memory, aborting\n");
416 err = enic_dev_open(enic);
418 dev_err(enic, "vNIC dev open failed, aborting\n");
423 enic->ig_vlan_rewrite_mode = IG_VLAN_REWRITE_MODE_UNTAG_DEFAULT_VLAN;
424 enic->ig_vlan_rewrite_mode = IG_VLAN_REWRITE_MODE_PRIORITY_TAG_DEFAULT_VLAN;
425 err = vnic_dev_set_ig_vlan_rewrite_mode(enic->vdev,
426 enic->ig_vlan_rewrite_mode);
428 dev_err(enic,
441 err = vnic_dev_init(enic->vdev, 0);
443 dev_err(enic, "vNIC dev init failed, aborting\n");
447 err = enic_dev_init(enic);
449 dev_err(enic, "Device initialization failed, aborting\n");
454 enic->port_mtu = vnic_dev_mtu(enic->vdev);
462 if_setmtu(softc->ifp, enic->config.mtu);
463 scctx->isc_max_frame_size = enic->config.mtu + ETHER_HDR_LEN + \
465 scctx->isc_nrxqsets_max = enic->conf_rq_count;
466 scctx->isc_ntxqsets_max = enic->conf_wq_count;
467 scctx->isc_nrxqsets = enic->conf_rq_count;
468 scctx->isc_ntxqsets = enic->conf_wq_count;
469 for (i = 0; i < enic->conf_wq_count; i++) {
470 scctx->isc_ntxd[i] = enic->config.wq_desc_count;
473 scctx->isc_ntxd[i + enic->conf_wq_count] =
474 enic->config.wq_desc_count;
475 scctx->isc_txqsizes[i + enic->conf_wq_count] =
477 enic->conf_wq_count];
479 for (i = 0; i < enic->conf_rq_count; i++) {
480 scctx->isc_nrxd[i] = enic->config.rq_desc_count;
483 scctx->isc_nrxd[i + enic->conf_rq_count] =
484 enic->config.rq_desc_count;
485 scctx->isc_rxqsizes[i + enic->conf_rq_count] = sizeof(struct
486 cq_desc) * scctx->isc_nrxd[i + enic->conf_rq_count];
500 if (softc->enic.cq == NULL)
501 softc->enic.cq = malloc(sizeof(struct vnic_cq) *
502 softc->enic.wq_count + softc->enic.rq_count, M_DEVBUF,
504 if (softc->enic.cq == NULL)
507 softc->enic.cq->ntxqsets = softc->enic.wq_count + softc->enic.rq_count;
513 err = vnic_dev_alloc_stats_mem(enic->vdev);
515 dev_err(enic, "Failed to allocate cmd memory, aborting\n");
521 dev_err(enic, "Failed to allocate MSIX, aborting\n");
528 vnic_dev_close(enic->vdev);
529 vnic_dev_deinit_devcmd2(enic->vdev);
532 free(softc->enic.intr_queues, M_DEVBUF);
533 free(softc->enic.cq, M_DEVBUF);
546 struct enic *enic;
554 enic = &softc->enic;
558 vnic_dev_set_intr_mode(enic->vdev, VNIC_DEV_INTR_MODE_MSIX);
561 enic->intr_queues = malloc(sizeof(*enic->intr_queues) *
562 enic->conf_intr_count, M_DEVBUF, M_NOWAIT | M_ZERO);
563 enic->intr = malloc(sizeof(*enic->intr) * msix, M_DEVBUF, M_NOWAIT
570 &enic->intr_queues[i].intr_irq, i + 1, IFLIB_INTR_RX,
571 enic_rxq_intr, &enic->rq[i], i, irq_name);
577 enic->intr[i].index = i;
578 enic->intr[i].vdev = enic->vdev;
580 enic->intr[i].ctrl = vnic_dev_get_res(enic->vdev,
582 vnic_intr_mask(&enic->intr[i]);
591 &enic->intr_queues[i].intr_irq, IFLIB_INTR_TX,
592 &enic->wq[i - scctx->isc_nrxqsets], i - scctx->isc_nrxqsets,
595 enic->intr[i].index = i;
596 enic->intr[i].vdev = enic->vdev;
598 enic->intr[i].ctrl = vnic_dev_get_res(enic->vdev,
600 vnic_intr_mask(&enic->intr[i]);
613 enic->intr[i].index = i;
614 enic->intr[i].vdev = enic->vdev;
616 enic->intr[i].ctrl = vnic_dev_get_res(enic->vdev, RES_TYPE_INTR_CTRL,
618 vnic_intr_mask(&enic->intr[i]);
629 enic->intr[i].index = i;
630 enic->intr[i].vdev = enic->vdev;
632 enic->intr[i].ctrl = vnic_dev_get_res(enic->vdev, RES_TYPE_INTR_CTRL,
634 vnic_intr_mask(&enic->intr[i]);
637 enic->intr_count = msix;
647 struct enic *enic;
651 enic = &softc->enic;
654 iflib_irq_free(softc->ctx, &enic->intr_queues[i].intr_irq);
659 free(enic->intr_queues, M_DEVBUF);
660 free(enic->intr, M_DEVBUF);
666 struct enic *enic;
671 enic = &softc->enic;
675 enic_init_vnic_resources(enic);
676 enic_set_rx_coal_setting(enic);
677 enic_setup_finish(enic);
689 struct enic *enic;
692 enic = &softc->enic;
694 vnic_dev_notify_unset(enic->vdev);
699 vnic_dev_deinit(enic->vdev);
700 vnic_dev_close(enic->vdev);
701 vnic_dev_deinit_devcmd2(enic->vdev);
719 softc->enic.wq = malloc(sizeof(struct vnic_wq) *
721 if (softc->enic.wq == NULL)
740 wq = &softc->enic.wq[q];
741 cq_wq = enic_cq_wq(&softc->enic, q);
742 cq = &softc->enic.cq[cq_wq];
745 wq->vdev = softc->enic.vdev;
747 wq->ctrl = vnic_dev_get_res(softc->enic.vdev, RES_TYPE_WQ,
763 cq->vdev = softc->enic.vdev;
765 cq->ctrl = vnic_dev_get_res(softc->enic.vdev,
793 softc->enic.rq = malloc(sizeof(struct vnic_rq) * nrxqsets, M_DEVBUF,
795 if (softc->enic.rq == NULL)
814 rq = &softc->enic.rq[q];
815 cq_rq = enic_cq_rq(&softc->enic, q);
816 cq = &softc->enic.cq[cq_rq];
819 cq->vdev = softc->enic.vdev;
821 cq->ctrl = vnic_dev_get_res(softc->enic.vdev, RES_TYPE_CQ,
832 rq->vdev = softc->enic.vdev;
835 rq->ctrl = vnic_dev_get_res(softc->enic.vdev,
860 free(softc->enic.rq, M_DEVBUF);
861 free(softc->enic.wq, M_DEVBUF);
862 free(softc->enic.cq, M_DEVBUF);
883 struct enic *enic;
887 enic = &softc->enic;
889 mtu = vnic_dev_mtu(enic->vdev);
890 if (mtu && mtu != enic->port_mtu) {
891 enic->port_mtu = mtu;
916 struct enic *enic;
927 enic = &softc->enic;
934 enic_dev_disable(enic);
937 enic_stop_wq(enic, index);
938 vnic_wq_clean(&enic->wq[index]);
939 vnic_cq_clean(&enic->cq[enic_cq_rq(enic, index)]);
941 wq = &softc->enic.wq[index];
947 cq_wq = enic_cq_wq(&softc->enic, index);
948 cq = &softc->enic.cq[cq_wq];
953 enic_stop_rq(enic, index);
954 vnic_rq_clean(&enic->rq[index]);
955 vnic_cq_clean(&enic->cq[enic_cq_wq(enic, index)]);
957 rq = &softc->enic.rq[index];
958 cq_rq = enic_cq_rq(&softc->enic, index);
959 cq = &softc->enic.cq[cq_rq];
967 vnic_intr_clean(&enic->intr[index]);
975 struct enic *enic;
981 enic = &softc->enic;
984 enic_init_vnic_resources(enic);
987 enic_prep_wq_for_simple_tx(&softc->enic, index);
990 enic_start_wq(enic, index);
993 enic_start_rq(enic, index);
1000 vnic_dev_enable_wait(enic->vdev);
1010 struct enic *enic;
1013 enic = &softc->enic;
1015 vnic_dev_del_addr(enic->vdev, &softc->mta[i * ETHER_ADDR_LEN]);
1023 struct enic *enic;
1026 enic = &softc->enic;
1028 vnic_dev_add_addr(enic->vdev, &softc->mta[i * ETHER_ADDR_LEN]);
1072 enic_update_packet_filter(&softc->enic);
1079 struct enic *enic;
1083 enic = &softc->enic;
1086 if (mtu > enic->port_mtu){
1090 enic->config.mtu = mtu;
1152 enic_update_packet_filter(&softc->enic);
1181 struct enic *enic;
1186 enic = &softc->enic;
1189 ret = vnic_dev_stats_dump(enic->vdev, &stats);
1192 dev_err(enic, "Error in getting stats\n");
1229 struct enic *enic;
1230 enic = &softc->enic;
1233 vnic_dev_add_addr(enic->vdev, softc->lladdr);
1332 enic_setup_txq_sysctl(softc->enic.wq, 0, ctx, child);
1333 enic_setup_rxq_sysctl(softc->enic.rq, 0, ctx, child);
1355 struct enic *enic = &softc->enic;
1357 vnic_intr_unmask(&enic->intr[irq]);
1358 vnic_intr_return_all_credits(&enic->intr[irq]);
1364 struct enic *enic = &softc->enic;
1366 vnic_intr_mask(&enic->intr[irq]);
1367 vnic_intr_masked(&enic->intr[irq]); /* flush write */
1431 enic_dev_open(struct enic *enic)
1436 err = enic_dev_wait(enic->vdev, vnic_dev_open,
1439 dev_err(enic_get_dev(enic),
1446 enic_dev_init(struct enic *enic)
1450 vnic_dev_intr_coal_timer_info_default(enic->vdev);
1455 err = enic_get_vnic_config(enic);
1462 enic_get_res_counts(enic);
1465 enic->intr_queues = malloc(sizeof(*enic->intr_queues) *
1466 enic->conf_intr_count, M_DEVBUF, M_NOWAIT | M_ZERO);
1468 vnic_dev_set_reset_flag(enic->vdev, 0);
1469 enic->max_flow_counter = -1;
1472 vnic_dev_notify_set(enic->vdev, -1); /* No Intr for notify */
1474 enic->overlay_offload = false;
1475 if (enic->disable_overlay && enic->vxlan) {
1480 if (vnic_dev_overlay_offload_ctrl(enic->vdev,
1482 dev_err(enic, "failed to disable overlay offload\n");
1484 dev_info(enic, "Overlay offload is disabled\n");
1487 if (!enic->disable_overlay && enic->vxlan &&
1489 vnic_dev_overlay_offload_ctrl(enic->vdev,
1491 enic->overlay_offload = true;
1492 enic->vxlan_port = ENIC_DEFAULT_VXLAN_PORT;
1493 dev_info(enic, "Overlay offload is enabled\n");
1498 if (vnic_dev_overlay_offload_cfg(enic->vdev,
1500 dev_err(enic, "failed to update vxlan port\n");
1513 struct enic *enic = (struct enic *)priv;
1516 rz = iflib_dma_alloc(enic->softc->ctx, size, res, BUS_DMA_NOWAIT);
1618 enic_init_vnic_resources(struct enic *enic)
1630 scctx = enic->softc->scctx;
1638 for (index = 0; index < enic->intr_count; index++) {
1639 vnic_intr_alloc(enic->vdev, &enic->intr[index], index);
1643 cq_idx = enic_cq_rq(enic, index);
1645 vnic_rq_clean(&enic->rq[index]);
1646 vnic_rq_init(&enic->rq[index], cq_idx, error_interrupt_enable,
1649 vnic_cq_clean(&enic->cq[cq_idx]);
1650 vnic_cq_init(&enic->cq[cq_idx],
1666 cq_idx = enic_cq_wq(enic, index);
1667 vnic_wq_clean(&enic->wq[index]);
1668 vnic_wq_init(&enic->wq[index], cq_idx, error_interrupt_enable,
1671 enic->wq[index].tx_offload_notsup_mask = 0;
1673 vnic_cq_clean(&enic->cq[cq_idx]);
1674 vnic_cq_init(&enic->cq[cq_idx],
1684 0 /* (u64)enic->wq[index].cqmsg_rz->iova */ );
1688 for (index = 0; index < enic->intr_count; index++) {
1689 vnic_intr_init(&enic->intr[index], 125,
1690 enic->config.intr_timer_type, /* mask_on_assertion */ 1);
1695 enic_update_packet_filter(struct enic *enic)
1697 struct enic_softc *softc = enic->softc;
1700 vnic_dev_packet_filter(enic->vdev,
1720 enic_setup_finish(struct enic *enic)
1722 struct enic_softc *softc = enic->softc;
1730 enic_update_packet_filter(enic);