aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/mvm/utils.c
diff options
context:
space:
mode:
authorLuciano Coelho <luciano.coelho@intel.com>2014-10-02 08:38:04 -0400
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-10-29 06:49:13 -0400
commit7f549e2c45ba216f629aad7c463c00a3fc1ec2ea (patch)
tree510f7d2ed6c637517af66073f732d923e857a09c /drivers/net/wireless/iwlwifi/mvm/utils.c
parent3c2f3b20e4a834f1d8ae34002b22f9021a861715 (diff)
iwlwifi: mvm: change the iwl_mvm_d3_iface_iterator into a generic function
Getting the BSS station vif is something that may be needed by other parts of the code. So, instead of having an iterator specifically for d3, change it into a generic one in utils.c. Additionally, add a iwl_mvm_get_bss_vif() function to make it easier to retrieving it. Signed-off-by: Luciano Coelho <luciano.coelho@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/mvm/utils.c')
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/utils.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/utils.c b/drivers/net/wireless/iwlwifi/mvm/utils.c
index 8021f6eec27f..e56e77ef5d2e 100644
--- a/drivers/net/wireless/iwlwifi/mvm/utils.c
+++ b/drivers/net/wireless/iwlwifi/mvm/utils.c
@@ -734,3 +734,40 @@ bool iwl_mvm_is_idle(struct iwl_mvm *mvm)
734 734
735 return idle; 735 return idle;
736} 736}
737
738struct iwl_bss_iter_data {
739 struct ieee80211_vif *vif;
740 bool error;
741};
742
743static void iwl_mvm_bss_iface_iterator(void *_data, u8 *mac,
744 struct ieee80211_vif *vif)
745{
746 struct iwl_bss_iter_data *data = _data;
747
748 if (vif->type != NL80211_IFTYPE_STATION || vif->p2p)
749 return;
750
751 if (data->vif) {
752 data->error = true;
753 return;
754 }
755
756 data->vif = vif;
757}
758
759struct ieee80211_vif *iwl_mvm_get_bss_vif(struct iwl_mvm *mvm)
760{
761 struct iwl_bss_iter_data bss_iter_data = {};
762
763 ieee80211_iterate_active_interfaces_atomic(
764 mvm->hw, IEEE80211_IFACE_ITER_NORMAL,
765 iwl_mvm_bss_iface_iterator, &bss_iter_data);
766
767 if (bss_iter_data.error) {
768 IWL_ERR(mvm, "More than one managed interface active!\n");
769 return ERR_PTR(-EINVAL);
770 }
771
772 return bss_iter_data.vif;
773}