aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-11-03 04:43:15 -0500
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-11-23 13:05:06 -0500
commit123f515635b12f100ba550b668203159dfb83c82 (patch)
tree5832c28f0376de43fa33a78e6150c51387e847cd
parentd24962214dd5930aa713213654721fe1fd7ed844 (diff)
iwlwifi: mvm: BT Coex - add support for TTC / RRC
The TTC and RRC features are supported by the newer firmwares. It allows to reach better overall WiFi and BT performance. When the RRC is enabled, we don't need to force the AP to send SISO frames, but it can keeps sending MIMO frames. Reviewed-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/coex_legacy.c13
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/constants.h2
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/fw-api-coex.h9
3 files changed, 22 insertions, 2 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/coex_legacy.c b/drivers/net/wireless/iwlwifi/mvm/coex_legacy.c
index cda5111bb775..b3210cfbecc8 100644
--- a/drivers/net/wireless/iwlwifi/mvm/coex_legacy.c
+++ b/drivers/net/wireless/iwlwifi/mvm/coex_legacy.c
@@ -612,7 +612,9 @@ int iwl_send_bt_init_conf_old(struct iwl_mvm *mvm)
612 BT_VALID_ANT_ISOLATION_THRS | 612 BT_VALID_ANT_ISOLATION_THRS |
613 BT_VALID_TXTX_DELTA_FREQ_THRS | 613 BT_VALID_TXTX_DELTA_FREQ_THRS |
614 BT_VALID_TXRX_MAX_FREQ_0 | 614 BT_VALID_TXRX_MAX_FREQ_0 |
615 BT_VALID_SYNC_TO_SCO); 615 BT_VALID_SYNC_TO_SCO |
616 BT_VALID_TTC |
617 BT_VALID_RRC);
616 618
617 if (IWL_MVM_BT_COEX_SYNC2SCO) 619 if (IWL_MVM_BT_COEX_SYNC2SCO)
618 bt_cmd->flags |= cpu_to_le32(BT_COEX_SYNC2SCO); 620 bt_cmd->flags |= cpu_to_le32(BT_COEX_SYNC2SCO);
@@ -628,6 +630,12 @@ int iwl_send_bt_init_conf_old(struct iwl_mvm *mvm)
628 bt_cmd->valid_bit_msk |= cpu_to_le32(BT_VALID_MULTI_PRIO_LUT); 630 bt_cmd->valid_bit_msk |= cpu_to_le32(BT_VALID_MULTI_PRIO_LUT);
629 } 631 }
630 632
633 if (IWL_MVM_BT_COEX_TTC)
634 bt_cmd->flags |= cpu_to_le32(BT_COEX_TTC);
635
636 if (IWL_MVM_BT_COEX_RRC)
637 bt_cmd->flags |= cpu_to_le32(BT_COEX_RRC);
638
631 if (mvm->cfg->bt_shared_single_ant) 639 if (mvm->cfg->bt_shared_single_ant)
632 memcpy(&bt_cmd->decision_lut, iwl_single_shared_ant, 640 memcpy(&bt_cmd->decision_lut, iwl_single_shared_ant,
633 sizeof(iwl_single_shared_ant)); 641 sizeof(iwl_single_shared_ant));
@@ -824,6 +832,9 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
824 if (!vif->bss_conf.assoc) 832 if (!vif->bss_conf.assoc)
825 smps_mode = IEEE80211_SMPS_AUTOMATIC; 833 smps_mode = IEEE80211_SMPS_AUTOMATIC;
826 834
835 if (data->notif->rrc_enabled & BIT(mvmvif->phy_ctxt->id))
836 smps_mode = IEEE80211_SMPS_AUTOMATIC;
837
827 IWL_DEBUG_COEX(data->mvm, 838 IWL_DEBUG_COEX(data->mvm,
828 "mac %d: bt_status %d bt_activity_grading %d smps_req %d\n", 839 "mac %d: bt_status %d bt_activity_grading %d smps_req %d\n",
829 mvmvif->id, data->notif->bt_status, bt_activity_grading, 840 mvmvif->id, data->notif->bt_status, bt_activity_grading,
diff --git a/drivers/net/wireless/iwlwifi/mvm/constants.h b/drivers/net/wireless/iwlwifi/mvm/constants.h
index 5c1ea80d5e3b..17160313b3a9 100644
--- a/drivers/net/wireless/iwlwifi/mvm/constants.h
+++ b/drivers/net/wireless/iwlwifi/mvm/constants.h
@@ -92,6 +92,8 @@
92#define IWL_MVM_BT_COEX_SYNC2SCO 1 92#define IWL_MVM_BT_COEX_SYNC2SCO 1
93#define IWL_MVM_BT_COEX_CORUNNING 0 93#define IWL_MVM_BT_COEX_CORUNNING 0
94#define IWL_MVM_BT_COEX_MPLUT 1 94#define IWL_MVM_BT_COEX_MPLUT 1
95#define IWL_MVM_BT_COEX_RRC 1
96#define IWL_MVM_BT_COEX_TTC 1
95#define IWL_MVM_BT_COEX_MPLUT_REG0 0x2e402280 97#define IWL_MVM_BT_COEX_MPLUT_REG0 0x2e402280
96#define IWL_MVM_BT_COEX_MPLUT_REG1 0x7711a751 98#define IWL_MVM_BT_COEX_MPLUT_REG1 0x7711a751
97#define IWL_MVM_BT_COEX_ANTENNA_COUPLING_THRS 30 99#define IWL_MVM_BT_COEX_ANTENNA_COUPLING_THRS 30
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api-coex.h b/drivers/net/wireless/iwlwifi/mvm/fw-api-coex.h
index 816883f9ff94..f3b11897991e 100644
--- a/drivers/net/wireless/iwlwifi/mvm/fw-api-coex.h
+++ b/drivers/net/wireless/iwlwifi/mvm/fw-api-coex.h
@@ -84,6 +84,8 @@
84 * @BT_COEX_SYNC2SCO: 84 * @BT_COEX_SYNC2SCO:
85 * @BT_COEX_CORUNNING: 85 * @BT_COEX_CORUNNING:
86 * @BT_COEX_MPLUT: 86 * @BT_COEX_MPLUT:
87 * @BT_COEX_TTC:
88 * @BT_COEX_RRC:
87 * 89 *
88 * The COEX_MODE must be set for each command. Even if it is not changed. 90 * The COEX_MODE must be set for each command. Even if it is not changed.
89 */ 91 */
@@ -100,6 +102,8 @@ enum iwl_bt_coex_flags {
100 BT_COEX_SYNC2SCO = BIT(7), 102 BT_COEX_SYNC2SCO = BIT(7),
101 BT_COEX_CORUNNING = BIT(8), 103 BT_COEX_CORUNNING = BIT(8),
102 BT_COEX_MPLUT = BIT(9), 104 BT_COEX_MPLUT = BIT(9),
105 BT_COEX_TTC = BIT(20),
106 BT_COEX_RRC = BIT(21),
103}; 107};
104 108
105/* 109/*
@@ -127,6 +131,8 @@ enum iwl_bt_coex_valid_bit_msk {
127 BT_VALID_TXTX_DELTA_FREQ_THRS = BIT(16), 131 BT_VALID_TXTX_DELTA_FREQ_THRS = BIT(16),
128 BT_VALID_TXRX_MAX_FREQ_0 = BIT(17), 132 BT_VALID_TXRX_MAX_FREQ_0 = BIT(17),
129 BT_VALID_SYNC_TO_SCO = BIT(18), 133 BT_VALID_SYNC_TO_SCO = BIT(18),
134 BT_VALID_TTC = BIT(20),
135 BT_VALID_RRC = BIT(21),
130}; 136};
131 137
132/** 138/**
@@ -506,7 +512,8 @@ struct iwl_bt_coex_profile_notif_old {
506 u8 bt_agg_traffic_load; 512 u8 bt_agg_traffic_load;
507 u8 bt_ci_compliance; 513 u8 bt_ci_compliance;
508 u8 ttc_enabled; 514 u8 ttc_enabled;
509 __le16 reserved; 515 u8 rrc_enabled;
516 u8 reserved;
510 517
511 __le32 primary_ch_lut; 518 __le32 primary_ch_lut;
512 __le32 secondary_ch_lut; 519 __le32 secondary_ch_lut;