diff options
author | Johannes Berg <johannes.berg@intel.com> | 2010-06-10 04:21:37 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-06-14 15:39:27 -0400 |
commit | c1475ca99edcc7216ddc45838ab2c3281c14ba22 (patch) | |
tree | 3f1a5fd9c2fce428382cf49e3140c281a49e006b /net/mac80211/agg-tx.c | |
parent | 344eec67c7b8557234e149d254bca2ae9614d61e (diff) |
mac80211: move aggregation callback processing
This moves the aggregation callback processing
to the per-sdata skb queue and a work function
rather than the tasklet.
Unfortunately, this means that it extends the
pkt_type hack to that skb queue. However, it
will enable making ampdu_action API changes
gradually, my current plan is to get rid of
this again by forcing drivers to only return
from ampdu_action() when everything is done,
thus removing the callbacks completely.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/agg-tx.c')
-rw-r--r-- | net/mac80211/agg-tx.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c index 9b9f21be0ff7..c7b7ac40316a 100644 --- a/net/mac80211/agg-tx.c +++ b/net/mac80211/agg-tx.c | |||
@@ -502,11 +502,10 @@ void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, | |||
502 | ra_tid = (struct ieee80211_ra_tid *) &skb->cb; | 502 | ra_tid = (struct ieee80211_ra_tid *) &skb->cb; |
503 | memcpy(&ra_tid->ra, ra, ETH_ALEN); | 503 | memcpy(&ra_tid->ra, ra, ETH_ALEN); |
504 | ra_tid->tid = tid; | 504 | ra_tid->tid = tid; |
505 | ra_tid->vif = vif; | ||
506 | 505 | ||
507 | skb->pkt_type = IEEE80211_ADDBA_MSG; | 506 | skb->pkt_type = IEEE80211_SDATA_QUEUE_AGG_START; |
508 | skb_queue_tail(&local->skb_queue, skb); | 507 | skb_queue_tail(&sdata->skb_queue, skb); |
509 | tasklet_schedule(&local->tasklet); | 508 | ieee80211_queue_work(&local->hw, &sdata->work); |
510 | } | 509 | } |
511 | EXPORT_SYMBOL(ieee80211_start_tx_ba_cb_irqsafe); | 510 | EXPORT_SYMBOL(ieee80211_start_tx_ba_cb_irqsafe); |
512 | 511 | ||
@@ -637,11 +636,10 @@ void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, | |||
637 | ra_tid = (struct ieee80211_ra_tid *) &skb->cb; | 636 | ra_tid = (struct ieee80211_ra_tid *) &skb->cb; |
638 | memcpy(&ra_tid->ra, ra, ETH_ALEN); | 637 | memcpy(&ra_tid->ra, ra, ETH_ALEN); |
639 | ra_tid->tid = tid; | 638 | ra_tid->tid = tid; |
640 | ra_tid->vif = vif; | ||
641 | 639 | ||
642 | skb->pkt_type = IEEE80211_DELBA_MSG; | 640 | skb->pkt_type = IEEE80211_SDATA_QUEUE_AGG_STOP; |
643 | skb_queue_tail(&local->skb_queue, skb); | 641 | skb_queue_tail(&sdata->skb_queue, skb); |
644 | tasklet_schedule(&local->tasklet); | 642 | ieee80211_queue_work(&local->hw, &sdata->work); |
645 | } | 643 | } |
646 | EXPORT_SYMBOL(ieee80211_stop_tx_ba_cb_irqsafe); | 644 | EXPORT_SYMBOL(ieee80211_stop_tx_ba_cb_irqsafe); |
647 | 645 | ||