|
@@ -906,6 +906,7 @@ static void ath9k_process_rssi(struct ath_common *common,
|
|
|
struct ath_hw *ah = common->ah;
|
|
|
int last_rssi;
|
|
|
int rssi = rx_stats->rs_rssi;
|
|
|
+ int i, j;
|
|
|
|
|
|
/*
|
|
|
* RSSI is not available for subframes in an A-MPDU.
|
|
@@ -924,6 +925,20 @@ static void ath9k_process_rssi(struct ath_common *common,
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ for (i = 0, j = 0; i < ARRAY_SIZE(rx_stats->rs_rssi_ctl); i++) {
|
|
|
+ s8 rssi;
|
|
|
+
|
|
|
+ if (!(ah->rxchainmask & BIT(i)))
|
|
|
+ continue;
|
|
|
+
|
|
|
+ rssi = rx_stats->rs_rssi_ctl[i];
|
|
|
+ if (rssi != ATH9K_RSSI_BAD) {
|
|
|
+ rxs->chains |= BIT(j);
|
|
|
+ rxs->chain_signal[j] = ah->noise + rssi;
|
|
|
+ }
|
|
|
+ j++;
|
|
|
+ }
|
|
|
+
|
|
|
/*
|
|
|
* Update Beacon RSSI, this is used by ANI.
|
|
|
*/
|
|
@@ -1073,14 +1088,14 @@ static int ath_process_fft(struct ath_softc *sc, struct ieee80211_hdr *hdr,
|
|
|
fft_sample_40.channel_type = chan_type;
|
|
|
|
|
|
if (chan_type == NL80211_CHAN_HT40PLUS) {
|
|
|
- lower_rssi = fix_rssi_inv_only(rs->rs_rssi_ctl0);
|
|
|
- upper_rssi = fix_rssi_inv_only(rs->rs_rssi_ext0);
|
|
|
+ lower_rssi = fix_rssi_inv_only(rs->rs_rssi_ctl[0]);
|
|
|
+ upper_rssi = fix_rssi_inv_only(rs->rs_rssi_ext[0]);
|
|
|
|
|
|
fft_sample_40.lower_noise = ah->noise;
|
|
|
fft_sample_40.upper_noise = ext_nf;
|
|
|
} else {
|
|
|
- lower_rssi = fix_rssi_inv_only(rs->rs_rssi_ext0);
|
|
|
- upper_rssi = fix_rssi_inv_only(rs->rs_rssi_ctl0);
|
|
|
+ lower_rssi = fix_rssi_inv_only(rs->rs_rssi_ext[0]);
|
|
|
+ upper_rssi = fix_rssi_inv_only(rs->rs_rssi_ctl[0]);
|
|
|
|
|
|
fft_sample_40.lower_noise = ext_nf;
|
|
|
fft_sample_40.upper_noise = ah->noise;
|
|
@@ -1116,7 +1131,7 @@ static int ath_process_fft(struct ath_softc *sc, struct ieee80211_hdr *hdr,
|
|
|
fft_sample_20.tlv.length = __cpu_to_be16(length);
|
|
|
fft_sample_20.freq = __cpu_to_be16(freq);
|
|
|
|
|
|
- fft_sample_20.rssi = fix_rssi_inv_only(rs->rs_rssi_ctl0);
|
|
|
+ fft_sample_20.rssi = fix_rssi_inv_only(rs->rs_rssi_ctl[0]);
|
|
|
fft_sample_20.noise = ah->noise;
|
|
|
|
|
|
mag_info = ((struct ath_ht20_mag_info *)radar_info) - 1;
|