ath9k: ignore invalid signal strength values in a-mpdu packets, fixes average signal...
[openwrt/svn-archive/archive.git] / package / mac80211 / patches / 581-ath9k_report_missing_signal.patch
1 --- a/drivers/net/wireless/ath/ath9k/recv.c
2 +++ b/drivers/net/wireless/ath/ath9k/recv.c
3 @@ -954,6 +954,7 @@ static void ath9k_process_rssi(struct at
4 struct ath_softc *sc = hw->priv;
5 struct ath_hw *ah = common->ah;
6 int last_rssi;
7 + int rssi = rx_stats->rs_rssi;
8
9 if (!rx_stats->is_mybeacon ||
10 ((ah->opmode != NL80211_IFTYPE_STATION) &&
11 @@ -965,13 +966,12 @@ static void ath9k_process_rssi(struct at
12
13 last_rssi = sc->last_rssi;
14 if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER))
15 - rx_stats->rs_rssi = ATH_EP_RND(last_rssi,
16 - ATH_RSSI_EP_MULTIPLIER);
17 - if (rx_stats->rs_rssi < 0)
18 - rx_stats->rs_rssi = 0;
19 + rssi = ATH_EP_RND(last_rssi, ATH_RSSI_EP_MULTIPLIER);
20 + if (rssi < 0)
21 + rssi = 0;
22
23 /* Update Beacon RSSI, this is used by ANI. */
24 - ah->stats.avgbrssi = rx_stats->rs_rssi;
25 + ah->stats.avgbrssi = rssi;
26 }
27
28 /*
29 @@ -1012,6 +1012,8 @@ static int ath9k_rx_skb_preprocess(struc
30 rx_status->signal = ah->noise + rx_stats->rs_rssi;
31 rx_status->antenna = rx_stats->rs_antenna;
32 rx_status->flag |= RX_FLAG_MACTIME_MPDU;
33 + if (rx_stats->rs_moreaggr)
34 + rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL;
35
36 for (i = 0, j = 0; i < ARRAY_SIZE(rx_stats->rs_rssi_ctl); i++) {
37 s8 rssi;