All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Jérôme Pouiller" <Jerome.Pouiller@silabs.com>
To: "devel@driverdev.osuosl.org" <devel@driverdev.osuosl.org>,
	"linux-wireless@vger.kernel.org" <linux-wireless@vger.kernel.org>
Cc: "netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Kalle Valo" <kvalo@codeaurora.org>,
	"David S . Miller" <davem@davemloft.net>,
	"Jérôme Pouiller" <Jerome.Pouiller@silabs.com>
Subject: [PATCH 47/55] staging: wfx: simplify hif_scan() usage
Date: Mon, 16 Dec 2019 17:03:57 +0000	[thread overview]
Message-ID: <20191216170302.29543-48-Jerome.Pouiller@silabs.com> (raw)
In-Reply-To: <20191216170302.29543-1-Jerome.Pouiller@silabs.com>

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

The structures hif_req_start_scan and hif_ssid_def come from hardware
API. It is not intended to be manipulated in upper layers of the driver.

So, this patch relocate handling of theses structures to hif_scan()
(the low level function). This change also allows to drop struct
wfx_scan_params.

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/hif_tx.c | 72 ++++++++++++++++++++++--------------
 drivers/staging/wfx/hif_tx.h | 10 ++---
 drivers/staging/wfx/scan.c   | 54 ++++-----------------------
 drivers/staging/wfx/wfx.h    |  1 +
 4 files changed, 57 insertions(+), 80 deletions(-)

diff --git a/drivers/staging/wfx/hif_tx.c b/drivers/staging/wfx/hif_tx.c
index 259b49b99098..8a34a52dd5b9 100644
--- a/drivers/staging/wfx/hif_tx.c
+++ b/drivers/staging/wfx/hif_tx.c
@@ -220,41 +220,59 @@ int hif_write_mib(struct wfx_dev *wdev, int vif_id, u16 mib_id, void *val,
 	return ret;
 }
 
