carl9170: add support for the new rate control API
Christian Lamparter
maintainerPATCH 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
@@ -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
@@ -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