diff options
author | Arend Van Spriel <arend.vanspriel@broadcom.com> | 2017-09-12 04:47:54 -0400 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2017-09-20 00:46:30 -0400 |
commit | 35f62727df0ed8e5e4857e162d94fd46d861f1cf (patch) | |
tree | 133d7a4ca827253be9911e8be002a0bfe451123e | |
parent | 17df6453d4be17910456e99c5a85025aa1b7a246 (diff) |
brcmfmac: setup passive scan if requested by user-space
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.
Cc: stable@vger.kernel.org # v4.0.x
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>
-rw-r--r-- | drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 19 | ||||
-rw-r--r-- | drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h | 5 |
2 files changed, 9 insertions, 15 deletions
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c index 26a0de371c26..4157c90ad973 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | |||
@@ -980,7 +980,7 @@ static void brcmf_escan_prep(struct brcmf_cfg80211_info *cfg, | |||
980 | 980 | ||
981 | eth_broadcast_addr(params_le->bssid); | 981 | eth_broadcast_addr(params_le->bssid); |
982 | params_le->bss_type = DOT11_BSSTYPE_ANY; | 982 | params_le->bss_type = DOT11_BSSTYPE_ANY; |
983 | params_le->scan_type = 0; | 983 | params_le->scan_type = BRCMF_SCANTYPE_ACTIVE; |
984 | params_le->channel_num = 0; | 984 | params_le->channel_num = 0; |
985 | params_le->nprobes = cpu_to_le32(-1); | 985 | params_le->nprobes = cpu_to_le32(-1); |
986 | params_le->active_time = cpu_to_le32(-1); | 986 | params_le->active_time = cpu_to_le32(-1); |
@@ -988,12 +988,9 @@ static void brcmf_escan_prep(struct brcmf_cfg80211_info *cfg, | |||
988 | params_le->home_time = cpu_to_le32(-1); | 988 | params_le->home_time = cpu_to_le32(-1); |
989 | memset(¶ms_le->ssid_le, 0, sizeof(params_le->ssid_le)); | 989 | memset(¶ms_le->ssid_le, 0, sizeof(params_le->ssid_le)); |
990 | 990 | ||
991 | /* if request is null exit so it will be all channel broadcast scan */ | ||
992 | if (!request) | ||
993 | return; | ||
994 | |||
995 | n_ssids = request->n_ssids; | 991 | n_ssids = request->n_ssids; |
996 | n_channels = request->n_channels; | 992 | n_channels = request->n_channels; |
993 | |||
997 | /* Copy channel array if applicable */ | 994 | /* Copy channel array if applicable */ |
998 | brcmf_dbg(SCAN, "### List of channelspecs to scan ### %d\n", | 995 | brcmf_dbg(SCAN, "### List of channelspecs to scan ### %d\n", |
999 | n_channels); | 996 | n_channels); |
@@ -1030,16 +1027,8 @@ static void brcmf_escan_prep(struct brcmf_cfg80211_info *cfg, | |||
1030 | ptr += sizeof(ssid_le); | 1027 | ptr += sizeof(ssid_le); |
1031 | } | 1028 | } |
1032 | } else { | 1029 | } else { |
1033 | brcmf_dbg(SCAN, "Broadcast scan %p\n", request->ssids); | 1030 | brcmf_dbg(SCAN, "Performing passive scan\n"); |
1034 | if ((request->ssids) && request->ssids->ssid_len) { | 1031 | params_le->scan_type = BRCMF_SCANTYPE_PASSIVE; |
1035 | brcmf_dbg(SCAN, "SSID %s len=%d\n", | ||
1036 | params_le->ssid_le.SSID, | ||
1037 | request->ssids->ssid_len); | ||
1038 | params_le->ssid_le.SSID_len = | ||
1039 | cpu_to_le32(request->ssids->ssid_len); | ||
1040 | memcpy(¶ms_le->ssid_le.SSID, request->ssids->ssid, | ||
1041 | request->ssids->ssid_len); | ||
1042 | } | ||
1043 | } | 1032 | } |
1044 | /* Adding mask to channel numbers */ | 1033 | /* Adding mask to channel numbers */ |
1045 | params_le->channel_num = | 1034 | params_le->channel_num = |
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h index 8391989b1882..e0d22fedb2b4 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h +++ b/drivers/net/wireless/broadcom/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 | #define BRCMF_WSEC_MAX_PSK_LEN 32 | 53 | #define BRCMF_WSEC_MAX_PSK_LEN 32 |
49 | #define BRCMF_WSEC_PASSPHRASE BIT(0) | 54 | #define BRCMF_WSEC_PASSPHRASE BIT(0) |
50 | 55 | ||