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, &param, 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