diff options
author | Rafał Miłecki <rafal@milecki.pl> | 2017-02-02 11:23:17 +0100 |
---|---|---|
committer | Rafał Miłecki <rafal@milecki.pl> | 2017-02-02 11:35:46 +0100 |
commit | b622f40249a08165e5fb24ad5ce31fa49becdb72 (patch) | |
tree | eabd78748519bdb90ed27300485ee86af4d1836f /package/kernel/mac80211/patches/364-0003-brcmfmac-allow-wowlan-support-to-be-per-device.patch | |
parent | 99d3774a3c2e16f44a7e396048ab3482414acc3d (diff) | |
download | upstream-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.patch | 78 |
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); + } + |