diff options
author | Felix Fietkau <nbd@openwrt.org> | 2011-05-16 21:50:26 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2011-05-16 21:50:26 +0000 |
commit | c2bee5a64a2c1aeb45e05474ecf4300f43bc6afa (patch) | |
tree | 86dc37c189ca584d51990f49b08c60ed9bcb0d64 /package/mac80211/patches/560-ath9k_noise_dbm_fixup.patch | |
parent | 894d50da25d002530d83907f0b5015b76d92e912 (diff) | |
download | mtk-20170518-c2bee5a64a2c1aeb45e05474ecf4300f43bc6afa.zip mtk-20170518-c2bee5a64a2c1aeb45e05474ecf4300f43bc6afa.tar.gz mtk-20170518-c2bee5a64a2c1aeb45e05474ecf4300f43bc6afa.tar.bz2 |
mac80211: update to 2011-05-13
SVN-Revision: 26912
Diffstat (limited to 'package/mac80211/patches/560-ath9k_noise_dbm_fixup.patch')
-rw-r--r-- | package/mac80211/patches/560-ath9k_noise_dbm_fixup.patch | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/package/mac80211/patches/560-ath9k_noise_dbm_fixup.patch b/package/mac80211/patches/560-ath9k_noise_dbm_fixup.patch new file mode 100644 index 0000000..486e5d1 --- /dev/null +++ b/package/mac80211/patches/560-ath9k_noise_dbm_fixup.patch @@ -0,0 +1,99 @@ +--- a/drivers/net/wireless/ath/ath9k/calib.c ++++ b/drivers/net/wireless/ath/ath9k/calib.c +@@ -63,6 +63,19 @@ static s16 ath9k_hw_get_default_nf(struc + return ath9k_hw_get_nf_limits(ah, chan)->nominal; + } + ++s16 ath9k_hw_getchan_noise(struct ath_hw *ah, struct ath9k_channel *chan) ++{ ++ s8 noise = ATH_DEFAULT_NOISE_FLOOR; ++ ++ if (chan && chan->noisefloor) { ++ s8 delta = chan->noisefloor - ++ ath9k_hw_get_default_nf(ah, chan); ++ if (delta > 0) ++ noise += delta; ++ } ++ return noise; ++} ++EXPORT_SYMBOL(ath9k_hw_getchan_noise); + + static void ath9k_hw_update_nfcal_hist_buffer(struct ath_hw *ah, + struct ath9k_hw_cal_data *cal, +@@ -378,6 +391,7 @@ bool ath9k_hw_getnf(struct ath_hw *ah, s + + if (!caldata) { + chan->noisefloor = nf; ++ ah->noise = ath9k_hw_getchan_noise(ah, chan); + return false; + } + +@@ -385,6 +399,7 @@ bool ath9k_hw_getnf(struct ath_hw *ah, s + caldata->nfcal_pending = false; + ath9k_hw_update_nfcal_hist_buffer(ah, caldata, nfarray); + chan->noisefloor = h[0].privNF; ++ ah->noise = ath9k_hw_getchan_noise(ah, chan); + return true; + } + +--- a/drivers/net/wireless/ath/ath9k/hw.c ++++ b/drivers/net/wireless/ath/ath9k/hw.c +@@ -1344,6 +1344,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st + memset(caldata, 0, sizeof(*caldata)); + ath9k_init_nfcal_hist_buffer(ah, chan); + } ++ ah->noise = ath9k_hw_getchan_noise(ah, chan); + + if (bChannelChange && + (ah->chip_fullsleep != true) && +--- a/drivers/net/wireless/ath/ath9k/hw.h ++++ b/drivers/net/wireless/ath/ath9k/hw.h +@@ -688,6 +688,7 @@ struct ath_hw { + enum nl80211_iftype opmode; + enum ath9k_power_mode power_mode; + ++ s8 noise; + struct ath9k_hw_cal_data *caldata; + struct ath9k_pacal_info pacal_info; + struct ar5416Stats stats; +--- a/drivers/net/wireless/ath/ath9k/main.c ++++ b/drivers/net/wireless/ath/ath9k/main.c +@@ -165,7 +165,7 @@ static void ath_update_survey_nf(struct + + if (chan->noisefloor) { + survey->filled |= SURVEY_INFO_NOISE_DBM; +- survey->noise = chan->noisefloor; ++ survey->noise = ath9k_hw_getchan_noise(ah, chan); + } + } + +--- a/drivers/net/wireless/ath/ath9k/recv.c ++++ b/drivers/net/wireless/ath/ath9k/recv.c +@@ -985,6 +985,8 @@ static int ath9k_rx_skb_preprocess(struc + struct ieee80211_rx_status *rx_status, + bool *decrypt_error) + { ++ struct ath_hw *ah = common->ah; ++ + memset(rx_status, 0, sizeof(struct ieee80211_rx_status)); + + /* +@@ -1005,7 +1007,7 @@ static int ath9k_rx_skb_preprocess(struc + + rx_status->band = hw->conf.channel->band; + rx_status->freq = hw->conf.channel->center_freq; +- rx_status->signal = ATH_DEFAULT_NOISE_FLOOR + rx_stats->rs_rssi; ++ rx_status->signal = ah->noise + rx_stats->rs_rssi; + rx_status->antenna = rx_stats->rs_antenna; + rx_status->flag |= RX_FLAG_MACTIME_MPDU; + +--- a/drivers/net/wireless/ath/ath9k/calib.h ++++ b/drivers/net/wireless/ath/ath9k/calib.h +@@ -108,6 +108,7 @@ void ath9k_init_nfcal_hist_buffer(struct + void ath9k_hw_bstuck_nfcal(struct ath_hw *ah); + void ath9k_hw_reset_calibration(struct ath_hw *ah, + struct ath9k_cal_list *currCal); ++s16 ath9k_hw_getchan_noise(struct ath_hw *ah, struct ath9k_channel *chan); + + + #endif /* CALIB_H */ |