summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2013-05-13 21:18:00 +0000
committeradrian <adrian@FreeBSD.org>2013-05-13 21:18:00 +0000
commit77b65439cb5f17b580788725cf08bd56c5979949 (patch)
tree0ede11ab4cf02203ce5b937d67b97ab797dffeba /sys/dev
parenta3b2ceee4e01710e4077468427678f3ddfa8ff6f (diff)
downloadFreeBSD-src-77b65439cb5f17b580788725cf08bd56c5979949.zip
FreeBSD-src-77b65439cb5f17b580788725cf08bd56c5979949.tar.gz
Add ALQ beacon debugging.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ath/if_ath.c5
-rw-r--r--sys/dev/ath/if_ath_alq.h14
-rw-r--r--sys/dev/ath/if_ath_beacon.c9
3 files changed, 28 insertions, 0 deletions
diff --git a/sys/dev/ath/if_ath.c b/sys/dev/ath/if_ath.c
index e418039..961a8b7 100644
--- a/sys/dev/ath/if_ath.c
+++ b/sys/dev/ath/if_ath.c
@@ -3058,6 +3058,11 @@ ath_bstuck_proc(void *arg, int pending)
if (ath_hal_gethangstate(sc->sc_ah, 0xff, &hangs) && hangs != 0)
if_printf(ifp, "bb hang detected (0x%x)\n", hangs);
+#ifdef ATH_DEBUG_ALQ
+ if (if_ath_alq_checkdebug(&sc->sc_alq, ATH_ALQ_STUCK_BEACON))
+ if_ath_alq_post(&sc->sc_alq, ATH_ALQ_STUCK_BEACON, 0, NULL);
+#endif
+
if_printf(ifp, "stuck beacon; resetting (bmiss count %u)\n",
sc->sc_bmisscount);
sc->sc_stats.ast_bstuck++;
diff --git a/sys/dev/ath/if_ath_alq.h b/sys/dev/ath/if_ath_alq.h
index 541f2d7..9f6ceac 100644
--- a/sys/dev/ath/if_ath_alq.h
+++ b/sys/dev/ath/if_ath_alq.h
@@ -99,6 +99,20 @@ struct if_ath_alq_interrupt {
uint32_t intr_syncstate;
};
+#define ATH_ALQ_MIB_COUNTERS 11
+struct if_ath_alq_mib_counters {
+ uint32_t valid;
+ uint32_t tx_busy;
+ uint32_t rx_busy;
+ uint32_t chan_busy;
+ uint32_t ext_chan_busy;
+ uint32_t cycle_count;
+};
+
+#define ATH_ALQ_MISSED_BEACON 12
+#define ATH_ALQ_STUCK_BEACON 13
+#define ATH_ALQ_RESUME_BEACON 14
+
/*
* These will always be logged, regardless.
*/
diff --git a/sys/dev/ath/if_ath_beacon.c b/sys/dev/ath/if_ath_beacon.c
index e2c3b5a..b58864c 100644
--- a/sys/dev/ath/if_ath_beacon.c
+++ b/sys/dev/ath/if_ath_beacon.c
@@ -399,6 +399,11 @@ ath_beacon_miss(struct ath_softc *sc)
hangs);
}
+#ifdef ATH_DEBUG_ALQ
+ if (if_ath_alq_checkdebug(&sc->sc_alq, ATH_ALQ_MISSED_BEACON))
+ if_ath_alq_post(&sc->sc_alq, ATH_ALQ_MISSED_BEACON, 0, NULL);
+#endif
+
DPRINTF(sc, ATH_DEBUG_BEACON,
"%s: valid=%d, txbusy=%u, rxbusy=%u, chanbusy=%u, "
"extchanbusy=%u, cyclecount=%u\n",
@@ -451,6 +456,10 @@ ath_beacon_proc(void *arg, int pending)
"%s: resume beacon xmit after %u misses\n",
__func__, sc->sc_bmisscount);
sc->sc_bmisscount = 0;
+#ifdef ATH_DEBUG_ALQ
+ if (if_ath_alq_checkdebug(&sc->sc_alq, ATH_ALQ_RESUME_BEACON))
+ if_ath_alq_post(&sc->sc_alq, ATH_ALQ_RESUME_BEACON, 0, NULL);
+#endif
}
if (sc->sc_stagbeacons) { /* staggered beacons */
OpenPOWER on IntegriCloud