mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-24 07:46:48 +00:00
5c4b2eb3dd
I needed a moment to figure out relation between this patchset and the nl80211: fix validation of scheduled scan info for wowlan netdetect It appears nl80211 commit will go on top of brcmfmac changes so it's safe to backport these patches. One patch that was excluded is commit 2a2a5d1835b6 ("brcmfmac: add .update_connect_params() callback") as it depends on missing commit 088e8df82f91 ("cfg80211: Add support to update connection parameters"). Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
79 lines
2.8 KiB
Diff
79 lines
2.8 KiB
Diff
From 0b57010fc18e12c19d14379cd739d4eb7c3898f3 Mon Sep 17 00:00:00 2001
|
|
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
|
|
Date: Fri, 27 Jan 2017 12:27:47 +0000
|
|
Subject: [PATCH] brcmfmac: allow wowlan support to be per device
|
|
|
|
The wowlan support is (partially) determined dynamic by checking the
|
|
device/firmware capabilities. So they can differ per device. So it
|
|
is not possible to use a static global. Instead use the global as a
|
|
template and use kmemdup(). When kmemdup() fails the template is used
|
|
unmodified.
|
|
|
|
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
|
|
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
|
|
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
|
|
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
|
---
|
|
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 26 ++++++++++++++++------
|
|
1 file changed, 19 insertions(+), 7 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
@@ -6337,7 +6337,7 @@ static void brcmf_wiphy_pno_params(struc
|
|
}
|
|
|
|
#ifdef CONFIG_PM
|
|
-static struct wiphy_wowlan_support brcmf_wowlan_support = {
|
|
+static const struct wiphy_wowlan_support brcmf_wowlan_support = {
|
|
.flags = WIPHY_WOWLAN_MAGIC_PKT | WIPHY_WOWLAN_DISCONNECT,
|
|
.n_patterns = BRCMF_WOWL_MAXPATTERNS,
|
|
.pattern_max_len = BRCMF_WOWL_MAXPATTERNSIZE,
|
|
@@ -6350,21 +6350,29 @@ static void brcmf_wiphy_wowl_params(stru
|
|
{
|
|
#ifdef CONFIG_PM
|
|
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
|
+ struct wiphy_wowlan_support *wowl;
|
|
+
|
|
+ wowl = kmemdup(&brcmf_wowlan_support, sizeof(brcmf_wowlan_support),
|
|
+ GFP_KERNEL);
|
|
+ if (!wowl) {
|
|
+ brcmf_err("only support basic wowlan features\n");
|
|
+ wiphy->wowlan = &brcmf_wowlan_support;
|
|
+ return;
|
|
+ }
|
|
|
|
if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_PNO)) {
|
|
if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL_ND)) {
|
|
- brcmf_wowlan_support.flags |= WIPHY_WOWLAN_NET_DETECT;
|
|
- brcmf_wowlan_support.max_nd_match_sets =
|
|
- BRCMF_PNO_MAX_PFN_COUNT;
|
|
+ wowl->flags |= WIPHY_WOWLAN_NET_DETECT;
|
|
+ wowl->max_nd_match_sets = BRCMF_PNO_MAX_PFN_COUNT;
|
|
init_waitqueue_head(&cfg->wowl.nd_data_wait);
|
|
}
|
|
}
|
|
if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL_GTK)) {
|
|
- brcmf_wowlan_support.flags |= WIPHY_WOWLAN_SUPPORTS_GTK_REKEY;
|
|
- brcmf_wowlan_support.flags |= WIPHY_WOWLAN_GTK_REKEY_FAILURE;
|
|
+ wowl->flags |= WIPHY_WOWLAN_SUPPORTS_GTK_REKEY;
|
|
+ wowl->flags |= WIPHY_WOWLAN_GTK_REKEY_FAILURE;
|
|
}
|
|
|
|
- wiphy->wowlan = &brcmf_wowlan_support;
|
|
+ wiphy->wowlan = wowl;
|
|
#endif
|
|
}
|
|
|
|
@@ -6745,6 +6753,10 @@ static void brcmf_free_wiphy(struct wiph
|
|
kfree(wiphy->bands[NL80211_BAND_5GHZ]->channels);
|
|
kfree(wiphy->bands[NL80211_BAND_5GHZ]);
|
|
}
|
|
+#if IS_ENABLED(CONFIG_PM)
|
|
+ if (wiphy->wowlan != &brcmf_wowlan_support)
|
|
+ kfree(wiphy->wowlan);
|
|
+#endif
|
|
wiphy_free(wiphy);
|
|
}
|
|
|