mac80211: implement off-channel mgmt TX
This implements the new off-channel TX API in mac80211 with a new work item type. The operation doesn't add a new work item when we're on the right channel and there's no wait time so that for example p2p probe responses will be transmitted without delay. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
f7ca38dfe5
commit
f30221e4ec
@@ -560,6 +560,25 @@ ieee80211_remain_on_channel_timeout(struct ieee80211_work *wk)
|
||||
return WORK_ACT_TIMEOUT;
|
||||
}
|
||||
|
||||
static enum work_action __must_check
|
||||
ieee80211_offchannel_tx(struct ieee80211_work *wk)
|
||||
{
|
||||
if (!wk->started) {
|
||||
wk->timeout = jiffies + msecs_to_jiffies(wk->offchan_tx.wait);
|
||||
|
||||
/*
|
||||
* After this, offchan_tx.frame remains but now is no
|
||||
* longer a valid pointer -- we still need it as the
|
||||
* cookie for canceling this work.
|
||||
*/
|
||||
ieee80211_tx_skb(wk->sdata, wk->offchan_tx.frame);
|
||||
|
||||
return WORK_ACT_NONE;
|
||||
}
|
||||
|
||||
return WORK_ACT_TIMEOUT;
|
||||
}
|
||||
|
||||
static enum work_action __must_check
|
||||
ieee80211_assoc_beacon_wait(struct ieee80211_work *wk)
|
||||
{
|
||||
@@ -955,6 +974,9 @@ static void ieee80211_work_work(struct work_struct *work)
|
||||
case IEEE80211_WORK_REMAIN_ON_CHANNEL:
|
||||
rma = ieee80211_remain_on_channel_timeout(wk);
|
||||
break;
|
||||
case IEEE80211_WORK_OFFCHANNEL_TX:
|
||||
rma = ieee80211_offchannel_tx(wk);
|
||||
break;
|
||||
case IEEE80211_WORK_ASSOC_BEACON_WAIT:
|
||||
rma = ieee80211_assoc_beacon_wait(wk);
|
||||
break;
|
||||
|
Reference in New Issue
Block a user