Commit 73ef9e64 authored by Hante Meuleman's avatar Hante Meuleman Committed by Kalle Valo

brcmfmac: keep ARP and ND offload enabled during WOWL

Currently ARP and ND (IPv6 Neigbor Discovery) offload get disabled
on entering suspend. However when firmwares support the wowl_cap
iovar then these offload routines can be kept enabled as they
will work during WOWL as well.
Reviewed-by: default avatarArend Van Spriel <arend@broadcom.com>
Reviewed-by: default avatarFranky (Zhenhui) Lin <frankyl@broadcom.com>
Reviewed-by: default avatarPieter-Paul Giesberts <pieterpg@broadcom.com>
Signed-off-by: default avatarHante Meuleman <meuleman@broadcom.com>
Signed-off-by: default avatarArend van Spriel <arend@broadcom.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 8ea56be0
...@@ -3556,6 +3556,7 @@ static s32 brcmf_cfg80211_resume(struct wiphy *wiphy) ...@@ -3556,6 +3556,7 @@ static s32 brcmf_cfg80211_resume(struct wiphy *wiphy)
brcmf_report_wowl_wakeind(wiphy, ifp); brcmf_report_wowl_wakeind(wiphy, ifp);
brcmf_fil_iovar_int_set(ifp, "wowl_clear", 0); brcmf_fil_iovar_int_set(ifp, "wowl_clear", 0);
brcmf_config_wowl_pattern(ifp, "clr", NULL, 0, NULL, 0); brcmf_config_wowl_pattern(ifp, "clr", NULL, 0, NULL, 0);
if (!brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL_ARP_ND))
brcmf_configure_arp_nd_offload(ifp, true); brcmf_configure_arp_nd_offload(ifp, true);
brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_PM, brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_PM,
cfg->wowl.pre_pmmode); cfg->wowl.pre_pmmode);
...@@ -3580,6 +3581,7 @@ static void brcmf_configure_wowl(struct brcmf_cfg80211_info *cfg, ...@@ -3580,6 +3581,7 @@ static void brcmf_configure_wowl(struct brcmf_cfg80211_info *cfg,
brcmf_dbg(TRACE, "Suspend, wowl config.\n"); brcmf_dbg(TRACE, "Suspend, wowl config.\n");
if (!brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL_ARP_ND))
brcmf_configure_arp_nd_offload(ifp, false); brcmf_configure_arp_nd_offload(ifp, false);
brcmf_fil_cmd_int_get(ifp, BRCMF_C_GET_PM, &cfg->wowl.pre_pmmode); brcmf_fil_cmd_int_get(ifp, BRCMF_C_GET_PM, &cfg->wowl.pre_pmmode);
brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_PM, PM_MAX); brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_PM, PM_MAX);
......
...@@ -147,6 +147,7 @@ void brcmf_feat_attach(struct brcmf_pub *drvr) ...@@ -147,6 +147,7 @@ void brcmf_feat_attach(struct brcmf_pub *drvr)
if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL)) { if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL)) {
err = brcmf_fil_iovar_int_get(ifp, "wowl_cap", &wowl_cap); err = brcmf_fil_iovar_int_get(ifp, "wowl_cap", &wowl_cap);
if (!err) { if (!err) {
ifp->drvr->feat_flags |= BIT(BRCMF_FEAT_WOWL_ARP_ND);
if (wowl_cap & BRCMF_WOWL_PFN_FOUND) if (wowl_cap & BRCMF_WOWL_PFN_FOUND)
ifp->drvr->feat_flags |= ifp->drvr->feat_flags |=
BIT(BRCMF_FEAT_WOWL_ND); BIT(BRCMF_FEAT_WOWL_ND);
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
* SCAN_RANDOM_MAC: Random MAC during (net detect) scheduled scan. * SCAN_RANDOM_MAC: Random MAC during (net detect) scheduled scan.
* WOWL_ND: WOWL net detect (PNO) * WOWL_ND: WOWL net detect (PNO)
* WOWL_GTK: (WOWL) GTK rekeying offload * WOWL_GTK: (WOWL) GTK rekeying offload
* WOWL_ARP_ND: ARP and Neighbor Discovery offload support during WOWL.
*/ */
#define BRCMF_FEAT_LIST \ #define BRCMF_FEAT_LIST \
BRCMF_FEAT_DEF(MBSS) \ BRCMF_FEAT_DEF(MBSS) \
...@@ -40,7 +41,8 @@ ...@@ -40,7 +41,8 @@
BRCMF_FEAT_DEF(TDLS) \ BRCMF_FEAT_DEF(TDLS) \
BRCMF_FEAT_DEF(SCAN_RANDOM_MAC) \ BRCMF_FEAT_DEF(SCAN_RANDOM_MAC) \
BRCMF_FEAT_DEF(WOWL_ND) \ BRCMF_FEAT_DEF(WOWL_ND) \
BRCMF_FEAT_DEF(WOWL_GTK) BRCMF_FEAT_DEF(WOWL_GTK) \
BRCMF_FEAT_DEF(WOWL_ARP_ND)
/* /*
* Quirks: * Quirks:
......
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