aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/agg-tx.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2010-06-10 04:21:37 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-06-14 15:39:27 -0400
commitc1475ca99edcc7216ddc45838ab2c3281c14ba22 (patch)
tree3f1a5fd9c2fce428382cf49e3140c281a49e006b /net/mac80211/agg-tx.c
parent344eec67c7b8557234e149d254bca2ae9614d61e (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.c14
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}
511EXPORT_SYMBOL(ieee80211_start_tx_ba_cb_irqsafe); 510EXPORT_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}
646EXPORT_SYMBOL(ieee80211_stop_tx_ba_cb_irqsafe); 644EXPORT_SYMBOL(ieee80211_stop_tx_ba_cb_irqsafe);
647 645