svn commit: r250346 - in head/sys/dev/ath: . ath_hal ath_hal/ar5416
Adrian Chadd
adrian at FreeBSD.org
Wed May 8 01:11:27 UTC 2013
Author: adrian
Date: Wed May 8 01:11:25 2013
New Revision: 250346
URL: http://svnweb.freebsd.org/changeset/base/250346
Log:
Implement STBC receive frame statistics.
The AR9280 and later can receive STBC. This adds some statistics
tracking to count these frames.
A patch to athstats will be forthcoming.
Modified:
head/sys/dev/ath/ath_hal/ah_desc.h
head/sys/dev/ath/ath_hal/ar5416/ar5416_recv.c
head/sys/dev/ath/ath_hal/ar5416/ar5416desc.h
head/sys/dev/ath/if_ath_rx.c
head/sys/dev/ath/if_ath_sysctl.c
head/sys/dev/ath/if_athioctl.h
Modified: head/sys/dev/ath/ath_hal/ah_desc.h
==============================================================================
--- head/sys/dev/ath/ath_hal/ah_desc.h Wed May 8 01:03:41 2013 (r250345)
+++ head/sys/dev/ath/ath_hal/ah_desc.h Wed May 8 01:11:25 2013 (r250346)
@@ -155,6 +155,7 @@ struct ath_rx_status {
#define HAL_RX_DECRYPT_BUSY 0x0040 /* decrypt was too slow */
#define HAL_RX_HI_RX_CHAIN 0x0080 /* SM power save: hi Rx chain control */
#define HAL_RX_IS_APSD 0x0100 /* Is ASPD trigger frame */
+#define HAL_RX_STBC 0x0200 /* Is an STBC frame */
enum {
HAL_PHYERR_UNDERRUN = 0, /* Transmit underrun */
Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_recv.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416_recv.c Wed May 8 01:03:41 2013 (r250345)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416_recv.c Wed May 8 01:11:25 2013 (r250346)
@@ -209,6 +209,14 @@ ar5416ProcRxDesc(struct ath_hal *ah, str
if (ads->ds_rxstatus3 & AR_2040)
rs->rs_flags |= HAL_RX_2040;
+ /*
+ * Only the AR9280 and later chips support STBC RX, so
+ * ensure we only set this bit for those chips.
+ */
+ if (AR_SREV_MERLIN_10_OR_LATER(ah)
+ && ads->ds_rxstatus3 & AR_STBCFrame)
+ rs->rs_flags |= HAL_RX_STBC;
+
if (ads->ds_rxstatus8 & AR_PreDelimCRCErr)
rs->rs_flags |= HAL_RX_DELIM_CRC_PRE;
if (ads->ds_rxstatus8 & AR_PostDelimCRCErr)
Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416desc.h
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416desc.h Wed May 8 01:03:41 2013 (r250345)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416desc.h Wed May 8 01:11:25 2013 (r250346)
@@ -357,6 +357,7 @@ struct ar5416_desc {
#define AR_RxStatusRsvd30 0xfffff800
/* Owl 2.x only */
#define AR_DupFrame 0x00000004
+#define AR_STBCFrame 0x00000008
#define AR_RxAntenna 0xffffff00
#define AR_RxAntenna_S 8
Modified: head/sys/dev/ath/if_ath_rx.c
==============================================================================
--- head/sys/dev/ath/if_ath_rx.c Wed May 8 01:03:41 2013 (r250345)
+++ head/sys/dev/ath/if_ath_rx.c Wed May 8 01:11:25 2013 (r250346)
@@ -545,6 +545,8 @@ ath_rx_pkt(struct ath_softc *sc, struct
sc->sc_stats.ast_rx_decrypt_busy_err++;
if (rs->rs_flags & HAL_RX_HI_RX_CHAIN)
sc->sc_stats.ast_rx_hi_rx_chain++;
+ if (rs->rs_flags & HAL_RX_STBC)
+ sc->sc_stats.ast_rx_stbc++;
#endif /* AH_SUPPORT_AR5416 */
if (rs->rs_status != 0) {
Modified: head/sys/dev/ath/if_ath_sysctl.c
==============================================================================
--- head/sys/dev/ath/if_ath_sysctl.c Wed May 8 01:03:41 2013 (r250345)
+++ head/sys/dev/ath/if_ath_sysctl.c Wed May 8 01:11:25 2013 (r250346)
@@ -1076,6 +1076,9 @@ ath_sysctl_stats_attach(struct ath_softc
&sc->sc_stats.ast_rx_keymiss, 0, "");
SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_swfiltered", CTLFLAG_RD,
&sc->sc_stats.ast_tx_swfiltered, 0, "");
+ SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_stbc",
+ CTLFLAG_RD, &sc->sc_stats.ast_rx_stbc, 0,
+ "Number of STBC frames received");
/* Attach the RX phy error array */
ath_sysctl_stats_attach_rxphyerr(sc, child);
Modified: head/sys/dev/ath/if_athioctl.h
==============================================================================
--- head/sys/dev/ath/if_athioctl.h Wed May 8 01:03:41 2013 (r250345)
+++ head/sys/dev/ath/if_athioctl.h Wed May 8 01:11:25 2013 (r250346)
@@ -163,9 +163,9 @@ struct ath_stats {
u_int32_t ast_tx_mcastq_overflow; /* multicast queue overflow */
u_int32_t ast_rx_keymiss;
u_int32_t ast_tx_swfiltered;
+ u_int32_t ast_rx_stbc; /* RX STBC frame */
u_int32_t ast_tx_nodeq_overflow; /* node sw queue overflow */
-
- u_int32_t ast_pad[14];
+ u_int32_t ast_pad[13];
};
#define SIOCGATHSTATS _IOWR('i', 137, struct ifreq)
More information about the svn-src-head
mailing list