-int hif_scan(struct wfx_vif *wvif, const struct wfx_scan_params *arg)
+int hif_scan(struct wfx_vif *wvif, struct cfg80211_scan_request *req,
+	     int chan_start_idx, int chan_num)
 {
 	int ret, i;
 	struct hif_msg *hif;
-	struct hif_ssid_def *ssids;
-	size_t buf_len = sizeof(struct hif_req_start_scan) +
-		arg->scan_req.num_of_channels * sizeof(u8) +
-		arg->scan_req.num_of_ssids * sizeof(struct hif_ssid_def);
-	struct hif_req_start_scan *body = wfx_alloc_hif(buf_len, &hif);
-	u8 *ptr = (u8 *) body + sizeof(*body);
+	size_t buf_len =
+		sizeof(struct hif_req_start_scan_alt) + chan_num * sizeof(u8);
+	struct hif_req_start_scan_alt *body = wfx_alloc_hif(buf_len, &hif);
+	int tmo_chan_fg, tmo_chan_bg, tmo;
 
-	WARN(arg->scan_req.num_of_channels > HIF_API_MAX_NB_CHANNELS, "invalid params");
-	WARN(arg->scan_req.num_of_ssids > 2, "invalid params");
-	WARN(arg->scan_req.band > 1, "invalid params");
+	WARN(chan_num > HIF_API_MAX_NB_CHANNELS, "invalid params");
+	WARN(req->n_ssids > HIF_API_MAX_NB_SSIDS, "invalid params");
+
+	compiletime_assert(IEEE80211_MAX_SSID_LEN == HIF_API_SSID_SIZE,
+			   "API inconsistency");
+	for (i = 0; i < req->n_ssids; i++) {
+		memcpy(body->ssid_def[i].ssid, req->ssids[i].ssid,
+		       IEEE80211_MAX_SSID_LEN);
+		body->ssid_def[i].ssid_length =
+			cpu_to_le32(req->ssids[i].ssid_len);
+	}
+	body->num_of_ssids = HIF_API_MAX_NB_SSIDS;
+	// Background scan is always a good idea
+	body->scan_type.type = 1;
+	body->scan_flags.fbg = 1;
+	body->tx_power_level =
+		cpu_to_le32(req->channels[chan_start_idx]->max_power);
+	body->num_of_channels = chan_num;
+	for (i = 0; i < chan_num; i++)
+		body->channel_list[i] =
+			req->channels[i + chan_start_idx]->hw_value;
+	if (req->no_cck)
+		body->max_transmit_rate = API_RATE_INDEX_G_6MBPS;
+	else
+		body->max_transmit_rate = API_RATE_INDEX_B_1MBPS;
+	if (req->channels[chan_start_idx]->flags & IEEE80211_CHAN_NO_IR) {
+		body->min_channel_time = cpu_to_le32(50);
+		body->max_channel_time = cpu_to_le32(150);
+	} else {
+		body->min_channel_time = cpu_to_le32(10);
+		body->max_channel_time = cpu_to_le32(50);
+		body->num_of_probe_requests = 2;
+		body->probe_delay = 100;
+	}
+	tmo_chan_bg = le32_to_cpu(body->max_channel_time) * USEC_PER_TU;
+	tmo_chan_fg = 512 * USEC_PER_TU + body->probe_delay;
+	tmo_chan_fg *= body->num_of_probe_requests;
+	tmo = chan_num * max(tmo_chan_bg, tmo_chan_fg);
 
-	// FIXME: This API is unnecessary complex, fixing NumOfChannels and
-	// adding a member SsidDef at end of struct hif_req_start_scan would
-	// simplify that a lot.
-	memcpy(body, &arg->scan_req, sizeof(*body));
-	cpu_to_le32s(&body->min_channel_time);
-	cpu_to_le32s(&body->max_channel_time);
-	cpu_to_le32s(&body->tx_power_level);
-	memcpy(ptr, arg->ssids,
-	       arg->scan_req.num_of_ssids * sizeof(struct hif_ssid_def));
-	ssids = (struct hif_ssid_def *) ptr;
-	for (i = 0; i < body->num_of_ssids; ++i)
-		cpu_to_le32s(&ssids[i].ssid_length);
-	ptr += arg->scan_req.num_of_ssids * sizeof(struct hif_ssid_def);
-	memcpy(ptr, arg->ch, arg->scan_req.num_of_channels * sizeof(u8));
-	ptr += arg->scan_req.num_of_channels * sizeof(u8);
-	WARN(buf_len != ptr - (u8 *) body, "allocation size mismatch");
 	wfx_fill_header(hif, wvif->id, HIF_REQ_ID_START_SCAN, buf_len);
 	ret = wfx_cmd_send(wvif->wdev, hif, NULL, 0, false);
 	kfree(hif);
-	return ret;
+	return ret ? ret : usecs_to_jiffies(tmo);
 }
 
 int hif_stop_scan(struct wfx_vif *wvif)
diff --git a/drivers/staging/wfx/hif_tx.h b/drivers/staging/wfx/hif_tx.h
index d88019421fbc..e8855ead3a18 100644
--- a/drivers/staging/wfx/hif_tx.h
+++ b/drivers/staging/wfx/hif_tx.h
@@ -13,15 +13,10 @@
 #include "hif_api_cmd.h"
 
 struct ieee80211_tx_queue_params;
+struct cfg80211_scan_request;
 struct wfx_dev;
 struct wfx_vif;
 
-struct wfx_scan_params {
-	struct hif_req_start_scan scan_req;
-	struct hif_ssid_def *ssids;
-	u8 *ch;
-};
-
 struct wfx_hif_cmd {
 	struct mutex      lock;
 	struct mutex      key_renew_lock;
@@ -45,7 +40,8 @@ int hif_read_mib(struct wfx_dev *wdev, int vif_id, u16 mib_id,
 		 void *buf, size_t buf_size);
 int hif_write_mib(struct wfx_dev *wdev, int vif_id, u16 mib_id,
 		  void *buf, size_t buf_size);
-int hif_scan(struct wfx_vif *wvif, const struct wfx_scan_params *arg);
+int hif_scan(struct wfx_vif *wvif, struct cfg80211_scan_request *req80211,
+	     int chan_start, int chan_num);
 int hif_stop_scan(struct wfx_vif *wvif);
 int hif_join(struct wfx_vif *wvif, const struct hif_req_join *arg);
 int hif_set_pm(struct wfx_vif *wvif, bool ps, int dynamic_ps_timeout);
diff --git a/drivers/staging/wfx/scan.c b/drivers/staging/wfx/scan.c
index c043f2f79541..122da87bbf92 100644
--- a/drivers/staging/wfx/scan.c
+++ b/drivers/staging/wfx/scan.c
@@ -34,19 +34,18 @@ static void wfx_scan_restart_delayed(struct wfx_vif *wvif)
 	}
 }
 
