Lines Matching +full:cap +full:- +full:get

1 // SPDX-License-Identifier: GPL-2.0
11 * ice_dcbnl_devreset - perform enough of a ifdown/ifup to sync DCBNL info
18 while (ice_is_reset_in_progress(pf->state)) in ice_dcbnl_devreset()
28 * ice_dcbnl_getets - retrieve local ETS configuration
38 dcbxcfg = &pf->hw.port_info->qos_cfg.local_dcbx_cfg; in ice_dcbnl_getets()
40 ets->willing = dcbxcfg->etscfg.willing; in ice_dcbnl_getets()
41 ets->ets_cap = dcbxcfg->etscfg.maxtcs; in ice_dcbnl_getets()
42 ets->cbs = dcbxcfg->etscfg.cbs; in ice_dcbnl_getets()
43 memcpy(ets->tc_tx_bw, dcbxcfg->etscfg.tcbwtable, sizeof(ets->tc_tx_bw)); in ice_dcbnl_getets()
44 memcpy(ets->tc_rx_bw, dcbxcfg->etscfg.tcbwtable, sizeof(ets->tc_rx_bw)); in ice_dcbnl_getets()
45 memcpy(ets->tc_tsa, dcbxcfg->etscfg.tsatable, sizeof(ets->tc_tsa)); in ice_dcbnl_getets()
46 memcpy(ets->prio_tc, dcbxcfg->etscfg.prio_table, sizeof(ets->prio_tc)); in ice_dcbnl_getets()
47 memcpy(ets->tc_reco_bw, dcbxcfg->etsrec.tcbwtable, in ice_dcbnl_getets()
48 sizeof(ets->tc_reco_bw)); in ice_dcbnl_getets()
49 memcpy(ets->tc_reco_tsa, dcbxcfg->etsrec.tsatable, in ice_dcbnl_getets()
50 sizeof(ets->tc_reco_tsa)); in ice_dcbnl_getets()
51 memcpy(ets->reco_prio_tc, dcbxcfg->etscfg.prio_table, in ice_dcbnl_getets()
52 sizeof(ets->reco_prio_tc)); in ice_dcbnl_getets()
58 * ice_dcbnl_setets - set IEEE ETS configuration
69 if ((pf->dcbx_cap & DCB_CAP_DCBX_LLD_MANAGED) || in ice_dcbnl_setets()
70 !(pf->dcbx_cap & DCB_CAP_DCBX_VER_IEEE)) in ice_dcbnl_setets()
71 return -EINVAL; in ice_dcbnl_setets()
73 if (pf->lag && pf->lag->bonded) { in ice_dcbnl_setets()
75 return -EINVAL; in ice_dcbnl_setets()
78 new_cfg = &pf->hw.port_info->qos_cfg.desired_dcbx_cfg; in ice_dcbnl_setets()
80 mutex_lock(&pf->tc_mutex); in ice_dcbnl_setets()
82 new_cfg->etscfg.willing = ets->willing; in ice_dcbnl_setets()
83 new_cfg->etscfg.cbs = ets->cbs; in ice_dcbnl_setets()
85 new_cfg->etscfg.tcbwtable[i] = ets->tc_tx_bw[i]; in ice_dcbnl_setets()
86 bwcfg += ets->tc_tx_bw[i]; in ice_dcbnl_setets()
87 new_cfg->etscfg.tsatable[i] = ets->tc_tsa[i]; in ice_dcbnl_setets()
88 if (new_cfg->pfc_mode == ICE_QOS_MODE_VLAN) { in ice_dcbnl_setets()
89 /* in DSCP mode up->tc mapping cannot change */ in ice_dcbnl_setets()
90 new_cfg->etscfg.prio_table[i] = ets->prio_tc[i]; in ice_dcbnl_setets()
91 new_cfg->etsrec.prio_table[i] = ets->reco_prio_tc[i]; in ice_dcbnl_setets()
93 new_cfg->etsrec.tcbwtable[i] = ets->tc_reco_bw[i]; in ice_dcbnl_setets()
94 bwrec += ets->tc_reco_bw[i]; in ice_dcbnl_setets()
95 new_cfg->etsrec.tsatable[i] = ets->tc_reco_tsa[i]; in ice_dcbnl_setets()
99 err = -EINVAL; in ice_dcbnl_setets()
103 new_cfg->etscfg.maxtcs = pf->hw.func_caps.common_cap.maxtc; in ice_dcbnl_setets()
106 new_cfg->etscfg.tcbwtable[0] = 100; in ice_dcbnl_setets()
109 new_cfg->etsrec.tcbwtable[0] = 100; in ice_dcbnl_setets()
119 mutex_unlock(&pf->tc_mutex); in ice_dcbnl_setets()
124 * ice_dcbnl_getnumtcs - Get max number of traffic classes supported
136 if (!test_bit(ICE_FLAG_DCB_CAPABLE, pf->flags)) in ice_dcbnl_getnumtcs()
137 return -EINVAL; in ice_dcbnl_getnumtcs()
139 *num = pf->hw.func_caps.common_cap.maxtc; in ice_dcbnl_getnumtcs()
144 * ice_dcbnl_getdcbx - retrieve current DCBX capability
151 return pf->dcbx_cap; in ice_dcbnl_getdcbx()
155 * ice_dcbnl_setdcbx - set required DCBX capability
165 if (test_bit(ICE_FLAG_FW_LLDP_AGENT, pf->flags)) in ice_dcbnl_setdcbx()
175 if (mode == pf->dcbx_cap) in ice_dcbnl_setdcbx()
178 if (pf->lag && pf->lag->bonded) { in ice_dcbnl_setdcbx()
183 qos_cfg = &pf->hw.port_info->qos_cfg; in ice_dcbnl_setdcbx()
186 if (qos_cfg->local_dcbx_cfg.pfc_mode == ICE_QOS_MODE_DSCP) in ice_dcbnl_setdcbx()
189 pf->dcbx_cap = mode; in ice_dcbnl_setdcbx()
192 qos_cfg->local_dcbx_cfg.dcbx_mode = ICE_DCBX_MODE_CEE; in ice_dcbnl_setdcbx()
194 qos_cfg->local_dcbx_cfg.dcbx_mode = ICE_DCBX_MODE_IEEE; in ice_dcbnl_setdcbx()
201 * ice_dcbnl_get_perm_hw_addr - MAC address used by DCBX
208 struct ice_port_info *pi = pf->hw.port_info; in ice_dcbnl_get_perm_hw_addr()
213 for (i = 0; i < netdev->addr_len; i++) in ice_dcbnl_get_perm_hw_addr()
214 perm_addr[i] = pi->mac.perm_addr[i]; in ice_dcbnl_get_perm_hw_addr()
216 for (j = 0; j < netdev->addr_len; j++, i++) in ice_dcbnl_get_perm_hw_addr()
217 perm_addr[i] = pi->mac.perm_addr[j]; in ice_dcbnl_get_perm_hw_addr()
221 * ice_get_pfc_delay - Retrieve PFC Link Delay
234 * ice_dcbnl_getpfc - retrieve local IEEE PFC config
241 struct ice_port_info *pi = pf->hw.port_info; in ice_dcbnl_getpfc()
245 dcbxcfg = &pi->qos_cfg.local_dcbx_cfg; in ice_dcbnl_getpfc()
246 pfc->pfc_cap = dcbxcfg->pfc.pfccap; in ice_dcbnl_getpfc()
247 pfc->pfc_en = dcbxcfg->pfc.pfcena; in ice_dcbnl_getpfc()
248 pfc->mbc = dcbxcfg->pfc.mbc; in ice_dcbnl_getpfc()
249 ice_get_pfc_delay(&pf->hw, &pfc->delay); in ice_dcbnl_getpfc()
252 pfc->requests[i] = pf->stats.priority_xoff_tx[i]; in ice_dcbnl_getpfc()
253 pfc->indications[i] = pf->stats.priority_xoff_rx[i]; in ice_dcbnl_getpfc()
260 * ice_dcbnl_setpfc - set local IEEE PFC config
270 if ((pf->dcbx_cap & DCB_CAP_DCBX_LLD_MANAGED) || in ice_dcbnl_setpfc()
271 !(pf->dcbx_cap & DCB_CAP_DCBX_VER_IEEE)) in ice_dcbnl_setpfc()
272 return -EINVAL; in ice_dcbnl_setpfc()
274 if (pf->lag && pf->lag->bonded) { in ice_dcbnl_setpfc()
276 return -EINVAL; in ice_dcbnl_setpfc()
279 mutex_lock(&pf->tc_mutex); in ice_dcbnl_setpfc()
281 new_cfg = &pf->hw.port_info->qos_cfg.desired_dcbx_cfg; in ice_dcbnl_setpfc()
283 if (pfc->pfc_cap) in ice_dcbnl_setpfc()
284 new_cfg->pfc.pfccap = pfc->pfc_cap; in ice_dcbnl_setpfc()
286 new_cfg->pfc.pfccap = pf->hw.func_caps.common_cap.maxtc; in ice_dcbnl_setpfc()
288 new_cfg->pfc.pfcena = pfc->pfc_en; in ice_dcbnl_setpfc()
295 mutex_unlock(&pf->tc_mutex); in ice_dcbnl_setpfc()
300 * ice_dcbnl_get_pfc_cfg - Get CEE PFC config
309 struct ice_port_info *pi = pf->hw.port_info; in ice_dcbnl_get_pfc_cfg()
311 if ((pf->dcbx_cap & DCB_CAP_DCBX_LLD_MANAGED) || in ice_dcbnl_get_pfc_cfg()
312 !(pf->dcbx_cap & DCB_CAP_DCBX_VER_CEE)) in ice_dcbnl_get_pfc_cfg()
318 *setting = (pi->qos_cfg.local_dcbx_cfg.pfc.pfcena >> prio) & 0x1; in ice_dcbnl_get_pfc_cfg()
319 dev_dbg(ice_pf_to_dev(pf), "Get PFC Config up=%d, setting=%d, pfcenable=0x%x\n", in ice_dcbnl_get_pfc_cfg()
320 prio, *setting, pi->qos_cfg.local_dcbx_cfg.pfc.pfcena); in ice_dcbnl_get_pfc_cfg()
324 * ice_dcbnl_set_pfc_cfg - Set CEE PFC config
334 if ((pf->dcbx_cap & DCB_CAP_DCBX_LLD_MANAGED) || in ice_dcbnl_set_pfc_cfg()
335 !(pf->dcbx_cap & DCB_CAP_DCBX_VER_CEE)) in ice_dcbnl_set_pfc_cfg()
341 if (pf->lag && pf->lag->bonded) { in ice_dcbnl_set_pfc_cfg()
346 new_cfg = &pf->hw.port_info->qos_cfg.desired_dcbx_cfg; in ice_dcbnl_set_pfc_cfg()
348 new_cfg->pfc.pfccap = pf->hw.func_caps.common_cap.maxtc; in ice_dcbnl_set_pfc_cfg()
350 new_cfg->pfc.pfcena |= BIT(prio); in ice_dcbnl_set_pfc_cfg()
352 new_cfg->pfc.pfcena &= ~BIT(prio); in ice_dcbnl_set_pfc_cfg()
355 prio, set, new_cfg->pfc.pfcena); in ice_dcbnl_set_pfc_cfg()
359 * ice_dcbnl_getpfcstate - get CEE PFC mode
365 struct ice_port_info *pi = pf->hw.port_info; in ice_dcbnl_getpfcstate()
368 if (pi->qos_cfg.local_dcbx_cfg.pfc.pfcena) in ice_dcbnl_getpfcstate()
375 * ice_dcbnl_getstate - get DCB enabled state
383 state = test_bit(ICE_FLAG_DCB_CAPABLE, pf->flags); in ice_dcbnl_getstate()
390 * ice_dcbnl_setstate - Set CEE DCB state
398 if ((pf->dcbx_cap & DCB_CAP_DCBX_LLD_MANAGED) || in ice_dcbnl_setstate()
399 !(pf->dcbx_cap & DCB_CAP_DCBX_VER_CEE)) in ice_dcbnl_setstate()
402 if (pf->lag && pf->lag->bonded) { in ice_dcbnl_setstate()
408 if (!!state == test_bit(ICE_FLAG_DCB_ENA, pf->flags)) in ice_dcbnl_setstate()
412 set_bit(ICE_FLAG_DCB_ENA, pf->flags); in ice_dcbnl_setstate()
413 memcpy(&pf->hw.port_info->qos_cfg.desired_dcbx_cfg, in ice_dcbnl_setstate()
414 &pf->hw.port_info->qos_cfg.local_dcbx_cfg, in ice_dcbnl_setstate()
417 clear_bit(ICE_FLAG_DCB_ENA, pf->flags); in ice_dcbnl_setstate()
424 * ice_dcbnl_get_pg_tc_cfg_tx - get CEE PG Tx config
439 struct ice_port_info *pi = pf->hw.port_info; in ice_dcbnl_get_pg_tc_cfg_tx()
441 if ((pf->dcbx_cap & DCB_CAP_DCBX_LLD_MANAGED) || in ice_dcbnl_get_pg_tc_cfg_tx()
442 !(pf->dcbx_cap & DCB_CAP_DCBX_VER_CEE)) in ice_dcbnl_get_pg_tc_cfg_tx()
448 *pgid = pi->qos_cfg.local_dcbx_cfg.etscfg.prio_table[prio]; in ice_dcbnl_get_pg_tc_cfg_tx()
449 dev_dbg(ice_pf_to_dev(pf), "Get PG config prio=%d tc=%d\n", prio, in ice_dcbnl_get_pg_tc_cfg_tx()
454 * ice_dcbnl_set_pg_tc_cfg_tx - set CEE PG Tx config
472 if ((pf->dcbx_cap & DCB_CAP_DCBX_LLD_MANAGED) || in ice_dcbnl_set_pg_tc_cfg_tx()
473 !(pf->dcbx_cap & DCB_CAP_DCBX_VER_CEE)) in ice_dcbnl_set_pg_tc_cfg_tx()
479 if (pf->lag && pf->lag->bonded) { in ice_dcbnl_set_pg_tc_cfg_tx()
484 new_cfg = &pf->hw.port_info->qos_cfg.desired_dcbx_cfg; in ice_dcbnl_set_pg_tc_cfg_tx()
490 new_cfg->etscfg.prio_table[i] = tc; in ice_dcbnl_set_pg_tc_cfg_tx()
492 new_cfg->etscfg.tsatable[tc] = ICE_IEEE_TSA_ETS; in ice_dcbnl_set_pg_tc_cfg_tx()
496 * ice_dcbnl_get_pg_bwg_cfg_tx - Get CEE PGBW config
505 struct ice_port_info *pi = pf->hw.port_info; in ice_dcbnl_get_pg_bwg_cfg_tx()
507 if ((pf->dcbx_cap & DCB_CAP_DCBX_LLD_MANAGED) || in ice_dcbnl_get_pg_bwg_cfg_tx()
508 !(pf->dcbx_cap & DCB_CAP_DCBX_VER_CEE)) in ice_dcbnl_get_pg_bwg_cfg_tx()
514 *bw_pct = pi->qos_cfg.local_dcbx_cfg.etscfg.tcbwtable[pgid]; in ice_dcbnl_get_pg_bwg_cfg_tx()
515 dev_dbg(ice_pf_to_dev(pf), "Get PG BW config tc=%d bw_pct=%d\n", in ice_dcbnl_get_pg_bwg_cfg_tx()
520 * ice_dcbnl_set_pg_bwg_cfg_tx - set CEE PG Tx BW config
531 if ((pf->dcbx_cap & DCB_CAP_DCBX_LLD_MANAGED) || in ice_dcbnl_set_pg_bwg_cfg_tx()
532 !(pf->dcbx_cap & DCB_CAP_DCBX_VER_CEE)) in ice_dcbnl_set_pg_bwg_cfg_tx()
538 if (pf->lag && pf->lag->bonded) { in ice_dcbnl_set_pg_bwg_cfg_tx()
543 new_cfg = &pf->hw.port_info->qos_cfg.desired_dcbx_cfg; in ice_dcbnl_set_pg_bwg_cfg_tx()
545 new_cfg->etscfg.tcbwtable[pgid] = bw_pct; in ice_dcbnl_set_pg_bwg_cfg_tx()
549 * ice_dcbnl_get_pg_tc_cfg_rx - Get CEE PG Rx config
564 struct ice_port_info *pi = pf->hw.port_info; in ice_dcbnl_get_pg_tc_cfg_rx()
566 if ((pf->dcbx_cap & DCB_CAP_DCBX_LLD_MANAGED) || in ice_dcbnl_get_pg_tc_cfg_rx()
567 !(pf->dcbx_cap & DCB_CAP_DCBX_VER_CEE)) in ice_dcbnl_get_pg_tc_cfg_rx()
573 *pgid = pi->qos_cfg.local_dcbx_cfg.etscfg.prio_table[prio]; in ice_dcbnl_get_pg_tc_cfg_rx()
585 * lldpad requires this function pointer to be non-NULL to complete CEE config.
601 * ice_dcbnl_get_pg_bwg_cfg_rx - Get CEE PG BW Rx config
612 if ((pf->dcbx_cap & DCB_CAP_DCBX_LLD_MANAGED) || in ice_dcbnl_get_pg_bwg_cfg_rx()
613 !(pf->dcbx_cap & DCB_CAP_DCBX_VER_CEE)) in ice_dcbnl_get_pg_bwg_cfg_rx()
625 * lldpad requires this function pointer to be non-NULL to complete CEE config.
637 * ice_dcbnl_get_cap - Get DCBX capabilities of adapter
640 * @cap: the capability value
642 static u8 ice_dcbnl_get_cap(struct net_device *netdev, int capid, u8 *cap) in ice_dcbnl_get_cap() argument
646 if (!(test_bit(ICE_FLAG_DCB_CAPABLE, pf->flags))) in ice_dcbnl_get_cap()
651 *cap = true; in ice_dcbnl_get_cap()
654 *cap = true; in ice_dcbnl_get_cap()
657 *cap = false; in ice_dcbnl_get_cap()
660 *cap = 0x80; in ice_dcbnl_get_cap()
663 *cap = 0x80; in ice_dcbnl_get_cap()
666 *cap = false; in ice_dcbnl_get_cap()
669 *cap = false; in ice_dcbnl_get_cap()
672 *cap = pf->dcbx_cap; in ice_dcbnl_get_cap()
675 *cap = false; in ice_dcbnl_get_cap()
679 dev_dbg(ice_pf_to_dev(pf), "DCBX Get Capability cap=%d capval=0x%x\n", in ice_dcbnl_get_cap()
680 capid, *cap); in ice_dcbnl_get_cap()
685 * ice_dcbnl_getapp - get CEE APP
698 if ((pf->dcbx_cap & DCB_CAP_DCBX_LLD_MANAGED) || in ice_dcbnl_getapp()
699 !(pf->dcbx_cap & DCB_CAP_DCBX_VER_CEE)) in ice_dcbnl_getapp()
700 return -EINVAL; in ice_dcbnl_getapp()
706 * ice_dcbnl_find_app - Search for APP in given DCB config
716 for (i = 0; i < cfg->numapps; i++) { in ice_dcbnl_find_app()
717 if (app->selector == cfg->app[i].selector && in ice_dcbnl_find_app()
718 app->prot_id == cfg->app[i].prot_id && in ice_dcbnl_find_app()
719 app->priority == cfg->app[i].priority) in ice_dcbnl_find_app()
729 * ice_dcbnl_setapp - set local IEEE App config
742 if (app->selector != IEEE_8021QAZ_APP_SEL_DSCP) in ice_dcbnl_setapp()
743 return -EINVAL; in ice_dcbnl_setapp()
746 if (pf->dcbx_cap & DCB_CAP_DCBX_LLD_MANAGED) { in ice_dcbnl_setapp()
748 return -EINVAL; in ice_dcbnl_setapp()
751 if (!(pf->dcbx_cap & DCB_CAP_DCBX_VER_IEEE)) in ice_dcbnl_setapp()
752 return -EINVAL; in ice_dcbnl_setapp()
755 return -EOPNOTSUPP; in ice_dcbnl_setapp()
757 if (app->protocol >= ICE_DSCP_NUM_VAL) { in ice_dcbnl_setapp()
759 app->protocol); in ice_dcbnl_setapp()
760 return -EINVAL; in ice_dcbnl_setapp()
763 if (pf->lag && pf->lag->bonded) { in ice_dcbnl_setapp()
765 return -EINVAL; in ice_dcbnl_setapp()
768 max_tc = pf->hw.func_caps.common_cap.maxtc; in ice_dcbnl_setapp()
769 if (app->priority >= max_tc) { in ice_dcbnl_setapp()
771 app->priority, max_tc); in ice_dcbnl_setapp()
772 return -EINVAL; in ice_dcbnl_setapp()
776 mutex_lock(&pf->tc_mutex); in ice_dcbnl_setapp()
778 new_cfg = &pf->hw.port_info->qos_cfg.desired_dcbx_cfg; in ice_dcbnl_setapp()
779 old_cfg = &pf->hw.port_info->qos_cfg.local_dcbx_cfg; in ice_dcbnl_setapp()
785 if (test_and_set_bit(app->protocol, new_cfg->dscp_mapped)) { in ice_dcbnl_setapp()
787 app->protocol); in ice_dcbnl_setapp()
790 netdev_err(netdev, "Failed to delete re-mapping TLV\n"); in ice_dcbnl_setapp()
791 ret = -EINVAL; in ice_dcbnl_setapp()
795 new_app.selector = app->selector; in ice_dcbnl_setapp()
796 new_app.prot_id = app->protocol; in ice_dcbnl_setapp()
797 new_app.priority = app->priority; in ice_dcbnl_setapp()
800 if (old_cfg->pfc_mode == ICE_QOS_MODE_VLAN) { in ice_dcbnl_setapp()
804 ret = ice_aq_set_pfc_mode(&pf->hw, ICE_AQC_PFC_DSCP_BASED_PFC, in ice_dcbnl_setapp()
813 new_cfg->pfc_mode = ICE_QOS_MODE_DSCP; in ice_dcbnl_setapp()
816 new_cfg->etscfg.willing = 0; in ice_dcbnl_setapp()
817 new_cfg->pfc.pfccap = max_tc; in ice_dcbnl_setapp()
818 new_cfg->pfc.willing = 0; in ice_dcbnl_setapp()
827 new_cfg->dscp_map[dscp] = i; in ice_dcbnl_setapp()
830 new_cfg->dscp_map[dscp + offset] = i; in ice_dcbnl_setapp()
833 new_cfg->etscfg.tcbwtable[0] = 100; in ice_dcbnl_setapp()
834 new_cfg->etscfg.tsatable[0] = ICE_IEEE_TSA_ETS; in ice_dcbnl_setapp()
835 new_cfg->etscfg.prio_table[0] = 0; in ice_dcbnl_setapp()
838 new_cfg->etscfg.tcbwtable[i] = 0; in ice_dcbnl_setapp()
839 new_cfg->etscfg.tsatable[i] = ICE_IEEE_TSA_ETS; in ice_dcbnl_setapp()
840 new_cfg->etscfg.prio_table[i] = i; in ice_dcbnl_setapp()
845 new_cfg->dscp_map[app->protocol] = app->priority; in ice_dcbnl_setapp()
846 new_cfg->app[new_cfg->numapps++] = new_app; in ice_dcbnl_setapp()
856 mutex_unlock(&pf->tc_mutex); in ice_dcbnl_setapp()
861 * ice_dcbnl_delapp - Delete local IEEE App config
874 if (pf->dcbx_cap & DCB_CAP_DCBX_LLD_MANAGED) { in ice_dcbnl_delapp()
876 return -EINVAL; in ice_dcbnl_delapp()
879 if (pf->lag && pf->lag->bonded) { in ice_dcbnl_delapp()
881 return -EINVAL; in ice_dcbnl_delapp()
884 mutex_lock(&pf->tc_mutex); in ice_dcbnl_delapp()
885 old_cfg = &pf->hw.port_info->qos_cfg.local_dcbx_cfg; in ice_dcbnl_delapp()
891 new_cfg = &pf->hw.port_info->qos_cfg.desired_dcbx_cfg; in ice_dcbnl_delapp()
893 for (i = 0; i < new_cfg->numapps; i++) { in ice_dcbnl_delapp()
894 if (app->selector == new_cfg->app[i].selector && in ice_dcbnl_delapp()
895 app->protocol == new_cfg->app[i].prot_id && in ice_dcbnl_delapp()
896 app->priority == new_cfg->app[i].priority) { in ice_dcbnl_delapp()
897 new_cfg->app[i].selector = 0; in ice_dcbnl_delapp()
898 new_cfg->app[i].prot_id = 0; in ice_dcbnl_delapp()
899 new_cfg->app[i].priority = 0; in ice_dcbnl_delapp()
905 if (i == new_cfg->numapps) { in ice_dcbnl_delapp()
906 ret = -EINVAL; in ice_dcbnl_delapp()
910 new_cfg->numapps--; in ice_dcbnl_delapp()
912 for (j = i; j < new_cfg->numapps; j++) { in ice_dcbnl_delapp()
913 new_cfg->app[j].selector = old_cfg->app[j + 1].selector; in ice_dcbnl_delapp()
914 new_cfg->app[j].prot_id = old_cfg->app[j + 1].prot_id; in ice_dcbnl_delapp()
915 new_cfg->app[j].priority = old_cfg->app[j + 1].priority; in ice_dcbnl_delapp()
919 if (app->selector != IEEE_8021QAZ_APP_SEL_DSCP || in ice_dcbnl_delapp()
926 clear_bit(app->protocol, new_cfg->dscp_mapped); in ice_dcbnl_delapp()
928 new_cfg->dscp_map[app->protocol] = app->protocol % in ice_dcbnl_delapp()
934 if (bitmap_empty(new_cfg->dscp_mapped, ICE_DSCP_NUM_VAL) && in ice_dcbnl_delapp()
935 new_cfg->pfc_mode == ICE_QOS_MODE_DSCP) { in ice_dcbnl_delapp()
936 ret = ice_aq_set_pfc_mode(&pf->hw, in ice_dcbnl_delapp()
946 new_cfg->pfc_mode = ICE_QOS_MODE_VLAN; in ice_dcbnl_delapp()
967 mutex_unlock(&pf->tc_mutex); in ice_dcbnl_delapp()
972 * ice_dcbnl_cee_set_all - Commit CEE DCB settings to HW
981 if ((pf->dcbx_cap & DCB_CAP_DCBX_LLD_MANAGED) || in ice_dcbnl_cee_set_all()
982 !(pf->dcbx_cap & DCB_CAP_DCBX_VER_CEE)) in ice_dcbnl_cee_set_all()
985 if (pf->lag && pf->lag->bonded) { in ice_dcbnl_cee_set_all()
990 new_cfg = &pf->hw.port_info->qos_cfg.desired_dcbx_cfg; in ice_dcbnl_cee_set_all()
992 mutex_lock(&pf->tc_mutex); in ice_dcbnl_cee_set_all()
996 mutex_unlock(&pf->tc_mutex); in ice_dcbnl_cee_set_all()
1035 * ice_dcbnl_set_all - set all the apps and ieee data from DCBX config
1040 struct net_device *netdev = vsi->netdev; in ice_dcbnl_set_all()
1051 pi = pf->hw.port_info; in ice_dcbnl_set_all()
1054 if (pf->dcbx_cap & DCB_CAP_DCBX_HOST) in ice_dcbnl_set_all()
1058 if (!test_bit(ICE_FLAG_DCB_ENA, pf->flags)) in ice_dcbnl_set_all()
1061 dcbxcfg = &pi->qos_cfg.local_dcbx_cfg; in ice_dcbnl_set_all()
1063 for (i = 0; i < dcbxcfg->numapps; i++) { in ice_dcbnl_set_all()
1066 prio = dcbxcfg->app[i].priority; in ice_dcbnl_set_all()
1067 tc_map = BIT(dcbxcfg->etscfg.prio_table[prio]); in ice_dcbnl_set_all()
1070 if (tc_map & vsi->tc_cfg.ena_tc) { in ice_dcbnl_set_all()
1071 sapp.selector = dcbxcfg->app[i].selector; in ice_dcbnl_set_all()
1072 sapp.protocol = dcbxcfg->app[i].prot_id; in ice_dcbnl_set_all()
1077 /* Notify user-space of the changes */ in ice_dcbnl_set_all()
1082 * ice_dcbnl_vsi_del_app - Delete APP on all VSIs
1095 sapp.selector = app->selector; in ice_dcbnl_vsi_del_app()
1096 sapp.protocol = app->prot_id; in ice_dcbnl_vsi_del_app()
1097 sapp.priority = app->priority; in ice_dcbnl_vsi_del_app()
1098 err = ice_dcbnl_delapp(vsi->netdev, &sapp); in ice_dcbnl_vsi_del_app()
1099 …dev_dbg(ice_pf_to_dev(vsi->back), "Deleting app for VSI idx=%d err=%d sel=%d proto=0x%x, prio=%d\n… in ice_dcbnl_vsi_del_app()
1100 vsi->idx, err, app->selector, app->prot_id, app->priority); in ice_dcbnl_vsi_del_app()
1104 * ice_dcbnl_flush_apps - Delete all removed APPs
1122 for (i = 0; i < old_cfg->numapps; i++) { in ice_dcbnl_flush_apps()
1123 struct ice_dcb_app_priority_table app = old_cfg->app[i]; in ice_dcbnl_flush_apps()
1132 * ice_dcbnl_setup - setup DCBNL
1133 * @vsi: VSI to get associated netdev from
1137 struct net_device *netdev = vsi->netdev; in ice_dcbnl_setup()
1141 if (!test_bit(ICE_FLAG_DCB_CAPABLE, pf->flags)) in ice_dcbnl_setup()
1144 netdev->dcbnl_ops = &dcbnl_ops; in ice_dcbnl_setup()