temp_stats[i] += hw_stats[i];
 }
 
-#define GET_64BIT_NET_STATS64(ctr)                             \
-       (unsigned long) ((unsigned long) (ctr##_hi) << 32) +    \
-       (unsigned long) (ctr##_lo)
+#define GET_64BIT_NET_STATS64(ctr)             \
+       (((u64) (ctr##_hi) << 32) + (u64) (ctr##_lo))
 
-#define GET_64BIT_NET_STATS32(ctr)                             \
-       (ctr##_lo)
-
-#if (BITS_PER_LONG == 64)
 #define GET_64BIT_NET_STATS(ctr)                               \
        GET_64BIT_NET_STATS64(bp->stats_blk->ctr) +             \
        GET_64BIT_NET_STATS64(bp->temp_stats_blk->ctr)
-#else
-#define GET_64BIT_NET_STATS(ctr)                               \
-       GET_64BIT_NET_STATS32(bp->stats_blk->ctr) +             \
-       GET_64BIT_NET_STATS32(bp->temp_stats_blk->ctr)
-#endif
 
 #define GET_32BIT_NET_STATS(ctr)                               \
        (unsigned long) (bp->stats_blk->ctr +                   \
                         bp->temp_stats_blk->ctr)
 
-static struct net_device_stats *
-bnx2_get_stats(struct net_device *dev)
+static struct rtnl_link_stats64 *
+bnx2_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *net_stats)
 {
        struct bnx2 *bp = netdev_priv(dev);
-       struct net_device_stats *net_stats = &dev->stats;
 
-       if (bp->stats_blk == NULL) {
+       if (bp->stats_blk == NULL)
                return net_stats;
-       }
+
        net_stats->rx_packets =
                GET_64BIT_NET_STATS(stat_IfHCInUcastPkts) +
                GET_64BIT_NET_STATS(stat_IfHCInMulticastPkts) +
        .ndo_open               = bnx2_open,
        .ndo_start_xmit         = bnx2_start_xmit,
        .ndo_stop               = bnx2_close,
-       .ndo_get_stats          = bnx2_get_stats,
+       .ndo_get_stats64        = bnx2_get_stats64,
        .ndo_set_rx_mode        = bnx2_set_rx_mode,
        .ndo_do_ioctl           = bnx2_ioctl,
        .ndo_validate_addr      = eth_validate_addr,