15 #include <linux/export.h>
89 }
else if (local->
hw.conf.dynamic_ps_timeout > 0) {
106 bool offchannel_ps_enable)
116 if (!ieee80211_sdata_running(sdata))
133 netif_tx_stop_all_queues(sdata->
dev);
134 if (offchannel_ps_enable &&
136 sdata->
u.
mgd.associated)
137 ieee80211_offchannel_ps_enable(sdata);
144 bool offchannel_ps_disable)
156 if (!ieee80211_sdata_running(sdata))
160 if (offchannel_ps_disable &&
162 if (sdata->
u.
mgd.associated)
163 ieee80211_offchannel_ps_disable(sdata);
177 netif_tx_wake_all_queues(sdata->
dev);
201 roc->
chan, roc->chan_type,
249 trace_api_ready_on_channel(local);
272 if (local->
ops->remain_on_channel) {
279 ret = drv_remain_on_channel(local, roc->
chan,
287 "failed to start next HW ROC (%d)\n", ret);
308 (
unsigned long)roc->
frame,
317 roc->
chan, roc->chan_type,
379 drv_flush(local,
false);
397 static void ieee80211_hw_roc_done(
struct work_struct *work)
429 trace_api_remain_on_channel_expired(local);
437 INIT_WORK(&local->hw_roc_start, ieee80211_hw_roc_start);
450 if (roc->
sdata != sdata)
453 if (roc->
started && local->
ops->remain_on_channel) {
455 drv_cancel_remain_on_channel(local);
458 list_move_tail(&roc->
list, &tmp_list);
464 if (local->
ops->remain_on_channel) {