diff options
Diffstat (limited to 'package/kernel/mac80211/patches/374-0009-brcmfmac-Add-wowl-wake-indication-report.patch')
-rw-r--r-- | package/kernel/mac80211/patches/374-0009-brcmfmac-Add-wowl-wake-indication-report.patch | 129 |
1 files changed, 0 insertions, 129 deletions
diff --git a/package/kernel/mac80211/patches/374-0009-brcmfmac-Add-wowl-wake-indication-report.patch b/package/kernel/mac80211/patches/374-0009-brcmfmac-Add-wowl-wake-indication-report.patch deleted file mode 100644 index 4324cc70c4..0000000000 --- a/package/kernel/mac80211/patches/374-0009-brcmfmac-Add-wowl-wake-indication-report.patch +++ /dev/null @@ -1,129 +0,0 @@ -From: Hante Meuleman <meuleman@broadcom.com> -Date: Thu, 29 Oct 2015 20:33:19 +0100 -Subject: [PATCH] brcmfmac: Add wowl wake indication report. - -On wakeup of the system (resume) a wowl wakeup indication report -can be sent to cfg80211. This patch adds support for this. The -report specifies if the device was responsible for the wakeup -and if so, will specify the exact reason. - -Reviewed-by: Arend Van Spriel <arend@broadcom.com> -Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com> -Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> -Signed-off-by: Hante Meuleman <meuleman@broadcom.com> -Signed-off-by: Arend van Spriel <arend@broadcom.com> -Signed-off-by: Kalle Valo <kvalo@codeaurora.org> ---- - ---- a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c -+++ b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c -@@ -3061,6 +3061,67 @@ static s32 brcmf_config_wowl_pattern(str - return ret; - } - -+#ifdef CPTCFG_PM -+ -+static void brcmf_report_wowl_wakeind(struct wiphy *wiphy, struct brcmf_if *ifp) -+{ -+ struct brcmf_wowl_wakeind_le wake_ind_le; -+ struct cfg80211_wowlan_wakeup wakeup_data; -+ struct cfg80211_wowlan_wakeup *wakeup; -+ u32 wakeind; -+ s32 err; -+ -+ err = brcmf_fil_iovar_data_get(ifp, "wowl_wakeind", &wake_ind_le, -+ sizeof(wake_ind_le)); -+ if (!err) { -+ brcmf_err("Get wowl_wakeind failed, err = %d\n", err); -+ return; -+ } -+ -+ wakeind = le32_to_cpu(wake_ind_le.ucode_wakeind); -+ if (wakeind & (BRCMF_WOWL_MAGIC | BRCMF_WOWL_DIS | BRCMF_WOWL_BCN | -+ BRCMF_WOWL_RETR | BRCMF_WOWL_NET)) { -+ wakeup = &wakeup_data; -+ memset(&wakeup_data, 0, sizeof(wakeup_data)); -+ wakeup_data.pattern_idx = -1; -+ -+ if (wakeind & BRCMF_WOWL_MAGIC) { -+ brcmf_dbg(INFO, "WOWL Wake indicator: BRCMF_WOWL_MAGIC\n"); -+ wakeup_data.magic_pkt = true; -+ } -+ if (wakeind & BRCMF_WOWL_DIS) { -+ brcmf_dbg(INFO, "WOWL Wake indicator: BRCMF_WOWL_DIS\n"); -+ wakeup_data.disconnect = true; -+ } -+ if (wakeind & BRCMF_WOWL_BCN) { -+ brcmf_dbg(INFO, "WOWL Wake indicator: BRCMF_WOWL_BCN\n"); -+ wakeup_data.disconnect = true; -+ } -+ if (wakeind & BRCMF_WOWL_RETR) { -+ brcmf_dbg(INFO, "WOWL Wake indicator: BRCMF_WOWL_RETR\n"); -+ wakeup_data.disconnect = true; -+ } -+ if (wakeind & BRCMF_WOWL_NET) { -+ brcmf_dbg(INFO, "WOWL Wake indicator: BRCMF_WOWL_NET\n"); -+ /* For now always map to pattern 0, no API to get -+ * correct information available at the moment. -+ */ -+ wakeup_data.pattern_idx = 0; -+ } -+ } else { -+ wakeup = NULL; -+ } -+ cfg80211_report_wowlan_wakeup(&ifp->vif->wdev, wakeup, GFP_KERNEL); -+} -+ -+#else -+ -+static void brcmf_report_wowl_wakeind(struct wiphy *wiphy, struct brcmf_if *ifp) -+{ -+} -+ -+#endif /* CPTCFG_PM */ -+ - static s32 brcmf_cfg80211_resume(struct wiphy *wiphy) - { - struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); -@@ -3070,11 +3131,12 @@ static s32 brcmf_cfg80211_resume(struct - brcmf_dbg(TRACE, "Enter\n"); - - if (cfg->wowl_enabled) { -+ brcmf_report_wowl_wakeind(wiphy, ifp); -+ brcmf_fil_iovar_int_set(ifp, "wowl_clear", 0); -+ brcmf_config_wowl_pattern(ifp, "clr", NULL, 0, NULL, 0); - brcmf_configure_arp_offload(ifp, true); - brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_PM, - cfg->pre_wowl_pmmode); -- brcmf_fil_iovar_int_set(ifp, "wowl_clear", 0); -- brcmf_config_wowl_pattern(ifp, "clr", NULL, 0, NULL, 0); - cfg->wowl_enabled = false; - } - return 0; -@@ -3108,6 +3170,7 @@ static void brcmf_configure_wowl(struct - wowl->patterns[i].pkt_offset); - } - } -+ brcmf_fil_iovar_data_set(ifp, "wowl_wakeind", "clear", strlen("clear")); - brcmf_fil_iovar_int_set(ifp, "wowl", wowl_config); - brcmf_fil_iovar_int_set(ifp, "wowl_activate", 1); - brcmf_bus_wowl_config(cfg->pub->bus_if, true); ---- a/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h -+++ b/drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h -@@ -634,4 +634,16 @@ struct brcmf_assoclist_le { - u8 mac[BRCMF_MAX_ASSOCLIST][ETH_ALEN]; - }; - -+/** -+ * struct brcmf_wowl_wakeind_le - Wakeup indicators -+ * Note: note both fields contain same information. -+ * -+ * @pci_wakeind: Whether PCI PMECSR PMEStatus bit was set. -+ * @ucode_wakeind: What wakeup-event indication was set by ucode -+ */ -+struct brcmf_wowl_wakeind_le { -+ __le32 pci_wakeind; -+ __le32 ucode_wakeind; -+}; -+ - #endif /* FWIL_TYPES_H_ */ |