96f5e66e8a
Hardware with AMPDU queues currently has broken aggregation. This patch fixes it by making all A-MPDUs go over the regular AC queues, but keeping track of the hardware queues in mac80211. As a first rough version, it actually stops the AC queue for extended periods of time, which can be removed by adding buffering internal to mac80211, but is currently not a huge problem because people rarely use multiple TIDs that are in the same AC (and iwlwifi currently doesn't operate as AP). This is a short-term fix, my current medium-term plan, which I hope to execute soon as well, but am not sure can finish before .30, looks like this: 1) rework the internal queuing layer in mac80211 that we use for fragments if the driver stopped queue in the middle of a fragmented frame to be able to queue more frames at once (rather than just a single frame with its fragments) 2) instead of stopping the entire AC queue, queue up the frames in a per-station/per-TID queue during aggregation session initiation, when the session has come up take all those frames and put them onto the queue from 1) 3) push the ampdu queue layer abstraction this patch introduces in mac80211 into the driver, and remove the virtual queue stuff from mac80211 again This plan will probably also affect ath9k in that mac80211 queues the frames instead of passing them down, even when there are no ampdu queues. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
25 lines
628 B
C
25 lines
628 B
C
/*
|
|
* Copyright 2004, Instant802 Networks, Inc.
|
|
* Copyright 2005, Devicescape Software, Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
#ifndef _WME_H
|
|
#define _WME_H
|
|
|
|
#include <linux/netdevice.h>
|
|
#include "ieee80211_i.h"
|
|
|
|
#define QOS_CONTROL_ACK_POLICY_NORMAL 0
|
|
#define QOS_CONTROL_ACK_POLICY_NOACK 1
|
|
|
|
#define QOS_CONTROL_ACK_POLICY_SHIFT 5
|
|
|
|
extern const int ieee802_1d_to_ac[8];
|
|
|
|
u16 ieee80211_select_queue(struct net_device *dev, struct sk_buff *skb);
|
|
|
|
#endif /* _WME_H */
|