aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorEliad Peller <eliad@wizery.com>2014-12-09 08:54:46 -0500
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-12-28 13:00:19 -0500
commit91742449479bd8666f9533efd9594a7d9f87bd0d (patch)
tree9269b7fa49f4c625153754298fd98095e07d51af /drivers/net/wireless
parent7616f334e6d441aa9824221b1352ebec9de57ad7 (diff)
iwlwifi: mvm: allow both d0i3 and d3 wowlan configuration modes
d3 and d0i3 shouldn't be mutually exclusive. Set supported wowlan triggers by looking for each of them, and check on suspend/resume which flow should be used ("any" trigger is supported by d0i3, and all the others by d3) Signed-off-by: Eliad Peller <eliadx.peller@intel.com> Reviewed-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/d3.c7
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c14
2 files changed, 13 insertions, 8 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/d3.c b/drivers/net/wireless/iwlwifi/mvm/d3.c
index 744de262373e..a64894c40e8f 100644
--- a/drivers/net/wireless/iwlwifi/mvm/d3.c
+++ b/drivers/net/wireless/iwlwifi/mvm/d3.c
@@ -1142,7 +1142,8 @@ int iwl_mvm_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
1142 struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw); 1142 struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
1143 1143
1144 iwl_trans_suspend(mvm->trans); 1144 iwl_trans_suspend(mvm->trans);
1145 if (iwl_mvm_is_d0i3_supported(mvm)) { 1145 if (wowlan->any) {
1146 /* 'any' trigger means d0i3 usage */
1146 mutex_lock(&mvm->d0i3_suspend_mutex); 1147 mutex_lock(&mvm->d0i3_suspend_mutex);
1147 __set_bit(D0I3_DEFER_WAKEUP, &mvm->d0i3_suspend_flags); 1148 __set_bit(D0I3_DEFER_WAKEUP, &mvm->d0i3_suspend_flags);
1148 mutex_unlock(&mvm->d0i3_suspend_mutex); 1149 mutex_unlock(&mvm->d0i3_suspend_mutex);
@@ -1876,8 +1877,10 @@ int iwl_mvm_resume(struct ieee80211_hw *hw)
1876 1877
1877 iwl_trans_resume(mvm->trans); 1878 iwl_trans_resume(mvm->trans);
1878 1879
1879 if (iwl_mvm_is_d0i3_supported(mvm)) 1880 if (mvm->hw->wiphy->wowlan_config->any) {
1881 /* 'any' trigger means d0i3 usage */
1880 return 0; 1882 return 0;
1883 }
1881 1884
1882 return __iwl_mvm_resume(mvm, false); 1885 return __iwl_mvm_resume(mvm, false);
1883} 1886}
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
index b2f4ea597473..fd0f8ce0f79d 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -462,15 +462,17 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
462 device_can_wakeup(mvm->trans->dev)) { 462 device_can_wakeup(mvm->trans->dev)) {
463 mvm->wowlan.flags = WIPHY_WOWLAN_ANY; 463 mvm->wowlan.flags = WIPHY_WOWLAN_ANY;
464 hw->wiphy->wowlan = &mvm->wowlan; 464 hw->wiphy->wowlan = &mvm->wowlan;
465 } else if (mvm->fw->img[IWL_UCODE_WOWLAN].sec[0].len && 465 }
466
467 if (mvm->fw->img[IWL_UCODE_WOWLAN].sec[0].len &&
466 mvm->trans->ops->d3_suspend && 468 mvm->trans->ops->d3_suspend &&
467 mvm->trans->ops->d3_resume && 469 mvm->trans->ops->d3_resume &&
468 device_can_wakeup(mvm->trans->dev)) { 470 device_can_wakeup(mvm->trans->dev)) {
469 mvm->wowlan.flags = WIPHY_WOWLAN_MAGIC_PKT | 471 mvm->wowlan.flags |= WIPHY_WOWLAN_MAGIC_PKT |
470 WIPHY_WOWLAN_DISCONNECT | 472 WIPHY_WOWLAN_DISCONNECT |
471 WIPHY_WOWLAN_EAP_IDENTITY_REQ | 473 WIPHY_WOWLAN_EAP_IDENTITY_REQ |
472 WIPHY_WOWLAN_RFKILL_RELEASE | 474 WIPHY_WOWLAN_RFKILL_RELEASE |
473 WIPHY_WOWLAN_NET_DETECT; 475 WIPHY_WOWLAN_NET_DETECT;
474 if (!iwlwifi_mod_params.sw_crypto) 476 if (!iwlwifi_mod_params.sw_crypto)
475 mvm->wowlan.flags |= WIPHY_WOWLAN_SUPPORTS_GTK_REKEY | 477 mvm->wowlan.flags |= WIPHY_WOWLAN_SUPPORTS_GTK_REKEY |
476 WIPHY_WOWLAN_GTK_REKEY_FAILURE | 478 WIPHY_WOWLAN_GTK_REKEY_FAILURE |