aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArend Van Spriel2017-09-12 03:47:54 -0500
committerGreg Kroah-Hartman2017-10-12 04:27:35 -0500
commitb8af4466255c0898c6ba14b729926d610a89d86a (patch)
treec6a21a1463df62f5eb6e2ee759ebc9ca8c83b5c1
parentee5bd0e4e69fcf8e4194d9ad7de2241346c9bbbf (diff)
downloadti-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.c19
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h5
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(&params_le->ssid_le, 0, sizeof(params_le->ssid_le)); 885 memset(&params_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(&params_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