aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrei Otcheretianski <andrei.otcheretianski@intel.com>2014-07-09 11:59:14 -0400
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-09-16 05:57:50 -0400
commit73897bd1d949d34b7a38a2cd14302d91f68ef12d (patch)
treeb8de5f4de5ebd3f94069e39234bc60d9420f80b6
parent226bcd48eac7cfc22844a84897d62c24603395c6 (diff)
iwlwifi: mvm: Set RRM_ENABLED bit in scan commands
Set RRM_ENABLED (bit 6) flag in scan commands. When this flag is set the fw will add WFA vendor-specific TPC report and DS parameter set IEs into probe requests. This bit is set for SCAN_OFFLOAD_REQUEST_CMD(0x51). Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com> Reviewed-by: Assaf Krauss <assaf.krauss@intel.com> Reviewed-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-fw.h6
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h3
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c9
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/scan.c15
4 files changed, 31 insertions, 2 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-fw.h b/drivers/net/wireless/iwlwifi/iwl-fw.h
index 081a93dd722f..e33754682e60 100644
--- a/drivers/net/wireless/iwlwifi/iwl-fw.h
+++ b/drivers/net/wireless/iwlwifi/iwl-fw.h
@@ -148,11 +148,17 @@ enum iwl_ucode_tlv_api {
148 * @IWL_UCODE_TLV_CAPA_TXPOWER_INSERTION_SUPPORT: supports insertion of current 148 * @IWL_UCODE_TLV_CAPA_TXPOWER_INSERTION_SUPPORT: supports insertion of current
149 * tx power value into TPC Report action frame and Link Measurement Report 149 * tx power value into TPC Report action frame and Link Measurement Report
150 * action frame 150 * action frame
151 * @IWL_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT: supports adding DS params
152 * element in probe requests.
153 * @IWL_UCODE_TLV_CAPA_WFA_TPC_REP_IE_SUPPORT: supports adding TPC Report IE in
154 * probe requests.
151 * @IWL_UCODE_TLV_CAPA_QUIET_PERIOD_SUPPORT: supports Quiet Period requests 155 * @IWL_UCODE_TLV_CAPA_QUIET_PERIOD_SUPPORT: supports Quiet Period requests
152 */ 156 */
153enum iwl_ucode_tlv_capa { 157enum iwl_ucode_tlv_capa {
154 IWL_UCODE_TLV_CAPA_D0I3_SUPPORT = BIT(0), 158 IWL_UCODE_TLV_CAPA_D0I3_SUPPORT = BIT(0),
155 IWL_UCODE_TLV_CAPA_TXPOWER_INSERTION_SUPPORT = BIT(8), 159 IWL_UCODE_TLV_CAPA_TXPOWER_INSERTION_SUPPORT = BIT(8),
160 IWL_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT = BIT(9),
161 IWL_UCODE_TLV_CAPA_WFA_TPC_REP_IE_SUPPORT = BIT(10),
156 IWL_UCODE_TLV_CAPA_QUIET_PERIOD_SUPPORT = BIT(11), 162 IWL_UCODE_TLV_CAPA_QUIET_PERIOD_SUPPORT = BIT(11),
157}; 163};
158 164
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h b/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h
index 8f2216694004..1354c68f6468 100644
--- a/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h
+++ b/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h
@@ -670,6 +670,8 @@ struct iwl_scan_channel_opt {
670 * @IWL_MVM_LMAC_SCAN_FLAG_ITER_COMPLETE: send iteration complete notification 670 * @IWL_MVM_LMAC_SCAN_FLAG_ITER_COMPLETE: send iteration complete notification
671 * @IWL_MVM_LMAC_SCAN_FLAG_MULTIPLE_SSIDS multiple SSID matching 671 * @IWL_MVM_LMAC_SCAN_FLAG_MULTIPLE_SSIDS multiple SSID matching
672 * @IWL_MVM_LMAC_SCAN_FLAG_FRAGMENTED: all passive scans will be fragmented 672 * @IWL_MVM_LMAC_SCAN_FLAG_FRAGMENTED: all passive scans will be fragmented
673 * @IWL_MVM_LMAC_SCAN_FLAGS_RRM_ENABLED: insert WFA vendor-specific TPC report
674 * and DS parameter set IEs into probe requests.
673 */ 675 */
674enum iwl_mvm_lmac_scan_flags { 676enum iwl_mvm_lmac_scan_flags {
675 IWL_MVM_LMAC_SCAN_FLAG_PASS_ALL = BIT(0), 677 IWL_MVM_LMAC_SCAN_FLAG_PASS_ALL = BIT(0),
@@ -678,6 +680,7 @@ enum iwl_mvm_lmac_scan_flags {
678 IWL_MVM_LMAC_SCAN_FLAG_ITER_COMPLETE = BIT(3), 680 IWL_MVM_LMAC_SCAN_FLAG_ITER_COMPLETE = BIT(3),
679 IWL_MVM_LMAC_SCAN_FLAG_MULTIPLE_SSIDS = BIT(4), 681 IWL_MVM_LMAC_SCAN_FLAG_MULTIPLE_SSIDS = BIT(4),
680 IWL_MVM_LMAC_SCAN_FLAG_FRAGMENTED = BIT(5), 682 IWL_MVM_LMAC_SCAN_FLAG_FRAGMENTED = BIT(5),
683 IWL_MVM_LMAC_SCAN_FLAGS_RRM_ENABLED = BIT(6),
681}; 684};
682 685
683enum iwl_scan_priority { 686enum iwl_scan_priority {
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
index 5a169aba7339..bd12f8e6840c 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -419,6 +419,15 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
419 IWL_UCODE_TLV_CAPA_QUIET_PERIOD_SUPPORT) 419 IWL_UCODE_TLV_CAPA_QUIET_PERIOD_SUPPORT)
420 hw->wiphy->features |= NL80211_FEATURE_QUIET; 420 hw->wiphy->features |= NL80211_FEATURE_QUIET;
421 421
422 if (mvm->fw->ucode_capa.capa[0] &
423 IWL_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT)
424 hw->wiphy->features |=
425 NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES;
426
427 if (mvm->fw->ucode_capa.capa[0] &
428 IWL_UCODE_TLV_CAPA_WFA_TPC_REP_IE_SUPPORT)
429 hw->wiphy->features |= NL80211_FEATURE_WFA_TPC_IE_IN_PROBES;
430
422 mvm->rts_threshold = IEEE80211_MAX_RTS_THRESHOLD; 431 mvm->rts_threshold = IEEE80211_MAX_RTS_THRESHOLD;
423 432
424 /* currently FW API supports only one optional cipher scheme */ 433 /* currently FW API supports only one optional cipher scheme */
diff --git a/drivers/net/wireless/iwlwifi/mvm/scan.c b/drivers/net/wireless/iwlwifi/mvm/scan.c
index 09545f23b24f..076fe1b6da28 100644
--- a/drivers/net/wireless/iwlwifi/mvm/scan.c
+++ b/drivers/net/wireless/iwlwifi/mvm/scan.c
@@ -339,6 +339,13 @@ not_bound:
339 } 339 }
340} 340}
341 341
342static inline bool iwl_mvm_rrm_scan_needed(struct iwl_mvm *mvm)
343{
344 /* require rrm scan whenever the fw supports it */
345 return mvm->fw->ucode_capa.capa[0] &
346 IWL_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT;
347}
348
342int iwl_mvm_scan_request(struct iwl_mvm *mvm, 349int iwl_mvm_scan_request(struct iwl_mvm *mvm,
343 struct ieee80211_vif *vif, 350 struct ieee80211_vif *vif,
344 struct cfg80211_scan_request *req) 351 struct cfg80211_scan_request *req)
@@ -1153,6 +1160,10 @@ iwl_mvm_build_generic_unified_scan_cmd(struct iwl_mvm *mvm,
1153 IWL_SCAN_CHANNEL_FLAG_EBS_ACCURATE | 1160 IWL_SCAN_CHANNEL_FLAG_EBS_ACCURATE |
1154 IWL_SCAN_CHANNEL_FLAG_CACHE_ADD); 1161 IWL_SCAN_CHANNEL_FLAG_CACHE_ADD);
1155 } 1162 }
1163
1164 if (iwl_mvm_rrm_scan_needed(mvm))
1165 cmd->scan_flags |=
1166 cpu_to_le32(IWL_MVM_LMAC_SCAN_FLAGS_RRM_ENABLED);
1156} 1167}
1157 1168
1158int iwl_mvm_unified_scan_lmac(struct iwl_mvm *mvm, 1169int iwl_mvm_unified_scan_lmac(struct iwl_mvm *mvm,
@@ -1208,7 +1219,7 @@ int iwl_mvm_unified_scan_lmac(struct iwl_mvm *mvm,
1208 if (req->req.n_ssids == 0) 1219 if (req->req.n_ssids == 0)
1209 flags |= IWL_MVM_LMAC_SCAN_FLAG_PASSIVE; 1220 flags |= IWL_MVM_LMAC_SCAN_FLAG_PASSIVE;
1210 1221
1211 cmd->scan_flags = cpu_to_le32(flags); 1222 cmd->scan_flags |= cpu_to_le32(flags);
1212 1223
1213 cmd->flags = iwl_mvm_scan_rxon_flags(req->req.channels[0]->band); 1224 cmd->flags = iwl_mvm_scan_rxon_flags(req->req.channels[0]->band);
1214 cmd->filter_flags = cpu_to_le32(MAC_FILTER_ACCEPT_GRP | 1225 cmd->filter_flags = cpu_to_le32(MAC_FILTER_ACCEPT_GRP |
@@ -1305,7 +1316,7 @@ int iwl_mvm_unified_sched_scan_lmac(struct iwl_mvm *mvm,
1305 if (req->n_ssids == 0) 1316 if (req->n_ssids == 0)
1306 flags |= IWL_MVM_LMAC_SCAN_FLAG_PASSIVE; 1317 flags |= IWL_MVM_LMAC_SCAN_FLAG_PASSIVE;
1307 1318
1308 cmd->scan_flags = cpu_to_le32(flags); 1319 cmd->scan_flags |= cpu_to_le32(flags);
1309 1320
1310 cmd->flags = iwl_mvm_scan_rxon_flags(req->channels[0]->band); 1321 cmd->flags = iwl_mvm_scan_rxon_flags(req->channels[0]->band);
1311 cmd->filter_flags = cpu_to_le32(MAC_FILTER_ACCEPT_GRP | 1322 cmd->filter_flags = cpu_to_le32(MAC_FILTER_ACCEPT_GRP |