Commit 82d82938 authored by Tobias Klauser's avatar Tobias Klauser Committed by David S. Miller

usbnet: pegasus: Use net_device_stats from struct net_device

Instead of using a private copy of struct net_device_stats in struct
pegasus, use stats from struct net_device. Also remove the now
unnecessary .ndo_get_stats function.

Cc: Petko Manolov <petkan@nucleusys.com>
Cc: linux-usb@vger.kernel.org
Signed-off-by: default avatarTobias Klauser <tklauser@distanz.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6ffa770e
...@@ -501,13 +501,13 @@ static void read_bulk_callback(struct urb *urb) ...@@ -501,13 +501,13 @@ static void read_bulk_callback(struct urb *urb)
if (rx_status & 0x1e) { if (rx_status & 0x1e) {
netif_dbg(pegasus, rx_err, net, netif_dbg(pegasus, rx_err, net,
"RX packet error %x\n", rx_status); "RX packet error %x\n", rx_status);
pegasus->stats.rx_errors++; net->stats.rx_errors++;
if (rx_status & 0x06) /* long or runt */ if (rx_status & 0x06) /* long or runt */
pegasus->stats.rx_length_errors++; net->stats.rx_length_errors++;
if (rx_status & 0x08) if (rx_status & 0x08)
pegasus->stats.rx_crc_errors++; net->stats.rx_crc_errors++;
if (rx_status & 0x10) /* extra bits */ if (rx_status & 0x10) /* extra bits */
pegasus->stats.rx_frame_errors++; net->stats.rx_frame_errors++;
goto goon; goto goon;
} }
if (pegasus->chip == 0x8513) { if (pegasus->chip == 0x8513) {
...@@ -535,8 +535,8 @@ static void read_bulk_callback(struct urb *urb) ...@@ -535,8 +535,8 @@ static void read_bulk_callback(struct urb *urb)
skb_put(pegasus->rx_skb, pkt_len); skb_put(pegasus->rx_skb, pkt_len);
pegasus->rx_skb->protocol = eth_type_trans(pegasus->rx_skb, net); pegasus->rx_skb->protocol = eth_type_trans(pegasus->rx_skb, net);
netif_rx(pegasus->rx_skb); netif_rx(pegasus->rx_skb);
pegasus->stats.rx_packets++; net->stats.rx_packets++;
pegasus->stats.rx_bytes += pkt_len; net->stats.rx_bytes += pkt_len;
if (pegasus->flags & PEGASUS_UNPLUG) if (pegasus->flags & PEGASUS_UNPLUG)
return; return;
...@@ -670,13 +670,13 @@ static void intr_callback(struct urb *urb) ...@@ -670,13 +670,13 @@ static void intr_callback(struct urb *urb)
/* byte 0 == tx_status1, reg 2B */ /* byte 0 == tx_status1, reg 2B */
if (d[0] & (TX_UNDERRUN|EXCESSIVE_COL if (d[0] & (TX_UNDERRUN|EXCESSIVE_COL
|LATE_COL|JABBER_TIMEOUT)) { |LATE_COL|JABBER_TIMEOUT)) {
pegasus->stats.tx_errors++; net->stats.tx_errors++;
if (d[0] & TX_UNDERRUN) if (d[0] & TX_UNDERRUN)
pegasus->stats.tx_fifo_errors++; net->stats.tx_fifo_errors++;
if (d[0] & (EXCESSIVE_COL | JABBER_TIMEOUT)) if (d[0] & (EXCESSIVE_COL | JABBER_TIMEOUT))
pegasus->stats.tx_aborted_errors++; net->stats.tx_aborted_errors++;
if (d[0] & LATE_COL) if (d[0] & LATE_COL)
pegasus->stats.tx_window_errors++; net->stats.tx_window_errors++;
} }
/* d[5].LINK_STATUS lies on some adapters. /* d[5].LINK_STATUS lies on some adapters.
...@@ -685,7 +685,7 @@ static void intr_callback(struct urb *urb) ...@@ -685,7 +685,7 @@ static void intr_callback(struct urb *urb)
*/ */
/* bytes 3-4 == rx_lostpkt, reg 2E/2F */ /* bytes 3-4 == rx_lostpkt, reg 2E/2F */
pegasus->stats.rx_missed_errors += ((d[3] & 0x7f) << 8) | d[4]; net->stats.rx_missed_errors += ((d[3] & 0x7f) << 8) | d[4];
} }
res = usb_submit_urb(urb, GFP_ATOMIC); res = usb_submit_urb(urb, GFP_ATOMIC);
...@@ -701,7 +701,7 @@ static void pegasus_tx_timeout(struct net_device *net) ...@@ -701,7 +701,7 @@ static void pegasus_tx_timeout(struct net_device *net)
pegasus_t *pegasus = netdev_priv(net); pegasus_t *pegasus = netdev_priv(net);
netif_warn(pegasus, timer, net, "tx timeout\n"); netif_warn(pegasus, timer, net, "tx timeout\n");
usb_unlink_urb(pegasus->tx_urb); usb_unlink_urb(pegasus->tx_urb);
pegasus->stats.tx_errors++; net->stats.tx_errors++;
} }
static netdev_tx_t pegasus_start_xmit(struct sk_buff *skb, static netdev_tx_t pegasus_start_xmit(struct sk_buff *skb,
...@@ -731,23 +731,18 @@ static netdev_tx_t pegasus_start_xmit(struct sk_buff *skb, ...@@ -731,23 +731,18 @@ static netdev_tx_t pegasus_start_xmit(struct sk_buff *skb,
netif_device_detach(pegasus->net); netif_device_detach(pegasus->net);
break; break;
default: default:
pegasus->stats.tx_errors++; net->stats.tx_errors++;
netif_start_queue(net); netif_start_queue(net);
} }
} else { } else {
pegasus->stats.tx_packets++; net->stats.tx_packets++;
pegasus->stats.tx_bytes += skb->len; net->stats.tx_bytes += skb->len;
} }
dev_kfree_skb(skb); dev_kfree_skb(skb);
return NETDEV_TX_OK; return NETDEV_TX_OK;
} }
static struct net_device_stats *pegasus_netdev_stats(struct net_device *dev)
{
return &((pegasus_t *) netdev_priv(dev))->stats;
}
static inline void disable_net_traffic(pegasus_t *pegasus) static inline void disable_net_traffic(pegasus_t *pegasus)
{ {
__le16 tmp = cpu_to_le16(0); __le16 tmp = cpu_to_le16(0);
...@@ -1294,7 +1289,6 @@ static const struct net_device_ops pegasus_netdev_ops = { ...@@ -1294,7 +1289,6 @@ static const struct net_device_ops pegasus_netdev_ops = {
.ndo_do_ioctl = pegasus_ioctl, .ndo_do_ioctl = pegasus_ioctl,
.ndo_start_xmit = pegasus_start_xmit, .ndo_start_xmit = pegasus_start_xmit,
.ndo_set_rx_mode = pegasus_set_multicast, .ndo_set_rx_mode = pegasus_set_multicast,
.ndo_get_stats = pegasus_netdev_stats,
.ndo_tx_timeout = pegasus_tx_timeout, .ndo_tx_timeout = pegasus_tx_timeout,
.ndo_set_mac_address = eth_mac_addr, .ndo_set_mac_address = eth_mac_addr,
.ndo_validate_addr = eth_validate_addr, .ndo_validate_addr = eth_validate_addr,
......
...@@ -83,7 +83,6 @@ typedef struct pegasus { ...@@ -83,7 +83,6 @@ typedef struct pegasus {
struct usb_device *usb; struct usb_device *usb;
struct usb_interface *intf; struct usb_interface *intf;
struct net_device *net; struct net_device *net;
struct net_device_stats stats;
struct mii_if_info mii; struct mii_if_info mii;
unsigned flags; unsigned flags;
unsigned features; unsigned features;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment