Lines Matching full:pi
8 * @pi: port information structure
15 ice_sched_add_root_node(struct ice_port_info *pi, in ice_sched_add_root_node() argument
21 if (!pi) in ice_sched_add_root_node()
24 hw = pi->hw; in ice_sched_add_root_node()
39 pi->root = root; in ice_sched_add_root_node()
142 * @pi: port information structure
149 ice_sched_add_node(struct ice_port_info *pi, u8 layer, in ice_sched_add_node() argument
158 if (!pi) in ice_sched_add_node()
161 hw = pi->hw; in ice_sched_add_node()
164 parent = ice_sched_find_node_by_teid(pi->root, in ice_sched_add_node()
263 * @pi: port information structure
270 ice_sched_get_first_node(struct ice_port_info *pi, in ice_sched_get_first_node() argument
273 return pi->sib_head[parent->tc_num][layer]; in ice_sched_get_first_node()
278 * @pi: port information structure
283 struct ice_sched_node *ice_sched_get_tc_node(struct ice_port_info *pi, u8 tc) in ice_sched_get_tc_node() argument
287 if (!pi || !pi->root) in ice_sched_get_tc_node()
289 for (i = 0; i < pi->root->num_children; i++) in ice_sched_get_tc_node()
290 if (pi->root->children[i]->tc_num == tc) in ice_sched_get_tc_node()
291 return pi->root->children[i]; in ice_sched_get_tc_node()
297 * @pi: port information structure
304 void ice_free_sched_node(struct ice_port_info *pi, struct ice_sched_node *node) in ice_free_sched_node() argument
307 struct ice_hw *hw = pi->hw; in ice_free_sched_node()
315 ice_free_sched_node(pi, node->children[0]); in ice_free_sched_node()
341 p = ice_sched_get_first_node(pi, node, node->tx_sched_layer); in ice_free_sched_node()
351 if (pi->sib_head[node->tc_num][node->tx_sched_layer] == node) in ice_free_sched_node()
352 pi->sib_head[node->tc_num][node->tx_sched_layer] = in ice_free_sched_node()
687 * @pi: port information structure
691 static void ice_sched_clear_rl_prof(struct ice_port_info *pi) in ice_sched_clear_rl_prof() argument
695 for (ln = 0; ln < pi->hw->num_tx_sched_layers; ln++) { in ice_sched_clear_rl_prof()
700 &pi->rl_prof_list[ln], list_entry) { in ice_sched_clear_rl_prof()
701 struct ice_hw *hw = pi->hw; in ice_sched_clear_rl_prof()
745 * @pi: port information structure
749 static void ice_sched_clear_tx_topo(struct ice_port_info *pi) in ice_sched_clear_tx_topo() argument
751 if (!pi) in ice_sched_clear_tx_topo()
754 ice_sched_clear_rl_prof(pi); in ice_sched_clear_tx_topo()
755 if (pi->root) { in ice_sched_clear_tx_topo()
756 ice_free_sched_node(pi, pi->root); in ice_sched_clear_tx_topo()
757 pi->root = NULL; in ice_sched_clear_tx_topo()
763 * @pi: port information structure
767 void ice_sched_clear_port(struct ice_port_info *pi) in ice_sched_clear_port() argument
769 if (!pi || pi->port_state != ICE_SCHED_PORT_STATE_READY) in ice_sched_clear_port()
772 pi->port_state = ICE_SCHED_PORT_STATE_INIT; in ice_sched_clear_port()
773 mutex_lock(&pi->sched_lock); in ice_sched_clear_port()
774 ice_sched_clear_tx_topo(pi); in ice_sched_clear_port()
775 mutex_unlock(&pi->sched_lock); in ice_sched_clear_port()
776 mutex_destroy(&pi->sched_lock); in ice_sched_clear_port()
805 * @pi: port information structure
816 ice_sched_add_elems(struct ice_port_info *pi, struct ice_sched_node *tc_node, in ice_sched_add_elems() argument
824 struct ice_hw *hw = pi->hw; in ice_sched_add_elems()
864 status = ice_sched_add_node(pi, layer, &buf->generic[i]); in ice_sched_add_elems()
885 prev = ice_sched_get_first_node(pi, tc_node, layer); in ice_sched_add_elems()
893 if (!pi->sib_head[tc_node->tc_num][layer]) in ice_sched_add_elems()
894 pi->sib_head[tc_node->tc_num][layer] = new_node; in ice_sched_add_elems()
906 * @pi: port information structure
917 ice_sched_add_nodes_to_layer(struct ice_port_info *pi, in ice_sched_add_nodes_to_layer() argument
926 struct ice_hw *hw = pi->hw; in ice_sched_add_nodes_to_layer()
953 status = ice_sched_add_nodes_to_layer(pi, tc_node, in ice_sched_add_nodes_to_layer()
980 status = ice_sched_add_nodes_to_layer(pi, tc_node, parent, in ice_sched_add_nodes_to_layer()
988 status = ice_sched_add_elems(pi, tc_node, parent, layer, num_nodes, in ice_sched_add_nodes_to_layer()
1030 * @pi: port information structure
1035 static void ice_rm_dflt_leaf_node(struct ice_port_info *pi) in ice_rm_dflt_leaf_node() argument
1039 node = pi->root; in ice_rm_dflt_leaf_node()
1050 status = ice_sched_remove_elems(pi->hw, node->parent, 1, &teid); in ice_rm_dflt_leaf_node()
1052 ice_free_sched_node(pi, node); in ice_rm_dflt_leaf_node()
1058 * @pi: port information structure
1063 static void ice_sched_rm_dflt_nodes(struct ice_port_info *pi) in ice_sched_rm_dflt_nodes() argument
1067 ice_rm_dflt_leaf_node(pi); in ice_sched_rm_dflt_nodes()
1070 node = pi->root; in ice_sched_rm_dflt_nodes()
1072 if (node->tx_sched_layer >= pi->hw->sw_entry_point_layer && in ice_sched_rm_dflt_nodes()
1075 ice_free_sched_node(pi, node); in ice_sched_rm_dflt_nodes()
1087 * @pi: port info structure for the tree to cleanup
1093 enum ice_status ice_sched_init_port(struct ice_port_info *pi) in ice_sched_init_port() argument
1102 if (!pi) in ice_sched_init_port()
1104 hw = pi->hw; in ice_sched_init_port()
1112 status = ice_aq_get_dflt_topo(hw, pi->lport, buf, ICE_AQ_MAX_BUF_LEN, in ice_sched_init_port()
1141 pi->last_node_teid = in ice_sched_init_port()
1144 pi->last_node_teid = in ice_sched_init_port()
1148 status = ice_sched_add_root_node(pi, &buf[0].generic[0]); in ice_sched_init_port()
1163 status = ice_sched_add_node(pi, j, &buf[i].generic[j]); in ice_sched_init_port()
1170 if (pi->root) in ice_sched_init_port()
1171 ice_sched_rm_dflt_nodes(pi); in ice_sched_init_port()
1174 pi->port_state = ICE_SCHED_PORT_STATE_READY; in ice_sched_init_port()
1175 mutex_init(&pi->sched_lock); in ice_sched_init_port()
1177 INIT_LIST_HEAD(&pi->rl_prof_list[i]); in ice_sched_init_port()
1180 if (status && pi->root) { in ice_sched_init_port()
1181 ice_free_sched_node(pi, pi->root); in ice_sched_init_port()
1182 pi->root = NULL; in ice_sched_init_port()
1280 * @pi: port information structure
1290 ice_sched_get_free_qgrp(struct ice_port_info *pi, in ice_sched_get_free_qgrp() argument
1310 if (ice_sched_find_node_in_subtree(pi->hw, vsi_node, qgrp_node)) in ice_sched_get_free_qgrp()
1327 * @pi: port information structure
1335 ice_sched_get_free_qparent(struct ice_port_info *pi, u16 vsi_handle, u8 tc, in ice_sched_get_free_qparent() argument
1343 qgrp_layer = ice_sched_get_qgrp_layer(pi->hw); in ice_sched_get_free_qparent()
1344 max_children = pi->hw->max_children[qgrp_layer]; in ice_sched_get_free_qparent()
1346 vsi_ctx = ice_get_vsi_ctx(pi->hw, vsi_handle); in ice_sched_get_free_qparent()
1355 qgrp_node = ice_sched_get_first_node(pi, vsi_node, qgrp_layer); in ice_sched_get_free_qparent()
1358 if (ice_sched_find_node_in_subtree(pi->hw, vsi_node, qgrp_node)) in ice_sched_get_free_qparent()
1366 return ice_sched_get_free_qgrp(pi, vsi_node, qgrp_node, owner); in ice_sched_get_free_qparent()
1428 * @pi: port information structure
1438 ice_sched_add_vsi_child_nodes(struct ice_port_info *pi, u16 vsi_handle, in ice_sched_add_vsi_child_nodes() argument
1443 struct ice_hw *hw = pi->hw; in ice_sched_add_vsi_child_nodes()
1456 status = ice_sched_add_nodes_to_layer(pi, tc_node, parent, i, in ice_sched_add_vsi_child_nodes()
1533 * @pi: port information structure
1542 ice_sched_add_vsi_support_nodes(struct ice_port_info *pi, u16 vsi_handle, in ice_sched_add_vsi_support_nodes() argument
1551 if (!pi) in ice_sched_add_vsi_support_nodes()
1554 vsil = ice_sched_get_vsi_layer(pi->hw); in ice_sched_add_vsi_support_nodes()
1555 for (i = pi->hw->sw_entry_point_layer; i <= vsil; i++) { in ice_sched_add_vsi_support_nodes()
1556 status = ice_sched_add_nodes_to_layer(pi, tc_node, parent, in ice_sched_add_vsi_support_nodes()
1584 * @pi: port information structure
1591 ice_sched_add_vsi_to_topo(struct ice_port_info *pi, u16 vsi_handle, u8 tc) in ice_sched_add_vsi_to_topo() argument
1595 struct ice_hw *hw = pi->hw; in ice_sched_add_vsi_to_topo()
1597 tc_node = ice_sched_get_tc_node(pi, tc); in ice_sched_add_vsi_to_topo()
1605 return ice_sched_add_vsi_support_nodes(pi, vsi_handle, tc_node, in ice_sched_add_vsi_to_topo()
1611 * @pi: port information structure
1620 ice_sched_update_vsi_child_nodes(struct ice_port_info *pi, u16 vsi_handle, in ice_sched_update_vsi_child_nodes() argument
1628 struct ice_hw *hw = pi->hw; in ice_sched_update_vsi_child_nodes()
1631 tc_node = ice_sched_get_tc_node(pi, tc); in ice_sched_update_vsi_child_nodes()
1660 status = ice_sched_add_vsi_child_nodes(pi, vsi_handle, tc_node, in ice_sched_update_vsi_child_nodes()
1671 * @pi: port information structure
1683 ice_sched_cfg_vsi(struct ice_port_info *pi, u16 vsi_handle, u8 tc, u16 maxqs, in ice_sched_cfg_vsi() argument
1689 struct ice_hw *hw = pi->hw; in ice_sched_cfg_vsi()
1691 ice_debug(pi->hw, ICE_DBG_SCHED, "add/config VSI %d\n", vsi_handle); in ice_sched_cfg_vsi()
1692 tc_node = ice_sched_get_tc_node(pi, tc); in ice_sched_cfg_vsi()
1715 status = ice_sched_add_vsi_to_topo(pi, vsi_handle, tc); in ice_sched_cfg_vsi()
1733 status = ice_sched_update_vsi_child_nodes(pi, vsi_handle, tc, maxqs, in ice_sched_cfg_vsi()
1752 * @pi: port information structure
1758 static void ice_sched_rm_agg_vsi_info(struct ice_port_info *pi, u16 vsi_handle) in ice_sched_rm_agg_vsi_info() argument
1763 list_for_each_entry_safe(agg_info, atmp, &pi->hw->agg_list, in ice_sched_rm_agg_vsi_info()
1772 devm_kfree(ice_hw_to_dev(pi->hw), in ice_sched_rm_agg_vsi_info()
1798 * @pi: port information structure
1806 ice_sched_rm_vsi_cfg(struct ice_port_info *pi, u16 vsi_handle, u8 owner) in ice_sched_rm_vsi_cfg() argument
1812 ice_debug(pi->hw, ICE_DBG_SCHED, "removing VSI %d\n", vsi_handle); in ice_sched_rm_vsi_cfg()
1813 if (!ice_is_vsi_valid(pi->hw, vsi_handle)) in ice_sched_rm_vsi_cfg()
1815 mutex_lock(&pi->sched_lock); in ice_sched_rm_vsi_cfg()
1816 vsi_ctx = ice_get_vsi_ctx(pi->hw, vsi_handle); in ice_sched_rm_vsi_cfg()
1824 tc_node = ice_sched_get_tc_node(pi, i); in ice_sched_rm_vsi_cfg()
1828 vsi_node = ice_sched_get_vsi_node(pi->hw, tc_node, vsi_handle); in ice_sched_rm_vsi_cfg()
1833 ice_debug(pi->hw, ICE_DBG_SCHED, in ice_sched_rm_vsi_cfg()
1840 ice_free_sched_node(pi, vsi_node->children[j]); in ice_sched_rm_vsi_cfg()
1852 ice_free_sched_node(pi, vsi_node); in ice_sched_rm_vsi_cfg()
1856 ice_sched_rm_agg_vsi_info(pi, vsi_handle); in ice_sched_rm_vsi_cfg()
1864 mutex_unlock(&pi->sched_lock); in ice_sched_rm_vsi_cfg()
1870 * @pi: port information structure
1876 enum ice_status ice_rm_vsi_lan_cfg(struct ice_port_info *pi, u16 vsi_handle) in ice_rm_vsi_lan_cfg() argument
1878 return ice_sched_rm_vsi_cfg(pi, vsi_handle, ICE_SCHED_NODE_OWNER_LAN); in ice_rm_vsi_lan_cfg()
1883 * @pi: port information structure
1888 static void ice_sched_rm_unused_rl_prof(struct ice_port_info *pi) in ice_sched_rm_unused_rl_prof() argument
1892 for (ln = 0; ln < pi->hw->num_tx_sched_layers; ln++) { in ice_sched_rm_unused_rl_prof()
1897 &pi->rl_prof_list[ln], list_entry) { in ice_sched_rm_unused_rl_prof()
1898 if (!ice_sched_del_rl_profile(pi->hw, rl_prof_elem)) in ice_sched_rm_unused_rl_prof()
1899 ice_debug(pi->hw, ICE_DBG_SCHED, in ice_sched_rm_unused_rl_prof()
2160 * @pi: port information structure
2172 ice_sched_add_rl_profile(struct ice_port_info *pi, in ice_sched_add_rl_profile() argument
2198 if (!pi) in ice_sched_add_rl_profile()
2200 hw = pi->hw; in ice_sched_add_rl_profile()
2201 list_for_each_entry(rl_prof_elem, &pi->rl_prof_list[layer_num], in ice_sched_add_rl_profile()
2234 list_add(&rl_prof_elem->list_entry, &pi->rl_prof_list[layer_num]); in ice_sched_add_rl_profile()
2347 * @pi: port information structure
2354 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
2357 struct ice_hw *hw = pi->hw; in ice_sched_get_rl_prof_layer()
2413 * @pi: port information structure
2423 ice_sched_rm_rl_profile(struct ice_port_info *pi, u8 layer_num, u8 profile_type, in ice_sched_rm_rl_profile() argument
2432 list_for_each_entry(rl_prof_elem, &pi->rl_prof_list[layer_num], in ice_sched_rm_rl_profile()
2442 status = ice_sched_del_rl_profile(pi->hw, rl_prof_elem); in ice_sched_rm_rl_profile()
2444 ice_debug(pi->hw, ICE_DBG_SCHED, in ice_sched_rm_rl_profile()
2455 * @pi: port information structure
2465 ice_sched_set_node_bw_dflt(struct ice_port_info *pi, in ice_sched_set_node_bw_dflt() argument
2475 hw = pi->hw; in ice_sched_set_node_bw_dflt()
2505 return ice_sched_rm_rl_profile(pi, layer_num, profile_type, old_id); in ice_sched_set_node_bw_dflt()
2510 * @pi: port information structure
2522 ice_sched_set_eir_srl_excl(struct ice_port_info *pi, in ice_sched_set_eir_srl_excl() argument
2539 return ice_sched_set_node_bw_dflt(pi, node, ICE_MAX_BW, in ice_sched_set_eir_srl_excl()
2546 return ice_sched_set_node_bw_dflt(pi, node, in ice_sched_set_eir_srl_excl()
2555 * @pi: port information structure
2566 ice_sched_set_node_bw(struct ice_port_info *pi, struct ice_sched_node *node, in ice_sched_set_node_bw() argument
2571 struct ice_hw *hw = pi->hw; in ice_sched_set_node_bw()
2574 rl_prof_info = ice_sched_add_rl_profile(pi, rl_type, bw, layer_num); in ice_sched_set_node_bw()
2596 return ice_sched_rm_rl_profile(pi, layer_num, in ice_sched_set_node_bw()
2603 * @pi: port information structure
2612 ice_sched_set_node_bw_lmt(struct ice_port_info *pi, struct ice_sched_node *node, in ice_sched_set_node_bw_lmt() argument
2621 if (!pi) in ice_sched_set_node_bw_lmt()
2623 hw = pi->hw; in ice_sched_set_node_bw_lmt()
2625 ice_sched_rm_unused_rl_prof(pi); in ice_sched_set_node_bw_lmt()
2626 layer_num = ice_sched_get_rl_prof_layer(pi, rl_type, in ice_sched_set_node_bw_lmt()
2640 status = ice_sched_set_eir_srl_excl(pi, cfg_node, layer_num, rl_type, in ice_sched_set_node_bw_lmt()
2645 return ice_sched_set_node_bw_dflt(pi, cfg_node, rl_type, in ice_sched_set_node_bw_lmt()
2647 return ice_sched_set_node_bw(pi, cfg_node, rl_type, bw, layer_num); in ice_sched_set_node_bw_lmt()
2652 * @pi: port information structure
2661 ice_sched_set_node_bw_dflt_lmt(struct ice_port_info *pi, in ice_sched_set_node_bw_dflt_lmt() argument
2665 return ice_sched_set_node_bw_lmt(pi, node, rl_type, in ice_sched_set_node_bw_dflt_lmt()
2725 * @pi: port information structure
2735 ice_sched_set_q_bw_lmt(struct ice_port_info *pi, u16 vsi_handle, u8 tc, in ice_sched_set_q_bw_lmt() argument
2742 if (!ice_is_vsi_valid(pi->hw, vsi_handle)) in ice_sched_set_q_bw_lmt()
2744 mutex_lock(&pi->sched_lock); in ice_sched_set_q_bw_lmt()
2745 q_ctx = ice_get_lan_q_ctx(pi->hw, vsi_handle, tc, q_handle); in ice_sched_set_q_bw_lmt()
2748 node = ice_sched_find_node_by_teid(pi->root, q_ctx->q_teid); in ice_sched_set_q_bw_lmt()
2750 ice_debug(pi->hw, ICE_DBG_SCHED, "Wrong q_teid\n"); in ice_sched_set_q_bw_lmt()
2762 sel_layer = ice_sched_get_rl_prof_layer(pi, rl_type, in ice_sched_set_q_bw_lmt()
2764 if (sel_layer >= pi->hw->num_tx_sched_layers) { in ice_sched_set_q_bw_lmt()
2774 status = ice_sched_set_node_bw_dflt_lmt(pi, node, rl_type); in ice_sched_set_q_bw_lmt()
2776 status = ice_sched_set_node_bw_lmt(pi, node, rl_type, bw); in ice_sched_set_q_bw_lmt()
2782 mutex_unlock(&pi->sched_lock); in ice_sched_set_q_bw_lmt()
2788 * @pi: port information structure
2798 ice_cfg_q_bw_lmt(struct ice_port_info *pi, u16 vsi_handle, u8 tc, in ice_cfg_q_bw_lmt() argument
2801 return ice_sched_set_q_bw_lmt(pi, vsi_handle, tc, q_handle, rl_type, in ice_cfg_q_bw_lmt()
2807 * @pi: port information structure
2816 ice_cfg_q_bw_dflt_lmt(struct ice_port_info *pi, u16 vsi_handle, u8 tc, in ice_cfg_q_bw_dflt_lmt() argument
2819 return ice_sched_set_q_bw_lmt(pi, vsi_handle, tc, q_handle, rl_type, in ice_cfg_q_bw_dflt_lmt()
2904 struct ice_port_info *pi = hw->port_info; in ice_sched_replay_node_bw() local
2919 status = ice_sched_set_node_bw_lmt(pi, node, ICE_MIN_BW, in ice_sched_replay_node_bw()
2932 status = ice_sched_set_node_bw_lmt(pi, node, ICE_MAX_BW, in ice_sched_replay_node_bw()
2945 status = ice_sched_set_node_bw_lmt(pi, node, ICE_SHARED_BW, in ice_sched_replay_node_bw()
2952 * @pi: port information structure
2959 ice_sched_replay_q_bw(struct ice_port_info *pi, struct ice_q_ctx *q_ctx) in ice_sched_replay_q_bw() argument
2964 q_node = ice_sched_find_node_by_teid(pi->root, q_ctx->q_teid); in ice_sched_replay_q_bw()
2967 return ice_sched_replay_node_bw(pi->hw, q_node, &q_ctx->bw_t_info); in ice_sched_replay_q_bw()