diff options
author | weongyo <weongyo@FreeBSD.org> | 2010-02-23 19:55:54 +0000 |
---|---|---|
committer | weongyo <weongyo@FreeBSD.org> | 2010-02-23 19:55:54 +0000 |
commit | ccd063c77620282c5d93f34e2539f3af17c42fe6 (patch) | |
tree | e05bba9802db4c684ca779bd6f2c09563e23e5ff | |
parent | 6784b4b28a1285414cfa608a59cfe8b589f32d08 (diff) | |
download | FreeBSD-src-ccd063c77620282c5d93f34e2539f3af17c42fe6.zip FreeBSD-src-ccd063c77620282c5d93f34e2539f3af17c42fe6.tar.gz |
o adds sysctl variables to show device statistics.
o records RTS success/fail statistics.
Pointed by: imp
-rw-r--r-- | sys/dev/bwn/if_bwn.c | 45 | ||||
-rw-r--r-- | sys/dev/bwn/if_bwnvar.h | 2 |
2 files changed, 37 insertions, 10 deletions
diff --git a/sys/dev/bwn/if_bwn.c b/sys/dev/bwn/if_bwn.c index b77f55c..80b567f 100644 --- a/sys/dev/bwn/if_bwn.c +++ b/sys/dev/bwn/if_bwn.c @@ -536,6 +536,7 @@ static void bwn_phy_lp_gaintbl_write_r2(struct bwn_mac *, int, struct bwn_txgain_entry); static void bwn_phy_lp_gaintbl_write_r01(struct bwn_mac *, int, struct bwn_txgain_entry); +static void bwn_sysctl_node(struct bwn_softc *); static struct resource_spec bwn_res_spec_legacy[] = { { SYS_RES_IRQ, 0, RF_ACTIVE | RF_SHAREABLE }, @@ -1066,9 +1067,6 @@ bwn_attach_post(struct bwn_softc *sc) struct ifnet *ifp = sc->sc_ifp; struct siba_dev_softc *sd = sc->sc_sd; struct siba_sprom *sprom = &sd->sd_bus->siba_sprom; -#ifdef BWN_DEBUG - device_t dev = sc->sc_dev; -#endif ic = ifp->if_l2com; ic->ic_ifp = ifp; @@ -1117,11 +1115,7 @@ bwn_attach_post(struct bwn_softc *sc) &sc->sc_rx_th.wr_ihdr, sizeof(sc->sc_rx_th), BWN_RX_RADIOTAP_PRESENT); -#ifdef BWN_DEBUG - SYSCTL_ADD_UINT(device_get_sysctl_ctx(dev), - SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, - "debug", CTLFLAG_RW, &sc->sc_debug, 0, "Debug flags"); -#endif + bwn_sysctl_node(sc); if (bootverbose) ieee80211_announce(ic); @@ -9077,6 +9071,7 @@ bwn_handle_txeof(struct bwn_mac *mac, const struct bwn_txstatus *status) struct bwn_pio_txqueue *tq; struct bwn_pio_txpkt *tp = NULL; struct bwn_softc *sc = mac->mac_sc; + struct bwn_stats *stats = &mac->mac_stats; struct ieee80211_node *ni; int slot; @@ -9088,9 +9083,9 @@ bwn_handle_txeof(struct bwn_mac *mac, const struct bwn_txstatus *status) device_printf(sc->sc_dev, "TODO: STATUS AMPDU\n"); if (status->rtscnt) { if (status->rtscnt == 0xf) - device_printf(sc->sc_dev, "TODO: RTS fail\n"); + stats->rtsfail++; else - device_printf(sc->sc_dev, "TODO: RTS ok\n"); + stats->rts++; } if (mac->mac_flags & BWN_MAC_FLAG_DMA) { @@ -14286,6 +14281,36 @@ bwn_phy_lp_gaintbl_write_r01(struct bwn_mac *mac, int offset, } static void +bwn_sysctl_node(struct bwn_softc *sc) +{ + device_t dev = sc->sc_dev; + struct bwn_mac *mac; + struct bwn_stats *stats; + + /* XXX assume that count of MAC is only 1. */ + + if ((mac = sc->sc_curmac) == NULL) + return; + stats = &mac->mac_stats; + + SYSCTL_ADD_UINT(device_get_sysctl_ctx(dev), + SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, + "linknoise", CTLFLAG_RW, &stats->rts, 0, "Noise level"); + SYSCTL_ADD_UINT(device_get_sysctl_ctx(dev), + SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, + "rts", CTLFLAG_RW, &stats->rts, 0, "RTS"); + SYSCTL_ADD_UINT(device_get_sysctl_ctx(dev), + SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, + "rtsfail", CTLFLAG_RW, &stats->rtsfail, 0, "RTS failed to send"); + +#ifdef BWN_DEBUG + SYSCTL_ADD_UINT(device_get_sysctl_ctx(dev), + SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, + "debug", CTLFLAG_RW, &sc->sc_debug, 0, "Debug flags"); +#endif +} + +static void bwn_identify(driver_t *driver, device_t parent) { diff --git a/sys/dev/bwn/if_bwnvar.h b/sys/dev/bwn/if_bwnvar.h index 40b759e..61598c2 100644 --- a/sys/dev/bwn/if_bwnvar.h +++ b/sys/dev/bwn/if_bwnvar.h @@ -515,6 +515,8 @@ struct bwn_tx_radiotap_header { }; struct bwn_stats { + int32_t rtsfail; + int32_t rts; int32_t link_noise; }; |