diff options
author | Arik Nemtsov <arik@wizery.com> | 2015-03-23 08:32:53 -0400 |
---|---|---|
committer | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2015-04-02 02:26:46 -0400 |
commit | b6e160ab15c203fe77d13a121081b1a9bce7cbfe (patch) | |
tree | a8058247cf9a81c8aa2a07081ddf460683c36006 /drivers/net/wireless | |
parent | 484b3d13b4ac3d721f3479433ad82100e1277580 (diff) |
iwlwifi: mvm: always reconfigure last MCC on init
Currently the last found MCC is reconfigured only in the recovery flow.
But it should always be used when available, for the ifdown/up or
RF-Kill/CT-Kill scenarios.
While at it, fix a couple of bugs in the init-from-last-MCC flow. Return
an error value when a current MCC is not found. Pass on the regdomain to
cfg80211 only if it was changed and don't ignore the return value from
the cfg80211-setter function.
Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com>
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mac80211.c | 17 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/nvm.c | 9 |
2 files changed, 16 insertions, 10 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c index 07344e11ce0a..0dd999ceed36 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c | |||
@@ -379,11 +379,13 @@ int iwl_mvm_init_fw_regd(struct iwl_mvm *mvm) | |||
379 | { | 379 | { |
380 | enum iwl_mcc_source used_src; | 380 | enum iwl_mcc_source used_src; |
381 | struct ieee80211_regdomain *regd; | 381 | struct ieee80211_regdomain *regd; |
382 | int ret; | ||
383 | bool changed; | ||
382 | const struct ieee80211_regdomain *r = | 384 | const struct ieee80211_regdomain *r = |
383 | rtnl_dereference(mvm->hw->wiphy->regd); | 385 | rtnl_dereference(mvm->hw->wiphy->regd); |
384 | 386 | ||
385 | if (!r) | 387 | if (!r) |
386 | return 0; | 388 | return -ENOENT; |
387 | 389 | ||
388 | /* save the last source in case we overwrite it below */ | 390 | /* save the last source in case we overwrite it below */ |
389 | used_src = mvm->mcc_src; | 391 | used_src = mvm->mcc_src; |
@@ -395,14 +397,19 @@ int iwl_mvm_init_fw_regd(struct iwl_mvm *mvm) | |||
395 | } | 397 | } |
396 | 398 | ||
397 | /* Now set our last stored MCC and source */ | 399 | /* Now set our last stored MCC and source */ |
398 | regd = iwl_mvm_get_regdomain(mvm->hw->wiphy, r->alpha2, used_src, NULL); | 400 | regd = iwl_mvm_get_regdomain(mvm->hw->wiphy, r->alpha2, used_src, |
401 | &changed); | ||
399 | if (IS_ERR_OR_NULL(regd)) | 402 | if (IS_ERR_OR_NULL(regd)) |
400 | return -EIO; | 403 | return -EIO; |
401 | 404 | ||
402 | regulatory_set_wiphy_regd(mvm->hw->wiphy, regd); | 405 | /* update cfg80211 if the regdomain was changed */ |
403 | kfree(regd); | 406 | if (changed) |
407 | ret = regulatory_set_wiphy_regd_sync_rtnl(mvm->hw->wiphy, regd); | ||
408 | else | ||
409 | ret = 0; | ||
404 | 410 | ||
405 | return 0; | 411 | kfree(regd); |
412 | return ret; | ||
406 | } | 413 | } |
407 | 414 | ||
408 | int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm) | 415 | int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm) |
diff --git a/drivers/net/wireless/iwlwifi/mvm/nvm.c b/drivers/net/wireless/iwlwifi/mvm/nvm.c index 524ade241418..87b2a30a2308 100644 --- a/drivers/net/wireless/iwlwifi/mvm/nvm.c +++ b/drivers/net/wireless/iwlwifi/mvm/nvm.c | |||
@@ -806,13 +806,12 @@ int iwl_mvm_init_mcc(struct iwl_mvm *mvm) | |||
806 | return 0; | 806 | return 0; |
807 | 807 | ||
808 | /* | 808 | /* |
809 | * During HW restart, only replay the last set MCC to FW. Otherwise, | 809 | * try to replay the last set MCC to FW. If it doesn't exist, |
810 | * queue an update to cfg80211 to retrieve the default alpha2 from FW. | 810 | * queue an update to cfg80211 to retrieve the default alpha2 from FW. |
811 | */ | 811 | */ |
812 | if (test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status)) { | 812 | retval = iwl_mvm_init_fw_regd(mvm); |
813 | /* This should only be called during vif up and hold RTNL */ | 813 | if (retval != -ENOENT) |
814 | return iwl_mvm_init_fw_regd(mvm); | 814 | return retval; |
815 | } | ||
816 | 815 | ||
817 | /* | 816 | /* |
818 | * Driver regulatory hint for initial update, this also informs the | 817 | * Driver regulatory hint for initial update, this also informs the |