OSDN Git Service

iwlwifi: mvm: fix the coex firmware API
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Sun, 23 Jul 2017 09:53:46 +0000 (12:53 +0300)
committerLuca Coelho <luciano.coelho@intel.com>
Wed, 9 Aug 2017 18:14:44 +0000 (21:14 +0300)
The firmware API defined in the header files didn't match
the structure that are actually passed by the firmware.
The impact could be a decision for MIMO in Tx or Rx in
coex scenarios.

Fixes: 430a3bbafdc7 ("iwlwifi: mvm: BT Coex - new API")
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/fw/api/coex.h
drivers/net/wireless/intel/iwlwifi/mvm/coex.c
drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c

index 583f418..df4ecec 100644 (file)
@@ -220,12 +220,6 @@ enum iwl_bt_ci_compliance {
        BT_CI_COMPLIANCE_BOTH           = 3,
 }; /* 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
  * @mbox_msg: message from BT to WiFi
@@ -234,7 +228,8 @@ enum iwl_bt_ci_compliance {
  * @primary_ch_lut: LUT used for primary channel &enum iwl_bt_coex_lut_type
  * @secondary_ch_lut: LUT used for secondary channel &enum iwl_bt_coex_lut_type
  * @bt_activity_grading: the activity of BT &enum iwl_bt_activity_grading
- * @ttc_rrc_status: is TTC or RRC enabled - one bit per PHY
+ * @ttc_status: is TTC enabled - one bit per PHY
+ * @rrc_status: is RRC enabled - one bit per PHY
  * @reserved: reserved
  */
 struct iwl_bt_coex_profile_notif {
@@ -245,8 +240,9 @@ struct iwl_bt_coex_profile_notif {
        __le32 primary_ch_lut;
        __le32 secondary_ch_lut;
        __le32 bt_activity_grading;
-       u8 ttc_rrc_status;
-       u8 reserved[3];
+       u8 ttc_status;
+       u8 rrc_status;
+       __le16 reserved;
 } __packed; /* BT_COEX_PROFILE_NTFY_API_S_VER_4 */
 
 #endif /* __iwl_fw_api_coex_h__ */
index 6c5c651..0b44861 100644 (file)
@@ -560,8 +560,7 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
                smps_mode = IEEE80211_SMPS_AUTOMATIC;
 
        if (mvmvif->phy_ctxt &&
-           IWL_COEX_IS_RRC_ON(mvm->last_bt_notif.ttc_rrc_status,
-                              mvmvif->phy_ctxt->id))
+           (mvm->last_bt_notif.rrc_status & BIT(mvmvif->phy_ctxt->id)))
                smps_mode = IEEE80211_SMPS_AUTOMATIC;
 
        IWL_DEBUG_COEX(data->mvm,
@@ -792,7 +791,7 @@ u16 iwl_mvm_coex_agg_time_limit(struct iwl_mvm *mvm,
        struct iwl_mvm_phy_ctxt *phy_ctxt = mvmvif->phy_ctxt;
        enum iwl_bt_coex_lut_type lut_type;
 
-       if (IWL_COEX_IS_TTC_ON(mvm->last_bt_notif.ttc_rrc_status, phy_ctxt->id))
+       if (mvm->last_bt_notif.ttc_status & BIT(phy_ctxt->id))
                return LINK_QUAL_AGG_TIME_LIMIT_DEF;
 
        if (le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) <
@@ -816,7 +815,7 @@ bool iwl_mvm_bt_coex_is_mimo_allowed(struct iwl_mvm *mvm,
        struct iwl_mvm_phy_ctxt *phy_ctxt = mvmvif->phy_ctxt;
        enum iwl_bt_coex_lut_type lut_type;
 
-       if (IWL_COEX_IS_TTC_ON(mvm->last_bt_notif.ttc_rrc_status, phy_ctxt->id))
+       if (mvm->last_bt_notif.ttc_status & BIT(phy_ctxt->id))
                return true;
 
        if (le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) <
index ceb4866..ba2745a 100644 (file)
@@ -569,9 +569,9 @@ static ssize_t iwl_dbgfs_bt_notif_read(struct file *file, char __user *user_buf,
                         "antenna isolation = %d CORUN LUT index = %d\n",
                         mvm->last_ant_isol, mvm->last_corun_lut);
        pos += scnprintf(buf + pos, bufsz - pos, "bt_rrc = %d\n",
-                        (notif->ttc_rrc_status >> 4) & 0xF);
+                        notif->rrc_status & 0xF);
        pos += scnprintf(buf + pos, bufsz - pos, "bt_ttc = %d\n",
-                        notif->ttc_rrc_status & 0xF);
+                        notif->ttc_status & 0xF);
 
        pos += scnprintf(buf + pos, bufsz - pos, "sync_sco = %d\n",
                         IWL_MVM_BT_COEX_SYNC2SCO);