Author: adrian
Date: Wed Oct 26 16:11:49 2011
New Revision: 226799
URL: http://svn.freebsd.org/changeset/base/226799

Log:
  Bring over the new aggregate statistics from the 11n branch.
  
  Some of these values are currently updated by the driver (the 11n
  RX related statistics) so they are immediately useful.

Modified:
  head/tools/tools/ath/athstats/athstats.c

Modified: head/tools/tools/ath/athstats/athstats.c
==============================================================================
--- head/tools/tools/ath/athstats/athstats.c    Wed Oct 26 16:09:05 2011        
(r226798)
+++ head/tools/tools/ath/athstats/athstats.c    Wed Oct 26 16:11:49 2011        
(r226799)
@@ -49,18 +49,10 @@
 #include <unistd.h>
 #include <err.h>
 
-/* Use the system net80211 headers, rather than the kernel tree */
-/*
- * XXX this means that if you build a separate net80211 stack
- * XXX with your kernel and don't install the new/changed headers,
- * XXX this tool may break.
- * XXX -adrian
- */
-#include <net80211/ieee80211_ioctl.h>
-#include <net80211/ieee80211_radiotap.h>
-
 #include "ah.h"
 #include "ah_desc.h"
+#include "net80211/ieee80211_ioctl.h"
+#include "net80211/ieee80211_radiotap.h"
 #include "if_athioctl.h"
 
 #include "athstats.h"
