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: Adham Abozaeid <adham.abozaeid@microchip.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
b43f6a60e2
Коммит
f5a3cb90b8
|
@ -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:
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
|
|
Загрузка…
Ссылка в новой задаче