Commit f568adac authored by Rafał Miłecki's avatar Rafał Miłecki Committed by Kalle Valo

brcmfmac: slightly simplify building interface combinations

This change reorders some operations in brcmf_setup_ifmodes in hope to
make it simpler:
1) It allocates arrays right before filling them. This way it's easier
   to follow requested array length as it's immediately followed by
   code filling it. It's easier to check e.g. why we need 4 entries for
   P2P. Other than that it deduplicates some checks (e.g. for P2P).
2) It reorders code to first prepare limits and then define a new combo.
   Previously this was mixed (e.g. we were setting num of channels
   before preparing limits).
3) It modifies mbss code to use i variable just like other combos do.
Signed-off-by: default avatarRafał Miłecki <zajec5@gmail.com>
Acked-by: default avatarArend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 742fb20f
...@@ -6284,29 +6284,15 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp) ...@@ -6284,29 +6284,15 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp)
if (!combo) if (!combo)
goto err; goto err;
c0_limits = kcalloc(p2p ? 3 : 2, sizeof(*c0_limits), GFP_KERNEL);
if (!c0_limits)
goto err;
if (p2p) {
p2p_limits = kcalloc(4, sizeof(*p2p_limits), GFP_KERNEL);
if (!p2p_limits)
goto err;
}
if (mbss) {
mbss_limits = kcalloc(1, sizeof(*mbss_limits), GFP_KERNEL);
if (!mbss_limits)
goto err;
}
wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_ADHOC) |
BIT(NL80211_IFTYPE_AP); BIT(NL80211_IFTYPE_AP);
c = 0; c = 0;
i = 0; i = 0;
combo[c].num_different_channels = 1; c0_limits = kcalloc(p2p ? 3 : 2, sizeof(*c0_limits), GFP_KERNEL);
if (!c0_limits)
goto err;
c0_limits[i].max = 1; c0_limits[i].max = 1;
c0_limits[i++].types = BIT(NL80211_IFTYPE_STATION); c0_limits[i++].types = BIT(NL80211_IFTYPE_STATION);
if (p2p) { if (p2p) {
...@@ -6324,6 +6310,7 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp) ...@@ -6324,6 +6310,7 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp)
c0_limits[i].max = 1; c0_limits[i].max = 1;
c0_limits[i++].types = BIT(NL80211_IFTYPE_AP); c0_limits[i++].types = BIT(NL80211_IFTYPE_AP);
} }
combo[c].num_different_channels = 1;
combo[c].max_interfaces = i; combo[c].max_interfaces = i;
combo[c].n_limits = i; combo[c].n_limits = i;
combo[c].limits = c0_limits; combo[c].limits = c0_limits;
...@@ -6331,7 +6318,9 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp) ...@@ -6331,7 +6318,9 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp)
if (p2p) { if (p2p) {
c++; c++;
i = 0; i = 0;
combo[c].num_different_channels = 1; p2p_limits = kcalloc(4, sizeof(*p2p_limits), GFP_KERNEL);
if (!p2p_limits)
goto err;
p2p_limits[i].max = 1; p2p_limits[i].max = 1;
p2p_limits[i++].types = BIT(NL80211_IFTYPE_STATION); p2p_limits[i++].types = BIT(NL80211_IFTYPE_STATION);
p2p_limits[i].max = 1; p2p_limits[i].max = 1;
...@@ -6340,6 +6329,7 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp) ...@@ -6340,6 +6329,7 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp)
p2p_limits[i++].types = BIT(NL80211_IFTYPE_P2P_CLIENT); p2p_limits[i++].types = BIT(NL80211_IFTYPE_P2P_CLIENT);
p2p_limits[i].max = 1; p2p_limits[i].max = 1;
p2p_limits[i++].types = BIT(NL80211_IFTYPE_P2P_DEVICE); p2p_limits[i++].types = BIT(NL80211_IFTYPE_P2P_DEVICE);
combo[c].num_different_channels = 1;
combo[c].max_interfaces = i; combo[c].max_interfaces = i;
combo[c].n_limits = i; combo[c].n_limits = i;
combo[c].limits = p2p_limits; combo[c].limits = p2p_limits;
...@@ -6347,14 +6337,19 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp) ...@@ -6347,14 +6337,19 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp)
if (mbss) { if (mbss) {
c++; c++;
i = 0;
mbss_limits = kcalloc(1, sizeof(*mbss_limits), GFP_KERNEL);
if (!mbss_limits)
goto err;
mbss_limits[i].max = 4;
mbss_limits[i++].types = BIT(NL80211_IFTYPE_AP);
combo[c].beacon_int_infra_match = true; combo[c].beacon_int_infra_match = true;
combo[c].num_different_channels = 1; combo[c].num_different_channels = 1;
mbss_limits[0].max = 4;
mbss_limits[0].types = BIT(NL80211_IFTYPE_AP);
combo[c].max_interfaces = 4; combo[c].max_interfaces = 4;
combo[c].n_limits = 1; combo[c].n_limits = i;
combo[c].limits = mbss_limits; combo[c].limits = mbss_limits;
} }
wiphy->n_iface_combinations = n_combos; wiphy->n_iface_combinations = n_combos;
wiphy->iface_combinations = combo; wiphy->iface_combinations = combo;
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment