aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrei Otcheretianski <andrei.otcheretianski@intel.com>2015-06-30 05:08:28 -0400
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2015-10-25 07:45:06 -0400
commiteffd19298c7767457772d489c88f1b7ffa6e7bd9 (patch)
tree5a857a223fc8b81c29fa0b3299ee24befd9e95f0
parent053225de121a950b94a1989802c22895797ffbfc (diff)
iwlwifi: mvm: Implement per vif frame registration API
Implement config_iface_filter() driver op. Currently support only probe request registration for p2p client vifs, by setting MAC_FILTER_IN_PROBE_REQUEST flag in MAC_CONTEXT_CMD. This is needed since WFDS spec and certification require a P2P client to be discoverable on its operating channel. Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c3
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c22
2 files changed, 25 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c b/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
index 9d36ba7295a5..ad7ad720d2e7 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
@@ -843,6 +843,9 @@ static int iwl_mvm_mac_ctxt_cmd_sta(struct iwl_mvm *mvm,
843 ctxt_sta->listen_interval = cpu_to_le32(mvm->hw->conf.listen_interval); 843 ctxt_sta->listen_interval = cpu_to_le32(mvm->hw->conf.listen_interval);
844 ctxt_sta->assoc_id = cpu_to_le32(vif->bss_conf.aid); 844 ctxt_sta->assoc_id = cpu_to_le32(vif->bss_conf.aid);
845 845
846 if (vif->probe_req_reg && vif->bss_conf.assoc && vif->p2p)
847 cmd.filter_flags |= cpu_to_le32(MAC_FILTER_IN_PROBE_REQUEST);
848
846 return iwl_mvm_mac_ctxt_send_cmd(mvm, &cmd); 849 return iwl_mvm_mac_ctxt_send_cmd(mvm, &cmd);
847} 850}
848 851
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
index 8e69ab22b0e0..1d21e380ca11 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -1996,6 +1996,27 @@ out:
1996 *total_flags = 0; 1996 *total_flags = 0;
1997} 1997}
1998 1998
1999static void iwl_mvm_config_iface_filter(struct ieee80211_hw *hw,
2000 struct ieee80211_vif *vif,
2001 unsigned int filter_flags,
2002 unsigned int changed_flags)
2003{
2004 struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
2005
2006 /* We support only filter for probe requests */
2007 if (!(changed_flags & FIF_PROBE_REQ))
2008 return;
2009
2010 /* Supported only for p2p client interfaces */
2011 if (vif->type != NL80211_IFTYPE_STATION || !vif->bss_conf.assoc ||
2012 !vif->p2p)
2013 return;
2014
2015 mutex_lock(&mvm->mutex);
2016 iwl_mvm_mac_ctxt_changed(mvm, vif, false, NULL);
2017 mutex_unlock(&mvm->mutex);
2018}
2019
1999#ifdef CONFIG_IWLWIFI_BCAST_FILTERING 2020#ifdef CONFIG_IWLWIFI_BCAST_FILTERING
2000struct iwl_bcast_iter_data { 2021struct iwl_bcast_iter_data {
2001 struct iwl_mvm *mvm; 2022 struct iwl_mvm *mvm;
@@ -4175,6 +4196,7 @@ const struct ieee80211_ops iwl_mvm_hw_ops = {
4175 .config = iwl_mvm_mac_config, 4196 .config = iwl_mvm_mac_config,
4176 .prepare_multicast = iwl_mvm_prepare_multicast, 4197 .prepare_multicast = iwl_mvm_prepare_multicast,
4177 .configure_filter = iwl_mvm_configure_filter, 4198 .configure_filter = iwl_mvm_configure_filter,
4199 .config_iface_filter = iwl_mvm_config_iface_filter,
4178 .bss_info_changed = iwl_mvm_bss_info_changed, 4200 .bss_info_changed = iwl_mvm_bss_info_changed,
4179 .hw_scan = iwl_mvm_mac_hw_scan, 4201 .hw_scan = iwl_mvm_mac_hw_scan,
4180 .cancel_hw_scan = iwl_mvm_mac_cancel_hw_scan, 4202 .cancel_hw_scan = iwl_mvm_mac_cancel_hw_scan,