Commit f5a3cb90 authored by Adham Abozaeid's avatar Adham Abozaeid Committed by Greg Kroah-Hartman
Browse files

staging: wilc1000: add passive scan support



Add passive scan support to the driver by passing the scan type to the
HW and configure the HW scan time if configured by the cfg80211.

Signed-off-by: default avatarAdham Abozaeid <adham.abozaeid@microchip.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent b43f6a60
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@

#include "wilc_wfi_netdevice.h"

#define WILC_HIF_SCAN_TIMEOUT_MS                4000
#define WILC_HIF_SCAN_TIMEOUT_MS                5000
#define WILC_HIF_CONNECT_TIMEOUT_MS             9500

#define WILC_FALSE_FRMWR_CHANNEL		100
@@ -237,7 +237,7 @@ int wilc_scan(struct wilc_vif *vif, u8 scan_source, u8 scan_type,
	int result = 0;
	struct wid wid_list[5];
	u32 index = 0;
	u32 i;
	u32 i, scan_timeout;
	u8 *buffer;
	u8 valuesize = 0;
	u8 *search_ssid_vals = NULL;
@@ -293,6 +293,18 @@ int wilc_scan(struct wilc_vif *vif, u8 scan_source, u8 scan_type,
	wid_list[index].val = (s8 *)&scan_type;
	index++;

	if (scan_type == WILC_FW_PASSIVE_SCAN && request->duration) {
		wid_list[index].id = WID_PASSIVE_SCAN_TIME;
		wid_list[index].type = WID_SHORT;
		wid_list[index].size = sizeof(u16);
		wid_list[index].val = (s8 *)&request->duration;
		index++;

		scan_timeout = (request->duration * ch_list_len) + 500;
	} else {
		scan_timeout = WILC_HIF_SCAN_TIMEOUT_MS;
	}

	wid_list[index].id = WID_SCAN_CHANNEL_LIST;
	wid_list[index].type = WID_BIN_DATA;

@@ -326,7 +338,7 @@ int wilc_scan(struct wilc_vif *vif, u8 scan_source, u8 scan_type,

	hif_drv->scan_timer_vif = vif;
	mod_timer(&hif_drv->scan_timer,
		  jiffies + msecs_to_jiffies(WILC_HIF_SCAN_TIMEOUT_MS));
		  jiffies + msecs_to_jiffies(scan_timeout));

error:

+0 −1
Original line number Diff line number Diff line
@@ -115,7 +115,6 @@ struct wilc_rcvd_net_info {
	struct ieee80211_mgmt *mgmt;
};


struct wilc_user_scan_req {
	void (*scan_result)(enum scan_event evt,
			    struct wilc_rcvd_net_info *info, void *priv);
+9 −3
Original line number Diff line number Diff line
@@ -221,6 +221,7 @@ static int scan(struct wiphy *wiphy, struct cfg80211_scan_request *request)
	u32 i;
	int ret = 0;
	u8 scan_ch_list[WILC_MAX_NUM_SCANNED_CH];
	u8 scan_type;

	if (request->n_channels > WILC_MAX_NUM_SCANNED_CH) {
		netdev_err(priv->dev, "Requested scanned channels over\n");
@@ -235,9 +236,14 @@ static int scan(struct wiphy *wiphy, struct cfg80211_scan_request *request)
		scan_ch_list[i] = ieee80211_frequency_to_channel(freq);
	}

	ret = wilc_scan(vif, WILC_FW_USER_SCAN, WILC_FW_ACTIVE_SCAN,
			scan_ch_list, request->n_channels, cfg_scan_result,
			(void *)priv, request);
	if (request->n_ssids)
		scan_type = WILC_FW_ACTIVE_SCAN;
	else
		scan_type = WILC_FW_PASSIVE_SCAN;

	ret = wilc_scan(vif, WILC_FW_USER_SCAN, scan_type, scan_ch_list,
			request->n_channels, cfg_scan_result, (void *)priv,
			request);

	if (ret) {
		priv->scan_req = NULL;
+1 −1
Original line number Diff line number Diff line
@@ -684,7 +684,7 @@ enum {
	WID_LONG_RETRY_LIMIT		= 0x1003,
	WID_BEACON_INTERVAL		= 0x1006,
	WID_MEMORY_ACCESS_16BIT		= 0x1008,

	WID_PASSIVE_SCAN_TIME           = 0x100D,
	WID_JOIN_START_TIMEOUT		= 0x100F,
	WID_ASOC_TIMEOUT		= 0x1011,
	WID_11I_PROTOCOL_TIMEOUT	= 0x1012,