svn commit: r225052 - user/adrian/if_ath_tx/sys/dev/ath
Adrian Chadd
adrian at FreeBSD.org
Sun Aug 21 02:35:11 UTC 2011
Author: adrian
Date: Sun Aug 21 02:35:10 2011
New Revision: 225052
URL: http://svn.freebsd.org/changeset/base/225052
Log:
Add some very basic TX aggregation statistics via a sysctl.
Modified:
user/adrian/if_ath_tx/sys/dev/ath/if_ath_sysctl.c
user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c
user/adrian/if_ath_tx/sys/dev/ath/if_athioctl.h
Modified: user/adrian/if_ath_tx/sys/dev/ath/if_ath_sysctl.c
==============================================================================
--- user/adrian/if_ath_tx/sys/dev/ath/if_ath_sysctl.c Sun Aug 21 00:51:42 2011 (r225051)
+++ user/adrian/if_ath_tx/sys/dev/ath/if_ath_sysctl.c Sun Aug 21 02:35:10 2011 (r225052)
@@ -299,6 +299,35 @@ ath_sysctl_rfkill(SYSCTL_HANDLER_ARGS)
}
static int
+ath_sysctl_txagg(SYSCTL_HANDLER_ARGS)
+{
+ struct ath_softc *sc = arg1;
+ int i, param = 0;
+ int error;
+
+ error = sysctl_handle_int(oidp, ¶m, 0, req);
+ if (error || !req->newptr)
+ return error;
+
+ if (param != 1)
+ return 0;
+
+ printf("aggr single packet: %d\n",
+ sc->sc_stats.tx_aggr.aggr_single_pkt);
+ printf("aggr non-baw packet: %d\n",
+ sc->sc_stats.tx_aggr.aggr_nonbaw_pkt);
+ printf("aggr aggregate packet: %d\n",
+ sc->sc_stats.tx_aggr.aggr_aggr_pkt);
+ for (i = 0; i < 64; i++) {
+ printf("%2d: %10d ", i, sc->sc_stats.tx_aggr.aggr_pkts[i]);
+ if (i % 4 == 3)
+ printf("\n");
+ }
+ printf("\n");
+ return 0;
+}
+
+static int
ath_sysctl_rfsilent(SYSCTL_HANDLER_ARGS)
{
struct ath_softc *sc = arg1;
@@ -465,6 +494,11 @@ ath_sysctlattach(struct ath_softc *sc)
"rfkill", CTLTYPE_INT | CTLFLAG_RW, sc, 0,
ath_sysctl_rfkill, "I", "enable/disable RF kill switch");
}
+
+ SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
+ "txagg", CTLTYPE_INT | CTLFLAG_RW, sc, 0,
+ ath_sysctl_txagg, "I", "");
+
if (ath_hal_hasintmit(ah)) {
SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
"intmit", CTLTYPE_INT | CTLFLAG_RW, sc, 0,
Modified: user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c
==============================================================================
--- user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c Sun Aug 21 00:51:42 2011 (r225051)
+++ user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c Sun Aug 21 02:35:10 2011 (r225052)
@@ -2876,6 +2876,8 @@ ath_tx_tid_hw_queue_aggr(struct ath_soft
ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc);
ath_tx_set_ratectrl(sc, ni, bf);
+ sc->sc_stats.tx_aggr.aggr_nonbaw_pkt++;
+
/* Queue the packet; continue */
goto queuepkt;
}
@@ -2915,12 +2917,14 @@ ath_tx_tid_hw_queue_aggr(struct ath_soft
ath_tx_chaindesclist(sc, bf);
ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc);
ath_tx_set_ratectrl(sc, ni, bf);
+ sc->sc_stats.tx_aggr.aggr_single_pkt++;
} else {
DPRINTF(sc, ATH_DEBUG_SW_TX_AGGR,
"%s: multi-frame aggregate: %d frames, length %d\n",
__func__, bf->bf_state.bfs_nframes,
bf->bf_state.bfs_al);
bf->bf_state.bfs_aggr = 1;
+ sc->sc_stats.tx_aggr.aggr_pkts[bf->bf_state.bfs_nframes]++;
/* Set rate 1, 2, 3 to 0 for aggregate frames */
bf->bf_state.bfs_rc[1].rix =
Modified: user/adrian/if_ath_tx/sys/dev/ath/if_athioctl.h
==============================================================================
--- user/adrian/if_ath_tx/sys/dev/ath/if_athioctl.h Sun Aug 21 00:51:42 2011 (r225051)
+++ user/adrian/if_ath_tx/sys/dev/ath/if_athioctl.h Sun Aug 21 02:35:10 2011 (r225052)
@@ -35,6 +35,13 @@
#ifndef _DEV_ATH_ATHIOCTL_H
#define _DEV_ATH_ATHIOCTL_H
+struct ath_tx_aggr_stats {
+ u_int32_t aggr_pkts[64];
+ u_int32_t aggr_single_pkt;
+ u_int32_t aggr_nonbaw_pkt;
+ u_int32_t aggr_aggr_pkt;
+};
+
struct ath_stats {
u_int32_t ast_watchdog; /* device reset by watchdog */
u_int32_t ast_hardware; /* fatal hardware error interrupts */
@@ -138,6 +145,7 @@ struct ath_stats {
u_int32_t ast_tx_swretrymax; /* software TX retry max limit reach */
u_int32_t ast_tx_data_underrun;
u_int32_t ast_tx_delim_underrun;
+ struct ath_tx_aggr_stats tx_aggr;
u_int32_t ast_pad[9];
};
More information about the svn-src-user
mailing list