diff options
author | Arend van Spriel <arend@broadcom.com> | 2014-05-27 06:56:14 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-05-29 13:08:11 -0400 |
commit | 0f0fe990e329583bf403f0c36d4e310d79e75b87 (patch) | |
tree | dfa226d51c9697c7688e0ada66bac59c12a583da | |
parent | 181f2d177ed1ed91633e6f39c599dedaa05844e8 (diff) |
brcmfmac: restore mpc before passing scan status to cfg80211
Before informing cfg80211 about the scan status the device should
be put back in mpc state. If done after user-space may initiate
another (scheduled) scan and fail because scan is still busy as
shown in logging below:
[ 3301.367376] brcmfmac: brcmf_fweh_event_worker event ESCAN_RESULT (69)
[ 3301.377305] brcmfmac: brcmf_fweh_event_worker version 2 flags 0 status 0
[ 3301.384993] brcmutil: event payload, len=12
[ 3301.389208] 00000000: 0c 00 00 00 6d 00 00 00 34 12 00 00
[ 3301.389214] brcmfmac: brcmf_sdio_kso_control Enter: on=0
[ 3301.402196] brcmfmac: brcmf_inform_bss scanned AP count (0)
[ 3301.407808] brcmfmac: brcmf_notify_escan_complete Enter
[ 3301.413064] brcmfmac: brcmf_notify_escan_complete ESCAN Completed scan: Done
[ 3301.420137] brcmfmac: brcmf_sdio_bus_txctl Enter
[ 3301.420368] brcmfmac: brcmf_cfg80211_sched_scan_start Enter
[ 3301.420370] brcmfmac: brcmf_cfg80211_sched_scan_start:
Scanning already: status (1)
[ 3301.440190] brcmfmac: brcmf_sdio_kso_control Enter: on=1
[ 3301.448695] brcmfmac: brcmf_sdio_tx_ctrlframe Enter
[ 3301.453662] brcmfmac: brcmf_sdio_bus_rxctl Enter
[ 3301.458326] brcmfmac: brcmf_sdio_isr Enter
[ 3301.462523] brcmfmac: brcmf_sdio_dpc Enter
[ 3301.466632] brcmfmac: brcmf_sdio_readframes Enter
[ 3301.471431] brcmfmac: brcmf_sdio_read_control Enter
[ 3301.476340] brcmfmac: brcmf_set_mpc MPC : 1
Reviewed-by: Hante Meuleman <meuleman@broadcom.com>
Reviewed-by: Daniel (Deognyoun) Kim <dekim@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c index 10aacc9bd91c..df42a10a4be5 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | |||
@@ -640,6 +640,9 @@ s32 brcmf_notify_escan_complete(struct brcmf_cfg80211_info *cfg, | |||
640 | if (err) | 640 | if (err) |
641 | brcmf_err("Scan abort failed\n"); | 641 | brcmf_err("Scan abort failed\n"); |
642 | } | 642 | } |
643 | |||
644 | brcmf_set_mpc(ifp, 1); | ||
645 | |||
643 | /* | 646 | /* |
644 | * e-scan can be initiated by scheduled scan | 647 | * e-scan can be initiated by scheduled scan |
645 | * which takes precedence. | 648 | * which takes precedence. |
@@ -649,12 +652,10 @@ s32 brcmf_notify_escan_complete(struct brcmf_cfg80211_info *cfg, | |||
649 | cfg->sched_escan = false; | 652 | cfg->sched_escan = false; |
650 | if (!aborted) | 653 | if (!aborted) |
651 | cfg80211_sched_scan_results(cfg_to_wiphy(cfg)); | 654 | cfg80211_sched_scan_results(cfg_to_wiphy(cfg)); |
652 | brcmf_set_mpc(ifp, 1); | ||
653 | } else if (scan_request) { | 655 | } else if (scan_request) { |
654 | brcmf_dbg(SCAN, "ESCAN Completed scan: %s\n", | 656 | brcmf_dbg(SCAN, "ESCAN Completed scan: %s\n", |
655 | aborted ? "Aborted" : "Done"); | 657 | aborted ? "Aborted" : "Done"); |
656 | cfg80211_scan_done(scan_request, aborted); | 658 | cfg80211_scan_done(scan_request, aborted); |
657 | brcmf_set_mpc(ifp, 1); | ||
658 | } | 659 | } |
659 | if (!test_and_clear_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status)) | 660 | if (!test_and_clear_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status)) |
660 | brcmf_dbg(SCAN, "Scan complete, probably P2P scan\n"); | 661 | brcmf_dbg(SCAN, "Scan complete, probably P2P scan\n"); |