Commit f3926b49 authored by Christian Lamparter's avatar Christian Lamparter Committed by John W. Linville

ar9170usb: remove deprecated aggregation code

This patch removes the incomplete AMPDU implementation in ar9170usb.

The code in question is:
 * too big and complex (more than 550 SLOC.)
   This is enough to qualify for a new separate code file!

 * unbalanced quantity & quality
	over-engineered areas like:
		* xmit scheduling and queuing frames for multiple HT peers
		* redundant frame sorting
	are confronted by gaping holes:
		* accurate transmission feedback
		* firmware error-handling and device reset
		* HT rate control algorithm

 * error-prone
	Since its inclusion, hardly anything was done to fix
	any of the outlined flaws from the initial commit message.

   => This also indicates poor maintainability.

 * relies heavily on several spinlocks.

As a result of this shortcomings, the code is slow and does not
even support the most basic 11n requirement: HT station mode.

Therefore, I request to purge my heap of **** from the kernel:
"ar9170: implement transmit aggregation".

The next item on the agenda is: (re-)start from scratch with
an adequate design to accommodate the special requirements
and features of the available frameworks and tools.
Signed-off-by: default avatarChristian Lamparter <chunkeey@googlemail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent adfba3c7
...@@ -109,41 +109,6 @@ struct ar9170_rxstream_mpdu_merge { ...@@ -109,41 +109,6 @@ struct ar9170_rxstream_mpdu_merge {
bool has_plcp; bool has_plcp;
}; };
#define AR9170_NUM_TID 16
#define WME_BA_BMP_SIZE 64
#define AR9170_NUM_MAX_AGG_LEN (2 * WME_BA_BMP_SIZE)
#define WME_AC_BE 2
#define WME_AC_BK 3
#define WME_AC_VI 1
#define WME_AC_VO 0
#define TID_TO_WME_AC(_tid) \
((((_tid) == 0) || ((_tid) == 3)) ? WME_AC_BE : \
(((_tid) == 1) || ((_tid) == 2)) ? WME_AC_BK : \
(((_tid) == 4) || ((_tid) == 5)) ? WME_AC_VI : \
WME_AC_VO)
#define BAW_WITHIN(_start, _bawsz, _seqno) \
((((_seqno) - (_start)) & 0xfff) < (_bawsz))
enum ar9170_tid_state {
AR9170_TID_STATE_INVALID,
AR9170_TID_STATE_SHUTDOWN,
AR9170_TID_STATE_PROGRESS,
AR9170_TID_STATE_COMPLETE,
};
struct ar9170_sta_tid {
struct list_head list;
struct sk_buff_head queue;
u8 addr[ETH_ALEN];
u16 ssn;
u16 tid;
enum ar9170_tid_state state;
bool active;
};
struct ar9170_tx_queue_stats { struct ar9170_tx_queue_stats {
unsigned int len; unsigned int len;
unsigned int limit; unsigned int limit;
...@@ -152,14 +117,11 @@ struct ar9170_tx_queue_stats { ...@@ -152,14 +117,11 @@ struct ar9170_tx_queue_stats {
#define AR9170_QUEUE_TIMEOUT 64 #define AR9170_QUEUE_TIMEOUT 64
#define AR9170_TX_TIMEOUT 8 #define AR9170_TX_TIMEOUT 8
#define AR9170_BA_TIMEOUT 4
#define AR9170_JANITOR_DELAY 128 #define AR9170_JANITOR_DELAY 128
#define AR9170_TX_INVALID_RATE 0xffffffff #define AR9170_TX_INVALID_RATE 0xffffffff
#define AR9170_NUM_TX_STATUS 128 #define AR9170_NUM_TX_LIMIT_HARD AR9170_TXQ_DEPTH
#define AR9170_NUM_TX_AGG_MAX 30 #define AR9170_NUM_TX_LIMIT_SOFT (AR9170_TXQ_DEPTH - 10)
#define AR9170_NUM_TX_LIMIT_HARD AR9170_TXQ_DEPTH
#define AR9170_NUM_TX_LIMIT_SOFT (AR9170_TXQ_DEPTH - 10)
struct ar9170 { struct ar9170 {
struct ieee80211_hw *hw; struct ieee80211_hw *hw;
...@@ -234,11 +196,6 @@ struct ar9170 { ...@@ -234,11 +196,6 @@ struct ar9170 {
struct sk_buff_head tx_pending[__AR9170_NUM_TXQ]; struct sk_buff_head tx_pending[__AR9170_NUM_TXQ];
struct sk_buff_head tx_status[__AR9170_NUM_TXQ]; struct sk_buff_head tx_status[__AR9170_NUM_TXQ];
struct delayed_work tx_janitor; struct delayed_work tx_janitor;
/* tx ampdu */
struct sk_buff_head tx_status_ampdu;
spinlock_t tx_ampdu_list_lock;
struct list_head tx_ampdu_list;
atomic_t tx_ampdu_pending;
/* rxstream mpdu merge */ /* rxstream mpdu merge */
struct ar9170_rxstream_mpdu_merge rx_mpdu; struct ar9170_rxstream_mpdu_merge rx_mpdu;
...@@ -250,11 +207,6 @@ struct ar9170 { ...@@ -250,11 +207,6 @@ struct ar9170 {
u8 global_ampdu_factor; u8 global_ampdu_factor;
}; };
struct ar9170_sta_info {
struct ar9170_sta_tid agg[AR9170_NUM_TID];
unsigned int ampdu_max_len;
};
struct ar9170_tx_info { struct ar9170_tx_info {
unsigned long timeout; unsigned long timeout;
}; };
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment