Lines Matching full:pi

9  * @pi: port information structure
16 ice_sched_add_root_node(struct ice_port_info *pi, in ice_sched_add_root_node() argument
22 if (!pi) in ice_sched_add_root_node()
25 hw = pi->hw; in ice_sched_add_root_node()
39 pi->root = root; in ice_sched_add_root_node()
142 * @pi: port information structure
150 ice_sched_add_node(struct ice_port_info *pi, u8 layer, in ice_sched_add_node() argument
160 if (!pi) in ice_sched_add_node()
163 hw = pi->hw; in ice_sched_add_node()
166 parent = ice_sched_find_node_by_teid(pi->root, in ice_sched_add_node()
258 * @pi: port information structure
265 ice_sched_get_first_node(struct ice_port_info *pi, in ice_sched_get_first_node() argument
268 return pi->sib_head[parent->tc_num][layer]; in ice_sched_get_first_node()
273 * @pi: port information structure
278 struct ice_sched_node *ice_sched_get_tc_node(struct ice_port_info *pi, u8 tc) in ice_sched_get_tc_node() argument
282 if (!pi || !pi->root) in ice_sched_get_tc_node()
284 for (i = 0; i < pi->root->num_children; i++) in ice_sched_get_tc_node()
285 if (pi->root->children[i]->tc_num == tc) in ice_sched_get_tc_node()
286 return pi->root->children[i]; in ice_sched_get_tc_node()
292 * @pi: port information structure
299 void ice_free_sched_node(struct ice_port_info *pi, struct ice_sched_node *node) in ice_free_sched_node() argument
302 struct ice_hw *hw = pi->hw; in ice_free_sched_node()
310 ice_free_sched_node(pi, node->children[0]); in ice_free_sched_node()
336 p = ice_sched_get_first_node(pi, node, node->tx_sched_layer); in ice_free_sched_node()
346 if (pi->sib_head[node->tc_num][node->tx_sched_layer] == node) in ice_free_sched_node()
347 pi->sib_head[node->tc_num][node->tx_sched_layer] = in ice_free_sched_node()
353 xa_erase(&pi->sched_node_ids, node->id); in ice_free_sched_node()
756 * @pi: port information structure
760 static void ice_sched_clear_rl_prof(struct ice_port_info *pi) in ice_sched_clear_rl_prof() argument
764 for (ln = 0; ln < pi->hw->num_tx_sched_layers; ln++) { in ice_sched_clear_rl_prof()
769 &pi->rl_prof_list[ln], list_entry) { in ice_sched_clear_rl_prof()
770 struct ice_hw *hw = pi->hw; in ice_sched_clear_rl_prof()
813 * @pi: port information structure
817 static void ice_sched_clear_tx_topo(struct ice_port_info *pi) in ice_sched_clear_tx_topo() argument
819 if (!pi) in ice_sched_clear_tx_topo()
822 ice_sched_clear_rl_prof(pi); in ice_sched_clear_tx_topo()
823 if (pi->root) { in ice_sched_clear_tx_topo()
824 ice_free_sched_node(pi, pi->root); in ice_sched_clear_tx_topo()
825 pi->root = NULL; in ice_sched_clear_tx_topo()
831 * @pi: port information structure
835 void ice_sched_clear_port(struct ice_port_info *pi) in ice_sched_clear_port() argument
837 if (!pi || pi->port_state != ICE_SCHED_PORT_STATE_READY) in ice_sched_clear_port()
840 pi->port_state = ICE_SCHED_PORT_STATE_INIT; in ice_sched_clear_port()
841 mutex_lock(&pi->sched_lock); in ice_sched_clear_port()
842 ice_sched_clear_tx_topo(pi); in ice_sched_clear_port()
843 mutex_unlock(&pi->sched_lock); in ice_sched_clear_port()
844 mutex_destroy(&pi->sched_lock); in ice_sched_clear_port()
871 * @pi: port information structure
883 ice_sched_add_elems(struct ice_port_info *pi, struct ice_sched_node *tc_node, in ice_sched_add_elems() argument
891 struct ice_hw *hw = pi->hw; in ice_sched_add_elems()
933 status = ice_sched_add_node(pi, layer, &buf->generic[i], prealloc_nodes[i]); in ice_sched_add_elems()
935 status = ice_sched_add_node(pi, layer, &buf->generic[i], NULL); in ice_sched_add_elems()
959 status = xa_alloc(&pi->sched_node_ids, &new_node->id, NULL, XA_LIMIT(0, UINT_MAX), in ice_sched_add_elems()
971 prev = ice_sched_get_first_node(pi, tc_node, layer); in ice_sched_add_elems()
979 if (!pi->sib_head[tc_node->tc_num][layer]) in ice_sched_add_elems()
980 pi->sib_head[tc_node->tc_num][layer] = new_node; in ice_sched_add_elems()
992 * @pi: port information structure
1003 ice_sched_add_nodes_to_hw_layer(struct ice_port_info *pi, in ice_sched_add_nodes_to_hw_layer() argument
1016 if (!parent || layer < pi->hw->sw_entry_point_layer) in ice_sched_add_nodes_to_hw_layer()
1020 max_child_nodes = pi->hw->max_children[parent->tx_sched_layer]; in ice_sched_add_nodes_to_hw_layer()
1030 return ice_sched_add_elems(pi, tc_node, parent, layer, num_nodes, in ice_sched_add_nodes_to_hw_layer()
1036 * @pi: port information structure
1047 ice_sched_add_nodes_to_layer(struct ice_port_info *pi, in ice_sched_add_nodes_to_layer() argument
1062 status = ice_sched_add_nodes_to_hw_layer(pi, tc_node, parent, in ice_sched_add_nodes_to_layer()
1070 ice_debug(pi->hw, ICE_DBG_SCHED, "added extra nodes %d %d\n", num_nodes, in ice_sched_add_nodes_to_layer()
1082 max_child_nodes = pi->hw->max_children[parent->tx_sched_layer]; in ice_sched_add_nodes_to_layer()
1158 * @pi: port information structure
1163 static void ice_rm_dflt_leaf_node(struct ice_port_info *pi) in ice_rm_dflt_leaf_node() argument
1167 node = pi->root; in ice_rm_dflt_leaf_node()
1178 status = ice_sched_remove_elems(pi->hw, node->parent, teid); in ice_rm_dflt_leaf_node()
1180 ice_free_sched_node(pi, node); in ice_rm_dflt_leaf_node()
1186 * @pi: port information structure
1191 static void ice_sched_rm_dflt_nodes(struct ice_port_info *pi) in ice_sched_rm_dflt_nodes() argument
1195 ice_rm_dflt_leaf_node(pi); in ice_sched_rm_dflt_nodes()
1198 node = pi->root; in ice_sched_rm_dflt_nodes()
1200 if (node->tx_sched_layer >= pi->hw->sw_entry_point_layer && in ice_sched_rm_dflt_nodes()
1203 ice_free_sched_node(pi, node); in ice_sched_rm_dflt_nodes()
1215 * @pi: port info structure for the tree to cleanup
1221 int ice_sched_init_port(struct ice_port_info *pi) in ice_sched_init_port() argument
1230 if (!pi) in ice_sched_init_port()
1232 hw = pi->hw; in ice_sched_init_port()
1240 status = ice_aq_get_dflt_topo(hw, pi->lport, buf, ICE_AQ_MAX_BUF_LEN, in ice_sched_init_port()
1269 pi->last_node_teid = in ice_sched_init_port()
1272 pi->last_node_teid = in ice_sched_init_port()
1276 status = ice_sched_add_root_node(pi, &buf[0].generic[0]); in ice_sched_init_port()
1291 status = ice_sched_add_node(pi, j, &buf[i].generic[j], NULL); in ice_sched_init_port()
1298 if (pi->root) in ice_sched_init_port()
1299 ice_sched_rm_dflt_nodes(pi); in ice_sched_init_port()
1302 pi->port_state = ICE_SCHED_PORT_STATE_READY; in ice_sched_init_port()
1303 mutex_init(&pi->sched_lock); in ice_sched_init_port()
1305 INIT_LIST_HEAD(&pi->rl_prof_list[i]); in ice_sched_init_port()
1308 if (status && pi->root) { in ice_sched_init_port()
1309 ice_free_sched_node(pi, pi->root); in ice_sched_init_port()
1310 pi->root = NULL; in ice_sched_init_port()
1447 * @pi: port information structure
1457 ice_sched_get_free_qgrp(struct ice_port_info *pi, in ice_sched_get_free_qgrp() argument
1477 if (ice_sched_find_node_in_subtree(pi->hw, vsi_node, qgrp_node)) in ice_sched_get_free_qgrp()
1494 * @pi: port information structure
1502 ice_sched_get_free_qparent(struct ice_port_info *pi, u16 vsi_handle, u8 tc, in ice_sched_get_free_qparent() argument
1510 qgrp_layer = ice_sched_get_qgrp_layer(pi->hw); in ice_sched_get_free_qparent()
1511 vsi_layer = ice_sched_get_vsi_layer(pi->hw); in ice_sched_get_free_qparent()
1512 max_children = pi->hw->max_children[qgrp_layer]; in ice_sched_get_free_qparent()
1514 vsi_ctx = ice_get_vsi_ctx(pi->hw, vsi_handle); in ice_sched_get_free_qparent()
1529 qgrp_node = ice_sched_get_first_node(pi, vsi_node, qgrp_layer); in ice_sched_get_free_qparent()
1532 if (ice_sched_find_node_in_subtree(pi->hw, vsi_node, qgrp_node)) in ice_sched_get_free_qparent()
1540 return ice_sched_get_free_qgrp(pi, vsi_node, qgrp_node, owner); in ice_sched_get_free_qparent()
1545 * @pi: pointer to the port information structure
1553 ice_sched_get_vsi_node(struct ice_port_info *pi, struct ice_sched_node *tc_node, in ice_sched_get_vsi_node() argument
1559 vsi_layer = ice_sched_get_vsi_layer(pi->hw); in ice_sched_get_vsi_node()
1560 node = ice_sched_get_first_node(pi, tc_node, vsi_layer); in ice_sched_get_vsi_node()
1574 * @pi: pointer to the port information structure
1582 ice_sched_get_agg_node(struct ice_port_info *pi, struct ice_sched_node *tc_node, in ice_sched_get_agg_node() argument
1586 struct ice_hw *hw = pi->hw; in ice_sched_get_agg_node()
1592 node = ice_sched_get_first_node(pi, tc_node, agg_layer); in ice_sched_get_agg_node()
1634 * @pi: port information structure
1644 ice_sched_add_vsi_child_nodes(struct ice_port_info *pi, u16 vsi_handle, in ice_sched_add_vsi_child_nodes() argument
1649 struct ice_hw *hw = pi->hw; in ice_sched_add_vsi_child_nodes()
1656 parent = ice_sched_get_vsi_node(pi, tc_node, vsi_handle); in ice_sched_add_vsi_child_nodes()
1663 status = ice_sched_add_nodes_to_layer(pi, tc_node, parent, i, in ice_sched_add_vsi_child_nodes()
1691 * @pi: pointer to the port info structure
1700 ice_sched_calc_vsi_support_nodes(struct ice_port_info *pi, in ice_sched_calc_vsi_support_nodes() argument
1707 vsil = ice_sched_get_vsi_layer(pi->hw); in ice_sched_calc_vsi_support_nodes()
1708 for (i = vsil; i >= pi->hw->sw_entry_point_layer; i--) in ice_sched_calc_vsi_support_nodes()
1718 node = ice_sched_get_first_node(pi, tc_node, (u8)i); in ice_sched_calc_vsi_support_nodes()
1721 if (node->num_children < pi->hw->max_children[i]) in ice_sched_calc_vsi_support_nodes()
1739 * @pi: port information structure
1748 ice_sched_add_vsi_support_nodes(struct ice_port_info *pi, u16 vsi_handle, in ice_sched_add_vsi_support_nodes() argument
1756 if (!pi) in ice_sched_add_vsi_support_nodes()
1759 vsil = ice_sched_get_vsi_layer(pi->hw); in ice_sched_add_vsi_support_nodes()
1760 for (i = pi->hw->sw_entry_point_layer; i <= vsil; i++) { in ice_sched_add_vsi_support_nodes()
1763 status = ice_sched_add_nodes_to_layer(pi, tc_node, parent, in ice_sched_add_vsi_support_nodes()
1791 * @pi: port information structure
1798 ice_sched_add_vsi_to_topo(struct ice_port_info *pi, u16 vsi_handle, u8 tc) in ice_sched_add_vsi_to_topo() argument
1803 tc_node = ice_sched_get_tc_node(pi, tc); in ice_sched_add_vsi_to_topo()
1808 ice_sched_calc_vsi_support_nodes(pi, tc_node, num_nodes); in ice_sched_add_vsi_to_topo()
1811 return ice_sched_add_vsi_support_nodes(pi, vsi_handle, tc_node, in ice_sched_add_vsi_to_topo()
1817 * @pi: port information structure
1826 ice_sched_update_vsi_child_nodes(struct ice_port_info *pi, u16 vsi_handle, in ice_sched_update_vsi_child_nodes() argument
1833 struct ice_hw *hw = pi->hw; in ice_sched_update_vsi_child_nodes()
1837 tc_node = ice_sched_get_tc_node(pi, tc); in ice_sched_update_vsi_child_nodes()
1841 vsi_node = ice_sched_get_vsi_node(pi, tc_node, vsi_handle); in ice_sched_update_vsi_child_nodes()
1875 status = ice_sched_add_vsi_child_nodes(pi, vsi_handle, tc_node, in ice_sched_update_vsi_child_nodes()
1889 * @pi: port information structure
1901 ice_sched_cfg_vsi(struct ice_port_info *pi, u16 vsi_handle, u8 tc, u16 maxqs, in ice_sched_cfg_vsi() argument
1906 struct ice_hw *hw = pi->hw; in ice_sched_cfg_vsi()
1909 ice_debug(pi->hw, ICE_DBG_SCHED, "add/config VSI %d\n", vsi_handle); in ice_sched_cfg_vsi()
1910 tc_node = ice_sched_get_tc_node(pi, tc); in ice_sched_cfg_vsi()
1916 vsi_node = ice_sched_get_vsi_node(pi, tc_node, vsi_handle); in ice_sched_cfg_vsi()
1933 status = ice_sched_add_vsi_to_topo(pi, vsi_handle, tc); in ice_sched_cfg_vsi()
1937 vsi_node = ice_sched_get_vsi_node(pi, tc_node, vsi_handle); in ice_sched_cfg_vsi()
1952 status = ice_sched_update_vsi_child_nodes(pi, vsi_handle, tc, maxqs, in ice_sched_cfg_vsi()
1971 * @pi: port information structure
1977 static void ice_sched_rm_agg_vsi_info(struct ice_port_info *pi, u16 vsi_handle) in ice_sched_rm_agg_vsi_info() argument
1982 list_for_each_entry_safe(agg_info, atmp, &pi->hw->agg_list, in ice_sched_rm_agg_vsi_info()
1991 devm_kfree(ice_hw_to_dev(pi->hw), in ice_sched_rm_agg_vsi_info()
2017 * @pi: port information structure
2025 ice_sched_rm_vsi_cfg(struct ice_port_info *pi, u16 vsi_handle, u8 owner) in ice_sched_rm_vsi_cfg() argument
2031 ice_debug(pi->hw, ICE_DBG_SCHED, "removing VSI %d\n", vsi_handle); in ice_sched_rm_vsi_cfg()
2032 if (!ice_is_vsi_valid(pi->hw, vsi_handle)) in ice_sched_rm_vsi_cfg()
2034 mutex_lock(&pi->sched_lock); in ice_sched_rm_vsi_cfg()
2035 vsi_ctx = ice_get_vsi_ctx(pi->hw, vsi_handle); in ice_sched_rm_vsi_cfg()
2043 tc_node = ice_sched_get_tc_node(pi, i); in ice_sched_rm_vsi_cfg()
2047 vsi_node = ice_sched_get_vsi_node(pi, tc_node, vsi_handle); in ice_sched_rm_vsi_cfg()
2052 ice_debug(pi->hw, ICE_DBG_SCHED, "VSI has leaf nodes in TC %d\n", i); in ice_sched_rm_vsi_cfg()
2058 ice_free_sched_node(pi, vsi_node->children[j]); in ice_sched_rm_vsi_cfg()
2070 ice_free_sched_node(pi, vsi_node); in ice_sched_rm_vsi_cfg()
2074 ice_sched_rm_agg_vsi_info(pi, vsi_handle); in ice_sched_rm_vsi_cfg()
2084 mutex_unlock(&pi->sched_lock); in ice_sched_rm_vsi_cfg()
2090 * @pi: port information structure
2096 int ice_rm_vsi_lan_cfg(struct ice_port_info *pi, u16 vsi_handle) in ice_rm_vsi_lan_cfg() argument
2098 return ice_sched_rm_vsi_cfg(pi, vsi_handle, ICE_SCHED_NODE_OWNER_LAN); in ice_rm_vsi_lan_cfg()
2103 * @pi: port information structure
2109 int ice_rm_vsi_rdma_cfg(struct ice_port_info *pi, u16 vsi_handle) in ice_rm_vsi_rdma_cfg() argument
2111 return ice_sched_rm_vsi_cfg(pi, vsi_handle, ICE_SCHED_NODE_OWNER_RDMA); in ice_rm_vsi_rdma_cfg()
2212 * @pi: port information structure
2220 ice_sched_move_nodes(struct ice_port_info *pi, struct ice_sched_node *parent, in ice_sched_move_nodes() argument
2230 hw = pi->hw; in ice_sched_move_nodes()
2241 node = ice_sched_find_node_by_teid(pi->root, list[i]); in ice_sched_move_nodes()
2266 * @pi: port information structure
2275 ice_sched_move_vsi_to_agg(struct ice_port_info *pi, u16 vsi_handle, u32 agg_id, in ice_sched_move_vsi_to_agg() argument
2285 tc_node = ice_sched_get_tc_node(pi, tc); in ice_sched_move_vsi_to_agg()
2289 agg_node = ice_sched_get_agg_node(pi, tc_node, agg_id); in ice_sched_move_vsi_to_agg()
2293 vsi_node = ice_sched_get_vsi_node(pi, tc_node, vsi_handle); in ice_sched_move_vsi_to_agg()
2298 if (ice_sched_find_node_in_subtree(pi->hw, agg_node, vsi_node)) in ice_sched_move_vsi_to_agg()
2301 aggl = ice_sched_get_agg_layer(pi->hw); in ice_sched_move_vsi_to_agg()
2302 vsil = ice_sched_get_vsi_layer(pi->hw); in ice_sched_move_vsi_to_agg()
2310 parent = ice_sched_get_free_vsi_parent(pi->hw, in ice_sched_move_vsi_to_agg()
2320 status = ice_sched_add_nodes_to_layer(pi, tc_node, parent, i, in ice_sched_move_vsi_to_agg()
2342 return ice_sched_move_nodes(pi, parent, 1, &vsi_teid); in ice_sched_move_vsi_to_agg()
2347 * @pi: port information structure
2357 ice_move_all_vsi_to_dflt_agg(struct ice_port_info *pi, in ice_move_all_vsi_to_dflt_agg() argument
2373 status = ice_sched_move_vsi_to_agg(pi, vsi_handle, in ice_move_all_vsi_to_dflt_agg()
2381 devm_kfree(ice_hw_to_dev(pi->hw), agg_vsi_info); in ice_move_all_vsi_to_dflt_agg()
2390 * @pi: port information structure
2396 ice_sched_is_agg_inuse(struct ice_port_info *pi, struct ice_sched_node *node) in ice_sched_is_agg_inuse() argument
2400 vsil = ice_sched_get_vsi_layer(pi->hw); in ice_sched_is_agg_inuse()
2403 if (ice_sched_is_agg_inuse(pi, node->children[i])) in ice_sched_is_agg_inuse()
2413 * @pi: port information structure
2421 ice_sched_rm_agg_cfg(struct ice_port_info *pi, u32 agg_id, u8 tc) in ice_sched_rm_agg_cfg() argument
2424 struct ice_hw *hw = pi->hw; in ice_sched_rm_agg_cfg()
2426 tc_node = ice_sched_get_tc_node(pi, tc); in ice_sched_rm_agg_cfg()
2430 agg_node = ice_sched_get_agg_node(pi, tc_node, agg_id); in ice_sched_rm_agg_cfg()
2435 if (ice_sched_is_agg_inuse(pi, agg_node)) in ice_sched_rm_agg_cfg()
2453 ice_free_sched_node(pi, agg_node); in ice_sched_rm_agg_cfg()
2459 * @pi: port information structure
2469 ice_rm_agg_cfg_tc(struct ice_port_info *pi, struct ice_sched_agg_info *agg_info, in ice_rm_agg_cfg_tc() argument
2478 status = ice_move_all_vsi_to_dflt_agg(pi, agg_info, tc, rm_vsi_info); in ice_rm_agg_cfg_tc()
2483 status = ice_sched_rm_agg_cfg(pi, agg_info->agg_id, tc); in ice_rm_agg_cfg_tc()
2494 * @pi: port information structure
2502 ice_save_agg_tc_bitmap(struct ice_port_info *pi, u32 agg_id, in ice_save_agg_tc_bitmap() argument
2507 agg_info = ice_get_agg_info(pi->hw, agg_id); in ice_save_agg_tc_bitmap()
2517 * @pi: port information structure
2525 ice_sched_add_agg_cfg(struct ice_port_info *pi, u32 agg_id, u8 tc) in ice_sched_add_agg_cfg() argument
2529 struct ice_hw *hw = pi->hw; in ice_sched_add_agg_cfg()
2535 tc_node = ice_sched_get_tc_node(pi, tc); in ice_sched_add_agg_cfg()
2539 agg_node = ice_sched_get_agg_node(pi, tc_node, agg_id); in ice_sched_add_agg_cfg()
2554 parent = ice_sched_get_first_node(pi, tc_node, i); in ice_sched_add_agg_cfg()
2574 status = ice_sched_add_nodes_to_layer(pi, tc_node, parent, i, in ice_sched_add_agg_cfg()
2600 * @pi: port information structure
2615 ice_sched_cfg_agg(struct ice_port_info *pi, u32 agg_id, in ice_sched_cfg_agg() argument
2619 struct ice_hw *hw = pi->hw; in ice_sched_cfg_agg()
2645 status = ice_rm_agg_cfg_tc(pi, agg_info, tc, false); in ice_sched_cfg_agg()
2656 status = ice_sched_add_agg_cfg(pi, agg_id, tc); in ice_sched_cfg_agg()
2669 * @pi: port information structure
2677 ice_cfg_agg(struct ice_port_info *pi, u32 agg_id, enum ice_agg_type agg_type, in ice_cfg_agg() argument
2683 mutex_lock(&pi->sched_lock); in ice_cfg_agg()
2684 status = ice_sched_cfg_agg(pi, agg_id, agg_type, &bitmap); in ice_cfg_agg()
2686 status = ice_save_agg_tc_bitmap(pi, agg_id, &bitmap); in ice_cfg_agg()
2687 mutex_unlock(&pi->sched_lock); in ice_cfg_agg()
2737 * @pi: port information structure
2746 ice_save_agg_vsi_tc_bitmap(struct ice_port_info *pi, u32 agg_id, u16 vsi_handle, in ice_save_agg_vsi_tc_bitmap() argument
2752 agg_info = ice_get_agg_info(pi->hw, agg_id); in ice_save_agg_vsi_tc_bitmap()
2766 * @pi: port information structure
2776 ice_sched_assoc_vsi_to_agg(struct ice_port_info *pi, u32 agg_id, in ice_sched_assoc_vsi_to_agg() argument
2781 struct ice_hw *hw = pi->hw; in ice_sched_assoc_vsi_to_agg()
2785 if (!ice_is_vsi_valid(pi->hw, vsi_handle)) in ice_sched_assoc_vsi_to_agg()
2825 status = ice_sched_move_vsi_to_agg(pi, vsi_handle, agg_id, tc); in ice_sched_assoc_vsi_to_agg()
2835 devm_kfree(ice_hw_to_dev(pi->hw), old_agg_vsi_info); in ice_sched_assoc_vsi_to_agg()
2842 * @pi: port information structure
2847 static void ice_sched_rm_unused_rl_prof(struct ice_port_info *pi) in ice_sched_rm_unused_rl_prof() argument
2851 for (ln = 0; ln < pi->hw->num_tx_sched_layers; ln++) { in ice_sched_rm_unused_rl_prof()
2856 &pi->rl_prof_list[ln], list_entry) { in ice_sched_rm_unused_rl_prof()
2857 if (!ice_sched_del_rl_profile(pi->hw, rl_prof_elem)) in ice_sched_rm_unused_rl_prof()
2858 ice_debug(pi->hw, ICE_DBG_SCHED, "Removed rl profile\n"); in ice_sched_rm_unused_rl_prof()
2941 * @pi: port information structure
2949 ice_move_vsi_to_agg(struct ice_port_info *pi, u32 agg_id, u16 vsi_handle, in ice_move_vsi_to_agg() argument
2955 mutex_lock(&pi->sched_lock); in ice_move_vsi_to_agg()
2956 status = ice_sched_assoc_vsi_to_agg(pi, agg_id, vsi_handle, in ice_move_vsi_to_agg()
2959 status = ice_save_agg_vsi_tc_bitmap(pi, agg_id, vsi_handle, in ice_move_vsi_to_agg()
2961 mutex_unlock(&pi->sched_lock); in ice_move_vsi_to_agg()
3036 * @pi: port information structure
3045 ice_sched_save_vsi_bw(struct ice_port_info *pi, u16 vsi_handle, u8 tc, in ice_sched_save_vsi_bw() argument
3050 if (!ice_is_vsi_valid(pi->hw, vsi_handle)) in ice_sched_save_vsi_bw()
3052 vsi_ctx = ice_get_vsi_ctx(pi->hw, vsi_handle); in ice_sched_save_vsi_bw()
3181 * @pi: port information structure
3193 ice_sched_add_rl_profile(struct ice_port_info *pi, in ice_sched_add_rl_profile() argument
3203 if (!pi || layer_num >= pi->hw->num_tx_sched_layers) in ice_sched_add_rl_profile()
3219 hw = pi->hw; in ice_sched_add_rl_profile()
3220 list_for_each_entry(rl_prof_elem, &pi->rl_prof_list[layer_num], in ice_sched_add_rl_profile()
3253 list_add(&rl_prof_elem->list_entry, &pi->rl_prof_list[layer_num]); in ice_sched_add_rl_profile()
3366 * @pi: port information structure
3373 ice_sched_get_rl_prof_layer(struct ice_port_info *pi, enum ice_rl_type rl_type, in ice_sched_get_rl_prof_layer() argument
3376 struct ice_hw *hw = pi->hw; in ice_sched_get_rl_prof_layer()
3432 * @pi: port information structure
3442 ice_sched_rm_rl_profile(struct ice_port_info *pi, u8 layer_num, u8 profile_type, in ice_sched_rm_rl_profile() argument
3448 if (layer_num >= pi->hw->num_tx_sched_layers) in ice_sched_rm_rl_profile()
3451 list_for_each_entry(rl_prof_elem, &pi->rl_prof_list[layer_num], in ice_sched_rm_rl_profile()
3461 status = ice_sched_del_rl_profile(pi->hw, rl_prof_elem); in ice_sched_rm_rl_profile()
3463 ice_debug(pi->hw, ICE_DBG_SCHED, "Remove rl profile failed\n"); in ice_sched_rm_rl_profile()
3473 * @pi: port information structure
3483 ice_sched_set_node_bw_dflt(struct ice_port_info *pi, in ice_sched_set_node_bw_dflt() argument
3493 hw = pi->hw; in ice_sched_set_node_bw_dflt()
3523 return ice_sched_rm_rl_profile(pi, layer_num, profile_type, old_id); in ice_sched_set_node_bw_dflt()
3528 * @pi: port information structure
3540 ice_sched_set_eir_srl_excl(struct ice_port_info *pi, in ice_sched_set_eir_srl_excl() argument
3557 return ice_sched_set_node_bw_dflt(pi, node, ICE_MAX_BW, in ice_sched_set_eir_srl_excl()
3564 return ice_sched_set_node_bw_dflt(pi, node, in ice_sched_set_eir_srl_excl()
3573 * @pi: port information structure
3584 ice_sched_set_node_bw(struct ice_port_info *pi, struct ice_sched_node *node, in ice_sched_set_node_bw() argument
3588 struct ice_hw *hw = pi->hw; in ice_sched_set_node_bw()
3592 rl_prof_info = ice_sched_add_rl_profile(pi, rl_type, bw, layer_num); in ice_sched_set_node_bw()
3614 return ice_sched_rm_rl_profile(pi, layer_num, in ice_sched_set_node_bw()
3621 * @pi: port information structure
3628 ice_sched_set_node_priority(struct ice_port_info *pi, struct ice_sched_node *node, in ice_sched_set_node_priority() argument
3640 return ice_sched_update_elem(pi->hw, node, &buf); in ice_sched_set_node_priority()
3645 * @pi: port information structure
3652 ice_sched_set_node_weight(struct ice_port_info *pi, struct ice_sched_node *node, u16 weight) in ice_sched_set_node_weight() argument
3667 return ice_sched_update_elem(pi->hw, node, &buf); in ice_sched_set_node_weight()
3672 * @pi: port information structure
3681 ice_sched_set_node_bw_lmt(struct ice_port_info *pi, struct ice_sched_node *node, in ice_sched_set_node_bw_lmt() argument
3690 if (!pi) in ice_sched_set_node_bw_lmt()
3692 hw = pi->hw; in ice_sched_set_node_bw_lmt()
3694 ice_sched_rm_unused_rl_prof(pi); in ice_sched_set_node_bw_lmt()
3695 layer_num = ice_sched_get_rl_prof_layer(pi, rl_type, in ice_sched_set_node_bw_lmt()
3709 status = ice_sched_set_eir_srl_excl(pi, cfg_node, layer_num, rl_type, in ice_sched_set_node_bw_lmt()
3714 return ice_sched_set_node_bw_dflt(pi, cfg_node, rl_type, in ice_sched_set_node_bw_lmt()
3716 return ice_sched_set_node_bw(pi, cfg_node, rl_type, bw, layer_num); in ice_sched_set_node_bw_lmt()
3721 * @pi: port information structure
3730 ice_sched_set_node_bw_dflt_lmt(struct ice_port_info *pi, in ice_sched_set_node_bw_dflt_lmt() argument
3734 return ice_sched_set_node_bw_lmt(pi, node, rl_type, in ice_sched_set_node_bw_dflt_lmt()
3794 * @pi: port information structure
3804 ice_sched_set_q_bw_lmt(struct ice_port_info *pi, u16 vsi_handle, u8 tc, in ice_sched_set_q_bw_lmt() argument
3811 if (!ice_is_vsi_valid(pi->hw, vsi_handle)) in ice_sched_set_q_bw_lmt()
3813 mutex_lock(&pi->sched_lock); in ice_sched_set_q_bw_lmt()
3814 q_ctx = ice_get_lan_q_ctx(pi->hw, vsi_handle, tc, q_handle); in ice_sched_set_q_bw_lmt()
3817 node = ice_sched_find_node_by_teid(pi->root, q_ctx->q_teid); in ice_sched_set_q_bw_lmt()
3819 ice_debug(pi->hw, ICE_DBG_SCHED, "Wrong q_teid\n"); in ice_sched_set_q_bw_lmt()
3831 sel_layer = ice_sched_get_rl_prof_layer(pi, rl_type, in ice_sched_set_q_bw_lmt()
3833 if (sel_layer >= pi->hw->num_tx_sched_layers) { in ice_sched_set_q_bw_lmt()
3843 status = ice_sched_set_node_bw_dflt_lmt(pi, node, rl_type); in ice_sched_set_q_bw_lmt()
3845 status = ice_sched_set_node_bw_lmt(pi, node, rl_type, bw); in ice_sched_set_q_bw_lmt()
3851 mutex_unlock(&pi->sched_lock); in ice_sched_set_q_bw_lmt()
3857 * @pi: port information structure
3867 ice_cfg_q_bw_lmt(struct ice_port_info *pi, u16 vsi_handle, u8 tc, in ice_cfg_q_bw_lmt() argument
3870 return ice_sched_set_q_bw_lmt(pi, vsi_handle, tc, q_handle, rl_type, in ice_cfg_q_bw_lmt()
3876 * @pi: port information structure
3885 ice_cfg_q_bw_dflt_lmt(struct ice_port_info *pi, u16 vsi_handle, u8 tc, in ice_cfg_q_bw_dflt_lmt() argument
3888 return ice_sched_set_q_bw_lmt(pi, vsi_handle, tc, q_handle, rl_type, in ice_cfg_q_bw_dflt_lmt()
3894 * @pi: port information structure
3904 ice_sched_get_node_by_id_type(struct ice_port_info *pi, u32 id, in ice_sched_get_node_by_id_type() argument
3914 if (!ice_is_vsi_valid(pi->hw, vsi_handle)) in ice_sched_get_node_by_id_type()
3917 vsi_ctx = ice_get_vsi_ctx(pi->hw, vsi_handle); in ice_sched_get_node_by_id_type()
3927 tc_node = ice_sched_get_tc_node(pi, tc); in ice_sched_get_node_by_id_type()
3929 node = ice_sched_get_agg_node(pi, tc_node, id); in ice_sched_get_node_by_id_type()
3942 * @pi: port information structure
3953 ice_sched_set_node_bw_lmt_per_tc(struct ice_port_info *pi, u32 id, in ice_sched_set_node_bw_lmt_per_tc() argument
3960 if (!pi) in ice_sched_set_node_bw_lmt_per_tc()
3966 mutex_lock(&pi->sched_lock); in ice_sched_set_node_bw_lmt_per_tc()
3967 node = ice_sched_get_node_by_id_type(pi, id, agg_type, tc); in ice_sched_set_node_bw_lmt_per_tc()
3969 ice_debug(pi->hw, ICE_DBG_SCHED, "Wrong id, agg type, or tc\n"); in ice_sched_set_node_bw_lmt_per_tc()
3973 status = ice_sched_set_node_bw_dflt_lmt(pi, node, rl_type); in ice_sched_set_node_bw_lmt_per_tc()
3975 status = ice_sched_set_node_bw_lmt(pi, node, rl_type, bw); in ice_sched_set_node_bw_lmt_per_tc()
3978 mutex_unlock(&pi->sched_lock); in ice_sched_set_node_bw_lmt_per_tc()
3984 * @pi: port information structure
3994 ice_cfg_vsi_bw_lmt_per_tc(struct ice_port_info *pi, u16 vsi_handle, u8 tc, in ice_cfg_vsi_bw_lmt_per_tc() argument
3999 status = ice_sched_set_node_bw_lmt_per_tc(pi, vsi_handle, in ice_cfg_vsi_bw_lmt_per_tc()
4003 mutex_lock(&pi->sched_lock); in ice_cfg_vsi_bw_lmt_per_tc()
4004 status = ice_sched_save_vsi_bw(pi, vsi_handle, tc, rl_type, bw); in ice_cfg_vsi_bw_lmt_per_tc()
4005 mutex_unlock(&pi->sched_lock); in ice_cfg_vsi_bw_lmt_per_tc()
4012 * @pi: port information structure
4021 ice_cfg_vsi_bw_dflt_lmt_per_tc(struct ice_port_info *pi, u16 vsi_handle, u8 tc, in ice_cfg_vsi_bw_dflt_lmt_per_tc() argument
4026 status = ice_sched_set_node_bw_lmt_per_tc(pi, vsi_handle, in ice_cfg_vsi_bw_dflt_lmt_per_tc()
4031 mutex_lock(&pi->sched_lock); in ice_cfg_vsi_bw_dflt_lmt_per_tc()
4032 status = ice_sched_save_vsi_bw(pi, vsi_handle, tc, rl_type, in ice_cfg_vsi_bw_dflt_lmt_per_tc()
4034 mutex_unlock(&pi->sched_lock); in ice_cfg_vsi_bw_dflt_lmt_per_tc()
4120 struct ice_port_info *pi = hw->port_info; in ice_sched_replay_node_bw() local
4135 status = ice_sched_set_node_bw_lmt(pi, node, ICE_MIN_BW, in ice_sched_replay_node_bw()
4148 status = ice_sched_set_node_bw_lmt(pi, node, ICE_MAX_BW, in ice_sched_replay_node_bw()
4161 status = ice_sched_set_node_bw_lmt(pi, node, ICE_SHARED_BW, in ice_sched_replay_node_bw()
4168 * @pi: port info struct
4177 ice_sched_get_ena_tc_bitmap(struct ice_port_info *pi, in ice_sched_get_ena_tc_bitmap() argument
4186 (ice_sched_get_tc_node(pi, tc))) in ice_sched_get_ena_tc_bitmap()
4200 struct ice_port_info *pi = hw->port_info; in ice_sched_replay_agg() local
4203 mutex_lock(&pi->sched_lock); in ice_sched_replay_agg()
4212 ice_sched_get_ena_tc_bitmap(pi, in ice_sched_replay_agg()
4227 mutex_unlock(&pi->sched_lock); in ice_sched_replay_agg()
4239 struct ice_port_info *pi = hw->port_info; in ice_sched_replay_agg_vsi_preinit() local
4242 mutex_lock(&pi->sched_lock); in ice_sched_replay_agg_vsi_preinit()
4251 mutex_unlock(&pi->sched_lock); in ice_sched_replay_agg_vsi_preinit()
4267 struct ice_port_info *pi = hw->port_info; in ice_sched_replay_vsi_agg() local
4280 ice_sched_get_ena_tc_bitmap(pi, agg_info->replay_tc_bitmap, in ice_sched_replay_vsi_agg()
4289 ice_sched_get_ena_tc_bitmap(pi, agg_vsi_info->replay_tc_bitmap, in ice_sched_replay_vsi_agg()
4292 return ice_sched_assoc_vsi_to_agg(pi, agg_info->agg_id, vsi_handle, in ice_sched_replay_vsi_agg()
4306 struct ice_port_info *pi = hw->port_info; in ice_replay_vsi_agg() local
4309 mutex_lock(&pi->sched_lock); in ice_replay_vsi_agg()
4311 mutex_unlock(&pi->sched_lock); in ice_replay_vsi_agg()
4317 * @pi: port information structure
4323 int ice_sched_replay_q_bw(struct ice_port_info *pi, struct ice_q_ctx *q_ctx) in ice_sched_replay_q_bw() argument
4328 q_node = ice_sched_find_node_by_teid(pi->root, q_ctx->q_teid); in ice_sched_replay_q_bw()
4331 return ice_sched_replay_node_bw(pi->hw, q_node, &q_ctx->bw_t_info); in ice_sched_replay_q_bw()