diff options
Diffstat (limited to 'drivers/net/wireless/rtlwifi/rtl8821ae/dm.c')
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8821ae/dm.c | 58 |
1 files changed, 16 insertions, 42 deletions
diff --git a/drivers/net/wireless/rtlwifi/rtl8821ae/dm.c b/drivers/net/wireless/rtlwifi/rtl8821ae/dm.c index ba30b0d250fd..0b2082dc48f1 100644 --- a/drivers/net/wireless/rtlwifi/rtl8821ae/dm.c +++ b/drivers/net/wireless/rtlwifi/rtl8821ae/dm.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include "../wifi.h" | 26 | #include "../wifi.h" |
27 | #include "../base.h" | 27 | #include "../base.h" |
28 | #include "../pci.h" | 28 | #include "../pci.h" |
29 | #include "../core.h" | ||
29 | #include "reg.h" | 30 | #include "reg.h" |
30 | #include "def.h" | 31 | #include "def.h" |
31 | #include "phy.h" | 32 | #include "phy.h" |
@@ -519,34 +520,6 @@ void rtl8821ae_dm_initialize_txpower_tracking_thermalmeter( | |||
519 | } | 520 | } |
520 | } | 521 | } |
521 | 522 | ||
522 | static void rtl8821ae_dm_diginit(struct ieee80211_hw *hw) | ||
523 | { | ||
524 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
525 | struct dig_t *dm_digtable = &rtlpriv->dm_digtable; | ||
526 | |||
527 | dm_digtable->cur_igvalue = rtl_get_bbreg(hw, ROFDM0_XAAGCCORE1, 0x7f); | ||
528 | dm_digtable->rssi_lowthresh = DM_DIG_THRESH_LOW; | ||
529 | dm_digtable->rssi_highthresh = DM_DIG_THRESH_HIGH; | ||
530 | dm_digtable->fa_lowthresh = DM_FALSEALARM_THRESH_LOW; | ||
531 | dm_digtable->fa_highthresh = DM_FALSEALARM_THRESH_HIGH; | ||
532 | dm_digtable->rx_gain_max = DM_DIG_MAX; | ||
533 | dm_digtable->rx_gain_min = DM_DIG_MIN; | ||
534 | dm_digtable->back_val = DM_DIG_BACKOFF_DEFAULT; | ||
535 | dm_digtable->back_range_max = DM_DIG_BACKOFF_MAX; | ||
536 | dm_digtable->back_range_min = DM_DIG_BACKOFF_MIN; | ||
537 | dm_digtable->pre_cck_cca_thres = 0xff; | ||
538 | dm_digtable->cur_cck_cca_thres = 0x83; | ||
539 | dm_digtable->forbidden_igi = DM_DIG_MIN; | ||
540 | dm_digtable->large_fa_hit = 0; | ||
541 | dm_digtable->recover_cnt = 0; | ||
542 | dm_digtable->dig_dynamic_min = DM_DIG_MIN; | ||
543 | dm_digtable->dig_dynamic_min_1 = DM_DIG_MIN; | ||
544 | dm_digtable->media_connect_0 = false; | ||
545 | dm_digtable->media_connect_1 = false; | ||
546 | rtlpriv->dm.dm_initialgain_enable = true; | ||
547 | dm_digtable->bt30_cur_igi = 0x32; | ||
548 | } | ||
549 | |||
550 | void rtl8821ae_dm_init_edca_turbo(struct ieee80211_hw *hw) | 523 | void rtl8821ae_dm_init_edca_turbo(struct ieee80211_hw *hw) |
551 | { | 524 | { |
552 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 525 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
@@ -606,6 +579,7 @@ void rtl8821ae_dm_init(struct ieee80211_hw *hw) | |||
606 | { | 579 | { |
607 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 580 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
608 | struct rtl_phy *rtlphy = &rtlpriv->phy; | 581 | struct rtl_phy *rtlphy = &rtlpriv->phy; |
582 | u32 cur_igvalue = rtl_get_bbreg(hw, ROFDM0_XAAGCCORE1, 0x7f); | ||
609 | 583 | ||
610 | spin_lock(&rtlpriv->locks.iqk_lock); | 584 | spin_lock(&rtlpriv->locks.iqk_lock); |
611 | rtlphy->lck_inprogress = false; | 585 | rtlphy->lck_inprogress = false; |
@@ -613,7 +587,7 @@ void rtl8821ae_dm_init(struct ieee80211_hw *hw) | |||
613 | 587 | ||
614 | rtlpriv->dm.dm_type = DM_TYPE_BYDRIVER; | 588 | rtlpriv->dm.dm_type = DM_TYPE_BYDRIVER; |
615 | rtl8821ae_dm_common_info_self_init(hw); | 589 | rtl8821ae_dm_common_info_self_init(hw); |
616 | rtl8821ae_dm_diginit(hw); | 590 | rtl_dm_diginit(hw, cur_igvalue); |
617 | rtl8821ae_dm_init_rate_adaptive_mask(hw); | 591 | rtl8821ae_dm_init_rate_adaptive_mask(hw); |
618 | rtl8821ae_dm_init_edca_turbo(hw); | 592 | rtl8821ae_dm_init_edca_turbo(hw); |
619 | rtl8821ae_dm_initialize_txpower_tracking_thermalmeter(hw); | 593 | rtl8821ae_dm_initialize_txpower_tracking_thermalmeter(hw); |
@@ -822,7 +796,7 @@ static void rtl8821ae_dm_dig(struct ieee80211_hw *hw) | |||
822 | struct dig_t *dm_digtable = &rtlpriv->dm_digtable; | 796 | struct dig_t *dm_digtable = &rtlpriv->dm_digtable; |
823 | struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); | 797 | struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); |
824 | struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); | 798 | struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); |
825 | u8 dig_dynamic_min; | 799 | u8 dig_min_0; |
826 | u8 dig_max_of_min; | 800 | u8 dig_max_of_min; |
827 | bool first_connect, first_disconnect; | 801 | bool first_connect, first_disconnect; |
828 | u8 dm_dig_max, dm_dig_min, offset; | 802 | u8 dm_dig_max, dm_dig_min, offset; |
@@ -837,7 +811,7 @@ static void rtl8821ae_dm_dig(struct ieee80211_hw *hw) | |||
837 | } | 811 | } |
838 | 812 | ||
839 | /*add by Neil Chen to avoid PSD is processing*/ | 813 | /*add by Neil Chen to avoid PSD is processing*/ |
840 | dig_dynamic_min = dm_digtable->dig_dynamic_min; | 814 | dig_min_0 = dm_digtable->dig_min_0; |
841 | first_connect = (mac->link_state >= MAC80211_LINKED) && | 815 | first_connect = (mac->link_state >= MAC80211_LINKED) && |
842 | (!dm_digtable->media_connect_0); | 816 | (!dm_digtable->media_connect_0); |
843 | first_disconnect = (mac->link_state < MAC80211_LINKED) && | 817 | first_disconnect = (mac->link_state < MAC80211_LINKED) && |
@@ -876,23 +850,23 @@ static void rtl8821ae_dm_dig(struct ieee80211_hw *hw) | |||
876 | offset = 0; | 850 | offset = 0; |
877 | 851 | ||
878 | if (dm_digtable->rssi_val_min - offset < dm_dig_min) | 852 | if (dm_digtable->rssi_val_min - offset < dm_dig_min) |
879 | dig_dynamic_min = dm_dig_min; | 853 | dig_min_0 = dm_dig_min; |
880 | else if (dm_digtable->rssi_val_min - | 854 | else if (dm_digtable->rssi_val_min - |
881 | offset > dig_max_of_min) | 855 | offset > dig_max_of_min) |
882 | dig_dynamic_min = dig_max_of_min; | 856 | dig_min_0 = dig_max_of_min; |
883 | else | 857 | else |
884 | dig_dynamic_min = | 858 | dig_min_0 = |
885 | dm_digtable->rssi_val_min - offset; | 859 | dm_digtable->rssi_val_min - offset; |
886 | 860 | ||
887 | RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, | 861 | RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, |
888 | "bOneEntryOnly=TRUE, dig_dynamic_min=0x%x\n", | 862 | "bOneEntryOnly=TRUE, dig_min_0=0x%x\n", |
889 | dig_dynamic_min); | 863 | dig_min_0); |
890 | } else { | 864 | } else { |
891 | dig_dynamic_min = dm_dig_min; | 865 | dig_min_0 = dm_dig_min; |
892 | } | 866 | } |
893 | } else { | 867 | } else { |
894 | dm_digtable->rx_gain_max = dm_dig_max; | 868 | dm_digtable->rx_gain_max = dm_dig_max; |
895 | dig_dynamic_min = dm_dig_min; | 869 | dig_min_0 = dm_dig_min; |
896 | RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, | 870 | RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, |
897 | "No Link\n"); | 871 | "No Link\n"); |
898 | } | 872 | } |
@@ -925,11 +899,11 @@ static void rtl8821ae_dm_dig(struct ieee80211_hw *hw) | |||
925 | } else { | 899 | } else { |
926 | if (dm_digtable->large_fa_hit < 3) { | 900 | if (dm_digtable->large_fa_hit < 3) { |
927 | if ((dm_digtable->forbidden_igi - 1) < | 901 | if ((dm_digtable->forbidden_igi - 1) < |
928 | dig_dynamic_min) { | 902 | dig_min_0) { |
929 | dm_digtable->forbidden_igi = | 903 | dm_digtable->forbidden_igi = |
930 | dig_dynamic_min; | 904 | dig_min_0; |
931 | dm_digtable->rx_gain_min = | 905 | dm_digtable->rx_gain_min = |
932 | dig_dynamic_min; | 906 | dig_min_0; |
933 | RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, | 907 | RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, |
934 | "Normal Case: At Lower Bound\n"); | 908 | "Normal Case: At Lower Bound\n"); |
935 | } else { | 909 | } else { |
@@ -1024,7 +998,7 @@ static void rtl8821ae_dm_dig(struct ieee80211_hw *hw) | |||
1024 | rtl8821ae_dm_write_dig(hw, current_igi); | 998 | rtl8821ae_dm_write_dig(hw, current_igi); |
1025 | dm_digtable->media_connect_0 = | 999 | dm_digtable->media_connect_0 = |
1026 | ((mac->link_state >= MAC80211_LINKED) ? true : false); | 1000 | ((mac->link_state >= MAC80211_LINKED) ? true : false); |
1027 | dm_digtable->dig_dynamic_min = dig_dynamic_min; | 1001 | dm_digtable->dig_min_0 = dig_min_0; |
1028 | } | 1002 | } |
1029 | 1003 | ||
1030 | static void rtl8821ae_dm_common_info_self_update(struct ieee80211_hw *hw) | 1004 | static void rtl8821ae_dm_common_info_self_update(struct ieee80211_hw *hw) |