Subject: [PATCH] ath9k: Use suitable macros with 4k eeprom data

This patch improves range and connection stability in AR9285.

Signed-off-by: Vasanthakumar Thiagarajan <[email protected]>
---
drivers/net/wireless/ath9k/eeprom.c | 18 +++++++++---------
1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/net/wireless/ath9k/eeprom.c b/drivers/net/wireless/ath9k/eeprom.c
index 8a9e062..dd280cb 100644
--- a/drivers/net/wireless/ath9k/eeprom.c
+++ b/drivers/net/wireless/ath9k/eeprom.c
@@ -679,7 +679,7 @@ static void ath9k_hw_get_4k_gain_boundaries_pdadcs(struct ath_hw *ah,
vpdTableI[i][sizeCurrVpdTable - 2]);
vpdStep = (int16_t)((vpdStep < 1) ? 1 : vpdStep);

- if (tgtIndex > maxIndex) {
+ if (tgtIndex >= maxIndex) {
while ((ss <= tgtIndex) &&
(k < (AR5416_NUM_PDADC_VALUES - 1))) {
tmpVal = (int16_t) TMP_VAL_VPD_TABLE;
@@ -713,11 +713,11 @@ static bool ath9k_hw_set_4k_power_cal_table(struct ath_hw *ah,
u8 *pCalBChans = NULL;
u16 pdGainOverlap_t2;
static u8 pdadcValues[AR5416_NUM_PDADC_VALUES];
- u16 gainBoundaries[AR5416_PD_GAINS_IN_MASK];
+ u16 gainBoundaries[AR5416_EEP4K_PD_GAINS_IN_MASK];
u16 numPiers, i, j;
int16_t tMinCalPower;
u16 numXpdGain, xpdMask;
- u16 xpdGainValues[AR5416_NUM_PD_GAINS] = { 0, 0, 0, 0 };
+ u16 xpdGainValues[AR5416_EEP4K_NUM_PD_GAINS] = { 0, 0 };
u32 reg32, regOffset, regChainOffset;

xpdMask = pEepData->modalHeader.xpdGain;
@@ -732,16 +732,16 @@ static bool ath9k_hw_set_4k_power_cal_table(struct ath_hw *ah,
}

pCalBChans = pEepData->calFreqPier2G;
- numPiers = AR5416_NUM_2G_CAL_PIERS;
+ numPiers = AR5416_EEP4K_NUM_2G_CAL_PIERS;

numXpdGain = 0;

- for (i = 1; i <= AR5416_PD_GAINS_IN_MASK; i++) {
- if ((xpdMask >> (AR5416_PD_GAINS_IN_MASK - i)) & 1) {
- if (numXpdGain >= AR5416_NUM_PD_GAINS)
+ for (i = 1; i <= AR5416_EEP4K_PD_GAINS_IN_MASK; i++) {
+ if ((xpdMask >> (AR5416_EEP4K_PD_GAINS_IN_MASK - i)) & 1) {
+ if (numXpdGain >= AR5416_EEP4K_NUM_PD_GAINS)
break;
xpdGainValues[numXpdGain] =
- (u16)(AR5416_PD_GAINS_IN_MASK - i);
+ (u16)(AR5416_EEP4K_PD_GAINS_IN_MASK - i);
numXpdGain++;
}
}
@@ -754,7 +754,7 @@ static bool ath9k_hw_set_4k_power_cal_table(struct ath_hw *ah,
xpdGainValues[1]);
REG_RMW_FIELD(ah, AR_PHY_TPCRG1, AR_PHY_TPCRG1_PD_GAIN_3, 0);

- for (i = 0; i < AR5416_MAX_CHAINS; i++) {
+ for (i = 0; i < AR5416_EEP4K_MAX_CHAINS; i++) {
if (AR_SREV_5416_20_OR_LATER(ah) &&
(ah->rxchainmask == 5 || ah->txchainmask == 5) &&
(i != 0)) {
--
1.5.5.1



Subject: [PATCH] ath9k: Set IEEE80211_TX_CTL_RATE_CTRL_PROBE in rate control for probe rates

Signed-off-by: Vasanthakumar Thiagarajan <[email protected]>
---
drivers/net/wireless/ath9k/rc.c | 13 ++++++++-----
1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/ath9k/rc.c b/drivers/net/wireless/ath9k/rc.c
index 8327356..a35b525 100644
--- a/drivers/net/wireless/ath9k/rc.c
+++ b/drivers/net/wireless/ath9k/rc.c
@@ -750,7 +750,8 @@ static u8 ath_rc_ratefind_ht(struct ath_softc *sc,
static void ath_rc_rate_set_series(struct ath_rate_table *rate_table,
struct ieee80211_tx_rate *rate,
struct ieee80211_tx_rate_control *txrc,
- u8 tries, u8 rix, int rtsctsenable)
+ u8 tries, u8 rix, int rtsctsenable,
+ bool is_probe)
{
rate->count = tries;
rate->idx = rix;
@@ -765,6 +766,8 @@ static void ath_rc_rate_set_series(struct ath_rate_table *rate_table,
rate->flags |= IEEE80211_TX_RC_SHORT_GI;
if (WLAN_RC_PHY_HT(rate_table->info[rix].phy))
rate->flags |= IEEE80211_TX_RC_MCS;
+ if (is_probe)
+ rate->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE;
}

static void ath_rc_rate_set_rtscts(struct ath_softc *sc,
@@ -854,7 +857,7 @@ static void ath_rc_ratefind(struct ath_softc *sc,
/* set one try for probe rates. For the
* probes don't enable rts */
ath_rc_rate_set_series(rate_table, &rates[i++], txrc,
- 1, nrix, 0);
+ 1, nrix, 0, is_probe);

try_per_rate = (ATH_11N_TXMAXTRY/4);
/* Get the next tried/allowed rate. No RTS for the next series
@@ -863,12 +866,12 @@ static void ath_rc_ratefind(struct ath_softc *sc,
nrix = ath_rc_rate_getidx(sc, ath_rc_priv,
rate_table, nrix, 1, 0);
ath_rc_rate_set_series(rate_table, &rates[i++], txrc,
- try_per_rate, nrix, 0);
+ try_per_rate, nrix, 0, is_probe);
} else {
try_per_rate = (ATH_11N_TXMAXTRY/4);
/* Set the choosen rate. No RTS for first series entry. */
ath_rc_rate_set_series(rate_table, &rates[i++], txrc,
- try_per_rate, nrix, 0);
+ try_per_rate, nrix, 0, is_probe);
}

/* Fill in the other rates for multirate retry */
@@ -884,7 +887,7 @@ static void ath_rc_ratefind(struct ath_softc *sc,
rate_table, nrix, 1, min_rate);
/* All other rates in the series have RTS enabled */
ath_rc_rate_set_series(rate_table, &rates[i], txrc,
- try_num, nrix, 1);
+ try_num, nrix, 1, is_probe);
}

/*
--
1.5.5.1


2009-03-06 15:29:21

by Sujith

[permalink] [raw]
Subject: [ath9k-devel] [PATCH] ath9k: Set IEEE80211_TX_CTL_RATE_CTRL_PROBE in rate control for probe rates

Vasanthakumar Thiagarajan wrote:
> ---
> drivers/net/wireless/ath9k/rc.c | 13 ++++++++-----
> 1 files changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/net/wireless/ath9k/rc.c b/drivers/net/wireless/ath9k/rc.c
> index 8327356..a35b525 100644
> --- a/drivers/net/wireless/ath9k/rc.c
> +++ b/drivers/net/wireless/ath9k/rc.c
> @@ -750,7 +750,8 @@ static u8 ath_rc_ratefind_ht(struct ath_softc *sc,
> static void ath_rc_rate_set_series(struct ath_rate_table *rate_table,
> struct ieee80211_tx_rate *rate,
> struct ieee80211_tx_rate_control *txrc,
> - u8 tries, u8 rix, int rtsctsenable)
> + u8 tries, u8 rix, int rtsctsenable,
> + bool is_probe)
> {
> rate->count = tries;
> rate->idx = rix;
> @@ -765,6 +766,8 @@ static void ath_rc_rate_set_series(struct ath_rate_table *rate_table,
> rate->flags |= IEEE80211_TX_RC_SHORT_GI;
> if (WLAN_RC_PHY_HT(rate_table->info[rix].phy))
> rate->flags |= IEEE80211_TX_RC_MCS;
> + if (is_probe)
> + rate->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE;
> }
>

IEEE80211_TX_CTL_RATE_CTRL_PROBE is to be used with flags@ieee80211_tx_info
and is not a per-rate flag.

Sujith

Subject: Re: [ath9k-devel] [PATCH] ath9k: Set IEEE80211_TX_CTL_RATE_CTRL_PROBE in rate control for probe rates

On Fri, Mar 06, 2009 at 08:58:39PM +0530, Sujith wrote:
> Vasanthakumar Thiagarajan wrote:
> > ---
> > drivers/net/wireless/ath9k/rc.c | 13 ++++++++-----
> > 1 files changed, 8 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/net/wireless/ath9k/rc.c b/drivers/net/wireless/ath9k/rc.c
> > index 8327356..a35b525 100644
> > --- a/drivers/net/wireless/ath9k/rc.c
> > +++ b/drivers/net/wireless/ath9k/rc.c
> > @@ -750,7 +750,8 @@ static u8 ath_rc_ratefind_ht(struct ath_softc *sc,
> > static void ath_rc_rate_set_series(struct ath_rate_table *rate_table,
> > struct ieee80211_tx_rate *rate,
> > struct ieee80211_tx_rate_control *txrc,
> > - u8 tries, u8 rix, int rtsctsenable)
> > + u8 tries, u8 rix, int rtsctsenable,
> > + bool is_probe)
> > {
> > rate->count = tries;
> > rate->idx = rix;
> > @@ -765,6 +766,8 @@ static void ath_rc_rate_set_series(struct ath_rate_table *rate_table,
> > rate->flags |= IEEE80211_TX_RC_SHORT_GI;
> > if (WLAN_RC_PHY_HT(rate_table->info[rix].phy))
> > rate->flags |= IEEE80211_TX_RC_MCS;
> > + if (is_probe)
> > + rate->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE;
> > }
> >
>
> IEEE80211_TX_CTL_RATE_CTRL_PROBE is to be used with flags@ieee80211_tx_info
> and is not a per-rate flag.

oops, thanks.