Skip to content

Commit

Permalink
iwlwifi: mvm: always reconfigure last MCC on init
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Arik Nemtsov authored and Emmanuel Grumbach committed Apr 2, 2015
1 parent 484b3d1 commit b6e160a
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 10 deletions.
17 changes: 12 additions & 5 deletions drivers/net/wireless/iwlwifi/mvm/mac80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -379,11 +379,13 @@ int iwl_mvm_init_fw_regd(struct iwl_mvm *mvm)
{
enum iwl_mcc_source used_src;
struct ieee80211_regdomain *regd;
int ret;
bool changed;
const struct ieee80211_regdomain *r =
rtnl_dereference(mvm->hw->wiphy->regd);

if (!r)
return 0;
return -ENOENT;

/* save the last source in case we overwrite it below */
used_src = mvm->mcc_src;
Expand All @@ -395,14 +397,19 @@ int iwl_mvm_init_fw_regd(struct iwl_mvm *mvm)
}

/* Now set our last stored MCC and source */
regd = iwl_mvm_get_regdomain(mvm->hw->wiphy, r->alpha2, used_src, NULL);
regd = iwl_mvm_get_regdomain(mvm->hw->wiphy, r->alpha2, used_src,
&changed);
if (IS_ERR_OR_NULL(regd))
return -EIO;

regulatory_set_wiphy_regd(mvm->hw->wiphy, regd);
kfree(regd);
/* update cfg80211 if the regdomain was changed */
if (changed)
ret = regulatory_set_wiphy_regd_sync_rtnl(mvm->hw->wiphy, regd);
else
ret = 0;

return 0;
kfree(regd);
return ret;
}

int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
Expand Down
9 changes: 4 additions & 5 deletions drivers/net/wireless/iwlwifi/mvm/nvm.c
Original file line number Diff line number Diff line change
Expand Up @@ -806,13 +806,12 @@ int iwl_mvm_init_mcc(struct iwl_mvm *mvm)
return 0;

/*
* During HW restart, only replay the last set MCC to FW. Otherwise,
* try to replay the last set MCC to FW. If it doesn't exist,
* queue an update to cfg80211 to retrieve the default alpha2 from FW.
*/
if (test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status)) {
/* This should only be called during vif up and hold RTNL */
return iwl_mvm_init_fw_regd(mvm);
}
retval = iwl_mvm_init_fw_regd(mvm);
if (retval != -ENOENT)
return retval;

/*
* Driver regulatory hint for initial update, this also informs the
Expand Down

0 comments on commit b6e160a

Please sign in to comment.