mwifiex: add RSSI support for net-detect
authorGanapathi Bhat <gbhat@marvell.com>
Wed, 13 Jan 2016 09:26:56 +0000 (01:26 -0800)
committerKalle Valo <kvalo@codeaurora.org>
Fri, 29 Jan 2016 09:20:41 +0000 (11:20 +0200)
This patch adds support for waking up the device on
finding better RSSI. Threshold RSSI value will be
configured by application.

Signed-off-by: Ganapathi Bhat <gbhat@marvell.com>
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/marvell/mwifiex/cfg80211.c
drivers/net/wireless/marvell/mwifiex/fw.h
drivers/net/wireless/marvell/mwifiex/scan.c

index c80d9e2daa16163e4465b067bd52f5babfd25f64..84615533986c4e35d06623a7ce03d3f6a9ff9321 100644 (file)
@@ -2582,6 +2582,10 @@ mwifiex_cfg80211_sched_scan_start(struct wiphy *wiphy,
        bgscan_cfg->bss_type = MWIFIEX_BSS_MODE_INFRA;
        bgscan_cfg->action = MWIFIEX_BGSCAN_ACT_SET;
        bgscan_cfg->enable = true;
+       if (request->min_rssi_thold != NL80211_SCAN_RSSI_THOLD_OFF) {
+               bgscan_cfg->report_condition |= MWIFIEX_BGSCAN_SSID_RSSI_MATCH;
+               bgscan_cfg->rssi_threshold = request->min_rssi_thold;
+       }
 
        if (mwifiex_send_cmd(priv, HostCmd_CMD_802_11_BG_SCAN_CONFIG,
                             HostCmd_ACT_GEN_SET, 0, bgscan_cfg, true)) {
index d293e485189be3e9b65fbfd9f7c9646e321d77d9..4af916817bcda0d60ffa6e2a52aadab43771c499 100644 (file)
@@ -759,6 +759,11 @@ struct mwifiex_ie_types_repeat_count {
        __le16 repeat_count;
 } __packed;
 
+struct mwifiex_ie_types_min_rssi_threshold {
+       struct mwifiex_ie_types_header header;
+       __le16 rssi_threshold;
+} __packed;
+
 struct mwifiex_ie_types_bgscan_start_later {
        struct mwifiex_ie_types_header header;
        __le16 start_later;
index 2702bd93f74d9ecea59702fa36172aeb7404297b..fc8d8ca674532a9ac62503c9dbe3b092800c080f 100644 (file)
@@ -2260,6 +2260,7 @@ int mwifiex_cmd_802_11_bg_scan_config(struct mwifiex_private *priv,
        int i;
        struct mwifiex_ie_types_num_probes *num_probes_tlv;
        struct mwifiex_ie_types_repeat_count *repeat_count_tlv;
+       struct mwifiex_ie_types_min_rssi_threshold *rssi_threshold_tlv;
        struct mwifiex_ie_types_bgscan_start_later *start_later_tlv;
        struct mwifiex_ie_types_wildcard_ssid_params *wildcard_ssid_tlv;
        struct mwifiex_ie_types_chan_list_param_set *chan_list_tlv;
@@ -2310,6 +2311,20 @@ int mwifiex_cmd_802_11_bg_scan_config(struct mwifiex_private *priv,
                        le16_to_cpu(repeat_count_tlv->header.len);
        }
 
+       if (bgscan_cfg_in->rssi_threshold) {
+               rssi_threshold_tlv =
+                       (struct mwifiex_ie_types_min_rssi_threshold *)tlv_pos;
+               rssi_threshold_tlv->header.type =
+                       cpu_to_le16(TLV_TYPE_RSSI_LOW);
+               rssi_threshold_tlv->header.len =
+                       cpu_to_le16(sizeof(rssi_threshold_tlv->rssi_threshold));
+               rssi_threshold_tlv->rssi_threshold =
+                       cpu_to_le16(bgscan_cfg_in->rssi_threshold);
+
+               tlv_pos += sizeof(rssi_threshold_tlv->header) +
+                       le16_to_cpu(rssi_threshold_tlv->header.len);
+       }
+
        for (i = 0; i < bgscan_cfg_in->num_ssids; i++) {
                ssid_len = bgscan_cfg_in->ssid_list[i].ssid.ssid_len;