From 88a7777e85ab7f92a05181b0dd3edf2a74d79d03 Mon Sep 17 00:00:00 2001 From: Alexander Egorenkov Date: Tue, 9 Feb 2010 09:52:36 +0100 Subject: [PATCH] Added more Tx statistic counters --- rt2860.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++-------- rt2860_reg.h | 1 + rt2860_softc.h | 7 +++++++ 3 files changed, 55 insertions(+), 8 deletions(-) diff --git a/rt2860.c b/rt2860.c index 63d3438..31d2dd3 100644 --- a/rt2860.c +++ b/rt2860.c @@ -5210,7 +5210,7 @@ static void rt2860_update_stats(struct rt2860_softc *sc) uint16_t associd; uint8_t wcid; uint32_t stacnt[3]; - int txcnt, retrycnt, failcnt; + int beacons, noretryok, retryok, failed; ifp = sc->ifp; ic = ifp->if_l2com; @@ -5234,19 +5234,29 @@ static void rt2860_update_stats(struct rt2860_softc *sc) rt2860_io_mac_read_multi(sc, RT2860_REG_TX_STA_CNT0, stacnt, sizeof(stacnt)); - txcnt = le32toh(stacnt[1]) & 0xffff; - retrycnt = le32toh(stacnt[1]) >> 16; - failcnt = le32toh(stacnt[0]) & 0xffff; + stacnt[0] = le32toh(stacnt[0]); + stacnt[1] = le32toh(stacnt[1]); + stacnt[2] = le32toh(stacnt[2]); + + beacons = stacnt[0] >> 16; + noretryok = stacnt[1] & 0xffff; + retryok = stacnt[1] >> 16; + failed = stacnt[0] & 0xffff; RT2860_DPRINTF(sc, RT2860_DEBUG_STATS, - "%s: update statistic: associd=0x%04x, txcnt=%d, retrycnt=%d, failcnt=%d\n", + "%s: update statistic: associd=0x%04x, beacons=%d, noretryok=%d, retryok=%d, failed=%d\n", device_get_nameunit(sc->dev), - associd, txcnt, retrycnt, failcnt); + associd, beacons, noretryok, retryok, failed); - ifp->if_oerrors += failcnt; + ifp->if_oerrors += failed; rt2860_amrr_tx_update(&sc->amrr_node[wcid], - txcnt + retrycnt + failcnt, txcnt + retrycnt, retrycnt + failcnt); + noretryok + retryok + failed, noretryok + retryok, retryok + failed); + + sc->tx_beacons += beacons; + sc->tx_noretryok += noretryok; + sc->tx_retryok += retryok; + sc->tx_failed += failed; } } @@ -5417,6 +5427,11 @@ static void rt2860_update_raw_counters(struct rt2860_softc *sc) { uint32_t tmp; + tmp = rt2860_io_mac_read(sc, RT2860_REG_TX_AGG_CNT); + + sc->tx_nonagg += tmp & 0xffff; + sc->tx_agg += tmp >> 16; + tmp = rt2860_io_mac_read(sc, RT2860_REG_RX_STA_CNT0); sc->rx_crc_errors += tmp & 0xffff; @@ -6111,6 +6126,30 @@ static void rt2860_sysctl_attach(struct rt2860_softc *sc) "Tx queue 1 not empty"); SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(stats), OID_AUTO, + "tx_beacons", CTLFLAG_RD, &sc->tx_beacons, 0, + "Tx beacons"); + + SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(stats), OID_AUTO, + "tx_noretryok", CTLFLAG_RD, &sc->tx_noretryok, 0, + "Tx successfull without retries"); + + SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(stats), OID_AUTO, + "tx_retryok", CTLFLAG_RD, &sc->tx_retryok, 0, + "Tx successfull with retries"); + + SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(stats), OID_AUTO, + "tx_failed", CTLFLAG_RD, &sc->tx_failed, 0, + "Tx failed"); + + SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(stats), OID_AUTO, + "tx_nonagg", CTLFLAG_RD, &sc->tx_nonagg, 0, + "Tx non-aggregated"); + + SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(stats), OID_AUTO, + "tx_agg", CTLFLAG_RD, &sc->tx_agg, 0, + "Tx aggregated"); + + SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(stats), OID_AUTO, "rx_packets", CTLFLAG_RD, &sc->rx_packets, 0, "Rx packets"); diff --git a/rt2860_reg.h b/rt2860_reg.h index df54c22..1d6e6f1 100644 --- a/rt2860_reg.h +++ b/rt2860_reg.h @@ -104,6 +104,7 @@ #define RT2860_REG_TX_STA_CNT1 0x1710 #define RT2860_REG_TX_STA_CNT2 0x1714 #define RT2860_REG_TX_STA_FIFO 0x1718 +#define RT2860_REG_TX_AGG_CNT 0x171c #define RT2860_REG_WCID(wcid) (0x1800 + (wcid) * 8) #define RT2860_REG_PKEY(wcid) (0x4000 + (wcid) * 32) diff --git a/rt2860_softc.h b/rt2860_softc.h index 575a049..ab37ae4 100644 --- a/rt2860_softc.h +++ b/rt2860_softc.h @@ -329,6 +329,13 @@ struct rt2860_softc unsigned long tx_queue_not_empty[2]; + unsigned long tx_beacons; + unsigned long tx_noretryok; + unsigned long tx_retryok; + unsigned long tx_failed; + unsigned long tx_nonagg; + unsigned long tx_agg; + unsigned long rx_packets; unsigned long rx_crc_errors; unsigned long rx_phy_errors; -- 2.11.4.GIT