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

ether3: Use net_device_stats from struct net_device

struct net_device has its own struct net_device_stats member, so use
this one instead of a private copy in the ether1_priv struct. As the new
ndo_get_stats function would just return dev->stats we can omit it. This
patch also removes an incorrect memset of the stats on open.
Signed-off-by: default avatarTobias Klauser <tklauser@distanz.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 25aec76a
...@@ -81,7 +81,6 @@ static int ether3_open (struct net_device *dev); ...@@ -81,7 +81,6 @@ static int ether3_open (struct net_device *dev);
static int ether3_sendpacket (struct sk_buff *skb, struct net_device *dev); static int ether3_sendpacket (struct sk_buff *skb, struct net_device *dev);
static irqreturn_t ether3_interrupt (int irq, void *dev_id); static irqreturn_t ether3_interrupt (int irq, void *dev_id);
static int ether3_close (struct net_device *dev); static int ether3_close (struct net_device *dev);
static struct net_device_stats *ether3_getstats (struct net_device *dev);
static void ether3_setmulticastlist (struct net_device *dev); static void ether3_setmulticastlist (struct net_device *dev);
static void ether3_timeout(struct net_device *dev); static void ether3_timeout(struct net_device *dev);
...@@ -323,8 +322,6 @@ ether3_init_for_open(struct net_device *dev) ...@@ -323,8 +322,6 @@ ether3_init_for_open(struct net_device *dev)
{ {
int i; int i;
memset(&priv(dev)->stats, 0, sizeof(struct net_device_stats));
/* Reset the chip */ /* Reset the chip */
ether3_outw(CFG2_RESET, REG_CONFIG2); ether3_outw(CFG2_RESET, REG_CONFIG2);
udelay(4); udelay(4);
...@@ -441,15 +438,6 @@ ether3_close(struct net_device *dev) ...@@ -441,15 +438,6 @@ ether3_close(struct net_device *dev)
return 0; return 0;
} }
/*
* Get the current statistics. This may be called with the card open or
* closed.
*/
static struct net_device_stats *ether3_getstats(struct net_device *dev)
{
return &priv(dev)->stats;
}
/* /*
* Set or clear promiscuous/multicast mode filter for this adaptor. * Set or clear promiscuous/multicast mode filter for this adaptor.
* *
...@@ -490,7 +478,7 @@ static void ether3_timeout(struct net_device *dev) ...@@ -490,7 +478,7 @@ static void ether3_timeout(struct net_device *dev)
local_irq_restore(flags); local_irq_restore(flags);
priv(dev)->regs.config2 |= CFG2_CTRLO; priv(dev)->regs.config2 |= CFG2_CTRLO;
priv(dev)->stats.tx_errors += 1; dev->stats.tx_errors += 1;
ether3_outw(priv(dev)->regs.config2, REG_CONFIG2); ether3_outw(priv(dev)->regs.config2, REG_CONFIG2);
priv(dev)->tx_head = priv(dev)->tx_tail = 0; priv(dev)->tx_head = priv(dev)->tx_tail = 0;
...@@ -509,7 +497,7 @@ ether3_sendpacket(struct sk_buff *skb, struct net_device *dev) ...@@ -509,7 +497,7 @@ ether3_sendpacket(struct sk_buff *skb, struct net_device *dev)
if (priv(dev)->broken) { if (priv(dev)->broken) {
dev_kfree_skb(skb); dev_kfree_skb(skb);
priv(dev)->stats.tx_dropped ++; dev->stats.tx_dropped++;
netif_start_queue(dev); netif_start_queue(dev);
return NETDEV_TX_OK; return NETDEV_TX_OK;
} }
...@@ -673,7 +661,7 @@ if (next_ptr < RX_START || next_ptr >= RX_END) { ...@@ -673,7 +661,7 @@ if (next_ptr < RX_START || next_ptr >= RX_END) {
} else } else
goto dropping; goto dropping;
} else { } else {
struct net_device_stats *stats = &priv(dev)->stats; struct net_device_stats *stats = &dev->stats;
ether3_outw(next_ptr >> 8, REG_RECVEND); ether3_outw(next_ptr >> 8, REG_RECVEND);
if (status & RXSTAT_OVERSIZE) stats->rx_over_errors ++; if (status & RXSTAT_OVERSIZE) stats->rx_over_errors ++;
if (status & RXSTAT_CRCERROR) stats->rx_crc_errors ++; if (status & RXSTAT_CRCERROR) stats->rx_crc_errors ++;
...@@ -685,14 +673,14 @@ if (next_ptr < RX_START || next_ptr >= RX_END) { ...@@ -685,14 +673,14 @@ if (next_ptr < RX_START || next_ptr >= RX_END) {
while (-- maxcnt); while (-- maxcnt);
done: done:
priv(dev)->stats.rx_packets += received; dev->stats.rx_packets += received;
priv(dev)->rx_head = next_ptr; priv(dev)->rx_head = next_ptr;
/* /*
* If rx went off line, then that means that the buffer may be full. We * If rx went off line, then that means that the buffer may be full. We
* have dropped at least one packet. * have dropped at least one packet.
*/ */
if (!(ether3_inw(REG_STATUS) & STAT_RXON)) { if (!(ether3_inw(REG_STATUS) & STAT_RXON)) {
priv(dev)->stats.rx_dropped ++; dev->stats.rx_dropped++;
ether3_outw(next_ptr, REG_RECVPTR); ether3_outw(next_ptr, REG_RECVPTR);
ether3_outw(priv(dev)->regs.command | CMD_RXON, REG_COMMAND); ether3_outw(priv(dev)->regs.command | CMD_RXON, REG_COMMAND);
} }
...@@ -710,7 +698,7 @@ dropping:{ ...@@ -710,7 +698,7 @@ dropping:{
last_warned = jiffies; last_warned = jiffies;
printk("%s: memory squeeze, dropping packet.\n", dev->name); printk("%s: memory squeeze, dropping packet.\n", dev->name);
} }
priv(dev)->stats.rx_dropped ++; dev->stats.rx_dropped++;
goto done; goto done;
} }
} }
...@@ -743,13 +731,13 @@ static void ether3_tx(struct net_device *dev) ...@@ -743,13 +731,13 @@ static void ether3_tx(struct net_device *dev)
* Update errors * Update errors
*/ */
if (!(status & (TXSTAT_BABBLED | TXSTAT_16COLLISIONS))) if (!(status & (TXSTAT_BABBLED | TXSTAT_16COLLISIONS)))
priv(dev)->stats.tx_packets++; dev->stats.tx_packets++;
else { else {
priv(dev)->stats.tx_errors ++; dev->stats.tx_errors++;
if (status & TXSTAT_16COLLISIONS) if (status & TXSTAT_16COLLISIONS)
priv(dev)->stats.collisions += 16; dev->stats.collisions += 16;
if (status & TXSTAT_BABBLED) if (status & TXSTAT_BABBLED)
priv(dev)->stats.tx_fifo_errors ++; dev->stats.tx_fifo_errors++;
} }
tx_tail = (tx_tail + 1) & 15; tx_tail = (tx_tail + 1) & 15;
...@@ -773,7 +761,6 @@ static const struct net_device_ops ether3_netdev_ops = { ...@@ -773,7 +761,6 @@ static const struct net_device_ops ether3_netdev_ops = {
.ndo_open = ether3_open, .ndo_open = ether3_open,
.ndo_stop = ether3_close, .ndo_stop = ether3_close,
.ndo_start_xmit = ether3_sendpacket, .ndo_start_xmit = ether3_sendpacket,
.ndo_get_stats = ether3_getstats,
.ndo_set_multicast_list = ether3_setmulticastlist, .ndo_set_multicast_list = ether3_setmulticastlist,
.ndo_tx_timeout = ether3_timeout, .ndo_tx_timeout = ether3_timeout,
.ndo_validate_addr = eth_validate_addr, .ndo_validate_addr = eth_validate_addr,
......
...@@ -164,7 +164,6 @@ struct dev_priv { ...@@ -164,7 +164,6 @@ struct dev_priv {
unsigned char tx_head; /* buffer nr to insert next packet */ unsigned char tx_head; /* buffer nr to insert next packet */
unsigned char tx_tail; /* buffer nr of transmitting packet */ unsigned char tx_tail; /* buffer nr of transmitting packet */
unsigned int rx_head; /* address to fetch next packet from */ unsigned int rx_head; /* address to fetch next packet from */
struct net_device_stats stats;
struct timer_list timer; struct timer_list timer;
int broken; /* 0 = ok, 1 = something went wrong */ int broken; /* 0 = ok, 1 = something went wrong */
}; };
......
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