diff options
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.patch | 76 |
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. + * |