mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 17:18:59 +00:00
aca274091a
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
104 lines
3.8 KiB
Diff
104 lines
3.8 KiB
Diff
From 24332f8068ff6df7f16aefee45d514de1de4de80 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
|
Date: Thu, 26 Dec 2019 14:30:49 +0100
|
|
Subject: [PATCH] brcmfmac: simplify building interface combinations
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Move similar/duplicated code out of combination specific code blocks.
|
|
This simplifies code a bit and allows adding more combinations later.
|
|
A list of combinations remains unchanged.
|
|
|
|
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
|
---
|
|
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 43 ++++++-------------
|
|
1 file changed, 14 insertions(+), 29 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
@@ -6479,12 +6479,13 @@ static int brcmf_setup_ifmodes(struct wi
|
|
struct ieee80211_iface_limit *c0_limits = NULL;
|
|
struct ieee80211_iface_limit *p2p_limits = NULL;
|
|
struct ieee80211_iface_limit *mbss_limits = NULL;
|
|
- bool mbss, p2p, rsdb;
|
|
+ bool mbss, p2p, rsdb, mchan;
|
|
int i, c, n_combos;
|
|
|
|
mbss = brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MBSS);
|
|
p2p = brcmf_feat_is_enabled(ifp, BRCMF_FEAT_P2P);
|
|
rsdb = brcmf_feat_is_enabled(ifp, BRCMF_FEAT_RSDB);
|
|
+ mchan = brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MCHAN);
|
|
|
|
n_combos = 1 + !!(p2p && !rsdb) + !!mbss;
|
|
combo = kcalloc(n_combos, sizeof(*combo), GFP_KERNEL);
|
|
@@ -6494,6 +6495,10 @@ static int brcmf_setup_ifmodes(struct wi
|
|
wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
|
|
BIT(NL80211_IFTYPE_ADHOC) |
|
|
BIT(NL80211_IFTYPE_AP);
|
|
+ if (p2p)
|
|
+ wiphy->interface_modes |= BIT(NL80211_IFTYPE_P2P_CLIENT) |
|
|
+ BIT(NL80211_IFTYPE_P2P_GO) |
|
|
+ BIT(NL80211_IFTYPE_P2P_DEVICE);
|
|
|
|
c = 0;
|
|
i = 0;
|
|
@@ -6505,48 +6510,28 @@ static int brcmf_setup_ifmodes(struct wi
|
|
c0_limits = kcalloc(2, sizeof(*c0_limits), GFP_KERNEL);
|
|
if (!c0_limits)
|
|
goto err;
|
|
- if (p2p && rsdb) {
|
|
- combo[c].num_different_channels = 2;
|
|
- wiphy->interface_modes |= BIT(NL80211_IFTYPE_P2P_CLIENT) |
|
|
- BIT(NL80211_IFTYPE_P2P_GO) |
|
|
- BIT(NL80211_IFTYPE_P2P_DEVICE);
|
|
- c0_limits[i].max = 2;
|
|
- c0_limits[i++].types = BIT(NL80211_IFTYPE_STATION);
|
|
+
|
|
+ combo[c].num_different_channels = 1 + (rsdb || (p2p && mchan));
|
|
+ c0_limits[i].max = 1 + rsdb;
|
|
+ c0_limits[i++].types = BIT(NL80211_IFTYPE_STATION);
|
|
+ if (p2p) {
|
|
c0_limits[i].max = 1;
|
|
c0_limits[i++].types = BIT(NL80211_IFTYPE_P2P_DEVICE);
|
|
- c0_limits[i].max = 2;
|
|
+ c0_limits[i].max = 1 + rsdb;
|
|
c0_limits[i++].types = BIT(NL80211_IFTYPE_P2P_CLIENT) |
|
|
BIT(NL80211_IFTYPE_P2P_GO);
|
|
+ }
|
|
+ if (p2p && rsdb) {
|
|
c0_limits[i].max = 2;
|
|
c0_limits[i++].types = BIT(NL80211_IFTYPE_AP);
|
|
combo[c].max_interfaces = 5;
|
|
} else if (p2p) {
|
|
- if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MCHAN))
|
|
- combo[c].num_different_channels = 2;
|
|
- else
|
|
- combo[c].num_different_channels = 1;
|
|
- c0_limits[i].max = 1;
|
|
- c0_limits[i++].types = BIT(NL80211_IFTYPE_STATION);
|
|
- wiphy->interface_modes |= BIT(NL80211_IFTYPE_P2P_CLIENT) |
|
|
- BIT(NL80211_IFTYPE_P2P_GO) |
|
|
- BIT(NL80211_IFTYPE_P2P_DEVICE);
|
|
- c0_limits[i].max = 1;
|
|
- c0_limits[i++].types = BIT(NL80211_IFTYPE_P2P_DEVICE);
|
|
- c0_limits[i].max = 1;
|
|
- c0_limits[i++].types = BIT(NL80211_IFTYPE_P2P_CLIENT) |
|
|
- BIT(NL80211_IFTYPE_P2P_GO);
|
|
combo[c].max_interfaces = i;
|
|
} else if (rsdb) {
|
|
- combo[c].num_different_channels = 2;
|
|
- c0_limits[i].max = 2;
|
|
- c0_limits[i++].types = BIT(NL80211_IFTYPE_STATION);
|
|
c0_limits[i].max = 2;
|
|
c0_limits[i++].types = BIT(NL80211_IFTYPE_AP);
|
|
combo[c].max_interfaces = 3;
|
|
} else {
|
|
- combo[c].num_different_channels = 1;
|
|
- c0_limits[i].max = 1;
|
|
- c0_limits[i++].types = BIT(NL80211_IFTYPE_STATION);
|
|
c0_limits[i].max = 1;
|
|
c0_limits[i++].types = BIT(NL80211_IFTYPE_AP);
|
|
combo[c].max_interfaces = i;
|