aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/b43/main.c
diff options
context:
space:
mode:
authorMichael Buesch <mb@bu3sch.de>2009-09-11 18:48:03 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-09-23 11:35:44 -0400
commit990b86f4f9c54f83085d4136498ac44719b17654 (patch)
tree08e71a5293f53c1d8aec45be80d99ba1a1d41872 /drivers/net/wireless/b43/main.c
parent176e9f6a4cf4b1bf66d18243ede0938a35c81541 (diff)
b43: Add optional verbose runtime statistics
This adds support for verbose runtime statistics. It defaults to off and must be enabled in debugfs, if desired. The first measurement may be incorrect, because statistics are not cleared after they got enabled through debugfs. Signed-off-by: Michael Buesch <mb@bu3sch.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43/main.c')
-rw-r--r--drivers/net/wireless/b43/main.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
index 7d22dadfd890..6468bbeba687 100644
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
@@ -1830,6 +1830,16 @@ static void b43_do_interrupt_thread(struct b43_wldev *dev)
1830 1830
1831 /* Re-enable interrupts on the device by restoring the current interrupt mask. */ 1831 /* Re-enable interrupts on the device by restoring the current interrupt mask. */
1832 b43_write32(dev, B43_MMIO_GEN_IRQ_MASK, dev->irq_mask); 1832 b43_write32(dev, B43_MMIO_GEN_IRQ_MASK, dev->irq_mask);
1833
1834#if B43_DEBUG
1835 if (b43_debug(dev, B43_DBG_VERBOSESTATS)) {
1836 dev->irq_count++;
1837 for (i = 0; i < ARRAY_SIZE(dev->irq_bit_count); i++) {
1838 if (reason & (1 << i))
1839 dev->irq_bit_count[i]++;
1840 }
1841 }
1842#endif
1833} 1843}
1834 1844
1835/* Interrupt thread handler. Handles device interrupts in thread context. */ 1845/* Interrupt thread handler. Handles device interrupts in thread context. */
@@ -2893,6 +2903,27 @@ static void b43_periodic_every15sec(struct b43_wldev *dev)
2893 2903
2894 atomic_set(&phy->txerr_cnt, B43_PHY_TX_BADNESS_LIMIT); 2904 atomic_set(&phy->txerr_cnt, B43_PHY_TX_BADNESS_LIMIT);
2895 wmb(); 2905 wmb();
2906
2907#if B43_DEBUG
2908 if (b43_debug(dev, B43_DBG_VERBOSESTATS)) {
2909 unsigned int i;
2910
2911 b43dbg(dev->wl, "Stats: %7u IRQs/sec, %7u TX/sec, %7u RX/sec\n",
2912 dev->irq_count / 15,
2913 dev->tx_count / 15,
2914 dev->rx_count / 15);
2915 dev->irq_count = 0;
2916 dev->tx_count = 0;
2917 dev->rx_count = 0;
2918 for (i = 0; i < ARRAY_SIZE(dev->irq_bit_count); i++) {
2919 if (dev->irq_bit_count[i]) {
2920 b43dbg(dev->wl, "Stats: %7u IRQ-%02u/sec (0x%08X)\n",
2921 dev->irq_bit_count[i] / 15, i, (1 << i));
2922 dev->irq_bit_count[i] = 0;
2923 }
2924 }
2925 }
2926#endif
2896} 2927}
2897 2928
2898static void do_periodic_work(struct b43_wldev *dev) 2929static void do_periodic_work(struct b43_wldev *dev)
@@ -3092,6 +3123,9 @@ static void b43_tx_work(struct work_struct *work)
3092 dev_kfree_skb(skb); /* Drop it */ 3123 dev_kfree_skb(skb); /* Drop it */
3093 } 3124 }
3094 3125
3126#if B43_DEBUG
3127 dev->tx_count++;
3128#endif
3095 mutex_unlock(&wl->mutex); 3129 mutex_unlock(&wl->mutex);
3096} 3130}
3097 3131