Lines Matching +full:temperature +full:- +full:tracking
1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright(c) 2009-2010 Realtek Corporation.*/
17 0x081, /* 0, -12.0dB */
18 0x088, /* 1, -11.5dB */
19 0x090, /* 2, -11.0dB */
20 0x099, /* 3, -10.5dB */
21 0x0A2, /* 4, -10.0dB */
22 0x0AC, /* 5, -9.5dB */
23 0x0B6, /* 6, -9.0dB */
24 0x0C0, /* 7, -8.5dB */
25 0x0CC, /* 8, -8.0dB */
26 0x0D8, /* 9, -7.5dB */
27 0x0E5, /* 10, -7.0dB */
28 0x0F2, /* 11, -6.5dB */
29 0x101, /* 12, -6.0dB */
30 0x110, /* 13, -5.5dB */
31 0x120, /* 14, -5.0dB */
32 0x131, /* 15, -4.5dB */
33 0x143, /* 16, -4.0dB */
34 0x156, /* 17, -3.5dB */
35 0x16A, /* 18, -3.0dB */
36 0x180, /* 19, -2.5dB */
37 0x197, /* 20, -2.0dB */
38 0x1AF, /* 21, -1.5dB */
39 0x1C8, /* 22, -1.0dB */
40 0x1E3, /* 23, -0.5dB */
57 0x081, /* 0, -12.0dB */
58 0x088, /* 1, -11.5dB */
59 0x090, /* 2, -11.0dB */
60 0x099, /* 3, -10.5dB */
61 0x0A2, /* 4, -10.0dB */
62 0x0AC, /* 5, -9.5dB */
63 0x0B6, /* 6, -9.0dB */
64 0x0C0, /* 7, -8.5dB */
65 0x0CC, /* 8, -8.0dB */
66 0x0D8, /* 9, -7.5dB */
67 0x0E5, /* 10, -7.0dB */
68 0x0F2, /* 11, -6.5dB */
69 0x101, /* 12, -6.0dB */
70 0x110, /* 13, -5.5dB */
71 0x120, /* 14, -5.0dB */
72 0x131, /* 15, -4.5dB */
73 0x143, /* 16, -4.0dB */
74 0x156, /* 17, -3.5dB */
75 0x16A, /* 18, -3.0dB */
76 0x180, /* 19, -2.5dB */
77 0x197, /* 20, -2.0dB */
78 0x1AF, /* 21, -1.5dB */
79 0x1C8, /* 22, -1.0dB */
80 0x1E3, /* 23, -0.5dB */
237 if (rtlpriv->dm.swing_idx_ofdm[RF90_PATH_A] <= in rtl8821ae_dm_txpower_track_adjust()
238 rtlpriv->dm.swing_idx_ofdm_base[RF90_PATH_A]) { in rtl8821ae_dm_txpower_track_adjust()
240 pwr_val = rtldm->swing_idx_ofdm_base[RF90_PATH_A] - in rtl8821ae_dm_txpower_track_adjust()
241 rtldm->swing_idx_ofdm[RF90_PATH_A]; in rtl8821ae_dm_txpower_track_adjust()
244 pwr_val = rtldm->swing_idx_ofdm[RF90_PATH_A] - in rtl8821ae_dm_txpower_track_adjust()
245 rtldm->swing_idx_ofdm_base[RF90_PATH_A]; in rtl8821ae_dm_txpower_track_adjust()
248 if (rtldm->swing_idx_cck <= rtldm->swing_idx_cck_base) { in rtl8821ae_dm_txpower_track_adjust()
250 pwr_val = rtldm->swing_idx_cck_base - in rtl8821ae_dm_txpower_track_adjust()
251 rtldm->swing_idx_cck; in rtl8821ae_dm_txpower_track_adjust()
254 pwr_val = rtldm->swing_idx_cck - in rtl8821ae_dm_txpower_track_adjust()
255 rtldm->swing_idx_cck_base; in rtl8821ae_dm_txpower_track_adjust()
274 rtldm->swing_idx_cck_base = rtldm->default_cck_index; in rtl8821ae_dm_clear_txpower_tracking_state()
275 rtldm->swing_idx_cck = rtldm->default_cck_index; in rtl8821ae_dm_clear_txpower_tracking_state()
276 rtldm->cck_index = 0; in rtl8821ae_dm_clear_txpower_tracking_state()
279 rtldm->swing_idx_ofdm_base[p] = rtldm->default_ofdm_index; in rtl8821ae_dm_clear_txpower_tracking_state()
280 rtldm->swing_idx_ofdm[p] = rtldm->default_ofdm_index; in rtl8821ae_dm_clear_txpower_tracking_state()
281 rtldm->ofdm_index[p] = rtldm->default_ofdm_index; in rtl8821ae_dm_clear_txpower_tracking_state()
283 rtldm->power_index_offset[p] = 0; in rtl8821ae_dm_clear_txpower_tracking_state()
284 rtldm->delta_power_index[p] = 0; in rtl8821ae_dm_clear_txpower_tracking_state()
285 rtldm->delta_power_index_last[p] = 0; in rtl8821ae_dm_clear_txpower_tracking_state()
286 /*Initial Mix mode power tracking*/ in rtl8821ae_dm_clear_txpower_tracking_state()
287 rtldm->absolute_ofdm_swing_idx[p] = 0; in rtl8821ae_dm_clear_txpower_tracking_state()
288 rtldm->remnant_ofdm_swing_idx[p] = 0; in rtl8821ae_dm_clear_txpower_tracking_state()
291 rtldm->modify_txagc_flag_path_a = false; in rtl8821ae_dm_clear_txpower_tracking_state()
293 rtldm->modify_txagc_flag_path_b = false; in rtl8821ae_dm_clear_txpower_tracking_state()
294 rtldm->remnant_cck_idx = 0; in rtl8821ae_dm_clear_txpower_tracking_state()
295 rtldm->thermalvalue = rtlefuse->eeprom_thermalmeter; in rtl8821ae_dm_clear_txpower_tracking_state()
296 rtldm->thermalvalue_iqk = rtlefuse->eeprom_thermalmeter; in rtl8821ae_dm_clear_txpower_tracking_state()
297 rtldm->thermalvalue_lck = rtlefuse->eeprom_thermalmeter; in rtl8821ae_dm_clear_txpower_tracking_state()
306 bb_swing = phy_get_tx_swing_8812A(hw, rtlhal->current_bandtype, in rtl8821ae_dm_get_swing_index()
325 rtlpriv->dm.txpower_track_control = true; in rtl8821ae_dm_initialize_txpower_tracking_thermalmeter()
326 rtldm->thermalvalue = rtlefuse->eeprom_thermalmeter; in rtl8821ae_dm_initialize_txpower_tracking_thermalmeter()
327 rtldm->thermalvalue_iqk = rtlefuse->eeprom_thermalmeter; in rtl8821ae_dm_initialize_txpower_tracking_thermalmeter()
328 rtldm->thermalvalue_lck = rtlefuse->eeprom_thermalmeter; in rtl8821ae_dm_initialize_txpower_tracking_thermalmeter()
331 rtldm->default_ofdm_index = in rtl8821ae_dm_initialize_txpower_tracking_thermalmeter()
334 rtldm->default_cck_index = 24; in rtl8821ae_dm_initialize_txpower_tracking_thermalmeter()
336 rtldm->swing_idx_cck_base = rtldm->default_cck_index; in rtl8821ae_dm_initialize_txpower_tracking_thermalmeter()
337 rtldm->cck_index = rtldm->default_cck_index; in rtl8821ae_dm_initialize_txpower_tracking_thermalmeter()
340 rtldm->swing_idx_ofdm_base[p] = in rtl8821ae_dm_initialize_txpower_tracking_thermalmeter()
341 rtldm->default_ofdm_index; in rtl8821ae_dm_initialize_txpower_tracking_thermalmeter()
342 rtldm->ofdm_index[p] = rtldm->default_ofdm_index; in rtl8821ae_dm_initialize_txpower_tracking_thermalmeter()
343 rtldm->delta_power_index[p] = 0; in rtl8821ae_dm_initialize_txpower_tracking_thermalmeter()
344 rtldm->power_index_offset[p] = 0; in rtl8821ae_dm_initialize_txpower_tracking_thermalmeter()
345 rtldm->delta_power_index_last[p] = 0; in rtl8821ae_dm_initialize_txpower_tracking_thermalmeter()
353 rtlpriv->dm.current_turbo_edca = false; in rtl8821ae_dm_init_edca_turbo()
354 rtlpriv->dm.is_any_nonbepkts = false; in rtl8821ae_dm_init_edca_turbo()
355 rtlpriv->dm.is_cur_rdlstate = false; in rtl8821ae_dm_init_edca_turbo()
361 struct rate_adaptive *p_ra = &rtlpriv->ra; in rtl8821ae_dm_init_rate_adaptive_mask()
363 p_ra->ratr_state = DM_RATR_STA_INIT; in rtl8821ae_dm_init_rate_adaptive_mask()
364 p_ra->pre_ratr_state = DM_RATR_STA_INIT; in rtl8821ae_dm_init_rate_adaptive_mask()
366 rtlpriv->dm.dm_type = DM_TYPE_BYDRIVER; in rtl8821ae_dm_init_rate_adaptive_mask()
367 if (rtlpriv->dm.dm_type == DM_TYPE_BYDRIVER) in rtl8821ae_dm_init_rate_adaptive_mask()
368 rtlpriv->dm.useramask = true; in rtl8821ae_dm_init_rate_adaptive_mask()
370 rtlpriv->dm.useramask = false; in rtl8821ae_dm_init_rate_adaptive_mask()
372 p_ra->high_rssi_thresh_for_ra = 50; in rtl8821ae_dm_init_rate_adaptive_mask()
373 p_ra->low_rssi_thresh_for_ra40m = 20; in rtl8821ae_dm_init_rate_adaptive_mask()
380 rtlpriv->dm.crystal_cap = rtlpriv->efuse.crystalcap; in rtl8821ae_dm_init_dynamic_atc_switch()
382 rtlpriv->dm.atc_status = rtl_get_bbreg(hw, ROFDM1_CFOTRACKING, BIT(11)); in rtl8821ae_dm_init_dynamic_atc_switch()
383 rtlpriv->dm.cfo_threshold = CFO_THRESHOLD_XTAL; in rtl8821ae_dm_init_dynamic_atc_switch()
389 struct rtl_phy *rtlphy = &rtlpriv->phy; in rtl8821ae_dm_common_info_self_init()
392 rtlphy->cck_high_power = in rtl8821ae_dm_common_info_self_init()
399 rtlpriv->dm.rfpath_rxenable[0] = true; in rtl8821ae_dm_common_info_self_init()
401 rtlpriv->dm.rfpath_rxenable[1] = true; in rtl8821ae_dm_common_info_self_init()
407 struct rtl_phy *rtlphy = &rtlpriv->phy; in rtl8821ae_dm_init()
410 spin_lock(&rtlpriv->locks.iqk_lock); in rtl8821ae_dm_init()
411 rtlphy->lck_inprogress = false; in rtl8821ae_dm_init()
412 spin_unlock(&rtlpriv->locks.iqk_lock); in rtl8821ae_dm_init()
414 rtlpriv->dm.dm_type = DM_TYPE_BYDRIVER; in rtl8821ae_dm_init()
426 struct dig_t *rtl_dm_dig = &rtlpriv->dm_digtable; in rtl8821ae_dm_find_minimum_rssi()
430 if ((mac->link_state < MAC80211_LINKED) && in rtl8821ae_dm_find_minimum_rssi()
431 (rtlpriv->dm.entry_min_undec_sm_pwdb == 0)) { in rtl8821ae_dm_find_minimum_rssi()
432 rtl_dm_dig->min_undec_pwdb_for_dm = 0; in rtl8821ae_dm_find_minimum_rssi()
435 if (mac->link_state >= MAC80211_LINKED) { in rtl8821ae_dm_find_minimum_rssi()
436 if (mac->opmode == NL80211_IFTYPE_AP || in rtl8821ae_dm_find_minimum_rssi()
437 mac->opmode == NL80211_IFTYPE_ADHOC) { in rtl8821ae_dm_find_minimum_rssi()
438 rtl_dm_dig->min_undec_pwdb_for_dm = in rtl8821ae_dm_find_minimum_rssi()
439 rtlpriv->dm.entry_min_undec_sm_pwdb; in rtl8821ae_dm_find_minimum_rssi()
442 rtlpriv->dm.entry_min_undec_sm_pwdb); in rtl8821ae_dm_find_minimum_rssi()
444 rtl_dm_dig->min_undec_pwdb_for_dm = in rtl8821ae_dm_find_minimum_rssi()
445 rtlpriv->dm.undec_sm_pwdb; in rtl8821ae_dm_find_minimum_rssi()
448 rtl_dm_dig->min_undec_pwdb_for_dm); in rtl8821ae_dm_find_minimum_rssi()
451 rtl_dm_dig->min_undec_pwdb_for_dm = in rtl8821ae_dm_find_minimum_rssi()
452 rtlpriv->dm.entry_min_undec_sm_pwdb; in rtl8821ae_dm_find_minimum_rssi()
455 rtl_dm_dig->min_undec_pwdb_for_dm); in rtl8821ae_dm_find_minimum_rssi()
459 rtl_dm_dig->min_undec_pwdb_for_dm); in rtl8821ae_dm_find_minimum_rssi()
467 rtlpriv->stats.rx_rssi_percentage[0]); in rtl8812ae_dm_rssi_dump_to_register()
469 rtlpriv->stats.rx_rssi_percentage[1]); in rtl8812ae_dm_rssi_dump_to_register()
473 rtlpriv->stats.rx_evm_dbm[0]); in rtl8812ae_dm_rssi_dump_to_register()
475 rtlpriv->stats.rx_evm_dbm[1]); in rtl8812ae_dm_rssi_dump_to_register()
479 (u8)(rtlpriv->stats.rx_snr_db[0])); in rtl8812ae_dm_rssi_dump_to_register()
481 (u8)(rtlpriv->stats.rx_snr_db[1])); in rtl8812ae_dm_rssi_dump_to_register()
485 rtlpriv->stats.rx_cfo_short[0]); in rtl8812ae_dm_rssi_dump_to_register()
487 rtlpriv->stats.rx_cfo_short[1]); in rtl8812ae_dm_rssi_dump_to_register()
491 rtlpriv->stats.rx_cfo_tail[0]); in rtl8812ae_dm_rssi_dump_to_register()
493 rtlpriv->stats.rx_cfo_tail[1]); in rtl8812ae_dm_rssi_dump_to_register()
499 struct dig_t *dm_digtable = &rtlpriv->dm_digtable; in rtl8821ae_dm_check_rssi_monitor()
509 cur_rxokcnt = rtlpriv->stats.rxbytesunicast - last_rxokcnt; in rtl8821ae_dm_check_rssi_monitor()
510 last_txokcnt = rtlpriv->stats.txbytesunicast; in rtl8821ae_dm_check_rssi_monitor()
511 last_rxokcnt = rtlpriv->stats.rxbytesunicast; in rtl8821ae_dm_check_rssi_monitor()
518 if (mac->opmode == NL80211_IFTYPE_AP || in rtl8821ae_dm_check_rssi_monitor()
519 mac->opmode == NL80211_IFTYPE_ADHOC || in rtl8821ae_dm_check_rssi_monitor()
520 mac->opmode == NL80211_IFTYPE_MESH_POINT) { in rtl8821ae_dm_check_rssi_monitor()
521 spin_lock_bh(&rtlpriv->locks.entry_list_lock); in rtl8821ae_dm_check_rssi_monitor()
522 list_for_each_entry(drv_priv, &rtlpriv->entry_list, list) { in rtl8821ae_dm_check_rssi_monitor()
523 if (drv_priv->rssi_stat.undec_sm_pwdb < in rtl8821ae_dm_check_rssi_monitor()
526 drv_priv->rssi_stat.undec_sm_pwdb; in rtl8821ae_dm_check_rssi_monitor()
527 if (drv_priv->rssi_stat.undec_sm_pwdb > in rtl8821ae_dm_check_rssi_monitor()
530 drv_priv->rssi_stat.undec_sm_pwdb; in rtl8821ae_dm_check_rssi_monitor()
532 spin_unlock_bh(&rtlpriv->locks.entry_list_lock); in rtl8821ae_dm_check_rssi_monitor()
536 rtlpriv->dm.entry_max_undec_sm_pwdb = in rtl8821ae_dm_check_rssi_monitor()
542 rtlpriv->dm.entry_max_undec_sm_pwdb = 0; in rtl8821ae_dm_check_rssi_monitor()
546 rtlpriv->dm.entry_min_undec_sm_pwdb = in rtl8821ae_dm_check_rssi_monitor()
552 rtlpriv->dm.entry_min_undec_sm_pwdb = 0; in rtl8821ae_dm_check_rssi_monitor()
556 if (rtlpriv->dm.useramask) { in rtl8821ae_dm_check_rssi_monitor()
557 if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE) { in rtl8821ae_dm_check_rssi_monitor()
558 if (mac->mode == WIRELESS_MODE_AC_24G || in rtl8821ae_dm_check_rssi_monitor()
559 mac->mode == WIRELESS_MODE_AC_5G || in rtl8821ae_dm_check_rssi_monitor()
560 mac->mode == WIRELESS_MODE_AC_ONLY) in rtl8821ae_dm_check_rssi_monitor()
561 stbc_tx = (mac->vht_cur_stbc & in rtl8821ae_dm_check_rssi_monitor()
564 stbc_tx = (mac->ht_cur_stbc & in rtl8821ae_dm_check_rssi_monitor()
569 (u8)(rtlpriv->dm.undec_sm_pwdb & 0xFF); in rtl8821ae_dm_check_rssi_monitor()
572 if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE) in rtl8821ae_dm_check_rssi_monitor()
579 rtl_write_byte(rtlpriv, 0x4fe, rtlpriv->dm.undec_sm_pwdb); in rtl8821ae_dm_check_rssi_monitor()
581 if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE) in rtl8821ae_dm_check_rssi_monitor()
584 dm_digtable->rssi_val_min = rtlpriv->dm_digtable.min_undec_pwdb_for_dm; in rtl8821ae_dm_check_rssi_monitor()
590 struct dig_t *dm_digtable = &rtlpriv->dm_digtable; in rtl8821ae_dm_write_cck_cca_thres()
592 if (dm_digtable->cur_cck_cca_thres != current_cca) in rtl8821ae_dm_write_cck_cca_thres()
595 dm_digtable->pre_cck_cca_thres = dm_digtable->cur_cck_cca_thres; in rtl8821ae_dm_write_cck_cca_thres()
596 dm_digtable->cur_cck_cca_thres = current_cca; in rtl8821ae_dm_write_cck_cca_thres()
602 struct dig_t *dm_digtable = &rtlpriv->dm_digtable; in rtl8821ae_dm_write_dig()
604 if (dm_digtable->stop_dig) in rtl8821ae_dm_write_dig()
607 if (dm_digtable->cur_igvalue != current_igi) { in rtl8821ae_dm_write_dig()
610 if (rtlpriv->phy.rf_type != RF_1T1R) in rtl8821ae_dm_write_dig()
614 dm_digtable->cur_igvalue = current_igi; in rtl8821ae_dm_write_dig()
620 struct dig_t *dm_digtable = &rtlpriv->dm_digtable; in rtl8821ae_dm_dig()
627 u8 current_igi = dm_digtable->cur_igvalue; in rtl8821ae_dm_dig()
631 if (mac->act_scanning) { in rtl8821ae_dm_dig()
638 dig_min_0 = dm_digtable->dig_min_0; in rtl8821ae_dm_dig()
639 first_connect = (mac->link_state >= MAC80211_LINKED) && in rtl8821ae_dm_dig()
640 (!dm_digtable->media_connect_0); in rtl8821ae_dm_dig()
641 first_disconnect = (mac->link_state < MAC80211_LINKED) && in rtl8821ae_dm_dig()
642 (dm_digtable->media_connect_0); in rtl8821ae_dm_dig()
648 if (rtlhal->hw_type != HARDWARE_TYPE_RTL8821AE) in rtl8821ae_dm_dig()
655 if (mac->link_state >= MAC80211_LINKED) { in rtl8821ae_dm_dig()
656 if (rtlhal->hw_type != HARDWARE_TYPE_RTL8821AE) in rtl8821ae_dm_dig()
661 if ((dm_digtable->rssi_val_min + offset) > dm_dig_max) in rtl8821ae_dm_dig()
662 dm_digtable->rx_gain_max = dm_dig_max; in rtl8821ae_dm_dig()
663 else if ((dm_digtable->rssi_val_min + offset) < dm_dig_min) in rtl8821ae_dm_dig()
664 dm_digtable->rx_gain_max = dm_dig_min; in rtl8821ae_dm_dig()
666 dm_digtable->rx_gain_max = in rtl8821ae_dm_dig()
667 dm_digtable->rssi_val_min + offset; in rtl8821ae_dm_dig()
670 "dm_digtable->rssi_val_min=0x%x,dm_digtable->rx_gain_max = 0x%x\n", in rtl8821ae_dm_dig()
671 dm_digtable->rssi_val_min, in rtl8821ae_dm_dig()
672 dm_digtable->rx_gain_max); in rtl8821ae_dm_dig()
673 if (rtlpriv->dm.one_entry_only) { in rtl8821ae_dm_dig()
676 if (dm_digtable->rssi_val_min - offset < dm_dig_min) in rtl8821ae_dm_dig()
678 else if (dm_digtable->rssi_val_min - in rtl8821ae_dm_dig()
683 dm_digtable->rssi_val_min - offset; in rtl8821ae_dm_dig()
692 dm_digtable->rx_gain_max = dm_dig_max; in rtl8821ae_dm_dig()
697 if (rtlpriv->falsealm_cnt.cnt_all > 10000) { in rtl8821ae_dm_dig()
701 if (dm_digtable->large_fa_hit != 3) in rtl8821ae_dm_dig()
702 dm_digtable->large_fa_hit++; in rtl8821ae_dm_dig()
703 if (dm_digtable->forbidden_igi < current_igi) { in rtl8821ae_dm_dig()
704 dm_digtable->forbidden_igi = current_igi; in rtl8821ae_dm_dig()
705 dm_digtable->large_fa_hit = 1; in rtl8821ae_dm_dig()
708 if (dm_digtable->large_fa_hit >= 3) { in rtl8821ae_dm_dig()
709 if ((dm_digtable->forbidden_igi + 1) > in rtl8821ae_dm_dig()
710 dm_digtable->rx_gain_max) in rtl8821ae_dm_dig()
711 dm_digtable->rx_gain_min = in rtl8821ae_dm_dig()
712 dm_digtable->rx_gain_max; in rtl8821ae_dm_dig()
714 dm_digtable->rx_gain_min = in rtl8821ae_dm_dig()
715 (dm_digtable->forbidden_igi + 1); in rtl8821ae_dm_dig()
716 dm_digtable->recover_cnt = 3600; in rtl8821ae_dm_dig()
720 if (dm_digtable->recover_cnt != 0) { in rtl8821ae_dm_dig()
721 dm_digtable->recover_cnt--; in rtl8821ae_dm_dig()
723 if (dm_digtable->large_fa_hit < 3) { in rtl8821ae_dm_dig()
724 if ((dm_digtable->forbidden_igi - 1) < in rtl8821ae_dm_dig()
726 dm_digtable->forbidden_igi = in rtl8821ae_dm_dig()
728 dm_digtable->rx_gain_min = in rtl8821ae_dm_dig()
733 dm_digtable->forbidden_igi--; in rtl8821ae_dm_dig()
734 dm_digtable->rx_gain_min = in rtl8821ae_dm_dig()
735 (dm_digtable->forbidden_igi + 1); in rtl8821ae_dm_dig()
740 dm_digtable->large_fa_hit = 0; in rtl8821ae_dm_dig()
745 "pDM_DigTable->LargeFAHit=%d\n", in rtl8821ae_dm_dig()
746 dm_digtable->large_fa_hit); in rtl8821ae_dm_dig()
748 if (rtlpriv->dm.dbginfo.num_qry_beacon_pkt < 10) in rtl8821ae_dm_dig()
749 dm_digtable->rx_gain_min = dm_dig_min; in rtl8821ae_dm_dig()
751 if (dm_digtable->rx_gain_min > dm_digtable->rx_gain_max) in rtl8821ae_dm_dig()
752 dm_digtable->rx_gain_min = dm_digtable->rx_gain_max; in rtl8821ae_dm_dig()
755 if (mac->link_state >= MAC80211_LINKED) { in rtl8821ae_dm_dig()
759 current_igi = min(dm_digtable->rssi_val_min, dig_max_of_min); in rtl8821ae_dm_dig()
763 if (rtlpriv->falsealm_cnt.cnt_all > DM_DIG_FA_TH2) in rtl8821ae_dm_dig()
765 else if (rtlpriv->falsealm_cnt.cnt_all > DM_DIG_FA_TH1) in rtl8821ae_dm_dig()
767 else if (rtlpriv->falsealm_cnt.cnt_all < DM_DIG_FA_TH0) in rtl8821ae_dm_dig()
768 current_igi = current_igi - 2; in rtl8821ae_dm_dig()
770 if ((rtlpriv->dm.dbginfo.num_qry_beacon_pkt < 10) && in rtl8821ae_dm_dig()
771 (rtlpriv->falsealm_cnt.cnt_all < DM_DIG_FA_TH1)) { in rtl8821ae_dm_dig()
772 current_igi = dm_digtable->rx_gain_min; in rtl8821ae_dm_dig()
781 current_igi = dm_digtable->rx_gain_min; in rtl8821ae_dm_dig()
788 if (rtlpriv->falsealm_cnt.cnt_all > 2000) in rtl8821ae_dm_dig()
790 else if (rtlpriv->falsealm_cnt.cnt_all > 600) in rtl8821ae_dm_dig()
792 else if (rtlpriv->falsealm_cnt.cnt_all < 300) in rtl8821ae_dm_dig()
793 current_igi = current_igi - 2; in rtl8821ae_dm_dig()
805 if (current_igi > dm_digtable->rx_gain_max) in rtl8821ae_dm_dig()
806 current_igi = dm_digtable->rx_gain_max; in rtl8821ae_dm_dig()
807 if (current_igi < dm_digtable->rx_gain_min) in rtl8821ae_dm_dig()
808 current_igi = dm_digtable->rx_gain_min; in rtl8821ae_dm_dig()
812 dm_digtable->rx_gain_max, dm_digtable->rx_gain_min); in rtl8821ae_dm_dig()
814 "TotalFA=%d\n", rtlpriv->falsealm_cnt.cnt_all); in rtl8821ae_dm_dig()
819 dm_digtable->media_connect_0 = in rtl8821ae_dm_dig()
820 ((mac->link_state >= MAC80211_LINKED) ? true : false); in rtl8821ae_dm_dig()
821 dm_digtable->dig_min_0 = dig_min_0; in rtl8821ae_dm_dig()
829 rtlpriv->dm.tx_rate = 0xff; in rtl8821ae_dm_common_info_self_update()
831 rtlpriv->dm.one_entry_only = false; in rtl8821ae_dm_common_info_self_update()
833 if (rtlpriv->mac80211.opmode == NL80211_IFTYPE_STATION && in rtl8821ae_dm_common_info_self_update()
834 rtlpriv->mac80211.link_state >= MAC80211_LINKED) { in rtl8821ae_dm_common_info_self_update()
835 rtlpriv->dm.one_entry_only = true; in rtl8821ae_dm_common_info_self_update()
839 if (rtlpriv->mac80211.opmode == NL80211_IFTYPE_AP || in rtl8821ae_dm_common_info_self_update()
840 rtlpriv->mac80211.opmode == NL80211_IFTYPE_ADHOC || in rtl8821ae_dm_common_info_self_update()
841 rtlpriv->mac80211.opmode == NL80211_IFTYPE_MESH_POINT) { in rtl8821ae_dm_common_info_self_update()
842 spin_lock_bh(&rtlpriv->locks.entry_list_lock); in rtl8821ae_dm_common_info_self_update()
843 cnt = list_count_nodes(&rtlpriv->entry_list); in rtl8821ae_dm_common_info_self_update()
844 spin_unlock_bh(&rtlpriv->locks.entry_list_lock); in rtl8821ae_dm_common_info_self_update()
847 rtlpriv->dm.one_entry_only = true; in rtl8821ae_dm_common_info_self_update()
854 struct false_alarm_statistics *falsealm_cnt = &rtlpriv->falsealm_cnt; in rtl8821ae_dm_false_alarm_counter_statistics()
858 falsealm_cnt->cnt_ofdm_fail = in rtl8821ae_dm_false_alarm_counter_statistics()
860 falsealm_cnt->cnt_cck_fail = in rtl8821ae_dm_false_alarm_counter_statistics()
864 if (cck_enable) /*if(pDM_Odm->pBandType == ODM_BAND_2_4G)*/ in rtl8821ae_dm_false_alarm_counter_statistics()
865 falsealm_cnt->cnt_all = falsealm_cnt->cnt_ofdm_fail + in rtl8821ae_dm_false_alarm_counter_statistics()
866 falsealm_cnt->cnt_cck_fail; in rtl8821ae_dm_false_alarm_counter_statistics()
868 falsealm_cnt->cnt_all = falsealm_cnt->cnt_ofdm_fail; in rtl8821ae_dm_false_alarm_counter_statistics()
878 falsealm_cnt->cnt_cck_fail); in rtl8821ae_dm_false_alarm_counter_statistics()
880 falsealm_cnt->cnt_ofdm_fail); in rtl8821ae_dm_false_alarm_counter_statistics()
882 falsealm_cnt->cnt_all); in rtl8821ae_dm_false_alarm_counter_statistics()
890 if (!rtlpriv->dm.tm_trigger) { in rtl8812ae_dm_check_txpower_tracking_thermalmeter()
895 rtlpriv->dm.tm_trigger = 1; in rtl8812ae_dm_check_txpower_tracking_thermalmeter()
909 if (mac->link_state >= MAC80211_LINKED) { in rtl8821ae_dm_iq_calibrate()
910 if (rtldm->linked_interval < 3) in rtl8821ae_dm_iq_calibrate()
911 rtldm->linked_interval++; in rtl8821ae_dm_iq_calibrate()
913 if (rtldm->linked_interval == 2) { in rtl8821ae_dm_iq_calibrate()
914 if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE) in rtl8821ae_dm_iq_calibrate()
920 rtldm->linked_interval = 0; in rtl8821ae_dm_iq_calibrate()
931 struct rtl_phy *rtlphy = &rtlpriv->phy; in rtl8812ae_get_delta_swing_table()
933 u8 channel = rtlphy->current_channel; in rtl8812ae_get_delta_swing_table()
934 u8 rate = rtldm->tx_rate; in rtl8812ae_get_delta_swing_table()
981 rtldm->tx_rate = rate; in rtl8821ae_dm_update_init_rate()
983 if (rtlhal->hw_type == HARDWARE_TYPE_RTL8821AE) { in rtl8821ae_dm_update_init_rate()
1150 /*-----------------------------------------------------------------------------
1166 *---------------------------------------------------------------------------
1174 struct rtl_phy *rtlphy = &rtlpriv->phy; in rtl8812ae_dm_txpwr_track_set_pwr()
1180 if (rtldm->tx_rate != 0xFF) in rtl8812ae_dm_txpwr_track_set_pwr()
1182 rtl8821ae_hw_rate_to_mrate(hw, rtldm->tx_rate); in rtl8812ae_dm_txpwr_track_set_pwr()
1234 pwr_tracking_limit = 22; /*-1dB*/ in rtl8812ae_dm_txpwr_track_set_pwr()
1252 pwr_tracking_limit = 22; /*-1dB*/ in rtl8812ae_dm_txpwr_track_set_pwr()
1268 (rtldm->ofdm_index[RF90_PATH_A] > in rtl8812ae_dm_txpwr_track_set_pwr()
1271 rtldm->ofdm_index[RF90_PATH_A]; in rtl8812ae_dm_txpwr_track_set_pwr()
1274 …"pDM_Odm->RFCalibrateInfo.OFDM_index[ODM_RF_PATH_A]=%d,pDM_Odm->RealBbSwingIdx[ODM_RF_PATH_A]=%d\n… in rtl8812ae_dm_txpwr_track_set_pwr()
1275 rtldm->ofdm_index[RF90_PATH_A], in rtl8812ae_dm_txpwr_track_set_pwr()
1284 rtldm->ofdm_index[RF90_PATH_B] > in rtl8812ae_dm_txpwr_track_set_pwr()
1287 rtldm->ofdm_index[RF90_PATH_B]; in rtl8812ae_dm_txpwr_track_set_pwr()
1290 …"pDM_Odm->RFCalibrateInfo.OFDM_index[ODM_RF_PATH_B]=%d, pDM_Odm->RealBbSwingIdx[ODM_RF_PATH_B]=%d\… in rtl8812ae_dm_txpwr_track_set_pwr()
1291 rtldm->ofdm_index[RF90_PATH_B], in rtl8812ae_dm_txpwr_track_set_pwr()
1299 "pDM_Odm->DefaultOfdmIndex=%d, pDM_Odm->Absolute_OFDMSwingIdx[RFPath]=%d, RF_Path = %d\n", in rtl8812ae_dm_txpwr_track_set_pwr()
1300 rtldm->default_ofdm_index, in rtl8812ae_dm_txpwr_track_set_pwr()
1301 rtldm->absolute_ofdm_swing_idx[rf_path], in rtl8812ae_dm_txpwr_track_set_pwr()
1304 final_ofdm_swing_index = rtldm->default_ofdm_index + in rtl8812ae_dm_txpwr_track_set_pwr()
1305 rtldm->absolute_ofdm_swing_idx[rf_path]; in rtl8812ae_dm_txpwr_track_set_pwr()
1310 rtldm->remnant_cck_idx = in rtl8812ae_dm_txpwr_track_set_pwr()
1311 final_ofdm_swing_index - in rtl8812ae_dm_txpwr_track_set_pwr()
1316 rtldm->remnant_ofdm_swing_idx[rf_path] = in rtl8812ae_dm_txpwr_track_set_pwr()
1317 final_ofdm_swing_index - in rtl8812ae_dm_txpwr_track_set_pwr()
1323 rtldm->modify_txagc_flag_path_a = true; in rtl8812ae_dm_txpwr_track_set_pwr()
1327 rtlphy->current_channel, in rtl8812ae_dm_txpwr_track_set_pwr()
1333 rtldm->remnant_ofdm_swing_idx[rf_path]); in rtl8812ae_dm_txpwr_track_set_pwr()
1335 rtldm->remnant_cck_idx = final_ofdm_swing_index; in rtl8812ae_dm_txpwr_track_set_pwr()
1337 rtldm->remnant_ofdm_swing_idx[rf_path] = in rtl8812ae_dm_txpwr_track_set_pwr()
1343 rtldm->modify_txagc_flag_path_a = true; in rtl8812ae_dm_txpwr_track_set_pwr()
1347 rtlphy->current_channel, RF90_PATH_A); in rtl8812ae_dm_txpwr_track_set_pwr()
1351 rtldm->remnant_ofdm_swing_idx[rf_path]); in rtl8812ae_dm_txpwr_track_set_pwr()
1360 if (rtldm->modify_txagc_flag_path_a) { in rtl8812ae_dm_txpwr_track_set_pwr()
1361 rtldm->remnant_cck_idx = 0; in rtl8812ae_dm_txpwr_track_set_pwr()
1362 rtldm->remnant_ofdm_swing_idx[rf_path] = 0; in rtl8812ae_dm_txpwr_track_set_pwr()
1366 rtlphy->current_channel, RF90_PATH_A); in rtl8812ae_dm_txpwr_track_set_pwr()
1367 rtldm->modify_txagc_flag_path_a = false; in rtl8812ae_dm_txpwr_track_set_pwr()
1371 "******Path_A pDM_Odm->Modify_TxAGC_Flag = FALSE\n"); in rtl8812ae_dm_txpwr_track_set_pwr()
1378 rtldm->remnant_ofdm_swing_idx[rf_path] = in rtl8812ae_dm_txpwr_track_set_pwr()
1379 final_ofdm_swing_index - in rtl8812ae_dm_txpwr_track_set_pwr()
1386 rtldm->modify_txagc_flag_path_b = true; in rtl8812ae_dm_txpwr_track_set_pwr()
1390 rtlphy->current_channel, RF90_PATH_B); in rtl8812ae_dm_txpwr_track_set_pwr()
1395 rtldm->remnant_ofdm_swing_idx[rf_path]); in rtl8812ae_dm_txpwr_track_set_pwr()
1397 rtldm->remnant_ofdm_swing_idx[rf_path] = in rtl8812ae_dm_txpwr_track_set_pwr()
1403 rtldm->modify_txagc_flag_path_b = true; in rtl8812ae_dm_txpwr_track_set_pwr()
1407 rtlphy->current_channel, RF90_PATH_B); in rtl8812ae_dm_txpwr_track_set_pwr()
1411 rtldm->remnant_ofdm_swing_idx[rf_path]); in rtl8812ae_dm_txpwr_track_set_pwr()
1420 if (rtldm->modify_txagc_flag_path_b) { in rtl8812ae_dm_txpwr_track_set_pwr()
1421 rtldm->remnant_ofdm_swing_idx[rf_path] = 0; in rtl8812ae_dm_txpwr_track_set_pwr()
1425 rtlphy->current_channel, RF90_PATH_B); in rtl8812ae_dm_txpwr_track_set_pwr()
1427 rtldm->modify_txagc_flag_path_b = in rtl8812ae_dm_txpwr_track_set_pwr()
1431 "******Path_B pDM_Odm->Modify_TxAGC_Flag = FALSE\n"); in rtl8812ae_dm_txpwr_track_set_pwr()
1452 /* GetRightChnlPlaceforIQK(pHalData->CurrentChannel)*/ in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1469 rtldm->txpower_trackinginit = true; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1472 …"pDM_Odm->BbSwingIdxCckBase: %d, pDM_Odm->BbSwingIdxOfdmBase[A]:%d, pDM_Odm->DefaultOfdmIndex: %d\… in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1473 rtldm->swing_idx_cck_base, in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1474 rtldm->swing_idx_ofdm_base[RF90_PATH_A], in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1475 rtldm->default_ofdm_index); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1482 thermal_value, rtlefuse->eeprom_thermalmeter); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1483 if (!rtldm->txpower_track_control || in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1484 rtlefuse->eeprom_thermalmeter == 0 || in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1485 rtlefuse->eeprom_thermalmeter == 0xFF) in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1490 if (rtlhal->reloadtxpowerindex) in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1495 rtldm->thermalvalue_avg[rtldm->thermalvalue_avg_index] = thermal_value; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1496 rtldm->thermalvalue_avg_index++; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1497 if (rtldm->thermalvalue_avg_index == AVG_THERMAL_NUM_8812A) in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1499 rtldm->thermalvalue_avg_index = 0; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1502 if (rtldm->thermalvalue_avg[i]) { in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1503 thermal_value_avg += rtldm->thermalvalue_avg[i]; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1513 thermal_value, rtlefuse->eeprom_thermalmeter); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1520 delta = (thermal_value > rtldm->thermalvalue) ? in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1521 (thermal_value - rtldm->thermalvalue) : in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1522 (rtldm->thermalvalue - thermal_value); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1523 delta_lck = (thermal_value > rtldm->thermalvalue_lck) ? in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1524 (thermal_value - rtldm->thermalvalue_lck) : in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1525 (rtldm->thermalvalue_lck - thermal_value); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1526 delta_iqk = (thermal_value > rtldm->thermalvalue_iqk) ? in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1527 (thermal_value - rtldm->thermalvalue_iqk) : in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1528 (rtldm->thermalvalue_iqk - thermal_value); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1535 * Delta temperature is equal to or larger than 20 centigrade. in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1541 rtldm->thermalvalue_lck = thermal_value; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1547 if (delta > 0 && rtldm->txpower_track_control) { in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1551 delta = thermal_value > rtlefuse->eeprom_thermalmeter ? in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1552 (thermal_value - rtlefuse->eeprom_thermalmeter) : in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1553 (rtlefuse->eeprom_thermalmeter - thermal_value); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1556 delta = TXPWR_TRACK_TABLE_SIZE - 1; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1560 if (thermal_value > rtlefuse->eeprom_thermalmeter) { in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1564 rtldm->delta_power_index_last[RF90_PATH_A] = in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1565 rtldm->delta_power_index[RF90_PATH_A]; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1566 rtldm->delta_power_index[RF90_PATH_A] = in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1569 rtldm->absolute_ofdm_swing_idx[RF90_PATH_A] = in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1571 /*Record delta swing for mix mode power tracking*/ in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1574 "******Temp is higher and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A] = %d\n", in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1575 rtldm->absolute_ofdm_swing_idx[RF90_PATH_A]); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1580 rtldm->delta_power_index_last[RF90_PATH_B] = in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1581 rtldm->delta_power_index[RF90_PATH_B]; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1582 rtldm->delta_power_index[RF90_PATH_B] = in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1585 rtldm->absolute_ofdm_swing_idx[RF90_PATH_B] = in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1587 /*Record delta swing for mix mode power tracking*/ in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1590 "******Temp is higher and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_B] = %d\n", in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1591 rtldm->absolute_ofdm_swing_idx[RF90_PATH_B]); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1597 rtldm->delta_power_index_last[RF90_PATH_A] = in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1598 rtldm->delta_power_index[RF90_PATH_A]; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1599 rtldm->delta_power_index[RF90_PATH_A] = in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1600 -1 * delta_swing_table_idx_tdown_a[delta]; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1602 rtldm->absolute_ofdm_swing_idx[RF90_PATH_A] = in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1603 -1 * delta_swing_table_idx_tdown_a[delta]; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1604 /* Record delta swing for mix mode power tracking*/ in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1606 "******Temp is lower and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A] = %d\n", in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1607 rtldm->absolute_ofdm_swing_idx[RF90_PATH_A]); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1613 rtldm->delta_power_index_last[RF90_PATH_B] = in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1614 rtldm->delta_power_index[RF90_PATH_B]; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1615 rtldm->delta_power_index[RF90_PATH_B] = in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1616 -1 * delta_swing_table_idx_tdown_b[delta]; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1618 rtldm->absolute_ofdm_swing_idx[RF90_PATH_B] = in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1619 -1 * delta_swing_table_idx_tdown_b[delta]; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1620 /*Record delta swing for mix mode power tracking*/ in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1623 "******Temp is lower and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_B] = %d\n", in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1624 rtldm->absolute_ofdm_swing_idx[RF90_PATH_B]); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1629 …"============================= [Path-%c]Calculating PowerIndexOffset =============================… in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1632 if (rtldm->delta_power_index[p] == in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1633 rtldm->delta_power_index_last[p]) in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1636 rtldm->power_index_offset[p] = 0; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1638 rtldm->power_index_offset[p] = in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1639 rtldm->delta_power_index[p] - in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1640 rtldm->delta_power_index_last[p]; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1642 * times Power Tracking in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1645 "[Path-%c] PowerIndexOffset(%d) =DeltaPowerIndex(%d) -DeltaPowerIndexLast(%d)\n", in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1647 rtldm->power_index_offset[p], in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1648 rtldm->delta_power_index[p], in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1649 rtldm->delta_power_index_last[p]); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1651 rtldm->ofdm_index[p] = in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1652 rtldm->swing_idx_ofdm_base[p] + in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1653 rtldm->power_index_offset[p]; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1654 rtldm->cck_index = in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1655 rtldm->swing_idx_cck_base + in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1656 rtldm->power_index_offset[p]; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1658 rtldm->swing_idx_cck = rtldm->cck_index; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1659 rtldm->swing_idx_ofdm[p] = rtldm->ofdm_index[p]; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1665 rtldm->swing_idx_cck, in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1666 rtldm->swing_idx_cck_base, in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1667 rtldm->power_index_offset[p]); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1670 rtldm->swing_idx_ofdm[p], in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1672 rtldm->swing_idx_ofdm_base[p], in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1673 rtldm->power_index_offset[p]); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1677 if (rtldm->ofdm_index[p] > TXSCALE_TABLE_SIZE - 1) in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1678 rtldm->ofdm_index[p] = TXSCALE_TABLE_SIZE - 1; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1679 else if (rtldm->ofdm_index[p] < ofdm_min_index) in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1680 rtldm->ofdm_index[p] = ofdm_min_index; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1684 if (rtldm->cck_index > TXSCALE_TABLE_SIZE - 1) in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1685 rtldm->cck_index = TXSCALE_TABLE_SIZE - 1; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1686 else if (rtldm->cck_index < 0) in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1687 rtldm->cck_index = 0; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1690 …"The thermal meter is unchanged or TxPowerTracking OFF(%d): ThermalValue: %d , pDM_Odm->RFCalibrat… in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1691 rtldm->txpower_track_control, in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1693 rtldm->thermalvalue); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1696 rtldm->power_index_offset[p] = 0; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1701 rtldm->cck_index, rtldm->swing_idx_cck_base); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1705 rtldm->ofdm_index[p], in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1707 rtldm->swing_idx_ofdm_base[p]); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1710 if ((rtldm->power_index_offset[RF90_PATH_A] != 0 || in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1711 rtldm->power_index_offset[RF90_PATH_B] != 0) && in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1712 rtldm->txpower_track_control) { in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1714 *Always TRUE after Tx Power is adjusted by power tracking. in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1720 *2012/04/25 MH Add for tx power tracking to set in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1723 if (thermal_value > rtldm->thermalvalue) { in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1725 "Temperature Increasing(A): delta_pi: %d , delta_t: %d, Now_t: %d,EFUSE_t: %d, Last_t: %d\n", in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1726 rtldm->power_index_offset[RF90_PATH_A], in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1728 rtlefuse->eeprom_thermalmeter, in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1729 rtldm->thermalvalue); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1732 "Temperature Increasing(B): delta_pi: %d ,delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n", in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1733 rtldm->power_index_offset[RF90_PATH_B], in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1735 rtlefuse->eeprom_thermalmeter, in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1736 rtldm->thermalvalue); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1737 } else if (thermal_value < rtldm->thermalvalue) { /*Low temperature*/ in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1739 "Temperature Decreasing(A): delta_pi: %d , delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n", in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1740 rtldm->power_index_offset[RF90_PATH_A], in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1742 rtlefuse->eeprom_thermalmeter, in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1743 rtldm->thermalvalue); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1746 "Temperature Decreasing(B): delta_pi: %d , delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n", in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1747 rtldm->power_index_offset[RF90_PATH_B], in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1749 rtlefuse->eeprom_thermalmeter, in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1750 rtldm->thermalvalue); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1753 if (thermal_value > rtlefuse->eeprom_thermalmeter) { in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1755 "Temperature(%d) higher than PG value(%d)\n", in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1756 thermal_value, rtlefuse->eeprom_thermalmeter); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1759 "**********Enter POWER Tracking MIX_MODE**********\n"); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1765 "Temperature(%d) lower than PG value(%d)\n", in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1766 thermal_value, rtlefuse->eeprom_thermalmeter); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1769 "**********Enter POWER Tracking MIX_MODE**********\n"); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1774 /*Record last time Power Tracking result as base.*/ in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1775 rtldm->swing_idx_cck_base = rtldm->swing_idx_cck; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1777 rtldm->swing_idx_ofdm_base[p] = in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1778 rtldm->swing_idx_ofdm[p]; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1781 "pDM_Odm->RFCalibrateInfo.ThermalValue =%d ThermalValue= %d\n", in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1782 rtldm->thermalvalue, thermal_value); in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1783 /*Record last Power Tracking Thermal Value*/ in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1784 rtldm->thermalvalue = thermal_value; in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1786 /*Delta temperature is equal to or larger than in rtl8812ae_dm_txpower_tracking_callback_thermalmeter()
1800 struct rtl_phy *rtlphy = &rtlpriv->phy; in rtl8821ae_get_delta_swing_table()
1802 u8 channel = rtlphy->current_channel; in rtl8821ae_get_delta_swing_table()
1803 u8 rate = rtldm->tx_rate; in rtl8821ae_get_delta_swing_table()
1829 /*-----------------------------------------------------------------------------
1845 *---------------------------------------------------------------------------
1853 struct rtl_phy *rtlphy = &rtlpriv->phy; in rtl8821ae_dm_txpwr_track_set_pwr()
1859 if (rtldm->tx_rate != 0xFF) in rtl8821ae_dm_txpwr_track_set_pwr()
1860 tx_rate = rtl8821ae_hw_rate_to_mrate(hw, rtldm->tx_rate); in rtl8821ae_dm_txpwr_track_set_pwr()
1901 pwr_tracking_limit = 22; /*-1dB*/ in rtl8821ae_dm_txpwr_track_set_pwr()
1914 (rtldm->ofdm_index[RF90_PATH_A] > in rtl8821ae_dm_txpwr_track_set_pwr()
1917 rtldm->ofdm_index[RF90_PATH_A]; in rtl8821ae_dm_txpwr_track_set_pwr()
1919 …"pDM_Odm->RFCalibrateInfo.OFDM_index[ODM_RF_PATH_A]=%d,pDM_Odm->RealBbSwingIdx[ODM_RF_PATH_A]=%d\n… in rtl8821ae_dm_txpwr_track_set_pwr()
1920 rtldm->ofdm_index[RF90_PATH_A], in rtl8821ae_dm_txpwr_track_set_pwr()
1928 "pDM_Odm->DefaultOfdmIndex=%d,pDM_Odm->Absolute_OFDMSwingIdx[RFPath]=%d, RF_Path = %d\n", in rtl8821ae_dm_txpwr_track_set_pwr()
1929 rtldm->default_ofdm_index, in rtl8821ae_dm_txpwr_track_set_pwr()
1930 rtldm->absolute_ofdm_swing_idx[rf_path], in rtl8821ae_dm_txpwr_track_set_pwr()
1934 rtldm->default_ofdm_index + in rtl8821ae_dm_txpwr_track_set_pwr()
1935 rtldm->absolute_ofdm_swing_idx[rf_path]; in rtl8821ae_dm_txpwr_track_set_pwr()
1939 rtldm->remnant_cck_idx = in rtl8821ae_dm_txpwr_track_set_pwr()
1940 final_ofdm_swing_index - in rtl8821ae_dm_txpwr_track_set_pwr()
1943 rtldm->remnant_ofdm_swing_idx[rf_path] = in rtl8821ae_dm_txpwr_track_set_pwr()
1944 final_ofdm_swing_index - in rtl8821ae_dm_txpwr_track_set_pwr()
1951 rtldm->modify_txagc_flag_path_a = true; in rtl8821ae_dm_txpwr_track_set_pwr()
1955 rtlphy->current_channel, in rtl8821ae_dm_txpwr_track_set_pwr()
1961 rtldm->remnant_ofdm_swing_idx[rf_path]); in rtl8821ae_dm_txpwr_track_set_pwr()
1963 rtldm->remnant_cck_idx = final_ofdm_swing_index; in rtl8821ae_dm_txpwr_track_set_pwr()
1965 rtldm->remnant_ofdm_swing_idx[rf_path] = in rtl8821ae_dm_txpwr_track_set_pwr()
1971 rtldm->modify_txagc_flag_path_a = true; in rtl8821ae_dm_txpwr_track_set_pwr()
1975 rtlphy->current_channel, RF90_PATH_A); in rtl8821ae_dm_txpwr_track_set_pwr()
1979 rtldm->remnant_ofdm_swing_idx[rf_path]); in rtl8821ae_dm_txpwr_track_set_pwr()
1988 if (rtldm->modify_txagc_flag_path_a) { in rtl8821ae_dm_txpwr_track_set_pwr()
1989 rtldm->remnant_cck_idx = 0; in rtl8821ae_dm_txpwr_track_set_pwr()
1990 rtldm->remnant_ofdm_swing_idx[rf_path] = 0; in rtl8821ae_dm_txpwr_track_set_pwr()
1994 rtlphy->current_channel, RF90_PATH_A); in rtl8821ae_dm_txpwr_track_set_pwr()
1996 rtldm->modify_txagc_flag_path_a = false; in rtl8821ae_dm_txpwr_track_set_pwr()
2000 "******Path_A pDM_Odm->Modify_TxAGC_Flag= FALSE\n"); in rtl8821ae_dm_txpwr_track_set_pwr()
2016 struct rtl_phy *rtlphy = &rtlpriv->phy; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2023 /* GetRightChnlPlaceforIQK(pHalData->CurrentChannel)*/ in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2037 rtldm->txpower_trackinginit = true; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2040 …"===>%s,\n pDM_Odm->BbSwingIdxCckBase: %d,pDM_Odm->BbSwingIdxOfdmBase[A]:%d, pDM_Odm->DefaultOfdmI… in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2042 rtldm->swing_idx_cck_base, in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2043 rtldm->swing_idx_ofdm_base[RF90_PATH_A], in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2044 rtldm->default_ofdm_index); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2048 if (!rtldm->txpower_track_control || in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2049 rtlefuse->eeprom_thermalmeter == 0 || in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2050 rtlefuse->eeprom_thermalmeter == 0xFF) in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2055 if (rtlhal->reloadtxpowerindex) { in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2061 rtldm->thermalvalue_avg[rtldm->thermalvalue_avg_index] = thermal_value; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2062 rtldm->thermalvalue_avg_index++; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2063 if (rtldm->thermalvalue_avg_index == AVG_THERMAL_NUM_8812A) in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2065 rtldm->thermalvalue_avg_index = 0; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2068 if (rtldm->thermalvalue_avg[i]) { in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2069 thermal_value_avg += rtldm->thermalvalue_avg[i]; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2079 thermal_value, rtlefuse->eeprom_thermalmeter); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2086 delta = (thermal_value > rtldm->thermalvalue) ? in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2087 (thermal_value - rtldm->thermalvalue) : in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2088 (rtldm->thermalvalue - thermal_value); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2089 delta_lck = (thermal_value > rtldm->thermalvalue_lck) ? in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2090 (thermal_value - rtldm->thermalvalue_lck) : in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2091 (rtldm->thermalvalue_lck - thermal_value); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2092 delta_iqk = (thermal_value > rtldm->thermalvalue_iqk) ? in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2093 (thermal_value - rtldm->thermalvalue_iqk) : in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2094 (rtldm->thermalvalue_iqk - thermal_value); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2101 /*Delta temperature is equal to or larger than 20 centigrade.*/ in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2106 rtldm->thermalvalue_lck = thermal_value; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2112 if (delta > 0 && rtldm->txpower_track_control) { in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2116 delta = thermal_value > rtlefuse->eeprom_thermalmeter ? in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2117 (thermal_value - rtlefuse->eeprom_thermalmeter) : in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2118 (rtlefuse->eeprom_thermalmeter - thermal_value); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2121 delta = TXSCALE_TABLE_SIZE - 1; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2125 if (thermal_value > rtlefuse->eeprom_thermalmeter) { in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2129 rtldm->delta_power_index_last[RF90_PATH_A] = in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2130 rtldm->delta_power_index[RF90_PATH_A]; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2131 rtldm->delta_power_index[RF90_PATH_A] = in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2134 rtldm->absolute_ofdm_swing_idx[RF90_PATH_A] = in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2136 /*Record delta swing for mix mode power tracking*/ in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2139 "******Temp is higher and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A] = %d\n", in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2140 rtldm->absolute_ofdm_swing_idx[RF90_PATH_A]); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2146 rtldm->delta_power_index_last[RF90_PATH_A] = in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2147 rtldm->delta_power_index[RF90_PATH_A]; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2148 rtldm->delta_power_index[RF90_PATH_A] = in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2149 -1 * delta_swing_table_idx_tdown_a[delta]; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2151 rtldm->absolute_ofdm_swing_idx[RF90_PATH_A] = in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2152 -1 * delta_swing_table_idx_tdown_a[delta]; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2153 /* Record delta swing for mix mode power tracking*/ in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2155 "******Temp is lower and pDM_Odm->Absolute_OFDMSwingIdx[ODM_RF_PATH_A] = %d\n", in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2156 rtldm->absolute_ofdm_swing_idx[RF90_PATH_A]); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2161 …"\n\n================================ [Path-%c]Calculating PowerIndexOffset ======================… in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2166 if (rtldm->delta_power_index[p] == in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2167 rtldm->delta_power_index_last[p]) in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2169 rtldm->power_index_offset[p] = 0; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2171 rtldm->power_index_offset[p] = in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2172 rtldm->delta_power_index[p] - in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2173 rtldm->delta_power_index_last[p]; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2174 /*Power Index Diff between 2 times Power Tracking*/ in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2177 "[Path-%c] PowerIndexOffset(%d) = DeltaPowerIndex(%d) - DeltaPowerIndexLast(%d)\n", in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2179 rtldm->power_index_offset[p], in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2180 rtldm->delta_power_index[p] , in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2181 rtldm->delta_power_index_last[p]); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2183 rtldm->ofdm_index[p] = in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2184 rtldm->swing_idx_ofdm_base[p] + in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2185 rtldm->power_index_offset[p]; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2186 rtldm->cck_index = in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2187 rtldm->swing_idx_cck_base + in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2188 rtldm->power_index_offset[p]; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2190 rtldm->swing_idx_cck = rtldm->cck_index; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2191 rtldm->swing_idx_ofdm[p] = rtldm->ofdm_index[p]; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2197 rtldm->swing_idx_cck, in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2198 rtldm->swing_idx_cck_base, in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2199 rtldm->power_index_offset[p]); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2202 rtldm->swing_idx_ofdm[p], in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2204 rtldm->swing_idx_ofdm_base[p], in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2205 rtldm->power_index_offset[p]); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2209 if (rtldm->ofdm_index[p] > TXSCALE_TABLE_SIZE - 1) in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2210 rtldm->ofdm_index[p] = TXSCALE_TABLE_SIZE - 1; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2211 else if (rtldm->ofdm_index[p] < ofdm_min_index) in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2212 rtldm->ofdm_index[p] = ofdm_min_index; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2216 if (rtldm->cck_index > TXSCALE_TABLE_SIZE - 1) in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2217 rtldm->cck_index = TXSCALE_TABLE_SIZE - 1; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2218 else if (rtldm->cck_index < 0) in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2219 rtldm->cck_index = 0; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2222 …"The thermal meter is unchanged or TxPowerTracking OFF(%d):ThermalValue: %d , pDM_Odm->RFCalibrate… in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2223 rtldm->txpower_track_control, in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2225 rtldm->thermalvalue); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2228 rtldm->power_index_offset[p] = 0; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2233 rtldm->cck_index, rtldm->swing_idx_cck_base); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2237 rtldm->ofdm_index[p], in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2239 rtldm->swing_idx_ofdm_base[p]); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2242 if ((rtldm->power_index_offset[RF90_PATH_A] != 0 || in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2243 rtldm->power_index_offset[RF90_PATH_B] != 0) && in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2244 rtldm->txpower_track_control) { in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2246 /*Always TRUE after Tx Power is adjusted by power tracking.*/ in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2252 * 2012/04/25 MH Add for tx power tracking to in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2255 if (thermal_value > rtldm->thermalvalue) { in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2257 "Temperature Increasing(A): delta_pi: %d , delta_t: %d,Now_t: %d, EFUSE_t: %d, Last_t: %d\n", in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2258 rtldm->power_index_offset[RF90_PATH_A], in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2260 rtlefuse->eeprom_thermalmeter, in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2261 rtldm->thermalvalue); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2262 } else if (thermal_value < rtldm->thermalvalue) { /*Low temperature*/ in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2264 "Temperature Decreasing(A): delta_pi: %d , delta_t: %d, Now_t: %d, EFUSE_t: %d, Last_t: %d\n", in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2265 rtldm->power_index_offset[RF90_PATH_A], in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2267 rtlefuse->eeprom_thermalmeter, in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2268 rtldm->thermalvalue); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2271 if (thermal_value > rtlefuse->eeprom_thermalmeter) { in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2273 "Temperature(%d) higher than PG value(%d)\n", in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2274 thermal_value, rtlefuse->eeprom_thermalmeter); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2277 "****Enter POWER Tracking MIX_MODE****\n"); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2283 "Temperature(%d) lower than PG value(%d)\n", in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2284 thermal_value, rtlefuse->eeprom_thermalmeter); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2287 "*****Enter POWER Tracking MIX_MODE*****\n"); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2292 /*Record last time Power Tracking result as base.*/ in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2293 rtldm->swing_idx_cck_base = rtldm->swing_idx_cck; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2295 rtldm->swing_idx_ofdm_base[p] = rtldm->swing_idx_ofdm[p]; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2298 "pDM_Odm->RFCalibrateInfo.ThermalValue = %d ThermalValue= %d\n", in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2299 rtldm->thermalvalue, thermal_value); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2300 /*Record last Power Tracking Thermal Value*/ in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2301 rtldm->thermalvalue = thermal_value; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2303 /* Delta temperature is equal to or larger than in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2307 if (!rtlphy->lck_inprogress) { in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2308 spin_lock(&rtlpriv->locks.iqk_lock); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2309 rtlphy->lck_inprogress = true; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2310 spin_unlock(&rtlpriv->locks.iqk_lock); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2314 spin_lock(&rtlpriv->locks.iqk_lock); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2315 rtlphy->lck_inprogress = false; in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2316 spin_unlock(&rtlpriv->locks.iqk_lock); in rtl8821ae_dm_txpower_tracking_callback_thermalmeter()
2326 if (!rtlpriv->dm.tm_trigger) { in rtl8821ae_dm_check_txpower_tracking_thermalmeter()
2331 rtlpriv->dm.tm_trigger = 1; in rtl8821ae_dm_check_txpower_tracking_thermalmeter()
2338 rtlpriv->dm.tm_trigger = 0; in rtl8821ae_dm_check_txpower_tracking_thermalmeter()
2347 struct rate_adaptive *p_ra = &rtlpriv->ra; in rtl8821ae_dm_refresh_rate_adaptive_mask()
2348 u32 low_rssithresh_for_ra = p_ra->low2high_rssi_thresh_for_ra40m; in rtl8821ae_dm_refresh_rate_adaptive_mask()
2349 u32 high_rssithresh_for_ra = p_ra->high_rssi_thresh_for_ra; in rtl8821ae_dm_refresh_rate_adaptive_mask()
2359 if (!rtlpriv->dm.useramask) { in rtl8821ae_dm_refresh_rate_adaptive_mask()
2365 if (mac->link_state == MAC80211_LINKED && in rtl8821ae_dm_refresh_rate_adaptive_mask()
2366 mac->opmode == NL80211_IFTYPE_STATION) { in rtl8821ae_dm_refresh_rate_adaptive_mask()
2367 switch (p_ra->pre_ratr_state) { in rtl8821ae_dm_refresh_rate_adaptive_mask()
2379 if (rtlpriv->dm.undec_sm_pwdb > in rtl8821ae_dm_refresh_rate_adaptive_mask()
2381 p_ra->ratr_state = DM_RATR_STA_HIGH; in rtl8821ae_dm_refresh_rate_adaptive_mask()
2382 else if (rtlpriv->dm.undec_sm_pwdb > in rtl8821ae_dm_refresh_rate_adaptive_mask()
2384 p_ra->ratr_state = DM_RATR_STA_MIDDLE; in rtl8821ae_dm_refresh_rate_adaptive_mask()
2386 p_ra->ratr_state = DM_RATR_STA_LOW; in rtl8821ae_dm_refresh_rate_adaptive_mask()
2388 if (p_ra->pre_ratr_state != p_ra->ratr_state) { in rtl8821ae_dm_refresh_rate_adaptive_mask()
2391 rtlpriv->dm.undec_sm_pwdb); in rtl8821ae_dm_refresh_rate_adaptive_mask()
2393 "RSSI_LEVEL = %d\n", p_ra->ratr_state); in rtl8821ae_dm_refresh_rate_adaptive_mask()
2396 p_ra->pre_ratr_state, p_ra->ratr_state); in rtl8821ae_dm_refresh_rate_adaptive_mask()
2399 sta = rtl_find_sta(hw, mac->bssid); in rtl8821ae_dm_refresh_rate_adaptive_mask()
2401 rtlpriv->cfg->ops->update_rate_tbl(hw, in rtl8821ae_dm_refresh_rate_adaptive_mask()
2402 sta, p_ra->ratr_state, true); in rtl8821ae_dm_refresh_rate_adaptive_mask()
2405 p_ra->pre_ratr_state = p_ra->ratr_state; in rtl8821ae_dm_refresh_rate_adaptive_mask()
2413 struct dig_t *dm_digtable = &rtlpriv->dm_digtable; in rtl8821ae_dm_refresh_basic_rate_mask()
2414 struct rtl_mac *mac = &rtlpriv->mac80211; in rtl8821ae_dm_refresh_basic_rate_mask()
2419 if (mac->link_state < MAC80211_LINKED) in rtl8821ae_dm_refresh_basic_rate_mask()
2421 else if (dm_digtable->rssi_val_min < 25) in rtl8821ae_dm_refresh_basic_rate_mask()
2423 else if (dm_digtable->rssi_val_min > 30) in rtl8821ae_dm_refresh_basic_rate_mask()
2430 basic_rate &= (!(basic_rate ^ mac->basic_rates)); in rtl8821ae_dm_refresh_basic_rate_mask()
2431 rtlpriv->cfg->ops->set_hw_reg(hw, in rtl8821ae_dm_refresh_basic_rate_mask()
2434 rtlpriv->cfg->ops->set_hw_reg(hw, in rtl8821ae_dm_refresh_basic_rate_mask()
2435 HW_VAR_BASIC_RATE, (u8 *)&mac->basic_rates); in rtl8821ae_dm_refresh_basic_rate_mask()
2478 /*Keep past Tx/Rx packet count for RT-to-RT EDCA turbo.*/ in rtl8821ae_dm_check_edca_turbo()
2495 if (rtlpriv->dm.dbginfo.num_non_be_pkt > 0x100) in rtl8821ae_dm_check_edca_turbo()
2496 rtlpriv->dm.is_any_nonbepkts = true; in rtl8821ae_dm_check_edca_turbo()
2497 rtlpriv->dm.dbginfo.num_non_be_pkt = 0; in rtl8821ae_dm_check_edca_turbo()
2503 pb_is_cur_rdl_state = &rtlpriv->dm.is_cur_rdlstate; in rtl8821ae_dm_check_edca_turbo()
2505 cur_tx_ok_cnt = rtlpriv->stats.txbytesunicast - rtldm->last_tx_ok_cnt; in rtl8821ae_dm_check_edca_turbo()
2506 cur_rx_ok_cnt = rtlpriv->stats.rxbytesunicast - rtldm->last_rx_ok_cnt; in rtl8821ae_dm_check_edca_turbo()
2508 rtldm->last_tx_ok_cnt = rtlpriv->stats.txbytesunicast; in rtl8821ae_dm_check_edca_turbo()
2509 rtldm->last_rx_ok_cnt = rtlpriv->stats.rxbytesunicast; in rtl8821ae_dm_check_edca_turbo()
2511 iot_peer = rtlpriv->mac80211.vendor; in rtl8821ae_dm_check_edca_turbo()
2513 b_edca_turbo_on = ((!rtlpriv->dm.is_any_nonbepkts) && in rtl8821ae_dm_check_edca_turbo()
2514 (!rtlpriv->dm.disable_framebursting)) ? in rtl8821ae_dm_check_edca_turbo()
2517 if (rtlpriv->rtlhal.hw_type != HARDWARE_TYPE_RTL8812AE) { in rtl8821ae_dm_check_edca_turbo()
2519 (mac->mode == WIRELESS_MODE_N_24G)) { in rtl8821ae_dm_check_edca_turbo()
2527 rtlpriv->dm.is_any_nonbepkts, in rtl8821ae_dm_check_edca_turbo()
2528 rtlpriv->dm.disable_framebursting); in rtl8821ae_dm_check_edca_turbo()
2553 rtlpriv->dm.current_turbo_edca = true; in rtl8821ae_dm_check_edca_turbo()
2559 if (rtlpriv->dm.current_turbo_edca) { in rtl8821ae_dm_check_edca_turbo()
2561 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_AC_PARAM, in rtl8821ae_dm_check_edca_turbo()
2564 rtlpriv->dm.current_turbo_edca = false; in rtl8821ae_dm_check_edca_turbo()
2567 rtlpriv->dm.is_any_nonbepkts = false; in rtl8821ae_dm_check_edca_turbo()
2568 rtldm->last_tx_ok_cnt = rtlpriv->stats.txbytesunicast; in rtl8821ae_dm_check_edca_turbo()
2569 rtldm->last_rx_ok_cnt = rtlpriv->stats.rxbytesunicast; in rtl8821ae_dm_check_edca_turbo()
2575 struct dig_t *dm_digtable = &rtlpriv->dm_digtable; in rtl8821ae_dm_cck_packet_detection_thresh()
2578 if (rtlpriv->mac80211.link_state >= MAC80211_LINKED) { in rtl8821ae_dm_cck_packet_detection_thresh()
2579 if (dm_digtable->rssi_val_min > 25) { in rtl8821ae_dm_cck_packet_detection_thresh()
2581 } else if ((dm_digtable->rssi_val_min <= 25) && in rtl8821ae_dm_cck_packet_detection_thresh()
2582 (dm_digtable->rssi_val_min > 10)) { in rtl8821ae_dm_cck_packet_detection_thresh()
2585 if (rtlpriv->falsealm_cnt.cnt_cck_fail > 1000) in rtl8821ae_dm_cck_packet_detection_thresh()
2591 if (rtlpriv->falsealm_cnt.cnt_cck_fail > 1000) in rtl8821ae_dm_cck_packet_detection_thresh()
2597 if (dm_digtable->cur_cck_cca_thres != cur_cck_cca_thresh) in rtl8821ae_dm_cck_packet_detection_thresh()
2601 dm_digtable->pre_cck_cca_thres = dm_digtable->cur_cck_cca_thres; in rtl8821ae_dm_cck_packet_detection_thresh()
2602 dm_digtable->cur_cck_cca_thres = cur_cck_cca_thresh; in rtl8821ae_dm_cck_packet_detection_thresh()
2604 "CCK cca thresh hold =%x\n", dm_digtable->cur_cck_cca_thres); in rtl8821ae_dm_cck_packet_detection_thresh()
2616 if (rtlpriv->mac80211.link_state < MAC80211_LINKED) { in rtl8821ae_dm_dynamic_atc_switch()
2618 if (rtldm->atc_status == ATC_STATUS_OFF) { in rtl8821ae_dm_dynamic_atc_switch()
2620 rtldm->atc_status = ATC_STATUS_ON; in rtl8821ae_dm_dynamic_atc_switch()
2625 "atc_status = %d\n", rtldm->atc_status); in rtl8821ae_dm_dynamic_atc_switch()
2627 if (rtldm->crystal_cap != rtlpriv->efuse.crystalcap) { in rtl8821ae_dm_dynamic_atc_switch()
2628 rtldm->crystal_cap = rtlpriv->efuse.crystalcap; in rtl8821ae_dm_dynamic_atc_switch()
2629 crystal_cap = rtldm->crystal_cap & 0x3f; in rtl8821ae_dm_dynamic_atc_switch()
2631 if (rtlpriv->rtlhal.hw_type == HARDWARE_TYPE_RTL8812AE) in rtl8821ae_dm_dynamic_atc_switch()
2641 rtldm->crystal_cap); in rtl8821ae_dm_dynamic_atc_switch()
2643 /*1. Calculate CFO for path-A & path-B*/ in rtl8821ae_dm_dynamic_atc_switch()
2644 cfo_khz_a = (int)(rtldm->cfo_tail[0] * 3125) / 1280; in rtl8821ae_dm_dynamic_atc_switch()
2645 cfo_khz_b = (int)(rtldm->cfo_tail[1] * 3125) / 1280; in rtl8821ae_dm_dynamic_atc_switch()
2646 packet_count = rtldm->packet_count; in rtl8821ae_dm_dynamic_atc_switch()
2649 if (packet_count == rtldm->packet_count_pre) { in rtl8821ae_dm_dynamic_atc_switch()
2655 rtldm->packet_count_pre = packet_count; in rtl8821ae_dm_dynamic_atc_switch()
2658 rtldm->packet_count); in rtl8821ae_dm_dynamic_atc_switch()
2661 if (rtlpriv->phy.rf_type == RF_1T1R) in rtl8821ae_dm_dynamic_atc_switch()
2671 cfo_ave_diff = (rtldm->cfo_ave_pre >= cfo_ave) ? in rtl8821ae_dm_dynamic_atc_switch()
2672 (rtldm->cfo_ave_pre - cfo_ave) : in rtl8821ae_dm_dynamic_atc_switch()
2673 (cfo_ave - rtldm->cfo_ave_pre); in rtl8821ae_dm_dynamic_atc_switch()
2675 if (cfo_ave_diff > 20 && !rtldm->large_cfo_hit) { in rtl8821ae_dm_dynamic_atc_switch()
2678 rtldm->large_cfo_hit = true; in rtl8821ae_dm_dynamic_atc_switch()
2681 rtldm->large_cfo_hit = false; in rtl8821ae_dm_dynamic_atc_switch()
2683 rtldm->cfo_ave_pre = cfo_ave; in rtl8821ae_dm_dynamic_atc_switch()
2685 /*CFO tracking by adjusting Xtal cap.*/ in rtl8821ae_dm_dynamic_atc_switch()
2688 if (cfo_ave >= -rtldm->cfo_threshold && in rtl8821ae_dm_dynamic_atc_switch()
2689 cfo_ave <= rtldm->cfo_threshold && in rtl8821ae_dm_dynamic_atc_switch()
2690 rtldm->is_freeze == 0) { in rtl8821ae_dm_dynamic_atc_switch()
2691 if (rtldm->cfo_threshold == CFO_THRESHOLD_XTAL) { in rtl8821ae_dm_dynamic_atc_switch()
2692 rtldm->cfo_threshold = CFO_THRESHOLD_XTAL + 10; in rtl8821ae_dm_dynamic_atc_switch()
2693 rtldm->is_freeze = 1; in rtl8821ae_dm_dynamic_atc_switch()
2695 rtldm->cfo_threshold = CFO_THRESHOLD_XTAL; in rtl8821ae_dm_dynamic_atc_switch()
2700 rtldm->cfo_threshold); in rtl8821ae_dm_dynamic_atc_switch()
2703 if (cfo_ave > rtldm->cfo_threshold && rtldm->crystal_cap < 0x3f) in rtl8821ae_dm_dynamic_atc_switch()
2704 adjust_xtal = ((cfo_ave - CFO_THRESHOLD_XTAL) >> 2) + 1; in rtl8821ae_dm_dynamic_atc_switch()
2705 else if ((cfo_ave < -rtlpriv->dm.cfo_threshold) && in rtl8821ae_dm_dynamic_atc_switch()
2706 rtlpriv->dm.crystal_cap > 0) in rtl8821ae_dm_dynamic_atc_switch()
2707 adjust_xtal = ((cfo_ave + CFO_THRESHOLD_XTAL) >> 2) - 1; in rtl8821ae_dm_dynamic_atc_switch()
2710 rtldm->crystal_cap, adjust_xtal); in rtl8821ae_dm_dynamic_atc_switch()
2714 rtldm->is_freeze = 0; in rtl8821ae_dm_dynamic_atc_switch()
2715 rtldm->crystal_cap += adjust_xtal; in rtl8821ae_dm_dynamic_atc_switch()
2717 if (rtldm->crystal_cap > 0x3f) in rtl8821ae_dm_dynamic_atc_switch()
2718 rtldm->crystal_cap = 0x3f; in rtl8821ae_dm_dynamic_atc_switch()
2719 else if (rtldm->crystal_cap < 0) in rtl8821ae_dm_dynamic_atc_switch()
2720 rtldm->crystal_cap = 0; in rtl8821ae_dm_dynamic_atc_switch()
2722 crystal_cap = rtldm->crystal_cap & 0x3f; in rtl8821ae_dm_dynamic_atc_switch()
2724 if (rtlpriv->rtlhal.hw_type == HARDWARE_TYPE_RTL8812AE) in rtl8821ae_dm_dynamic_atc_switch()
2734 rtldm->crystal_cap); in rtl8821ae_dm_dynamic_atc_switch()
2747 rtlpriv->cfg->ops->get_hw_reg(hw, HW_VAR_FW_PSMODE_STATUS, in rtl8821ae_dm_watchdog()
2750 rtlpriv->cfg->ops->get_hw_reg(hw, HW_VAR_FWLPS_RF_ON, in rtl8821ae_dm_watchdog()
2753 if (ppsc->p2p_ps_info.p2p_ps_mode) in rtl8821ae_dm_watchdog()
2756 spin_lock(&rtlpriv->locks.rf_ps_lock); in rtl8821ae_dm_watchdog()
2757 if ((ppsc->rfpwr_state == ERFON) && in rtl8821ae_dm_watchdog()
2759 (!ppsc->rfchange_inprogress)) { in rtl8821ae_dm_watchdog()
2769 if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE) in rtl8821ae_dm_watchdog()
2775 spin_unlock(&rtlpriv->locks.rf_ps_lock); in rtl8821ae_dm_watchdog()
2777 rtlpriv->dm.dbginfo.num_qry_beacon_pkt = 0; in rtl8821ae_dm_watchdog()
2787 struct fast_ant_training *pfat_table = &rtldm->fat_table; in rtl8821ae_dm_set_tx_ant_by_tx_info()
2790 if (rtlhal->hw_type != HARDWARE_TYPE_RTL8812AE) in rtl8821ae_dm_set_tx_ant_by_tx_info()
2793 if (rtlefuse->antenna_div_type == CG_TRX_HW_ANTDIV) in rtl8821ae_dm_set_tx_ant_by_tx_info()
2794 set_tx_desc_tx_ant(pdesc32, pfat_table->antsel_a[mac_id]); in rtl8821ae_dm_set_tx_ant_by_tx_info()