kernel: add missing config symbols for 4.9
[openwrt/staging/yousong.git] / package / kernel / mac80211 / patches / 357-0008-brcmfmac-move-scheduled-scan-activation-to-pno-sourc.patch
1 From 3e48611d31dd333be01576902f2dc11adefc9a06 Mon Sep 17 00:00:00 2001
2 From: Arend Van Spriel <arend.vanspriel@broadcom.com>
3 Date: Wed, 23 Nov 2016 10:25:27 +0000
4 Subject: [PATCH] brcmfmac: move scheduled scan activation to pno source file
5
6 Rework .sched_scan_start() callback moving actual configuration of
7 the device in pno source file.
8
9 Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
10 Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
11 Reviewed-by: Franky Lin <franky.lin@broadcom.com>
12 Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
13 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
14 ---
15 .../broadcom/brcm80211/brcmfmac/cfg80211.c | 65 +-----------
16 .../net/wireless/broadcom/brcm80211/brcmfmac/pno.c | 110 +++++++++++++++++----
17 .../net/wireless/broadcom/brcm80211/brcmfmac/pno.h | 29 +-----
18 3 files changed, 94 insertions(+), 110 deletions(-)
19
20 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
21 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
22 @@ -42,7 +42,6 @@
23 #include "common.h"
24
25 #define BRCMF_SCAN_IE_LEN_MAX 2048
26 -#define BRCMF_SCHED_SCAN_PERIOD 30
27
28 #define WPA_OUI "\x00\x50\xF2" /* WPA OUI */
29 #define WPA_OUI_TYPE 1
30 @@ -3342,24 +3341,6 @@ free_req:
31 return err;
32 }
33
34 -static bool brcmf_is_ssid_active(struct cfg80211_ssid *ssid,
35 - struct cfg80211_sched_scan_request *req)
36 -{
37 - int i;
38 -
39 - if (!ssid || !req->ssids || !req->n_ssids)
40 - return false;
41 -
42 - for (i = 0; i < req->n_ssids; i++) {
43 - if (ssid->ssid_len == req->ssids[i].ssid_len) {
44 - if (!strncmp(ssid->ssid, req->ssids[i].ssid,
45 - ssid->ssid_len))
46 - return true;
47 - }
48 - }
49 - return false;
50 -}
51 -
52 static int
53 brcmf_cfg80211_sched_scan_start(struct wiphy *wiphy,
54 struct net_device *ndev,
55 @@ -3367,9 +3348,6 @@ brcmf_cfg80211_sched_scan_start(struct w
56 {
57 struct brcmf_if *ifp = netdev_priv(ndev);
58 struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
59 - struct cfg80211_ssid *ssid;
60 - int i;
61 - int ret = 0;
62
63 brcmf_dbg(SCAN, "Enter n_match_sets:%d n_ssids:%d\n",
64 req->n_match_sets, req->n_ssids);
65 @@ -3389,48 +3367,7 @@ brcmf_cfg80211_sched_scan_start(struct w
66 return -EINVAL;
67 }
68
69 - /* clean up everything */
70 - ret = brcmf_pno_clean(ifp);
71 - if (ret < 0) {
72 - brcmf_err("failed error=%d\n", ret);
73 - return ret;
74 - }
75 -
76 - /* configure pno */
77 - ret = brcmf_pno_config(ifp, BRCMF_SCHED_SCAN_PERIOD, 0, 0);
78 - if (ret < 0)
79 - return ret;
80 -
81 - /* configure random mac */
82 - if (req->flags & NL80211_SCAN_FLAG_RANDOM_ADDR) {
83 - ret = brcmf_pno_set_random(ifp, req->mac_addr,
84 - req->mac_addr_mask);
85 - if (ret < 0)
86 - return ret;
87 - }
88 -
89 - /* configure each match set */
90 - for (i = 0; i < req->n_match_sets; i++) {
91 -
92 - ssid = &req->match_sets[i].ssid;
93 -
94 - if (!ssid->ssid_len) {
95 - brcmf_err("skip broadcast ssid\n");
96 - continue;
97 - }
98 -
99 - ret = brcmf_pno_add_ssid(ifp, ssid,
100 - brcmf_is_ssid_active(ssid, req));
101 - if (ret < 0)
102 - brcmf_dbg(SCAN, ">>> PNO filter %s for ssid (%s)\n",
103 - ret == 0 ? "set" : "failed", ssid->ssid);
104 - }
105 - /* Enable the PNO */
106 - ret = brcmf_fil_iovar_int_set(ifp, "pfn", 1);
107 - if (ret < 0)
108 - brcmf_err("PNO enable failed!! ret=%d\n", ret);
109 -
110 - return ret;
111 + return brcmf_pno_start_sched_scan(ifp, req);
112 }
113
114 static int brcmf_cfg80211_sched_scan_stop(struct wiphy *wiphy,
115 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
116 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
117 @@ -32,25 +32,10 @@
118 #define BRCMF_PNO_SCAN_INCOMPLETE 0
119 #define BRCMF_PNO_WPA_AUTH_ANY 0xFFFFFFFF
120 #define BRCMF_PNO_HIDDEN_BIT 2
121 +#define BRCMF_PNO_SCHED_SCAN_PERIOD 30
122
123 -int brcmf_pno_clean(struct brcmf_if *ifp)
124 -{
125 - int ret;
126 -
127 - /* Disable pfn */
128 - ret = brcmf_fil_iovar_int_set(ifp, "pfn", 0);
129 - if (ret == 0) {
130 - /* clear pfn */
131 - ret = brcmf_fil_iovar_data_set(ifp, "pfnclear", NULL, 0);
132 - }
133 - if (ret < 0)
134 - brcmf_err("failed code %d\n", ret);
135 -
136 - return ret;
137 -}
138 -
139 -int brcmf_pno_config(struct brcmf_if *ifp, u32 scan_freq,
140 - u32 mscan, u32 bestn)
141 +static int brcmf_pno_config(struct brcmf_if *ifp, u32 scan_freq,
142 + u32 mscan, u32 bestn)
143 {
144 struct brcmf_pno_param_le pfn_param;
145 u16 flags;
146 @@ -102,7 +87,8 @@ exit:
147 return err;
148 }
149
150 -int brcmf_pno_set_random(struct brcmf_if *ifp, u8 *mac_addr, u8 *mac_mask)
151 +static int brcmf_pno_set_random(struct brcmf_if *ifp, u8 *mac_addr,
152 + u8 *mac_mask)
153 {
154 struct brcmf_pno_macaddr_le pfn_mac;
155 int err, i;
156 @@ -128,8 +114,8 @@ int brcmf_pno_set_random(struct brcmf_if
157 return err;
158 }
159
160 -int brcmf_pno_add_ssid(struct brcmf_if *ifp, struct cfg80211_ssid *ssid,
161 - bool active)
162 +static int brcmf_pno_add_ssid(struct brcmf_if *ifp, struct cfg80211_ssid *ssid,
163 + bool active)
164 {
165 struct brcmf_pno_net_param_le pfn;
166
167 @@ -144,3 +130,85 @@ int brcmf_pno_add_ssid(struct brcmf_if *
168 return brcmf_fil_iovar_data_set(ifp, "pfn_add", &pfn, sizeof(pfn));
169 }
170
171 +static bool brcmf_is_ssid_active(struct cfg80211_ssid *ssid,
172 + struct cfg80211_sched_scan_request *req)
173 +{
174 + int i;
175 +
176 + if (!ssid || !req->ssids || !req->n_ssids)
177 + return false;
178 +
179 + for (i = 0; i < req->n_ssids; i++) {
180 + if (ssid->ssid_len == req->ssids[i].ssid_len) {
181 + if (!strncmp(ssid->ssid, req->ssids[i].ssid,
182 + ssid->ssid_len))
183 + return true;
184 + }
185 + }
186 + return false;
187 +}
188 +
189 +int brcmf_pno_clean(struct brcmf_if *ifp)
190 +{
191 + int ret;
192 +
193 + /* Disable pfn */
194 + ret = brcmf_fil_iovar_int_set(ifp, "pfn", 0);
195 + if (ret == 0) {
196 + /* clear pfn */
197 + ret = brcmf_fil_iovar_data_set(ifp, "pfnclear", NULL, 0);
198 + }
199 + if (ret < 0)
200 + brcmf_err("failed code %d\n", ret);
201 +
202 + return ret;
203 +}
204 +
205 +int brcmf_pno_start_sched_scan(struct brcmf_if *ifp,
206 + struct cfg80211_sched_scan_request *req)
207 +{
208 + struct cfg80211_ssid *ssid;
209 + int i, ret;
210 +
211 + /* clean up everything */
212 + ret = brcmf_pno_clean(ifp);
213 + if (ret < 0) {
214 + brcmf_err("failed error=%d\n", ret);
215 + return ret;
216 + }
217 +
218 + /* configure pno */
219 + ret = brcmf_pno_config(ifp, BRCMF_PNO_SCHED_SCAN_PERIOD, 0, 0);
220 + if (ret < 0)
221 + return ret;
222 +
223 + /* configure random mac */
224 + if (req->flags & NL80211_SCAN_FLAG_RANDOM_ADDR) {
225 + ret = brcmf_pno_set_random(ifp, req->mac_addr,
226 + req->mac_addr_mask);
227 + if (ret < 0)
228 + return ret;
229 + }
230 +
231 + /* configure each match set */
232 + for (i = 0; i < req->n_match_sets; i++) {
233 + ssid = &req->match_sets[i].ssid;
234 + if (!ssid->ssid_len) {
235 + brcmf_err("skip broadcast ssid\n");
236 + continue;
237 + }
238 +
239 + ret = brcmf_pno_add_ssid(ifp, ssid,
240 + brcmf_is_ssid_active(ssid, req));
241 + if (ret < 0)
242 + brcmf_dbg(SCAN, ">>> PNO filter %s for ssid (%s)\n",
243 + ret == 0 ? "set" : "failed", ssid->ssid);
244 + }
245 + /* Enable the PNO */
246 + ret = brcmf_fil_iovar_int_set(ifp, "pfn", 1);
247 + if (ret < 0)
248 + brcmf_err("PNO enable failed!! ret=%d\n", ret);
249 +
250 + return ret;
251 +}
252 +
253 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.h
254 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.h
255 @@ -27,33 +27,12 @@
256 int brcmf_pno_clean(struct brcmf_if *ifp);
257
258 /**
259 - * brcmf_pno_config - configure pno parameters.
260 + * brcmf_pno_start_sched_scan - initiate scheduled scan on device.
261 *
262 * @ifp: interface object used.
263 - * @scan_freq: scan frequency period in seconds.
264 - * @mscan: maximum number of scans stored in firmware.
265 - * @bestn: maximum number of APs per scan stored in firmware.
266 + * @req: configuration parameters for scheduled scan.
267 */
268 -int brcmf_pno_config(struct brcmf_if *ifp, u32 scan_freq,
269 - u32 mscan, u32 bestn);
270 -
271 -/**
272 - * brcmf_pno_set_random - setup randomisation mac address for pno.
273 - *
274 - * @ifp: interface object used.
275 - * @mac_addr: MAC address used with randomisation.
276 - * @mac_mask: MAC address mask used for randomisation.
277 - */
278 -int brcmf_pno_set_random(struct brcmf_if *ifp, u8 *mac_addr, u8 *mac_mask);
279 -
280 -/**
281 - * brcmf_pno_add_ssid - add ssid for pno in firmware.
282 - *
283 - * @ifp: interface object used.
284 - * @ssid: ssid information.
285 - * @active: indicate this ssid needs to be actively probed.
286 - */
287 -int brcmf_pno_add_ssid(struct brcmf_if *ifp, struct cfg80211_ssid *ssid,
288 - bool active);
289 +int brcmf_pno_start_sched_scan(struct brcmf_if *ifp,
290 + struct cfg80211_sched_scan_request *req);
291
292 #endif /* _BRCMF_PNO_H */