1 --- a/drivers/net/wireless/ath/ath9k/mac.h
2 +++ b/drivers/net/wireless/ath/ath9k/mac.h
3 @@ -133,12 +133,8 @@ struct ath_rx_status {
10 - int8_t rs_rssi_ext0;
11 - int8_t rs_rssi_ext1;
12 - int8_t rs_rssi_ext2;
13 + int8_t rs_rssi_ctl[3];
14 + int8_t rs_rssi_ext[3];
18 --- a/drivers/net/wireless/ath/ath9k/recv.c
19 +++ b/drivers/net/wireless/ath/ath9k/recv.c
20 @@ -906,6 +906,7 @@ static void ath9k_process_rssi(struct at
21 struct ath_hw *ah = common->ah;
23 int rssi = rx_stats->rs_rssi;
27 * RSSI is not available for subframes in an A-MPDU.
28 @@ -924,6 +925,20 @@ static void ath9k_process_rssi(struct at
32 + for (i = 0, j = 0; i < ARRAY_SIZE(rx_stats->rs_rssi_ctl); i++) {
35 + if (!(ah->rxchainmask & BIT(i)))
38 + rssi = rx_stats->rs_rssi_ctl[i];
39 + if (rssi != ATH9K_RSSI_BAD) {
40 + rxs->chains |= BIT(j);
41 + rxs->chain_signal[j] = ah->noise + rssi;
47 * Update Beacon RSSI, this is used by ANI.
49 @@ -1073,14 +1088,14 @@ static int ath_process_fft(struct ath_so
50 fft_sample_40.channel_type = chan_type;
52 if (chan_type == NL80211_CHAN_HT40PLUS) {
53 - lower_rssi = fix_rssi_inv_only(rs->rs_rssi_ctl0);
54 - upper_rssi = fix_rssi_inv_only(rs->rs_rssi_ext0);
55 + lower_rssi = fix_rssi_inv_only(rs->rs_rssi_ctl[0]);
56 + upper_rssi = fix_rssi_inv_only(rs->rs_rssi_ext[0]);
58 fft_sample_40.lower_noise = ah->noise;
59 fft_sample_40.upper_noise = ext_nf;
61 - lower_rssi = fix_rssi_inv_only(rs->rs_rssi_ext0);
62 - upper_rssi = fix_rssi_inv_only(rs->rs_rssi_ctl0);
63 + lower_rssi = fix_rssi_inv_only(rs->rs_rssi_ext[0]);
64 + upper_rssi = fix_rssi_inv_only(rs->rs_rssi_ctl[0]);
66 fft_sample_40.lower_noise = ext_nf;
67 fft_sample_40.upper_noise = ah->noise;
68 @@ -1116,7 +1131,7 @@ static int ath_process_fft(struct ath_so
69 fft_sample_20.tlv.length = __cpu_to_be16(length);
70 fft_sample_20.freq = __cpu_to_be16(freq);
72 - fft_sample_20.rssi = fix_rssi_inv_only(rs->rs_rssi_ctl0);
73 + fft_sample_20.rssi = fix_rssi_inv_only(rs->rs_rssi_ctl[0]);
74 fft_sample_20.noise = ah->noise;
76 mag_info = ((struct ath_ht20_mag_info *)radar_info) - 1;
77 --- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c
78 +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
79 @@ -476,12 +476,12 @@ int ath9k_hw_process_rxdesc_edma(struct
82 rxs->rs_rssi = MS(rxsp->status5, AR_RxRSSICombined);
83 - rxs->rs_rssi_ctl0 = MS(rxsp->status1, AR_RxRSSIAnt00);
84 - rxs->rs_rssi_ctl1 = MS(rxsp->status1, AR_RxRSSIAnt01);
85 - rxs->rs_rssi_ctl2 = MS(rxsp->status1, AR_RxRSSIAnt02);
86 - rxs->rs_rssi_ext0 = MS(rxsp->status5, AR_RxRSSIAnt10);
87 - rxs->rs_rssi_ext1 = MS(rxsp->status5, AR_RxRSSIAnt11);
88 - rxs->rs_rssi_ext2 = MS(rxsp->status5, AR_RxRSSIAnt12);
89 + rxs->rs_rssi_ctl[0] = MS(rxsp->status1, AR_RxRSSIAnt00);
90 + rxs->rs_rssi_ctl[1] = MS(rxsp->status1, AR_RxRSSIAnt01);
91 + rxs->rs_rssi_ctl[2] = MS(rxsp->status1, AR_RxRSSIAnt02);
92 + rxs->rs_rssi_ext[0] = MS(rxsp->status5, AR_RxRSSIAnt10);
93 + rxs->rs_rssi_ext[1] = MS(rxsp->status5, AR_RxRSSIAnt11);
94 + rxs->rs_rssi_ext[2] = MS(rxsp->status5, AR_RxRSSIAnt12);
96 if (rxsp->status11 & AR_RxKeyIdxValid)
97 rxs->rs_keyix = MS(rxsp->status11, AR_KeyIdx);
98 --- a/drivers/net/wireless/ath/ath9k/mac.c
99 +++ b/drivers/net/wireless/ath/ath9k/mac.c
100 @@ -550,25 +550,25 @@ int ath9k_hw_rxprocdesc(struct ath_hw *a
102 if (ads.ds_rxstatus8 & AR_PostDelimCRCErr) {
103 rs->rs_rssi = ATH9K_RSSI_BAD;
104 - rs->rs_rssi_ctl0 = ATH9K_RSSI_BAD;
105 - rs->rs_rssi_ctl1 = ATH9K_RSSI_BAD;
106 - rs->rs_rssi_ctl2 = ATH9K_RSSI_BAD;
107 - rs->rs_rssi_ext0 = ATH9K_RSSI_BAD;
108 - rs->rs_rssi_ext1 = ATH9K_RSSI_BAD;
109 - rs->rs_rssi_ext2 = ATH9K_RSSI_BAD;
110 + rs->rs_rssi_ctl[0] = ATH9K_RSSI_BAD;
111 + rs->rs_rssi_ctl[1] = ATH9K_RSSI_BAD;
112 + rs->rs_rssi_ctl[2] = ATH9K_RSSI_BAD;
113 + rs->rs_rssi_ext[0] = ATH9K_RSSI_BAD;
114 + rs->rs_rssi_ext[1] = ATH9K_RSSI_BAD;
115 + rs->rs_rssi_ext[2] = ATH9K_RSSI_BAD;
117 rs->rs_rssi = MS(ads.ds_rxstatus4, AR_RxRSSICombined);
118 - rs->rs_rssi_ctl0 = MS(ads.ds_rxstatus0,
119 + rs->rs_rssi_ctl[0] = MS(ads.ds_rxstatus0,
121 - rs->rs_rssi_ctl1 = MS(ads.ds_rxstatus0,
122 + rs->rs_rssi_ctl[1] = MS(ads.ds_rxstatus0,
124 - rs->rs_rssi_ctl2 = MS(ads.ds_rxstatus0,
125 + rs->rs_rssi_ctl[2] = MS(ads.ds_rxstatus0,
127 - rs->rs_rssi_ext0 = MS(ads.ds_rxstatus4,
128 + rs->rs_rssi_ext[0] = MS(ads.ds_rxstatus4,
130 - rs->rs_rssi_ext1 = MS(ads.ds_rxstatus4,
131 + rs->rs_rssi_ext[1] = MS(ads.ds_rxstatus4,
133 - rs->rs_rssi_ext2 = MS(ads.ds_rxstatus4,
134 + rs->rs_rssi_ext[2] = MS(ads.ds_rxstatus4,
137 if (ads.ds_rxstatus8 & AR_RxKeyIdxValid)
138 --- a/drivers/net/wireless/ath/ath9k/dfs.c
139 +++ b/drivers/net/wireless/ath/ath9k/dfs.c
140 @@ -158,8 +158,8 @@ void ath9k_dfs_process_phyerr(struct ath
144 - ard.rssi = rs->rs_rssi_ctl0;
145 - ard.ext_rssi = rs->rs_rssi_ext0;
146 + ard.rssi = rs->rs_rssi_ctl[0];
147 + ard.ext_rssi = rs->rs_rssi_ext[0];
150 * hardware stores this as 8 bit signed value.
151 --- a/drivers/net/wireless/ath/ath9k/antenna.c
152 +++ b/drivers/net/wireless/ath/ath9k/antenna.c
153 @@ -724,14 +724,14 @@ void ath_ant_comb_scan(struct ath_softc
154 struct ath_ant_comb *antcomb = &sc->ant_comb;
155 int alt_ratio = 0, alt_rssi_avg = 0, main_rssi_avg = 0, curr_alt_set;
157 - int main_rssi = rs->rs_rssi_ctl0;
158 - int alt_rssi = rs->rs_rssi_ctl1;
159 + int main_rssi = rs->rs_rssi_ctl[0];
160 + int alt_rssi = rs->rs_rssi_ctl[1];
161 int rx_ant_conf, main_ant_conf;
162 bool short_scan = false, ret;
164 - rx_ant_conf = (rs->rs_rssi_ctl2 >> ATH_ANT_RX_CURRENT_SHIFT) &
165 + rx_ant_conf = (rs->rs_rssi_ctl[2] >> ATH_ANT_RX_CURRENT_SHIFT) &
167 - main_ant_conf = (rs->rs_rssi_ctl2 >> ATH_ANT_RX_MAIN_SHIFT) &
168 + main_ant_conf = (rs->rs_rssi_ctl[2] >> ATH_ANT_RX_MAIN_SHIFT) &
171 if (alt_rssi >= antcomb->low_rssi_thresh) {