Lines Matching refs:vi

1387 		pi->vi = malloc(sizeof(struct vi_info) * t4_num_vis, M_CXGBE,  in t4_attach()
1398 free(pi->vi, M_CXGBE); in t4_attach()
1448 pi->vi[0].dev = pi->dev; in t4_attach()
1563 struct vi_info *vi; in t4_attach() local
1569 for_each_vi(pi, j, vi) { in t4_attach()
1570 vi->pi = pi; in t4_attach()
1571 vi->adapter = sc; in t4_attach()
1572 vi->first_intr = -1; in t4_attach()
1573 vi->qsize_rxq = t4_qsize_rxq; in t4_attach()
1574 vi->qsize_txq = t4_qsize_txq; in t4_attach()
1576 vi->first_rxq = rqidx; in t4_attach()
1577 vi->first_txq = tqidx; in t4_attach()
1578 vi->tmr_idx = t4_tmr_idx; in t4_attach()
1579 vi->pktc_idx = t4_pktc_idx; in t4_attach()
1580 vi->nrxq = j == 0 ? iaq.nrxq : iaq.nrxq_vi; in t4_attach()
1581 vi->ntxq = j == 0 ? iaq.ntxq : iaq.ntxq_vi; in t4_attach()
1583 rqidx += vi->nrxq; in t4_attach()
1584 tqidx += vi->ntxq; in t4_attach()
1586 if (j == 0 && vi->ntxq > 1) in t4_attach()
1587 vi->rsrv_noflowq = t4_rsrv_noflowq ? 1 : 0; in t4_attach()
1589 vi->rsrv_noflowq = 0; in t4_attach()
1592 vi->first_ofld_txq = ofld_tqidx; in t4_attach()
1593 vi->nofldtxq = j == 0 ? iaq.nofldtxq : iaq.nofldtxq_vi; in t4_attach()
1594 ofld_tqidx += vi->nofldtxq; in t4_attach()
1597 vi->ofld_tmr_idx = t4_tmr_idx_ofld; in t4_attach()
1598 vi->ofld_pktc_idx = t4_pktc_idx_ofld; in t4_attach()
1599 vi->first_ofld_rxq = ofld_rqidx; in t4_attach()
1600 vi->nofldrxq = j == 0 ? iaq.nofldrxq : iaq.nofldrxq_vi; in t4_attach()
1602 ofld_rqidx += vi->nofldrxq; in t4_attach()
1605 vi->first_nm_rxq = nm_rqidx; in t4_attach()
1606 vi->first_nm_txq = nm_tqidx; in t4_attach()
1608 vi->nnmrxq = iaq.nnmrxq; in t4_attach()
1609 vi->nnmtxq = iaq.nnmtxq; in t4_attach()
1611 vi->nnmrxq = iaq.nnmrxq_vi; in t4_attach()
1612 vi->nnmtxq = iaq.nnmtxq_vi; in t4_attach()
1614 nm_rqidx += vi->nnmrxq; in t4_attach()
1615 nm_tqidx += vi->nnmtxq; in t4_attach()
1815 t4_free_vi(sc, sc->mbox, sc->pf, 0, pi->vi[0].viid); in t4_detach_common()
1820 free(pi->vi, M_CXGBE); in t4_detach_common()
2016 struct vi_info *vi; in stop_lld() local
2047 for_each_vi(pi, j, vi) { in stop_lld()
2048 vi->xact_addr_filt = -1; in stop_lld()
2049 mtx_lock(&vi->tick_mtx); in stop_lld()
2050 vi->flags |= VI_SKIP_STATS; in stop_lld()
2051 mtx_unlock(&vi->tick_mtx); in stop_lld()
2052 if (!(vi->flags & VI_INIT_DONE)) in stop_lld()
2055 ifp = vi->ifp; in stop_lld()
2057 mtx_lock(&vi->tick_mtx); in stop_lld()
2058 callout_stop(&vi->tick); in stop_lld()
2059 mtx_unlock(&vi->tick_mtx); in stop_lld()
2060 callout_drain(&vi->tick); in stop_lld()
2066 for_each_txq(vi, k, txq) { in stop_lld()
2072 for_each_ofld_txq(vi, k, ofld_txq) { in stop_lld()
2078 for_each_rxq(vi, k, rxq) { in stop_lld()
2082 for_each_ofld_rxq(vi, k, ofld_rxq) { in stop_lld()
2087 quiesce_vi(vi); in stop_lld()
2312 struct vi_info *vi; in restart_lld() local
2362 MPASS(pi->vi != NULL); in restart_lld()
2363 MPASS(pi->vi[0].dev == pi->dev); in restart_lld()
2377 for_each_vi(pi, j, vi) { in restart_lld()
2378 if (IS_MAIN_VI(vi)) in restart_lld()
2380 rc = alloc_extra_vi(sc, pi, vi); in restart_lld()
2382 CH_ERR(vi, in restart_lld()
2408 for_each_vi(pi, j, vi) { in restart_lld()
2409 mtx_lock(&vi->tick_mtx); in restart_lld()
2410 vi->flags &= ~VI_SKIP_STATS; in restart_lld()
2411 mtx_unlock(&vi->tick_mtx); in restart_lld()
2412 if (!(vi->flags & VI_INIT_DONE)) in restart_lld()
2414 rc = vi_full_init(vi); in restart_lld()
2416 CH_ERR(vi, "failed to re-initialize " in restart_lld()
2420 if (sc->traceq < 0 && IS_MAIN_VI(vi)) { in restart_lld()
2421 sc->traceq = sc->sge.rxq[vi->first_rxq].iq.abs_id; in restart_lld()
2430 ifp = vi->ifp; in restart_lld()
2442 CH_ERR(vi, "failed to re-configure MAC: %d\n", rc); in restart_lld()
2445 rc = -t4_enable_vi(sc, sc->mbox, vi->viid, true, in restart_lld()
2448 CH_ERR(vi, "failed to re-enable VI: %d\n", rc); in restart_lld()
2451 for_each_txq(vi, k, txq) { in restart_lld()
2456 mtx_lock(&vi->tick_mtx); in restart_lld()
2457 callout_schedule(&vi->tick, hz); in restart_lld()
2458 mtx_unlock(&vi->tick_mtx); in restart_lld()
2475 for_each_vi(pi, j, vi) { in restart_lld()
2476 if (!(vi->flags & VI_INIT_DONE)) in restart_lld()
2478 ifp = vi->ifp; in restart_lld()
2483 CH_ERR(vi, "failed to re-configure MCAST MACs: %d\n", rc); in restart_lld()
2615 cxgbe_vi_attach(device_t dev, struct vi_info *vi) in cxgbe_vi_attach() argument
2619 struct sysctl_ctx_list *ctx = &vi->ctx; in cxgbe_vi_attach()
2622 struct adapter *sc = vi->adapter; in cxgbe_vi_attach()
2625 children = SYSCTL_CHILDREN(device_get_sysctl_tree(vi->dev)); in cxgbe_vi_attach()
2626 vi->rxq_oid = SYSCTL_ADD_NODE(ctx, children, OID_AUTO, "rxq", in cxgbe_vi_attach()
2628 vi->txq_oid = SYSCTL_ADD_NODE(ctx, children, OID_AUTO, "txq", in cxgbe_vi_attach()
2631 vi->nm_rxq_oid = SYSCTL_ADD_NODE(ctx, children, OID_AUTO, "nm_rxq", in cxgbe_vi_attach()
2633 vi->nm_txq_oid = SYSCTL_ADD_NODE(ctx, children, OID_AUTO, "nm_txq", in cxgbe_vi_attach()
2637 vi->ofld_rxq_oid = SYSCTL_ADD_NODE(ctx, children, OID_AUTO, "ofld_rxq", in cxgbe_vi_attach()
2641 vi->ofld_txq_oid = SYSCTL_ADD_NODE(ctx, children, OID_AUTO, "ofld_txq", in cxgbe_vi_attach()
2645 vi->xact_addr_filt = -1; in cxgbe_vi_attach()
2646 mtx_init(&vi->tick_mtx, "vi tick", NULL, MTX_DEF); in cxgbe_vi_attach()
2647 callout_init_mtx(&vi->tick, &vi->tick_mtx, 0); in cxgbe_vi_attach()
2649 vi->flags |= TX_USES_VM_WR; in cxgbe_vi_attach()
2653 vi->ifp = ifp; in cxgbe_vi_attach()
2654 if_setsoftc(ifp, vi); in cxgbe_vi_attach()
2663 if (vi->pi->nvi > 1 || sc->flags & IS_VF) in cxgbe_vi_attach()
2687 if (vi->nofldrxq != 0) in cxgbe_vi_attach()
2691 if (is_ethoffload(sc) && vi->nofldtxq != 0) { in cxgbe_vi_attach()
2698 if (vi->flags & TX_USES_VM_WR) in cxgbe_vi_attach()
2703 if (is_ethoffload(sc) && vi->nofldtxq != 0) in cxgbe_vi_attach()
2715 ether_ifattach(ifp, vi->hw_addr); in cxgbe_vi_attach()
2717 if (vi->nnmrxq != 0) in cxgbe_vi_attach()
2718 cxgbe_nm_attach(vi); in cxgbe_vi_attach()
2721 sbuf_printf(sb, "%d txq, %d rxq (NIC)", vi->ntxq, vi->nrxq); in cxgbe_vi_attach()
2725 sbuf_printf(sb, "; %d txq (TOE)", vi->nofldtxq); in cxgbe_vi_attach()
2728 sbuf_printf(sb, "; %d txq (TOE/ETHOFLD)", vi->nofldtxq); in cxgbe_vi_attach()
2731 sbuf_printf(sb, "; %d txq (ETHOFLD)", vi->nofldtxq); in cxgbe_vi_attach()
2737 sbuf_printf(sb, ", %d rxq (TOE)", vi->nofldrxq); in cxgbe_vi_attach()
2742 vi->nnmtxq, vi->nnmrxq); in cxgbe_vi_attach()
2748 vi_sysctls(vi); in cxgbe_vi_attach()
2754 vi->pfil = pfil_head_register(&pa); in cxgbe_vi_attach()
2762 struct vi_info *vi; in cxgbe_attach() local
2767 cxgbe_vi_attach(dev, &pi->vi[0]); in cxgbe_attach()
2769 for_each_vi(pi, i, vi) { in cxgbe_attach()
2772 vi->dev = device_add_child(dev, sc->names->vi_ifnet_name, -1); in cxgbe_attach()
2773 if (vi->dev == NULL) { in cxgbe_attach()
2777 device_set_softc(vi->dev, vi); in cxgbe_attach()
2788 cxgbe_vi_detach(struct vi_info *vi) in cxgbe_vi_detach() argument
2790 if_t ifp = vi->ifp; in cxgbe_vi_detach()
2792 if (vi->pfil != NULL) { in cxgbe_vi_detach()
2793 pfil_head_unregister(vi->pfil); in cxgbe_vi_detach()
2794 vi->pfil = NULL; in cxgbe_vi_detach()
2802 cxgbe_nm_detach(vi); in cxgbe_vi_detach()
2804 cxgbe_uninit_synchronized(vi); in cxgbe_vi_detach()
2805 callout_drain(&vi->tick); in cxgbe_vi_detach()
2806 mtx_destroy(&vi->tick_mtx); in cxgbe_vi_detach()
2807 sysctl_ctx_free(&vi->ctx); in cxgbe_vi_detach()
2808 vi_full_uninit(vi); in cxgbe_vi_detach()
2810 if_free(vi->ifp); in cxgbe_vi_detach()
2811 vi->ifp = NULL; in cxgbe_vi_detach()
2828 begin_vi_detach(sc, &pi->vi[0]); in cxgbe_detach()
2833 cxgbe_vi_detach(&pi->vi[0]); in cxgbe_detach()
2835 end_vi_detach(sc, &pi->vi[0]); in cxgbe_detach()
2843 struct vi_info *vi = arg; in cxgbe_init() local
2844 struct adapter *sc = vi->adapter; in cxgbe_init()
2846 if (begin_synchronized_op(sc, vi, SLEEP_OK | INTR_OK, "t4init") != 0) in cxgbe_init()
2848 cxgbe_init_synchronized(vi); in cxgbe_init()
2856 struct vi_info *vi = if_getsoftc(ifp); in cxgbe_ioctl() local
2857 struct port_info *pi = vi->pi; in cxgbe_ioctl()
2868 rc = begin_synchronized_op(sc, vi, SLEEP_OK | INTR_OK, "t4mtu"); in cxgbe_ioctl()
2872 if (vi->flags & VI_INIT_DONE) { in cxgbe_ioctl()
2882 rc = begin_synchronized_op(sc, vi, SLEEP_OK | INTR_OK, "t4flg"); in cxgbe_ioctl()
2893 flags = vi->if_flags; in cxgbe_ioctl()
2900 rc = cxgbe_init_synchronized(vi); in cxgbe_ioctl()
2902 vi->if_flags = if_getflags(ifp); in cxgbe_ioctl()
2904 rc = cxgbe_uninit_synchronized(vi); in cxgbe_ioctl()
2911 rc = begin_synchronized_op(sc, vi, SLEEP_OK | INTR_OK, "t4multi"); in cxgbe_ioctl()
2920 rc = begin_synchronized_op(sc, vi, SLEEP_OK | INTR_OK, "t4cap"); in cxgbe_ioctl()
2984 for_each_rxq(vi, i, rxq) { in cxgbe_ioctl()
2996 rc = toe_capability(vi, enable); in cxgbe_ioctl()
3026 for_each_rxq(vi, i, rxq) { in cxgbe_ioctl()
3086 rc = begin_synchronized_op(sc, vi, SLEEP_OK | INTR_OK, "t4i2c"); in cxgbe_ioctl()
3110 struct vi_info *vi = if_getsoftc(ifp); in cxgbe_transmit() local
3111 struct port_info *pi = vi->pi; in cxgbe_transmit()
3129 rc = parse_pkt(&m, vi->flags & TX_USES_VM_WR); in cxgbe_transmit()
3143 sc = vi->adapter; in cxgbe_transmit()
3144 txq = &sc->sge.txq[vi->first_txq]; in cxgbe_transmit()
3146 txq += ((m->m_pkthdr.flowid % (vi->ntxq - vi->rsrv_noflowq)) + in cxgbe_transmit()
3147 vi->rsrv_noflowq); in cxgbe_transmit()
3160 struct vi_info *vi = if_getsoftc(ifp); in cxgbe_qflush() local
3165 if (vi->flags & VI_INIT_DONE) { in cxgbe_qflush()
3166 for_each_txq(vi, i, txq) { in cxgbe_qflush()
3185 struct vi_info *vi = if_getsoftc(ifp); in vi_get_counter() local
3186 struct fw_vi_stats_vf *s = &vi->stats; in vi_get_counter()
3188 mtx_lock(&vi->tick_mtx); in vi_get_counter()
3189 vi_refresh_stats(vi); in vi_get_counter()
3190 mtx_unlock(&vi->tick_mtx); in vi_get_counter()
3217 if (vi->flags & VI_INIT_DONE) { in vi_get_counter()
3221 for_each_txq(vi, i, txq) in vi_get_counter()
3237 struct vi_info *vi = if_getsoftc(ifp); in cxgbe_get_counter() local
3238 struct port_info *pi = vi->pi; in cxgbe_get_counter()
3241 mtx_lock(&vi->tick_mtx); in cxgbe_get_counter()
3242 cxgbe_refresh_stats(vi); in cxgbe_get_counter()
3243 mtx_unlock(&vi->tick_mtx); in cxgbe_get_counter()
3280 if (vi->flags & VI_INIT_DONE) { in cxgbe_get_counter()
3284 for_each_txq(vi, i, txq) in cxgbe_get_counter()
3313 struct vi_info *vi = if_getsoftc(ifp); in cxgbe_snd_tag_alloc() local
3315 if (is_t6(vi->pi->adapter)) in cxgbe_snd_tag_alloc()
3336 struct vi_info *vi = if_getsoftc(ifp); in cxgbe_media_change() local
3337 struct port_info *pi = vi->pi; in cxgbe_media_change()
3525 struct vi_info *vi = if_getsoftc(ifp); in cxgbe_media_status() local
3526 struct port_info *pi = vi->pi; in cxgbe_media_status()
3530 if (begin_synchronized_op(sc, vi , SLEEP_OK | INTR_OK, "t4med") != 0) in cxgbe_media_status()
3568 struct vi_info *vi = device_get_softc(dev); in vcxgbe_probe() local
3570 device_set_descf(dev, "port %d vi %td", vi->pi->port_id, in vcxgbe_probe()
3571 vi - vi->pi->vi); in vcxgbe_probe()
3577 alloc_extra_vi(struct adapter *sc, struct port_info *pi, struct vi_info *vi) in alloc_extra_vi() argument
3584 index = vi - pi->vi; in alloc_extra_vi()
3588 device_get_nameunit(vi->dev))); in alloc_extra_vi()
3591 vi->hw_addr, &vi->rss_size, &vi->vfvld, &vi->vin, func, 0); in alloc_extra_vi()
3593 CH_ERR(vi, "failed to allocate virtual interface %d" in alloc_extra_vi()
3597 vi->viid = rc; in alloc_extra_vi()
3599 if (vi->rss_size == 1) { in alloc_extra_vi()
3606 device_printf(vi->dev, "RSS table not available.\n"); in alloc_extra_vi()
3607 vi->rss_base = 0xffff; in alloc_extra_vi()
3614 V_FW_PARAMS_PARAM_YZ(vi->viid); in alloc_extra_vi()
3617 vi->rss_base = 0xffff; in alloc_extra_vi()
3619 MPASS((val >> 16) == vi->rss_size); in alloc_extra_vi()
3620 vi->rss_base = val & 0xffff; in alloc_extra_vi()
3629 struct vi_info *vi; in vcxgbe_attach() local
3634 vi = device_get_softc(dev); in vcxgbe_attach()
3635 pi = vi->pi; in vcxgbe_attach()
3638 rc = begin_synchronized_op(sc, vi, SLEEP_OK | INTR_OK, "t4via"); in vcxgbe_attach()
3641 rc = alloc_extra_vi(sc, pi, vi); in vcxgbe_attach()
3646 cxgbe_vi_attach(dev, vi); in vcxgbe_attach()
3654 struct vi_info *vi; in vcxgbe_detach() local
3657 vi = device_get_softc(dev); in vcxgbe_detach()
3658 sc = vi->adapter; in vcxgbe_detach()
3660 begin_vi_detach(sc, vi); in vcxgbe_detach()
3661 cxgbe_vi_detach(vi); in vcxgbe_detach()
3662 t4_free_vi(sc, sc->mbox, sc->pf, 0, vi->viid); in vcxgbe_detach()
3663 end_vi_detach(sc, vi); in vcxgbe_detach()
6160 struct vi_info *vi = if_getsoftc(ctx->ifp); in add_maddr() local
6161 struct port_info *pi = vi->pi; in add_maddr()
6172 ctx->rc = t4_alloc_mac_filt(sc, sc->mbox, vi->viid, ctx->del, in add_maddr()
6204 struct vi_info *vi = if_getsoftc(ifp); in update_mac_settings() local
6205 struct port_info *pi = vi->pi; in update_mac_settings()
6226 rc = -t4_set_rxmode(sc, sc->mbox, vi->viid, mtu, promisc, in update_mac_settings()
6239 rc = t4_change_mac(sc, sc->mbox, vi->viid, vi->xact_addr_filt, in update_mac_settings()
6240 ucaddr, true, &vi->smt_idx); in update_mac_settings()
6246 vi->xact_addr_filt = rc; in update_mac_settings()
6275 rc = t4_alloc_mac_filt(sc, sc->mbox, vi->viid, in update_mac_settings()
6296 rc = -t4_set_addr_hash(sc, sc->mbox, vi->viid, 0, ctx.hash, 0); in update_mac_settings()
6306 if (IS_MAIN_VI(vi) && sc->vxlan_refcount > 0 && in update_mac_settings()
6308 rc = t4_alloc_raw_mac_filt(sc, vi->viid, match_all_mac, in update_mac_settings()
6329 begin_synchronized_op(struct adapter *sc, struct vi_info *vi, int flags, in begin_synchronized_op() argument
6349 if (vi && IS_DETACHING(vi)) { in begin_synchronized_op()
6391 begin_vi_detach(struct adapter *sc, struct vi_info *vi) in begin_vi_detach() argument
6394 SET_DETACHING(vi); in begin_vi_detach()
6408 end_vi_detach(struct adapter *sc, struct vi_info *vi) in end_vi_detach() argument
6413 CLR_DETACHING(vi); in end_vi_detach()
6437 cxgbe_init_synchronized(struct vi_info *vi) in cxgbe_init_synchronized() argument
6439 struct port_info *pi = vi->pi; in cxgbe_init_synchronized()
6441 if_t ifp = vi->ifp; in cxgbe_init_synchronized()
6453 if (!(vi->flags & VI_INIT_DONE) && ((rc = vi_init(vi)) != 0)) in cxgbe_init_synchronized()
6468 rc = -t4_enable_vi(sc, sc->mbox, vi->viid, true, true); in cxgbe_init_synchronized()
6480 for_each_txq(vi, i, txq) { in cxgbe_init_synchronized()
6489 if (sc->traceq < 0 && IS_MAIN_VI(vi)) { in cxgbe_init_synchronized()
6490 sc->traceq = sc->sge.rxq[vi->first_rxq].iq.abs_id; in cxgbe_init_synchronized()
6504 mtx_lock(&vi->tick_mtx); in cxgbe_init_synchronized()
6505 if (vi->pi->nvi > 1 || sc->flags & IS_VF) in cxgbe_init_synchronized()
6506 callout_reset(&vi->tick, hz, vi_tick, vi); in cxgbe_init_synchronized()
6508 callout_reset(&vi->tick, hz, cxgbe_tick, vi); in cxgbe_init_synchronized()
6509 mtx_unlock(&vi->tick_mtx); in cxgbe_init_synchronized()
6512 cxgbe_uninit_synchronized(vi); in cxgbe_init_synchronized()
6521 cxgbe_uninit_synchronized(struct vi_info *vi) in cxgbe_uninit_synchronized() argument
6523 struct port_info *pi = vi->pi; in cxgbe_uninit_synchronized()
6525 if_t ifp = vi->ifp; in cxgbe_uninit_synchronized()
6531 if (!(vi->flags & VI_INIT_DONE)) { in cxgbe_uninit_synchronized()
6536 "if_drv_flags 0x%08x\n", vi->flags, if_getflags(ifp), in cxgbe_uninit_synchronized()
6549 rc = -t4_enable_vi(sc, sc->mbox, vi->viid, false, false); in cxgbe_uninit_synchronized()
6555 for_each_txq(vi, i, txq) { in cxgbe_uninit_synchronized()
6561 mtx_lock(&vi->tick_mtx); in cxgbe_uninit_synchronized()
6562 callout_stop(&vi->tick); in cxgbe_uninit_synchronized()
6563 mtx_unlock(&vi->tick_mtx); in cxgbe_uninit_synchronized()
6597 struct vi_info *vi; in t4_setup_intr_handlers() local
6644 for_each_vi(pi, v, vi) { in t4_setup_intr_handlers()
6645 vi->first_intr = rid - 1; in t4_setup_intr_handlers()
6647 if (vi->nnmrxq > 0) { in t4_setup_intr_handlers()
6648 int n = max(vi->nrxq, vi->nnmrxq); in t4_setup_intr_handlers()
6650 rxq = &sge->rxq[vi->first_rxq]; in t4_setup_intr_handlers()
6652 nm_rxq = &sge->nm_rxq[vi->first_nm_rxq]; in t4_setup_intr_handlers()
6657 if (q < vi->nrxq) in t4_setup_intr_handlers()
6660 if (q < vi->nnmrxq) in t4_setup_intr_handlers()
6685 if (q < vi->nrxq) { in t4_setup_intr_handlers()
6692 vi->nintr++; in t4_setup_intr_handlers()
6695 for_each_rxq(vi, q, rxq) { in t4_setup_intr_handlers()
6708 vi->nintr++; in t4_setup_intr_handlers()
6712 for_each_ofld_rxq(vi, q, ofld_rxq) { in t4_setup_intr_handlers()
6720 vi->nintr++; in t4_setup_intr_handlers()
6894 vi_full_init(struct vi_info *vi) in vi_full_init() argument
6896 struct adapter *sc = vi->adapter; in vi_full_init()
6910 rc = t4_setup_vi_queues(vi); in vi_full_init()
6917 if (vi->nrxq > vi->rss_size) { in vi_full_init()
6918 CH_ALERT(vi, "nrxq (%d) > hw RSS table size (%d); " in vi_full_init()
6919 "some queues will never receive traffic.\n", vi->nrxq, in vi_full_init()
6920 vi->rss_size); in vi_full_init()
6921 } else if (vi->rss_size % vi->nrxq) { in vi_full_init()
6922 CH_ALERT(vi, "nrxq (%d), hw RSS table size (%d); " in vi_full_init()
6923 "expect uneven traffic distribution.\n", vi->nrxq, in vi_full_init()
6924 vi->rss_size); in vi_full_init()
6927 if (vi->nrxq != nbuckets) { in vi_full_init()
6928 CH_ALERT(vi, "nrxq (%d) != kernel RSS buckets (%d);" in vi_full_init()
6929 "performance will be impacted.\n", vi->nrxq, nbuckets); in vi_full_init()
6932 if (vi->rss == NULL) in vi_full_init()
6933 vi->rss = malloc(vi->rss_size * sizeof (*vi->rss), M_CXGBE, in vi_full_init()
6935 for (i = 0; i < vi->rss_size;) { in vi_full_init()
6938 j %= vi->nrxq; in vi_full_init()
6939 rxq = &sc->sge.rxq[vi->first_rxq + j]; in vi_full_init()
6940 vi->rss[i++] = rxq->iq.abs_id; in vi_full_init()
6942 for_each_rxq(vi, j, rxq) { in vi_full_init()
6943 vi->rss[i++] = rxq->iq.abs_id; in vi_full_init()
6944 if (i == vi->rss_size) in vi_full_init()
6950 rc = -t4_config_rss_range(sc, sc->mbox, vi->viid, 0, vi->rss_size, in vi_full_init()
6951 vi->rss, vi->rss_size); in vi_full_init()
6953 CH_ERR(vi, "rss_config failed: %d\n", rc); in vi_full_init()
6958 vi->hashen = hashconfig_to_hashen(hashconfig); in vi_full_init()
6965 extra = hashen_to_hashconfig(vi->hashen) ^ hashconfig; in vi_full_init()
6977 CH_ALERT(vi, in vi_full_init()
6982 CH_ALERT(vi, "IPv4 2-tuple hashing forced on.\n"); in vi_full_init()
6984 CH_ALERT(vi, "TCP/IPv4 4-tuple hashing forced on.\n"); in vi_full_init()
6986 CH_ALERT(vi, "IPv6 2-tuple hashing forced on.\n"); in vi_full_init()
6988 CH_ALERT(vi, "TCP/IPv6 4-tuple hashing forced on.\n"); in vi_full_init()
6990 CH_ALERT(vi, "UDP/IPv4 4-tuple hashing forced on.\n"); in vi_full_init()
6992 CH_ALERT(vi, "UDP/IPv6 4-tuple hashing forced on.\n"); in vi_full_init()
6994 vi->hashen = F_FW_RSS_VI_CONFIG_CMD_IP6FOURTUPEN | in vi_full_init()
6999 rc = -t4_config_vi_rss(sc, sc->mbox, vi->viid, vi->hashen, vi->rss[0], in vi_full_init()
7002 CH_ERR(vi, "rss hash/defaultq config failed: %d\n", rc); in vi_full_init()
7010 vi_init(struct vi_info *vi) in vi_init() argument
7014 ASSERT_SYNCHRONIZED_OP(vi->adapter); in vi_init()
7015 KASSERT((vi->flags & VI_INIT_DONE) == 0, in vi_init()
7018 rc = vi_full_init(vi); in vi_init()
7020 vi_full_uninit(vi); in vi_init()
7022 vi->flags |= VI_INIT_DONE; in vi_init()
7031 vi_full_uninit(struct vi_info *vi) in vi_full_uninit() argument
7034 if (vi->flags & VI_INIT_DONE) { in vi_full_uninit()
7035 quiesce_vi(vi); in vi_full_uninit()
7036 free(vi->rss, M_CXGBE); in vi_full_uninit()
7037 free(vi->nm_rss, M_CXGBE); in vi_full_uninit()
7040 t4_teardown_vi_queues(vi); in vi_full_uninit()
7041 vi->flags &= ~VI_INIT_DONE; in vi_full_uninit()
7146 quiesce_vi(struct vi_info *vi) in quiesce_vi() argument
7149 struct adapter *sc = vi->adapter; in quiesce_vi()
7159 if (!(vi->flags & VI_INIT_DONE)) in quiesce_vi()
7162 for_each_txq(vi, i, txq) { in quiesce_vi()
7167 for_each_ofld_txq(vi, i, ofld_txq) { in quiesce_vi()
7172 for_each_rxq(vi, i, rxq) { in quiesce_vi()
7177 for_each_ofld_rxq(vi, i, ofld_rxq) { in quiesce_vi()
7312 vi_refresh_stats(struct vi_info *vi) in vi_refresh_stats() argument
7317 mtx_assert(&vi->tick_mtx, MA_OWNED); in vi_refresh_stats()
7319 if (vi->flags & VI_SKIP_STATS) in vi_refresh_stats()
7324 if (timevalcmp(&tv, &vi->last_refreshed, <)) in vi_refresh_stats()
7327 t4_get_vi_stats(vi->adapter, vi->vin, &vi->stats); in vi_refresh_stats()
7328 getmicrotime(&vi->last_refreshed); in vi_refresh_stats()
7332 cxgbe_refresh_stats(struct vi_info *vi) in cxgbe_refresh_stats() argument
7340 mtx_assert(&vi->tick_mtx, MA_OWNED); in cxgbe_refresh_stats()
7342 if (vi->flags & VI_SKIP_STATS) in cxgbe_refresh_stats()
7347 if (timevalcmp(&tv, &vi->last_refreshed, <)) in cxgbe_refresh_stats()
7350 pi = vi->pi; in cxgbe_refresh_stats()
7351 sc = vi->adapter; in cxgbe_refresh_stats()
7365 getmicrotime(&vi->last_refreshed); in cxgbe_refresh_stats()
7371 struct vi_info *vi = arg; in cxgbe_tick() local
7373 MPASS(IS_MAIN_VI(vi)); in cxgbe_tick()
7374 mtx_assert(&vi->tick_mtx, MA_OWNED); in cxgbe_tick()
7376 cxgbe_refresh_stats(vi); in cxgbe_tick()
7377 callout_schedule(&vi->tick, hz); in cxgbe_tick()
7383 struct vi_info *vi = arg; in vi_tick() local
7385 mtx_assert(&vi->tick_mtx, MA_OWNED); in vi_tick()
7387 vi_refresh_stats(vi); in vi_tick()
7388 callout_schedule(&vi->tick, hz); in vi_tick()
7921 vi_sysctls(struct vi_info *vi) in vi_sysctls() argument
7923 struct sysctl_ctx_list *ctx = &vi->ctx; in vi_sysctls()
7930 oid = device_get_sysctl_tree(vi->dev); in vi_sysctls()
7934 vi->viid, "VI identifer"); in vi_sysctls()
7936 &vi->nrxq, 0, "# of rx queues"); in vi_sysctls()
7938 &vi->ntxq, 0, "# of tx queues"); in vi_sysctls()
7940 &vi->first_rxq, 0, "index of first rx queue"); in vi_sysctls()
7942 &vi->first_txq, 0, "index of first tx queue"); in vi_sysctls()
7944 vi->rss_base, "start of RSS indirection table"); in vi_sysctls()
7946 vi->rss_size, "size of RSS indirection table"); in vi_sysctls()
7948 if (IS_MAIN_VI(vi)) { in vi_sysctls()
7950 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0, in vi_sysctls()
7955 if (vi->adapter->flags & IS_VF) { in vi_sysctls()
7956 MPASS(vi->flags & TX_USES_VM_WR); in vi_sysctls()
7961 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0, in vi_sysctls()
7966 if (vi->nofldrxq != 0) { in vi_sysctls()
7968 &vi->nofldrxq, 0, in vi_sysctls()
7971 CTLFLAG_RD, &vi->first_ofld_rxq, 0, in vi_sysctls()
7974 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0, in vi_sysctls()
7978 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0, in vi_sysctls()
7984 if (vi->nofldtxq != 0) { in vi_sysctls()
7986 &vi->nofldtxq, 0, in vi_sysctls()
7989 CTLFLAG_RD, &vi->first_ofld_txq, 0, in vi_sysctls()
7994 if (vi->nnmrxq != 0) { in vi_sysctls()
7996 &vi->nnmrxq, 0, "# of netmap rx queues"); in vi_sysctls()
7998 &vi->nnmtxq, 0, "# of netmap tx queues"); in vi_sysctls()
8000 CTLFLAG_RD, &vi->first_nm_rxq, 0, in vi_sysctls()
8003 CTLFLAG_RD, &vi->first_nm_txq, 0, in vi_sysctls()
8009 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0, in vi_sysctls()
8012 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0, in vi_sysctls()
8016 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0, in vi_sysctls()
8019 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0, in vi_sysctls()
8291 rc = begin_synchronized_op(sc, &pi->vi[0], SLEEP_OK | INTR_OK, "t4btt"); in sysctl_btphy()
8314 struct vi_info *vi = arg1; in sysctl_noflowq() local
8317 val = vi->rsrv_noflowq; in sysctl_noflowq()
8322 if ((val >= 1) && (vi->ntxq > 1)) in sysctl_noflowq()
8323 vi->rsrv_noflowq = 1; in sysctl_noflowq()
8325 vi->rsrv_noflowq = 0; in sysctl_noflowq()
8333 struct vi_info *vi = arg1; in sysctl_tx_vm_wr() local
8334 struct adapter *sc = vi->adapter; in sysctl_tx_vm_wr()
8339 val = vi->flags & TX_USES_VM_WR ? 1 : 0; in sysctl_tx_vm_wr()
8347 rc = begin_synchronized_op(sc, vi, HOLD_LOCK | SLEEP_OK | INTR_OK, in sysctl_tx_vm_wr()
8353 else if (if_getdrvflags(vi->ifp) & IFF_DRV_RUNNING) { in sysctl_tx_vm_wr()
8361 struct port_info *pi = vi->pi; in sysctl_tx_vm_wr()
8367 vi->flags |= TX_USES_VM_WR; in sysctl_tx_vm_wr()
8368 if_sethwtsomaxsegcount(vi->ifp, TX_SGL_SEGS_VM_TSO); in sysctl_tx_vm_wr()
8374 vi->flags &= ~TX_USES_VM_WR; in sysctl_tx_vm_wr()
8375 if_sethwtsomaxsegcount(vi->ifp, TX_SGL_SEGS_TSO); in sysctl_tx_vm_wr()
8378 V_TXPKT_VF(vi->vin) | V_TXPKT_VF_VLD(vi->vfvld)); in sysctl_tx_vm_wr()
8380 for_each_txq(vi, i, txq) { in sysctl_tx_vm_wr()
8392 struct vi_info *vi = arg1; in sysctl_holdoff_tmr_idx() local
8393 struct adapter *sc = vi->adapter; in sysctl_holdoff_tmr_idx()
8398 idx = vi->tmr_idx; in sysctl_holdoff_tmr_idx()
8407 rc = begin_synchronized_op(sc, vi, HOLD_LOCK | SLEEP_OK | INTR_OK, in sysctl_holdoff_tmr_idx()
8412 v = V_QINTR_TIMER_IDX(idx) | V_QINTR_CNT_EN(vi->pktc_idx != -1); in sysctl_holdoff_tmr_idx()
8413 for_each_rxq(vi, i, rxq) { in sysctl_holdoff_tmr_idx()
8420 vi->tmr_idx = idx; in sysctl_holdoff_tmr_idx()
8429 struct vi_info *vi = arg1; in sysctl_holdoff_pktc_idx() local
8430 struct adapter *sc = vi->adapter; in sysctl_holdoff_pktc_idx()
8433 idx = vi->pktc_idx; in sysctl_holdoff_pktc_idx()
8442 rc = begin_synchronized_op(sc, vi, HOLD_LOCK | SLEEP_OK | INTR_OK, in sysctl_holdoff_pktc_idx()
8447 if (vi->flags & VI_INIT_DONE) in sysctl_holdoff_pktc_idx()
8450 vi->pktc_idx = idx; in sysctl_holdoff_pktc_idx()
8459 struct vi_info *vi = arg1; in sysctl_qsize_rxq() local
8460 struct adapter *sc = vi->adapter; in sysctl_qsize_rxq()
8463 qsize = vi->qsize_rxq; in sysctl_qsize_rxq()
8472 rc = begin_synchronized_op(sc, vi, HOLD_LOCK | SLEEP_OK | INTR_OK, in sysctl_qsize_rxq()
8477 if (vi->flags & VI_INIT_DONE) in sysctl_qsize_rxq()
8480 vi->qsize_rxq = qsize; in sysctl_qsize_rxq()
8489 struct vi_info *vi = arg1; in sysctl_qsize_txq() local
8490 struct adapter *sc = vi->adapter; in sysctl_qsize_txq()
8493 qsize = vi->qsize_txq; in sysctl_qsize_txq()
8502 rc = begin_synchronized_op(sc, vi, HOLD_LOCK | SLEEP_OK | INTR_OK, in sysctl_qsize_txq()
8507 if (vi->flags & VI_INIT_DONE) in sysctl_qsize_txq()
8510 vi->qsize_txq = qsize; in sysctl_qsize_txq()
8565 rc = begin_synchronized_op(sc, &pi->vi[0], SLEEP_OK | INTR_OK, in sysctl_pause_settings()
8653 rc = begin_synchronized_op(sc, &pi->vi[0], SLEEP_OK | INTR_OK, in sysctl_requested_fec()
8770 rc = begin_synchronized_op(sc, &pi->vi[0], SLEEP_OK | INTR_OK, in sysctl_autoneg()
8810 rc = begin_synchronized_op(sc, &pi->vi[0], SLEEP_OK | INTR_OK, "t4ff"); in sysctl_force_fec()
11369 struct vi_info *vi; in sysctl_tls() local
11387 for_each_vi(sc->port[i], j, vi) { in sysctl_tls()
11388 if (vi->flags & VI_INIT_DONE) in sysctl_tls()
11389 t4_update_fl_bufsize(vi->ifp); in sysctl_tls()
11566 struct vi_info *vi = arg1; in sysctl_holdoff_tmr_idx_ofld() local
11567 struct adapter *sc = vi->adapter; in sysctl_holdoff_tmr_idx_ofld()
11572 idx = vi->ofld_tmr_idx; in sysctl_holdoff_tmr_idx_ofld()
11581 rc = begin_synchronized_op(sc, vi, HOLD_LOCK | SLEEP_OK | INTR_OK, in sysctl_holdoff_tmr_idx_ofld()
11586 v = V_QINTR_TIMER_IDX(idx) | V_QINTR_CNT_EN(vi->ofld_pktc_idx != -1); in sysctl_holdoff_tmr_idx_ofld()
11587 for_each_ofld_rxq(vi, i, ofld_rxq) { in sysctl_holdoff_tmr_idx_ofld()
11594 vi->ofld_tmr_idx = idx; in sysctl_holdoff_tmr_idx_ofld()
11603 struct vi_info *vi = arg1; in sysctl_holdoff_pktc_idx_ofld() local
11604 struct adapter *sc = vi->adapter; in sysctl_holdoff_pktc_idx_ofld()
11607 idx = vi->ofld_pktc_idx; in sysctl_holdoff_pktc_idx_ofld()
11616 rc = begin_synchronized_op(sc, vi, HOLD_LOCK | SLEEP_OK | INTR_OK, in sysctl_holdoff_pktc_idx_ofld()
11621 if (vi->flags & VI_INIT_DONE) in sysctl_holdoff_pktc_idx_ofld()
11624 vi->ofld_pktc_idx = idx; in sysctl_holdoff_pktc_idx_ofld()
12051 struct vi_info *vi; in clear_stats() local
12078 for_each_vi(pi, v, vi) { in clear_stats()
12079 if (vi->flags & VI_INIT_DONE) in clear_stats()
12080 t4_clr_vi_stats(sc, vi->vin); in clear_stats()
12099 for_each_vi(pi, v, vi) { in clear_stats()
12100 if (vi->flags & VI_INIT_DONE) { in clear_stats()
12102 for_each_rxq(vi, i, rxq) { in clear_stats()
12116 for_each_txq(vi, i, txq) { in clear_stats()
12147 for_each_ofld_txq(vi, i, ofld_txq) { in clear_stats()
12160 for_each_ofld_rxq(vi, i, ofld_rxq) { in clear_stats()
12183 if (IS_MAIN_VI(vi)) { in clear_stats()
12261 struct vi_info *vi; in t4_os_portmod_changed() local
12270 vi = &pi->vi[0]; in t4_os_portmod_changed()
12271 if (begin_synchronized_op(sc, vi, HOLD_LOCK, "t4mod") == 0) { in t4_os_portmod_changed()
12282 ifp = vi->ifp; in t4_os_portmod_changed()
12301 struct vi_info *vi; in t4_os_link_changed() local
12329 for_each_vi(pi, v, vi) { in t4_os_link_changed()
12330 ifp = vi->ifp; in t4_os_link_changed()
12331 if (ifp == NULL || IS_DETACHING(vi)) in t4_os_link_changed()
12509 toe_capability(struct vi_info *vi, bool enable) in toe_capability() argument
12512 struct port_info *pi = vi->pi; in toe_capability()
12556 if ((if_getcapenable(vi->ifp) & IFCAP_TOE) != 0) { in toe_capability()
12566 if (!(vi->flags & VI_INIT_DONE) && ((rc = vi_init(vi)) != 0)) in toe_capability()
12568 if (!(pi->vi[0].flags & VI_INIT_DONE) && in toe_capability()
12569 ((rc = vi_init(&pi->vi[0])) != 0)) in toe_capability()
12603 if ((if_getcapenable(vi->ifp) & IFCAP_TOE) == 0) { in toe_capability()
13191 rc = t4_alloc_raw_mac_filt(sc, pi->vi[0].viid, match_all_mac, in enable_vxlan_rx()
13196 CH_ERR(&pi->vi[0], in enable_vxlan_rx()