diff options
Diffstat (limited to 'package/kernel/mac80211/patches/338-v5.0-0005-brcmfmac-fix-roamoff-1-modparam.patch')
-rw-r--r-- | package/kernel/mac80211/patches/338-v5.0-0005-brcmfmac-fix-roamoff-1-modparam.patch | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/338-v5.0-0005-brcmfmac-fix-roamoff-1-modparam.patch b/package/kernel/mac80211/patches/338-v5.0-0005-brcmfmac-fix-roamoff-1-modparam.patch new file mode 100644 index 0000000000..6851dcad84 --- /dev/null +++ b/package/kernel/mac80211/patches/338-v5.0-0005-brcmfmac-fix-roamoff-1-modparam.patch @@ -0,0 +1,68 @@ +From 8c892df41500469729e0d662816300196e4f463d Mon Sep 17 00:00:00 2001 +From: Stijn Tintel <stijn@linux-ipv6.be> +Date: Tue, 4 Dec 2018 20:29:05 +0200 +Subject: [PATCH] brcmfmac: fix roamoff=1 modparam + +When the update_connect_param callback is set, nl80211 expects the flag +WIPHY_FLAG_SUPPORTS_FW_ROAM to be set as well. However, this flag is +only set when modparam roamoff=0, while the callback is set +unconditionally. Since commit 7f9a3e150ec7 this causes a warning in +wiphy_register, which breaks brcmfmac. + +Disable the update_connect_param callback when roamoff=0 to fix this. + +Fixes: 7f9a3e150ec7 ("nl80211: Update ERP info using NL80211_CMD_UPDATE_CONNECT_PARAMS") +Cc: Stable <stable@vger.kernel.org> # 4.19+ +Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com> +Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be> +Signed-off-by: Kalle Valo <kvalo@codeaurora.org> +--- + .../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 11 +++++++++-- + .../wireless/broadcom/brcm80211/brcmfmac/cfg80211.h | 2 +- + .../net/wireless/broadcom/brcm80211/brcmfmac/core.c | 2 +- + 3 files changed, 11 insertions(+), 4 deletions(-) + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +@@ -5190,10 +5190,17 @@ static struct cfg80211_ops brcmf_cfg8021 + .update_connect_params = brcmf_cfg80211_update_conn_params, + }; + +-struct cfg80211_ops *brcmf_cfg80211_get_ops(void) ++struct cfg80211_ops *brcmf_cfg80211_get_ops(struct brcmf_mp_device *settings) + { +- return kmemdup(&brcmf_cfg80211_ops, sizeof(brcmf_cfg80211_ops), ++ struct cfg80211_ops *ops; ++ ++ ops = kmemdup(&brcmf_cfg80211_ops, sizeof(brcmf_cfg80211_ops), + GFP_KERNEL); ++ ++ if (ops && settings->roamoff) ++ ops->update_connect_params = NULL; ++ ++ return ops; + } + + struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg, +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h +@@ -391,7 +391,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802 + void brcmf_cfg80211_detach(struct brcmf_cfg80211_info *cfg); + s32 brcmf_cfg80211_up(struct net_device *ndev); + s32 brcmf_cfg80211_down(struct net_device *ndev); +-struct cfg80211_ops *brcmf_cfg80211_get_ops(void); ++struct cfg80211_ops *brcmf_cfg80211_get_ops(struct brcmf_mp_device *settings); + enum nl80211_iftype brcmf_cfg80211_get_iftype(struct brcmf_if *ifp); + + struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg, +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +@@ -1132,7 +1132,7 @@ int brcmf_attach(struct device *dev, str + + brcmf_dbg(TRACE, "Enter\n"); + +- ops = brcmf_cfg80211_get_ops(); ++ ops = brcmf_cfg80211_get_ops(settings); + if (!ops) + return -ENOMEM; + |