ath6kl: Add wow multicast firmware capability support
authorNaveen Gangadharan <ngangadh@qca.qualcomm.com>
Fri, 11 May 2012 21:19:09 +0000 (14:19 -0700)
committerKalle Valo <kvalo@qca.qualcomm.com>
Mon, 14 May 2012 06:48:22 +0000 (09:48 +0300)
Infrastructure to enable Multicast WOW support based on
firmware capability added to the driver.This enables
different customers or chips to control this feature based
on firmware capability.

kvalo: Firmware capability infrastructure for multicast wow feature,
indetation fixes.

Signed-off-by: Naveen Gangadharan <ngangadh@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath6kl/cfg80211.c
drivers/net/wireless/ath/ath6kl/core.h
drivers/net/wireless/ath/ath6kl/main.c

index a6bebc2..22843a1 100644 (file)
@@ -2074,7 +2074,9 @@ static int ath6kl_wow_suspend(struct ath6kl *ar, struct cfg80211_wowlan *wow)
        if (wow && (wow->n_patterns > WOW_MAX_FILTERS_PER_LIST))
                return -EINVAL;
 
-       if (!test_bit(NETDEV_MCAST_ALL_ON, &vif->flags)) {
+       if (!test_bit(NETDEV_MCAST_ALL_ON, &vif->flags) &&
+           test_bit(ATH6KL_FW_CAPABILITY_WOW_MULTICAST_FILTER,
+                    ar->fw_capabilities)) {
                ret = ath6kl_wmi_mcast_filter_cmd(vif->ar->wmi,
                                                vif->fw_vif_idx, false);
                if (ret)
@@ -2209,7 +2211,9 @@ static int ath6kl_wow_resume(struct ath6kl *ar)
 
        ar->state = ATH6KL_STATE_ON;
 
-       if (!test_bit(NETDEV_MCAST_ALL_OFF, &vif->flags)) {
+       if (!test_bit(NETDEV_MCAST_ALL_OFF, &vif->flags) &&
+           test_bit(ATH6KL_FW_CAPABILITY_WOW_MULTICAST_FILTER,
+                    ar->fw_capabilities)) {
                ret = ath6kl_wmi_mcast_filter_cmd(vif->ar->wmi,
                                        vif->fw_vif_idx, true);
                if (ret)
index 4d9c6f1..79c7055 100644 (file)
@@ -100,6 +100,13 @@ enum ath6kl_fw_capability {
        /* Firmware has support to override rsn cap of rsn ie */
        ATH6KL_FW_CAPABILITY_RSN_CAP_OVERRIDE,
 
+       /*
+        * Multicast support in WOW and host awake mode.
+        * Allow all multicast in host awake mode.
+        * Apply multicast filter in WOW mode.
+        */
+       ATH6KL_FW_CAPABILITY_WOW_MULTICAST_FILTER,
+
        /* this needs to be last */
        ATH6KL_FW_CAPABILITY_MAX,
 };
index e552447..3e6768a 100644 (file)
@@ -1167,7 +1167,10 @@ static void ath6kl_set_multicast_list(struct net_device *ndev)
        else
                clear_bit(NETDEV_MCAST_ALL_ON, &vif->flags);
 
-       mc_all_on = mc_all_on || (vif->ar->state == ATH6KL_STATE_ON);
+       if (test_bit(ATH6KL_FW_CAPABILITY_WOW_MULTICAST_FILTER,
+                    vif->ar->fw_capabilities)) {
+               mc_all_on = mc_all_on || (vif->ar->state == ATH6KL_STATE_ON);
+       }
 
        if (!(ndev->flags & IFF_MULTICAST)) {
                mc_all_on = false;