linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Arend van Spriel <arend.vanspriel@broadcom.com>
To: Kalle Valo <kvalo@codeaurora.org>
Cc: linux-wireless <linux-wireless@vger.kernel.org>,
	Arend van Spriel <arend.vanspriel@broadcom.com>
Subject: [PATCH 08/12] brcmfmac: move scheduled scan activation to pno source file
Date: Wed, 23 Nov 2016 10:25:27 +0000	[thread overview]
Message-ID: <1479896731-5091-9-git-send-email-arend.vanspriel@broadcom.com> (raw)
In-Reply-To: <1479896731-5091-1-git-send-email-arend.vanspriel@broadcom.com>

Rework .sched_scan_start() callback moving actual configuration of
the device in pno source file.

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>
---
 .../broadcom/brcm80211/brcmfmac/cfg80211.c         |  65 +-----------
 .../net/wireless/broadcom/brcm80211/brcmfmac/pno.c | 110 +++++++++++++++++----
 .../net/wireless/broadcom/brcm80211/brcmfmac/pno.h |  29 +-----
 3 files changed, 94 insertions(+), 110 deletions(-)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index b3b2f6a..6ca954e 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -42,7 +42,6 @@
 #include "common.h"
 
 #define BRCMF_SCAN_IE_LEN_MAX		2048
-#define BRCMF_SCHED_SCAN_PERIOD		30
 
 #define WPA_OUI				"\x00\x50\xF2"	/* WPA OUI */
 #define WPA_OUI_TYPE			1
@@ -3342,24 +3341,6 @@ static int brcmf_start_internal_escan(struct brcmf_if *ifp,
 	return err;
 }
 
