summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dhd_linux.c16
-rw-r--r--wl_cfg80211.c8
2 files changed, 16 insertions, 8 deletions
diff --git a/dhd_linux.c b/dhd_linux.c
index 6df22b0..c257308 100644
--- a/dhd_linux.c
+++ b/dhd_linux.c
@@ -2509,6 +2509,9 @@ static int dhd_set_suspend(int value, dhd_pub_t *dhd)
*/
dhd_enable_packet_filter(1, dhd);
#endif /* PKT_FILTER_SUPPORT */
+#ifdef APF
+ dhd_dev_apf_enable_filter(dhd_linux_get_primary_netdev(dhd));
+#endif /* APF */
#ifdef ARP_OFFLOAD_SUPPORT
if (dhd->arpoe_enable) {
dhd_arp_offload_enable(dhd, TRUE);
@@ -2607,6 +2610,9 @@ static int dhd_set_suspend(int value, dhd_pub_t *dhd)
/* disable pkt filter */
dhd_enable_packet_filter(0, dhd);
#endif /* PKT_FILTER_SUPPORT */
+#ifdef APF
+ dhd_dev_apf_disable_filter(dhd_linux_get_primary_netdev(dhd));
+#endif /* APF */
#ifdef PASS_ALL_MCAST_PKTS
allmulti = 1;
for (i = 0; i < DHD_MAX_IFS; i++) {
@@ -17858,6 +17864,16 @@ dhd_dev_apf_add_filter(struct net_device *ndev, u8* program,
DHD_APF_LOCK(ndev);
+ /* delete, if filter already exists */
+ if (dhdp->apf_set) {
+ ret = _dhd_apf_delete_filter(ndev, PKT_FILTER_APF_ID);
+ if (unlikely(ret)) {
+ DHD_ERROR(("%s: Failed to delete APF filter\n", __FUNCTION__));
+ goto exit;
+ }
+ dhdp->apf_set = FALSE;
+ }
+
ret = _dhd_apf_add_filter(ndev, PKT_FILTER_APF_ID, program, program_len);
if (ret) {
DHD_ERROR(("%s: Failed to add APF filter\n", __FUNCTION__));
diff --git a/wl_cfg80211.c b/wl_cfg80211.c
index 60cf031..f44c074 100644
--- a/wl_cfg80211.c
+++ b/wl_cfg80211.c
@@ -10092,14 +10092,6 @@ wl_apply_per_sta_conn_suspend_settings(struct bcm_cfg80211 *cfg,
}
}
#endif /* CONFIG_SILENT_ROAM */
-
-#ifdef APF
- if (suspend) {
- dhd_dev_apf_enable_filter(dev);
- } else {
- dhd_dev_apf_disable_filter(dev);
- }
-#endif /* APF */
return BCME_OK;
}