diff options
author | Andrei Otcheretianski <andrei.otcheretianski@intel.com> | 2015-06-30 05:08:28 -0400 |
---|---|---|
committer | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2015-10-25 07:45:06 -0400 |
commit | effd19298c7767457772d489c88f1b7ffa6e7bd9 (patch) | |
tree | 5a857a223fc8b81c29fa0b3299ee24befd9e95f0 | |
parent | 053225de121a950b94a1989802c22895797ffbfc (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.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mac80211.c | 22 |
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 | ||
1999 | static 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 |
2000 | struct iwl_bcast_iter_data { | 2021 | struct 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, |