ath9k: add some more ani fixes
[openwrt.git] / package / mac80211 / patches / 575-ath9k_ani_cleanup.patch
1 --- a/drivers/net/wireless/ath/ath9k/ani.c
2 +++ b/drivers/net/wireless/ath/ath9k/ani.c
3 @@ -117,8 +117,6 @@ static void ath9k_hw_update_mibstats(str
4  static void ath9k_ani_restart(struct ath_hw *ah)
5  {
6         struct ar5416AniState *aniState;
7 -       struct ath_common *common = ath9k_hw_common(ah);
8 -       u32 ofdm_base = 0, cck_base = 0;
9  
10         if (!DO_ANI(ah))
11                 return;
12 @@ -126,13 +124,10 @@ static void ath9k_ani_restart(struct ath
13         aniState = &ah->curchan->ani;
14         aniState->listenTime = 0;
15  
16 -       ath_dbg(common, ANI, "Writing ofdmbase=%u   cckbase=%u\n",
17 -               ofdm_base, cck_base);
18 -
19         ENABLE_REGWRITE_BUFFER(ah);
20  
21 -       REG_WRITE(ah, AR_PHY_ERR_1, ofdm_base);
22 -       REG_WRITE(ah, AR_PHY_ERR_2, cck_base);
23 +       REG_WRITE(ah, AR_PHY_ERR_1, 0);
24 +       REG_WRITE(ah, AR_PHY_ERR_2, 0);
25         REG_WRITE(ah, AR_PHY_ERR_MASK_1, AR_PHY_ERR_OFDM_TIMING);
26         REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
27  
28 @@ -375,9 +370,6 @@ static bool ath9k_hw_ani_read_counters(s
29  {
30         struct ath_common *common = ath9k_hw_common(ah);
31         struct ar5416AniState *aniState = &ah->curchan->ani;
32 -       u32 ofdm_base = 0;
33 -       u32 cck_base = 0;
34 -       u32 ofdmPhyErrCnt, cckPhyErrCnt;
35         u32 phyCnt1, phyCnt2;
36         int32_t listenTime;
37  
38 @@ -397,15 +389,12 @@ static bool ath9k_hw_ani_read_counters(s
39         phyCnt1 = REG_READ(ah, AR_PHY_ERR_1);
40         phyCnt2 = REG_READ(ah, AR_PHY_ERR_2);
41  
42 -       ofdmPhyErrCnt = phyCnt1 - ofdm_base;
43 -       ah->stats.ast_ani_ofdmerrs +=
44 -               ofdmPhyErrCnt - aniState->ofdmPhyErrCount;
45 -       aniState->ofdmPhyErrCount = ofdmPhyErrCnt;
46 -
47 -       cckPhyErrCnt = phyCnt2 - cck_base;
48 -       ah->stats.ast_ani_cckerrs +=
49 -               cckPhyErrCnt - aniState->cckPhyErrCount;
50 -       aniState->cckPhyErrCount = cckPhyErrCnt;
51 +       ah->stats.ast_ani_ofdmerrs += phyCnt1 - aniState->ofdmPhyErrCount;
52 +       aniState->ofdmPhyErrCount = phyCnt1;
53 +
54 +       ah->stats.ast_ani_cckerrs += phyCnt2 - aniState->cckPhyErrCount;
55 +       aniState->cckPhyErrCount = phyCnt2;
56 +
57         return true;
58  }
59  
60 @@ -565,20 +554,19 @@ void ath9k_hw_ani_init(struct ath_hw *ah
61  
62         ath_dbg(common, ANI, "Initialize ANI\n");
63  
64 -       ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_NEW;
65 -       ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_NEW;
66 +       ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH;
67 +       ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW;
68  
69 -       ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH_NEW;
70 -       ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW_NEW;
71 +       ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH;
72 +       ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW;
73  
74         for (i = 0; i < ARRAY_SIZE(ah->channels); i++) {
75                 struct ath9k_channel *chan = &ah->channels[i];
76                 struct ar5416AniState *ani = &chan->ani;
77  
78 -               ani->spurImmunityLevel =
79 -                       ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
80 +               ani->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
81  
82 -               ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
83 +               ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
84  
85                 if (AR_SREV_9300_20_OR_LATER(ah))
86                         ani->mrcCCKOff =
87 @@ -600,8 +588,8 @@ void ath9k_hw_ani_init(struct ath_hw *ah
88          * since we expect some ongoing maintenance on the tables, let's sanity
89          * check here default level should not modify INI setting.
90          */
91 -       ah->aniperiod = ATH9K_ANI_PERIOD_NEW;
92 -       ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL_NEW;
93 +       ah->aniperiod = ATH9K_ANI_PERIOD;
94 +       ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL;
95  
96         if (ah->config.enable_ani)
97                 ah->proc_phyerr |= HAL_PROCESS_ANI;
98 --- a/drivers/net/wireless/ath/ath9k/ani.h
99 +++ b/drivers/net/wireless/ath/ath9k/ani.h
100 @@ -24,42 +24,34 @@
101  #define BEACON_RSSI(ahp) (ahp->stats.avgbrssi)
102  
103  /* units are errors per second */
104 -#define ATH9K_ANI_OFDM_TRIG_HIGH_OLD      500
105 -#define ATH9K_ANI_OFDM_TRIG_HIGH_NEW      3500
106 +#define ATH9K_ANI_OFDM_TRIG_HIGH          3500
107  #define ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI 1000
108  
109  /* units are errors per second */
110 -#define ATH9K_ANI_OFDM_TRIG_LOW_OLD       200
111 -#define ATH9K_ANI_OFDM_TRIG_LOW_NEW       400
112 +#define ATH9K_ANI_OFDM_TRIG_LOW           400
113  #define ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI 900
114  
115  /* units are errors per second */
116 -#define ATH9K_ANI_CCK_TRIG_HIGH_OLD       200
117 -#define ATH9K_ANI_CCK_TRIG_HIGH_NEW       600
118 +#define ATH9K_ANI_CCK_TRIG_HIGH           600
119  
120  /* units are errors per second */
121 -#define ATH9K_ANI_CCK_TRIG_LOW_OLD        100
122 -#define ATH9K_ANI_CCK_TRIG_LOW_NEW        300
123 +#define ATH9K_ANI_CCK_TRIG_LOW            300
124  
125  #define ATH9K_ANI_NOISE_IMMUNE_LVL        4
126  #define ATH9K_ANI_USE_OFDM_WEAK_SIG       true
127  #define ATH9K_ANI_CCK_WEAK_SIG_THR        false
128  
129 -#define ATH9K_ANI_SPUR_IMMUNE_LVL_OLD     7
130 -#define ATH9K_ANI_SPUR_IMMUNE_LVL_NEW     3
131 +#define ATH9K_ANI_SPUR_IMMUNE_LVL         3
132  
133 -#define ATH9K_ANI_FIRSTEP_LVL_OLD         0
134 -#define ATH9K_ANI_FIRSTEP_LVL_NEW         2
135 +#define ATH9K_ANI_FIRSTEP_LVL             2
136  
137  #define ATH9K_ANI_RSSI_THR_HIGH           40
138  #define ATH9K_ANI_RSSI_THR_LOW            7
139  
140 -#define ATH9K_ANI_PERIOD_OLD              100
141 -#define ATH9K_ANI_PERIOD_NEW              300
142 +#define ATH9K_ANI_PERIOD                  300
143  
144  /* in ms */
145 -#define ATH9K_ANI_POLLINTERVAL_OLD        100
146 -#define ATH9K_ANI_POLLINTERVAL_NEW        1000
147 +#define ATH9K_ANI_POLLINTERVAL            1000
148  
149  #define HAL_NOISE_IMMUNE_MAX              4
150  #define HAL_SPUR_IMMUNE_MAX               7
151 --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
152 +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
153 @@ -1101,7 +1101,7 @@ static bool ar5008_hw_ani_control_new(st
154                  * from INI file & cap value
155                  */
156                 value = firstep_table[level] -
157 -                       firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
158 +                       firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
159                         aniState->iniDef.firstep;
160                 if (value < ATH9K_SIG_FIRSTEP_SETTING_MIN)
161                         value = ATH9K_SIG_FIRSTEP_SETTING_MIN;
162 @@ -1116,7 +1116,7 @@ static bool ar5008_hw_ani_control_new(st
163                  * from INI file & cap value
164                  */
165                 value2 = firstep_table[level] -
166 -                        firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
167 +                        firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
168                          aniState->iniDef.firstepLow;
169                 if (value2 < ATH9K_SIG_FIRSTEP_SETTING_MIN)
170                         value2 = ATH9K_SIG_FIRSTEP_SETTING_MIN;
171 @@ -1132,7 +1132,7 @@ static bool ar5008_hw_ani_control_new(st
172                                 chan->channel,
173                                 aniState->firstepLevel,
174                                 level,
175 -                               ATH9K_ANI_FIRSTEP_LVL_NEW,
176 +                               ATH9K_ANI_FIRSTEP_LVL,
177                                 value,
178                                 aniState->iniDef.firstep);
179                         ath_dbg(common, ANI,
180 @@ -1140,7 +1140,7 @@ static bool ar5008_hw_ani_control_new(st
181                                 chan->channel,
182                                 aniState->firstepLevel,
183                                 level,
184 -                               ATH9K_ANI_FIRSTEP_LVL_NEW,
185 +                               ATH9K_ANI_FIRSTEP_LVL,
186                                 value2,
187                                 aniState->iniDef.firstepLow);
188                         if (level > aniState->firstepLevel)
189 @@ -1165,7 +1165,7 @@ static bool ar5008_hw_ani_control_new(st
190                  * from INI file & cap value
191                  */
192                 value = cycpwrThr1_table[level] -
193 -                       cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
194 +                       cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
195                         aniState->iniDef.cycpwrThr1;
196                 if (value < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
197                         value = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
198 @@ -1181,7 +1181,7 @@ static bool ar5008_hw_ani_control_new(st
199                  * from INI file & cap value
200                  */
201                 value2 = cycpwrThr1_table[level] -
202 -                        cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
203 +                        cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
204                          aniState->iniDef.cycpwrThr1Ext;
205                 if (value2 < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
206                         value2 = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
207 @@ -1196,7 +1196,7 @@ static bool ar5008_hw_ani_control_new(st
208                                 chan->channel,
209                                 aniState->spurImmunityLevel,
210                                 level,
211 -                               ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
212 +                               ATH9K_ANI_SPUR_IMMUNE_LVL,
213                                 value,
214                                 aniState->iniDef.cycpwrThr1);
215                         ath_dbg(common, ANI,
216 @@ -1204,7 +1204,7 @@ static bool ar5008_hw_ani_control_new(st
217                                 chan->channel,
218                                 aniState->spurImmunityLevel,
219                                 level,
220 -                               ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
221 +                               ATH9K_ANI_SPUR_IMMUNE_LVL,
222                                 value2,
223                                 aniState->iniDef.cycpwrThr1Ext);
224                         if (level > aniState->spurImmunityLevel)
225 @@ -1319,8 +1319,8 @@ static void ar5008_hw_ani_cache_ini_regs
226                                                AR_PHY_EXT_TIMING5_CYCPWR_THR1);
227  
228         /* these levels just got reset to defaults by the INI */
229 -       aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
230 -       aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
231 +       aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
232 +       aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
233         aniState->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
234         aniState->mrcCCKOff = true; /* not available on pre AR9003 */
235  }
236 --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
237 +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
238 @@ -851,7 +851,7 @@ static bool ar9003_hw_ani_control(struct
239                  * from INI file & cap value
240                  */
241                 value = firstep_table[level] -
242 -                       firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
243 +                       firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
244                         aniState->iniDef.firstep;
245                 if (value < ATH9K_SIG_FIRSTEP_SETTING_MIN)
246                         value = ATH9K_SIG_FIRSTEP_SETTING_MIN;
247 @@ -866,7 +866,7 @@ static bool ar9003_hw_ani_control(struct
248                  * from INI file & cap value
249                  */
250                 value2 = firstep_table[level] -
251 -                        firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
252 +                        firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
253                          aniState->iniDef.firstepLow;
254                 if (value2 < ATH9K_SIG_FIRSTEP_SETTING_MIN)
255                         value2 = ATH9K_SIG_FIRSTEP_SETTING_MIN;
256 @@ -882,7 +882,7 @@ static bool ar9003_hw_ani_control(struct
257                                 chan->channel,
258                                 aniState->firstepLevel,
259                                 level,
260 -                               ATH9K_ANI_FIRSTEP_LVL_NEW,
261 +                               ATH9K_ANI_FIRSTEP_LVL,
262                                 value,
263                                 aniState->iniDef.firstep);
264                         ath_dbg(common, ANI,
265 @@ -890,7 +890,7 @@ static bool ar9003_hw_ani_control(struct
266                                 chan->channel,
267                                 aniState->firstepLevel,
268                                 level,
269 -                               ATH9K_ANI_FIRSTEP_LVL_NEW,
270 +                               ATH9K_ANI_FIRSTEP_LVL,
271                                 value2,
272                                 aniState->iniDef.firstepLow);
273                         if (level > aniState->firstepLevel)
274 @@ -915,7 +915,7 @@ static bool ar9003_hw_ani_control(struct
275                  * from INI file & cap value
276                  */
277                 value = cycpwrThr1_table[level] -
278 -                       cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
279 +                       cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
280                         aniState->iniDef.cycpwrThr1;
281                 if (value < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
282                         value = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
283 @@ -931,7 +931,7 @@ static bool ar9003_hw_ani_control(struct
284                  * from INI file & cap value
285                  */
286                 value2 = cycpwrThr1_table[level] -
287 -                        cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
288 +                        cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
289                          aniState->iniDef.cycpwrThr1Ext;
290                 if (value2 < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
291                         value2 = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
292 @@ -946,7 +946,7 @@ static bool ar9003_hw_ani_control(struct
293                                 chan->channel,
294                                 aniState->spurImmunityLevel,
295                                 level,
296 -                               ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
297 +                               ATH9K_ANI_SPUR_IMMUNE_LVL,
298                                 value,
299                                 aniState->iniDef.cycpwrThr1);
300                         ath_dbg(common, ANI,
301 @@ -954,7 +954,7 @@ static bool ar9003_hw_ani_control(struct
302                                 chan->channel,
303                                 aniState->spurImmunityLevel,
304                                 level,
305 -                               ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
306 +                               ATH9K_ANI_SPUR_IMMUNE_LVL,
307                                 value2,
308                                 aniState->iniDef.cycpwrThr1Ext);
309                         if (level > aniState->spurImmunityLevel)
310 @@ -1107,8 +1107,8 @@ static void ar9003_hw_ani_cache_ini_regs
311                                                AR_PHY_EXT_CYCPWR_THR1);
312  
313         /* these levels just got reset to defaults by the INI */
314 -       aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
315 -       aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
316 +       aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
317 +       aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
318         aniState->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
319         aniState->mrcCCKOff = !ATH9K_ANI_ENABLE_MRC_CCK;
320  }