Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+10 −23
Original line number Diff line number Diff line
@@ -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 irqreturn_t ether3_interrupt (int irq, void *dev_id);
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_timeout(struct net_device *dev);

@@ -323,8 +322,6 @@ ether3_init_for_open(struct net_device *dev)
{
	int i;

	memset(&priv(dev)->stats, 0, sizeof(struct net_device_stats));

	/* Reset the chip */
	ether3_outw(CFG2_RESET, REG_CONFIG2);
	udelay(4);
@@ -441,15 +438,6 @@ ether3_close(struct net_device *dev)
	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.
 *
@@ -490,7 +478,7 @@ static void ether3_timeout(struct net_device *dev)
	local_irq_restore(flags);

	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);
	priv(dev)->tx_head = priv(dev)->tx_tail = 0;

@@ -509,7 +497,7 @@ ether3_sendpacket(struct sk_buff *skb, struct net_device *dev)

	if (priv(dev)->broken) {
		dev_kfree_skb(skb);
		priv(dev)->stats.tx_dropped ++;
		dev->stats.tx_dropped++;
		netif_start_queue(dev);
		return NETDEV_TX_OK;
	}
@@ -673,7 +661,7 @@ if (next_ptr < RX_START || next_ptr >= RX_END) {
			} else
				goto dropping;
		} else {
			struct net_device_stats *stats = &priv(dev)->stats;
			struct net_device_stats *stats = &dev->stats;
			ether3_outw(next_ptr >> 8, REG_RECVEND);
			if (status & RXSTAT_OVERSIZE)	  stats->rx_over_errors ++;
			if (status & RXSTAT_CRCERROR)	  stats->rx_crc_errors ++;
@@ -685,14 +673,14 @@ if (next_ptr < RX_START || next_ptr >= RX_END) {
	while (-- maxcnt);

done:
	priv(dev)->stats.rx_packets += received;
	dev->stats.rx_packets += received;
	priv(dev)->rx_head = next_ptr;
	/*
	 * If rx went off line, then that means that the buffer may be full.  We
	 * have dropped at least one packet.
	 */
	if (!(ether3_inw(REG_STATUS) & STAT_RXON)) {
		priv(dev)->stats.rx_dropped ++;
		dev->stats.rx_dropped++;
    		ether3_outw(next_ptr, REG_RECVPTR);
		ether3_outw(priv(dev)->regs.command | CMD_RXON, REG_COMMAND);
	}
@@ -710,7 +698,7 @@ dropping:{
		last_warned = jiffies;
		printk("%s: memory squeeze, dropping packet.\n", dev->name);
	}
	priv(dev)->stats.rx_dropped ++;
	dev->stats.rx_dropped++;
	goto done;
	}
}
@@ -743,13 +731,13 @@ static void ether3_tx(struct net_device *dev)
		 * Update errors
		 */
		if (!(status & (TXSTAT_BABBLED | TXSTAT_16COLLISIONS)))
			priv(dev)->stats.tx_packets++;
			dev->stats.tx_packets++;
		else {
			priv(dev)->stats.tx_errors ++;
			dev->stats.tx_errors++;
			if (status & TXSTAT_16COLLISIONS)
				priv(dev)->stats.collisions += 16;
				dev->stats.collisions += 16;
			if (status & TXSTAT_BABBLED)
				priv(dev)->stats.tx_fifo_errors ++;
				dev->stats.tx_fifo_errors++;
		}

		tx_tail = (tx_tail + 1) & 15;
@@ -773,7 +761,6 @@ static const struct net_device_ops ether3_netdev_ops = {
	.ndo_open		= ether3_open,
	.ndo_stop		= ether3_close,
	.ndo_start_xmit		= ether3_sendpacket,
	.ndo_get_stats		= ether3_getstats,
	.ndo_set_multicast_list	= ether3_setmulticastlist,
	.ndo_tx_timeout		= ether3_timeout,
	.ndo_validate_addr	= eth_validate_addr,
+0 −1
Original line number Diff line number Diff line
@@ -164,7 +164,6 @@ struct dev_priv {
    unsigned char tx_head;		/* buffer nr to insert next packet	 */
    unsigned char tx_tail;		/* buffer nr of transmitting packet	 */
    unsigned int rx_head;		/* address to fetch next packet from	 */
    struct net_device_stats stats;
    struct timer_list timer;
    int broken;				/* 0 = ok, 1 = something went wrong	 */
};