From b71e13fd8f05b0212099365420cafc80c04f1b8d Mon Sep 17 00:00:00 2001 From: Alexander Egorenkov Date: Sun, 21 Feb 2010 11:57:37 +0100 Subject: [PATCH] Fixed AMRR issue with only one Tx antenna and MCS32 --- rt2870.c | 1 + rt2870_amrr.c | 7 +++++-- rt2870_amrr.h | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/rt2870.c b/rt2870.c index fcf4751..c6dbdca 100644 --- a/rt2870.c +++ b/rt2870.c @@ -1742,6 +1742,7 @@ static struct ieee80211vap *rt2870_vap_create(struct ieee80211com *ic, vap->iv_update_beacon = rt2870_vap_update_beacon; rt2870_amrr_init(&rvap->amrr, vap, + sc->ntxpath, RT2870_AMRR_MIN_SUCCESS_THRESHOLD, RT2870_AMRR_MAX_SUCCESS_THRESHOLD, 500); diff --git a/rt2870_amrr.c b/rt2870_amrr.c index 4ff4dc0..1355e73 100644 --- a/rt2870_amrr.c +++ b/rt2870_amrr.c @@ -50,10 +50,12 @@ static int rt2870_amrr_update(struct rt2870_amrr *amrr, * rt2870_amrr_init */ void rt2870_amrr_init(struct rt2870_amrr *amrr, struct ieee80211vap *vap, - int min_success_threshold, int max_success_threshold, int msecs) + int ntxpath, int min_success_threshold, int max_success_threshold, int msecs) { int t; + amrr->ntxpath = ntxpath; + amrr->min_success_threshold = min_success_threshold; amrr->max_success_threshold = max_success_threshold; @@ -170,7 +172,8 @@ static int rt2870_amrr_update(struct rt2870_amrr *amrr, { amrr_node->success++; if ((amrr_node->success >= amrr_node->success_threshold) && - (rate_index + 1 < rs->rs_nrates)) + (rate_index + 1 < rs->rs_nrates) && + (!(ni->ni_flags & IEEE80211_NODE_HT) || rs->rs_rates[rate_index + 1] < (amrr->ntxpath * 8))) { amrr_node->recovery = 1; amrr_node->success = 0; diff --git a/rt2870_amrr.h b/rt2870_amrr.h index b80fc95..d316a80 100644 --- a/rt2870_amrr.h +++ b/rt2870_amrr.h @@ -24,6 +24,8 @@ struct rt2870_amrr { + int ntxpath; + unsigned int min_success_threshold; unsigned int max_success_threshold; @@ -46,7 +48,7 @@ struct rt2870_amrr_node }; void rt2870_amrr_init(struct rt2870_amrr *amrr, struct ieee80211vap *vap, - int min_success_threshold, int max_success_threshold, int msecs); + int ntxpath, int min_success_threshold, int max_success_threshold, int msecs); void rt2870_amrr_cleanup(struct rt2870_amrr *amrr); -- 2.11.4.GIT