Commit 9c28eaea authored by Stephen Hemminger's avatar Stephen Hemminger Committed by Jeff Garzik

sc92031: use net_device stats

Statistics structure is available for use in net_device structure.
Compile tested only.
Signed-off-by: default avatarStephen Hemminger <shemminger@vyatta.com>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent 10c64620
...@@ -311,7 +311,6 @@ struct sc92031_priv { ...@@ -311,7 +311,6 @@ struct sc92031_priv {
/* for dev->get_stats */ /* for dev->get_stats */
long rx_value; long rx_value;
struct net_device_stats stats;
}; };
/* I don't know which registers can be safely read; however, I can guess /* I don't know which registers can be safely read; however, I can guess
...@@ -421,7 +420,7 @@ static void _sc92031_tx_clear(struct net_device *dev) ...@@ -421,7 +420,7 @@ static void _sc92031_tx_clear(struct net_device *dev)
while (priv->tx_head - priv->tx_tail > 0) { while (priv->tx_head - priv->tx_tail > 0) {
priv->tx_tail++; priv->tx_tail++;
priv->stats.tx_dropped++; dev->stats.tx_dropped++;
} }
priv->tx_head = priv->tx_tail = 0; priv->tx_head = priv->tx_tail = 0;
} }
...@@ -676,27 +675,27 @@ static void _sc92031_tx_tasklet(struct net_device *dev) ...@@ -676,27 +675,27 @@ static void _sc92031_tx_tasklet(struct net_device *dev)
priv->tx_tail++; priv->tx_tail++;
if (tx_status & TxStatOK) { if (tx_status & TxStatOK) {
priv->stats.tx_bytes += tx_status & 0x1fff; dev->stats.tx_bytes += tx_status & 0x1fff;
priv->stats.tx_packets++; dev->stats.tx_packets++;
/* Note: TxCarrierLost is always asserted at 100mbps. */ /* Note: TxCarrierLost is always asserted at 100mbps. */
priv->stats.collisions += (tx_status >> 22) & 0xf; dev->stats.collisions += (tx_status >> 22) & 0xf;
} }
if (tx_status & (TxOutOfWindow | TxAborted)) { if (tx_status & (TxOutOfWindow | TxAborted)) {
priv->stats.tx_errors++; dev->stats.tx_errors++;
if (tx_status & TxAborted) if (tx_status & TxAborted)
priv->stats.tx_aborted_errors++; dev->stats.tx_aborted_errors++;
if (tx_status & TxCarrierLost) if (tx_status & TxCarrierLost)
priv->stats.tx_carrier_errors++; dev->stats.tx_carrier_errors++;
if (tx_status & TxOutOfWindow) if (tx_status & TxOutOfWindow)
priv->stats.tx_window_errors++; dev->stats.tx_window_errors++;
} }
if (tx_status & TxUnderrun) if (tx_status & TxUnderrun)
priv->stats.tx_fifo_errors++; dev->stats.tx_fifo_errors++;
} }
if (priv->tx_tail != old_tx_tail) if (priv->tx_tail != old_tx_tail)
...@@ -704,27 +703,29 @@ static void _sc92031_tx_tasklet(struct net_device *dev) ...@@ -704,27 +703,29 @@ static void _sc92031_tx_tasklet(struct net_device *dev)
netif_wake_queue(dev); netif_wake_queue(dev);
} }
static void _sc92031_rx_tasklet_error(u32 rx_status, static void _sc92031_rx_tasklet_error(struct net_device *dev,
struct sc92031_priv *priv, unsigned rx_size) u32 rx_status, unsigned rx_size)
{ {
if(rx_size > (MAX_ETH_FRAME_SIZE + 4) || rx_size < 16) { if(rx_size > (MAX_ETH_FRAME_SIZE + 4) || rx_size < 16) {
priv->stats.rx_errors++; dev->stats.rx_errors++;
priv->stats.rx_length_errors++; dev->stats.rx_length_errors++;
} }
if (!(rx_status & RxStatesOK)) { if (!(rx_status & RxStatesOK)) {
priv->stats.rx_errors++; dev->stats.rx_errors++;
if (rx_status & (RxHugeFrame | RxSmallFrame)) if (rx_status & (RxHugeFrame | RxSmallFrame))
priv->stats.rx_length_errors++; dev->stats.rx_length_errors++;
if (rx_status & RxBadAlign) if (rx_status & RxBadAlign)
priv->stats.rx_frame_errors++; dev->stats.rx_frame_errors++;
if (!(rx_status & RxCRCOK)) if (!(rx_status & RxCRCOK))
priv->stats.rx_crc_errors++; dev->stats.rx_crc_errors++;
} else } else {
struct sc92031_priv *priv = netdev_priv(dev);
priv->rx_loss++; priv->rx_loss++;
}
} }
static void _sc92031_rx_tasklet(struct net_device *dev) static void _sc92031_rx_tasklet(struct net_device *dev)
...@@ -783,7 +784,7 @@ static void _sc92031_rx_tasklet(struct net_device *dev) ...@@ -783,7 +784,7 @@ static void _sc92031_rx_tasklet(struct net_device *dev)
|| rx_size > (MAX_ETH_FRAME_SIZE + 4) || rx_size > (MAX_ETH_FRAME_SIZE + 4)
|| rx_size < 16 || rx_size < 16
|| !(rx_status & RxStatesOK))) { || !(rx_status & RxStatesOK))) {
_sc92031_rx_tasklet_error(rx_status, priv, rx_size); _sc92031_rx_tasklet_error(dev, rx_status, rx_size);
break; break;
} }
...@@ -818,11 +819,11 @@ static void _sc92031_rx_tasklet(struct net_device *dev) ...@@ -818,11 +819,11 @@ static void _sc92031_rx_tasklet(struct net_device *dev)
dev->last_rx = jiffies; dev->last_rx = jiffies;
netif_rx(skb); netif_rx(skb);
priv->stats.rx_bytes += pkt_size; dev->stats.rx_bytes += pkt_size;
priv->stats.rx_packets++; dev->stats.rx_packets++;
if (rx_status & Rx_Multicast) if (rx_status & Rx_Multicast)
priv->stats.multicast++; dev->stats.multicast++;
next: next:
rx_ring_offset = (rx_ring_offset + rx_size_align) % RX_BUF_LEN; rx_ring_offset = (rx_ring_offset + rx_size_align) % RX_BUF_LEN;
...@@ -835,13 +836,11 @@ static void _sc92031_rx_tasklet(struct net_device *dev) ...@@ -835,13 +836,11 @@ static void _sc92031_rx_tasklet(struct net_device *dev)
static void _sc92031_link_tasklet(struct net_device *dev) static void _sc92031_link_tasklet(struct net_device *dev)
{ {
struct sc92031_priv *priv = netdev_priv(dev);
if (_sc92031_check_media(dev)) if (_sc92031_check_media(dev))
netif_wake_queue(dev); netif_wake_queue(dev);
else { else {
netif_stop_queue(dev); netif_stop_queue(dev);
priv->stats.tx_carrier_errors++; dev->stats.tx_carrier_errors++;
} }
} }
...@@ -866,11 +865,11 @@ static void sc92031_tasklet(unsigned long data) ...@@ -866,11 +865,11 @@ static void sc92031_tasklet(unsigned long data)
_sc92031_rx_tasklet(dev); _sc92031_rx_tasklet(dev);
if (intr_status & RxOverflow) if (intr_status & RxOverflow)
priv->stats.rx_errors++; dev->stats.rx_errors++;
if (intr_status & TimeOut) { if (intr_status & TimeOut) {
priv->stats.rx_errors++; dev->stats.rx_errors++;
priv->stats.rx_length_errors++; dev->stats.rx_length_errors++;
} }
if (intr_status & (LinkFail | LinkOK)) if (intr_status & (LinkFail | LinkOK))
...@@ -936,15 +935,14 @@ static struct net_device_stats *sc92031_get_stats(struct net_device *dev) ...@@ -936,15 +935,14 @@ static struct net_device_stats *sc92031_get_stats(struct net_device *dev)
if (temp == 0xffff) { if (temp == 0xffff) {
priv->rx_value += temp; priv->rx_value += temp;
priv->stats.rx_fifo_errors = priv->rx_value; dev->stats.rx_fifo_errors = priv->rx_value;
} else { } else
priv->stats.rx_fifo_errors = temp + priv->rx_value; dev->stats.rx_fifo_errors = temp + priv->rx_value;
}
spin_unlock_bh(&priv->lock); spin_unlock_bh(&priv->lock);
} }
return &priv->stats; return &dev->stats;
} }
static int sc92031_start_xmit(struct sk_buff *skb, struct net_device *dev) static int sc92031_start_xmit(struct sk_buff *skb, struct net_device *dev)
...@@ -959,7 +957,7 @@ static int sc92031_start_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -959,7 +957,7 @@ static int sc92031_start_xmit(struct sk_buff *skb, struct net_device *dev)
if (unlikely(skb->len > TX_BUF_SIZE)) { if (unlikely(skb->len > TX_BUF_SIZE)) {
err = -EMSGSIZE; err = -EMSGSIZE;
priv->stats.tx_dropped++; dev->stats.tx_dropped++;
goto out; goto out;
} }
...@@ -967,7 +965,7 @@ static int sc92031_start_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -967,7 +965,7 @@ static int sc92031_start_xmit(struct sk_buff *skb, struct net_device *dev)
if (unlikely(!netif_carrier_ok(dev))) { if (unlikely(!netif_carrier_ok(dev))) {
err = -ENOLINK; err = -ENOLINK;
priv->stats.tx_dropped++; dev->stats.tx_dropped++;
goto out_unlock; goto out_unlock;
} }
......
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