Skip to content

Commit

Permalink
sc92031: use net_device stats
Browse files Browse the repository at this point in the history
Statistics structure is available for use in net_device structure.
Compile tested only.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
  • Loading branch information
Stephen Hemminger authored and Jeff Garzik committed Apr 17, 2008
1 parent 10c6462 commit 9c28eae
Showing 1 changed file with 34 additions and 36 deletions.
70 changes: 34 additions & 36 deletions drivers/net/sc92031.c
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,6 @@ struct sc92031_priv {

/* for dev->get_stats */
long rx_value;
struct net_device_stats stats;
};

/* I don't know which registers can be safely read; however, I can guess
Expand Down Expand Up @@ -421,7 +420,7 @@ static void _sc92031_tx_clear(struct net_device *dev)

while (priv->tx_head - priv->tx_tail > 0) {
priv->tx_tail++;
priv->stats.tx_dropped++;
dev->stats.tx_dropped++;
}
priv->tx_head = priv->tx_tail = 0;
}
Expand Down Expand Up @@ -676,55 +675,57 @@ static void _sc92031_tx_tasklet(struct net_device *dev)
priv->tx_tail++;

if (tx_status & TxStatOK) {
priv->stats.tx_bytes += tx_status & 0x1fff;
priv->stats.tx_packets++;
dev->stats.tx_bytes += tx_status & 0x1fff;
dev->stats.tx_packets++;
/* 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)) {
priv->stats.tx_errors++;
dev->stats.tx_errors++;

if (tx_status & TxAborted)
priv->stats.tx_aborted_errors++;
dev->stats.tx_aborted_errors++;

if (tx_status & TxCarrierLost)
priv->stats.tx_carrier_errors++;
dev->stats.tx_carrier_errors++;

if (tx_status & TxOutOfWindow)
priv->stats.tx_window_errors++;
dev->stats.tx_window_errors++;
}

if (tx_status & TxUnderrun)
priv->stats.tx_fifo_errors++;
dev->stats.tx_fifo_errors++;
}

if (priv->tx_tail != old_tx_tail)
if (netif_queue_stopped(dev))
netif_wake_queue(dev);
}

static void _sc92031_rx_tasklet_error(u32 rx_status,
struct sc92031_priv *priv, unsigned rx_size)
static void _sc92031_rx_tasklet_error(struct net_device *dev,
u32 rx_status, unsigned rx_size)
{
if(rx_size > (MAX_ETH_FRAME_SIZE + 4) || rx_size < 16) {
priv->stats.rx_errors++;
priv->stats.rx_length_errors++;
dev->stats.rx_errors++;
dev->stats.rx_length_errors++;
}

if (!(rx_status & RxStatesOK)) {
priv->stats.rx_errors++;
dev->stats.rx_errors++;

if (rx_status & (RxHugeFrame | RxSmallFrame))
priv->stats.rx_length_errors++;
dev->stats.rx_length_errors++;

if (rx_status & RxBadAlign)
priv->stats.rx_frame_errors++;
dev->stats.rx_frame_errors++;

if (!(rx_status & RxCRCOK))
priv->stats.rx_crc_errors++;
} else
dev->stats.rx_crc_errors++;
} else {
struct sc92031_priv *priv = netdev_priv(dev);
priv->rx_loss++;
}
}

static void _sc92031_rx_tasklet(struct net_device *dev)
Expand Down Expand Up @@ -783,7 +784,7 @@ static void _sc92031_rx_tasklet(struct net_device *dev)
|| rx_size > (MAX_ETH_FRAME_SIZE + 4)
|| rx_size < 16
|| !(rx_status & RxStatesOK))) {
_sc92031_rx_tasklet_error(rx_status, priv, rx_size);
_sc92031_rx_tasklet_error(dev, rx_status, rx_size);
break;
}

Expand Down Expand Up @@ -818,11 +819,11 @@ static void _sc92031_rx_tasklet(struct net_device *dev)
dev->last_rx = jiffies;
netif_rx(skb);

priv->stats.rx_bytes += pkt_size;
priv->stats.rx_packets++;
dev->stats.rx_bytes += pkt_size;
dev->stats.rx_packets++;

if (rx_status & Rx_Multicast)
priv->stats.multicast++;
dev->stats.multicast++;

next:
rx_ring_offset = (rx_ring_offset + rx_size_align) % RX_BUF_LEN;
Expand All @@ -835,13 +836,11 @@ static void _sc92031_rx_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))
netif_wake_queue(dev);
else {
netif_stop_queue(dev);
priv->stats.tx_carrier_errors++;
dev->stats.tx_carrier_errors++;
}
}

Expand All @@ -866,11 +865,11 @@ static void sc92031_tasklet(unsigned long data)
_sc92031_rx_tasklet(dev);

if (intr_status & RxOverflow)
priv->stats.rx_errors++;
dev->stats.rx_errors++;

if (intr_status & TimeOut) {
priv->stats.rx_errors++;
priv->stats.rx_length_errors++;
dev->stats.rx_errors++;
dev->stats.rx_length_errors++;
}

if (intr_status & (LinkFail | LinkOK))
Expand Down Expand Up @@ -936,15 +935,14 @@ static struct net_device_stats *sc92031_get_stats(struct net_device *dev)

if (temp == 0xffff) {
priv->rx_value += temp;
priv->stats.rx_fifo_errors = priv->rx_value;
} else {
priv->stats.rx_fifo_errors = temp + priv->rx_value;
}
dev->stats.rx_fifo_errors = priv->rx_value;
} else
dev->stats.rx_fifo_errors = temp + priv->rx_value;

spin_unlock_bh(&priv->lock);
}

return &priv->stats;
return &dev->stats;
}

static int sc92031_start_xmit(struct sk_buff *skb, struct net_device *dev)
Expand All @@ -959,15 +957,15 @@ static int sc92031_start_xmit(struct sk_buff *skb, struct net_device *dev)

if (unlikely(skb->len > TX_BUF_SIZE)) {
err = -EMSGSIZE;
priv->stats.tx_dropped++;
dev->stats.tx_dropped++;
goto out;
}

spin_lock(&priv->lock);

if (unlikely(!netif_carrier_ok(dev))) {
err = -ENOLINK;
priv->stats.tx_dropped++;
dev->stats.tx_dropped++;
goto out_unlock;
}

Expand Down

0 comments on commit 9c28eae

Please sign in to comment.