]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
staging: wilc1000: add passive scan support
authorAdham Abozaeid <adham.abozaeid@microchip.com>
Thu, 20 Jun 2019 19:54:55 +0000 (19:54 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Jun 2019 14:49:04 +0000 (16:49 +0200)
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>
drivers/staging/wilc1000/host_interface.c
drivers/staging/wilc1000/host_interface.h
drivers/staging/wilc1000/wilc_wfi_cfgoperations.c
drivers/staging/wilc1000/wilc_wlan_if.h

index ed15bd1bcd5602e97b8d86eae6d46ac50b83a04d..13c9915358d031498f70d924ec6ed7fe9308c745 100644 (file)
@@ -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:
 
index a907c6d33012f2c9ee0847ad061504bda9776c34..4fcc7a3c151d126773d93b03fe023979d650f4ef 100644 (file)
@@ -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);
index f6825727bf7741501c32798ba8bb9e706bc5767a..b0daa113666344ab7324b7ab2dde01bca3a70e90 100644 (file)
@@ -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;
index b15de36e32e04e410c6138ef7ec4eb11d9d8c40c..b89d0e0f04cc2d4ef6de8dcec8794c2a159056b3 100644 (file)
@@ -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,