aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/357-0012-brcmfmac-fix-scheduled-scan-result-handling-for-newe.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/357-0012-brcmfmac-fix-scheduled-scan-result-handling-for-newe.patch')
-rw-r--r--package/kernel/mac80211/patches/357-0012-brcmfmac-fix-scheduled-scan-result-handling-for-newe.patch76
1 files changed, 76 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/357-0012-brcmfmac-fix-scheduled-scan-result-handling-for-newe.patch b/package/kernel/mac80211/patches/357-0012-brcmfmac-fix-scheduled-scan-result-handling-for-newe.patch
new file mode 100644
index 0000000000..bbd877426e
--- /dev/null
+++ b/package/kernel/mac80211/patches/357-0012-brcmfmac-fix-scheduled-scan-result-handling-for-newe.patch
@@ -0,0 +1,76 @@
+From 53e3a80d80c80bf50ab64cf6c44fb0fa41aa22d8 Mon Sep 17 00:00:00 2001
+From: Arend Van Spriel <arend.vanspriel@broadcom.com>
+Date: Wed, 23 Nov 2016 10:25:31 +0000
+Subject: [PATCH] brcmfmac: fix scheduled scan result handling for newer chips
+
+The scan results for scheduled scan as retrieved from the device
+have changed. A field has been added which is not needed. However,
+the appended info is. Luckily they are versioned so check that to
+find out the location of the appended data.
+
+Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
+Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
+Reviewed-by: Franky Lin <franky.lin@broadcom.com>
+Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ .../broadcom/brcm80211/brcmfmac/cfg80211.c | 24 +++++++++++++++++++++-
+ .../broadcom/brcm80211/brcmfmac/fwil_types.h | 7 +++++++
+ 2 files changed, 30 insertions(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+@@ -3257,6 +3257,28 @@ static int brcmf_start_internal_escan(st
+ return 0;
+ }
+
++static struct brcmf_pno_net_info_le *
++brcmf_get_netinfo_array(struct brcmf_pno_scanresults_le *pfn_v1)
++{
++ struct brcmf_pno_scanresults_v2_le *pfn_v2;
++ struct brcmf_pno_net_info_le *netinfo;
++
++ switch (pfn_v1->version) {
++ default:
++ WARN_ON(1);
++ /* fall-thru */
++ case cpu_to_le32(1):
++ netinfo = (struct brcmf_pno_net_info_le *)(pfn_v1 + 1);
++ break;
++ case cpu_to_le32(2):
++ pfn_v2 = (struct brcmf_pno_scanresults_v2_le *)pfn_v1;
++ netinfo = (struct brcmf_pno_net_info_le *)(pfn_v2 + 1);
++ break;
++ }
++
++ return netinfo;
++}
++
+ /* PFN result doesn't have all the info which are required by the supplicant
+ * (For e.g IEs) Do a target Escan so that sched scan results are reported
+ * via wl_inform_single_bss in the required format. Escan does require the
+@@ -3309,7 +3331,7 @@ brcmf_notify_sched_scan_results(struct b
+ }
+
+ data += sizeof(struct brcmf_pno_scanresults_le);
+- netinfo_start = (struct brcmf_pno_net_info_le *)data;
++ netinfo_start = brcmf_get_netinfo_array(pfn_result);
+
+ for (i = 0; i < result_count; i++) {
+ netinfo = &netinfo_start[i];
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h
+@@ -785,6 +785,13 @@ struct brcmf_pno_scanresults_le {
+ __le32 count;
+ };
+
++struct brcmf_pno_scanresults_v2_le {
++ __le32 version;
++ __le32 status;
++ __le32 count;
++ __le32 scan_ch_bucket;
++};
++
+ /**
+ * struct brcmf_pno_macaddr_le - to configure PNO macaddr randomization.
+ *