Lines Matching +full:dcb +full:- +full:algorithm
1 // SPDX-License-Identifier: GPL-2.0
39 put_unaligned_be64(pci_get_dsn(pf->pdev), dsn); in ice_info_get_dsn()
41 snprintf(ctx->buf, sizeof(ctx->buf), "%8phD", dsn); in ice_info_get_dsn()
46 struct ice_hw *hw = &pf->hw; in ice_info_pba()
49 status = ice_read_pba_string(hw, (u8 *)ctx->buf, sizeof(ctx->buf)); in ice_info_pba()
58 struct ice_hw *hw = &pf->hw; in ice_info_fw_mgmt()
60 snprintf(ctx->buf, sizeof(ctx->buf), "%u.%u.%u", in ice_info_fw_mgmt()
61 hw->fw_maj_ver, hw->fw_min_ver, hw->fw_patch); in ice_info_fw_mgmt()
66 struct ice_hw *hw = &pf->hw; in ice_info_fw_api()
68 snprintf(ctx->buf, sizeof(ctx->buf), "%u.%u.%u", hw->api_maj_ver, in ice_info_fw_api()
69 hw->api_min_ver, hw->api_patch); in ice_info_fw_api()
74 struct ice_hw *hw = &pf->hw; in ice_info_fw_build()
76 snprintf(ctx->buf, sizeof(ctx->buf), "0x%08x", hw->fw_build); in ice_info_fw_build()
81 struct ice_orom_info *orom = &pf->hw.flash.orom; in ice_info_orom_ver()
83 snprintf(ctx->buf, sizeof(ctx->buf), "%u.%u.%u", in ice_info_orom_ver()
84 orom->major, orom->build, orom->patch); in ice_info_orom_ver()
91 struct ice_orom_info *orom = &ctx->pending_orom; in ice_info_pending_orom_ver()
93 if (ctx->dev_caps.common_cap.nvm_update_pending_orom) in ice_info_pending_orom_ver()
94 snprintf(ctx->buf, sizeof(ctx->buf), "%u.%u.%u", in ice_info_pending_orom_ver()
95 orom->major, orom->build, orom->patch); in ice_info_pending_orom_ver()
100 struct ice_nvm_info *nvm = &pf->hw.flash.nvm; in ice_info_nvm_ver()
102 snprintf(ctx->buf, sizeof(ctx->buf), "%x.%02x", nvm->major, nvm->minor); in ice_info_nvm_ver()
109 struct ice_nvm_info *nvm = &ctx->pending_nvm; in ice_info_pending_nvm_ver()
111 if (ctx->dev_caps.common_cap.nvm_update_pending_nvm) in ice_info_pending_nvm_ver()
112 snprintf(ctx->buf, sizeof(ctx->buf), "%x.%02x", in ice_info_pending_nvm_ver()
113 nvm->major, nvm->minor); in ice_info_pending_nvm_ver()
118 struct ice_nvm_info *nvm = &pf->hw.flash.nvm; in ice_info_eetrack()
120 snprintf(ctx->buf, sizeof(ctx->buf), "0x%08x", nvm->eetrack); in ice_info_eetrack()
126 struct ice_nvm_info *nvm = &ctx->pending_nvm; in ice_info_pending_eetrack()
128 if (ctx->dev_caps.common_cap.nvm_update_pending_nvm) in ice_info_pending_eetrack()
129 snprintf(ctx->buf, sizeof(ctx->buf), "0x%08x", nvm->eetrack); in ice_info_pending_eetrack()
134 struct ice_hw *hw = &pf->hw; in ice_info_ddp_pkg_name()
136 snprintf(ctx->buf, sizeof(ctx->buf), "%s", hw->active_pkg_name); in ice_info_ddp_pkg_name()
142 struct ice_pkg_ver *pkg = &pf->hw.active_pkg_ver; in ice_info_ddp_pkg_version()
144 snprintf(ctx->buf, sizeof(ctx->buf), "%u.%u.%u.%u", in ice_info_ddp_pkg_version()
145 pkg->major, pkg->minor, pkg->update, pkg->draft); in ice_info_ddp_pkg_version()
151 snprintf(ctx->buf, sizeof(ctx->buf), "0x%08x", pf->hw.active_track_id); in ice_info_ddp_pkg_bundle_id()
156 struct ice_netlist_info *netlist = &pf->hw.flash.netlist; in ice_info_netlist_ver()
159 snprintf(ctx->buf, sizeof(ctx->buf), "%x.%x.%x-%x.%x.%x", in ice_info_netlist_ver()
160 netlist->major, netlist->minor, in ice_info_netlist_ver()
161 netlist->type >> 16, netlist->type & 0xFFFF, in ice_info_netlist_ver()
162 netlist->rev, netlist->cust_ver); in ice_info_netlist_ver()
167 struct ice_netlist_info *netlist = &pf->hw.flash.netlist; in ice_info_netlist_build()
169 snprintf(ctx->buf, sizeof(ctx->buf), "0x%08x", netlist->hash); in ice_info_netlist_build()
176 struct ice_netlist_info *netlist = &ctx->pending_netlist; in ice_info_pending_netlist_ver()
179 if (ctx->dev_caps.common_cap.nvm_update_pending_netlist) in ice_info_pending_netlist_ver()
180 snprintf(ctx->buf, sizeof(ctx->buf), "%x.%x.%x-%x.%x.%x", in ice_info_pending_netlist_ver()
181 netlist->major, netlist->minor, in ice_info_pending_netlist_ver()
182 netlist->type >> 16, netlist->type & 0xFFFF, in ice_info_pending_netlist_ver()
183 netlist->rev, netlist->cust_ver); in ice_info_pending_netlist_ver()
190 struct ice_netlist_info *netlist = &ctx->pending_netlist; in ice_info_pending_netlist_build()
192 if (ctx->dev_caps.common_cap.nvm_update_pending_netlist) in ice_info_pending_netlist_build()
193 snprintf(ctx->buf, sizeof(ctx->buf), "0x%08x", netlist->hash); in ice_info_pending_netlist_build()
202 if (ice_aq_get_cgu_info(&pf->hw, &id, &cfg_ver, &fw_ver)) in ice_info_cgu_fw_build()
204 snprintf(ctx->buf, sizeof(ctx->buf), "%u.%u.%u", id, cfg_ver, fw_ver); in ice_info_cgu_fw_build()
211 snprintf(ctx->buf, sizeof(ctx->buf), "%u", pf->hw.cgu_part_number); in ice_info_cgu_id()
261 * ice_devlink_info_get - .info_get devlink handler
277 struct ice_hw *hw = &pf->hw; in ice_devlink_info_get()
290 return -ENOMEM; in ice_devlink_info_get()
293 err = ice_discover_dev_caps(hw, &ctx->dev_caps); in ice_devlink_info_get()
296 err, ice_aq_str(hw->adminq.sq_last_status)); in ice_devlink_info_get()
301 if (ctx->dev_caps.common_cap.nvm_update_pending_orom) { in ice_devlink_info_get()
302 err = ice_get_inactive_orom_ver(hw, &ctx->pending_orom); in ice_devlink_info_get()
305 err, ice_aq_str(hw->adminq.sq_last_status)); in ice_devlink_info_get()
308 ctx->dev_caps.common_cap.nvm_update_pending_orom = false; in ice_devlink_info_get()
312 if (ctx->dev_caps.common_cap.nvm_update_pending_nvm) { in ice_devlink_info_get()
313 err = ice_get_inactive_nvm_ver(hw, &ctx->pending_nvm); in ice_devlink_info_get()
316 err, ice_aq_str(hw->adminq.sq_last_status)); in ice_devlink_info_get()
319 ctx->dev_caps.common_cap.nvm_update_pending_nvm = false; in ice_devlink_info_get()
323 if (ctx->dev_caps.common_cap.nvm_update_pending_netlist) { in ice_devlink_info_get()
324 err = ice_get_inactive_netlist_ver(hw, &ctx->pending_netlist); in ice_devlink_info_get()
327 err, ice_aq_str(hw->adminq.sq_last_status)); in ice_devlink_info_get()
330 ctx->dev_caps.common_cap.nvm_update_pending_netlist = false; in ice_devlink_info_get()
336 err = devlink_info_serial_number_put(req, ctx->buf); in ice_devlink_info_get()
346 memset(ctx->buf, 0, sizeof(ctx->buf)); in ice_devlink_info_get()
355 if (ctx->buf[0] == '\0' && ice_devlink_versions[i].fallback) in ice_devlink_info_get()
359 if (ctx->buf[0] == '\0') in ice_devlink_info_get()
364 err = devlink_info_version_fixed_put(req, key, ctx->buf); in ice_devlink_info_get()
372 ctx->buf, in ice_devlink_info_get()
381 ctx->buf, in ice_devlink_info_get()
397 * ice_devlink_reload_empr_start - Start EMP reset to activate new firmware
415 struct ice_hw *hw = &pf->hw; in ice_devlink_reload_empr_start()
430 return -ECANCELED; in ice_devlink_reload_empr_start()
433 if (pf->fw_emp_reset_disabled) { in ice_devlink_reload_empr_start()
435 return -ECANCELED; in ice_devlink_reload_empr_start()
443 err, ice_aq_str(hw->adminq.sq_last_status)); in ice_devlink_reload_empr_start()
452 * ice_devlink_reinit_down - unload given PF
466 * ice_devlink_reload_down - prepare for reload
486 return -EOPNOTSUPP; in ice_devlink_reload_down()
491 return -EOPNOTSUPP; in ice_devlink_reload_down()
496 return -EOPNOTSUPP; in ice_devlink_reload_down()
504 return -EOPNOTSUPP; in ice_devlink_reload_down()
509 * ice_devlink_reload_empr_finish - Wait for EMP reset to finish
533 * ice_get_tx_topo_user_sel - Read user's choice from flash
544 struct ice_hw *hw = &pf->hw; in ice_get_tx_topo_user_sel()
568 * ice_update_tx_topo_user_sel - Save user's preference in flash
581 struct ice_hw *hw = &pf->hw; in ice_update_tx_topo_user_sel()
608 * ice_devlink_tx_sched_layers_get - Get tx_scheduling_layers parameter
621 err = ice_get_tx_topo_user_sel(pf, &ctx->val.vu8); in ice_devlink_tx_sched_layers_get()
629 * ice_devlink_tx_sched_layers_set - Set tx_scheduling_layers parameter
644 err = ice_update_tx_topo_user_sel(pf, ctx->val.vu8); in ice_devlink_tx_sched_layers_set()
655 * ice_devlink_tx_sched_layers_validate - Validate passed tx_scheduling_layers
663 * - 5 - five layers Tx Scheduler Topology Tree
664 * - 9 - nine layers Tx Scheduler Topology Tree
676 return -EINVAL; in ice_devlink_tx_sched_layers_validate()
683 * ice_tear_down_devlink_rate_tree - removes devlink-rate exported tree
697 mutex_lock(&pf->vfs.table_lock); in ice_tear_down_devlink_rate_tree()
699 if (vf->devlink_port.devlink_rate) in ice_tear_down_devlink_rate_tree()
700 devl_rate_leaf_destroy(&vf->devlink_port); in ice_tear_down_devlink_rate_tree()
702 mutex_unlock(&pf->vfs.table_lock); in ice_tear_down_devlink_rate_tree()
709 * ice_enable_custom_tx - try to enable custom Tx feature
713 * it's not possible to enable it, if DCB or ADQ is active.
717 struct ice_port_info *pi = ice_get_main_vsi(pf)->port_info; in ice_enable_custom_tx()
720 if (pi->is_custom_tx_enabled) in ice_enable_custom_tx()
730 dev_err(dev, "DCB active, can't modify Tx scheduler tree\n"); in ice_enable_custom_tx()
734 pi->is_custom_tx_enabled = true; in ice_enable_custom_tx()
740 * ice_traverse_tx_tree - traverse Tx scheduler tree
747 * entire structure to the devlink-rate.
757 if (node->rate_node) in ice_traverse_tx_tree()
761 if (node->parent == tc_node) { in ice_traverse_tx_tree()
763 rate_node = devl_rate_node_create(devlink, node, node->name, NULL); in ice_traverse_tx_tree()
764 } else if (node->vsi_handle && in ice_traverse_tx_tree()
765 pf->vsi[node->vsi_handle]->type == ICE_VSI_VF && in ice_traverse_tx_tree()
766 pf->vsi[node->vsi_handle]->vf) { in ice_traverse_tx_tree()
767 vf = pf->vsi[node->vsi_handle]->vf; in ice_traverse_tx_tree()
768 if (!vf->devlink_port.devlink_rate) in ice_traverse_tx_tree()
772 devl_rate_leaf_create(&vf->devlink_port, node, in ice_traverse_tx_tree()
773 node->parent->rate_node); in ice_traverse_tx_tree()
774 } else if (node->vsi_handle && in ice_traverse_tx_tree()
775 pf->vsi[node->vsi_handle]->type == ICE_VSI_SF && in ice_traverse_tx_tree()
776 pf->vsi[node->vsi_handle]->sf) { in ice_traverse_tx_tree()
777 sf = pf->vsi[node->vsi_handle]->sf; in ice_traverse_tx_tree()
778 if (!sf->devlink_port.devlink_rate) in ice_traverse_tx_tree()
782 devl_rate_leaf_create(&sf->devlink_port, node, in ice_traverse_tx_tree()
783 node->parent->rate_node); in ice_traverse_tx_tree()
784 } else if (node->info.data.elem_type != ICE_AQC_ELEM_TYPE_LEAF && in ice_traverse_tx_tree()
785 node->parent->rate_node) { in ice_traverse_tx_tree()
786 rate_node = devl_rate_node_create(devlink, node, node->name, in ice_traverse_tx_tree()
787 node->parent->rate_node); in ice_traverse_tx_tree()
791 node->rate_node = rate_node; in ice_traverse_tx_tree()
794 for (i = 0; i < node->num_children; i++) in ice_traverse_tx_tree()
795 ice_traverse_tx_tree(devlink, node->children[i], tc_node, pf); in ice_traverse_tx_tree()
799 * ice_devlink_rate_init_tx_topology - export Tx scheduler tree to devlink rate
808 struct ice_port_info *pi = vsi->port_info; in ice_devlink_rate_init_tx_topology()
810 struct ice_pf *pf = vsi->back; in ice_devlink_rate_init_tx_topology()
813 tc_node = pi->root->children[0]; in ice_devlink_rate_init_tx_topology()
814 mutex_lock(&pi->sched_lock); in ice_devlink_rate_init_tx_topology()
815 for (i = 0; i < tc_node->num_children; i++) in ice_devlink_rate_init_tx_topology()
816 ice_traverse_tx_tree(devlink, tc_node->children[i], tc_node, pf); in ice_devlink_rate_init_tx_topology()
817 mutex_unlock(&pi->sched_lock); in ice_devlink_rate_init_tx_topology()
824 node->rate_node = NULL; in ice_clear_rate_nodes()
826 for (int i = 0; i < node->num_children; i++) in ice_clear_rate_nodes()
827 ice_clear_rate_nodes(node->children[i]); in ice_clear_rate_nodes()
831 * ice_devlink_rate_clear_tx_topology - clear node->rate_node
839 struct ice_port_info *pi = vsi->port_info; in ice_devlink_rate_clear_tx_topology()
841 mutex_lock(&pi->sched_lock); in ice_devlink_rate_clear_tx_topology()
842 ice_clear_rate_nodes(pi->root->children[0]); in ice_devlink_rate_clear_tx_topology()
843 mutex_unlock(&pi->sched_lock); in ice_devlink_rate_clear_tx_topology()
847 * ice_set_object_tx_share - sets node scheduling parameter
860 mutex_lock(&pi->sched_lock); in ice_set_object_tx_share()
862 node->tx_share = div_u64(bw, 125); in ice_set_object_tx_share()
863 status = ice_sched_set_node_bw_lmt(pi, node, ICE_MIN_BW, node->tx_share); in ice_set_object_tx_share()
864 mutex_unlock(&pi->sched_lock); in ice_set_object_tx_share()
873 * ice_set_object_tx_max - sets node scheduling parameter
886 mutex_lock(&pi->sched_lock); in ice_set_object_tx_max()
888 node->tx_max = div_u64(bw, 125); in ice_set_object_tx_max()
889 status = ice_sched_set_node_bw_lmt(pi, node, ICE_MAX_BW, node->tx_max); in ice_set_object_tx_max()
890 mutex_unlock(&pi->sched_lock); in ice_set_object_tx_max()
899 * ice_set_object_tx_priority - sets node scheduling parameter
914 return -EINVAL; in ice_set_object_tx_priority()
917 mutex_lock(&pi->sched_lock); in ice_set_object_tx_priority()
918 node->tx_priority = priority; in ice_set_object_tx_priority()
919 status = ice_sched_set_node_priority(pi, node, node->tx_priority); in ice_set_object_tx_priority()
920 mutex_unlock(&pi->sched_lock); in ice_set_object_tx_priority()
929 * ice_set_object_tx_weight - sets node scheduling parameter
935 * This function sets node weight for WFQ algorithm.
944 return -EINVAL; in ice_set_object_tx_weight()
947 mutex_lock(&pi->sched_lock); in ice_set_object_tx_weight()
948 node->tx_weight = weight; in ice_set_object_tx_weight()
949 status = ice_sched_set_node_weight(pi, node, node->tx_weight); in ice_set_object_tx_weight()
950 mutex_unlock(&pi->sched_lock); in ice_set_object_tx_weight()
959 * ice_get_pi_from_dev_rate - get port info from devlink_rate
966 struct ice_pf *pf = devlink_priv(rate_node->devlink); in ice_get_pi_from_dev_rate()
968 return ice_get_main_vsi(pf)->port_info; in ice_get_pi_from_dev_rate()
979 if (!ice_enable_custom_tx(devlink_priv(rate_node->devlink))) in ice_devlink_rate_node_new()
980 return -EBUSY; in ice_devlink_rate_node_new()
983 node = devm_kzalloc(ice_hw_to_dev(pi->hw), sizeof(*node), GFP_KERNEL); in ice_devlink_rate_node_new()
985 return -ENOMEM; in ice_devlink_rate_node_new()
999 tc_node = pi->root->children[0]; in ice_devlink_rate_node_del()
1002 if (!rate_node->parent || !node || tc_node == node || !extack) in ice_devlink_rate_node_del()
1005 if (!ice_enable_custom_tx(devlink_priv(rate_node->devlink))) in ice_devlink_rate_node_del()
1006 return -EBUSY; in ice_devlink_rate_node_del()
1009 if (node->num_children) in ice_devlink_rate_node_del()
1010 return -EINVAL; in ice_devlink_rate_node_del()
1012 mutex_lock(&pi->sched_lock); in ice_devlink_rate_node_del()
1014 mutex_unlock(&pi->sched_lock); in ice_devlink_rate_node_del()
1024 if (!ice_enable_custom_tx(devlink_priv(rate_leaf->devlink))) in ice_devlink_rate_leaf_tx_max_set()
1025 return -EBUSY; in ice_devlink_rate_leaf_tx_max_set()
1039 if (!ice_enable_custom_tx(devlink_priv(rate_leaf->devlink))) in ice_devlink_rate_leaf_tx_share_set()
1040 return -EBUSY; in ice_devlink_rate_leaf_tx_share_set()
1054 if (!ice_enable_custom_tx(devlink_priv(rate_leaf->devlink))) in ice_devlink_rate_leaf_tx_priority_set()
1055 return -EBUSY; in ice_devlink_rate_leaf_tx_priority_set()
1069 if (!ice_enable_custom_tx(devlink_priv(rate_leaf->devlink))) in ice_devlink_rate_leaf_tx_weight_set()
1070 return -EBUSY; in ice_devlink_rate_leaf_tx_weight_set()
1084 if (!ice_enable_custom_tx(devlink_priv(rate_node->devlink))) in ice_devlink_rate_node_tx_max_set()
1085 return -EBUSY; in ice_devlink_rate_node_tx_max_set()
1099 if (!ice_enable_custom_tx(devlink_priv(rate_node->devlink))) in ice_devlink_rate_node_tx_share_set()
1100 return -EBUSY; in ice_devlink_rate_node_tx_share_set()
1114 if (!ice_enable_custom_tx(devlink_priv(rate_node->devlink))) in ice_devlink_rate_node_tx_priority_set()
1115 return -EBUSY; in ice_devlink_rate_node_tx_priority_set()
1129 if (!ice_enable_custom_tx(devlink_priv(rate_node->devlink))) in ice_devlink_rate_node_tx_weight_set()
1130 return -EBUSY; in ice_devlink_rate_node_tx_weight_set()
1151 tc_node = pi->root->children[0]; in ice_devlink_set_parent()
1157 if (!ice_enable_custom_tx(devlink_priv(devlink_rate->devlink))) in ice_devlink_set_parent()
1158 return -EBUSY; in ice_devlink_set_parent()
1161 if (!node || tc_node == node || node->num_children) in ice_devlink_set_parent()
1162 return -EINVAL; in ice_devlink_set_parent()
1164 mutex_lock(&pi->sched_lock); in ice_devlink_set_parent()
1166 mutex_unlock(&pi->sched_lock); in ice_devlink_set_parent()
1174 if (!node->parent) { in ice_devlink_set_parent()
1175 mutex_lock(&pi->sched_lock); in ice_devlink_set_parent()
1177 parent_node->tx_sched_layer + 1, in ice_devlink_set_parent()
1180 mutex_unlock(&pi->sched_lock); in ice_devlink_set_parent()
1187 if (devlink_rate->tx_share) in ice_devlink_set_parent()
1188 ice_set_object_tx_share(pi, node, devlink_rate->tx_share, extack); in ice_devlink_set_parent()
1189 if (devlink_rate->tx_max) in ice_devlink_set_parent()
1190 ice_set_object_tx_max(pi, node, devlink_rate->tx_max, extack); in ice_devlink_set_parent()
1191 if (devlink_rate->tx_priority) in ice_devlink_set_parent()
1192 ice_set_object_tx_priority(pi, node, devlink_rate->tx_priority, extack); in ice_devlink_set_parent()
1193 if (devlink_rate->tx_weight) in ice_devlink_set_parent()
1194 ice_set_object_tx_weight(pi, node, devlink_rate->tx_weight, extack); in ice_devlink_set_parent()
1196 node_teid = le32_to_cpu(node->info.node_teid); in ice_devlink_set_parent()
1197 mutex_lock(&pi->sched_lock); in ice_devlink_set_parent()
1199 mutex_unlock(&pi->sched_lock); in ice_devlink_set_parent()
1209 * ice_devlink_reinit_up - do reinit of the given PF
1217 err = ice_init_hw(&pf->hw); in ice_devlink_reinit_up()
1227 vsi->flags = ICE_VSI_FLAG_INIT; in ice_devlink_reinit_up()
1249 ice_deinit_hw(&pf->hw); in ice_devlink_reinit_up()
1254 * ice_devlink_reload_up - do reload up after reinit
1279 return -EOPNOTSUPP; in ice_devlink_reload_up()
1321 ctx->val.vbool = pf->rdma_mode & IIDC_RDMA_PROTOCOL_ROCEV2 ? true : false; in ice_devlink_enable_roce_get()
1331 bool roce_ena = ctx->val.vbool; in ice_devlink_enable_roce_set()
1336 pf->rdma_mode &= ~IIDC_RDMA_PROTOCOL_ROCEV2; in ice_devlink_enable_roce_set()
1340 pf->rdma_mode |= IIDC_RDMA_PROTOCOL_ROCEV2; in ice_devlink_enable_roce_set()
1343 pf->rdma_mode &= ~IIDC_RDMA_PROTOCOL_ROCEV2; in ice_devlink_enable_roce_set()
1355 if (!test_bit(ICE_FLAG_RDMA_ENA, pf->flags)) in ice_devlink_enable_roce_validate()
1356 return -EOPNOTSUPP; in ice_devlink_enable_roce_validate()
1358 if (pf->rdma_mode & IIDC_RDMA_PROTOCOL_IWARP) { in ice_devlink_enable_roce_validate()
1360 return -EOPNOTSUPP; in ice_devlink_enable_roce_validate()
1372 ctx->val.vbool = pf->rdma_mode & IIDC_RDMA_PROTOCOL_IWARP; in ice_devlink_enable_iw_get()
1382 bool iw_ena = ctx->val.vbool; in ice_devlink_enable_iw_set()
1387 pf->rdma_mode &= ~IIDC_RDMA_PROTOCOL_IWARP; in ice_devlink_enable_iw_set()
1391 pf->rdma_mode |= IIDC_RDMA_PROTOCOL_IWARP; in ice_devlink_enable_iw_set()
1394 pf->rdma_mode &= ~IIDC_RDMA_PROTOCOL_IWARP; in ice_devlink_enable_iw_set()
1406 if (!test_bit(ICE_FLAG_RDMA_ENA, pf->flags)) in ice_devlink_enable_iw_validate()
1407 return -EOPNOTSUPP; in ice_devlink_enable_iw_validate()
1409 if (pf->rdma_mode & IIDC_RDMA_PROTOCOL_ROCEV2) { in ice_devlink_enable_iw_validate()
1411 return -EOPNOTSUPP; in ice_devlink_enable_iw_validate()
1422 * ice_devlink_local_fwd_mode_to_str - Get string for local_fwd mode.
1443 * ice_devlink_local_fwd_str_to_mode - Get local_fwd mode from string name.
1457 return -EINVAL; in ice_devlink_local_fwd_str_to_mode()
1461 * ice_devlink_local_fwd_get - Get local_fwd parameter.
1475 pi = pf->hw.port_info; in ice_devlink_local_fwd_get()
1476 mode_str = ice_devlink_local_fwd_mode_to_str(pi->local_fwd_mode); in ice_devlink_local_fwd_get()
1477 snprintf(ctx->val.vstr, sizeof(ctx->val.vstr), "%s", mode_str); in ice_devlink_local_fwd_get()
1483 * ice_devlink_local_fwd_set - Set local_fwd parameter.
1495 int new_local_fwd_mode = ice_devlink_local_fwd_str_to_mode(ctx->val.vstr); in ice_devlink_local_fwd_set()
1500 pi = pf->hw.port_info; in ice_devlink_local_fwd_set()
1501 if (pi->local_fwd_mode != new_local_fwd_mode) { in ice_devlink_local_fwd_set()
1502 pi->local_fwd_mode = new_local_fwd_mode; in ice_devlink_local_fwd_set()
1503 dev_info(dev, "Setting local_fwd to %s\n", ctx->val.vstr); in ice_devlink_local_fwd_set()
1511 * ice_devlink_local_fwd_validate - Validate passed local_fwd parameter value.
1518 * "enabled" - local_fwd is enabled, "disabled" - local_fwd is disabled
1519 * "prioritized" - local_fwd traffic is prioritized in scheduling.
1530 return -EINVAL; in ice_devlink_local_fwd_validate()
1575 * ice_allocate_pf - Allocate devlink and return PF structure pointer
1598 * ice_allocate_sf - Allocate devlink and return SF structure pointer
1614 return ERR_PTR(-ENOMEM); in ice_allocate_sf()
1626 * ice_devlink_register - Register devlink interface for this PF
1641 * ice_devlink_unregister - Unregister devlink resources for this PF.
1654 struct ice_hw *hw = &pf->hw; in ice_devlink_register_params()
1662 if (hw->func_caps.common_cap.tx_sched_topo_comp_mode_en) in ice_devlink_register_params()
1672 struct ice_hw *hw = &pf->hw; in ice_devlink_unregister_params()
1677 if (hw->func_caps.common_cap.tx_sched_topo_comp_mode_en) in ice_devlink_unregister_params()
1688 * ice_devlink_nvm_snapshot - Capture a snapshot of the NVM flash contents
1695 * the nvm-flash or shadow-ram region.
1701 * @returns zero on success, and updates the data pointer. Returns a non-zero
1710 struct ice_hw *hw = &pf->hw; in ice_devlink_nvm_snapshot()
1719 nvm_size = hw->flash.flash_size; in ice_devlink_nvm_snapshot()
1722 nvm_size = hw->flash.sr_words * 2u; in ice_devlink_nvm_snapshot()
1725 return -EOPNOTSUPP; in ice_devlink_nvm_snapshot()
1730 return -ENOMEM; in ice_devlink_nvm_snapshot()
1748 status, hw->adminq.sq_last_status); in ice_devlink_nvm_snapshot()
1751 return -EIO; in ice_devlink_nvm_snapshot()
1758 read_sz, status, hw->adminq.sq_last_status); in ice_devlink_nvm_snapshot()
1762 return -EIO; in ice_devlink_nvm_snapshot()
1767 left -= read_sz; in ice_devlink_nvm_snapshot()
1776 * ice_devlink_nvm_read - Read a portion of NVM flash contents
1787 * It reads from either the nvm-flash or shadow-ram region contents.
1789 * @returns zero on success, and updates the data pointer. Returns a non-zero
1799 struct ice_hw *hw = &pf->hw; in ice_devlink_nvm_read()
1806 nvm_size = hw->flash.flash_size; in ice_devlink_nvm_read()
1809 nvm_size = hw->flash.sr_words * 2u; in ice_devlink_nvm_read()
1812 return -EOPNOTSUPP; in ice_devlink_nvm_read()
1817 return -ERANGE; in ice_devlink_nvm_read()
1823 status, hw->adminq.sq_last_status); in ice_devlink_nvm_read()
1825 return -EIO; in ice_devlink_nvm_read()
1832 size, status, hw->adminq.sq_last_status); in ice_devlink_nvm_read()
1835 return -EIO; in ice_devlink_nvm_read()
1843 * ice_devlink_devcaps_snapshot - Capture snapshot of device capabilities
1850 * the device-caps devlink region. It captures a snapshot of the device
1853 * @returns zero on success, and updates the data pointer. Returns a non-zero
1863 struct ice_hw *hw = &pf->hw; in ice_devlink_devcaps_snapshot()
1869 return -ENOMEM; in ice_devlink_devcaps_snapshot()
1875 status, hw->adminq.sq_last_status); in ice_devlink_devcaps_snapshot()
1887 .name = "nvm-flash",
1894 .name = "shadow-ram",
1901 .name = "device-caps",
1907 * ice_devlink_init_regions - Initialize devlink regions
1919 nvm_size = pf->hw.flash.flash_size; in ice_devlink_init_regions()
1920 pf->nvm_region = devl_region_create(devlink, &ice_nvm_region_ops, 1, in ice_devlink_init_regions()
1922 if (IS_ERR(pf->nvm_region)) { in ice_devlink_init_regions()
1924 PTR_ERR(pf->nvm_region)); in ice_devlink_init_regions()
1925 pf->nvm_region = NULL; in ice_devlink_init_regions()
1928 sram_size = pf->hw.flash.sr_words * 2u; in ice_devlink_init_regions()
1929 pf->sram_region = devl_region_create(devlink, &ice_sram_region_ops, in ice_devlink_init_regions()
1931 if (IS_ERR(pf->sram_region)) { in ice_devlink_init_regions()
1932 dev_err(dev, "failed to create shadow-ram devlink region, err %ld\n", in ice_devlink_init_regions()
1933 PTR_ERR(pf->sram_region)); in ice_devlink_init_regions()
1934 pf->sram_region = NULL; in ice_devlink_init_regions()
1937 pf->devcaps_region = devl_region_create(devlink, in ice_devlink_init_regions()
1940 if (IS_ERR(pf->devcaps_region)) { in ice_devlink_init_regions()
1941 dev_err(dev, "failed to create device-caps devlink region, err %ld\n", in ice_devlink_init_regions()
1942 PTR_ERR(pf->devcaps_region)); in ice_devlink_init_regions()
1943 pf->devcaps_region = NULL; in ice_devlink_init_regions()
1948 * ice_devlink_destroy_regions - Destroy devlink regions
1955 if (pf->nvm_region) in ice_devlink_destroy_regions()
1956 devl_region_destroy(pf->nvm_region); in ice_devlink_destroy_regions()
1958 if (pf->sram_region) in ice_devlink_destroy_regions()
1959 devl_region_destroy(pf->sram_region); in ice_devlink_destroy_regions()
1961 if (pf->devcaps_region) in ice_devlink_destroy_regions()
1962 devl_region_destroy(pf->devcaps_region); in ice_devlink_destroy_regions()