aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/tx.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2009-03-23 12:28:42 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-03-27 20:13:23 -0400
commite4e72fb4de93e3d4047a4ee3f08778422e17ed0d (patch)
treedd133a749e6fa6960c9aa708041d996110f6440e /net/mac80211/tx.c
parentcd8ffc800ce18e558335c4946b2217864fc16045 (diff)
mac80211/iwlwifi: move virtual A-MDPU queue bookkeeping to iwlwifi
This patch removes all the virtual A-MPDU-queue bookkeeping from mac80211. Curiously, iwlwifi already does its own bookkeeping, so it doesn't require much changes except where it needs to handle starting and stopping the queues in mac80211. To handle the queue stop/wake properly, we rewrite the software queue number for aggregation frames and internally to iwlwifi keep track of the queues that map into the same AC queue, and only talk to mac80211 about the AC queue. The implementation requires calling two new functions, iwl_stop_queue and iwl_wake_queue instead of the mac80211 counterparts. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Cc: Reinette Chattre <reinette.chatre@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/tx.c')
-rw-r--r--net/mac80211/tx.c19
1 files changed, 0 insertions, 19 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 906ab785db40..3fb04a86444d 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1145,25 +1145,6 @@ static int __ieee80211_tx(struct ieee80211_local *local,
1145 info->flags &= ~(IEEE80211_TX_CTL_CLEAR_PS_FILT | 1145 info->flags &= ~(IEEE80211_TX_CTL_CLEAR_PS_FILT |
1146 IEEE80211_TX_CTL_FIRST_FRAGMENT); 1146 IEEE80211_TX_CTL_FIRST_FRAGMENT);
1147 1147
1148 /*
1149 * Internally, we need to have the queue mapping point to
1150 * the real AC queue, not the virtual A-MPDU queue. This
1151 * now finally sets the queue to what the driver wants.
1152 * We will later move this down into the only driver that
1153 * needs it, iwlwifi.
1154 */
1155 if (sta && local->hw.ampdu_queues &&
1156 info->flags & IEEE80211_TX_CTL_AMPDU) {
1157 unsigned long flags;
1158 u8 *qc = ieee80211_get_qos_ctl((void *) skb->data);
1159 int tid = *qc & IEEE80211_QOS_CTL_TID_MASK;
1160
1161 spin_lock_irqsave(&sta->lock, flags);
1162 skb_set_queue_mapping(skb, local->hw.queues +
1163 sta->tid_to_tx_q[tid]);
1164 spin_unlock_irqrestore(&sta->lock, flags);
1165 }
1166
1167 next = skb->next; 1148 next = skb->next;
1168 len = skb->len; 1149 len = skb->len;
1169 ret = local->ops->tx(local_to_hw(local), skb); 1150 ret = local->ops->tx(local_to_hw(local), skb);