aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_main.c6
-rw-r--r--drivers/net/ethernet/qlogic/qede/qede_ethtool.c14
-rw-r--r--include/linux/qed/qed_if.h10
3 files changed, 26 insertions, 4 deletions
diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c
index 1e9f321f1ac4..d189871e8e23 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_main.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_main.c
@@ -915,6 +915,11 @@ static u32 qed_sb_release(struct qed_dev *cdev,
915 return rc; 915 return rc;
916} 916}
917 917
918static bool qed_can_link_change(struct qed_dev *cdev)
919{
920 return true;
921}
922
918static int qed_set_link(struct qed_dev *cdev, 923static int qed_set_link(struct qed_dev *cdev,
919 struct qed_link_params *params) 924 struct qed_link_params *params)
920{ 925{
@@ -1177,6 +1182,7 @@ const struct qed_common_ops qed_common_ops_pass = {
1177 .sb_release = &qed_sb_release, 1182 .sb_release = &qed_sb_release,
1178 .simd_handler_config = &qed_simd_handler_config, 1183 .simd_handler_config = &qed_simd_handler_config,
1179 .simd_handler_clean = &qed_simd_handler_clean, 1184 .simd_handler_clean = &qed_simd_handler_clean,
1185 .can_link_change = &qed_can_link_change,
1180 .set_link = &qed_set_link, 1186 .set_link = &qed_set_link,
1181 .get_link = &qed_get_current_link, 1187 .get_link = &qed_get_current_link,
1182 .drain = &qed_drain, 1188 .drain = &qed_drain,
diff --git a/drivers/net/ethernet/qlogic/qede/qede_ethtool.c b/drivers/net/ethernet/qlogic/qede/qede_ethtool.c
index 2ac98d44c1e1..f1dd25ac5552 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_ethtool.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_ethtool.c
@@ -239,9 +239,9 @@ static int qede_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
239 struct qed_link_params params; 239 struct qed_link_params params;
240 u32 speed; 240 u32 speed;
241 241
242 if (!edev->dev_info.common.is_mf_default) { 242 if (!edev->ops || !edev->ops->common->can_link_change(edev->cdev)) {
243 DP_INFO(edev, 243 DP_INFO(edev,
244 "Link parameters can not be changed in non-default mode\n"); 244 "Link settings are not allowed to be changed\n");
245 return -EOPNOTSUPP; 245 return -EOPNOTSUPP;
246 } 246 }
247 247
@@ -350,6 +350,12 @@ static int qede_nway_reset(struct net_device *dev)
350 struct qed_link_output current_link; 350 struct qed_link_output current_link;
351 struct qed_link_params link_params; 351 struct qed_link_params link_params;
352 352
353 if (!edev->ops || !edev->ops->common->can_link_change(edev->cdev)) {
354 DP_INFO(edev,
355 "Link settings are not allowed to be changed\n");
356 return -EOPNOTSUPP;
357 }
358
353 if (!netif_running(dev)) 359 if (!netif_running(dev))
354 return 0; 360 return 0;
355 361
@@ -450,9 +456,9 @@ static int qede_set_pauseparam(struct net_device *dev,
450 struct qed_link_params params; 456 struct qed_link_params params;
451 struct qed_link_output current_link; 457 struct qed_link_output current_link;
452 458
453 if (!edev->dev_info.common.is_mf_default) { 459 if (!edev->ops || !edev->ops->common->can_link_change(edev->cdev)) {
454 DP_INFO(edev, 460 DP_INFO(edev,
455 "Pause parameters can not be updated in non-default mode\n"); 461 "Pause settings are not allowed to be changed\n");
456 return -EOPNOTSUPP; 462 return -EOPNOTSUPP;
457 } 463 }
458 464
diff --git a/include/linux/qed/qed_if.h b/include/linux/qed/qed_if.h
index 82a7fe011068..e5de42b62976 100644
--- a/include/linux/qed/qed_if.h
+++ b/include/linux/qed/qed_if.h
@@ -211,6 +211,16 @@ struct qed_common_ops {
211 211
212 void (*simd_handler_clean)(struct qed_dev *cdev, 212 void (*simd_handler_clean)(struct qed_dev *cdev,
213 int index); 213 int index);
214
215/**
216 * @brief can_link_change - can the instance change the link or not
217 *
218 * @param cdev
219 *
220 * @return true if link-change is allowed, false otherwise.
221 */
222 bool (*can_link_change)(struct qed_dev *cdev);
223
214/** 224/**
215 * @brief set_link - set links according to params 225 * @brief set_link - set links according to params
216 * 226 *