aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c')
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
index c65295dded39..a427b49a886c 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
@@ -62,7 +62,9 @@ static const struct {
62 8, "[%s]: tpa_aggregations" }, 62 8, "[%s]: tpa_aggregations" },
63 { Q_STATS_OFFSET32(total_tpa_aggregated_frames_hi), 63 { Q_STATS_OFFSET32(total_tpa_aggregated_frames_hi),
64 8, "[%s]: tpa_aggregated_frames"}, 64 8, "[%s]: tpa_aggregated_frames"},
65 { Q_STATS_OFFSET32(total_tpa_bytes_hi), 8, "[%s]: tpa_bytes"} 65 { Q_STATS_OFFSET32(total_tpa_bytes_hi), 8, "[%s]: tpa_bytes"},
66 { Q_STATS_OFFSET32(driver_filtered_tx_pkt),
67 4, "[%s]: driver_filtered_tx_pkt" }
66}; 68};
67 69
68#define BNX2X_NUM_Q_STATS ARRAY_SIZE(bnx2x_q_stats_arr) 70#define BNX2X_NUM_Q_STATS ARRAY_SIZE(bnx2x_q_stats_arr)
@@ -177,6 +179,8 @@ static const struct {
177 4, STATS_FLAGS_FUNC, "recoverable_errors" }, 179 4, STATS_FLAGS_FUNC, "recoverable_errors" },
178 { STATS_OFFSET32(unrecoverable_error), 180 { STATS_OFFSET32(unrecoverable_error),
179 4, STATS_FLAGS_FUNC, "unrecoverable_errors" }, 181 4, STATS_FLAGS_FUNC, "unrecoverable_errors" },
182 { STATS_OFFSET32(driver_filtered_tx_pkt),
183 4, STATS_FLAGS_FUNC, "driver_filtered_tx_pkt" },
180 { STATS_OFFSET32(eee_tx_lpi), 184 { STATS_OFFSET32(eee_tx_lpi),
181 4, STATS_FLAGS_PORT, "Tx LPI entry count"} 185 4, STATS_FLAGS_PORT, "Tx LPI entry count"}
182}; 186};
@@ -227,18 +231,14 @@ static int bnx2x_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
227 cmd->advertising &= ~(ADVERTISED_10000baseT_Full); 231 cmd->advertising &= ~(ADVERTISED_10000baseT_Full);
228 } 232 }
229 233
230 if ((bp->state == BNX2X_STATE_OPEN) && (bp->link_vars.link_up)) { 234 if ((bp->state == BNX2X_STATE_OPEN) && bp->link_vars.link_up &&
231 if (!(bp->flags & MF_FUNC_DIS)) { 235 !(bp->flags & MF_FUNC_DIS)) {
232 ethtool_cmd_speed_set(cmd, bp->link_vars.line_speed);
233 cmd->duplex = bp->link_vars.duplex; 236 cmd->duplex = bp->link_vars.duplex;
234 } else {
235 ethtool_cmd_speed_set(
236 cmd, bp->link_params.req_line_speed[cfg_idx]);
237 cmd->duplex = bp->link_params.req_duplex[cfg_idx];
238 }
239 237
240 if (IS_MF(bp) && !BP_NOMCP(bp)) 238 if (IS_MF(bp) && !BP_NOMCP(bp))
241 ethtool_cmd_speed_set(cmd, bnx2x_get_mf_speed(bp)); 239 ethtool_cmd_speed_set(cmd, bnx2x_get_mf_speed(bp));
240 else
241 ethtool_cmd_speed_set(cmd, bp->link_vars.line_speed);
242 } else { 242 } else {
243 cmd->duplex = DUPLEX_UNKNOWN; 243 cmd->duplex = DUPLEX_UNKNOWN;
244 ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN); 244 ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN);
@@ -1702,7 +1702,7 @@ static int bnx2x_set_eee(struct net_device *dev, struct ethtool_eee *edata)
1702 SHMEM_EEE_ADV_STATUS_SHIFT); 1702 SHMEM_EEE_ADV_STATUS_SHIFT);
1703 if ((advertised != (eee_cfg & SHMEM_EEE_ADV_STATUS_MASK))) { 1703 if ((advertised != (eee_cfg & SHMEM_EEE_ADV_STATUS_MASK))) {
1704 DP(BNX2X_MSG_ETHTOOL, 1704 DP(BNX2X_MSG_ETHTOOL,
1705 "Direct manipulation of EEE advertisment is not supported\n"); 1705 "Direct manipulation of EEE advertisement is not supported\n");
1706 return -EINVAL; 1706 return -EINVAL;
1707 } 1707 }
1708 1708
@@ -2660,20 +2660,25 @@ static int bnx2x_set_phys_id(struct net_device *dev,
2660 return 1; /* cycle on/off once per second */ 2660 return 1; /* cycle on/off once per second */
2661 2661
2662 case ETHTOOL_ID_ON: 2662 case ETHTOOL_ID_ON:
2663 bnx2x_acquire_phy_lock(bp);
2663 bnx2x_set_led(&bp->link_params, &bp->link_vars, 2664 bnx2x_set_led(&bp->link_params, &bp->link_vars,
2664 LED_MODE_ON, SPEED_1000); 2665 LED_MODE_ON, SPEED_1000);
2666 bnx2x_release_phy_lock(bp);
2665 break; 2667 break;
2666 2668
2667 case ETHTOOL_ID_OFF: 2669 case ETHTOOL_ID_OFF:
2670 bnx2x_acquire_phy_lock(bp);
2668 bnx2x_set_led(&bp->link_params, &bp->link_vars, 2671 bnx2x_set_led(&bp->link_params, &bp->link_vars,
2669 LED_MODE_FRONT_PANEL_OFF, 0); 2672 LED_MODE_FRONT_PANEL_OFF, 0);
2670 2673 bnx2x_release_phy_lock(bp);
2671 break; 2674 break;
2672 2675
2673 case ETHTOOL_ID_INACTIVE: 2676 case ETHTOOL_ID_INACTIVE:
2677 bnx2x_acquire_phy_lock(bp);
2674 bnx2x_set_led(&bp->link_params, &bp->link_vars, 2678 bnx2x_set_led(&bp->link_params, &bp->link_vars,
2675 LED_MODE_OPER, 2679 LED_MODE_OPER,
2676 bp->link_vars.line_speed); 2680 bp->link_vars.line_speed);
2681 bnx2x_release_phy_lock(bp);
2677 } 2682 }
2678 2683
2679 return 0; 2684 return 0;
@@ -2772,10 +2777,10 @@ static int bnx2x_set_rss_flags(struct bnx2x *bp, struct ethtool_rxnfc *info)
2772 } else if ((info->flow_type == UDP_V6_FLOW) && 2777 } else if ((info->flow_type == UDP_V6_FLOW) &&
2773 (bp->rss_conf_obj.udp_rss_v6 != udp_rss_requested)) { 2778 (bp->rss_conf_obj.udp_rss_v6 != udp_rss_requested)) {
2774 bp->rss_conf_obj.udp_rss_v6 = udp_rss_requested; 2779 bp->rss_conf_obj.udp_rss_v6 = udp_rss_requested;
2775 return bnx2x_config_rss_pf(bp, &bp->rss_conf_obj, 0);
2776 DP(BNX2X_MSG_ETHTOOL, 2780 DP(BNX2X_MSG_ETHTOOL,
2777 "rss re-configured, UDP 4-tupple %s\n", 2781 "rss re-configured, UDP 4-tupple %s\n",
2778 udp_rss_requested ? "enabled" : "disabled"); 2782 udp_rss_requested ? "enabled" : "disabled");
2783 return bnx2x_config_rss_pf(bp, &bp->rss_conf_obj, 0);
2779 } else { 2784 } else {
2780 return 0; 2785 return 0;
2781 } 2786 }
@@ -2901,7 +2906,9 @@ static void bnx2x_get_channels(struct net_device *dev,
2901static void bnx2x_change_num_queues(struct bnx2x *bp, int num_rss) 2906static void bnx2x_change_num_queues(struct bnx2x *bp, int num_rss)
2902{ 2907{
2903 bnx2x_disable_msi(bp); 2908 bnx2x_disable_msi(bp);
2904 BNX2X_NUM_QUEUES(bp) = num_rss + NON_ETH_CONTEXT_USE; 2909 bp->num_ethernet_queues = num_rss;
2910 bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues;
2911 BNX2X_DEV_INFO("set number of queues to %d\n", bp->num_queues);
2905 bnx2x_set_int_mode(bp); 2912 bnx2x_set_int_mode(bp);
2906} 2913}
2907 2914