diff options
author | Arend Van Spriel | 2017-09-12 03:47:54 -0500 |
---|---|---|
committer | Greg Kroah-Hartman | 2017-10-12 04:27:35 -0500 |
commit | b8af4466255c0898c6ba14b729926d610a89d86a (patch) | |
tree | c6a21a1463df62f5eb6e2ee759ebc9ca8c83b5c1 | |
parent | ee5bd0e4e69fcf8e4194d9ad7de2241346c9bbbf (diff) | |
download | ti-linux-kernel-b8af4466255c0898c6ba14b729926d610a89d86a.tar.gz ti-linux-kernel-b8af4466255c0898c6ba14b729926d610a89d86a.tar.xz ti-linux-kernel-b8af4466255c0898c6ba14b729926d610a89d86a.zip |
brcmfmac: setup passive scan if requested by user-space
commit 35f62727df0ed8e5e4857e162d94fd46d861f1cf upstream.
The driver was not properly configuring firmware with regard to the
type of scan. It always performed an active scan even when user-space
was requesting for passive scan, ie. the scan request was done without
any SSIDs specified.
Reported-by: Huang, Jiangyang <Jiangyang.Huang@itron.com>
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c | 19 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h | 5 |
2 files changed, 9 insertions, 15 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c index da5826d788d6..f18491cf793c 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c | |||
@@ -876,7 +876,7 @@ static void brcmf_escan_prep(struct brcmf_cfg80211_info *cfg, | |||
876 | 876 | ||
877 | eth_broadcast_addr(params_le->bssid); | 877 | eth_broadcast_addr(params_le->bssid); |
878 | params_le->bss_type = DOT11_BSSTYPE_ANY; | 878 | params_le->bss_type = DOT11_BSSTYPE_ANY; |
879 | params_le->scan_type = 0; | 879 | params_le->scan_type = BRCMF_SCANTYPE_ACTIVE; |
880 | params_le->channel_num = 0; | 880 | params_le->channel_num = 0; |
881 | params_le->nprobes = cpu_to_le32(-1); | 881 | params_le->nprobes = cpu_to_le32(-1); |
882 | params_le->active_time = cpu_to_le32(-1); | 882 | params_le->active_time = cpu_to_le32(-1); |
@@ -884,12 +884,9 @@ static void brcmf_escan_prep(struct brcmf_cfg80211_info *cfg, | |||
884 | params_le->home_time = cpu_to_le32(-1); | 884 | params_le->home_time = cpu_to_le32(-1); |
885 | memset(¶ms_le->ssid_le, 0, sizeof(params_le->ssid_le)); | 885 | memset(¶ms_le->ssid_le, 0, sizeof(params_le->ssid_le)); |
886 | 886 | ||
887 | /* if request is null exit so it will be all channel broadcast scan */ | ||
888 | if (!request) | ||
889 | return; | ||
890 | |||
891 | n_ssids = request->n_ssids; | 887 | n_ssids = request->n_ssids; |
892 | n_channels = request->n_channels; | 888 | n_channels = request->n_channels; |
889 | |||
893 | /* Copy channel array if applicable */ | 890 | /* Copy channel array if applicable */ |
894 | brcmf_dbg(SCAN, "### List of channelspecs to scan ### %d\n", | 891 | brcmf_dbg(SCAN, "### List of channelspecs to scan ### %d\n", |
895 | n_channels); | 892 | n_channels); |
@@ -926,16 +923,8 @@ static void brcmf_escan_prep(struct brcmf_cfg80211_info *cfg, | |||
926 | ptr += sizeof(ssid_le); | 923 | ptr += sizeof(ssid_le); |
927 | } | 924 | } |
928 | } else { | 925 | } else { |
929 | brcmf_dbg(SCAN, "Broadcast scan %p\n", request->ssids); | 926 | brcmf_dbg(SCAN, "Performing passive scan\n"); |
930 | if ((request->ssids) && request->ssids->ssid_len) { | 927 | params_le->scan_type = BRCMF_SCANTYPE_PASSIVE; |
931 | brcmf_dbg(SCAN, "SSID %s len=%d\n", | ||
932 | params_le->ssid_le.SSID, | ||
933 | request->ssids->ssid_len); | ||
934 | params_le->ssid_le.SSID_len = | ||
935 | cpu_to_le32(request->ssids->ssid_len); | ||
936 | memcpy(¶ms_le->ssid_le.SSID, request->ssids->ssid, | ||
937 | request->ssids->ssid_len); | ||
938 | } | ||
939 | } | 928 | } |
940 | /* Adding mask to channel numbers */ | 929 | /* Adding mask to channel numbers */ |
941 | params_le->channel_num = | 930 | params_le->channel_num = |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h b/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h index daa427b46712..4320c4cae53e 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h +++ b/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h | |||
@@ -45,6 +45,11 @@ | |||
45 | #define BRCMF_SCAN_PARAMS_COUNT_MASK 0x0000ffff | 45 | #define BRCMF_SCAN_PARAMS_COUNT_MASK 0x0000ffff |
46 | #define BRCMF_SCAN_PARAMS_NSSID_SHIFT 16 | 46 | #define BRCMF_SCAN_PARAMS_NSSID_SHIFT 16 |
47 | 47 | ||
48 | /* scan type definitions */ | ||
49 | #define BRCMF_SCANTYPE_DEFAULT 0xFF | ||
50 | #define BRCMF_SCANTYPE_ACTIVE 0 | ||
51 | #define BRCMF_SCANTYPE_PASSIVE 1 | ||
52 | |||
48 | /* primary (ie tx) key */ | 53 | /* primary (ie tx) key */ |
49 | #define BRCMF_PRIMARY_KEY (1 << 1) | 54 | #define BRCMF_PRIMARY_KEY (1 << 1) |
50 | #define DOT11_BSSTYPE_ANY 2 | 55 | #define DOT11_BSSTYPE_ANY 2 |