-static int wfx_scan_start(struct wfx_vif *wvif, struct wfx_scan_params *scan)
+static int wfx_scan_start(struct wfx_vif *wvif,
+			  int chan_start_idx, int chan_num)
 {
-	int tmo = 500;
+	int tmo;
 
 	if (wvif->state == WFX_STATE_PRE_STA)
 		return -EBUSY;
 
-	tmo += scan->scan_req.num_of_channels *
-	       ((20 * (scan->scan_req.max_channel_time)) + 10);
 	atomic_set(&wvif->scan.in_progress, 1);
 
-	schedule_delayed_work(&wvif->scan.timeout, msecs_to_jiffies(tmo));
-	hif_scan(wvif, scan);
+	tmo = hif_scan(wvif, wvif->scan.req, chan_start_idx, chan_num);
+	schedule_delayed_work(&wvif->scan.timeout, tmo);
 	return 0;
 }
 
@@ -128,9 +127,6 @@ void wfx_scan_work(struct work_struct *work)
 {
 	struct wfx_vif *wvif = container_of(work, struct wfx_vif, scan.work);
 	struct ieee80211_channel **it;
-	struct wfx_scan_params scan = {
-		.scan_req.scan_type.type = 0,    /* Foreground */
-	};
 	struct ieee80211_channel *first;
 	int i;
 
@@ -173,48 +169,14 @@ void wfx_scan_work(struct work_struct *work)
 		    (*it)->max_power != first->max_power)
 			break;
 	}
-	scan.scan_req.band = first->band;
-
-	if (wvif->scan.req->no_cck)
-		scan.scan_req.max_transmit_rate = API_RATE_INDEX_G_6MBPS;
-	else
-		scan.scan_req.max_transmit_rate = API_RATE_INDEX_B_1MBPS;
-	scan.scan_req.num_of_probe_requests =
-		(first->flags & IEEE80211_CHAN_NO_IR) ? 0 : 2;
-	scan.scan_req.num_of_ssids = wvif->scan.n_ssids;
-	scan.ssids = &wvif->scan.ssids[0];
-	scan.scan_req.num_of_channels = it - wvif->scan.curr;
-	scan.scan_req.probe_delay = 100;
-	// FIXME: Check if FW can do active scan while joined.
-	if (wvif->state == WFX_STATE_STA) {
-		scan.scan_req.scan_type.type = 1;
-		scan.scan_req.scan_flags.fbg = 1;
-	}
-
-	scan.ch = kcalloc(scan.scan_req.num_of_channels,
-			  sizeof(u8), GFP_KERNEL);
-
-	if (!scan.ch) {
-		wvif->scan.status = -ENOMEM;
-		goto fail;
-	}
-	for (i = 0; i < scan.scan_req.num_of_channels; ++i)
-		scan.ch[i] = wvif->scan.curr[i]->hw_value;
-
-	if (wvif->scan.curr[0]->flags & IEEE80211_CHAN_NO_IR) {
-		scan.scan_req.min_channel_time = 50;
-		scan.scan_req.max_channel_time = 150;
-	} else {
-		scan.scan_req.min_channel_time = 10;
-		scan.scan_req.max_channel_time = 50;
-	}
 	if (!(first->flags & IEEE80211_CHAN_NO_IR) &&
 	    wvif->scan.output_power != first->max_power) {
 		wvif->scan.output_power = first->max_power;
 		hif_set_output_power(wvif, wvif->scan.output_power * 10);
 	}
