Loading net/mac80211/pm.c +1 −1 Original line number Diff line number Diff line Loading @@ -79,7 +79,7 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan) return err; } else if (err > 0) { WARN_ON(err != 1); return err; local->wowlan = false; } else { goto suspend; } Loading net/wireless/core.c +33 −40 Original line number Diff line number Diff line Loading @@ -846,45 +846,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; switch (wdev->iftype) { case NL80211_IFTYPE_ADHOC: cfg80211_leave_ibss(rdev, dev, true); break; case NL80211_IFTYPE_P2P_CLIENT: case NL80211_IFTYPE_STATION: mutex_lock(&rdev->sched_scan_mtx); __cfg80211_stop_sched_scan(rdev, false); mutex_unlock(&rdev->sched_scan_mtx); 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: cfg80211_stop_ap(rdev, dev); break; default: break; } wdev->beacon_interval = 0; } static int cfg80211_netdev_notifier_call(struct notifier_block *nb, unsigned long state, void *ndev) Loading Loading @@ -953,7 +914,39 @@ 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: mutex_lock(&rdev->sched_scan_mtx); __cfg80211_stop_sched_scan(rdev, false); mutex_unlock(&rdev->sched_scan_mtx); 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); break; default: break; } wdev->beacon_interval = 0; break; case NETDEV_DOWN: cfg80211_update_iface_num(rdev, wdev->iftype, -1); Loading net/wireless/core.h +0 −3 Original line number Diff line number Diff line Loading @@ -506,9 +506,6 @@ int cfg80211_validate_beacon_int(struct cfg80211_registered_device *rdev, void cfg80211_update_iface_num(struct cfg80211_registered_device *rdev, enum nl80211_iftype iftype, int num); void cfg80211_leave(struct cfg80211_registered_device *rdev, struct wireless_dev *wdev); void cfg80211_stop_p2p_device(struct cfg80211_registered_device *rdev, struct wireless_dev *wdev); Loading net/wireless/rdev-ops.h +3 −4 Original line number Diff line number Diff line Loading @@ -6,12 +6,11 @@ #include "core.h" #include "trace.h" static inline int rdev_suspend(struct cfg80211_registered_device *rdev, struct cfg80211_wowlan *wowlan) static inline int rdev_suspend(struct cfg80211_registered_device *rdev) { int ret; trace_rdev_suspend(&rdev->wiphy, wowlan); ret = rdev->ops->suspend(&rdev->wiphy, wowlan); trace_rdev_suspend(&rdev->wiphy, rdev->wowlan); ret = rdev->ops->suspend(&rdev->wiphy, rdev->wowlan); trace_rdev_return_int(&rdev->wiphy, ret); return ret; } Loading net/wireless/sysfs.c +5 −20 Original line number Diff line number Diff line Loading @@ -83,14 +83,6 @@ static int wiphy_uevent(struct device *dev, struct kobj_uevent_env *env) return 0; } static void cfg80211_leave_all(struct cfg80211_registered_device *rdev) { struct wireless_dev *wdev; list_for_each_entry(wdev, &rdev->wdev_list, list) cfg80211_leave(rdev, wdev); } static int wiphy_suspend(struct device *dev, pm_message_t state) { struct cfg80211_registered_device *rdev = dev_to_rdev(dev); Loading @@ -98,19 +90,12 @@ static int wiphy_suspend(struct device *dev, pm_message_t state) rdev->suspend_at = get_seconds(); if (rdev->ops->suspend) { rtnl_lock(); if (rdev->wiphy.registered) { if (!rdev->wowlan) cfg80211_leave_all(rdev); if (rdev->ops->suspend) ret = rdev_suspend(rdev, rdev->wowlan); if (ret == 1) { /* Driver refuse to configure wowlan */ cfg80211_leave_all(rdev); ret = rdev_suspend(rdev, NULL); } } if (rdev->wiphy.registered) ret = rdev_suspend(rdev); rtnl_unlock(); } return ret; } Loading Loading
net/mac80211/pm.c +1 −1 Original line number Diff line number Diff line Loading @@ -79,7 +79,7 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan) return err; } else if (err > 0) { WARN_ON(err != 1); return err; local->wowlan = false; } else { goto suspend; } Loading
net/wireless/core.c +33 −40 Original line number Diff line number Diff line Loading @@ -846,45 +846,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; switch (wdev->iftype) { case NL80211_IFTYPE_ADHOC: cfg80211_leave_ibss(rdev, dev, true); break; case NL80211_IFTYPE_P2P_CLIENT: case NL80211_IFTYPE_STATION: mutex_lock(&rdev->sched_scan_mtx); __cfg80211_stop_sched_scan(rdev, false); mutex_unlock(&rdev->sched_scan_mtx); 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: cfg80211_stop_ap(rdev, dev); break; default: break; } wdev->beacon_interval = 0; } static int cfg80211_netdev_notifier_call(struct notifier_block *nb, unsigned long state, void *ndev) Loading Loading @@ -953,7 +914,39 @@ 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: mutex_lock(&rdev->sched_scan_mtx); __cfg80211_stop_sched_scan(rdev, false); mutex_unlock(&rdev->sched_scan_mtx); 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); break; default: break; } wdev->beacon_interval = 0; break; case NETDEV_DOWN: cfg80211_update_iface_num(rdev, wdev->iftype, -1); Loading
net/wireless/core.h +0 −3 Original line number Diff line number Diff line Loading @@ -506,9 +506,6 @@ int cfg80211_validate_beacon_int(struct cfg80211_registered_device *rdev, void cfg80211_update_iface_num(struct cfg80211_registered_device *rdev, enum nl80211_iftype iftype, int num); void cfg80211_leave(struct cfg80211_registered_device *rdev, struct wireless_dev *wdev); void cfg80211_stop_p2p_device(struct cfg80211_registered_device *rdev, struct wireless_dev *wdev); Loading
net/wireless/rdev-ops.h +3 −4 Original line number Diff line number Diff line Loading @@ -6,12 +6,11 @@ #include "core.h" #include "trace.h" static inline int rdev_suspend(struct cfg80211_registered_device *rdev, struct cfg80211_wowlan *wowlan) static inline int rdev_suspend(struct cfg80211_registered_device *rdev) { int ret; trace_rdev_suspend(&rdev->wiphy, wowlan); ret = rdev->ops->suspend(&rdev->wiphy, wowlan); trace_rdev_suspend(&rdev->wiphy, rdev->wowlan); ret = rdev->ops->suspend(&rdev->wiphy, rdev->wowlan); trace_rdev_return_int(&rdev->wiphy, ret); return ret; } Loading
net/wireless/sysfs.c +5 −20 Original line number Diff line number Diff line Loading @@ -83,14 +83,6 @@ static int wiphy_uevent(struct device *dev, struct kobj_uevent_env *env) return 0; } static void cfg80211_leave_all(struct cfg80211_registered_device *rdev) { struct wireless_dev *wdev; list_for_each_entry(wdev, &rdev->wdev_list, list) cfg80211_leave(rdev, wdev); } static int wiphy_suspend(struct device *dev, pm_message_t state) { struct cfg80211_registered_device *rdev = dev_to_rdev(dev); Loading @@ -98,19 +90,12 @@ static int wiphy_suspend(struct device *dev, pm_message_t state) rdev->suspend_at = get_seconds(); if (rdev->ops->suspend) { rtnl_lock(); if (rdev->wiphy.registered) { if (!rdev->wowlan) cfg80211_leave_all(rdev); if (rdev->ops->suspend) ret = rdev_suspend(rdev, rdev->wowlan); if (ret == 1) { /* Driver refuse to configure wowlan */ cfg80211_leave_all(rdev); ret = rdev_suspend(rdev, NULL); } } if (rdev->wiphy.registered) ret = rdev_suspend(rdev); rtnl_unlock(); } return ret; } Loading