aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/tg3.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/tg3.c')
-rw-r--r--drivers/net/tg3.c35
1 files changed, 12 insertions, 23 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index 289cdc5fde9..7c75f1e3399 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -9021,7 +9021,8 @@ err_out1:
9021 return err; 9021 return err;
9022} 9022}
9023 9023
9024static struct net_device_stats *tg3_get_stats(struct net_device *); 9024static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *,
9025 struct rtnl_link_stats64 *);
9025static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *); 9026static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *);
9026 9027
9027static int tg3_close(struct net_device *dev) 9028static int tg3_close(struct net_device *dev)
@@ -9055,8 +9056,8 @@ static int tg3_close(struct net_device *dev)
9055 9056
9056 tg3_ints_fini(tp); 9057 tg3_ints_fini(tp);
9057 9058
9058 memcpy(&tp->net_stats_prev, tg3_get_stats(tp->dev), 9059 tg3_get_stats64(tp->dev, &tp->net_stats_prev);
9059 sizeof(tp->net_stats_prev)); 9060
9060 memcpy(&tp->estats_prev, tg3_get_estats(tp), 9061 memcpy(&tp->estats_prev, tg3_get_estats(tp),
9061 sizeof(tp->estats_prev)); 9062 sizeof(tp->estats_prev));
9062 9063
@@ -9069,24 +9070,12 @@ static int tg3_close(struct net_device *dev)
9069 return 0; 9070 return 0;
9070} 9071}
9071 9072
9072static inline unsigned long get_stat64(tg3_stat64_t *val) 9073static inline u64 get_stat64(tg3_stat64_t *val)
9073{
9074 unsigned long ret;
9075
9076#if (BITS_PER_LONG == 32)
9077 ret = val->low;
9078#else
9079 ret = ((u64)val->high << 32) | ((u64)val->low);
9080#endif
9081 return ret;
9082}
9083
9084static inline u64 get_estat64(tg3_stat64_t *val)
9085{ 9074{
9086 return ((u64)val->high << 32) | ((u64)val->low); 9075 return ((u64)val->high << 32) | ((u64)val->low);
9087} 9076}
9088 9077
9089static unsigned long calc_crc_errors(struct tg3 *tp) 9078static u64 calc_crc_errors(struct tg3 *tp)
9090{ 9079{
9091 struct tg3_hw_stats *hw_stats = tp->hw_stats; 9080 struct tg3_hw_stats *hw_stats = tp->hw_stats;
9092 9081
@@ -9114,7 +9103,7 @@ static unsigned long calc_crc_errors(struct tg3 *tp)
9114 9103
9115#define ESTAT_ADD(member) \ 9104#define ESTAT_ADD(member) \
9116 estats->member = old_estats->member + \ 9105 estats->member = old_estats->member + \
9117 get_estat64(&hw_stats->member) 9106 get_stat64(&hw_stats->member)
9118 9107
9119static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *tp) 9108static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *tp)
9120{ 9109{
@@ -9204,11 +9193,11 @@ static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *tp)
9204 return estats; 9193 return estats;
9205} 9194}
9206 9195
9207static struct net_device_stats *tg3_get_stats(struct net_device *dev) 9196static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev,
9197 struct rtnl_link_stats64 *stats)
9208{ 9198{
9209 struct tg3 *tp = netdev_priv(dev); 9199 struct tg3 *tp = netdev_priv(dev);
9210 struct net_device_stats *stats = &tp->net_stats; 9200 struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
9211 struct net_device_stats *old_stats = &tp->net_stats_prev;
9212 struct tg3_hw_stats *hw_stats = tp->hw_stats; 9201 struct tg3_hw_stats *hw_stats = tp->hw_stats;
9213 9202
9214 if (!hw_stats) 9203 if (!hw_stats)
@@ -14317,7 +14306,7 @@ static const struct net_device_ops tg3_netdev_ops = {
14317 .ndo_open = tg3_open, 14306 .ndo_open = tg3_open,
14318 .ndo_stop = tg3_close, 14307 .ndo_stop = tg3_close,
14319 .ndo_start_xmit = tg3_start_xmit, 14308 .ndo_start_xmit = tg3_start_xmit,
14320 .ndo_get_stats = tg3_get_stats, 14309 .ndo_get_stats64 = tg3_get_stats64,
14321 .ndo_validate_addr = eth_validate_addr, 14310 .ndo_validate_addr = eth_validate_addr,
14322 .ndo_set_multicast_list = tg3_set_rx_mode, 14311 .ndo_set_multicast_list = tg3_set_rx_mode,
14323 .ndo_set_mac_address = tg3_set_mac_addr, 14312 .ndo_set_mac_address = tg3_set_mac_addr,
@@ -14336,7 +14325,7 @@ static const struct net_device_ops tg3_netdev_ops_dma_bug = {
14336 .ndo_open = tg3_open, 14325 .ndo_open = tg3_open,
14337 .ndo_stop = tg3_close, 14326 .ndo_stop = tg3_close,
14338 .ndo_start_xmit = tg3_start_xmit_dma_bug, 14327 .ndo_start_xmit = tg3_start_xmit_dma_bug,
14339 .ndo_get_stats = tg3_get_stats, 14328 .ndo_get_stats64 = tg3_get_stats64,
14340 .ndo_validate_addr = eth_validate_addr, 14329 .ndo_validate_addr = eth_validate_addr,
14341 .ndo_set_multicast_list = tg3_set_rx_mode, 14330 .ndo_set_multicast_list = tg3_set_rx_mode,
14342 .ndo_set_mac_address = tg3_set_mac_addr, 14331 .ndo_set_mac_address = tg3_set_mac_addr,