X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=package%2Fkernel%2Fmac80211%2Fpatches%2F522-ath9k_per_chain_signal_strength.patch;h=94e0154551da00d773e2fe7d6a04a682215e13a6;hb=0a6aed77e5fe9b30a915f3eebb86a3e2f49d5b2c;hp=b6075a8144869097e4ca21aabd982791ad86ea32;hpb=d4e60044f191ba95cf79301a127eea219ba6c9fb;p=openwrt.git diff --git a/package/kernel/mac80211/patches/522-ath9k_per_chain_signal_strength.patch b/package/kernel/mac80211/patches/522-ath9k_per_chain_signal_strength.patch index b6075a8144..94e0154551 100644 --- a/package/kernel/mac80211/patches/522-ath9k_per_chain_signal_strength.patch +++ b/package/kernel/mac80211/patches/522-ath9k_per_chain_signal_strength.patch @@ -13,21 +13,21 @@ + int8_t rs_rssi_ctl[3]; + int8_t rs_rssi_ext[3]; u8 rs_isaggr; + u8 rs_firstaggr; u8 rs_moreaggr; - u8 rs_num_delims; --- a/drivers/net/wireless/ath/ath9k/recv.c +++ b/drivers/net/wireless/ath/ath9k/recv.c -@@ -948,6 +948,7 @@ static int ath9k_rx_skb_preprocess(struc - struct ath_hw *ah = sc->sc_ah; - struct ath_common *common = ath9k_hw_common(ah); - bool discard_current = sc->rx.discard_next; +@@ -906,6 +906,7 @@ static void ath9k_process_rssi(struct at + struct ath_hw *ah = common->ah; + int last_rssi; + int rssi = rx_stats->rs_rssi; + int i, j; - sc->rx.discard_next = rx_stats->rs_more; - if (discard_current) -@@ -977,6 +978,21 @@ static int ath9k_rx_skb_preprocess(struc - if (rx_stats->rs_moreaggr) - rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL; + /* + * RSSI is not available for subframes in an A-MPDU. +@@ -924,6 +925,20 @@ static void ath9k_process_rssi(struct at + return; + } + for (i = 0, j = 0; i < ARRAY_SIZE(rx_stats->rs_rssi_ctl); i++) { + s8 rssi; @@ -37,25 +37,43 @@ + + rssi = rx_stats->rs_rssi_ctl[i]; + if (rssi != ATH9K_RSSI_BAD) { -+ rx_status->chains |= BIT(j); -+ rx_status->chain_signal[j] = ah->noise + rssi; ++ rxs->chains |= BIT(j); ++ rxs->chain_signal[j] = ah->noise + rssi; + } + j++; + } + -+ - sc->rx.discard_next = false; - return 0; - } -@@ -1086,7 +1102,7 @@ static int ath_process_fft(struct ath_so - fft_sample.tlv.length = __cpu_to_be16(length); + /* + * Update Beacon RSSI, this is used by ANI. + */ +@@ -1073,14 +1088,14 @@ static int ath_process_fft(struct ath_so + 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_so + fft_sample_20.tlv.length = __cpu_to_be16(length); + fft_sample_20.freq = __cpu_to_be16(freq); - fft_sample.freq = __cpu_to_be16(ah->curchan->chan->center_freq); -- fft_sample.rssi = fix_rssi_inv_only(rs->rs_rssi_ctl0); -+ fft_sample.rssi = fix_rssi_inv_only(rs->rs_rssi_ctl[0]); - fft_sample.noise = ah->noise; +- 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; - switch (len - SPECTRAL_HT20_TOTAL_DATA_LEN) { + mag_info = ((struct ath_ht20_mag_info *)radar_info) - 1; --- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c @@ -476,12 +476,12 @@ int ath9k_hw_process_rxdesc_edma(struct @@ -79,7 +97,7 @@ rxs->rs_keyix = MS(rxsp->status11, AR_KeyIdx); --- a/drivers/net/wireless/ath/ath9k/mac.c +++ b/drivers/net/wireless/ath/ath9k/mac.c -@@ -554,25 +554,25 @@ int ath9k_hw_rxprocdesc(struct ath_hw *a +@@ -550,25 +550,25 @@ int ath9k_hw_rxprocdesc(struct ath_hw *a if (ads.ds_rxstatus8 & AR_PostDelimCRCErr) { rs->rs_rssi = ATH9K_RSSI_BAD; @@ -132,7 +150,7 @@ * hardware stores this as 8 bit signed value. --- a/drivers/net/wireless/ath/ath9k/antenna.c +++ b/drivers/net/wireless/ath/ath9k/antenna.c -@@ -546,14 +546,14 @@ void ath_ant_comb_scan(struct ath_softc +@@ -724,14 +724,14 @@ void ath_ant_comb_scan(struct ath_softc struct ath_ant_comb *antcomb = &sc->ant_comb; int alt_ratio = 0, alt_rssi_avg = 0, main_rssi_avg = 0, curr_alt_set; int curr_main_set; @@ -141,7 +159,7 @@ + int main_rssi = rs->rs_rssi_ctl[0]; + int alt_rssi = rs->rs_rssi_ctl[1]; int rx_ant_conf, main_ant_conf; - bool short_scan = false; + bool short_scan = false, ret; - rx_ant_conf = (rs->rs_rssi_ctl2 >> ATH_ANT_RX_CURRENT_SHIFT) & + rx_ant_conf = (rs->rs_rssi_ctl[2] >> ATH_ANT_RX_CURRENT_SHIFT) & @@ -150,4 +168,4 @@ + main_ant_conf = (rs->rs_rssi_ctl[2] >> ATH_ANT_RX_MAIN_SHIFT) & ATH_ANT_RX_MASK; - /* Record packet only when both main_rssi and alt_rssi is positive */ + if (alt_rssi >= antcomb->low_rssi_thresh) {