Lines Matching refs:veb
53 static int i40e_add_veb(struct i40e_veb *veb, struct i40e_vsi *vsi);
59 static int i40e_veb_get_bw_info(struct i40e_veb *veb);
532 if (pf->veb[i]) { in i40e_pf_reset_stats()
533 memset(&pf->veb[i]->stats, 0, in i40e_pf_reset_stats()
534 sizeof(pf->veb[i]->stats)); in i40e_pf_reset_stats()
535 memset(&pf->veb[i]->stats_offsets, 0, in i40e_pf_reset_stats()
536 sizeof(pf->veb[i]->stats_offsets)); in i40e_pf_reset_stats()
537 pf->veb[i]->stat_offsets_loaded = false; in i40e_pf_reset_stats()
668 static void i40e_update_veb_stats(struct i40e_veb *veb) in i40e_update_veb_stats() argument
670 struct i40e_pf *pf = veb->pf; in i40e_update_veb_stats()
678 idx = veb->stats_idx; in i40e_update_veb_stats()
679 es = &veb->stats; in i40e_update_veb_stats()
680 oes = &veb->stats_offsets; in i40e_update_veb_stats()
681 veb_es = &veb->tc_stats; in i40e_update_veb_stats()
682 veb_oes = &veb->tc_stats_offsets; in i40e_update_veb_stats()
686 veb->stat_offsets_loaded, in i40e_update_veb_stats()
690 veb->stat_offsets_loaded, in i40e_update_veb_stats()
694 veb->stat_offsets_loaded, in i40e_update_veb_stats()
697 veb->stat_offsets_loaded, in i40e_update_veb_stats()
700 veb->stat_offsets_loaded, in i40e_update_veb_stats()
703 veb->stat_offsets_loaded, in i40e_update_veb_stats()
707 veb->stat_offsets_loaded, in i40e_update_veb_stats()
710 veb->stat_offsets_loaded, in i40e_update_veb_stats()
713 veb->stat_offsets_loaded, in i40e_update_veb_stats()
716 veb->stat_offsets_loaded, in i40e_update_veb_stats()
721 veb->stat_offsets_loaded, in i40e_update_veb_stats()
726 veb->stat_offsets_loaded, in i40e_update_veb_stats()
731 veb->stat_offsets_loaded, in i40e_update_veb_stats()
736 veb->stat_offsets_loaded, in i40e_update_veb_stats()
740 veb->stat_offsets_loaded = true; in i40e_update_veb_stats()
4830 int i40e_veb_config_tc(struct i40e_veb *veb, u8 enabled_tc) in i40e_veb_config_tc() argument
4833 struct i40e_pf *pf = veb->pf; in i40e_veb_config_tc()
4838 if (!enabled_tc || veb->enabled_tc == enabled_tc) in i40e_veb_config_tc()
4850 ret = i40e_aq_config_switch_comp_bw_config(&pf->hw, veb->seid, in i40e_veb_config_tc()
4861 ret = i40e_veb_get_bw_info(veb); in i40e_veb_config_tc()
4891 if (!pf->veb[v]) in i40e_dcb_reconfigure()
4893 ret = i40e_veb_config_tc(pf->veb[v], tc_map); in i40e_dcb_reconfigure()
4897 pf->veb[v]->seid); in i40e_dcb_reconfigure()
5985 static void i40e_veb_link_event(struct i40e_veb *veb, bool link_up) in i40e_veb_link_event() argument
5990 if (!veb || !veb->pf) in i40e_veb_link_event()
5992 pf = veb->pf; in i40e_veb_link_event()
5996 if (pf->veb[i] && (pf->veb[i]->uplink_seid == veb->seid)) in i40e_veb_link_event()
5997 i40e_veb_link_event(pf->veb[i], link_up); in i40e_veb_link_event()
6001 if (pf->vsi[i] && (pf->vsi[i]->uplink_seid == veb->seid)) in i40e_veb_link_event()
6043 if (pf->lan_veb != I40E_NO_VEB && pf->veb[pf->lan_veb]) in i40e_link_event()
6044 i40e_veb_link_event(pf->veb[pf->lan_veb], new_link); in i40e_link_event()
6087 if (pf->veb[i]) in i40e_watchdog_subtask()
6088 i40e_update_veb_stats(pf->veb[i]); in i40e_watchdog_subtask()
6396 static void i40e_config_bridge_mode(struct i40e_veb *veb) in i40e_config_bridge_mode() argument
6398 struct i40e_pf *pf = veb->pf; in i40e_config_bridge_mode()
6402 veb->bridge_mode == BRIDGE_MODE_VEPA ? "VEPA" : "VEB"); in i40e_config_bridge_mode()
6403 if (veb->bridge_mode & BRIDGE_MODE_VEPA) in i40e_config_bridge_mode()
6418 static int i40e_reconstitute_veb(struct i40e_veb *veb) in i40e_reconstitute_veb() argument
6421 struct i40e_pf *pf = veb->pf; in i40e_reconstitute_veb()
6428 pf->vsi[v]->veb_idx == veb->idx && in i40e_reconstitute_veb()
6436 "missing owner VSI for veb_idx %d\n", veb->idx); in i40e_reconstitute_veb()
6446 veb->idx, ret); in i40e_reconstitute_veb()
6452 ret = i40e_add_veb(veb, ctl_vsi); in i40e_reconstitute_veb()
6457 veb->bridge_mode = BRIDGE_MODE_VEB; in i40e_reconstitute_veb()
6459 veb->bridge_mode = BRIDGE_MODE_VEPA; in i40e_reconstitute_veb()
6460 i40e_config_bridge_mode(veb); in i40e_reconstitute_veb()
6467 if (pf->vsi[v]->veb_idx == veb->idx) { in i40e_reconstitute_veb()
6470 vsi->uplink_seid = veb->seid; in i40e_reconstitute_veb()
6484 if (pf->veb[veb_idx] && pf->veb[veb_idx]->veb_idx == veb->idx) { in i40e_reconstitute_veb()
6485 pf->veb[veb_idx]->uplink_seid = veb->seid; in i40e_reconstitute_veb()
6486 ret = i40e_reconstitute_veb(pf->veb[veb_idx]); in i40e_reconstitute_veb()
6783 if (!pf->veb[v]) in i40e_reset_and_rebuild()
6786 if (pf->veb[v]->uplink_seid == pf->mac_seid || in i40e_reset_and_rebuild()
6787 pf->veb[v]->uplink_seid == 0) { in i40e_reset_and_rebuild()
6788 ret = i40e_reconstitute_veb(pf->veb[v]); in i40e_reset_and_rebuild()
6799 if (pf->veb[v]->uplink_seid == pf->mac_seid) { in i40e_reset_and_rebuild()
6806 } else if (pf->veb[v]->uplink_seid == 0) { in i40e_reset_and_rebuild()
8456 struct i40e_veb *veb = NULL; in i40e_ndo_bridge_setlink() local
8465 for (i = 0; i < I40E_MAX_VEB && !veb; i++) { in i40e_ndo_bridge_setlink()
8466 if (pf->veb[i] && pf->veb[i]->seid == vsi->uplink_seid) in i40e_ndo_bridge_setlink()
8467 veb = pf->veb[i]; in i40e_ndo_bridge_setlink()
8484 if (!veb) { in i40e_ndo_bridge_setlink()
8485 veb = i40e_veb_setup(pf, 0, vsi->uplink_seid, vsi->seid, in i40e_ndo_bridge_setlink()
8487 if (veb) { in i40e_ndo_bridge_setlink()
8488 veb->bridge_mode = mode; in i40e_ndo_bridge_setlink()
8489 i40e_config_bridge_mode(veb); in i40e_ndo_bridge_setlink()
8495 } else if (mode != veb->bridge_mode) { in i40e_ndo_bridge_setlink()
8497 veb->bridge_mode = mode; in i40e_ndo_bridge_setlink()
8531 struct i40e_veb *veb = NULL; in i40e_ndo_bridge_getlink() local
8539 for (i = 0; i < I40E_MAX_VEB && !veb; i++) { in i40e_ndo_bridge_getlink()
8540 if (pf->veb[i] && pf->veb[i]->seid == vsi->uplink_seid) in i40e_ndo_bridge_getlink()
8541 veb = pf->veb[i]; in i40e_ndo_bridge_getlink()
8544 if (!veb) in i40e_ndo_bridge_getlink()
8547 return ndo_dflt_bridge_getlink(skb, pid, seq, dev, veb->bridge_mode, in i40e_ndo_bridge_getlink()
8737 struct i40e_veb *veb; in i40e_is_vsi_uplink_mode_veb() local
8744 veb = pf->veb[vsi->veb_idx]; in i40e_is_vsi_uplink_mode_veb()
8745 if (!veb) { in i40e_is_vsi_uplink_mode_veb()
8752 if (veb->bridge_mode & BRIDGE_MODE_VEPA) { in i40e_is_vsi_uplink_mode_veb()
9015 struct i40e_veb *veb = NULL; in i40e_vsi_release() local
9081 if (!pf->veb[i]) in i40e_vsi_release()
9083 if (pf->veb[i]->uplink_seid == uplink_seid) in i40e_vsi_release()
9085 if (pf->veb[i]->seid == uplink_seid) in i40e_vsi_release()
9086 veb = pf->veb[i]; in i40e_vsi_release()
9088 if (n == 0 && veb && veb->uplink_seid != 0) in i40e_vsi_release()
9089 i40e_veb_release(veb); in i40e_vsi_release()
9232 struct i40e_veb *veb = NULL; in i40e_vsi_setup() local
9250 if (pf->veb[i] && pf->veb[i]->seid == uplink_seid) { in i40e_vsi_setup()
9251 veb = pf->veb[i]; in i40e_vsi_setup()
9256 if (!veb && uplink_seid != pf->mac_seid) { in i40e_vsi_setup()
9271 veb = i40e_veb_setup(pf, 0, pf->mac_seid, vsi->seid, in i40e_vsi_setup()
9274 veb = i40e_veb_setup(pf, 0, vsi->uplink_seid, vsi->seid, in i40e_vsi_setup()
9276 if (veb) { in i40e_vsi_setup()
9287 veb->bridge_mode = BRIDGE_MODE_VEPA; in i40e_vsi_setup()
9290 i40e_config_bridge_mode(veb); in i40e_vsi_setup()
9292 for (i = 0; i < I40E_MAX_VEB && !veb; i++) { in i40e_vsi_setup()
9293 if (pf->veb[i] && pf->veb[i]->seid == vsi->uplink_seid) in i40e_vsi_setup()
9294 veb = pf->veb[i]; in i40e_vsi_setup()
9296 if (!veb) { in i40e_vsi_setup()
9302 uplink_seid = veb->seid; in i40e_vsi_setup()
9313 vsi->veb_idx = (veb ? veb->idx : I40E_NO_VEB); in i40e_vsi_setup()
9405 static int i40e_veb_get_bw_info(struct i40e_veb *veb) in i40e_veb_get_bw_info() argument
9409 struct i40e_pf *pf = veb->pf; in i40e_veb_get_bw_info()
9415 ret = i40e_aq_query_switch_comp_bw_config(hw, veb->seid, in i40e_veb_get_bw_info()
9425 ret = i40e_aq_query_switch_comp_ets_config(hw, veb->seid, in i40e_veb_get_bw_info()
9435 veb->bw_limit = le16_to_cpu(ets_data.port_bw_limit); in i40e_veb_get_bw_info()
9436 veb->bw_max_quanta = ets_data.tc_bw_max; in i40e_veb_get_bw_info()
9437 veb->is_abs_credits = bw_data.absolute_credits_enable; in i40e_veb_get_bw_info()
9438 veb->enabled_tc = ets_data.tc_valid_bits; in i40e_veb_get_bw_info()
9442 veb->bw_tc_share_credits[i] = bw_data.tc_bw_share_credits[i]; in i40e_veb_get_bw_info()
9443 veb->bw_tc_limit_credits[i] = in i40e_veb_get_bw_info()
9445 veb->bw_tc_max_quanta[i] = ((tc_bw_max >> (i*4)) & 0x7); in i40e_veb_get_bw_info()
9462 struct i40e_veb *veb; in i40e_veb_mem_alloc() local
9475 while ((i < I40E_MAX_VEB) && (pf->veb[i] != NULL)) in i40e_veb_mem_alloc()
9482 veb = kzalloc(sizeof(*veb), GFP_KERNEL); in i40e_veb_mem_alloc()
9483 if (!veb) { in i40e_veb_mem_alloc()
9487 veb->pf = pf; in i40e_veb_mem_alloc()
9488 veb->idx = i; in i40e_veb_mem_alloc()
9489 veb->enabled_tc = 1; in i40e_veb_mem_alloc()
9491 pf->veb[i] = veb; in i40e_veb_mem_alloc()
9514 if (!pf->veb[i]) in i40e_switch_branch_release()
9516 if (pf->veb[i]->uplink_seid == branch->seid) in i40e_switch_branch_release()
9517 i40e_switch_branch_release(pf->veb[i]); in i40e_switch_branch_release()
9539 if (pf->veb[veb_idx]) in i40e_switch_branch_release()
9540 i40e_veb_release(pf->veb[veb_idx]); in i40e_switch_branch_release()
9547 static void i40e_veb_clear(struct i40e_veb *veb) in i40e_veb_clear() argument
9549 if (!veb) in i40e_veb_clear()
9552 if (veb->pf) { in i40e_veb_clear()
9553 struct i40e_pf *pf = veb->pf; in i40e_veb_clear()
9556 if (pf->veb[veb->idx] == veb) in i40e_veb_clear()
9557 pf->veb[veb->idx] = NULL; in i40e_veb_clear()
9561 kfree(veb); in i40e_veb_clear()
9568 void i40e_veb_release(struct i40e_veb *veb) in i40e_veb_release() argument
9574 pf = veb->pf; in i40e_veb_release()
9578 if (pf->vsi[i] && pf->vsi[i]->uplink_seid == veb->seid) { in i40e_veb_release()
9586 veb->seid, n); in i40e_veb_release()
9592 if (veb->uplink_seid) { in i40e_veb_release()
9593 vsi->uplink_seid = veb->uplink_seid; in i40e_veb_release()
9594 if (veb->uplink_seid == pf->mac_seid) in i40e_veb_release()
9597 vsi->veb_idx = veb->veb_idx; in i40e_veb_release()
9604 i40e_aq_delete_element(&pf->hw, veb->seid, NULL); in i40e_veb_release()
9605 i40e_veb_clear(veb); in i40e_veb_release()
9613 static int i40e_add_veb(struct i40e_veb *veb, struct i40e_vsi *vsi) in i40e_add_veb() argument
9615 struct i40e_pf *pf = veb->pf; in i40e_add_veb()
9616 bool is_default = veb->pf->cur_promisc; in i40e_add_veb()
9621 ret = i40e_aq_add_veb(&pf->hw, veb->uplink_seid, vsi->seid, in i40e_add_veb()
9622 veb->enabled_tc, is_default, in i40e_add_veb()
9623 is_cloud, &veb->seid, NULL); in i40e_add_veb()
9633 ret = i40e_aq_get_veb_parameters(&pf->hw, veb->seid, NULL, NULL, in i40e_add_veb()
9634 &veb->stats_idx, NULL, NULL, NULL); in i40e_add_veb()
9642 ret = i40e_veb_get_bw_info(veb); in i40e_add_veb()
9648 i40e_aq_delete_element(&pf->hw, veb->seid, NULL); in i40e_add_veb()
9652 vsi->uplink_seid = veb->seid; in i40e_add_veb()
9653 vsi->veb_idx = veb->idx; in i40e_add_veb()
9679 struct i40e_veb *veb, *uplink_veb = NULL; in i40e_veb_setup() local
9704 if (pf->veb[veb_idx] && in i40e_veb_setup()
9705 pf->veb[veb_idx]->seid == uplink_seid) { in i40e_veb_setup()
9706 uplink_veb = pf->veb[veb_idx]; in i40e_veb_setup()
9721 veb = pf->veb[veb_idx]; in i40e_veb_setup()
9722 veb->flags = flags; in i40e_veb_setup()
9723 veb->uplink_seid = uplink_seid; in i40e_veb_setup()
9724 veb->veb_idx = (uplink_veb ? uplink_veb->idx : I40E_NO_VEB); in i40e_veb_setup()
9725 veb->enabled_tc = (enabled_tc ? enabled_tc : 0x1); in i40e_veb_setup()
9728 ret = i40e_add_veb(veb, pf->vsi[vsi_idx]); in i40e_veb_setup()
9732 pf->lan_veb = veb->idx; in i40e_veb_setup()
9734 return veb; in i40e_veb_setup()
9737 i40e_veb_clear(veb); in i40e_veb_setup()
9778 if (pf->veb[v] && (pf->veb[v]->seid == seid)) { in i40e_setup_pf_switch_element()
9791 pf->veb[pf->lan_veb]->seid = seid; in i40e_setup_pf_switch_element()
9792 pf->veb[pf->lan_veb]->uplink_seid = pf->mac_seid; in i40e_setup_pf_switch_element()
9793 pf->veb[pf->lan_veb]->pf = pf; in i40e_setup_pf_switch_element()
9794 pf->veb[pf->lan_veb]->veb_idx = I40E_NO_VEB; in i40e_setup_pf_switch_element()
9913 if (pf->lan_veb != I40E_NO_VEB && pf->veb[pf->lan_veb]) in i40e_setup_pf_switch()
9914 uplink_seid = pf->veb[pf->lan_veb]->seid; in i40e_setup_pf_switch()
10718 if (!pf->veb[i]) in i40e_remove()
10721 if (pf->veb[i]->uplink_seid == pf->mac_seid || in i40e_remove()
10722 pf->veb[i]->uplink_seid == 0) in i40e_remove()
10723 i40e_switch_branch_release(pf->veb[i]); in i40e_remove()
10763 kfree(pf->veb[i]); in i40e_remove()
10764 pf->veb[i] = NULL; in i40e_remove()