Lines Matching refs:vi

1392 		pi->vi = malloc(sizeof(struct vi_info) * t4_num_vis, M_CXGBE,  in t4_attach()
1403 free(pi->vi, M_CXGBE); in t4_attach()
1453 pi->vi[0].dev = pi->dev; in t4_attach()
1568 struct vi_info *vi; in t4_attach() local
1574 for_each_vi(pi, j, vi) { in t4_attach()
1575 vi->pi = pi; in t4_attach()
1576 vi->adapter = sc; in t4_attach()
1577 vi->first_intr = -1; in t4_attach()
1578 vi->qsize_rxq = t4_qsize_rxq; in t4_attach()
1579 vi->qsize_txq = t4_qsize_txq; in t4_attach()
1581 vi->first_rxq = rqidx; in t4_attach()
1582 vi->first_txq = tqidx; in t4_attach()
1583 vi->tmr_idx = t4_tmr_idx; in t4_attach()
1584 vi->pktc_idx = t4_pktc_idx; in t4_attach()
1585 vi->nrxq = j == 0 ? iaq.nrxq : iaq.nrxq_vi; in t4_attach()
1586 vi->ntxq = j == 0 ? iaq.ntxq : iaq.ntxq_vi; in t4_attach()
1588 rqidx += vi->nrxq; in t4_attach()
1589 tqidx += vi->ntxq; in t4_attach()
1591 if (j == 0 && vi->ntxq > 1) in t4_attach()
1592 vi->rsrv_noflowq = t4_rsrv_noflowq ? 1 : 0; in t4_attach()
1594 vi->rsrv_noflowq = 0; in t4_attach()
1597 vi->first_ofld_txq = ofld_tqidx; in t4_attach()
1598 vi->nofldtxq = j == 0 ? iaq.nofldtxq : iaq.nofldtxq_vi; in t4_attach()
1599 ofld_tqidx += vi->nofldtxq; in t4_attach()
1602 vi->ofld_tmr_idx = t4_tmr_idx_ofld; in t4_attach()
1603 vi->ofld_pktc_idx = t4_pktc_idx_ofld; in t4_attach()
1604 vi->first_ofld_rxq = ofld_rqidx; in t4_attach()
1605 vi->nofldrxq = j == 0 ? iaq.nofldrxq : iaq.nofldrxq_vi; in t4_attach()
1607 ofld_rqidx += vi->nofldrxq; in t4_attach()
1610 vi->first_nm_rxq = nm_rqidx; in t4_attach()
1611 vi->first_nm_txq = nm_tqidx; in t4_attach()
1613 vi->nnmrxq = iaq.nnmrxq; in t4_attach()
1614 vi->nnmtxq = iaq.nnmtxq; in t4_attach()
1616 vi->nnmrxq = iaq.nnmrxq_vi; in t4_attach()
1617 vi->nnmtxq = iaq.nnmtxq_vi; in t4_attach()
1619 nm_rqidx += vi->nnmrxq; in t4_attach()
1620 nm_tqidx += vi->nnmtxq; in t4_attach()
1811 t4_free_vi(sc, sc->mbox, sc->pf, 0, pi->vi[0].viid); in t4_detach_common()
1814 free(pi->vi, M_CXGBE); in t4_detach_common()
2012 struct vi_info *vi; in stop_lld() local
2045 for_each_vi(pi, j, vi) { in stop_lld()
2046 vi->xact_addr_filt = -1; in stop_lld()
2047 mtx_lock(&vi->tick_mtx); in stop_lld()
2048 vi->flags |= VI_SKIP_STATS; in stop_lld()
2049 mtx_unlock(&vi->tick_mtx); in stop_lld()
2050 if (!(vi->flags & VI_INIT_DONE)) in stop_lld()
2053 ifp = vi->ifp; in stop_lld()
2055 mtx_lock(&vi->tick_mtx); in stop_lld()
2056 callout_stop(&vi->tick); in stop_lld()
2057 mtx_unlock(&vi->tick_mtx); in stop_lld()
2058 callout_drain(&vi->tick); in stop_lld()
2064 for_each_txq(vi, k, txq) { in stop_lld()
2070 for_each_ofld_txq(vi, k, ofld_txq) { in stop_lld()
2076 for_each_rxq(vi, k, rxq) { in stop_lld()
2080 for_each_ofld_rxq(vi, k, ofld_rxq) { in stop_lld()
2085 quiesce_vi(vi); in stop_lld()
2310 struct vi_info *vi; in restart_lld() local
2360 MPASS(pi->vi != NULL); in restart_lld()
2361 MPASS(pi->vi[0].dev == pi->dev); in restart_lld()
2375 for_each_vi(pi, j, vi) { in restart_lld()
2376 if (IS_MAIN_VI(vi)) in restart_lld()
2378 rc = alloc_extra_vi(sc, pi, vi); in restart_lld()
2380 CH_ERR(vi, in restart_lld()
2406 for_each_vi(pi, j, vi) { in restart_lld()
2407 mtx_lock(&vi->tick_mtx); in restart_lld()
2408 vi->flags &= ~VI_SKIP_STATS; in restart_lld()
2409 mtx_unlock(&vi->tick_mtx); in restart_lld()
2410 if (!(vi->flags & VI_INIT_DONE)) in restart_lld()
2412 rc = vi_full_init(vi); in restart_lld()
2414 CH_ERR(vi, "failed to re-initialize " in restart_lld()
2418 if (sc->traceq < 0 && IS_MAIN_VI(vi)) { in restart_lld()
2419 sc->traceq = sc->sge.rxq[vi->first_rxq].iq.abs_id; in restart_lld()
2428 ifp = vi->ifp; in restart_lld()
2440 CH_ERR(vi, "failed to re-configure MAC: %d\n", rc); in restart_lld()
2443 rc = -t4_enable_vi(sc, sc->mbox, vi->viid, true, in restart_lld()
2446 CH_ERR(vi, "failed to re-enable VI: %d\n", rc); in restart_lld()
2449 for_each_txq(vi, k, txq) { in restart_lld()
2454 mtx_lock(&vi->tick_mtx); in restart_lld()
2455 callout_schedule(&vi->tick, hz); in restart_lld()
2456 mtx_unlock(&vi->tick_mtx); in restart_lld()
2473 for_each_vi(pi, j, vi) { in restart_lld()
2474 if (!(vi->flags & VI_INIT_DONE)) in restart_lld()
2476 ifp = vi->ifp; in restart_lld()
2481 CH_ERR(vi, "failed to re-configure MCAST MACs: %d\n", rc); in restart_lld()
2708 cxgbe_vi_attach(device_t dev, struct vi_info *vi) in cxgbe_vi_attach() argument
2712 struct sysctl_ctx_list *ctx = &vi->ctx; in cxgbe_vi_attach()
2715 struct adapter *sc = vi->adapter; in cxgbe_vi_attach()
2718 children = SYSCTL_CHILDREN(device_get_sysctl_tree(vi->dev)); in cxgbe_vi_attach()
2719 vi->rxq_oid = SYSCTL_ADD_NODE(ctx, children, OID_AUTO, "rxq", in cxgbe_vi_attach()
2721 vi->txq_oid = SYSCTL_ADD_NODE(ctx, children, OID_AUTO, "txq", in cxgbe_vi_attach()
2724 vi->nm_rxq_oid = SYSCTL_ADD_NODE(ctx, children, OID_AUTO, "nm_rxq", in cxgbe_vi_attach()
2726 vi->nm_txq_oid = SYSCTL_ADD_NODE(ctx, children, OID_AUTO, "nm_txq", in cxgbe_vi_attach()
2730 vi->ofld_rxq_oid = SYSCTL_ADD_NODE(ctx, children, OID_AUTO, "ofld_rxq", in cxgbe_vi_attach()
2734 vi->ofld_txq_oid = SYSCTL_ADD_NODE(ctx, children, OID_AUTO, "ofld_txq", in cxgbe_vi_attach()
2738 vi->xact_addr_filt = -1; in cxgbe_vi_attach()
2739 mtx_init(&vi->tick_mtx, "vi tick", NULL, MTX_DEF); in cxgbe_vi_attach()
2740 callout_init_mtx(&vi->tick, &vi->tick_mtx, 0); in cxgbe_vi_attach()
2742 vi->flags |= TX_USES_VM_WR; in cxgbe_vi_attach()
2746 vi->ifp = ifp; in cxgbe_vi_attach()
2747 if_setsoftc(ifp, vi); in cxgbe_vi_attach()
2756 if (vi->pi->nvi > 1 || sc->flags & IS_VF) in cxgbe_vi_attach()
2780 if (vi->nofldrxq != 0) in cxgbe_vi_attach()
2784 if (is_ethoffload(sc) && vi->nofldtxq != 0) { in cxgbe_vi_attach()
2791 if (vi->flags & TX_USES_VM_WR) in cxgbe_vi_attach()
2796 if (is_ethoffload(sc) && vi->nofldtxq != 0) in cxgbe_vi_attach()
2808 ether_ifattach(ifp, vi->hw_addr); in cxgbe_vi_attach()
2810 if (vi->nnmrxq != 0) in cxgbe_vi_attach()
2811 cxgbe_nm_attach(vi); in cxgbe_vi_attach()
2814 sbuf_printf(sb, "%d txq, %d rxq (NIC)", vi->ntxq, vi->nrxq); in cxgbe_vi_attach()
2818 sbuf_printf(sb, "; %d txq (TOE)", vi->nofldtxq); in cxgbe_vi_attach()
2821 sbuf_printf(sb, "; %d txq (TOE/ETHOFLD)", vi->nofldtxq); in cxgbe_vi_attach()
2824 sbuf_printf(sb, "; %d txq (ETHOFLD)", vi->nofldtxq); in cxgbe_vi_attach()
2830 sbuf_printf(sb, ", %d rxq (TOE)", vi->nofldrxq); in cxgbe_vi_attach()
2835 vi->nnmtxq, vi->nnmrxq); in cxgbe_vi_attach()
2841 vi_sysctls(vi); in cxgbe_vi_attach()
2847 vi->pfil = pfil_head_register(&pa); in cxgbe_vi_attach()
2855 struct vi_info *vi; in cxgbe_attach() local
2860 cxgbe_vi_attach(dev, &pi->vi[0]); in cxgbe_attach()
2862 for_each_vi(pi, i, vi) { in cxgbe_attach()
2865 vi->dev = device_add_child(dev, sc->names->vi_ifnet_name, DEVICE_UNIT_ANY); in cxgbe_attach()
2866 if (vi->dev == NULL) { in cxgbe_attach()
2870 device_set_softc(vi->dev, vi); in cxgbe_attach()
2881 cxgbe_vi_detach(struct vi_info *vi) in cxgbe_vi_detach() argument
2883 if_t ifp = vi->ifp; in cxgbe_vi_detach()
2885 if (vi->pfil != NULL) { in cxgbe_vi_detach()
2886 pfil_head_unregister(vi->pfil); in cxgbe_vi_detach()
2887 vi->pfil = NULL; in cxgbe_vi_detach()
2895 cxgbe_nm_detach(vi); in cxgbe_vi_detach()
2897 cxgbe_uninit_synchronized(vi); in cxgbe_vi_detach()
2898 callout_drain(&vi->tick); in cxgbe_vi_detach()
2899 mtx_destroy(&vi->tick_mtx); in cxgbe_vi_detach()
2900 sysctl_ctx_free(&vi->ctx); in cxgbe_vi_detach()
2901 vi_full_uninit(vi); in cxgbe_vi_detach()
2903 if_free(vi->ifp); in cxgbe_vi_detach()
2904 vi->ifp = NULL; in cxgbe_vi_detach()
2920 begin_vi_detach(sc, &pi->vi[0]); in cxgbe_detach()
2925 cxgbe_vi_detach(&pi->vi[0]); in cxgbe_detach()
2927 end_vi_detach(sc, &pi->vi[0]); in cxgbe_detach()
2935 struct vi_info *vi = arg; in cxgbe_init() local
2936 struct adapter *sc = vi->adapter; in cxgbe_init()
2938 if (begin_synchronized_op(sc, vi, SLEEP_OK | INTR_OK, "t4init") != 0) in cxgbe_init()
2940 cxgbe_init_synchronized(vi); in cxgbe_init()
2948 struct vi_info *vi = if_getsoftc(ifp); in cxgbe_ioctl() local
2949 struct port_info *pi = vi->pi; in cxgbe_ioctl()
2960 rc = begin_synchronized_op(sc, vi, SLEEP_OK | INTR_OK, "t4mtu"); in cxgbe_ioctl()
2964 if (vi->flags & VI_INIT_DONE) { in cxgbe_ioctl()
2974 rc = begin_synchronized_op(sc, vi, SLEEP_OK | INTR_OK, "t4flg"); in cxgbe_ioctl()
2985 flags = vi->if_flags; in cxgbe_ioctl()
2992 rc = cxgbe_init_synchronized(vi); in cxgbe_ioctl()
2994 vi->if_flags = if_getflags(ifp); in cxgbe_ioctl()
2996 rc = cxgbe_uninit_synchronized(vi); in cxgbe_ioctl()
3003 rc = begin_synchronized_op(sc, vi, SLEEP_OK | INTR_OK, "t4multi"); in cxgbe_ioctl()
3012 rc = begin_synchronized_op(sc, vi, SLEEP_OK | INTR_OK, "t4cap"); in cxgbe_ioctl()
3076 for_each_rxq(vi, i, rxq) { in cxgbe_ioctl()
3088 rc = toe_capability(vi, enable); in cxgbe_ioctl()
3118 for_each_rxq(vi, i, rxq) { in cxgbe_ioctl()
3178 rc = begin_synchronized_op(sc, vi, SLEEP_OK | INTR_OK, "t4i2c"); in cxgbe_ioctl()
3202 struct vi_info *vi = if_getsoftc(ifp); in cxgbe_transmit() local
3203 struct port_info *pi = vi->pi; in cxgbe_transmit()
3221 rc = parse_pkt(&m, vi->flags & TX_USES_VM_WR); in cxgbe_transmit()
3235 sc = vi->adapter; in cxgbe_transmit()
3236 txq = &sc->sge.txq[vi->first_txq]; in cxgbe_transmit()
3238 txq += ((m->m_pkthdr.flowid % (vi->ntxq - vi->rsrv_noflowq)) + in cxgbe_transmit()
3239 vi->rsrv_noflowq); in cxgbe_transmit()
3252 struct vi_info *vi = if_getsoftc(ifp); in cxgbe_qflush() local
3257 if (vi->flags & VI_INIT_DONE) { in cxgbe_qflush()
3258 for_each_txq(vi, i, txq) { in cxgbe_qflush()
3277 struct vi_info *vi = if_getsoftc(ifp); in vi_get_counter() local
3278 struct fw_vi_stats_vf *s = &vi->stats; in vi_get_counter()
3280 mtx_lock(&vi->tick_mtx); in vi_get_counter()
3281 vi_refresh_stats(vi); in vi_get_counter()
3282 mtx_unlock(&vi->tick_mtx); in vi_get_counter()
3309 if (vi->flags & VI_INIT_DONE) { in vi_get_counter()
3313 for_each_txq(vi, i, txq) in vi_get_counter()
3329 struct vi_info *vi = if_getsoftc(ifp); in cxgbe_get_counter() local
3330 struct port_info *pi = vi->pi; in cxgbe_get_counter()
3333 mtx_lock(&vi->tick_mtx); in cxgbe_get_counter()
3334 cxgbe_refresh_stats(vi); in cxgbe_get_counter()
3335 mtx_unlock(&vi->tick_mtx); in cxgbe_get_counter()
3372 if (vi->flags & VI_INIT_DONE) { in cxgbe_get_counter()
3376 for_each_txq(vi, i, txq) in cxgbe_get_counter()
3405 struct vi_info *vi = if_getsoftc(ifp); in cxgbe_snd_tag_alloc() local
3407 if (is_t6(vi->pi->adapter)) in cxgbe_snd_tag_alloc()
3428 struct vi_info *vi = if_getsoftc(ifp); in cxgbe_media_change() local
3429 struct port_info *pi = vi->pi; in cxgbe_media_change()
3622 struct vi_info *vi = if_getsoftc(ifp); in cxgbe_media_status() local
3623 struct port_info *pi = vi->pi; in cxgbe_media_status()
3627 if (begin_synchronized_op(sc, vi , SLEEP_OK | INTR_OK, "t4med") != 0) in cxgbe_media_status()
3665 struct vi_info *vi = device_get_softc(dev); in vcxgbe_probe() local
3667 device_set_descf(dev, "port %d vi %td", vi->pi->port_id, in vcxgbe_probe()
3668 vi - vi->pi->vi); in vcxgbe_probe()
3674 alloc_extra_vi(struct adapter *sc, struct port_info *pi, struct vi_info *vi) in alloc_extra_vi() argument
3681 index = vi - pi->vi; in alloc_extra_vi()
3685 device_get_nameunit(vi->dev))); in alloc_extra_vi()
3688 vi->hw_addr, &vi->rss_size, &vi->vfvld, &vi->vin, func, 0); in alloc_extra_vi()
3690 CH_ERR(vi, "failed to allocate virtual interface %d" in alloc_extra_vi()
3694 vi->viid = rc; in alloc_extra_vi()
3696 if (vi->rss_size == 1) { in alloc_extra_vi()
3703 device_printf(vi->dev, "RSS table not available.\n"); in alloc_extra_vi()
3704 vi->rss_base = 0xffff; in alloc_extra_vi()
3711 V_FW_PARAMS_PARAM_YZ(vi->viid); in alloc_extra_vi()
3714 vi->rss_base = 0xffff; in alloc_extra_vi()
3716 MPASS((val >> 16) == vi->rss_size); in alloc_extra_vi()
3717 vi->rss_base = val & 0xffff; in alloc_extra_vi()
3726 struct vi_info *vi; in vcxgbe_attach() local
3731 vi = device_get_softc(dev); in vcxgbe_attach()
3732 pi = vi->pi; in vcxgbe_attach()
3735 rc = begin_synchronized_op(sc, vi, SLEEP_OK | INTR_OK, "t4via"); in vcxgbe_attach()
3738 rc = alloc_extra_vi(sc, pi, vi); in vcxgbe_attach()
3743 cxgbe_vi_attach(dev, vi); in vcxgbe_attach()
3751 struct vi_info *vi; in vcxgbe_detach() local
3754 vi = device_get_softc(dev); in vcxgbe_detach()
3755 sc = vi->adapter; in vcxgbe_detach()
3757 begin_vi_detach(sc, vi); in vcxgbe_detach()
3758 cxgbe_vi_detach(vi); in vcxgbe_detach()
3759 t4_free_vi(sc, sc->mbox, sc->pf, 0, vi->viid); in vcxgbe_detach()
3760 end_vi_detach(sc, vi); in vcxgbe_detach()
6259 struct vi_info *vi = if_getsoftc(ctx->ifp); in add_maddr() local
6260 struct port_info *pi = vi->pi; in add_maddr()
6271 ctx->rc = t4_alloc_mac_filt(sc, sc->mbox, vi->viid, ctx->del, in add_maddr()
6303 struct vi_info *vi = if_getsoftc(ifp); in update_mac_settings() local
6304 struct port_info *pi = vi->pi; in update_mac_settings()
6325 rc = -t4_set_rxmode(sc, sc->mbox, vi->viid, mtu, promisc, in update_mac_settings()
6338 rc = t4_change_mac(sc, sc->mbox, vi->viid, vi->xact_addr_filt, in update_mac_settings()
6339 ucaddr, true, &vi->smt_idx); in update_mac_settings()
6345 vi->xact_addr_filt = rc; in update_mac_settings()
6374 rc = t4_alloc_mac_filt(sc, sc->mbox, vi->viid, in update_mac_settings()
6395 rc = -t4_set_addr_hash(sc, sc->mbox, vi->viid, 0, ctx.hash, 0); in update_mac_settings()
6405 if (IS_MAIN_VI(vi) && sc->vxlan_refcount > 0 && in update_mac_settings()
6407 rc = t4_alloc_raw_mac_filt(sc, vi->viid, match_all_mac, in update_mac_settings()
6428 begin_synchronized_op(struct adapter *sc, struct vi_info *vi, int flags, in begin_synchronized_op() argument
6441 if (vi && IS_DETACHING(vi)) { in begin_synchronized_op()
6484 begin_vi_detach(struct adapter *sc, struct vi_info *vi) in begin_vi_detach() argument
6487 SET_DETACHING(vi); in begin_vi_detach()
6501 end_vi_detach(struct adapter *sc, struct vi_info *vi) in end_vi_detach() argument
6506 CLR_DETACHING(vi); in end_vi_detach()
6530 cxgbe_init_synchronized(struct vi_info *vi) in cxgbe_init_synchronized() argument
6532 struct port_info *pi = vi->pi; in cxgbe_init_synchronized()
6534 if_t ifp = vi->ifp; in cxgbe_init_synchronized()
6546 if (!(vi->flags & VI_INIT_DONE) && ((rc = vi_init(vi)) != 0)) in cxgbe_init_synchronized()
6561 rc = -t4_enable_vi(sc, sc->mbox, vi->viid, true, true); in cxgbe_init_synchronized()
6573 for_each_txq(vi, i, txq) { in cxgbe_init_synchronized()
6582 if (sc->traceq < 0 && IS_MAIN_VI(vi)) { in cxgbe_init_synchronized()
6583 sc->traceq = sc->sge.rxq[vi->first_rxq].iq.abs_id; in cxgbe_init_synchronized()
6597 mtx_lock(&vi->tick_mtx); in cxgbe_init_synchronized()
6598 if (vi->pi->nvi > 1 || sc->flags & IS_VF) in cxgbe_init_synchronized()
6599 callout_reset(&vi->tick, hz, vi_tick, vi); in cxgbe_init_synchronized()
6601 callout_reset(&vi->tick, hz, cxgbe_tick, vi); in cxgbe_init_synchronized()
6602 mtx_unlock(&vi->tick_mtx); in cxgbe_init_synchronized()
6605 cxgbe_uninit_synchronized(vi); in cxgbe_init_synchronized()
6614 cxgbe_uninit_synchronized(struct vi_info *vi) in cxgbe_uninit_synchronized() argument
6616 struct port_info *pi = vi->pi; in cxgbe_uninit_synchronized()
6618 if_t ifp = vi->ifp; in cxgbe_uninit_synchronized()
6624 if (!(vi->flags & VI_INIT_DONE)) { in cxgbe_uninit_synchronized()
6629 "if_drv_flags 0x%08x\n", vi->flags, if_getflags(ifp), in cxgbe_uninit_synchronized()
6642 rc = -t4_enable_vi(sc, sc->mbox, vi->viid, false, false); in cxgbe_uninit_synchronized()
6648 for_each_txq(vi, i, txq) { in cxgbe_uninit_synchronized()
6654 mtx_lock(&vi->tick_mtx); in cxgbe_uninit_synchronized()
6655 callout_stop(&vi->tick); in cxgbe_uninit_synchronized()
6656 mtx_unlock(&vi->tick_mtx); in cxgbe_uninit_synchronized()
6690 struct vi_info *vi; in t4_setup_intr_handlers() local
6737 for_each_vi(pi, v, vi) { in t4_setup_intr_handlers()
6738 vi->first_intr = rid - 1; in t4_setup_intr_handlers()
6740 if (vi->nnmrxq > 0) { in t4_setup_intr_handlers()
6741 int n = max(vi->nrxq, vi->nnmrxq); in t4_setup_intr_handlers()
6743 rxq = &sge->rxq[vi->first_rxq]; in t4_setup_intr_handlers()
6745 nm_rxq = &sge->nm_rxq[vi->first_nm_rxq]; in t4_setup_intr_handlers()
6750 if (q < vi->nrxq) in t4_setup_intr_handlers()
6753 if (q < vi->nnmrxq) in t4_setup_intr_handlers()
6778 if (q < vi->nrxq) { in t4_setup_intr_handlers()
6785 vi->nintr++; in t4_setup_intr_handlers()
6788 for_each_rxq(vi, q, rxq) { in t4_setup_intr_handlers()
6801 vi->nintr++; in t4_setup_intr_handlers()
6805 for_each_ofld_rxq(vi, q, ofld_rxq) { in t4_setup_intr_handlers()
6813 vi->nintr++; in t4_setup_intr_handlers()
6987 vi_full_init(struct vi_info *vi) in vi_full_init() argument
6989 struct adapter *sc = vi->adapter; in vi_full_init()
7003 rc = t4_setup_vi_queues(vi); in vi_full_init()
7010 if (vi->nrxq > vi->rss_size) { in vi_full_init()
7011 CH_ALERT(vi, "nrxq (%d) > hw RSS table size (%d); " in vi_full_init()
7012 "some queues will never receive traffic.\n", vi->nrxq, in vi_full_init()
7013 vi->rss_size); in vi_full_init()
7014 } else if (vi->rss_size % vi->nrxq) { in vi_full_init()
7015 CH_ALERT(vi, "nrxq (%d), hw RSS table size (%d); " in vi_full_init()
7016 "expect uneven traffic distribution.\n", vi->nrxq, in vi_full_init()
7017 vi->rss_size); in vi_full_init()
7020 if (vi->nrxq != nbuckets) { in vi_full_init()
7021 CH_ALERT(vi, "nrxq (%d) != kernel RSS buckets (%d);" in vi_full_init()
7022 "performance will be impacted.\n", vi->nrxq, nbuckets); in vi_full_init()
7025 if (vi->rss == NULL) in vi_full_init()
7026 vi->rss = malloc(vi->rss_size * sizeof (*vi->rss), M_CXGBE, in vi_full_init()
7028 for (i = 0; i < vi->rss_size;) { in vi_full_init()
7031 j %= vi->nrxq; in vi_full_init()
7032 rxq = &sc->sge.rxq[vi->first_rxq + j]; in vi_full_init()
7033 vi->rss[i++] = rxq->iq.abs_id; in vi_full_init()
7035 for_each_rxq(vi, j, rxq) { in vi_full_init()
7036 vi->rss[i++] = rxq->iq.abs_id; in vi_full_init()
7037 if (i == vi->rss_size) in vi_full_init()
7043 rc = -t4_config_rss_range(sc, sc->mbox, vi->viid, 0, vi->rss_size, in vi_full_init()
7044 vi->rss, vi->rss_size); in vi_full_init()
7046 CH_ERR(vi, "rss_config failed: %d\n", rc); in vi_full_init()
7051 vi->hashen = hashconfig_to_hashen(hashconfig); in vi_full_init()
7058 extra = hashen_to_hashconfig(vi->hashen) ^ hashconfig; in vi_full_init()
7070 CH_ALERT(vi, in vi_full_init()
7075 CH_ALERT(vi, "IPv4 2-tuple hashing forced on.\n"); in vi_full_init()
7077 CH_ALERT(vi, "TCP/IPv4 4-tuple hashing forced on.\n"); in vi_full_init()
7079 CH_ALERT(vi, "IPv6 2-tuple hashing forced on.\n"); in vi_full_init()
7081 CH_ALERT(vi, "TCP/IPv6 4-tuple hashing forced on.\n"); in vi_full_init()
7083 CH_ALERT(vi, "UDP/IPv4 4-tuple hashing forced on.\n"); in vi_full_init()
7085 CH_ALERT(vi, "UDP/IPv6 4-tuple hashing forced on.\n"); in vi_full_init()
7087 vi->hashen = F_FW_RSS_VI_CONFIG_CMD_IP6FOURTUPEN | in vi_full_init()
7092 rc = -t4_config_vi_rss(sc, sc->mbox, vi->viid, vi->hashen, vi->rss[0], in vi_full_init()
7095 CH_ERR(vi, "rss hash/defaultq config failed: %d\n", rc); in vi_full_init()
7103 vi_init(struct vi_info *vi) in vi_init() argument
7107 ASSERT_SYNCHRONIZED_OP(vi->adapter); in vi_init()
7108 KASSERT((vi->flags & VI_INIT_DONE) == 0, in vi_init()
7111 rc = vi_full_init(vi); in vi_init()
7113 vi_full_uninit(vi); in vi_init()
7115 vi->flags |= VI_INIT_DONE; in vi_init()
7124 vi_full_uninit(struct vi_info *vi) in vi_full_uninit() argument
7127 if (vi->flags & VI_INIT_DONE) { in vi_full_uninit()
7128 quiesce_vi(vi); in vi_full_uninit()
7129 free(vi->rss, M_CXGBE); in vi_full_uninit()
7130 free(vi->nm_rss, M_CXGBE); in vi_full_uninit()
7133 t4_teardown_vi_queues(vi); in vi_full_uninit()
7134 vi->flags &= ~VI_INIT_DONE; in vi_full_uninit()
7239 quiesce_vi(struct vi_info *vi) in quiesce_vi() argument
7242 struct adapter *sc = vi->adapter; in quiesce_vi()
7252 if (!(vi->flags & VI_INIT_DONE)) in quiesce_vi()
7255 for_each_txq(vi, i, txq) { in quiesce_vi()
7260 for_each_ofld_txq(vi, i, ofld_txq) { in quiesce_vi()
7265 for_each_rxq(vi, i, rxq) { in quiesce_vi()
7270 for_each_ofld_rxq(vi, i, ofld_rxq) { in quiesce_vi()
7405 vi_refresh_stats(struct vi_info *vi) in vi_refresh_stats() argument
7410 mtx_assert(&vi->tick_mtx, MA_OWNED); in vi_refresh_stats()
7412 if (vi->flags & VI_SKIP_STATS) in vi_refresh_stats()
7417 if (timevalcmp(&tv, &vi->last_refreshed, <)) in vi_refresh_stats()
7420 t4_get_vi_stats(vi->adapter, vi->vin, &vi->stats); in vi_refresh_stats()
7421 getmicrotime(&vi->last_refreshed); in vi_refresh_stats()
7425 cxgbe_refresh_stats(struct vi_info *vi) in cxgbe_refresh_stats() argument
7433 mtx_assert(&vi->tick_mtx, MA_OWNED); in cxgbe_refresh_stats()
7435 if (vi->flags & VI_SKIP_STATS) in cxgbe_refresh_stats()
7440 if (timevalcmp(&tv, &vi->last_refreshed, <)) in cxgbe_refresh_stats()
7443 pi = vi->pi; in cxgbe_refresh_stats()
7444 sc = vi->adapter; in cxgbe_refresh_stats()
7458 getmicrotime(&vi->last_refreshed); in cxgbe_refresh_stats()
7464 struct vi_info *vi = arg; in cxgbe_tick() local
7466 MPASS(IS_MAIN_VI(vi)); in cxgbe_tick()
7467 mtx_assert(&vi->tick_mtx, MA_OWNED); in cxgbe_tick()
7469 cxgbe_refresh_stats(vi); in cxgbe_tick()
7470 callout_schedule(&vi->tick, hz); in cxgbe_tick()
7476 struct vi_info *vi = arg; in vi_tick() local
7478 mtx_assert(&vi->tick_mtx, MA_OWNED); in vi_tick()
7480 vi_refresh_stats(vi); in vi_tick()
7481 callout_schedule(&vi->tick, hz); in vi_tick()
8014 vi_sysctls(struct vi_info *vi) in vi_sysctls() argument
8016 struct sysctl_ctx_list *ctx = &vi->ctx; in vi_sysctls()
8023 oid = device_get_sysctl_tree(vi->dev); in vi_sysctls()
8027 vi->viid, "VI identifer"); in vi_sysctls()
8029 &vi->nrxq, 0, "# of rx queues"); in vi_sysctls()
8031 &vi->ntxq, 0, "# of tx queues"); in vi_sysctls()
8033 &vi->first_rxq, 0, "index of first rx queue"); in vi_sysctls()
8035 &vi->first_txq, 0, "index of first tx queue"); in vi_sysctls()
8037 vi->rss_base, "start of RSS indirection table"); in vi_sysctls()
8039 vi->rss_size, "size of RSS indirection table"); in vi_sysctls()
8041 if (IS_MAIN_VI(vi)) { in vi_sysctls()
8043 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0, in vi_sysctls()
8048 if (vi->adapter->flags & IS_VF) { in vi_sysctls()
8049 MPASS(vi->flags & TX_USES_VM_WR); in vi_sysctls()
8054 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0, in vi_sysctls()
8059 if (vi->nofldrxq != 0) { in vi_sysctls()
8061 &vi->nofldrxq, 0, in vi_sysctls()
8064 CTLFLAG_RD, &vi->first_ofld_rxq, 0, in vi_sysctls()
8067 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0, in vi_sysctls()
8071 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0, in vi_sysctls()
8077 if (vi->nofldtxq != 0) { in vi_sysctls()
8079 &vi->nofldtxq, 0, in vi_sysctls()
8082 CTLFLAG_RD, &vi->first_ofld_txq, 0, in vi_sysctls()
8087 if (vi->nnmrxq != 0) { in vi_sysctls()
8089 &vi->nnmrxq, 0, "# of netmap rx queues"); in vi_sysctls()
8091 &vi->nnmtxq, 0, "# of netmap tx queues"); in vi_sysctls()
8093 CTLFLAG_RD, &vi->first_nm_rxq, 0, in vi_sysctls()
8096 CTLFLAG_RD, &vi->first_nm_txq, 0, in vi_sysctls()
8102 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0, in vi_sysctls()
8105 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0, in vi_sysctls()
8109 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0, in vi_sysctls()
8112 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, vi, 0, in vi_sysctls()
8376 rc = begin_synchronized_op(sc, &pi->vi[0], SLEEP_OK | INTR_OK, "t4btt"); in sysctl_btphy()
8399 struct vi_info *vi = arg1; in sysctl_noflowq() local
8402 val = vi->rsrv_noflowq; in sysctl_noflowq()
8407 if ((val >= 1) && (vi->ntxq > 1)) in sysctl_noflowq()
8408 vi->rsrv_noflowq = 1; in sysctl_noflowq()
8410 vi->rsrv_noflowq = 0; in sysctl_noflowq()
8418 struct vi_info *vi = arg1; in sysctl_tx_vm_wr() local
8419 struct adapter *sc = vi->adapter; in sysctl_tx_vm_wr()
8424 val = vi->flags & TX_USES_VM_WR ? 1 : 0; in sysctl_tx_vm_wr()
8432 rc = begin_synchronized_op(sc, vi, HOLD_LOCK | SLEEP_OK | INTR_OK, in sysctl_tx_vm_wr()
8438 else if (if_getdrvflags(vi->ifp) & IFF_DRV_RUNNING) { in sysctl_tx_vm_wr()
8446 struct port_info *pi = vi->pi; in sysctl_tx_vm_wr()
8452 vi->flags |= TX_USES_VM_WR; in sysctl_tx_vm_wr()
8453 if_sethwtsomaxsegcount(vi->ifp, TX_SGL_SEGS_VM_TSO); in sysctl_tx_vm_wr()
8459 vi->flags &= ~TX_USES_VM_WR; in sysctl_tx_vm_wr()
8460 if_sethwtsomaxsegcount(vi->ifp, TX_SGL_SEGS_TSO); in sysctl_tx_vm_wr()
8463 V_TXPKT_VF(vi->vin) | V_TXPKT_VF_VLD(vi->vfvld)); in sysctl_tx_vm_wr()
8465 for_each_txq(vi, i, txq) { in sysctl_tx_vm_wr()
8477 struct vi_info *vi = arg1; in sysctl_holdoff_tmr_idx() local
8478 struct adapter *sc = vi->adapter; in sysctl_holdoff_tmr_idx()
8483 idx = vi->tmr_idx; in sysctl_holdoff_tmr_idx()
8492 rc = begin_synchronized_op(sc, vi, HOLD_LOCK | SLEEP_OK | INTR_OK, in sysctl_holdoff_tmr_idx()
8497 v = V_QINTR_TIMER_IDX(idx) | V_QINTR_CNT_EN(vi->pktc_idx != -1); in sysctl_holdoff_tmr_idx()
8498 for_each_rxq(vi, i, rxq) { in sysctl_holdoff_tmr_idx()
8505 vi->tmr_idx = idx; in sysctl_holdoff_tmr_idx()
8514 struct vi_info *vi = arg1; in sysctl_holdoff_pktc_idx() local
8515 struct adapter *sc = vi->adapter; in sysctl_holdoff_pktc_idx()
8518 idx = vi->pktc_idx; in sysctl_holdoff_pktc_idx()
8527 rc = begin_synchronized_op(sc, vi, HOLD_LOCK | SLEEP_OK | INTR_OK, in sysctl_holdoff_pktc_idx()
8532 if (vi->flags & VI_INIT_DONE) in sysctl_holdoff_pktc_idx()
8535 vi->pktc_idx = idx; in sysctl_holdoff_pktc_idx()
8544 struct vi_info *vi = arg1; in sysctl_qsize_rxq() local
8545 struct adapter *sc = vi->adapter; in sysctl_qsize_rxq()
8548 qsize = vi->qsize_rxq; in sysctl_qsize_rxq()
8557 rc = begin_synchronized_op(sc, vi, HOLD_LOCK | SLEEP_OK | INTR_OK, in sysctl_qsize_rxq()
8562 if (vi->flags & VI_INIT_DONE) in sysctl_qsize_rxq()
8565 vi->qsize_rxq = qsize; in sysctl_qsize_rxq()
8574 struct vi_info *vi = arg1; in sysctl_qsize_txq() local
8575 struct adapter *sc = vi->adapter; in sysctl_qsize_txq()
8578 qsize = vi->qsize_txq; in sysctl_qsize_txq()
8587 rc = begin_synchronized_op(sc, vi, HOLD_LOCK | SLEEP_OK | INTR_OK, in sysctl_qsize_txq()
8592 if (vi->flags & VI_INIT_DONE) in sysctl_qsize_txq()
8595 vi->qsize_txq = qsize; in sysctl_qsize_txq()
8646 rc = begin_synchronized_op(sc, &pi->vi[0], SLEEP_OK | INTR_OK, in sysctl_pause_settings()
8726 rc = begin_synchronized_op(sc, &pi->vi[0], SLEEP_OK | INTR_OK, in sysctl_requested_fec()
8840 rc = begin_synchronized_op(sc, &pi->vi[0], SLEEP_OK | INTR_OK, in sysctl_autoneg()
8880 rc = begin_synchronized_op(sc, &pi->vi[0], SLEEP_OK | INTR_OK, "t4ff"); in sysctl_force_fec()
11349 struct vi_info *vi; in sysctl_tls() local
11367 for_each_vi(sc->port[i], j, vi) { in sysctl_tls()
11368 if (vi->flags & VI_INIT_DONE) in sysctl_tls()
11369 t4_update_fl_bufsize(vi->ifp); in sysctl_tls()
11546 struct vi_info *vi = arg1; in sysctl_holdoff_tmr_idx_ofld() local
11547 struct adapter *sc = vi->adapter; in sysctl_holdoff_tmr_idx_ofld()
11552 idx = vi->ofld_tmr_idx; in sysctl_holdoff_tmr_idx_ofld()
11561 rc = begin_synchronized_op(sc, vi, HOLD_LOCK | SLEEP_OK | INTR_OK, in sysctl_holdoff_tmr_idx_ofld()
11566 v = V_QINTR_TIMER_IDX(idx) | V_QINTR_CNT_EN(vi->ofld_pktc_idx != -1); in sysctl_holdoff_tmr_idx_ofld()
11567 for_each_ofld_rxq(vi, i, ofld_rxq) { in sysctl_holdoff_tmr_idx_ofld()
11574 vi->ofld_tmr_idx = idx; in sysctl_holdoff_tmr_idx_ofld()
11583 struct vi_info *vi = arg1; in sysctl_holdoff_pktc_idx_ofld() local
11584 struct adapter *sc = vi->adapter; in sysctl_holdoff_pktc_idx_ofld()
11587 idx = vi->ofld_pktc_idx; in sysctl_holdoff_pktc_idx_ofld()
11596 rc = begin_synchronized_op(sc, vi, HOLD_LOCK | SLEEP_OK | INTR_OK, in sysctl_holdoff_pktc_idx_ofld()
11601 if (vi->flags & VI_INIT_DONE) in sysctl_holdoff_pktc_idx_ofld()
11604 vi->ofld_pktc_idx = idx; in sysctl_holdoff_pktc_idx_ofld()
12031 struct vi_info *vi; in clear_stats() local
12058 for_each_vi(pi, v, vi) { in clear_stats()
12059 if (vi->flags & VI_INIT_DONE) in clear_stats()
12060 t4_clr_vi_stats(sc, vi->vin); in clear_stats()
12079 for_each_vi(pi, v, vi) { in clear_stats()
12080 if (vi->flags & VI_INIT_DONE) { in clear_stats()
12082 for_each_rxq(vi, i, rxq) { in clear_stats()
12096 for_each_txq(vi, i, txq) { in clear_stats()
12127 for_each_ofld_txq(vi, i, ofld_txq) { in clear_stats()
12140 for_each_ofld_rxq(vi, i, ofld_rxq) { in clear_stats()
12163 if (IS_MAIN_VI(vi)) { in clear_stats()
12215 struct vi_info *vi; in t4_os_portmod_changed() local
12225 vi = &pi->vi[0]; in t4_os_portmod_changed()
12226 if (begin_synchronized_op(sc, vi, HOLD_LOCK, "t4mod") == 0) { in t4_os_portmod_changed()
12237 ifp = vi->ifp; in t4_os_portmod_changed()
12256 struct vi_info *vi; in t4_os_link_changed() local
12284 for_each_vi(pi, v, vi) { in t4_os_link_changed()
12285 ifp = vi->ifp; in t4_os_link_changed()
12286 if (ifp == NULL || IS_DETACHING(vi)) in t4_os_link_changed()
12464 toe_capability(struct vi_info *vi, bool enable) in toe_capability() argument
12467 struct port_info *pi = vi->pi; in toe_capability()
12511 if ((if_getcapenable(vi->ifp) & IFCAP_TOE) != 0) { in toe_capability()
12521 if (!(vi->flags & VI_INIT_DONE) && ((rc = vi_init(vi)) != 0)) in toe_capability()
12523 if (!(pi->vi[0].flags & VI_INIT_DONE) && in toe_capability()
12524 ((rc = vi_init(&pi->vi[0])) != 0)) in toe_capability()
12558 if ((if_getcapenable(vi->ifp) & IFCAP_TOE) == 0) { in toe_capability()
13146 rc = t4_alloc_raw_mac_filt(sc, pi->vi[0].viid, match_all_mac, in enable_vxlan_rx()
13151 CH_ERR(&pi->vi[0], in enable_vxlan_rx()