summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/ath/ath10k/p2p.c
diff options
context:
space:
mode:
authorMichal Kazior <michal.kazior@tieto.com>2015-02-26 15:23:18 +0300
committerKalle Valo <kvalo@qca.qualcomm.com>2015-03-07 10:57:42 +0300
commitfe3cbdfc4f5837401729e77e86da553d1e86f2bd (patch)
treec07a6f61a5cb5f6a92682b12ea14791e05f13f3c /drivers/net/wireless/ath/ath10k/p2p.c
parent6a94888f173f10d24d69d25fb99ab50bf750e0e3 (diff)
downloadlinux-fe3cbdfc4f5837401729e77e86da553d1e86f2bd.tar.xz
ath10k: implement handling of p2p noa event
Since new wmi-tlv firmware doesn't have SWBA event the only way to deliver P2P NoA information is through a new dedicated event. This fixes P2P GO Probe Responses to include P2P NoA when appropriate on the new firmware. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath10k/p2p.c')
-rw-r--r--drivers/net/wireless/ath/ath10k/p2p.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath10k/p2p.c b/drivers/net/wireless/ath/ath10k/p2p.c
index 79d7485e21cd..c0b6ffaf3ec1 100644
--- a/drivers/net/wireless/ath/ath10k/p2p.c
+++ b/drivers/net/wireless/ath/ath10k/p2p.c
@@ -16,6 +16,7 @@
#include "core.h"
#include "wmi.h"
+#include "mac.h"
#include "p2p.h"
static void ath10k_p2p_noa_ie_fill(u8 *data, size_t len,
@@ -122,3 +123,34 @@ void ath10k_p2p_noa_update(struct ath10k_vif *arvif,
__ath10k_p2p_noa_update(arvif, noa);
spin_unlock_bh(&ar->data_lock);
}
+
+struct ath10k_p2p_noa_arg {
+ u32 vdev_id;
+ const struct wmi_p2p_noa_info *noa;
+};
+
+static void ath10k_p2p_noa_update_vdev_iter(void *data, u8 *mac,
+ struct ieee80211_vif *vif)
+{
+ struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
+ struct ath10k_p2p_noa_arg *arg = data;
+
+ if (arvif->vdev_id != arg->vdev_id)
+ return;
+
+ ath10k_p2p_noa_update(arvif, arg->noa);
+}
+
+void ath10k_p2p_noa_update_by_vdev_id(struct ath10k *ar, u32 vdev_id,
+ const struct wmi_p2p_noa_info *noa)
+{
+ struct ath10k_p2p_noa_arg arg = {
+ .vdev_id = vdev_id,
+ .noa = noa,
+ };
+
+ ieee80211_iterate_active_interfaces_atomic(ar->hw,
+ IEEE80211_IFACE_ITER_NORMAL,
+ ath10k_p2p_noa_update_vdev_iter,
+ &arg);
+}