brcmfmac: reduce maximum station interface from 2 to 1 in RSDB mode
authorWright Feng <wright.feng@cypress.com>
Thu, 4 Jun 2020 07:18:34 +0000 (02:18 -0500)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 14 Jul 2020 09:43:45 +0000 (12:43 +0300)
The firmware state machines are not fully suitable for concurrent
station interface support, it may hit unexpected error if we have 2
different SSIDs and the roaming scenarios concurrently.
To avoid the bad user-experience if this is not fully validated, we
dis-allow user to create two concurrent station interfaces.

Signed-off-by: Wright Feng <wright.feng@cypress.com>
Signed-off-by: Chi-hsien Lin <chi-hsien.lin@cypress.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20200604071835.3842-5-wright.feng@cypress.com
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c

index a757abd..8c1801f 100644 (file)
@@ -6801,7 +6801,7 @@ brcmf_txrx_stypes[NUM_NL80211_IFTYPES] = {
  *     #AP <= 4, matching BI, channels = 1, 4 total
  *
  * no p2p and rsdb:
- *     #STA <= 2, #AP <= 2, channels = 2, 4 total
+ *     #STA <= 1, #AP <= 2, channels = 2, 4 total
  *
  * p2p, no mchan, and mbss:
  *
@@ -6816,7 +6816,7 @@ brcmf_txrx_stypes[NUM_NL80211_IFTYPES] = {
  *     #AP <= 4, matching BI, channels = 1, 4 total
  *
  * p2p, rsdb, and no mbss:
- *     #STA <= 2, #P2P-DEV <= 1, #{P2P-CL, P2P-GO} <= 2, AP <= 2,
+ *     #STA <= 1, #P2P-DEV <= 1, #{P2P-CL, P2P-GO} <= 2, AP <= 2,
  *      channels = 2, 4 total
  */
 static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp)
@@ -6857,7 +6857,7 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp)
                goto err;
 
        combo[c].num_different_channels = 1 + (rsdb || (p2p && mchan));
-       c0_limits[i].max = 1 + rsdb;
+       c0_limits[i].max = 1;
        c0_limits[i++].types = BIT(NL80211_IFTYPE_STATION);
        if (mon_flag) {
                c0_limits[i].max = 1;
@@ -6873,7 +6873,7 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp)
        if (p2p && rsdb) {
                c0_limits[i].max = 2;
                c0_limits[i++].types = BIT(NL80211_IFTYPE_AP);
-               combo[c].max_interfaces = 5;
+               combo[c].max_interfaces = 4;
        } else if (p2p) {
                combo[c].max_interfaces = i;
        } else if (rsdb) {