[PATCH 2.6] Realtek RTL-8169 RX/TX Statistics

From: Fernando Alencar Maróstica
Date: Tue Dec 02 2003 - 20:23:41 EST


Hello Francois

It's a simple and small patch.
This patch add stats improvements and fixes.


Cheers!

--
Fernando Alencar Maróstica
Graduate Student, Computer Science
Linux Register User Id #281457

University Methodist of Piracicaba
Departament of Computer Science
email: famarost@xxxxxxxxx
homepage: http://www.unimep.br/~famarost



--- r8169.c.orig 2003-12-02 20:36:07.000000000 -0200
+++ r8169.c 2003-12-02 20:52:19.000000000 -0200
@@ -303,7 +303,7 @@
static int rtl8169_close(struct net_device *dev);
static void rtl8169_set_rx_mode(struct net_device *dev);
static void rtl8169_tx_timeout(struct net_device *dev);
-static struct net_device_stats *rtl8169_get_stats(struct net_device *netdev);
+static struct net_device_stats *rtl8169_get_stats(struct net_device *ethernet_device);

static const u16 rtl8169_intr_mask =
SYSErr | PCSTimeout | RxUnderrun | RxOverflow | RxFIFOOver | TxErr | TxOK |
@@ -1113,11 +1113,26 @@
spin_unlock_irqrestore(&tp->lock, flags);
}

+/**
+ * rtl8169_get_stats: - Get rtl8169 read/write statistics
+ * @ethernet_device: The Ethernet Device to get statistics for
+ *
+ * Get TX/RX statistics for rtl8169
+ */
struct net_device_stats *
-rtl8169_get_stats(struct net_device *dev)
+rtl8169_get_stats(struct net_device *ethernet_device)
{
- struct rtl8169_private *tp = dev->priv;
+ struct rtl8169_private *tp = ethernet_device->priv;
+ void *ioaddr = tp->mmio_addr;
+ unsigned long flags;

+ if (netif_running(ethernet_device)) {
+ spin_lock_irqsave (&tp->lock, flags);
+ tp->stats.rx_missed_errors += RTL_R32 (RxMissed);
+ RTL_W32 (RxMissed, 0);
+ spin_unlock_irqrestore (&tp->lock, flags);
+ }
+
return &tp->stats;
}