aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/364-0003-brcmfmac-allow-wowlan-support-to-be-per-device.patch
diff options
context:
space:
mode:
authorRafał Miłecki <rafal@milecki.pl>2017-02-02 11:23:17 +0100
committerRafał Miłecki <rafal@milecki.pl>2017-02-02 11:35:46 +0100
commitb622f40249a08165e5fb24ad5ce31fa49becdb72 (patch)
treeeabd78748519bdb90ed27300485ee86af4d1836f /package/kernel/mac80211/patches/364-0003-brcmfmac-allow-wowlan-support-to-be-per-device.patch
parent99d3774a3c2e16f44a7e396048ab3482414acc3d (diff)
downloadupstream-b622f40249a08165e5fb24ad5ce31fa49becdb72.tar.gz
upstream-b622f40249a08165e5fb24ad5ce31fa49becdb72.tar.bz2
upstream-b622f40249a08165e5fb24ad5ce31fa49becdb72.zip
mac80211: brcmfmac: backport wowlan netdetect fixes
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>
Diffstat (limited to 'package/kernel/mac80211/patches/364-0003-brcmfmac-allow-wowlan-support-to-be-per-device.patch')
-rw-r--r--package/kernel/mac80211/patches/364-0003-brcmfmac-allow-wowlan-support-to-be-per-device.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/364-0003-brcmfmac-allow-wowlan-support-to-be-per-device.patch b/package/kernel/mac80211/patches/364-0003-brcmfmac-allow-wowlan-support-to-be-per-device.patch
new file mode 100644
index 0000000000..79c9c65c2b
--- /dev/null
+++ b/package/kernel/mac80211/patches/364-0003-brcmfmac-allow-wowlan-support-to-be-per-device.patch
@@ -0,0 +1,78 @@
+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);
+ }
+