ariadne: use netstats in net_device structure
Use net_device_stats from net_device structure instead of local. Signed-off-by: Paulius Zaleckas <paulius.zaleckas@teltonika.lt> Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> Acked-by: Jeff Garzik <jgarzik@redhat.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
f30828a674
commit
038eddd9ac
|
@ -98,7 +98,6 @@ struct ariadne_private {
|
||||||
volatile u_short *rx_buff[RX_RING_SIZE];
|
volatile u_short *rx_buff[RX_RING_SIZE];
|
||||||
int cur_tx, cur_rx; /* The next free ring entry */
|
int cur_tx, cur_rx; /* The next free ring entry */
|
||||||
int dirty_tx; /* The ring entries to be free()ed. */
|
int dirty_tx; /* The ring entries to be free()ed. */
|
||||||
struct net_device_stats stats;
|
|
||||||
char tx_full;
|
char tx_full;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -378,20 +377,19 @@ static void ariadne_init_ring(struct net_device *dev)
|
||||||
|
|
||||||
static int ariadne_close(struct net_device *dev)
|
static int ariadne_close(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct ariadne_private *priv = netdev_priv(dev);
|
|
||||||
volatile struct Am79C960 *lance = (struct Am79C960*)dev->base_addr;
|
volatile struct Am79C960 *lance = (struct Am79C960*)dev->base_addr;
|
||||||
|
|
||||||
netif_stop_queue(dev);
|
netif_stop_queue(dev);
|
||||||
|
|
||||||
lance->RAP = CSR112; /* Missed Frame Count */
|
lance->RAP = CSR112; /* Missed Frame Count */
|
||||||
priv->stats.rx_missed_errors = swapw(lance->RDP);
|
dev->stats.rx_missed_errors = swapw(lance->RDP);
|
||||||
lance->RAP = CSR0; /* PCnet-ISA Controller Status */
|
lance->RAP = CSR0; /* PCnet-ISA Controller Status */
|
||||||
|
|
||||||
if (ariadne_debug > 1) {
|
if (ariadne_debug > 1) {
|
||||||
printk(KERN_DEBUG "%s: Shutting down ethercard, status was %2.2x.\n",
|
printk(KERN_DEBUG "%s: Shutting down ethercard, status was %2.2x.\n",
|
||||||
dev->name, lance->RDP);
|
dev->name, lance->RDP);
|
||||||
printk(KERN_DEBUG "%s: %lu packets missed\n", dev->name,
|
printk(KERN_DEBUG "%s: %lu packets missed\n", dev->name,
|
||||||
priv->stats.rx_missed_errors);
|
dev->stats.rx_missed_errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We stop the LANCE here -- it occasionally polls memory if we don't. */
|
/* We stop the LANCE here -- it occasionally polls memory if we don't. */
|
||||||
|
@ -502,16 +500,16 @@ static irqreturn_t ariadne_interrupt(int irq, void *data)
|
||||||
if (status & TF_ERR) {
|
if (status & TF_ERR) {
|
||||||
/* There was an major error, log it. */
|
/* There was an major error, log it. */
|
||||||
int err_status = priv->tx_ring[entry]->TMD3;
|
int err_status = priv->tx_ring[entry]->TMD3;
|
||||||
priv->stats.tx_errors++;
|
dev->stats.tx_errors++;
|
||||||
if (err_status & EF_RTRY)
|
if (err_status & EF_RTRY)
|
||||||
priv->stats.tx_aborted_errors++;
|
dev->stats.tx_aborted_errors++;
|
||||||
if (err_status & EF_LCAR)
|
if (err_status & EF_LCAR)
|
||||||
priv->stats.tx_carrier_errors++;
|
dev->stats.tx_carrier_errors++;
|
||||||
if (err_status & EF_LCOL)
|
if (err_status & EF_LCOL)
|
||||||
priv->stats.tx_window_errors++;
|
dev->stats.tx_window_errors++;
|
||||||
if (err_status & EF_UFLO) {
|
if (err_status & EF_UFLO) {
|
||||||
/* Ackk! On FIFO errors the Tx unit is turned off! */
|
/* Ackk! On FIFO errors the Tx unit is turned off! */
|
||||||
priv->stats.tx_fifo_errors++;
|
dev->stats.tx_fifo_errors++;
|
||||||
/* Remove this verbosity later! */
|
/* Remove this verbosity later! */
|
||||||
printk(KERN_ERR "%s: Tx FIFO error! Status %4.4x.\n",
|
printk(KERN_ERR "%s: Tx FIFO error! Status %4.4x.\n",
|
||||||
dev->name, csr0);
|
dev->name, csr0);
|
||||||
|
@ -520,8 +518,8 @@ static irqreturn_t ariadne_interrupt(int irq, void *data)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (status & (TF_MORE|TF_ONE))
|
if (status & (TF_MORE|TF_ONE))
|
||||||
priv->stats.collisions++;
|
dev->stats.collisions++;
|
||||||
priv->stats.tx_packets++;
|
dev->stats.tx_packets++;
|
||||||
}
|
}
|
||||||
dirty_tx++;
|
dirty_tx++;
|
||||||
}
|
}
|
||||||
|
@ -547,11 +545,11 @@ static irqreturn_t ariadne_interrupt(int irq, void *data)
|
||||||
/* Log misc errors. */
|
/* Log misc errors. */
|
||||||
if (csr0 & BABL) {
|
if (csr0 & BABL) {
|
||||||
handled = 1;
|
handled = 1;
|
||||||
priv->stats.tx_errors++; /* Tx babble. */
|
dev->stats.tx_errors++; /* Tx babble. */
|
||||||
}
|
}
|
||||||
if (csr0 & MISS) {
|
if (csr0 & MISS) {
|
||||||
handled = 1;
|
handled = 1;
|
||||||
priv->stats.rx_errors++; /* Missed a Rx frame. */
|
dev->stats.rx_errors++; /* Missed a Rx frame. */
|
||||||
}
|
}
|
||||||
if (csr0 & MERR) {
|
if (csr0 & MERR) {
|
||||||
handled = 1;
|
handled = 1;
|
||||||
|
@ -672,7 +670,7 @@ static int ariadne_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||||
priv->cur_tx -= TX_RING_SIZE;
|
priv->cur_tx -= TX_RING_SIZE;
|
||||||
priv->dirty_tx -= TX_RING_SIZE;
|
priv->dirty_tx -= TX_RING_SIZE;
|
||||||
}
|
}
|
||||||
priv->stats.tx_bytes += len;
|
dev->stats.tx_bytes += len;
|
||||||
|
|
||||||
/* Trigger an immediate send poll. */
|
/* Trigger an immediate send poll. */
|
||||||
lance->RAP = CSR0; /* PCnet-ISA Controller Status */
|
lance->RAP = CSR0; /* PCnet-ISA Controller Status */
|
||||||
|
@ -707,15 +705,15 @@ static int ariadne_rx(struct net_device *dev)
|
||||||
buffers, with only the last correctly noting the error. */
|
buffers, with only the last correctly noting the error. */
|
||||||
if (status & RF_ENP)
|
if (status & RF_ENP)
|
||||||
/* Only count a general error at the end of a packet.*/
|
/* Only count a general error at the end of a packet.*/
|
||||||
priv->stats.rx_errors++;
|
dev->stats.rx_errors++;
|
||||||
if (status & RF_FRAM)
|
if (status & RF_FRAM)
|
||||||
priv->stats.rx_frame_errors++;
|
dev->stats.rx_frame_errors++;
|
||||||
if (status & RF_OFLO)
|
if (status & RF_OFLO)
|
||||||
priv->stats.rx_over_errors++;
|
dev->stats.rx_over_errors++;
|
||||||
if (status & RF_CRC)
|
if (status & RF_CRC)
|
||||||
priv->stats.rx_crc_errors++;
|
dev->stats.rx_crc_errors++;
|
||||||
if (status & RF_BUFF)
|
if (status & RF_BUFF)
|
||||||
priv->stats.rx_fifo_errors++;
|
dev->stats.rx_fifo_errors++;
|
||||||
priv->rx_ring[entry]->RMD1 &= 0xff00|RF_STP|RF_ENP;
|
priv->rx_ring[entry]->RMD1 &= 0xff00|RF_STP|RF_ENP;
|
||||||
} else {
|
} else {
|
||||||
/* Malloc up new buffer, compatible with net-3. */
|
/* Malloc up new buffer, compatible with net-3. */
|
||||||
|
@ -731,7 +729,7 @@ static int ariadne_rx(struct net_device *dev)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (i > RX_RING_SIZE-2) {
|
if (i > RX_RING_SIZE-2) {
|
||||||
priv->stats.rx_dropped++;
|
dev->stats.rx_dropped++;
|
||||||
priv->rx_ring[entry]->RMD1 |= RF_OWN;
|
priv->rx_ring[entry]->RMD1 |= RF_OWN;
|
||||||
priv->cur_rx++;
|
priv->cur_rx++;
|
||||||
}
|
}
|
||||||
|
@ -764,8 +762,8 @@ static int ariadne_rx(struct net_device *dev)
|
||||||
|
|
||||||
netif_rx(skb);
|
netif_rx(skb);
|
||||||
dev->last_rx = jiffies;
|
dev->last_rx = jiffies;
|
||||||
priv->stats.rx_packets++;
|
dev->stats.rx_packets++;
|
||||||
priv->stats.rx_bytes += pkt_len;
|
dev->stats.rx_bytes += pkt_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
priv->rx_ring[entry]->RMD1 |= RF_OWN;
|
priv->rx_ring[entry]->RMD1 |= RF_OWN;
|
||||||
|
@ -783,7 +781,6 @@ static int ariadne_rx(struct net_device *dev)
|
||||||
|
|
||||||
static struct net_device_stats *ariadne_get_stats(struct net_device *dev)
|
static struct net_device_stats *ariadne_get_stats(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct ariadne_private *priv = netdev_priv(dev);
|
|
||||||
volatile struct Am79C960 *lance = (struct Am79C960*)dev->base_addr;
|
volatile struct Am79C960 *lance = (struct Am79C960*)dev->base_addr;
|
||||||
short saved_addr;
|
short saved_addr;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
@ -791,11 +788,11 @@ static struct net_device_stats *ariadne_get_stats(struct net_device *dev)
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
saved_addr = lance->RAP;
|
saved_addr = lance->RAP;
|
||||||
lance->RAP = CSR112; /* Missed Frame Count */
|
lance->RAP = CSR112; /* Missed Frame Count */
|
||||||
priv->stats.rx_missed_errors = swapw(lance->RDP);
|
dev->stats.rx_missed_errors = swapw(lance->RDP);
|
||||||
lance->RAP = saved_addr;
|
lance->RAP = saved_addr;
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
|
|
||||||
return &priv->stats;
|
return &dev->stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue