aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath6kl/cfg80211.c
diff options
context:
space:
mode:
authorNaveen Gangadharan <ngangadh@qca.qualcomm.com>2012-04-20 15:46:56 -0400
committerKalle Valo <kvalo@qca.qualcomm.com>2012-04-26 08:01:30 -0400
commit6251d8012dbc49869f2453942089c4df82de0c80 (patch)
tree95f835e55cc3cf35874c55a2a1ed0140c9b3c573 /drivers/net/wireless/ath/ath6kl/cfg80211.c
parent03e2084a843a700089a479e0ffdf5876c7059411 (diff)
ath6kl: Multicast filter support in wow suspend and non-suspend
This patch enables all multicast packets in non suspend mode and enable multicast filtering in wow suspend mode. This also fixes a bug in multicast where the driver assumed disable multicast-all command disabled/filtered all multicast packets, which was wrong assumption, because firmware will apply the programmed filter. Multicast requirements - Enable forward all multicast packets(no filtering) in non suspend mode. - Enable multicast filtering in wow suspend mode for both AP and CLIENT. kvalo: fix a checkpatch warning and drop unrelated newline removal Signed-off-by: Naveen Gangadharan <ngangadh@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath6kl/cfg80211.c')
-rw-r--r--drivers/net/wireless/ath/ath6kl/cfg80211.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index d4172137499a..f4467733ff5b 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -2076,6 +2076,13 @@ static int ath6kl_wow_suspend(struct ath6kl *ar, struct cfg80211_wowlan *wow)
2076 if (wow && (wow->n_patterns > WOW_MAX_FILTERS_PER_LIST)) 2076 if (wow && (wow->n_patterns > WOW_MAX_FILTERS_PER_LIST))
2077 return -EINVAL; 2077 return -EINVAL;
2078 2078
2079 if (!test_bit(NETDEV_MCAST_ALL_ON, &vif->flags)) {
2080 ret = ath6kl_wmi_mcast_filter_cmd(vif->ar->wmi,
2081 vif->fw_vif_idx, false);
2082 if (ret)
2083 return ret;
2084 }
2085
2079 /* Clear existing WOW patterns */ 2086 /* Clear existing WOW patterns */
2080 for (i = 0; i < WOW_MAX_FILTERS_PER_LIST; i++) 2087 for (i = 0; i < WOW_MAX_FILTERS_PER_LIST; i++)
2081 ath6kl_wmi_del_wow_pattern_cmd(ar->wmi, vif->fw_vif_idx, 2088 ath6kl_wmi_del_wow_pattern_cmd(ar->wmi, vif->fw_vif_idx,
@@ -2204,6 +2211,13 @@ static int ath6kl_wow_resume(struct ath6kl *ar)
2204 2211
2205 ar->state = ATH6KL_STATE_ON; 2212 ar->state = ATH6KL_STATE_ON;
2206 2213
2214 if (!test_bit(NETDEV_MCAST_ALL_OFF, &vif->flags)) {
2215 ret = ath6kl_wmi_mcast_filter_cmd(vif->ar->wmi,
2216 vif->fw_vif_idx, true);
2217 if (ret)
2218 return ret;
2219 }
2220
2207 netif_wake_queue(vif->ndev); 2221 netif_wake_queue(vif->ndev);
2208 2222
2209 return 0; 2223 return 0;