netdev
[Top] [All Lists]

[PATCH] (6/12) skge: use chip MIB stats for packet and byte counts

To: Jeff Garzik <jgarzik@xxxxxxxxx>
Subject: [PATCH] (6/12) skge: use chip MIB stats for packet and byte counts
From: Stephen Hemminger <shemminger@xxxxxxxx>
Date: Thu, 3 Mar 2005 11:37:40 -0800
Cc: netdev@xxxxxxxxxxx
Organization: Open Source Development Lab
Sender: netdev-bounce@xxxxxxxxxxx
Use the chip MIB statistics to implement the packet and byte counts.

Signed-off-by: Stephen Hemminger <shemminger@xxxxxxxx>

--- skge-2.6.11/drivers/net/skge.c.orig 2005-03-02 17:25:25.000000000 -0800
+++ skge-2.6.11/drivers/net/skge.c      2005-03-02 17:29:30.000000000 -0800
@@ -361,6 +361,31 @@
                yukon_get_stats(skge, data);
 }
 
+/* Use hardware MIB variables for critical path statistics and
+ * transmit feedback not reported at interrupt.
+ * Other errors are accounted for in interrupt handler.
+ */
+static struct net_device_stats *skge_get_stats(struct net_device *dev)
+{
+       struct skge_port *skge = netdev_priv(dev);
+       u64 data[ARRAY_SIZE(skge_stats)];
+
+       if (skge->hw->chip_id == CHIP_ID_GENESIS)
+               genesis_get_stats(skge, data);
+       else
+               yukon_get_stats(skge, data);
+
+       skge->net_stats.tx_bytes = data[0];
+       skge->net_stats.rx_bytes = data[1];
+       skge->net_stats.tx_packets = data[2] + data[4] + data[6];
+       skge->net_stats.rx_packets = data[3] + data[5] + data[7];
+       skge->net_stats.multicast = data[5] + data[7];
+       skge->net_stats.collisions = data[10];
+       skge->net_stats.tx_aborted_errors = data[12];
+
+       return &skge->net_stats;
+}
+
 static void skge_get_strings(struct net_device *dev, u32 stringset, u8 *data)
 {
        int i;
@@ -2336,9 +2361,6 @@
                netif_stop_queue(dev);
        }
 
-       skge->net_stats.tx_packets++;
-       skge->net_stats.tx_bytes += skb->len;
-
        dev->trans_start = jiffies;
        spin_unlock_irqrestore(&skge->tx_lock, flags);
 
@@ -2572,8 +2594,6 @@
                }
 
                dev->last_rx = jiffies;
-               skge->net_stats.rx_packets++;
-               skge->net_stats.rx_bytes += skb->len;
                netif_receive_skb(skb);
 
                ++work_done;
@@ -2825,15 +2845,6 @@
 }
 #endif
 
-/* TODO: use MIB counters instead?? */
-static struct net_device_stats *skge_get_stats(struct net_device *dev)
-{
-       struct skge_port *skge = netdev_priv(dev);
-
-       return &skge->net_stats;
-}
-
-
 static int skge_set_mac_address(struct net_device *dev, void *p)
 {
        struct skge_port *skge = netdev_priv(dev);

<Prev in Thread] Current Thread [Next in Thread>
  • [PATCH] (6/12) skge: use chip MIB stats for packet and byte counts, Stephen Hemminger <=