-	wvif->scan.status = wfx_scan_start(wvif, &scan);
-	kfree(scan.ch);
+	wvif->scan.status = wfx_scan_start(wvif,
+					   wvif->scan.curr - wvif->scan.begin,
+					   it - wvif->scan.curr);
 	if (wvif->scan.status)
 		goto fail;
 	wvif->scan.curr = it;
diff --git a/drivers/staging/wfx/wfx.h b/drivers/staging/wfx/wfx.h
index 97373d047f58..35f5ddc2eeb3 100644
--- a/drivers/staging/wfx/wfx.h
+++ b/drivers/staging/wfx/wfx.h
@@ -27,6 +27,7 @@
 #include "hif_api_general.h"
 
 #define USEC_PER_TXOP 32 // see struct ieee80211_tx_queue_params
+#define USEC_PER_TU 1024
 
 struct hwbus_ops;
 
-- 
2.20.1

WARNING: multiple messages have this Message-ID (diff)
From: "Jérôme Pouiller" <Jerome.Pouiller@silabs.com>
To: "devel@driverdev.osuosl.org" <devel@driverdev.osuosl.org>,
	"linux-wireless@vger.kernel.org" <linux-wireless@vger.kernel.org>
Cc: "netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"David S . Miller" <davem@davemloft.net>,
	Kalle Valo <kvalo@codeaurora.org>
Subject: [PATCH 47/55] staging: wfx: simplify hif_scan() usage
Date: Mon, 16 Dec 2019 17:03:57 +0000	[thread overview]
Message-ID: <20191216170302.29543-48-Jerome.Pouiller@silabs.com> (raw)
In-Reply-To: <20191216170302.29543-1-Jerome.Pouiller@silabs.com>

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

The structures hif_req_start_scan and hif_ssid_def come from hardware
API. It is not intended to be manipulated in upper layers of the driver.

So, this patch relocate handling of theses structures to hif_scan()
(the low level function). This change also allows to drop struct
wfx_scan_params.

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/hif_tx.c | 72 ++++++++++++++++++++++--------------
 drivers/staging/wfx/hif_tx.h | 10 ++---
 drivers/staging/wfx/scan.c   | 54 ++++-----------------------
 drivers/staging/wfx/wfx.h    |  1 +
 4 files changed, 57 insertions(+), 80 deletions(-)

diff --git a/drivers/staging/wfx/hif_tx.c b/drivers/staging/wfx/hif_tx.c
index 259b49b99098..8a34a52dd5b9 100644
--- a/drivers/staging/wfx/hif_tx.c
+++ b/drivers/staging/wfx/hif_tx.c
@@ -220,41 +220,59 @@ int hif_write_mib(struct wfx_dev *wdev, int vif_id, u16 mib_id, void *val,
 	return ret;
 }
 
