[Madwifi-cvs] revision 3515 committed
Status: Beta
Brought to you by:
otaku
From: Michael T. <svn...@ma...> - 2008-04-10 05:26:49
|
Project : madwifi Revision : 3515 Author : mtaylor (Michael Taylor) Date : 2008-04-10 07:26:44 +0200 (Thu, 10 Apr 2008) Log Message : * Eliminate an_halstats as it is unused. The HAL doesn't know about nodes. * Replace an_halstats it with an_avgrssi (EWMA) * Only update stats in ath_softc* when we are on-channel and acting as a station, as there is no meaning to these stats as an AP. Affected Files: * madwifi/trunk/ath/if_ath.c updated * madwifi/trunk/ath/if_athvar.h updated Modified: madwifi/trunk/ath/if_ath.c =================================================================== --- madwifi/trunk/ath/if_ath.c 2008-04-10 05:11:35 UTC (rev 3514) +++ madwifi/trunk/ath/if_ath.c 2008-04-10 05:26:44 UTC (rev 3515) @@ -5705,9 +5705,7 @@ if (an != NULL) { memset(an, 0, space); an->an_decomp_index = INVALID_DECOMP_INDEX; - an->an_halstats.ns_avgbrssi = ATH_RSSI_DUMMY_MARKER; - an->an_halstats.ns_avgrssi = ATH_RSSI_DUMMY_MARKER; - an->an_halstats.ns_avgtxrssi = ATH_RSSI_DUMMY_MARKER; + an->an_avgrssi = ATH_RSSI_DUMMY_MARKER; /* * ath_rate_node_init needs a vap pointer in node * to decide which mgt rate to use @@ -5810,7 +5808,7 @@ #define HAL_EP_RND(x, mul) \ ((((x) % (mul)) >= ((mul) / 2)) ? ((x) + ((mul) - 1)) / \ (mul) : (x)/(mul)) - u_int32_t avgrssi = ATH_NODE_CONST(ni)->an_halstats.ns_avgrssi; + u_int32_t avgrssi = ATH_NODE_CONST(ni)->an_avgrssi; int32_t rssi; /* @@ -6420,8 +6418,12 @@ switch (subtype) { case IEEE80211_FC0_SUBTYPE_BEACON: - /* Update RSSI statistics for use by the HAL. */ - ATH_RSSI_LPF(ATH_NODE(ni)->an_halstats.ns_avgbrssi, rssi); + /* Update beacon RSSI statistics, (apply to "pure" STA only) + * AND only for our AP's beacons */ + if(vap->iv_opmode == IEEE80211_M_STA && + sc->sc_ic.ic_opmode == IEEE80211_M_STA && + ni == vap->iv_bss) + ATH_RSSI_LPF(sc->sc_halstats.ns_avgbrssi, rssi); if ((sc->sc_syncbeacon || (vap->iv_flags_ext & IEEE80211_FEXT_APPIE_UPDATE)) && ni == vap->iv_bss && vap->iv_state == IEEE80211_S_RUN) { @@ -6732,7 +6734,6 @@ /* Fast path: node is present in the key map; * grab a reference for processing the frame. */ ni = ieee80211_ref_node(ni); - ATH_RSSI_LPF(ATH_NODE(ni)->an_halstats.ns_avgrssi, rs->rs_rssi); type = ieee80211_input(ni->ni_vap, ni, skb, rs->rs_rssi, bf->bf_tsf); ieee80211_unref_node(&ni); } else { @@ -6744,8 +6745,6 @@ (const struct ieee80211_frame_min *)skb->data); if (ni != NULL) { ieee80211_keyix_t keyix; - - ATH_RSSI_LPF(ATH_NODE(ni)->an_halstats.ns_avgrssi, rs->rs_rssi); type = ieee80211_input(ni->ni_vap, ni, skb, rs->rs_rssi, bf->bf_tsf); /* * If the station has a key cache slot assigned @@ -8290,8 +8289,11 @@ if (ts->ts_rate & HAL_TXSTAT_ALTRATE) sc->sc_stats.ast_tx_altrate++; sc->sc_stats.ast_tx_rssi = ts->ts_rssi; - ATH_RSSI_LPF(an->an_halstats.ns_avgtxrssi, - ts->ts_rssi); + /* Update HAL stats for ANI, only when on-channel */ + if (!sc->sc_scanning && + !(sc->sc_ic.ic_flags & IEEE80211_F_SCAN)) + ATH_RSSI_LPF(sc->sc_halstats.ns_avgtxrssi, + ts->ts_rssi); if (bf->bf_skb->priority == WME_AC_VO || bf->bf_skb->priority == WME_AC_VI) ni->ni_ic->ic_wme.wme_hipri_traffic++; @@ -9181,6 +9183,13 @@ if (vap->iv_opmode == IEEE80211_M_MONITOR) { /* nothing to do */; } else if (nstate == IEEE80211_S_RUN) { + /* + * Reset RSSI stats (regardless of mode)... + */ + sc->sc_halstats.ns_avgbrssi = ATH_RSSI_DUMMY_MARKER; + sc->sc_halstats.ns_avgrssi = ATH_RSSI_DUMMY_MARKER; + sc->sc_halstats.ns_avgtxrssi = ATH_RSSI_DUMMY_MARKER; + DPRINTF(sc, ATH_DEBUG_STATE, "%s->%s: ic_flags=0x%08x iv=%d BSSID=" MAC_FMT " capinfo=0x%04x chan=%d\n", @@ -9313,12 +9322,6 @@ break; } - /* - * Reset rssi stats; maybe not the best place... - */ - sc->sc_halstats.ns_avgbrssi = ATH_RSSI_DUMMY_MARKER; - sc->sc_halstats.ns_avgrssi = ATH_RSSI_DUMMY_MARKER; - sc->sc_halstats.ns_avgtxrssi = ATH_RSSI_DUMMY_MARKER; /* if it is a DFS channel and has not been checked for radar * do not let the 80211 state machine to go to RUN state. */ if (sc->sc_dfs_cac && @@ -9370,6 +9373,10 @@ /* Invoke the parent method to complete the work. */ error = avp->av_newstate(vap, nstate, arg); + /* Reset halstats on state change (per freebsd sources) */ + sc->sc_halstats.ns_avgbrssi = ATH_RSSI_DUMMY_MARKER; + sc->sc_halstats.ns_avgrssi = ATH_RSSI_DUMMY_MARKER; + sc->sc_halstats.ns_avgtxrssi = ATH_RSSI_DUMMY_MARKER; /* Finally, start any timers. */ if ((nstate == IEEE80211_S_RUN) && !sc->sc_beacon_cal) { /* start periodic recalibration timer */ Modified: madwifi/trunk/ath/if_athvar.h =================================================================== --- madwifi/trunk/ath/if_athvar.h 2008-04-10 05:11:35 UTC (rev 3514) +++ madwifi/trunk/ath/if_athvar.h 2008-04-10 05:26:44 UTC (rev 3515) @@ -362,9 +362,9 @@ struct ath_node { struct ieee80211_node an_node; /* base class */ u_int16_t an_decomp_index; /* decompression mask index */ + u_int32_t an_avgrssi; /* average rssi over all rx frames */ u_int8_t an_prevdatarix; /* rate ix of last data frame */ u_int16_t an_minffrate; /* min rate in kbps for ff to aggregate */ - HAL_NODE_STATS an_halstats; /* rssi statistics used by hal */ struct ath_buf *an_tx_ffbuf[WME_NUM_AC]; /* ff staging area */ |