diff options
author | Andrei Otcheretianski <andrei.otcheretianski@intel.com> | 2014-07-09 11:59:14 -0400 |
---|---|---|
committer | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2014-09-16 05:57:50 -0400 |
commit | 73897bd1d949d34b7a38a2cd14302d91f68ef12d (patch) | |
tree | b8de5f4de5ebd3f94069e39234bc60d9420f80b6 | |
parent | 226bcd48eac7cfc22844a84897d62c24603395c6 (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.h | 6 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mac80211.c | 9 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/scan.c | 15 |
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 | */ |
153 | enum iwl_ucode_tlv_capa { | 157 | enum 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 | */ |
674 | enum iwl_mvm_lmac_scan_flags { | 676 | enum 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 | ||
683 | enum iwl_scan_priority { | 686 | enum 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 | ||
342 | static 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 | |||
342 | int iwl_mvm_scan_request(struct iwl_mvm *mvm, | 349 | int 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 | ||
1158 | int iwl_mvm_unified_scan_lmac(struct iwl_mvm *mvm, | 1169 | int 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 | |