1 // SPDX-License-Identifier: GPL-2.0
2 /******************************************************************************
4 * Copyright(c) 2007 - 2016 Realtek Corporation.
7 * wlanfae <wlanfae@realtek.com>
8 * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
11 * Larry Finger <Larry.Finger@lwfinger.net>
13 *****************************************************************************/
15 /* ************************************************************
17 * *************************************************************/
18 #include "mp_precomp.h"
19 #include "phydm_precomp.h"
21 void odm_edca_turbo_init(void *dm_void)
23 struct phy_dm_struct *dm = (struct phy_dm_struct *)dm_void;
25 dm->dm_edca_table.is_current_turbo_edca = false;
26 dm->dm_edca_table.is_cur_rdl_state = false;
28 ODM_RT_TRACE(dm, ODM_COMP_EDCA_TURBO, "Orginial VO PARAM: 0x%x\n",
29 odm_read_4byte(dm, ODM_EDCA_VO_PARAM));
30 ODM_RT_TRACE(dm, ODM_COMP_EDCA_TURBO, "Orginial VI PARAM: 0x%x\n",
31 odm_read_4byte(dm, ODM_EDCA_VI_PARAM));
32 ODM_RT_TRACE(dm, ODM_COMP_EDCA_TURBO, "Orginial BE PARAM: 0x%x\n",
33 odm_read_4byte(dm, ODM_EDCA_BE_PARAM));
34 ODM_RT_TRACE(dm, ODM_COMP_EDCA_TURBO, "Orginial BK PARAM: 0x%x\n",
35 odm_read_4byte(dm, ODM_EDCA_BK_PARAM));
37 } /* ODM_InitEdcaTurbo */
39 void odm_edca_turbo_check(void *dm_void)
41 /* For AP/ADSL use struct rtl8192cd_priv* */
42 /* For CE/NIC use struct void* */
44 /* 2011/09/29 MH In HW integration first stage, we provide 4 different
45 * handle to operate at the same time.
46 * In the stage2/3, we need to prive universal interface and merge all
47 * HW dynamic mechanism.
49 struct phy_dm_struct *dm = (struct phy_dm_struct *)dm_void;
51 ODM_RT_TRACE(dm, ODM_COMP_EDCA_TURBO,
52 "%s========================>\n", __func__);
54 if (!(dm->support_ability & ODM_MAC_EDCA_TURBO))
57 switch (dm->support_platform) {
63 odm_edca_turbo_check_ce(dm);
66 ODM_RT_TRACE(dm, ODM_COMP_EDCA_TURBO,
67 "<========================%s\n", __func__);
69 } /* odm_CheckEdcaTurbo */
71 void odm_edca_turbo_check_ce(void *dm_void)
73 struct phy_dm_struct *dm = (struct phy_dm_struct *)dm_void;
74 struct rtl_priv *rtlpriv = (struct rtl_priv *)dm->adapter;
77 u32 edca_be_ul = 0x5ea42b;
78 u32 edca_be_dl = 0x5ea42b;
79 u32 edca_be = 0x5ea42b;
81 bool edca_turbo_on = false;
87 rtlpriv->dm.is_any_nonbepkts = false;
91 if (rtlpriv->dm.dbginfo.num_non_be_pkt > 0x100)
92 rtlpriv->dm.is_any_nonbepkts = true;
93 rtlpriv->dm.dbginfo.num_non_be_pkt = 0;
95 cur_txok_cnt = rtlpriv->stats.txbytesunicast_inperiod;
96 cur_rxok_cnt = rtlpriv->stats.rxbytesunicast_inperiod;
98 /*b_bias_on_rx = false;*/
99 edca_turbo_on = ((!rtlpriv->dm.is_any_nonbepkts) &&
100 (!rtlpriv->dm.disable_framebursting)) ?
104 if (rtlpriv->mac80211.mode == WIRELESS_MODE_B)
109 (cur_rxok_cnt > cur_txok_cnt * 4) ? true : false;
111 edca_be = is_cur_rdlstate ? edca_be_dl : edca_be_ul;
112 rtl_write_dword(rtlpriv, REG_EDCA_BE_PARAM_8822B, edca_be);
113 rtlpriv->dm.is_cur_rdlstate = is_cur_rdlstate;
114 rtlpriv->dm.current_turbo_edca = true;
116 if (rtlpriv->dm.current_turbo_edca) {
119 rtlpriv->cfg->ops->set_hw_reg(rtlpriv->hw,
122 rtlpriv->dm.current_turbo_edca = false;
127 rtlpriv->dm.is_any_nonbepkts = false;