mac80211: brcmfmac: backport scheduled scan cleanup and chip support
[openwrt/openwrt.git] / package / kernel / mac80211 / patches / 357-0012-brcmfmac-fix-scheduled-scan-result-handling-for-newe.patch
1 From 53e3a80d80c80bf50ab64cf6c44fb0fa41aa22d8 Mon Sep 17 00:00:00 2001
2 From: Arend Van Spriel <arend.vanspriel@broadcom.com>
3 Date: Wed, 23 Nov 2016 10:25:31 +0000
4 Subject: [PATCH] brcmfmac: fix scheduled scan result handling for newer chips
5
6 The scan results for scheduled scan as retrieved from the device
7 have changed. A field has been added which is not needed. However,
8 the appended info is. Luckily they are versioned so check that to
9 find out the location of the appended data.
10
11 Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
12 Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
13 Reviewed-by: Franky Lin <franky.lin@broadcom.com>
14 Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
15 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
16 ---
17 .../broadcom/brcm80211/brcmfmac/cfg80211.c | 24 +++++++++++++++++++++-
18 .../broadcom/brcm80211/brcmfmac/fwil_types.h | 7 +++++++
19 2 files changed, 30 insertions(+), 1 deletion(-)
20
21 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
22 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
23 @@ -3257,6 +3257,28 @@ static int brcmf_start_internal_escan(st
24 return 0;
25 }
26
27 +static struct brcmf_pno_net_info_le *
28 +brcmf_get_netinfo_array(struct brcmf_pno_scanresults_le *pfn_v1)
29 +{
30 + struct brcmf_pno_scanresults_v2_le *pfn_v2;
31 + struct brcmf_pno_net_info_le *netinfo;
32 +
33 + switch (pfn_v1->version) {
34 + default:
35 + WARN_ON(1);
36 + /* fall-thru */
37 + case cpu_to_le32(1):
38 + netinfo = (struct brcmf_pno_net_info_le *)(pfn_v1 + 1);
39 + break;
40 + case cpu_to_le32(2):
41 + pfn_v2 = (struct brcmf_pno_scanresults_v2_le *)pfn_v1;
42 + netinfo = (struct brcmf_pno_net_info_le *)(pfn_v2 + 1);
43 + break;
44 + }
45 +
46 + return netinfo;
47 +}
48 +
49 /* PFN result doesn't have all the info which are required by the supplicant
50 * (For e.g IEs) Do a target Escan so that sched scan results are reported
51 * via wl_inform_single_bss in the required format. Escan does require the
52 @@ -3309,7 +3331,7 @@ brcmf_notify_sched_scan_results(struct b
53 }
54
55 data += sizeof(struct brcmf_pno_scanresults_le);
56 - netinfo_start = (struct brcmf_pno_net_info_le *)data;
57 + netinfo_start = brcmf_get_netinfo_array(pfn_result);
58
59 for (i = 0; i < result_count; i++) {
60 netinfo = &netinfo_start[i];
61 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h
62 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h
63 @@ -785,6 +785,13 @@ struct brcmf_pno_scanresults_le {
64 __le32 count;
65 };
66
67 +struct brcmf_pno_scanresults_v2_le {
68 + __le32 version;
69 + __le32 status;
70 + __le32 count;
71 + __le32 scan_ch_bucket;
72 +};
73 +
74 /**
75 * struct brcmf_pno_macaddr_le - to configure PNO macaddr randomization.
76 *