aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/broadcom
diff options
context:
space:
mode:
authorHante Meuleman <hante.meuleman@broadcom.com>2016-09-19 07:09:51 -0400
committerKalle Valo <kvalo@codeaurora.org>2016-09-26 13:35:51 -0400
commitb3589dfe02123a0d0ea82076a9f8ef84a46852c0 (patch)
tree8086d7623386ed5f2ac73bd17f1c95eb4201ce42 /drivers/net/wireless/broadcom
parent89951db2be53106edbe0d24b3b5f9a787326daf6 (diff)
brcmfmac: ignore 11d configuration errors
802.11d is not always supported by firmware anymore. Currently the AP configuration of 11d will cause an abort if the ioctl set is failing. This behavior is not correct and the error should be ignored. Reviewed-by: Arend Van Spriel <arend.vanspriel@broadcom.com> Reviewed-by: Franky Lin <franky.lin@broadcom.com> Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com> Signed-off-by: Hante Meuleman <hante.meuleman@broadcom.com> Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/broadcom')
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index 748eaa68cf07..0f2667e95e81 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -4502,6 +4502,7 @@ brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev,
4502 u16 chanspec = chandef_to_chanspec(&cfg->d11inf, &settings->chandef); 4502 u16 chanspec = chandef_to_chanspec(&cfg->d11inf, &settings->chandef);
4503 bool mbss; 4503 bool mbss;
4504 int is_11d; 4504 int is_11d;
4505 bool supports_11d;
4505 4506
4506 brcmf_dbg(TRACE, "ctrlchn=%d, center=%d, bw=%d, beacon_interval=%d, dtim_period=%d,\n", 4507 brcmf_dbg(TRACE, "ctrlchn=%d, center=%d, bw=%d, beacon_interval=%d, dtim_period=%d,\n",
4507 settings->chandef.chan->hw_value, 4508 settings->chandef.chan->hw_value,
@@ -4514,11 +4515,16 @@ brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev,
4514 mbss = ifp->vif->mbss; 4515 mbss = ifp->vif->mbss;
4515 4516
4516 /* store current 11d setting */ 4517 /* store current 11d setting */
4517 brcmf_fil_cmd_int_get(ifp, BRCMF_C_GET_REGULATORY, &ifp->vif->is_11d); 4518 if (brcmf_fil_cmd_int_get(ifp, BRCMF_C_GET_REGULATORY,
4518 country_ie = brcmf_parse_tlvs((u8 *)settings->beacon.tail, 4519 &ifp->vif->is_11d)) {
4519 settings->beacon.tail_len, 4520 supports_11d = false;
4520 WLAN_EID_COUNTRY); 4521 } else {
4521 is_11d = country_ie ? 1 : 0; 4522 country_ie = brcmf_parse_tlvs((u8 *)settings->beacon.tail,
4523 settings->beacon.tail_len,
4524 WLAN_EID_COUNTRY);
4525 is_11d = country_ie ? 1 : 0;
4526 supports_11d = true;
4527 }
4522 4528
4523 memset(&ssid_le, 0, sizeof(ssid_le)); 4529 memset(&ssid_le, 0, sizeof(ssid_le));
4524 if (settings->ssid == NULL || settings->ssid_len == 0) { 4530 if (settings->ssid == NULL || settings->ssid_len == 0) {
@@ -4577,7 +4583,7 @@ brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev,
4577 4583
4578 /* Parameters shared by all radio interfaces */ 4584 /* Parameters shared by all radio interfaces */
4579 if (!mbss) { 4585 if (!mbss) {
4580 if (is_11d != ifp->vif->is_11d) { 4586 if ((supports_11d) && (is_11d != ifp->vif->is_11d)) {
4581 err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_REGULATORY, 4587 err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_REGULATORY,
4582 is_11d); 4588 is_11d);
4583 if (err < 0) { 4589 if (err < 0) {
@@ -4619,7 +4625,7 @@ brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev,
4619 brcmf_err("SET INFRA error %d\n", err); 4625 brcmf_err("SET INFRA error %d\n", err);
4620 goto exit; 4626 goto exit;
4621 } 4627 }
4622 } else if (WARN_ON(is_11d != ifp->vif->is_11d)) { 4628 } else if (WARN_ON(supports_11d && (is_11d != ifp->vif->is_11d))) {
4623 /* Multiple-BSS should use same 11d configuration */ 4629 /* Multiple-BSS should use same 11d configuration */
4624 err = -EINVAL; 4630 err = -EINVAL;
4625 goto exit; 4631 goto exit;
@@ -4753,11 +4759,8 @@ static int brcmf_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *ndev)
4753 brcmf_err("setting INFRA mode failed %d\n", err); 4759 brcmf_err("setting INFRA mode failed %d\n", err);
4754 if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MBSS)) 4760 if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MBSS))
4755 brcmf_fil_iovar_int_set(ifp, "mbss", 0); 4761 brcmf_fil_iovar_int_set(ifp, "mbss", 0);
4756 err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_REGULATORY, 4762 brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_REGULATORY,
4757 ifp->vif->is_11d); 4763 ifp->vif->is_11d);
4758 if (err < 0)
4759 brcmf_err("restoring REGULATORY setting failed %d\n",
4760 err);
4761 /* Bring device back up so it can be used again */ 4764 /* Bring device back up so it can be used again */
4762 err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_UP, 1); 4765 err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_UP, 1);
4763 if (err < 0) 4766 if (err < 0)