summaryrefslogtreecommitdiff
path: root/net/wireless/core.c
diff options
context:
space:
mode:
authorGanesh Kondabattini <ganeshk@codeaurora.org>2013-11-23 11:05:56 +0530
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-22 11:16:49 -0700
commitd91e2f37dcf7ce5dc1dc2bc212c8339a2c88d5fd (patch)
tree1befb168f1c7723c6aa6e364287f0d6139129865 /net/wireless/core.c
parentbf6ab094caf74dfd85edcb8c2405739a74c543e0 (diff)
Revert "cfg80211/mac80211: disconnect on suspend"
This reverts commit 8125696991194aacb1173b6e8196d19098b44e17. The commit"cfg80211/mac80211: disconnect on suspend" forces disconnection on wlan interfaces if wake on wireless is not enabled from the user space. Wake on Wireless is enabled by default in wlan driver (CLD) and cfg80211 layer never aware of wake on wirless enabled status done in wlan driver. To avoid the disconnection while going to suspend and keep wlan driver in WOW mode by default, the commit "cfg80211/mac80211: disconnect on suspend" should be reverted. CRs-Fixed: 540571 Change-Id: I483fe0530f9f00c338680416449215af326e3df1 Signed-off-by: Ganesh Kondabattini <ganeshk@codeaurora.org>
Diffstat (limited to 'net/wireless/core.c')
-rw-r--r--net/wireless/core.c90
1 files changed, 34 insertions, 56 deletions
diff --git a/net/wireless/core.c b/net/wireless/core.c
index c9d4e3d5af5e..e2cd8b8c2f09 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -887,61 +887,6 @@ void cfg80211_update_iface_num(struct cfg80211_registered_device *rdev,
rdev->num_running_monitor_ifaces += num;
}
-void cfg80211_leave(struct cfg80211_registered_device *rdev,
- struct wireless_dev *wdev)
-{
- struct net_device *dev = wdev->netdev;
- struct cfg80211_sched_scan_request *sched_scan_req;
-
- ASSERT_RTNL();
-
- switch (wdev->iftype) {
- case NL80211_IFTYPE_ADHOC:
- cfg80211_leave_ibss(rdev, dev, true);
- break;
- case NL80211_IFTYPE_P2P_CLIENT:
- case NL80211_IFTYPE_STATION:
- sched_scan_req = rtnl_dereference(rdev->sched_scan_req);
- if (sched_scan_req && dev == sched_scan_req->dev)
- __cfg80211_stop_sched_scan(rdev, false);
- wdev_lock(wdev);
-#ifdef CONFIG_CFG80211_WEXT
- kfree(wdev->wext.ie);
- wdev->wext.ie = NULL;
- wdev->wext.ie_len = 0;
- wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC;
-#endif
- cfg80211_disconnect(rdev, dev,
- WLAN_REASON_DEAUTH_LEAVING, true);
- wdev_unlock(wdev);
- break;
- case NL80211_IFTYPE_MESH_POINT:
- cfg80211_leave_mesh(rdev, dev);
- break;
- case NL80211_IFTYPE_AP:
- case NL80211_IFTYPE_P2P_GO:
- cfg80211_stop_ap(rdev, dev, true);
- break;
- case NL80211_IFTYPE_OCB:
- __cfg80211_leave_ocb(rdev, dev);
- break;
- case NL80211_IFTYPE_WDS:
- /* must be handled by mac80211/driver, has no APIs */
- break;
- case NL80211_IFTYPE_P2P_DEVICE:
- /* cannot happen, has no netdev */
- break;
- case NL80211_IFTYPE_AP_VLAN:
- case NL80211_IFTYPE_MONITOR:
- /* nothing to do */
- break;
- case NL80211_IFTYPE_UNSPECIFIED:
- case NUM_NL80211_IFTYPES:
- /* invalid */
- break;
- }
-}
-
static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
unsigned long state, void *ptr)
{
@@ -1003,7 +948,40 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
dev->priv_flags |= IFF_DONT_BRIDGE;
break;
case NETDEV_GOING_DOWN:
- cfg80211_leave(rdev, wdev);
+ switch (wdev->iftype) {
+ case NL80211_IFTYPE_ADHOC:
+ cfg80211_leave_ibss(rdev, dev, true);
+ break;
+ case NL80211_IFTYPE_P2P_CLIENT:
+ case NL80211_IFTYPE_STATION:
+ ASSERT_RTNL();
+ sched_scan_req = rtnl_dereference(rdev->sched_scan_req);
+ if (sched_scan_req && dev == sched_scan_req->dev)
+ __cfg80211_stop_sched_scan(rdev, false);
+
+ wdev_lock(wdev);
+#ifdef CONFIG_CFG80211_WEXT
+ kfree(wdev->wext.ie);
+ wdev->wext.ie = NULL;
+ wdev->wext.ie_len = 0;
+ wdev->wext.connect.auth_type =
+ NL80211_AUTHTYPE_AUTOMATIC;
+#endif
+ cfg80211_disconnect(rdev, dev,
+ WLAN_REASON_DEAUTH_LEAVING, true);
+ cfg80211_mlme_down(rdev, dev);
+ wdev_unlock(wdev);
+ break;
+ case NL80211_IFTYPE_MESH_POINT:
+ cfg80211_leave_mesh(rdev, dev);
+ break;
+ case NL80211_IFTYPE_AP:
+ cfg80211_stop_ap(rdev, dev, false);
+ break;
+ default:
+ break;
+ }
+ wdev->beacon_interval = 0;
break;
case NETDEV_DOWN:
cfg80211_update_iface_num(rdev, wdev->iftype, -1);