diff options
Diffstat (limited to 'drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c')
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c | 33 |
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, | |||
2901 | static void bnx2x_change_num_queues(struct bnx2x *bp, int num_rss) | 2906 | static 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 | ||