-static bool brcmf_is_ssid_active(struct cfg80211_ssid *ssid,
-				 struct cfg80211_sched_scan_request *req)
-{
-	int i;
-
-	if (!ssid || !req->ssids || !req->n_ssids)
-		return false;
-
-	for (i = 0; i < req->n_ssids; i++) {
-		if (ssid->ssid_len == req->ssids[i].ssid_len) {
-			if (!strncmp(ssid->ssid, req->ssids[i].ssid,
-				     ssid->ssid_len))
-				return true;
-		}
-	}
-	return false;
-}
-
 static int
 brcmf_cfg80211_sched_scan_start(struct wiphy *wiphy,
 				struct net_device *ndev,
@@ -3367,9 +3348,6 @@ static bool brcmf_is_ssid_active(struct cfg80211_ssid *ssid,
 {
 	struct brcmf_if *ifp = netdev_priv(ndev);
 	struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
-	struct cfg80211_ssid *ssid;
-	int i;
-	int ret = 0;
 
 	brcmf_dbg(SCAN, "Enter n_match_sets:%d n_ssids:%d\n",
 		  req->n_match_sets, req->n_ssids);
@@ -3389,48 +3367,7 @@ static bool brcmf_is_ssid_active(struct cfg80211_ssid *ssid,
 		return -EINVAL;
 	}
 
-	/* clean up everything */
-	ret = brcmf_pno_clean(ifp);
-	if  (ret < 0) {
-		brcmf_err("failed error=%d\n", ret);
-		return ret;
-	}
-
-	/* configure pno */
-	ret = brcmf_pno_config(ifp, BRCMF_SCHED_SCAN_PERIOD, 0, 0);
-	if (ret < 0)
-		return ret;
-
-	/* configure random mac */
-	if (req->flags & NL80211_SCAN_FLAG_RANDOM_ADDR) {
-		ret = brcmf_pno_set_random(ifp, req->mac_addr,
-					   req->mac_addr_mask);
-		if (ret < 0)
-			return ret;
-	}
-
-	/* configure each match set */
-	for (i = 0; i < req->n_match_sets; i++) {
-
-		ssid = &req->match_sets[i].ssid;
-
-		if (!ssid->ssid_len) {
-			brcmf_err("skip broadcast ssid\n");
-			continue;
-		}
-
-		ret = brcmf_pno_add_ssid(ifp, ssid,
-					 brcmf_is_ssid_active(ssid, req));
-		if (ret < 0)
-			brcmf_dbg(SCAN, ">>> PNO filter %s for ssid (%s)\n",
-				  ret == 0 ? "set" : "failed", ssid->ssid);
-	}
-	/* Enable the PNO */
-	ret = brcmf_fil_iovar_int_set(ifp, "pfn", 1);
-	if (ret < 0)
-		brcmf_err("PNO enable failed!! ret=%d\n", ret);
-
-	return ret;
+	return brcmf_pno_start_sched_scan(ifp, req);
 }
 
 static int brcmf_cfg80211_sched_scan_stop(struct wiphy *wiphy,
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
index 72d9eef..d16e89e 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c
@@ -32,25 +32,10 @@
 #define BRCMF_PNO_SCAN_INCOMPLETE	0
 #define BRCMF_PNO_WPA_AUTH_ANY		0xFFFFFFFF
 #define BRCMF_PNO_HIDDEN_BIT		2
+#define BRCMF_PNO_SCHED_SCAN_PERIOD	30
 
-int brcmf_pno_clean(struct brcmf_if *ifp)
-{
-	int ret;
-
-	/* Disable pfn */
-	ret = brcmf_fil_iovar_int_set(ifp, "pfn", 0);
-	if (ret == 0) {
-		/* clear pfn */
-		ret = brcmf_fil_iovar_data_set(ifp, "pfnclear", NULL, 0);
-	}
-	if (ret < 0)
-		brcmf_err("failed code %d\n", ret);
-
-	return ret;
-}
-
-int brcmf_pno_config(struct brcmf_if *ifp, u32 scan_freq,
-		     u32 mscan, u32 bestn)
+static int brcmf_pno_config(struct brcmf_if *ifp, u32 scan_freq,
+			    u32 mscan, u32 bestn)
 {
 	struct brcmf_pno_param_le pfn_param;
 	u16 flags;
@@ -102,7 +87,8 @@ int brcmf_pno_config(struct brcmf_if *ifp, u32 scan_freq,
 	return err;
 }
 
-int brcmf_pno_set_random(struct brcmf_if *ifp, u8 *mac_addr, u8 *mac_mask)
+static int brcmf_pno_set_random(struct brcmf_if *ifp, u8 *mac_addr,
+				u8 *mac_mask)
 {
 	struct brcmf_pno_macaddr_le pfn_mac;
 	int err, i;
@@ -128,8 +114,8 @@ int brcmf_pno_set_random(struct brcmf_if *ifp, u8 *mac_addr, u8 *mac_mask)
 	return err;
 }
 
-int brcmf_pno_add_ssid(struct brcmf_if *ifp, struct cfg80211_ssid *ssid,
-		       bool active)
+static int brcmf_pno_add_ssid(struct brcmf_if *ifp, struct cfg80211_ssid *ssid,
+			      bool active)
 {
 	struct brcmf_pno_net_param_le pfn;
 
@@ -144,3 +130,85 @@ int brcmf_pno_add_ssid(struct brcmf_if *ifp, struct cfg80211_ssid *ssid,
 	return brcmf_fil_iovar_data_set(ifp, "pfn_add", &pfn, sizeof(pfn));
 }
 
+static bool brcmf_is_ssid_active(struct cfg80211_ssid *ssid,
+				 struct cfg80211_sched_scan_request *req)
+{
+	int i;
+
+	if (!ssid || !req->ssids || !req->n_ssids)
+		return false;
+
+	for (i = 0; i < req->n_ssids; i++) {
+		if (ssid->ssid_len == req->ssids[i].ssid_len) {
+			if (!strncmp(ssid->ssid, req->ssids[i].ssid,
+				     ssid->ssid_len))
+				return true;
+		}
+	}
+	return false;
+}
+
+int brcmf_pno_clean(struct brcmf_if *ifp)
+{
+	int ret;
+
+	/* Disable pfn */
+	ret = brcmf_fil_iovar_int_set(ifp, "pfn", 0);
+	if (ret == 0) {
+		/* clear pfn */
+		ret = brcmf_fil_iovar_data_set(ifp, "pfnclear", NULL, 0);
+	}
+	if (ret < 0)
+		brcmf_err("failed code %d\n", ret);
+
+	return ret;
+}
+
+int brcmf_pno_start_sched_scan(struct brcmf_if *ifp,
+			       struct cfg80211_sched_scan_request *req)
+{
+	struct cfg80211_ssid *ssid;
+	int i, ret;
+
+	/* clean up everything */
+	ret = brcmf_pno_clean(ifp);
+	if  (ret < 0) {
+		brcmf_err("failed error=%d\n", ret);
+		return ret;
+	}
+
+	/* configure pno */
+	ret = brcmf_pno_config(ifp, BRCMF_PNO_SCHED_SCAN_PERIOD, 0, 0);
+	if (ret < 0)
+		return ret;
+
+	/* configure random mac */
+	if (req->flags & NL80211_SCAN_FLAG_RANDOM_ADDR) {
+		ret = brcmf_pno_set_random(ifp, req->mac_addr,
+					   req->mac_addr_mask);
+		if (ret < 0)
+			return ret;
+	}
+
+	/* configure each match set */
+	for (i = 0; i < req->n_match_sets; i++) {
+		ssid = &req->match_sets[i].ssid;
+		if (!ssid->ssid_len) {
+			brcmf_err("skip broadcast ssid\n");
+			continue;
+		}
+
+		ret = brcmf_pno_add_ssid(ifp, ssid,
+					 brcmf_is_ssid_active(ssid, req));
+		if (ret < 0)
+			brcmf_dbg(SCAN, ">>> PNO filter %s for ssid (%s)\n",
+				  ret == 0 ? "set" : "failed", ssid->ssid);
+	}
+	/* Enable the PNO */
+	ret = brcmf_fil_iovar_int_set(ifp, "pfn", 1);
+	if (ret < 0)
+		brcmf_err("PNO enable failed!! ret=%d\n", ret);
+
+	return ret;
+}
+
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.h
index f2c5a53..5803a4c 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.h
@@ -27,33 +27,12 @@
 int brcmf_pno_clean(struct brcmf_if *ifp);
 
 /**
- * brcmf_pno_config - configure pno parameters.
+ * brcmf_pno_start_sched_scan - initiate scheduled scan on device.
  *
  * @ifp: interface object used.
- * @scan_freq: scan frequency period in seconds.
- * @mscan: maximum number of scans stored in firmware.
- * @bestn: maximum number of APs per scan stored in firmware.
+ * @req: configuration parameters for scheduled scan.
  */
-int brcmf_pno_config(struct brcmf_if *ifp, u32 scan_freq,
-		     u32 mscan, u32 bestn);
-
-/**
- * brcmf_pno_set_random - setup randomisation mac address for pno.
- *
- * @ifp: interface object used.
- * @mac_addr: MAC address used with randomisation.
- * @mac_mask: MAC address mask used for randomisation.
- */
-int brcmf_pno_set_random(struct brcmf_if *ifp, u8 *mac_addr, u8 *mac_mask);
-
-/**
- * brcmf_pno_add_ssid - add ssid for pno in firmware.
- *
- * @ifp: interface object used.
- * @ssid: ssid information.
- * @active: indicate this ssid needs to be actively probed.
- */
-int brcmf_pno_add_ssid(struct brcmf_if *ifp, struct cfg80211_ssid *ssid,
-		       bool active);
+int brcmf_pno_start_sched_scan(struct brcmf_if *ifp,
+			       struct cfg80211_sched_scan_request *req);
 
 #endif /* _BRCMF_PNO_H */
-- 
1.9.1

  parent reply	other threads:[~2016-11-23 10:27 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-23 10:25 [PATCH 00/12] brcmfmac: scheduled scan cleanup and chip support Arend van Spriel
2016-11-23 10:25 ` [PATCH 01/12] brcmfmac: add pcie host dongle interface rev6 support Arend van Spriel
2016-11-29 15:30   ` [01/12] " Kalle Valo
2016-11-23 10:25 ` [PATCH 02/12] brcmfmac: add support for 43341 chip Arend van Spriel
2016-11-23 10:25 ` [PATCH 03/12] brcmfmac: move pno helper functions in separate source file Arend van Spriel
2016-11-29  7:08   ` Rafał Miłecki
2016-11-29  7:57     ` Johannes Berg
2016-11-29  9:23       ` Arend Van Spriel
2016-11-29 12:29         ` Rafał Miłecki
2016-11-29 14:54           ` Kalle Valo
2016-11-23 10:25 ` [PATCH 04/12] brcmfmac: fix handling ssids in .sched_scan_start() callback Arend van Spriel
2016-11-23 10:25 ` [PATCH 05/12] brcmfmac: change prototype for brcmf_do_escan() Arend van Spriel
2016-11-23 10:25 ` [PATCH 06/12] brcmfmac: make internal escan more generic Arend van Spriel
2016-11-23 10:25 ` [PATCH 07/12] brcmfmac: split up brcmf_pno_config() function Arend van Spriel
2016-11-23 10:25 ` Arend van Spriel [this message]
2016-11-23 10:25 ` [PATCH 09/12] brcmfmac: use provided channels for scheduled scan Arend van Spriel
2016-11-23 10:25 ` [PATCH 10/12] brcmfmac: remove restriction from .sched_scan_start() callback Arend van Spriel
2016-11-23 10:25 ` [PATCH 11/12] brcmfmac: use requested scan interval in scheduled scan Arend van Spriel
2016-11-23 10:25 ` [PATCH 12/12] brcmfmac: fix scheduled scan result handling for newer chips Arend van Spriel
2016-11-29  7:37 ` [PATCH 00/12] brcmfmac: scheduled scan cleanup and chip support Rafał Miłecki
2016-11-29  9:58   ` Arend Van Spriel
2016-11-29 12:30     ` Rafał Miłecki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1479896731-5091-9-git-send-email-arend.vanspriel@broadcom.com \
    --to=arend.vanspriel@broadcom.com \
    --cc=kvalo@codeaurora.org \
    --cc=linux-wireless@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).