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

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
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include "wilc_wfi_netdevice.h" #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_HIF_CONNECT_TIMEOUT_MS 9500
#define WILC_FALSE_FRMWR_CHANNEL 100 #define WILC_FALSE_FRMWR_CHANNEL 100
...@@ -237,7 +237,7 @@ int wilc_scan(struct wilc_vif *vif, u8 scan_source, u8 scan_type, ...@@ -237,7 +237,7 @@ int wilc_scan(struct wilc_vif *vif, u8 scan_source, u8 scan_type,
int result = 0; int result = 0;
struct wid wid_list[5]; struct wid wid_list[5];
u32 index = 0; u32 index = 0;
u32 i; u32 i, scan_timeout;
u8 *buffer; u8 *buffer;
u8 valuesize = 0; u8 valuesize = 0;
u8 *search_ssid_vals = NULL; u8 *search_ssid_vals = NULL;
...@@ -293,6 +293,18 @@ int wilc_scan(struct wilc_vif *vif, u8 scan_source, u8 scan_type, ...@@ -293,6 +293,18 @@ int wilc_scan(struct wilc_vif *vif, u8 scan_source, u8 scan_type,
wid_list[index].val = (s8 *)&scan_type; wid_list[index].val = (s8 *)&scan_type;
index++; 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].id = WID_SCAN_CHANNEL_LIST;
wid_list[index].type = WID_BIN_DATA; wid_list[index].type = WID_BIN_DATA;
...@@ -326,7 +338,7 @@ int wilc_scan(struct wilc_vif *vif, u8 scan_source, u8 scan_type, ...@@ -326,7 +338,7 @@ int wilc_scan(struct wilc_vif *vif, u8 scan_source, u8 scan_type,
hif_drv->scan_timer_vif = vif; hif_drv->scan_timer_vif = vif;
mod_timer(&hif_drv->scan_timer, mod_timer(&hif_drv->scan_timer,
jiffies + msecs_to_jiffies(WILC_HIF_SCAN_TIMEOUT_MS)); jiffies + msecs_to_jiffies(scan_timeout));
error: error:
......
...@@ -115,7 +115,6 @@ struct wilc_rcvd_net_info { ...@@ -115,7 +115,6 @@ struct wilc_rcvd_net_info {
struct ieee80211_mgmt *mgmt; struct ieee80211_mgmt *mgmt;
}; };
struct wilc_user_scan_req { struct wilc_user_scan_req {
void (*scan_result)(enum scan_event evt, void (*scan_result)(enum scan_event evt,
struct wilc_rcvd_net_info *info, void *priv); struct wilc_rcvd_net_info *info, void *priv);
......
...@@ -221,6 +221,7 @@ static int scan(struct wiphy *wiphy, struct cfg80211_scan_request *request) ...@@ -221,6 +221,7 @@ static int scan(struct wiphy *wiphy, struct cfg80211_scan_request *request)
u32 i; u32 i;
int ret = 0; int ret = 0;
u8 scan_ch_list[WILC_MAX_NUM_SCANNED_CH]; u8 scan_ch_list[WILC_MAX_NUM_SCANNED_CH];
u8 scan_type;
if (request->n_channels > WILC_MAX_NUM_SCANNED_CH) { if (request->n_channels > WILC_MAX_NUM_SCANNED_CH) {
netdev_err(priv->dev, "Requested scanned channels over\n"); netdev_err(priv->dev, "Requested scanned channels over\n");
...@@ -235,9 +236,14 @@ static int scan(struct wiphy *wiphy, struct cfg80211_scan_request *request) ...@@ -235,9 +236,14 @@ static int scan(struct wiphy *wiphy, struct cfg80211_scan_request *request)
scan_ch_list[i] = ieee80211_frequency_to_channel(freq); scan_ch_list[i] = ieee80211_frequency_to_channel(freq);
} }
ret = wilc_scan(vif, WILC_FW_USER_SCAN, WILC_FW_ACTIVE_SCAN, if (request->n_ssids)
scan_ch_list, request->n_channels, cfg_scan_result, scan_type = WILC_FW_ACTIVE_SCAN;
(void *)priv, request); 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) { if (ret) {
priv->scan_req = NULL; priv->scan_req = NULL;
......
...@@ -684,7 +684,7 @@ enum { ...@@ -684,7 +684,7 @@ enum {
WID_LONG_RETRY_LIMIT = 0x1003, WID_LONG_RETRY_LIMIT = 0x1003,
WID_BEACON_INTERVAL = 0x1006, WID_BEACON_INTERVAL = 0x1006,
WID_MEMORY_ACCESS_16BIT = 0x1008, WID_MEMORY_ACCESS_16BIT = 0x1008,
WID_PASSIVE_SCAN_TIME = 0x100D,
WID_JOIN_START_TIMEOUT = 0x100F, WID_JOIN_START_TIMEOUT = 0x100F,
WID_ASOC_TIMEOUT = 0x1011, WID_ASOC_TIMEOUT = 0x1011,
WID_11I_PROTOCOL_TIMEOUT = 0x1012, WID_11I_PROTOCOL_TIMEOUT = 0x1012,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment