From c993a44fa30a2419981ce5c921bd221ecf6a8d53 Mon Sep 17 00:00:00 2001 From: nbd Date: Tue, 7 Feb 2012 15:25:55 +0000 Subject: ath9k: ignore invalid signal strength values in a-mpdu packets, fixes average signal strength display fluctuations git-svn-id: svn://svn.openwrt.org/openwrt/trunk@30359 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../580-mac80211_ignore_bad_signal_values.patch | 44 ++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 package/mac80211/patches/580-mac80211_ignore_bad_signal_values.patch (limited to 'package/mac80211/patches/580-mac80211_ignore_bad_signal_values.patch') diff --git a/package/mac80211/patches/580-mac80211_ignore_bad_signal_values.patch b/package/mac80211/patches/580-mac80211_ignore_bad_signal_values.patch new file mode 100644 index 000000000..b6d88b0ba --- /dev/null +++ b/package/mac80211/patches/580-mac80211_ignore_bad_signal_values.patch @@ -0,0 +1,44 @@ +--- a/include/net/mac80211.h ++++ b/include/net/mac80211.h +@@ -659,6 +659,8 @@ ieee80211_tx_info_clear_status(struct ie + * @RX_FLAG_HT: HT MCS was used and rate_idx is MCS index + * @RX_FLAG_40MHZ: HT40 (40 MHz) was used + * @RX_FLAG_SHORT_GI: Short guard interval was used ++ * @RX_FLAG_NO_SIGNAL_VAL: The signal strength value is not present. ++ * Valid only for data frames (mainly A-MPDU) + */ + enum mac80211_rx_flags { + RX_FLAG_MMIC_ERROR = 1<<0, +@@ -672,6 +674,7 @@ enum mac80211_rx_flags { + RX_FLAG_HT = 1<<9, + RX_FLAG_40MHZ = 1<<10, + RX_FLAG_SHORT_GI = 1<<11, ++ RX_FLAG_NO_SIGNAL_VAL = 1<<12, + }; + + /** +--- a/net/mac80211/rx.c ++++ b/net/mac80211/rx.c +@@ -176,7 +176,8 @@ ieee80211_add_rx_radiotap_header(struct + pos += 2; + + /* IEEE80211_RADIOTAP_DBM_ANTSIGNAL */ +- if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM) { ++ if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM && ++ !(status->flag & RX_FLAG_NO_SIGNAL_VAL)) { + *pos = status->signal; + rthdr->it_present |= + cpu_to_le32(1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL); +@@ -1309,8 +1310,10 @@ ieee80211_rx_h_sta_process(struct ieee80 + + sta->rx_fragments++; + sta->rx_bytes += rx->skb->len; +- sta->last_signal = status->signal; +- ewma_add(&sta->avg_signal, -status->signal); ++ if (!(status->flag & RX_FLAG_NO_SIGNAL_VAL)) { ++ sta->last_signal = status->signal; ++ ewma_add(&sta->avg_signal, -status->signal); ++ } + + if (status->chains) { + sta->chains = status->chains; -- cgit v1.2.3