-int hif_scan(struct wfx_vif *wvif, const struct wfx_scan_params *arg)
+int hif_scan(struct wfx_vif *wvif, struct cfg80211_scan_request *req,
+	     int chan_start_idx, int chan_num)
 {
 	int ret, i;
 	struct hif_msg *hif;
-	struct hif_ssid_def *ssids;
-	size_t buf_len = sizeof(struct hif_req_start_scan) +
-		arg->scan_req.num_of_channels * sizeof(u8) +
-		arg->scan_req.num_of_ssids * sizeof(struct hif_ssid_def);
-	struct hif_req_start_scan *body = wfx_alloc_hif(buf_len, &hif);
-	u8 *ptr = (u8 *) body + sizeof(*body);
+	size_t buf_len =
+		sizeof(struct hif_req_start_scan_alt) + chan_num * sizeof(u8);
+	struct hif_req_start_scan_alt *body = wfx_alloc_hif(buf_len, &hif);
+	int tmo_chan_fg, tmo_chan_bg, tmo;
 
-	WARN(arg->scan_req.num_of_channels > HIF_API_MAX_NB_CHANNELS, "invalid params");
-	WARN(arg->scan_req.num_of_ssids > 2, "invalid params");
-	WARN(arg->scan_req.band > 1, "invalid params");
+	WARN(chan_num > HIF_API_MAX_NB_CHANNELS, "invalid params");
+	WARN(req->n_ssids > HIF_API_MAX_NB_SSIDS, "invalid params");
+
+	compiletime_assert(IEEE80211_MAX_SSID_LEN == HIF_API_SSID_SIZE,
+			   "API inconsistency");
+	for (i = 0; i < req->n_ssids; i++) {
+		memcpy(body->ssid_def[i].ssid, req->ssids[i].ssid,
+		       IEEE80211_MAX_SSID_LEN);
+		body->ssid_def[i].ssid_length =
+			cpu_to_le32(req->ssids[i].ssid_len);
+	}
+	body->num_of_ssids = HIF_API_MAX_NB_SSIDS;
+	// Background scan is always a good idea
+	body->scan_type.type = 1;
+	body->scan_flags.fbg = 1;
+	body->tx_power_level =
+		cpu_to_le32(req->channels[chan_start_idx]->max_power);
+	body->num_of_channels = chan_num;
+	for (i = 0; i < chan_num; i++)
+		body->channel_list[i] =
+			req->channels[i + chan_start_idx]->hw_value;
+	if (req->no_cck)
+		body->max_transmit_rate = API_RATE_INDEX_G_6MBPS;
+	else
+		body->max_transmit_rate = API_RATE_INDEX_B_1MBPS;
+	if (req->channels[chan_start_idx]->flags & IEEE80211_CHAN_NO_IR) {
+		body->min_channel_time = cpu_to_le32(50);
+		body->max_channel_time = cpu_to_le32(150);
+	} else {
+		body->min_channel_time = cpu_to_le32(10);
+		body->max_channel_time = cpu_to_le32(50);
+		body->num_of_probe_requests = 2;
+		body->probe_delay = 100;
+	}
+	tmo_chan_bg = le32_to_cpu(body->max_channel_time) * USEC_PER_TU;
+	tmo_chan_fg = 512 * USEC_PER_TU + body->probe_delay;
+	tmo_chan_fg *= body->num_of_probe_requests;
+	tmo = chan_num * max(tmo_chan_bg, tmo_chan_fg);
 
-	// FIXME: This API is unnecessary complex, fixing NumOfChannels and
-	// adding a member SsidDef at end of struct hif_req_start_scan would
-	// simplify that a lot.
-	memcpy(body, &arg->scan_req, sizeof(*body));
-	cpu_to_le32s(&body->min_channel_time);
-	cpu_to_le32s(&body->max_channel_time);
-	cpu_to_le32s(&body->tx_power_level);
-	memcpy(ptr, arg->ssids,
-	       arg->scan_req.num_of_ssids * sizeof(struct hif_ssid_def));
-	ssids = (struct hif_ssid_def *) ptr;
-	for (i = 0; i < body->num_of_ssids; ++i)
-		cpu_to_le32s(&ssids[i].ssid_length);
-	ptr += arg->scan_req.num_of_ssids * sizeof(struct hif_ssid_def);
-	memcpy(ptr, arg->ch, arg->scan_req.num_of_channels * sizeof(u8));
-	ptr += arg->scan_req.num_of_channels * sizeof(u8);
-	WARN(buf_len != ptr - (u8 *) body, "allocation size mismatch");
 	wfx_fill_header(hif, wvif->id, HIF_REQ_ID_START_SCAN, buf_len);
 	ret = wfx_cmd_send(wvif->wdev, hif, NULL, 0, false);
 	kfree(hif);
-	return ret;
+	return ret ? ret : usecs_to_jiffies(tmo);
 }
 
 int hif_stop_scan(struct wfx_vif *wvif)
diff --git a/drivers/staging/wfx/hif_tx.h b/drivers/staging/wfx/hif_tx.h
index d88019421fbc..e8855ead3a18 100644
--- a/drivers/staging/wfx/hif_tx.h
+++ b/drivers/staging/wfx/hif_tx.h
@@ -13,15 +13,10 @@
 #include "hif_api_cmd.h"
 
 struct ieee80211_tx_queue_params;
