1 From ac55136f43d3336c7b40238b779c404008229929 Mon Sep 17 00:00:00 2001
2 From: Arend Van Spriel <arend.vanspriel@broadcom.com>
3 Date: Wed, 23 Nov 2016 10:25:22 +0000
4 Subject: [PATCH] brcmfmac: move pno helper functions in separate source file
6 Introducing new source file for pno related functionality. Moving
7 existing pno functions.
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>
15 .../wireless/broadcom/brcm80211/brcmfmac/Makefile | 3 +-
16 .../broadcom/brcm80211/brcmfmac/cfg80211.c | 93 ++-----------------
17 .../net/wireless/broadcom/brcm80211/brcmfmac/pno.c | 100 +++++++++++++++++++++
18 .../net/wireless/broadcom/brcm80211/brcmfmac/pno.h | 40 +++++++++
19 4 files changed, 150 insertions(+), 86 deletions(-)
20 create mode 100644 drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
21 create mode 100644 drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.h
23 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile
24 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile
25 @@ -35,7 +35,8 @@ brcmfmac-objs += \
32 brcmfmac-$(CPTCFG_BRCMFMAC_PROTO_BCDC) += \
34 brcmfmac-$(CPTCFG_BRCMFMAC_PROTO_MSGBUF) += \
35 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
36 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
38 #include "fwil_types.h"
48 #define BRCMF_SCAN_IE_LEN_MAX 2048
49 -#define BRCMF_PNO_VERSION 2
50 -#define BRCMF_PNO_TIME 30
51 -#define BRCMF_PNO_REPEAT 4
52 -#define BRCMF_PNO_FREQ_EXPO_MAX 3
53 -#define BRCMF_PNO_MAX_PFN_COUNT 16
54 -#define BRCMF_PNO_ENABLE_ADAPTSCAN_BIT 6
55 -#define BRCMF_PNO_HIDDEN_BIT 2
56 -#define BRCMF_PNO_WPA_AUTH_ANY 0xFFFFFFFF
57 -#define BRCMF_PNO_SCAN_COMPLETE 1
58 -#define BRCMF_PNO_SCAN_INCOMPLETE 0
60 #define WPA_OUI "\x00\x50\xF2" /* WPA OUI */
61 #define WPA_OUI_TYPE 1
62 @@ -3323,76 +3314,6 @@ out_err:
66 -static int brcmf_dev_pno_clean(struct net_device *ndev)
71 - ret = brcmf_fil_iovar_int_set(netdev_priv(ndev), "pfn", 0);
74 - ret = brcmf_fil_iovar_data_set(netdev_priv(ndev), "pfnclear",
78 - brcmf_err("failed code %d\n", ret);
83 -static int brcmf_dev_pno_config(struct brcmf_if *ifp,
84 - struct cfg80211_sched_scan_request *request)
86 - struct brcmf_pno_param_le pfn_param;
87 - struct brcmf_pno_macaddr_le pfn_mac;
92 - memset(&pfn_param, 0, sizeof(pfn_param));
93 - pfn_param.version = cpu_to_le32(BRCMF_PNO_VERSION);
95 - /* set extra pno params */
96 - pfn_param.flags = cpu_to_le16(1 << BRCMF_PNO_ENABLE_ADAPTSCAN_BIT);
97 - pfn_param.repeat = BRCMF_PNO_REPEAT;
98 - pfn_param.exp = BRCMF_PNO_FREQ_EXPO_MAX;
100 - /* set up pno scan fr */
101 - pfn_param.scan_freq = cpu_to_le32(BRCMF_PNO_TIME);
103 - err = brcmf_fil_iovar_data_set(ifp, "pfn_set", &pfn_param,
104 - sizeof(pfn_param));
106 - brcmf_err("pfn_set failed, err=%d\n", err);
110 - /* Find out if mac randomization should be turned on */
111 - if (!(request->flags & NL80211_SCAN_FLAG_RANDOM_ADDR))
114 - pfn_mac.version = BRCMF_PFN_MACADDR_CFG_VER;
115 - pfn_mac.flags = BRCMF_PFN_MAC_OUI_ONLY | BRCMF_PFN_SET_MAC_UNASSOC;
117 - memcpy(pfn_mac.mac, request->mac_addr, ETH_ALEN);
118 - mac_mask = request->mac_addr_mask;
119 - for (i = 0; i < ETH_ALEN; i++) {
120 - pfn_mac.mac[i] &= mac_mask[i];
121 - pfn_mac.mac[i] |= get_random_int() & ~(mac_mask[i]);
123 - /* Clear multi bit */
124 - pfn_mac.mac[0] &= 0xFE;
125 - /* Set locally administered */
126 - pfn_mac.mac[0] |= 0x02;
128 - err = brcmf_fil_iovar_data_set(ifp, "pfn_macaddr", &pfn_mac,
131 - brcmf_err("pfn_macaddr failed, err=%d\n", err);
137 brcmf_cfg80211_sched_scan_start(struct wiphy *wiphy,
138 struct net_device *ndev,
139 @@ -3436,15 +3357,16 @@ brcmf_cfg80211_sched_scan_start(struct w
141 if (request->n_match_sets > 0) {
142 /* clean up everything */
143 - ret = brcmf_dev_pno_clean(ndev);
144 + ret = brcmf_pno_clean(ifp);
146 brcmf_err("failed error=%d\n", ret);
151 - if (brcmf_dev_pno_config(ifp, request))
153 + ret = brcmf_pno_config(ifp, request);
157 /* configure each match set */
158 for (i = 0; i < request->n_match_sets; i++) {
159 @@ -3486,11 +3408,12 @@ static int brcmf_cfg80211_sched_scan_sto
160 struct net_device *ndev)
162 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
163 + struct brcmf_if *ifp = netdev_priv(ndev);
165 brcmf_dbg(SCAN, "enter\n");
166 - brcmf_dev_pno_clean(ndev);
167 + brcmf_pno_clean(ifp);
168 if (cfg->sched_escan)
169 - brcmf_notify_escan_complete(cfg, netdev_priv(ndev), true, true);
170 + brcmf_notify_escan_complete(cfg, ifp, true, true);
175 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
178 + * Copyright (c) 2016 Broadcom
180 + * Permission to use, copy, modify, and/or distribute this software for any
181 + * purpose with or without fee is hereby granted, provided that the above
182 + * copyright notice and this permission notice appear in all copies.
184 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
185 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
186 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
187 + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
188 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
189 + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
190 + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
192 +#include <linux/netdevice.h>
193 +#include <net/cfg80211.h>
199 +#include "fwil_types.h"
201 +#define BRCMF_PNO_VERSION 2
202 +#define BRCMF_PNO_TIME 30
203 +#define BRCMF_PNO_REPEAT 4
204 +#define BRCMF_PNO_FREQ_EXPO_MAX 3
205 +#define BRCMF_PNO_ENABLE_ADAPTSCAN_BIT 6
206 +#define BRCMF_PNO_SCAN_INCOMPLETE 0
208 +int brcmf_pno_clean(struct brcmf_if *ifp)
213 + ret = brcmf_fil_iovar_int_set(ifp, "pfn", 0);
216 + ret = brcmf_fil_iovar_data_set(ifp, "pfnclear", NULL, 0);
219 + brcmf_err("failed code %d\n", ret);
224 +int brcmf_pno_config(struct brcmf_if *ifp,
225 + struct cfg80211_sched_scan_request *request)
227 + struct brcmf_pno_param_le pfn_param;
228 + struct brcmf_pno_macaddr_le pfn_mac;
233 + memset(&pfn_param, 0, sizeof(pfn_param));
234 + pfn_param.version = cpu_to_le32(BRCMF_PNO_VERSION);
236 + /* set extra pno params */
237 + pfn_param.flags = cpu_to_le16(1 << BRCMF_PNO_ENABLE_ADAPTSCAN_BIT);
238 + pfn_param.repeat = BRCMF_PNO_REPEAT;
239 + pfn_param.exp = BRCMF_PNO_FREQ_EXPO_MAX;
241 + /* set up pno scan fr */
242 + pfn_param.scan_freq = cpu_to_le32(BRCMF_PNO_TIME);
244 + err = brcmf_fil_iovar_data_set(ifp, "pfn_set", &pfn_param,
245 + sizeof(pfn_param));
247 + brcmf_err("pfn_set failed, err=%d\n", err);
251 + /* Find out if mac randomization should be turned on */
252 + if (!(request->flags & NL80211_SCAN_FLAG_RANDOM_ADDR))
255 + pfn_mac.version = BRCMF_PFN_MACADDR_CFG_VER;
256 + pfn_mac.flags = BRCMF_PFN_MAC_OUI_ONLY | BRCMF_PFN_SET_MAC_UNASSOC;
258 + memcpy(pfn_mac.mac, request->mac_addr, ETH_ALEN);
259 + mac_mask = request->mac_addr_mask;
260 + for (i = 0; i < ETH_ALEN; i++) {
261 + pfn_mac.mac[i] &= mac_mask[i];
262 + pfn_mac.mac[i] |= get_random_int() & ~(mac_mask[i]);
264 + /* Clear multi bit */
265 + pfn_mac.mac[0] &= 0xFE;
266 + /* Set locally administered */
267 + pfn_mac.mac[0] |= 0x02;
269 + err = brcmf_fil_iovar_data_set(ifp, "pfn_macaddr", &pfn_mac,
272 + brcmf_err("pfn_macaddr failed, err=%d\n", err);
278 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.h
281 + * Copyright (c) 2016 Broadcom
283 + * Permission to use, copy, modify, and/or distribute this software for any
284 + * purpose with or without fee is hereby granted, provided that the above
285 + * copyright notice and this permission notice appear in all copies.
287 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
288 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
289 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
290 + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
291 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
292 + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
293 + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
295 +#ifndef _BRCMF_PNO_H
296 +#define _BRCMF_PNO_H
298 +#define BRCMF_PNO_SCAN_COMPLETE 1
299 +#define BRCMF_PNO_WPA_AUTH_ANY 0xFFFFFFFF
300 +#define BRCMF_PNO_HIDDEN_BIT 2
301 +#define BRCMF_PNO_MAX_PFN_COUNT 16
304 + * brcmf_pno_clean - disable and clear pno in firmware.
306 + * @ifp: interface object used.
308 +int brcmf_pno_clean(struct brcmf_if *ifp);
311 + * brcmf_pno_config - configure pno parameters.
313 + * @ifp: interface object used.
314 + * @request: scheduled scan parameters.
316 +int brcmf_pno_config(struct brcmf_if *ifp,
317 + struct cfg80211_sched_scan_request *request);
319 +#endif /* _BRCMF_PNO_H */