Skip to contentSkip to conversation

carl9170: add support for the new rate control API

PATCH RESEND New Christian Lamparter 1 participant 1 message Jun 12, 2013 CARL9170 Linux community wireless driver

lore
Share & tools
lore

Christian Lamparter

author maintainer
#0 lore raw

PATCH RESEND 1/1 carl9170: add support for the new rate control API

With the new rate control API, the driver can now apply the tx rate to outgoing frames just before they are uploaded to the device. This is important because the rate control can now react to fading or improving links a bit sooner.

Also, the driver no longer needs to sort the outgoing frames for sample attempts (which affected the size of A-MPDUs and the throughput of the link). For aggregated data frames, the driver (and rate control) needs only to calculate and apply a single set of tx rates to every subframe of the whole aggregate.

---
rfc -> v1:
- add pointers to sta and vif in the private tid struct. (saves lookup)
- acquire tx rate set and apply it to all sub frames during ampdu frame selection
(saves an extra loop)

---
 drivers/net/wireless/ath/carl9170/carl9170.h |    3 +
 drivers/net/wireless/ath/carl9170/main.c     |    3 +
 drivers/net/wireless/ath/carl9170/tx.c       |  182 +++++++++++++++-----------
 3 files changed, 110 insertions(+), 78 deletions(-)
drivers/net/wireless/ath/carl9170/carl9170.h +3 -0
index 9dce106..8596aba 100644
@@ -133,6 +133,9 @@ struct carl9170_sta_tid {
 
 	/* Preaggregation reorder queue */
 	struct sk_buff_head queue;
+
+	struct ieee80211_sta *sta;
+	struct ieee80211_vif *vif;
 };
 
 #define CARL9170_QUEUE_TIMEOUT		256
drivers/net/wireless/ath/carl9170/main.c +3 -0
index e9010a4..4a33c6e 100644
@@ -1448,6 +1448,8 @@ static int carl9170_op_ampdu_action(struct ieee80211_hw *hw,
 		tid_info->state = CARL9170_TID_STATE_PROGRESS;
 		tid_info->tid = tid;
 		tid_info->max = sta_info->ampdu_max_len;
+		tid_info->sta = sta;
+		tid_info->vif = vif;
 
 		INIT_LIST_HEAD(&tid_info->list);
 		INIT_LIST_HEAD(&tid_info->tmp_list);
@@ -1857,6 +1859,7 @@ void *carl9170_alloc(size_t priv_size)
 		     IEEE80211_HW_SUPPORTS_PS |
 		     IEEE80211_HW_PS_NULLFUNC_STACK |
 		     IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC |
+		     IEEE80211_HW_SUPPORTS_RC_TABLE |
 		     IEEE80211_HW_SIGNAL_DBM;
 
 	if (!modparam_noht) {
drivers/net/wireless/ath/carl9170/tx.c +104 -78

275 lines not on this page · raw message