+struct cfg80211_scan_request;
 struct wfx_dev;
 struct wfx_vif;
 
-struct wfx_scan_params {
-	struct hif_req_start_scan scan_req;
-	struct hif_ssid_def *ssids;
-	u8 *ch;
-};
-
 struct wfx_hif_cmd {
 	struct mutex      lock;
 	struct mutex      key_renew_lock;
@@ -45,7 +40,8 @@ int hif_read_mib(struct wfx_dev *wdev, int vif_id, u16 mib_id,
 		 void *buf, size_t buf_size);
 int hif_write_mib(struct wfx_dev *wdev, int vif_id, u16 mib_id,
 		  void *buf, size_t buf_size);
-int hif_scan(struct wfx_vif *wvif, const struct wfx_scan_params *arg);
+int hif_scan(struct wfx_vif *wvif, struct cfg80211_scan_request *req80211,
+	     int chan_start, int chan_num);
 int hif_stop_scan(struct wfx_vif *wvif);
 int hif_join(struct wfx_vif *wvif, const struct hif_req_join *arg);
 int hif_set_pm(struct wfx_vif *wvif, bool ps, int dynamic_ps_timeout);
diff --git a/drivers/staging/wfx/scan.c b/drivers/staging/wfx/scan.c
index c043f2f79541..122da87bbf92 100644
--- a/drivers/staging/wfx/scan.c
+++ b/drivers/staging/wfx/scan.c
@@ -34,19 +34,18 @@ static void wfx_scan_restart_delayed(struct wfx_vif *wvif)
 	}
 }
 
-static int wfx_scan_start(struct wfx_vif *wvif, struct wfx_scan_params *scan)
+static int wfx_scan_start(struct wfx_vif *wvif,
+			  int chan_start_idx, int chan_num)
 {
-	int tmo = 500;
+	int tmo;
 
 	if (wvif->state == WFX_STATE_PRE_STA)
 		return -EBUSY;
 
-	tmo += scan->scan_req.num_of_channels *
-	       ((20 * (scan->scan_req.max_channel_time)) + 10);
 	atomic_set(&wvif->scan.in_progress, 1);
 
-	schedule_delayed_work(&wvif->scan.timeout, msecs_to_jiffies(tmo));
-	hif_scan(wvif, scan);
+	tmo = hif_scan(wvif, wvif->scan.req, chan_start_idx, chan_num);
+	schedule_delayed_work(&wvif->scan.timeout, tmo);
 	return 0;
 }
 
@@ -128,9 +127,6 @@ void wfx_scan_work(struct work_struct *work)
 {
 	struct wfx_vif *wvif = container_of(work, struct wfx_vif, scan.work);
 	struct ieee80211_channel **it;
-	struct wfx_scan_params scan = {
-		.scan_req.scan_type.type = 0,    /* Foreground */
-	};
 	struct ieee80211_channel *first;
 	int i;
 
@@ -173,48 +169,14 @@ void wfx_scan_work(struct work_struct *work)
 		    (*it)->max_power != first->max_power)
 			break;
 	}
