mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-19 07:57:20 +07:00
rtlwifi: Add rx ampdu cfg for btcoexist.
If RX ampdu is too long, BT will have less time. Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Cc: Yan-Hsuan Chuang <yhchuang@realtek.com> Cc: Birming Chiu <birming@realtek.com> Cc: Shaofu <shaofu@realtek.com> Cc: Steven Ting <steventing@realtek.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
54685f9c7a
commit
2635664e6e
@ -1582,6 +1582,7 @@ int rtl_rx_agg_start(struct ieee80211_hw *hw,
|
|||||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||||
struct rtl_tid_data *tid_data;
|
struct rtl_tid_data *tid_data;
|
||||||
struct rtl_sta_info *sta_entry = NULL;
|
struct rtl_sta_info *sta_entry = NULL;
|
||||||
|
u8 reject_agg;
|
||||||
|
|
||||||
if (sta == NULL)
|
if (sta == NULL)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -1589,6 +1590,14 @@ int rtl_rx_agg_start(struct ieee80211_hw *hw,
|
|||||||
if (unlikely(tid >= MAX_TID_COUNT))
|
if (unlikely(tid >= MAX_TID_COUNT))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (rtlpriv->cfg->ops->get_btc_status()) {
|
||||||
|
rtlpriv->btcoexist.btc_ops->btc_get_ampdu_cfg(rtlpriv,
|
||||||
|
&reject_agg,
|
||||||
|
NULL, NULL);
|
||||||
|
if (reject_agg)
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
sta_entry = (struct rtl_sta_info *)sta->drv_priv;
|
sta_entry = (struct rtl_sta_info *)sta->drv_priv;
|
||||||
if (!sta_entry)
|
if (!sta_entry)
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
@ -1643,6 +1652,24 @@ int rtl_tx_agg_oper(struct ieee80211_hw *hw,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rtl_rx_ampdu_apply(struct rtl_priv *rtlpriv)
|
||||||
|
{
|
||||||
|
struct rtl_btc_ops *btc_ops = rtlpriv->btcoexist.btc_ops;
|
||||||
|
u8 reject_agg, ctrl_agg_size = 0, agg_size;
|
||||||
|
|
||||||
|
if (rtlpriv->cfg->ops->get_btc_status())
|
||||||
|
btc_ops->btc_get_ampdu_cfg(rtlpriv, &reject_agg,
|
||||||
|
&ctrl_agg_size, &agg_size);
|
||||||
|
|
||||||
|
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_DMESG,
|
||||||
|
"Set RX AMPDU: coex - reject=%d, ctrl_agg_size=%d, size=%d",
|
||||||
|
reject_agg, ctrl_agg_size, agg_size);
|
||||||
|
|
||||||
|
rtlpriv->hw->max_rx_aggregation_subframes =
|
||||||
|
(ctrl_agg_size ? agg_size : IEEE80211_MAX_AMPDU_BUF);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(rtl_rx_ampdu_apply);
|
||||||
|
|
||||||
/*********************************************************
|
/*********************************************************
|
||||||
*
|
*
|
||||||
* wq & timer callback functions
|
* wq & timer callback functions
|
||||||
|
@ -147,6 +147,7 @@ int rtl_rx_agg_start(struct ieee80211_hw *hw,
|
|||||||
struct ieee80211_sta *sta, u16 tid);
|
struct ieee80211_sta *sta, u16 tid);
|
||||||
int rtl_rx_agg_stop(struct ieee80211_hw *hw,
|
int rtl_rx_agg_stop(struct ieee80211_hw *hw,
|
||||||
struct ieee80211_sta *sta, u16 tid);
|
struct ieee80211_sta *sta, u16 tid);
|
||||||
|
void rtl_rx_ampdu_apply(struct rtl_priv *rtlpriv);
|
||||||
void rtl_watchdog_wq_callback(void *data);
|
void rtl_watchdog_wq_callback(void *data);
|
||||||
void rtl_fwevt_wq_callback(void *data);
|
void rtl_fwevt_wq_callback(void *data);
|
||||||
void rtl_c2hcmd_wq_callback(void *data);
|
void rtl_c2hcmd_wq_callback(void *data);
|
||||||
|
@ -272,14 +272,24 @@ static void halbtc_disable_low_power(struct btc_coexist *btcoexist,
|
|||||||
static void halbtc_aggregation_check(struct btc_coexist *btcoexist)
|
static void halbtc_aggregation_check(struct btc_coexist *btcoexist)
|
||||||
{
|
{
|
||||||
bool need_to_act = false;
|
bool need_to_act = false;
|
||||||
|
static unsigned long pre_time;
|
||||||
|
unsigned long cur_time = 0;
|
||||||
|
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||||
|
|
||||||
/* To void continuous deleteBA=>addBA=>deleteBA=>addBA
|
/* To void continuous deleteBA=>addBA=>deleteBA=>addBA
|
||||||
* This function is not allowed to continuous called
|
* This function is not allowed to continuous called
|
||||||
* It can only be called after 8 seconds
|
* It can only be called after 8 seconds
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
cur_time = jiffies;
|
||||||
|
if (jiffies_to_msecs(cur_time - pre_time) <= 8000) {
|
||||||
|
/* over 8 seconds you can execute this function again. */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pre_time = cur_time;
|
||||||
|
|
||||||
if (btcoexist->bt_info.reject_agg_pkt) {
|
if (btcoexist->bt_info.reject_agg_pkt) {
|
||||||
;/* TODO: reject */
|
need_to_act = true;
|
||||||
btcoexist->bt_info.pre_reject_agg_pkt =
|
btcoexist->bt_info.pre_reject_agg_pkt =
|
||||||
btcoexist->bt_info.reject_agg_pkt;
|
btcoexist->bt_info.reject_agg_pkt;
|
||||||
} else {
|
} else {
|
||||||
@ -304,8 +314,10 @@ static void halbtc_aggregation_check(struct btc_coexist *btcoexist)
|
|||||||
btcoexist->bt_info.pre_agg_buf_size =
|
btcoexist->bt_info.pre_agg_buf_size =
|
||||||
btcoexist->bt_info.agg_buf_size;
|
btcoexist->bt_info.agg_buf_size;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
if (need_to_act)
|
||||||
|
rtl_rx_ampdu_apply(rtlpriv);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32 halbtc_get_bt_patch_version(struct btc_coexist *btcoexist)
|
static u32 halbtc_get_bt_patch_version(struct btc_coexist *btcoexist)
|
||||||
|
@ -46,6 +46,7 @@ static struct rtl_btc_ops rtl_btc_operation = {
|
|||||||
.btc_is_bt_disabled = rtl_btc_is_bt_disabled,
|
.btc_is_bt_disabled = rtl_btc_is_bt_disabled,
|
||||||
.btc_special_packet_notify = rtl_btc_special_packet_notify,
|
.btc_special_packet_notify = rtl_btc_special_packet_notify,
|
||||||
.btc_record_pwr_mode = rtl_btc_record_pwr_mode,
|
.btc_record_pwr_mode = rtl_btc_record_pwr_mode,
|
||||||
|
.btc_get_ampdu_cfg = rtl_btc_get_ampdu_cfg,
|
||||||
};
|
};
|
||||||
|
|
||||||
void rtl_btc_record_pwr_mode(struct rtl_priv *rtlpriv, u8 *buf, u8 len)
|
void rtl_btc_record_pwr_mode(struct rtl_priv *rtlpriv, u8 *buf, u8 len)
|
||||||
@ -60,6 +61,17 @@ void rtl_btc_record_pwr_mode(struct rtl_priv *rtlpriv, u8 *buf, u8 len)
|
|||||||
memcpy(gl_bt_coexist.pwr_mode_val, buf, safe_len);
|
memcpy(gl_bt_coexist.pwr_mode_val, buf, safe_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rtl_btc_get_ampdu_cfg(struct rtl_priv *rtlpriv, u8 *reject_agg,
|
||||||
|
u8 *ctrl_agg_size, u8 *agg_size)
|
||||||
|
{
|
||||||
|
if (reject_agg)
|
||||||
|
*reject_agg = gl_bt_coexist.bt_info.reject_agg_pkt;
|
||||||
|
if (ctrl_agg_size)
|
||||||
|
*ctrl_agg_size = gl_bt_coexist.bt_info.bt_ctrl_agg_buf_size;
|
||||||
|
if (agg_size)
|
||||||
|
*agg_size = gl_bt_coexist.bt_info.agg_buf_size;
|
||||||
|
}
|
||||||
|
|
||||||
void rtl_btc_init_variables(struct rtl_priv *rtlpriv)
|
void rtl_btc_init_variables(struct rtl_priv *rtlpriv)
|
||||||
{
|
{
|
||||||
exhalbtc_initlize_variables();
|
exhalbtc_initlize_variables();
|
||||||
|
@ -44,6 +44,8 @@ bool rtl_btc_is_disable_edca_turbo(struct rtl_priv *rtlpriv);
|
|||||||
bool rtl_btc_is_bt_disabled(struct rtl_priv *rtlpriv);
|
bool rtl_btc_is_bt_disabled(struct rtl_priv *rtlpriv);
|
||||||
void rtl_btc_special_packet_notify(struct rtl_priv *rtlpriv, u8 pkt_type);
|
void rtl_btc_special_packet_notify(struct rtl_priv *rtlpriv, u8 pkt_type);
|
||||||
void rtl_btc_record_pwr_mode(struct rtl_priv *rtlpriv, u8 *buf, u8 len);
|
void rtl_btc_record_pwr_mode(struct rtl_priv *rtlpriv, u8 *buf, u8 len);
|
||||||
|
void rtl_btc_get_ampdu_cfg(struct rtl_priv *rtlpriv, u8 *reject_agg,
|
||||||
|
u8 *ctrl_agg_size, u8 *agg_size);
|
||||||
|
|
||||||
struct rtl_btc_ops *rtl_btc_get_ops_pointer(void);
|
struct rtl_btc_ops *rtl_btc_get_ops_pointer(void);
|
||||||
|
|
||||||
|
@ -2561,6 +2561,8 @@ struct rtl_btc_ops {
|
|||||||
void (*btc_special_packet_notify)(struct rtl_priv *rtlpriv,
|
void (*btc_special_packet_notify)(struct rtl_priv *rtlpriv,
|
||||||
u8 pkt_type);
|
u8 pkt_type);
|
||||||
void (*btc_record_pwr_mode)(struct rtl_priv *rtlpriv, u8 *buf, u8 len);
|
void (*btc_record_pwr_mode)(struct rtl_priv *rtlpriv, u8 *buf, u8 len);
|
||||||
|
void (*btc_get_ampdu_cfg)(struct rtl_priv *rtlpriv, u8 *reject_agg,
|
||||||
|
u8 *ctrl_agg_size, u8 *agg_size);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct proxim {
|
struct proxim {
|
||||||
|
Loading…
Reference in New Issue
Block a user