mirror of https://gitee.com/openkylin/linux.git
iwlwifi: mvm: BT Coex - relax constraints when TTC / RRC is active
When TxTxCo-Running is active, we can relax the constraints on the rate control. When RxRxCo-Running is active, we can relax the constrains on SMPS. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
This commit is contained in:
parent
160be5719b
commit
4c86f938d3
|
@ -787,6 +787,10 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
|
||||||
if (!vif->bss_conf.assoc)
|
if (!vif->bss_conf.assoc)
|
||||||
smps_mode = IEEE80211_SMPS_AUTOMATIC;
|
smps_mode = IEEE80211_SMPS_AUTOMATIC;
|
||||||
|
|
||||||
|
if (IWL_COEX_IS_RRC_ON(mvm->last_bt_notif.ttc_rrc_status,
|
||||||
|
mvmvif->phy_ctxt->id))
|
||||||
|
smps_mode = IEEE80211_SMPS_AUTOMATIC;
|
||||||
|
|
||||||
IWL_DEBUG_COEX(data->mvm,
|
IWL_DEBUG_COEX(data->mvm,
|
||||||
"mac %d: bt_activity_grading %d smps_req %d\n",
|
"mac %d: bt_activity_grading %d smps_req %d\n",
|
||||||
mvmvif->id, bt_activity_grading, smps_mode);
|
mvmvif->id, bt_activity_grading, smps_mode);
|
||||||
|
@ -1114,19 +1118,19 @@ u16 iwl_mvm_coex_agg_time_limit(struct iwl_mvm *mvm,
|
||||||
struct ieee80211_sta *sta)
|
struct ieee80211_sta *sta)
|
||||||
{
|
{
|
||||||
struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
|
struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
|
||||||
|
struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(mvmsta->vif);
|
||||||
|
struct iwl_mvm_phy_ctxt *phy_ctxt = mvmvif->phy_ctxt;
|
||||||
enum iwl_bt_coex_lut_type lut_type;
|
enum iwl_bt_coex_lut_type lut_type;
|
||||||
|
|
||||||
if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT))
|
if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT))
|
||||||
return iwl_mvm_coex_agg_time_limit_old(mvm, sta);
|
return iwl_mvm_coex_agg_time_limit_old(mvm, sta);
|
||||||
|
|
||||||
|
if (IWL_COEX_IS_TTC_ON(mvm->last_bt_notif.ttc_rrc_status, phy_ctxt->id))
|
||||||
|
return LINK_QUAL_AGG_TIME_LIMIT_DEF;
|
||||||
|
|
||||||
if (le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) <
|
if (le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) <
|
||||||
BT_HIGH_TRAFFIC)
|
BT_HIGH_TRAFFIC)
|
||||||
return LINK_QUAL_AGG_TIME_LIMIT_DEF;
|
return LINK_QUAL_AGG_TIME_LIMIT_DEF;
|
||||||
/*
|
|
||||||
TODO
|
|
||||||
if (mvm->last_bt_notif.ttc_enabled)
|
|
||||||
return LINK_QUAL_AGG_TIME_LIMIT_DEF;
|
|
||||||
*/
|
|
||||||
|
|
||||||
lut_type = iwl_get_coex_type(mvm, mvmsta->vif);
|
lut_type = iwl_get_coex_type(mvm, mvmsta->vif);
|
||||||
|
|
||||||
|
@ -1141,16 +1145,15 @@ bool iwl_mvm_bt_coex_is_mimo_allowed(struct iwl_mvm *mvm,
|
||||||
struct ieee80211_sta *sta)
|
struct ieee80211_sta *sta)
|
||||||
{
|
{
|
||||||
struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
|
struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
|
||||||
|
struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(mvmsta->vif);
|
||||||
|
struct iwl_mvm_phy_ctxt *phy_ctxt = mvmvif->phy_ctxt;
|
||||||
enum iwl_bt_coex_lut_type lut_type;
|
enum iwl_bt_coex_lut_type lut_type;
|
||||||
|
|
||||||
if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT))
|
if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT))
|
||||||
return iwl_mvm_coex_agg_time_limit_old(mvm, sta);
|
return iwl_mvm_coex_agg_time_limit_old(mvm, sta);
|
||||||
|
|
||||||
/*
|
if (IWL_COEX_IS_TTC_ON(mvm->last_bt_notif.ttc_rrc_status, phy_ctxt->id))
|
||||||
TODO
|
|
||||||
if (mvm->last_bt_notif.ttc_enabled)
|
|
||||||
return true;
|
return true;
|
||||||
*/
|
|
||||||
|
|
||||||
if (le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) <
|
if (le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) <
|
||||||
BT_HIGH_TRAFFIC)
|
BT_HIGH_TRAFFIC)
|
||||||
|
|
|
@ -394,6 +394,12 @@ enum iwl_bt_ci_compliance {
|
||||||
BT_CI_COMPLIANCE_BOTH = 3,
|
BT_CI_COMPLIANCE_BOTH = 3,
|
||||||
}; /* BT_COEX_CI_COMPLIENCE_E_VER_1 */
|
}; /* BT_COEX_CI_COMPLIENCE_E_VER_1 */
|
||||||
|
|
||||||
|
#define IWL_COEX_IS_TTC_ON(_ttc_rrc_status, _phy_id) \
|
||||||
|
(_ttc_rrc_status & BIT(_phy_id))
|
||||||
|
|
||||||
|
#define IWL_COEX_IS_RRC_ON(_ttc_rrc_status, _phy_id) \
|
||||||
|
((_ttc_rrc_status >> 4) & BIT(_phy_id))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct iwl_bt_coex_profile_notif - notification about BT coex
|
* struct iwl_bt_coex_profile_notif - notification about BT coex
|
||||||
* @mbox_msg: message from BT to WiFi
|
* @mbox_msg: message from BT to WiFi
|
||||||
|
|
Loading…
Reference in New Issue