-	scan.scan_req.band = first->band;
-
-	if (wvif->scan.req->no_cck)
-		scan.scan_req.max_transmit_rate = API_RATE_INDEX_G_6MBPS;
-	else
-		scan.scan_req.max_transmit_rate = API_RATE_INDEX_B_1MBPS;
-	scan.scan_req.num_of_probe_requests =
-		(first->flags & IEEE80211_CHAN_NO_IR) ? 0 : 2;
-	scan.scan_req.num_of_ssids = wvif->scan.n_ssids;
-	scan.ssids = &wvif->scan.ssids[0];
-	scan.scan_req.num_of_channels = it - wvif->scan.curr;
-	scan.scan_req.probe_delay = 100;
-	// FIXME: Check if FW can do active scan while joined.
-	if (wvif->state == WFX_STATE_STA) {
-		scan.scan_req.scan_type.type = 1;
-		scan.scan_req.scan_flags.fbg = 1;
-	}
-
-	scan.ch = kcalloc(scan.scan_req.num_of_channels,
-			  sizeof(u8), GFP_KERNEL);
-
-	if (!scan.ch) {
-		wvif->scan.status = -ENOMEM;
-		goto fail;
-	}
-	for (i = 0; i < scan.scan_req.num_of_channels; ++i)
-		scan.ch[i] = wvif->scan.curr[i]->hw_value;
-
-	if (wvif->scan.curr[0]->flags & IEEE80211_CHAN_NO_IR) {
-		scan.scan_req.min_channel_time = 50;
-		scan.scan_req.max_channel_time = 150;
-	} else {
-		scan.scan_req.min_channel_time = 10;
-		scan.scan_req.max_channel_time = 50;
-	}
 	if (!(first->flags & IEEE80211_CHAN_NO_IR) &&
 	    wvif->scan.output_power != first->max_power) {
 		wvif->scan.output_power = first->max_power;
 		hif_set_output_power(wvif, wvif->scan.output_power * 10);
 	}
-	wvif->scan.status = wfx_scan_start(wvif, &scan);
-	kfree(scan.ch);
+	wvif->scan.status = wfx_scan_start(wvif,
+					   wvif->scan.curr - wvif->scan.begin,
+					   it - wvif->scan.curr);
 	if (wvif->scan.status)
 		goto fail;
 	wvif->scan.curr = it;
diff --git a/drivers/staging/wfx/wfx.h b/drivers/staging/wfx/wfx.h
index 97373d047f58..35f5ddc2eeb3 100644
--- a/drivers/staging/wfx/wfx.h
+++ b/drivers/staging/wfx/wfx.h
@@ -27,6 +27,7 @@
 #include "hif_api_general.h"
 
 #define USEC_PER_TXOP 32 // see struct ieee80211_tx_queue_params
+#define USEC_PER_TU 1024
 
 struct hwbus_ops;
 
-- 
2.20.1
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

  parent reply	other threads:[~2019-12-16 17:08 UTC|newest]

