diff options
author | Ilan Peer <ilan.peer@intel.com> | 2013-04-28 10:55:08 +0200 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-05-13 18:15:18 +0200 |
commit | 53a9d61eb74e574aec2db86f63d9809b6116d164 (patch) | |
tree | 2249b1a5324163a62e82568c5df1805fef7745cf /drivers/net/wireless/iwlwifi/mvm/fw.c | |
parent | iwlwifi: mvm: Loosen the channel context/phy context coupling (diff) | |
download | linux-53a9d61eb74e574aec2db86f63d9809b6116d164.tar.xz linux-53a9d61eb74e574aec2db86f63d9809b6116d164.zip |
iwlwifi: mvm: Change PHY context handling
1. All the phy contexts are added immediately after the
firmware is loaded and up.
2. Whenever a PHY context needs to be used, its reference
counter is incremented and the PHY context is being
configured to the appropriate configuration.
3. When a PHY context is no longer needed, its reference
count is decremented.
4. PHY contexts are never removed.
Signed-off-by: Ilan Peer <ilan.peer@intel.com>
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/mvm/fw.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/fw.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw.c b/drivers/net/wireless/iwlwifi/mvm/fw.c index e18c92dd60ec..a4071cf09a24 100644 --- a/drivers/net/wireless/iwlwifi/mvm/fw.c +++ b/drivers/net/wireless/iwlwifi/mvm/fw.c @@ -388,6 +388,8 @@ out: int iwl_mvm_up(struct iwl_mvm *mvm) { int ret, i; + struct ieee80211_channel *chan; + struct cfg80211_chan_def chandef; lockdep_assert_held(&mvm->mutex); @@ -443,8 +445,22 @@ int iwl_mvm_up(struct iwl_mvm *mvm) if (ret) goto error; - IWL_DEBUG_INFO(mvm, "RT uCode started.\n"); + /* Add all the PHY contexts */ + chan = &mvm->hw->wiphy->bands[IEEE80211_BAND_2GHZ]->channels[0]; + cfg80211_chandef_create(&chandef, chan, NL80211_CHAN_NO_HT); + for (i = 0; i < NUM_PHY_CTX; i++) { + /* + * The channel used here isn't relevant as it's + * going to be overwritten in the other flows. + * For now use the first channel we have. + */ + ret = iwl_mvm_phy_ctxt_add(mvm, &mvm->phy_ctxts[i], + &chandef, 1, 1); + if (ret) + goto error; + } + IWL_DEBUG_INFO(mvm, "RT uCode started.\n"); return 0; error: iwl_trans_stop_device(mvm->trans); |