diff options
-rw-r--r-- | dhd_linux.c | 16 | ||||
-rw-r--r-- | wl_cfg80211.c | 8 |
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; } |