Thread overview: 136+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-16 17:03 [PATCH 00/55] Improve wfx driver Jérôme Pouiller
2019-12-16 17:03 ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 01/55] staging: wfx: fix the cache of rate policies on interface reset Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-17 11:52   ` Greg Kroah-Hartman
2019-12-17 11:52     ` Greg Kroah-Hartman
2019-12-17 14:35     ` Jérôme Pouiller
2019-12-17 14:35       ` Jérôme Pouiller
2019-12-17 14:49       ` Greg Kroah-Hartman
2019-12-17 14:49         ` Greg Kroah-Hartman
2019-12-16 17:03 ` [PATCH 03/55] staging: wfx: fix counter overflow Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 02/55] staging: wfx: fix case of lack of tx_retry_policies Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 05/55] staging: wfx: firmware does not support more than 32 total retries Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 04/55] staging: wfx: use boolean appropriately Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 07/55] staging: wfx: ensure that retry policy always fallbacks to MCS0 / 1Mbps Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 18:08   ` Felix Fietkau
2019-12-16 18:08     ` Felix Fietkau
2019-12-17 11:01     ` Jérôme Pouiller
2019-12-17 11:01       ` Jérôme Pouiller
2019-12-17 11:20       ` Felix Fietkau
2019-12-17 11:20         ` Felix Fietkau
2019-12-17 15:15         ` Jérôme Pouiller
2019-12-17 15:15           ` Jérôme Pouiller
2019-12-18 11:25           ` Felix Fietkau
2019-12-18 11:25             ` Felix Fietkau
2019-12-16 17:03 ` [PATCH 06/55] staging: wfx: fix rate control handling Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 08/55] staging: wfx: detect race condition in WEP authentication Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 09/55] staging: wfx: fix hif_set_mfp() with big endian hosts Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 10/55] staging: wfx: fix wrong error message Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 11/55] staging: wfx: increase SPI bus frequency limit Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 13/55] staging: wfx: avoid double warning when no more tx policy are available Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2020-01-03  9:21   ` Dan Carpenter
2020-01-03  9:21     ` Dan Carpenter
2020-01-03 10:39     ` Jérôme Pouiller
2020-01-03 10:39       ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 14/55] staging: wfx: improve error message on unexpected confirmation Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 12/55] staging: wfx: don't print useless error messages Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 15/55] staging: wfx: take advantage of IS_ERR_OR_NULL() Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 16/55] staging: wfx: uniformize naming rule Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 17/55] staging: wfx: use meaningful names for CFG_BYTE_ORDER_* Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 18/55] staging: wfx: remove useless include Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 20/55] staging: wfx: make conditions easier to read Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 19/55] staging: wfx: simplify variable assignment Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 21/55] staging: wfx: ensure that traces never modify arguments Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 22/55] staging: wfx: ensure that received hif messages are never modified Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 23/55] staging: wfx: fix typo in "num_of_ssi_ds" Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 25/55] staging: wfx: fix name of struct hif_req_start_scan_alt Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2020-01-03  9:27   ` Dan Carpenter
2020-01-03  9:27     ` Dan Carpenter
2020-01-03 10:30     ` Jérôme Pouiller
2020-01-03 10:30       ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 24/55] staging: wfx: fix typo in "num_i_es" Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 26/55] staging: wfx: improve API of hif_req_join->infrastructure_bss_mode Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 27/55] staging: wfx: better naming for hif_req_join->short_preamble Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 28/55] staging: wfx: better naming for hif_mib_set_association_mode->greenfield Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 29/55] staging: wfx: simplify handling of tx_lock in wfx_do_join() Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 31/55] staging: wfx: declare wfx_set_pm() static Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 30/55] staging: wfx: firmware already handle powersave mode during scan Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 33/55] staging: wfx: remove redundant test while calling wfx_update_pm() Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 32/55] staging: wfx: drop useless argument from wfx_set_pm() Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 34/55] staging: wfx: drop unnecessary wvif->powersave_mode Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 35/55] staging: wfx: do not try to save call to hif_set_pm() Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 37/55] staging: wfx: simplify wfx_conf_tx() Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 36/55] staging: wfx: fix pm_mode timeout Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 38/55] staging: wfx: prefer a bitmask instead of an array of boolean Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 39/55] staging: wfx: simplify hif_set_uapsd_info() usage Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 40/55] staging: wfx: simplify hif_set_pm() usage Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 41/55] staging: wfx: drop struct wfx_edca_params Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 43/55] staging: wfx: simplify hif_set_edca_queue_params() usage Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 42/55] staging: wfx: remove unnecessary EDCA initialisation Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 45/55] staging: wfx: device already handle sleep mode during scan Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 44/55] staging: wfx: hif_scan() never fails Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 46/55] staging: wfx: drop useless wfx_scan_complete() Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` Jérôme Pouiller [this message]
2019-12-16 17:03   ` [PATCH 47/55] staging: wfx: simplify hif_scan() usage Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 48/55] staging: wfx: introduce update_probe_tmpl() Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 49/55] staging: wfx: simplify hif_set_template_frame() usage Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 50/55] staging: wfx: rewrite wfx_hw_scan() Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 51/55] staging: wfx: workaround bug with "iw scan" Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:03 ` [PATCH 52/55] staging: wfx: delayed_unjoin cannot happen Jérôme Pouiller
2019-12-16 17:03   ` Jérôme Pouiller
2019-12-16 17:04 ` [PATCH 53/55] staging: wfx: delayed_link_loss " Jérôme Pouiller
2019-12-16 17:04   ` Jérôme Pouiller
2019-12-16 17:04 ` [PATCH 54/55] staging: wfx: implement cancel_hw_scan() Jérôme Pouiller
2019-12-16 17:04   ` Jérôme Pouiller
2019-12-16 17:04 ` [PATCH 55/55] staging: wfx: update TODO Jérôme Pouiller
2019-12-16 17:04   ` Jérôme Pouiller

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=20191216170302.29543-48-Jerome.Pouiller@silabs.com \
    --to=jerome.pouiller@silabs.com \
    --cc=davem@davemloft.net \
    --cc=devel@driverdev.osuosl.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=kvalo@codeaurora.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=netdev@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.