@@ -256,8 +248,46 @@ static const struct fmt athstats[] = {
        { 5,    "txrawfail",    "txrawfail",    "raw tx failed 'cuz 
interface/hw down" },
 #define        S_RX_TOOBIG     AFTER(S_TX_RAW_FAIL)
        { 5,    "rx2big",       "rx2big",       "rx failed 'cuz frame too 
large"  },
+#define        S_RX_AGG        AFTER(S_RX_TOOBIG)
+       { 5,    "rxagg",        "rxagg",        "A-MPDU sub-frames received" },
+#define        S_RX_HALFGI     AFTER(S_RX_AGG)
+       { 5,    "rxhalfgi",     "rxhgi",        "Half-GI frames received" },
+#define        S_RX_2040       AFTER(S_RX_HALFGI)
+       { 6,    "rx2040",       "rx2040",       "40MHz frames received" },
+#define        S_RX_PRE_CRC_ERR        AFTER(S_RX_2040)
+       { 11,   "rxprecrcerr",  "rxprecrcerr",  "CRC errors for non-last A-MPDU 
subframes" },
+#define        S_RX_POST_CRC_ERR       AFTER(S_RX_PRE_CRC_ERR)
+       { 12,   "rxpostcrcerr", "rxpostcrcerr", "CRC errors for last subframe 
in an A-MPDU" },
+#define        S_RX_DECRYPT_BUSY_ERR   AFTER(S_RX_POST_CRC_ERR)
+       { 10,   "rxdescbusy",   "rxdescbusy",   "Decryption engine busy" },
+#define        S_RX_HI_CHAIN   AFTER(S_RX_DECRYPT_BUSY_ERR)
+       { 4,    "rxhi", "rxhi", "Frames received with RX chain in high power 
mode" },
+#define        S_TX_HTPROTECT  AFTER(S_RX_HI_CHAIN)
+       { 7,    "txhtprot",     "txhtprot",     "Frames transmitted with HT 
Protection" },
+#define        S_RX_QEND       AFTER(S_TX_HTPROTECT)
+       { 7,    "rxquend",      "rxquend",      "Hit end of RX descriptor 
queue" },
+#define        S_TX_TIMEOUT    AFTER(S_RX_QEND)
+       { 4,    "txtimeout",    "TXTX", "TX Timeout" },
+#define        S_TX_CSTIMEOUT  AFTER(S_TX_TIMEOUT)
+       { 4,    "csttimeout",   "CSTX", "Carrier Sense Timeout" },
+#define        S_TX_XTXOP_ERR  AFTER(S_TX_CSTIMEOUT)
+       { 5,    "xtxoperr",     "TXOPX",        "TXOP exceed" },
+#define        S_TX_TIMEREXPIRED_ERR   AFTER(S_TX_XTXOP_ERR)
+       { 7,    "texperr",      "texperr",      "TX Timer expired" },
+#define        S_TX_DESCCFG_ERR        AFTER(S_TX_TIMEREXPIRED_ERR)
+       { 10,   "desccfgerr",   "desccfgerr",   "TX descriptor error" },
+#define        S_TX_SWRETRIES  AFTER(S_TX_DESCCFG_ERR)
+       { 9,    "txswretry",    "txswretry",    "Number of frames retransmitted 
in software" },
+#define        S_TX_SWRETRIES_MAX      AFTER(S_TX_SWRETRIES)
+       { 7,    "txswmax",      "txswmax",      "Number of frames exceeding 
software retry" },
+#define        S_TX_DATA_UNDERRUN      AFTER(S_TX_SWRETRIES_MAX)
+       { 5,    "txdataunderrun",       "TXDAU",        "A-MPDU TX FIFO data 
underrun" },
+#define        S_TX_DELIM_UNDERRUN     AFTER(S_TX_DATA_UNDERRUN)
+       { 5,    "txdelimunderrun",      "TXDEU",        "A-MPDU TX Delimiter 
underrun" },
+#define        S_TX_AGGR_FAIL          AFTER(S_TX_DELIM_UNDERRUN)
+       { 10,   "txaggrfail",   "txaggrfail",   "A-MPDU TX attempt failed" },
 #ifndef __linux__
-#define        S_CABQ_XMIT     AFTER(S_RX_TOOBIG)
+#define        S_CABQ_XMIT     AFTER(S_TX_AGGR_FAIL)
        { 5,    "cabxmit",      "cabxmit",      "cabq frames transmitted" },
 #define        S_CABQ_BUSY     AFTER(S_CABQ_XMIT)
        { 5,    "cabqbusy",     "cabqbusy",     "cabq xmit overflowed beacon 
interval" },
@@ -269,7 +299,7 @@ static const struct fmt athstats[] = {
        { 5,    "rxbusdma",     "rxbusdma",     "rx setup failed for dma 
resrcs" },
 #define        S_FF_TXOK       AFTER(S_RX_BUSDMA)
 #else
-#define        S_FF_TXOK       AFTER(S_RX_PHY_UNDERRUN)
+#define        S_FF_TXOK       AFTER(S_TX_AGGR_FAIL)
 #endif
        { 5,    "fftxok",       "fftxok",       "fast frames xmit successfully" 
},
 #define        S_FF_TXERR      AFTER(S_FF_TXOK)
@@ -384,12 +414,16 @@ static const struct fmt athstats[] = {
        { 4,    "asignal",      "asig", "signal of last ack (dBm)" },
 #define        S_RX_SIGNAL     AFTER(S_TX_SIGNAL)
        { 4,    "signal",       "sig",  "avg recv signal (dBm)" },
+
 };
 #define        S_PHY_MIN       S_RX_PHY_UNDERRUN
 #define        S_PHY_MAX       S_RX_PHY_CCK_RESTART
 #define        S_LAST          S_ANT_TX0
 #define        S_MAX   S_ANT_RX7+1
 
+/*
+ * XXX fold this into the external HAL definitions! -adrian
+ */
 struct _athstats {
        struct ath_stats ath;
 #ifdef ATH_SUPPORT_ANI
@@ -723,6 +757,25 @@ ath_get_curstat(struct statfoo *sf, int 
                snprintf(b, bs, "%d",
                        wf->cur.ath.ast_rx_rssi + wf->cur.ath.ast_rx_noise);
                return 1;
+       case S_RX_AGG:          STAT(rx_agg);
+       case S_RX_HALFGI:       STAT(rx_halfgi);
+       case S_RX_2040:         STAT(rx_2040);
+       case S_RX_PRE_CRC_ERR:  STAT(rx_pre_crc_err);
+       case S_RX_POST_CRC_ERR: STAT(rx_post_crc_err);
+       case S_RX_DECRYPT_BUSY_ERR:     STAT(rx_decrypt_busy_err);
+       case S_RX_HI_CHAIN:     STAT(rx_hi_rx_chain);
+       case S_TX_HTPROTECT:    STAT(tx_htprotect);
+       case S_RX_QEND:         STAT(rx_hitqueueend);
+       case S_TX_TIMEOUT:      STAT(tx_timeout);
+       case S_TX_CSTIMEOUT:    STAT(tx_cst);
+       case S_TX_XTXOP_ERR:    STAT(tx_xtxop);
+       case S_TX_TIMEREXPIRED_ERR:     STAT(tx_timerexpired);
+       case S_TX_DESCCFG_ERR:  STAT(tx_desccfgerr);
+       case S_TX_SWRETRIES:    STAT(tx_swretries);
+       case S_TX_SWRETRIES_MAX:        STAT(tx_swretrymax);
+       case S_TX_DATA_UNDERRUN:        STAT(tx_data_underrun);
+       case S_TX_DELIM_UNDERRUN:       STAT(tx_delim_underrun);
+       case S_TX_AGGR_FAIL:            STAT(tx_aggrfail);
        }
        b[0] = '\0';
        return 0;
@@ -943,7 +996,27 @@ ath_get_totstat(struct statfoo *sf, int 
                snprintf(b, bs, "%d",
                        wf->total.ath.ast_rx_rssi + wf->total.ath.ast_rx_noise);
                return 1;
+       case S_RX_AGG:          STAT(rx_agg);
+       case S_RX_HALFGI:       STAT(rx_halfgi);
+       case S_RX_2040:         STAT(rx_2040);
+       case S_RX_PRE_CRC_ERR:  STAT(rx_pre_crc_err);
+       case S_RX_POST_CRC_ERR: STAT(rx_post_crc_err);
+       case S_RX_DECRYPT_BUSY_ERR:     STAT(rx_decrypt_busy_err);
+       case S_RX_HI_CHAIN:     STAT(rx_hi_rx_chain);
+       case S_TX_HTPROTECT:    STAT(tx_htprotect);
+       case S_RX_QEND:         STAT(rx_hitqueueend);
+       case S_TX_TIMEOUT:      STAT(tx_timeout);
+       case S_TX_CSTIMEOUT:    STAT(tx_cst);
+       case S_TX_XTXOP_ERR:    STAT(tx_xtxop);
+       case S_TX_TIMEREXPIRED_ERR:     STAT(tx_timerexpired);
+       case S_TX_DESCCFG_ERR:  STAT(tx_desccfgerr);
+       case S_TX_SWRETRIES:    STAT(tx_swretries);
+       case S_TX_SWRETRIES_MAX:        STAT(tx_swretrymax);
+       case S_TX_DATA_UNDERRUN:        STAT(tx_data_underrun);
+       case S_TX_DELIM_UNDERRUN:       STAT(tx_delim_underrun);
+       case S_TX_AGGR_FAIL:            STAT(tx_aggrfail);
        }
+
        b[0] = '\0';
        return 0;
 #undef RXANT
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to