mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-01 08:04:22 +08:00
mac80211: allow driver to impose WoWLAN restrictions
If the driver can't support WoWLAN in the current state, this patch allows it to return 1 from the suspend callback to do the normal deconfiguration instead of using suspend/resume calls. Note that if it does this, resume won't be called. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
304e21bbea
commit
2b4562dfd6
@ -1628,6 +1628,10 @@ enum ieee80211_ampdu_mlme_action {
|
||||
* ask the device to suspend. This is only invoked when WoWLAN is
|
||||
* configured, otherwise the device is deconfigured completely and
|
||||
* reconfigured at resume time.
|
||||
* The driver may also impose special conditions under which it
|
||||
* wants to use the "normal" suspend (deconfigure), say if it only
|
||||
* supports WoWLAN when the device is associated. In this case, it
|
||||
* must return 1 from this function.
|
||||
*
|
||||
* @resume: If WoWLAN was configured, this indicates that mac80211 is
|
||||
* now resuming its operation, after this the device must be fully
|
||||
|
@ -72,15 +72,19 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
|
||||
local->wowlan = wowlan && local->open_count;
|
||||
if (local->wowlan) {
|
||||
int err = drv_suspend(local, wowlan);
|
||||
if (err) {
|
||||
if (err < 0) {
|
||||
local->quiescing = false;
|
||||
return err;
|
||||
} else if (err > 0) {
|
||||
WARN_ON(err != 1);
|
||||
local->wowlan = false;
|
||||
} else {
|
||||
list_for_each_entry(sdata, &local->interfaces, list) {
|
||||
cancel_work_sync(&sdata->work);
|
||||
ieee80211_quiesce(sdata);
|
||||
}
|
||||
goto suspend;
|
||||
}
|
||||
list_for_each_entry(sdata, &local->interfaces, list) {
|
||||
cancel_work_sync(&sdata->work);
|
||||
ieee80211_quiesce(sdata);
|
||||
}
|
||||
goto suspend;
|
||||
}
|
||||
|
||||
/* disable keys */
|
||||
|
Loading…
Reference in New Issue
Block a user