diff options
Diffstat (limited to 'drivers/net/wireless/rtlwifi/rtl8723be/dm.c')
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8723be/dm.c | 243 |
1 files changed, 122 insertions, 121 deletions
diff --git a/drivers/net/wireless/rtlwifi/rtl8723be/dm.c b/drivers/net/wireless/rtlwifi/rtl8723be/dm.c index 13d53a1df789..dd7eb4371f49 100644 --- a/drivers/net/wireless/rtlwifi/rtl8723be/dm.c +++ b/drivers/net/wireless/rtlwifi/rtl8723be/dm.c | |||
@@ -32,7 +32,6 @@ | |||
32 | #include "dm.h" | 32 | #include "dm.h" |
33 | #include "../rtl8723com/dm_common.h" | 33 | #include "../rtl8723com/dm_common.h" |
34 | #include "fw.h" | 34 | #include "fw.h" |
35 | #include "../rtl8723com/fw_common.h" | ||
36 | #include "trx.h" | 35 | #include "trx.h" |
37 | #include "../btcoexist/rtl_btc.h" | 36 | #include "../btcoexist/rtl_btc.h" |
38 | 37 | ||
@@ -209,7 +208,7 @@ void rtl8723be_dm_txpower_track_adjust(struct ieee80211_hw *hw, u8 type, | |||
209 | pwr_val = TXPWRTRACK_MAX_IDX; | 208 | pwr_val = TXPWRTRACK_MAX_IDX; |
210 | 209 | ||
211 | *poutwrite_val = pwr_val | (pwr_val << 8) | | 210 | *poutwrite_val = pwr_val | (pwr_val << 8) | |
212 | (pwr_val << 16) | (pwr_val << 24); | 211 | (pwr_val << 16) | (pwr_val << 24); |
213 | } | 212 | } |
214 | 213 | ||
215 | static void rtl8723be_dm_diginit(struct ieee80211_hw *hw) | 214 | static void rtl8723be_dm_diginit(struct ieee80211_hw *hw) |
@@ -218,8 +217,7 @@ static void rtl8723be_dm_diginit(struct ieee80211_hw *hw) | |||
218 | struct dig_t *dm_digtable = &rtlpriv->dm_digtable; | 217 | struct dig_t *dm_digtable = &rtlpriv->dm_digtable; |
219 | 218 | ||
220 | dm_digtable->dig_enable_flag = true; | 219 | dm_digtable->dig_enable_flag = true; |
221 | dm_digtable->cur_igvalue = rtl_get_bbreg(hw, | 220 | dm_digtable->cur_igvalue = rtl_get_bbreg(hw, ROFDM0_XAAGCCORE1, 0x7f); |
222 | ROFDM0_XAAGCCORE1, 0x7f); | ||
223 | dm_digtable->rssi_lowthresh = DM_DIG_THRESH_LOW; | 221 | dm_digtable->rssi_lowthresh = DM_DIG_THRESH_LOW; |
224 | dm_digtable->rssi_highthresh = DM_DIG_THRESH_HIGH; | 222 | dm_digtable->rssi_highthresh = DM_DIG_THRESH_HIGH; |
225 | dm_digtable->fa_lowthresh = DM_FALSEALARM_THRESH_LOW; | 223 | dm_digtable->fa_lowthresh = DM_FALSEALARM_THRESH_LOW; |
@@ -234,8 +232,8 @@ static void rtl8723be_dm_diginit(struct ieee80211_hw *hw) | |||
234 | dm_digtable->forbidden_igi = DM_DIG_MIN; | 232 | dm_digtable->forbidden_igi = DM_DIG_MIN; |
235 | dm_digtable->large_fa_hit = 0; | 233 | dm_digtable->large_fa_hit = 0; |
236 | dm_digtable->recover_cnt = 0; | 234 | dm_digtable->recover_cnt = 0; |
237 | dm_digtable->dig_min_0 = DM_DIG_MIN; | 235 | dm_digtable->dig_dynamic_min = DM_DIG_MIN; |
238 | dm_digtable->dig_min_1 = DM_DIG_MIN; | 236 | dm_digtable->dig_dynamic_min_1 = DM_DIG_MIN; |
239 | dm_digtable->media_connect_0 = false; | 237 | dm_digtable->media_connect_0 = false; |
240 | dm_digtable->media_connect_1 = false; | 238 | dm_digtable->media_connect_1 = false; |
241 | rtlpriv->dm.dm_initialgain_enable = true; | 239 | rtlpriv->dm.dm_initialgain_enable = true; |
@@ -245,18 +243,18 @@ static void rtl8723be_dm_diginit(struct ieee80211_hw *hw) | |||
245 | void rtl8723be_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw) | 243 | void rtl8723be_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw) |
246 | { | 244 | { |
247 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 245 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
248 | struct rate_adaptive *ra = &(rtlpriv->ra); | 246 | struct rate_adaptive *p_ra = &rtlpriv->ra; |
249 | 247 | ||
250 | ra->ratr_state = DM_RATR_STA_INIT; | 248 | p_ra->ratr_state = DM_RATR_STA_INIT; |
251 | ra->pre_ratr_state = DM_RATR_STA_INIT; | 249 | p_ra->pre_ratr_state = DM_RATR_STA_INIT; |
252 | 250 | ||
253 | if (rtlpriv->dm.dm_type == DM_TYPE_BYDRIVER) | 251 | if (rtlpriv->dm.dm_type == DM_TYPE_BYDRIVER) |
254 | rtlpriv->dm.useramask = true; | 252 | rtlpriv->dm.useramask = true; |
255 | else | 253 | else |
256 | rtlpriv->dm.useramask = false; | 254 | rtlpriv->dm.useramask = false; |
257 | 255 | ||
258 | ra->high_rssi_thresh_for_ra = 50; | 256 | p_ra->high_rssi_thresh_for_ra = 50; |
259 | ra->low_rssi_thresh_for_ra40m = 20; | 257 | p_ra->low_rssi_thresh_for_ra40m = 20; |
260 | } | 258 | } |
261 | 259 | ||
262 | static void rtl8723be_dm_init_txpower_tracking(struct ieee80211_hw *hw) | 260 | static void rtl8723be_dm_init_txpower_tracking(struct ieee80211_hw *hw) |
@@ -279,7 +277,7 @@ static void rtl8723be_dm_init_txpower_tracking(struct ieee80211_hw *hw) | |||
279 | 277 | ||
280 | RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, | 278 | RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
281 | " rtlpriv->dm.txpower_tracking = %d\n", | 279 | " rtlpriv->dm.txpower_tracking = %d\n", |
282 | rtlpriv->dm.txpower_tracking); | 280 | rtlpriv->dm.txpower_tracking); |
283 | } | 281 | } |
284 | 282 | ||
285 | static void rtl8723be_dm_init_dynamic_atc_switch(struct ieee80211_hw *hw) | 283 | static void rtl8723be_dm_init_dynamic_atc_switch(struct ieee80211_hw *hw) |
@@ -287,6 +285,7 @@ static void rtl8723be_dm_init_dynamic_atc_switch(struct ieee80211_hw *hw) | |||
287 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 285 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
288 | 286 | ||
289 | rtlpriv->dm.crystal_cap = rtlpriv->efuse.crystalcap; | 287 | rtlpriv->dm.crystal_cap = rtlpriv->efuse.crystalcap; |
288 | |||
290 | rtlpriv->dm.atc_status = rtl_get_bbreg(hw, ROFDM1_CFOTRACKING, 0x800); | 289 | rtlpriv->dm.atc_status = rtl_get_bbreg(hw, ROFDM1_CFOTRACKING, 0x800); |
291 | rtlpriv->dm.cfo_threshold = CFO_THRESHOLD_XTAL; | 290 | rtlpriv->dm.cfo_threshold = CFO_THRESHOLD_XTAL; |
292 | } | 291 | } |
@@ -308,7 +307,7 @@ void rtl8723be_dm_init(struct ieee80211_hw *hw) | |||
308 | static void rtl8723be_dm_find_minimum_rssi(struct ieee80211_hw *hw) | 307 | static void rtl8723be_dm_find_minimum_rssi(struct ieee80211_hw *hw) |
309 | { | 308 | { |
310 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 309 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
311 | struct dig_t *rtl_dm_dig = &(rtlpriv->dm_digtable); | 310 | struct dig_t *rtl_dm_dig = &rtlpriv->dm_digtable; |
312 | struct rtl_mac *mac = rtl_mac(rtlpriv); | 311 | struct rtl_mac *mac = rtl_mac(rtlpriv); |
313 | 312 | ||
314 | /* Determine the minimum RSSI */ | 313 | /* Determine the minimum RSSI */ |
@@ -325,20 +324,20 @@ static void rtl8723be_dm_find_minimum_rssi(struct ieee80211_hw *hw) | |||
325 | rtlpriv->dm.entry_min_undec_sm_pwdb; | 324 | rtlpriv->dm.entry_min_undec_sm_pwdb; |
326 | RT_TRACE(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD, | 325 | RT_TRACE(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD, |
327 | "AP Client PWDB = 0x%lx\n", | 326 | "AP Client PWDB = 0x%lx\n", |
328 | rtlpriv->dm.entry_min_undec_sm_pwdb); | 327 | rtlpriv->dm.entry_min_undec_sm_pwdb); |
329 | } else { | 328 | } else { |
330 | rtl_dm_dig->min_undec_pwdb_for_dm = | 329 | rtl_dm_dig->min_undec_pwdb_for_dm = |
331 | rtlpriv->dm.undec_sm_pwdb; | 330 | rtlpriv->dm.undec_sm_pwdb; |
332 | RT_TRACE(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD, | 331 | RT_TRACE(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD, |
333 | "STA Default Port PWDB = 0x%x\n", | 332 | "STA Default Port PWDB = 0x%x\n", |
334 | rtl_dm_dig->min_undec_pwdb_for_dm); | 333 | rtl_dm_dig->min_undec_pwdb_for_dm); |
335 | } | 334 | } |
336 | } else { | 335 | } else { |
337 | rtl_dm_dig->min_undec_pwdb_for_dm = | 336 | rtl_dm_dig->min_undec_pwdb_for_dm = |
338 | rtlpriv->dm.entry_min_undec_sm_pwdb; | 337 | rtlpriv->dm.entry_min_undec_sm_pwdb; |
339 | RT_TRACE(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD, | 338 | RT_TRACE(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD, |
340 | "AP Ext Port or disconnet PWDB = 0x%x\n", | 339 | "AP Ext Port or disconnet PWDB = 0x%x\n", |
341 | rtl_dm_dig->min_undec_pwdb_for_dm); | 340 | rtl_dm_dig->min_undec_pwdb_for_dm); |
342 | } | 341 | } |
343 | RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, "MinUndecoratedPWDBForDM =%d\n", | 342 | RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, "MinUndecoratedPWDBForDM =%d\n", |
344 | rtl_dm_dig->min_undec_pwdb_for_dm); | 343 | rtl_dm_dig->min_undec_pwdb_for_dm); |
@@ -347,6 +346,7 @@ static void rtl8723be_dm_find_minimum_rssi(struct ieee80211_hw *hw) | |||
347 | static void rtl8723be_dm_check_rssi_monitor(struct ieee80211_hw *hw) | 346 | static void rtl8723be_dm_check_rssi_monitor(struct ieee80211_hw *hw) |
348 | { | 347 | { |
349 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 348 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
349 | struct dig_t *dm_digtable = &rtlpriv->dm_digtable; | ||
350 | struct rtl_sta_info *drv_priv; | 350 | struct rtl_sta_info *drv_priv; |
351 | u8 h2c_parameter[3] = { 0 }; | 351 | u8 h2c_parameter[3] = { 0 }; |
352 | long tmp_entry_max_pwdb = 0, tmp_entry_min_pwdb = 0xff; | 352 | long tmp_entry_max_pwdb = 0, tmp_entry_min_pwdb = 0xff; |
@@ -367,69 +367,78 @@ static void rtl8723be_dm_check_rssi_monitor(struct ieee80211_hw *hw) | |||
367 | 367 | ||
368 | /* If associated entry is found */ | 368 | /* If associated entry is found */ |
369 | if (tmp_entry_max_pwdb != 0) { | 369 | if (tmp_entry_max_pwdb != 0) { |
370 | rtlpriv->dm.entry_max_undec_sm_pwdb = tmp_entry_max_pwdb; | 370 | rtlpriv->dm.entry_max_undec_sm_pwdb = |
371 | RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, | 371 | tmp_entry_max_pwdb; |
372 | "EntryMaxPWDB = 0x%lx(%ld)\n", | 372 | RTPRINT(rtlpriv, FDM, DM_PWDB, |
373 | "EntryMaxPWDB = 0x%lx(%ld)\n", | ||
373 | tmp_entry_max_pwdb, tmp_entry_max_pwdb); | 374 | tmp_entry_max_pwdb, tmp_entry_max_pwdb); |
374 | } else { | 375 | } else { |
375 | rtlpriv->dm.entry_max_undec_sm_pwdb = 0; | 376 | rtlpriv->dm.entry_max_undec_sm_pwdb = 0; |
376 | } | 377 | } |
377 | /* If associated entry is found */ | 378 | /* If associated entry is found */ |
378 | if (tmp_entry_min_pwdb != 0xff) { | 379 | if (tmp_entry_min_pwdb != 0xff) { |
379 | rtlpriv->dm.entry_min_undec_sm_pwdb = tmp_entry_min_pwdb; | 380 | rtlpriv->dm.entry_min_undec_sm_pwdb = |
380 | RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, | 381 | tmp_entry_min_pwdb; |
381 | "EntryMinPWDB = 0x%lx(%ld)\n", | 382 | RTPRINT(rtlpriv, FDM, DM_PWDB, |
383 | "EntryMinPWDB = 0x%lx(%ld)\n", | ||
382 | tmp_entry_min_pwdb, tmp_entry_min_pwdb); | 384 | tmp_entry_min_pwdb, tmp_entry_min_pwdb); |
383 | } else { | 385 | } else { |
384 | rtlpriv->dm.entry_min_undec_sm_pwdb = 0; | 386 | rtlpriv->dm.entry_min_undec_sm_pwdb = 0; |
385 | } | 387 | } |
386 | /* Indicate Rx signal strength to FW. */ | 388 | /* Indicate Rx signal strength to FW. */ |
387 | if (rtlpriv->dm.useramask) { | 389 | if (rtlpriv->dm.useramask) { |
388 | h2c_parameter[2] = (u8) (rtlpriv->dm.undec_sm_pwdb & 0xFF); | 390 | h2c_parameter[2] = |
391 | (u8)(rtlpriv->dm.undec_sm_pwdb & 0xFF); | ||
389 | h2c_parameter[1] = 0x20; | 392 | h2c_parameter[1] = 0x20; |
390 | h2c_parameter[0] = 0; | 393 | h2c_parameter[0] = 0; |
391 | rtl8723be_fill_h2c_cmd(hw, H2C_RSSI_REPORT, 3, h2c_parameter); | 394 | rtl8723be_fill_h2c_cmd(hw, H2C_RSSIBE_REPORT, 3, h2c_parameter); |
392 | } else { | 395 | } else { |
393 | rtl_write_byte(rtlpriv, 0x4fe, rtlpriv->dm.undec_sm_pwdb); | 396 | rtl_write_byte(rtlpriv, 0x4fe, |
397 | rtlpriv->dm.undec_sm_pwdb); | ||
394 | } | 398 | } |
395 | rtl8723be_dm_find_minimum_rssi(hw); | 399 | rtl8723be_dm_find_minimum_rssi(hw); |
396 | rtlpriv->dm_digtable.rssi_val_min = | 400 | dm_digtable->rssi_val_min = |
397 | rtlpriv->dm_digtable.min_undec_pwdb_for_dm; | 401 | rtlpriv->dm_digtable.min_undec_pwdb_for_dm; |
398 | } | 402 | } |
399 | 403 | ||
400 | void rtl8723be_dm_write_dig(struct ieee80211_hw *hw, u8 current_igi) | 404 | void rtl8723be_dm_write_dig(struct ieee80211_hw *hw, u8 current_igi) |
401 | { | 405 | { |
402 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 406 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
407 | struct dig_t *dm_digtable = &rtlpriv->dm_digtable; | ||
403 | 408 | ||
404 | if (rtlpriv->dm_digtable.cur_igvalue != current_igi) { | 409 | if (dm_digtable->stop_dig) |
410 | return; | ||
411 | |||
412 | if (dm_digtable->cur_igvalue != current_igi) { | ||
405 | rtl_set_bbreg(hw, ROFDM0_XAAGCCORE1, 0x7f, current_igi); | 413 | rtl_set_bbreg(hw, ROFDM0_XAAGCCORE1, 0x7f, current_igi); |
406 | if (rtlpriv->phy.rf_type != RF_1T1R) | 414 | if (rtlpriv->phy.rf_type != RF_1T1R) |
407 | rtl_set_bbreg(hw, ROFDM0_XBAGCCORE1, 0x7f, current_igi); | 415 | rtl_set_bbreg(hw, ROFDM0_XBAGCCORE1, |
416 | 0x7f, current_igi); | ||
408 | } | 417 | } |
409 | rtlpriv->dm_digtable.pre_igvalue = rtlpriv->dm_digtable.cur_igvalue; | 418 | dm_digtable->pre_igvalue = dm_digtable->cur_igvalue; |
410 | rtlpriv->dm_digtable.cur_igvalue = current_igi; | 419 | dm_digtable->cur_igvalue = current_igi; |
411 | } | 420 | } |
412 | 421 | ||
413 | static void rtl8723be_dm_dig(struct ieee80211_hw *hw) | 422 | static void rtl8723be_dm_dig(struct ieee80211_hw *hw) |
414 | { | 423 | { |
415 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 424 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
425 | struct dig_t *dm_digtable = &rtlpriv->dm_digtable; | ||
416 | struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); | 426 | struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); |
417 | struct dig_t *dm_digtable = &(rtlpriv->dm_digtable); | ||
418 | u8 dig_dynamic_min, dig_maxofmin; | 427 | u8 dig_dynamic_min, dig_maxofmin; |
419 | bool firstconnect, firstdisconnect; | 428 | bool bfirstconnect, bfirstdisconnect; |
420 | u8 dm_dig_max, dm_dig_min; | 429 | u8 dm_dig_max, dm_dig_min; |
421 | u8 current_igi = dm_digtable->cur_igvalue; | 430 | u8 current_igi = dm_digtable->cur_igvalue; |
422 | u8 offset; | 431 | u8 offset; |
423 | 432 | ||
424 | /* AP, BT */ | 433 | /* AP,BT */ |
425 | if (mac->act_scanning) | 434 | if (mac->act_scanning) |
426 | return; | 435 | return; |
427 | 436 | ||
428 | dig_dynamic_min = dm_digtable->dig_min_0; | 437 | dig_dynamic_min = dm_digtable->dig_dynamic_min; |
429 | firstconnect = (mac->link_state >= MAC80211_LINKED) && | 438 | bfirstconnect = (mac->link_state >= MAC80211_LINKED) && |
430 | !dm_digtable->media_connect_0; | 439 | !dm_digtable->media_connect_0; |
431 | firstdisconnect = (mac->link_state < MAC80211_LINKED) && | 440 | bfirstdisconnect = (mac->link_state < MAC80211_LINKED) && |
432 | dm_digtable->media_connect_0; | 441 | (dm_digtable->media_connect_0); |
433 | 442 | ||
434 | dm_dig_max = 0x5a; | 443 | dm_dig_max = 0x5a; |
435 | dm_dig_min = DM_DIG_MIN; | 444 | dm_dig_min = DM_DIG_MIN; |
@@ -457,6 +466,7 @@ static void rtl8723be_dm_dig(struct ieee80211_hw *hw) | |||
457 | } else { | 466 | } else { |
458 | dig_dynamic_min = dm_dig_min; | 467 | dig_dynamic_min = dm_dig_min; |
459 | } | 468 | } |
469 | |||
460 | } else { | 470 | } else { |
461 | dm_digtable->rx_gain_max = dm_dig_max; | 471 | dm_digtable->rx_gain_max = dm_dig_max; |
462 | dig_dynamic_min = dm_dig_min; | 472 | dig_dynamic_min = dm_dig_min; |
@@ -506,7 +516,7 @@ static void rtl8723be_dm_dig(struct ieee80211_hw *hw) | |||
506 | dm_digtable->rx_gain_min = dm_digtable->rx_gain_max; | 516 | dm_digtable->rx_gain_min = dm_digtable->rx_gain_max; |
507 | 517 | ||
508 | if (mac->link_state >= MAC80211_LINKED) { | 518 | if (mac->link_state >= MAC80211_LINKED) { |
509 | if (firstconnect) { | 519 | if (bfirstconnect) { |
510 | if (dm_digtable->rssi_val_min <= dig_maxofmin) | 520 | if (dm_digtable->rssi_val_min <= dig_maxofmin) |
511 | current_igi = dm_digtable->rssi_val_min; | 521 | current_igi = dm_digtable->rssi_val_min; |
512 | else | 522 | else |
@@ -522,7 +532,7 @@ static void rtl8723be_dm_dig(struct ieee80211_hw *hw) | |||
522 | current_igi -= 2; | 532 | current_igi -= 2; |
523 | } | 533 | } |
524 | } else { | 534 | } else { |
525 | if (firstdisconnect) { | 535 | if (bfirstdisconnect) { |
526 | current_igi = dm_digtable->rx_gain_min; | 536 | current_igi = dm_digtable->rx_gain_min; |
527 | } else { | 537 | } else { |
528 | if (rtlpriv->falsealm_cnt.cnt_all > 10000) | 538 | if (rtlpriv->falsealm_cnt.cnt_all > 10000) |
@@ -542,14 +552,15 @@ static void rtl8723be_dm_dig(struct ieee80211_hw *hw) | |||
542 | rtl8723be_dm_write_dig(hw, current_igi); | 552 | rtl8723be_dm_write_dig(hw, current_igi); |
543 | dm_digtable->media_connect_0 = | 553 | dm_digtable->media_connect_0 = |
544 | ((mac->link_state >= MAC80211_LINKED) ? true : false); | 554 | ((mac->link_state >= MAC80211_LINKED) ? true : false); |
545 | dm_digtable->dig_min_0 = dig_dynamic_min; | 555 | dm_digtable->dig_dynamic_min = dig_dynamic_min; |
546 | } | 556 | } |
547 | 557 | ||
548 | static void rtl8723be_dm_false_alarm_counter_statistics(struct ieee80211_hw *hw) | 558 | static void rtl8723be_dm_false_alarm_counter_statistics( |
559 | struct ieee80211_hw *hw) | ||
549 | { | 560 | { |
550 | u32 ret_value; | 561 | u32 ret_value; |
551 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 562 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
552 | struct false_alarm_statistics *falsealm_cnt = &(rtlpriv->falsealm_cnt); | 563 | struct false_alarm_statistics *falsealm_cnt = &rtlpriv->falsealm_cnt; |
553 | 564 | ||
554 | rtl_set_bbreg(hw, DM_REG_OFDM_FA_HOLDC_11N, BIT(31), 1); | 565 | rtl_set_bbreg(hw, DM_REG_OFDM_FA_HOLDC_11N, BIT(31), 1); |
555 | rtl_set_bbreg(hw, DM_REG_OFDM_FA_RSTD_11N, BIT(31), 1); | 566 | rtl_set_bbreg(hw, DM_REG_OFDM_FA_RSTD_11N, BIT(31), 1); |
@@ -615,16 +626,14 @@ static void rtl8723be_dm_false_alarm_counter_statistics(struct ieee80211_hw *hw) | |||
615 | rtl_set_bbreg(hw, DM_REG_CCK_FA_RST_11N, BIT(15) | BIT(14), 2); | 626 | rtl_set_bbreg(hw, DM_REG_CCK_FA_RST_11N, BIT(15) | BIT(14), 2); |
616 | 627 | ||
617 | RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE, | 628 | RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE, |
618 | "cnt_parity_fail = %d, cnt_rate_illegal = %d, " | 629 | "cnt_parity_fail = %d, cnt_rate_illegal = %d, cnt_crc8_fail = %d, cnt_mcs_fail = %d\n", |
619 | "cnt_crc8_fail = %d, cnt_mcs_fail = %d\n", | ||
620 | falsealm_cnt->cnt_parity_fail, | 630 | falsealm_cnt->cnt_parity_fail, |
621 | falsealm_cnt->cnt_rate_illegal, | 631 | falsealm_cnt->cnt_rate_illegal, |
622 | falsealm_cnt->cnt_crc8_fail, | 632 | falsealm_cnt->cnt_crc8_fail, |
623 | falsealm_cnt->cnt_mcs_fail); | 633 | falsealm_cnt->cnt_mcs_fail); |
624 | 634 | ||
625 | RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE, | 635 | RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE, |
626 | "cnt_ofdm_fail = %x, cnt_cck_fail = %x," | 636 | "cnt_ofdm_fail = %x, cnt_cck_fail = %x, cnt_all = %x\n", |
627 | " cnt_all = %x\n", | ||
628 | falsealm_cnt->cnt_ofdm_fail, | 637 | falsealm_cnt->cnt_ofdm_fail, |
629 | falsealm_cnt->cnt_cck_fail, | 638 | falsealm_cnt->cnt_cck_fail, |
630 | falsealm_cnt->cnt_all); | 639 | falsealm_cnt->cnt_all); |
@@ -690,7 +699,7 @@ static void rtl8723be_dm_tx_power_track_set_power(struct ieee80211_hw *hw, | |||
690 | u8 rfpath, u8 idx) | 699 | u8 rfpath, u8 idx) |
691 | { | 700 | { |
692 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 701 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
693 | struct rtl_phy *rtlphy = &(rtlpriv->phy); | 702 | struct rtl_phy *rtlphy = &rtlpriv->phy; |
694 | struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw)); | 703 | struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw)); |
695 | u8 swing_idx_ofdm_limit = 36; | 704 | u8 swing_idx_ofdm_limit = 36; |
696 | 705 | ||
@@ -762,7 +771,8 @@ static void rtl8723be_dm_tx_power_track_set_power(struct ieee80211_hw *hw, | |||
762 | } | 771 | } |
763 | } | 772 | } |
764 | 773 | ||
765 | static void txpwr_track_cb_therm(struct ieee80211_hw *hw) | 774 | static void rtl8723be_dm_txpower_tracking_callback_thermalmeter( |
775 | struct ieee80211_hw *hw) | ||
766 | { | 776 | { |
767 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 777 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
768 | struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw)); | 778 | struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw)); |
@@ -773,30 +783,29 @@ static void txpwr_track_cb_therm(struct ieee80211_hw *hw) | |||
773 | int i = 0; | 783 | int i = 0; |
774 | 784 | ||
775 | u8 ofdm_min_index = 6; | 785 | u8 ofdm_min_index = 6; |
776 | u8 index = 0; | 786 | u8 index_for_channel = 0; |
777 | 787 | ||
778 | char delta_swing_table_idx_tup_a[] = { | 788 | char delta_swing_table_idx_tup_a[TXSCALE_TABLE_SIZE] = { |
779 | 0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, | 789 | 0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, |
780 | 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, | 790 | 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, |
781 | 10, 11, 11, 12, 12, 13, 14, 15}; | 791 | 10, 11, 11, 12, 12, 13, 14, 15}; |
782 | char delta_swing_table_idx_tdown_a[] = { | 792 | char delta_swing_table_idx_tdown_a[TXSCALE_TABLE_SIZE] = { |
783 | 0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, | 793 | 0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, |
784 | 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 9, | 794 | 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 9, |
785 | 9, 10, 10, 11, 12, 13, 14, 15}; | 795 | 9, 10, 10, 11, 12, 13, 14, 15}; |
786 | 796 | ||
787 | /*Initilization ( 7 steps in total)*/ | 797 | /*Initilization ( 7 steps in total )*/ |
788 | rtlpriv->dm.txpower_trackinginit = true; | 798 | rtlpriv->dm.txpower_trackinginit = true; |
789 | RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, | 799 | RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
790 | "rtl8723be_dm_txpower_tracking" | 800 | "rtl8723be_dm_txpower_tracking_callback_thermalmeter\n"); |
791 | "_callback_thermalmeter\n"); | ||
792 | 801 | ||
793 | thermalvalue = (u8)rtl_get_rfreg(hw, RF90_PATH_A, RF_T_METER, 0xfc00); | 802 | thermalvalue = (u8)rtl_get_rfreg(hw, |
803 | RF90_PATH_A, RF_T_METER, 0xfc00); | ||
794 | if (!rtlpriv->dm.txpower_track_control || thermalvalue == 0 || | 804 | if (!rtlpriv->dm.txpower_track_control || thermalvalue == 0 || |
795 | rtlefuse->eeprom_thermalmeter == 0xFF) | 805 | rtlefuse->eeprom_thermalmeter == 0xFF) |
796 | return; | 806 | return; |
797 | RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, | 807 | RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
798 | "Readback Thermal Meter = 0x%x pre thermal meter 0x%x " | 808 | "Readback Thermal Meter = 0x%x pre thermal meter 0x%x eeprom_thermalmeter 0x%x\n", |
799 | "eeprom_thermalmeter 0x%x\n", | ||
800 | thermalvalue, rtldm->thermalvalue, | 809 | thermalvalue, rtldm->thermalvalue, |
801 | rtlefuse->eeprom_thermalmeter); | 810 | rtlefuse->eeprom_thermalmeter); |
802 | /*3 Initialize ThermalValues of RFCalibrateInfo*/ | 811 | /*3 Initialize ThermalValues of RFCalibrateInfo*/ |
@@ -833,9 +842,7 @@ static void txpwr_track_cb_therm(struct ieee80211_hw *hw) | |||
833 | (rtlpriv->dm.thermalvalue_iqk - thermalvalue); | 842 | (rtlpriv->dm.thermalvalue_iqk - thermalvalue); |
834 | 843 | ||
835 | RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, | 844 | RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
836 | "Readback Thermal Meter = 0x%x pre thermal meter 0x%x " | 845 | "Readback Thermal Meter = 0x%x pre thermal meter 0x%x eeprom_thermalmeter 0x%x delta 0x%x delta_lck 0x%x delta_iqk 0x%x\n", |
837 | "eeprom_thermalmeter 0x%x delta 0x%x " | ||
838 | "delta_lck 0x%x delta_iqk 0x%x\n", | ||
839 | thermalvalue, rtlpriv->dm.thermalvalue, | 846 | thermalvalue, rtlpriv->dm.thermalvalue, |
840 | rtlefuse->eeprom_thermalmeter, delta, delta_lck, delta_iqk); | 847 | rtlefuse->eeprom_thermalmeter, delta, delta_lck, delta_iqk); |
841 | /* 6 If necessary, do LCK.*/ | 848 | /* 6 If necessary, do LCK.*/ |
@@ -905,10 +912,10 @@ static void txpwr_track_cb_therm(struct ieee80211_hw *hw) | |||
905 | rtldm->done_txpower = true; | 912 | rtldm->done_txpower = true; |
906 | if (thermalvalue > rtlefuse->eeprom_thermalmeter) | 913 | if (thermalvalue > rtlefuse->eeprom_thermalmeter) |
907 | rtl8723be_dm_tx_power_track_set_power(hw, BBSWING, 0, | 914 | rtl8723be_dm_tx_power_track_set_power(hw, BBSWING, 0, |
908 | index); | 915 | index_for_channel); |
909 | else | 916 | else |
910 | rtl8723be_dm_tx_power_track_set_power(hw, BBSWING, 0, | 917 | rtl8723be_dm_tx_power_track_set_power(hw, BBSWING, 0, |
911 | index); | 918 | index_for_channel); |
912 | 919 | ||
913 | rtldm->swing_idx_cck_base = rtldm->swing_idx_cck; | 920 | rtldm->swing_idx_cck_base = rtldm->swing_idx_cck; |
914 | rtldm->swing_idx_ofdm_base[RF90_PATH_A] = | 921 | rtldm->swing_idx_ofdm_base[RF90_PATH_A] = |
@@ -923,6 +930,7 @@ static void txpwr_track_cb_therm(struct ieee80211_hw *hw) | |||
923 | 930 | ||
924 | rtldm->txpowercount = 0; | 931 | rtldm->txpowercount = 0; |
925 | RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, "end\n"); | 932 | RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, "end\n"); |
933 | |||
926 | } | 934 | } |
927 | 935 | ||
928 | void rtl8723be_dm_check_txpower_tracking(struct ieee80211_hw *hw) | 936 | void rtl8723be_dm_check_txpower_tracking(struct ieee80211_hw *hw) |
@@ -943,7 +951,7 @@ void rtl8723be_dm_check_txpower_tracking(struct ieee80211_hw *hw) | |||
943 | } else { | 951 | } else { |
944 | RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, | 952 | RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, |
945 | "Schedule TxPowerTracking !!\n"); | 953 | "Schedule TxPowerTracking !!\n"); |
946 | txpwr_track_cb_therm(hw); | 954 | rtl8723be_dm_txpower_tracking_callback_thermalmeter(hw); |
947 | tm_trigger = 0; | 955 | tm_trigger = 0; |
948 | } | 956 | } |
949 | } | 957 | } |
@@ -953,11 +961,11 @@ static void rtl8723be_dm_refresh_rate_adaptive_mask(struct ieee80211_hw *hw) | |||
953 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 961 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
954 | struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); | 962 | struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); |
955 | struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); | 963 | struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); |
956 | struct rate_adaptive *ra = &(rtlpriv->ra); | 964 | struct rate_adaptive *p_ra = &rtlpriv->ra; |
957 | struct ieee80211_sta *sta = NULL; | 965 | u32 low_rssithresh_for_ra = p_ra->low2high_rssi_thresh_for_ra40m; |
958 | u32 low_rssithresh_for_ra = ra->low2high_rssi_thresh_for_ra40m; | 966 | u32 high_rssithresh_for_ra = p_ra->high_rssi_thresh_for_ra; |
959 | u32 high_rssithresh_for_ra = ra->high_rssi_thresh_for_ra; | ||
960 | u8 go_up_gap = 5; | 967 | u8 go_up_gap = 5; |
968 | struct ieee80211_sta *sta = NULL; | ||
961 | 969 | ||
962 | if (is_hal_stop(rtlhal)) { | 970 | if (is_hal_stop(rtlhal)) { |
963 | RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD, | 971 | RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD, |
@@ -972,8 +980,8 @@ static void rtl8723be_dm_refresh_rate_adaptive_mask(struct ieee80211_hw *hw) | |||
972 | } | 980 | } |
973 | 981 | ||
974 | if (mac->link_state == MAC80211_LINKED && | 982 | if (mac->link_state == MAC80211_LINKED && |
975 | mac->opmode == NL80211_IFTYPE_STATION) { | 983 | mac->opmode == NL80211_IFTYPE_STATION) { |
976 | switch (ra->pre_ratr_state) { | 984 | switch (p_ra->pre_ratr_state) { |
977 | case DM_RATR_STA_MIDDLE: | 985 | case DM_RATR_STA_MIDDLE: |
978 | high_rssithresh_for_ra += go_up_gap; | 986 | high_rssithresh_for_ra += go_up_gap; |
979 | break; | 987 | break; |
@@ -987,31 +995,31 @@ static void rtl8723be_dm_refresh_rate_adaptive_mask(struct ieee80211_hw *hw) | |||
987 | 995 | ||
988 | if (rtlpriv->dm.undec_sm_pwdb > | 996 | if (rtlpriv->dm.undec_sm_pwdb > |
989 | (long)high_rssithresh_for_ra) | 997 | (long)high_rssithresh_for_ra) |
990 | ra->ratr_state = DM_RATR_STA_HIGH; | 998 | p_ra->ratr_state = DM_RATR_STA_HIGH; |
991 | else if (rtlpriv->dm.undec_sm_pwdb > | 999 | else if (rtlpriv->dm.undec_sm_pwdb > |
992 | (long)low_rssithresh_for_ra) | 1000 | (long)low_rssithresh_for_ra) |
993 | ra->ratr_state = DM_RATR_STA_MIDDLE; | 1001 | p_ra->ratr_state = DM_RATR_STA_MIDDLE; |
994 | else | 1002 | else |
995 | ra->ratr_state = DM_RATR_STA_LOW; | 1003 | p_ra->ratr_state = DM_RATR_STA_LOW; |
996 | 1004 | ||
997 | if (ra->pre_ratr_state != ra->ratr_state) { | 1005 | if (p_ra->pre_ratr_state != p_ra->ratr_state) { |
998 | RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD, | 1006 | RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD, |
999 | "RSSI = %ld\n", | 1007 | "RSSI = %ld\n", |
1000 | rtlpriv->dm.undec_sm_pwdb); | 1008 | rtlpriv->dm.undec_sm_pwdb); |
1001 | RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD, | 1009 | RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD, |
1002 | "RSSI_LEVEL = %d\n", ra->ratr_state); | 1010 | "RSSI_LEVEL = %d\n", p_ra->ratr_state); |
1003 | RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD, | 1011 | RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD, |
1004 | "PreState = %d, CurState = %d\n", | 1012 | "PreState = %d, CurState = %d\n", |
1005 | ra->pre_ratr_state, ra->ratr_state); | 1013 | p_ra->pre_ratr_state, p_ra->ratr_state); |
1006 | 1014 | ||
1007 | rcu_read_lock(); | 1015 | rcu_read_lock(); |
1008 | sta = rtl_find_sta(hw, mac->bssid); | 1016 | sta = rtl_find_sta(hw, mac->bssid); |
1009 | if (sta) | 1017 | if (sta) |
1010 | rtlpriv->cfg->ops->update_rate_tbl(hw, sta, | 1018 | rtlpriv->cfg->ops->update_rate_tbl(hw, sta, |
1011 | ra->ratr_state); | 1019 | p_ra->ratr_state); |
1012 | rcu_read_unlock(); | 1020 | rcu_read_unlock(); |
1013 | 1021 | ||
1014 | ra->pre_ratr_state = ra->ratr_state; | 1022 | p_ra->pre_ratr_state = p_ra->ratr_state; |
1015 | } | 1023 | } |
1016 | } | 1024 | } |
1017 | } | 1025 | } |
@@ -1020,10 +1028,6 @@ static bool rtl8723be_dm_is_edca_turbo_disable(struct ieee80211_hw *hw) | |||
1020 | { | 1028 | { |
1021 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 1029 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
1022 | 1030 | ||
1023 | if (rtlpriv->cfg->ops->get_btc_status()) { | ||
1024 | if (rtlpriv->btcoexist.btc_ops->btc_is_disable_edca_turbo(rtlpriv)) | ||
1025 | return true; | ||
1026 | } | ||
1027 | if (rtlpriv->mac80211.mode == WIRELESS_MODE_B) | 1031 | if (rtlpriv->mac80211.mode == WIRELESS_MODE_B) |
1028 | return true; | 1032 | return true; |
1029 | 1033 | ||
@@ -1034,6 +1038,7 @@ static void rtl8723be_dm_check_edca_turbo(struct ieee80211_hw *hw) | |||
1034 | { | 1038 | { |
1035 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 1039 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
1036 | struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); | 1040 | struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); |
1041 | |||
1037 | static u64 last_txok_cnt; | 1042 | static u64 last_txok_cnt; |
1038 | static u64 last_rxok_cnt; | 1043 | static u64 last_rxok_cnt; |
1039 | u64 cur_txok_cnt = 0; | 1044 | u64 cur_txok_cnt = 0; |
@@ -1042,22 +1047,22 @@ static void rtl8723be_dm_check_edca_turbo(struct ieee80211_hw *hw) | |||
1042 | u32 edca_be_dl = 0x6ea42b;/*not sure*/ | 1047 | u32 edca_be_dl = 0x6ea42b;/*not sure*/ |
1043 | u32 edca_be = 0x5ea42b; | 1048 | u32 edca_be = 0x5ea42b; |
1044 | u32 iot_peer = 0; | 1049 | u32 iot_peer = 0; |
1045 | bool is_cur_rdlstate; | 1050 | bool b_is_cur_rdlstate; |
1046 | bool last_is_cur_rdlstate = false; | 1051 | bool b_last_is_cur_rdlstate = false; |
1047 | bool bias_on_rx = false; | 1052 | bool b_bias_on_rx = false; |
1048 | bool edca_turbo_on = false; | 1053 | bool b_edca_turbo_on = false; |
1049 | 1054 | ||
1050 | last_is_cur_rdlstate = rtlpriv->dm.is_cur_rdlstate; | 1055 | b_last_is_cur_rdlstate = rtlpriv->dm.is_cur_rdlstate; |
1051 | 1056 | ||
1052 | cur_txok_cnt = rtlpriv->stats.txbytesunicast - last_txok_cnt; | 1057 | cur_txok_cnt = rtlpriv->stats.txbytesunicast - last_txok_cnt; |
1053 | cur_rxok_cnt = rtlpriv->stats.rxbytesunicast - last_rxok_cnt; | 1058 | cur_rxok_cnt = rtlpriv->stats.rxbytesunicast - last_rxok_cnt; |
1054 | 1059 | ||
1055 | iot_peer = rtlpriv->mac80211.vendor; | 1060 | iot_peer = rtlpriv->mac80211.vendor; |
1056 | bias_on_rx = (iot_peer == PEER_RAL || iot_peer == PEER_ATH) ? | 1061 | b_bias_on_rx = (iot_peer == PEER_RAL || iot_peer == PEER_ATH) ? |
1057 | true : false; | 1062 | true : false; |
1058 | edca_turbo_on = ((!rtlpriv->dm.is_any_nonbepkts) && | 1063 | b_edca_turbo_on = ((!rtlpriv->dm.is_any_nonbepkts) && |
1059 | (!rtlpriv->dm.disable_framebursting)) ? | 1064 | (!rtlpriv->dm.disable_framebursting)) ? |
1060 | true : false; | 1065 | true : false; |
1061 | 1066 | ||
1062 | if ((iot_peer == PEER_CISCO) && | 1067 | if ((iot_peer == PEER_CISCO) && |
1063 | (mac->mode == WIRELESS_MODE_N_24G)) { | 1068 | (mac->mode == WIRELESS_MODE_N_24G)) { |
@@ -1067,23 +1072,23 @@ static void rtl8723be_dm_check_edca_turbo(struct ieee80211_hw *hw) | |||
1067 | if (rtl8723be_dm_is_edca_turbo_disable(hw)) | 1072 | if (rtl8723be_dm_is_edca_turbo_disable(hw)) |
1068 | goto exit; | 1073 | goto exit; |
1069 | 1074 | ||
1070 | if (edca_turbo_on) { | 1075 | if (b_edca_turbo_on) { |
1071 | if (bias_on_rx) | 1076 | if (b_bias_on_rx) |
1072 | is_cur_rdlstate = (cur_txok_cnt > cur_rxok_cnt * 4) ? | 1077 | b_is_cur_rdlstate = (cur_txok_cnt > cur_rxok_cnt * 4) ? |
1073 | false : true; | 1078 | false : true; |
1074 | else | 1079 | else |
1075 | is_cur_rdlstate = (cur_rxok_cnt > cur_txok_cnt * 4) ? | 1080 | b_is_cur_rdlstate = (cur_rxok_cnt > cur_txok_cnt * 4) ? |
1076 | true : false; | 1081 | true : false; |
1077 | 1082 | ||
1078 | edca_be = (is_cur_rdlstate) ? edca_be_dl : edca_be_ul; | 1083 | edca_be = (b_is_cur_rdlstate) ? edca_be_dl : edca_be_ul; |
1079 | rtl_write_dword(rtlpriv, REG_EDCA_BE_PARAM, edca_be); | 1084 | rtl_write_dword(rtlpriv, REG_EDCA_BE_PARAM, edca_be); |
1080 | rtlpriv->dm.is_cur_rdlstate = is_cur_rdlstate; | 1085 | rtlpriv->dm.is_cur_rdlstate = b_is_cur_rdlstate; |
1081 | rtlpriv->dm.current_turbo_edca = true; | 1086 | rtlpriv->dm.current_turbo_edca = true; |
1082 | } else { | 1087 | } else { |
1083 | if (rtlpriv->dm.current_turbo_edca) { | 1088 | if (rtlpriv->dm.current_turbo_edca) { |
1084 | u8 tmp = AC0_BE; | 1089 | u8 tmp = AC0_BE; |
1085 | rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_AC_PARAM, | 1090 | rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_AC_PARAM, |
1086 | &tmp); | 1091 | (u8 *)(&tmp)); |
1087 | } | 1092 | } |
1088 | rtlpriv->dm.current_turbo_edca = false; | 1093 | rtlpriv->dm.current_turbo_edca = false; |
1089 | } | 1094 | } |
@@ -1097,13 +1102,14 @@ exit: | |||
1097 | static void rtl8723be_dm_cck_packet_detection_thresh(struct ieee80211_hw *hw) | 1102 | static void rtl8723be_dm_cck_packet_detection_thresh(struct ieee80211_hw *hw) |
1098 | { | 1103 | { |
1099 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 1104 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
1105 | struct dig_t *dm_digtable = &rtlpriv->dm_digtable; | ||
1100 | u8 cur_cck_cca_thresh; | 1106 | u8 cur_cck_cca_thresh; |
1101 | 1107 | ||
1102 | if (rtlpriv->mac80211.link_state >= MAC80211_LINKED) { | 1108 | if (rtlpriv->mac80211.link_state >= MAC80211_LINKED) { |
1103 | if (rtlpriv->dm_digtable.rssi_val_min > 25) { | 1109 | if (dm_digtable->rssi_val_min > 25) { |
1104 | cur_cck_cca_thresh = 0xcd; | 1110 | cur_cck_cca_thresh = 0xcd; |
1105 | } else if ((rtlpriv->dm_digtable.rssi_val_min <= 25) && | 1111 | } else if ((dm_digtable->rssi_val_min <= 25) && |
1106 | (rtlpriv->dm_digtable.rssi_val_min > 10)) { | 1112 | (dm_digtable->rssi_val_min > 10)) { |
1107 | cur_cck_cca_thresh = 0x83; | 1113 | cur_cck_cca_thresh = 0x83; |
1108 | } else { | 1114 | } else { |
1109 | if (rtlpriv->falsealm_cnt.cnt_cck_fail > 1000) | 1115 | if (rtlpriv->falsealm_cnt.cnt_cck_fail > 1000) |
@@ -1118,14 +1124,13 @@ static void rtl8723be_dm_cck_packet_detection_thresh(struct ieee80211_hw *hw) | |||
1118 | cur_cck_cca_thresh = 0x40; | 1124 | cur_cck_cca_thresh = 0x40; |
1119 | } | 1125 | } |
1120 | 1126 | ||
1121 | if (rtlpriv->dm_digtable.cur_cck_cca_thres != cur_cck_cca_thresh) | 1127 | if (dm_digtable->cur_cck_cca_thres != cur_cck_cca_thresh) |
1122 | rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2, cur_cck_cca_thresh); | 1128 | rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2, cur_cck_cca_thresh); |
1123 | 1129 | ||
1124 | rtlpriv->dm_digtable.pre_cck_cca_thres = rtlpriv->dm_digtable.cur_cck_cca_thres; | 1130 | dm_digtable->pre_cck_cca_thres = dm_digtable->cur_cck_cca_thres; |
1125 | rtlpriv->dm_digtable.cur_cck_cca_thres = cur_cck_cca_thresh; | 1131 | dm_digtable->cur_cck_cca_thres = cur_cck_cca_thresh; |
1126 | RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE, | 1132 | RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE, |
1127 | "CCK cca thresh hold =%x\n", | 1133 | "CCK cca thresh hold =%x\n", dm_digtable->cur_cck_cca_thres); |
1128 | rtlpriv->dm_digtable.cur_cck_cca_thres); | ||
1129 | } | 1134 | } |
1130 | 1135 | ||
1131 | static void rtl8723be_dm_dynamic_edcca(struct ieee80211_hw *hw) | 1136 | static void rtl8723be_dm_dynamic_edcca(struct ieee80211_hw *hw) |
@@ -1173,8 +1178,7 @@ static void rtl8723be_dm_dynamic_atc_switch(struct ieee80211_hw *hw) | |||
1173 | if (rtlpriv->cfg->ops->get_btc_status()) { | 1178 | if (rtlpriv->cfg->ops->get_btc_status()) { |
1174 | if (!rtlpriv->btcoexist.btc_ops->btc_is_bt_disabled(rtlpriv)) { | 1179 | if (!rtlpriv->btcoexist.btc_ops->btc_is_bt_disabled(rtlpriv)) { |
1175 | RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, | 1180 | RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD, |
1176 | "odm_DynamicATCSwitch(): Disable" | 1181 | "odm_DynamicATCSwitch(): Disable CFO tracking for BT!!\n"); |
1177 | " CFO tracking for BT!!\n"); | ||
1178 | return; | 1182 | return; |
1179 | } | 1183 | } |
1180 | } | 1184 | } |
@@ -1207,9 +1211,8 @@ static void rtl8723be_dm_dynamic_atc_switch(struct ieee80211_hw *hw) | |||
1207 | if (cfo_ave_diff > 20 && rtldm->large_cfo_hit == 0) { | 1211 | if (cfo_ave_diff > 20 && rtldm->large_cfo_hit == 0) { |
1208 | rtldm->large_cfo_hit = 1; | 1212 | rtldm->large_cfo_hit = 1; |
1209 | return; | 1213 | return; |
1210 | } else { | 1214 | } else |
1211 | rtldm->large_cfo_hit = 0; | 1215 | rtldm->large_cfo_hit = 0; |
1212 | } | ||
1213 | 1216 | ||
1214 | rtldm->cfo_ave_pre = cfo_ave; | 1217 | rtldm->cfo_ave_pre = cfo_ave; |
1215 | 1218 | ||
@@ -1263,20 +1266,20 @@ static void rtl8723be_dm_dynamic_atc_switch(struct ieee80211_hw *hw) | |||
1263 | static void rtl8723be_dm_common_info_self_update(struct ieee80211_hw *hw) | 1266 | static void rtl8723be_dm_common_info_self_update(struct ieee80211_hw *hw) |
1264 | { | 1267 | { |
1265 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 1268 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
1266 | struct rtl_sta_info *drv_priv; | ||
1267 | u8 cnt = 0; | 1269 | u8 cnt = 0; |
1270 | struct rtl_sta_info *drv_priv; | ||
1268 | 1271 | ||
1269 | rtlpriv->dm.one_entry_only = false; | 1272 | rtlpriv->dm.one_entry_only = false; |
1270 | 1273 | ||
1271 | if (rtlpriv->mac80211.opmode == NL80211_IFTYPE_STATION && | 1274 | if (rtlpriv->mac80211.opmode == NL80211_IFTYPE_STATION && |
1272 | rtlpriv->mac80211.link_state >= MAC80211_LINKED) { | 1275 | rtlpriv->mac80211.link_state >= MAC80211_LINKED) { |
1273 | rtlpriv->dm.one_entry_only = true; | 1276 | rtlpriv->dm.one_entry_only = true; |
1274 | return; | 1277 | return; |
1275 | } | 1278 | } |
1276 | 1279 | ||
1277 | if (rtlpriv->mac80211.opmode == NL80211_IFTYPE_AP || | 1280 | if (rtlpriv->mac80211.opmode == NL80211_IFTYPE_AP || |
1278 | rtlpriv->mac80211.opmode == NL80211_IFTYPE_ADHOC || | 1281 | rtlpriv->mac80211.opmode == NL80211_IFTYPE_ADHOC || |
1279 | rtlpriv->mac80211.opmode == NL80211_IFTYPE_MESH_POINT) { | 1282 | rtlpriv->mac80211.opmode == NL80211_IFTYPE_MESH_POINT) { |
1280 | spin_lock_bh(&rtlpriv->locks.entry_list_lock); | 1283 | spin_lock_bh(&rtlpriv->locks.entry_list_lock); |
1281 | list_for_each_entry(drv_priv, &rtlpriv->entry_list, list) { | 1284 | list_for_each_entry(drv_priv, &rtlpriv->entry_list, list) { |
1282 | cnt++; | 1285 | cnt++; |
@@ -1305,8 +1308,8 @@ void rtl8723be_dm_watchdog(struct ieee80211_hw *hw) | |||
1305 | fw_ps_awake = false; | 1308 | fw_ps_awake = false; |
1306 | 1309 | ||
1307 | if ((ppsc->rfpwr_state == ERFON) && | 1310 | if ((ppsc->rfpwr_state == ERFON) && |
1308 | ((!fw_current_inpsmode) && fw_ps_awake) && | 1311 | ((!fw_current_inpsmode) && fw_ps_awake) && |
1309 | (!ppsc->rfchange_inprogress)) { | 1312 | (!ppsc->rfchange_inprogress)) { |
1310 | rtl8723be_dm_common_info_self_update(hw); | 1313 | rtl8723be_dm_common_info_self_update(hw); |
1311 | rtl8723be_dm_false_alarm_counter_statistics(hw); | 1314 | rtl8723be_dm_false_alarm_counter_statistics(hw); |
1312 | rtl8723be_dm_check_rssi_monitor(hw); | 1315 | rtl8723be_dm_check_rssi_monitor(hw); |
@@ -1318,8 +1321,6 @@ void rtl8723be_dm_watchdog(struct ieee80211_hw *hw) | |||
1318 | rtl8723be_dm_dynamic_atc_switch(hw); | 1321 | rtl8723be_dm_dynamic_atc_switch(hw); |
1319 | rtl8723be_dm_check_txpower_tracking(hw); | 1322 | rtl8723be_dm_check_txpower_tracking(hw); |
1320 | rtl8723be_dm_dynamic_txpower(hw); | 1323 | rtl8723be_dm_dynamic_txpower(hw); |
1321 | if (rtlpriv->cfg->ops->get_btc_status()) | ||
1322 | rtlpriv->btcoexist.btc_ops->btc_periodical(rtlpriv); | ||
1323 | } | 1324 | } |
1324 | rtlpriv->dm.dbginfo.num_qry_beacon_pkt = 0; | 1325 | rtlpriv->dm.dbginfo.num_qry_beacon_pkt = 0; |
1325 | } | 1326 | } |