purge HAL_TXSTAT_ALTRATE; you can figure this out by checking ts_finaltsi

and it cannot be used with MCS rate codes
This commit is contained in:
sam 2009-06-13 23:36:54 +00:00
parent d0f0da4e4f
commit 4fd5fd850e
5 changed files with 10 additions and 17 deletions

View File

@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
* $Id: ah_desc.h,v 1.5 2008/11/10 04:08:00 sam Exp $
* $FreeBSD$
*/
#ifndef _DEV_ATH_DESC_H
@ -36,7 +36,6 @@ struct ath_tx_status {
uint16_t ts_tstamp; /* h/w assigned timestamp */
uint8_t ts_status; /* frame status, 0 => xmit ok */
uint8_t ts_rate; /* h/w transmit rate index */
#define HAL_TXSTAT_ALTRATE 0x80 /* alternate xmit rate used */
int8_t ts_rssi; /* tx ack RSSI */
uint8_t ts_shortretry; /* # short retries */
uint8_t ts_longretry; /* # long retries */

View File

@ -869,16 +869,13 @@ ar5212ProcTxDesc(struct ath_hal *ah,
ts->ts_rate = MS(ads->ds_ctl3, AR_XmitRate0);
break;
case 1:
ts->ts_rate = MS(ads->ds_ctl3, AR_XmitRate1) |
HAL_TXSTAT_ALTRATE;
ts->ts_rate = MS(ads->ds_ctl3, AR_XmitRate1);
break;
case 2:
ts->ts_rate = MS(ads->ds_ctl3, AR_XmitRate2) |
HAL_TXSTAT_ALTRATE;
ts->ts_rate = MS(ads->ds_ctl3, AR_XmitRate2);
break;
case 3:
ts->ts_rate = MS(ads->ds_ctl3, AR_XmitRate3) |
HAL_TXSTAT_ALTRATE;
ts->ts_rate = MS(ads->ds_ctl3, AR_XmitRate3);
break;
}
ts->ts_rssi = MS(ads->ds_txstatus1, AR_AckSigStrength);

View File

@ -519,16 +519,13 @@ ar5416ProcTxDesc(struct ath_hal *ah,
ts->ts_rate = MS(ads->ds_ctl3, AR_XmitRate0);
break;
case 1:
ts->ts_rate = MS(ads->ds_ctl3, AR_XmitRate1) |
HAL_TXSTAT_ALTRATE;
ts->ts_rate = MS(ads->ds_ctl3, AR_XmitRate1);
break;
case 2:
ts->ts_rate = MS(ads->ds_ctl3, AR_XmitRate2) |
HAL_TXSTAT_ALTRATE;
ts->ts_rate = MS(ads->ds_ctl3, AR_XmitRate2);
break;
case 3:
ts->ts_rate = MS(ads->ds_ctl3, AR_XmitRate3) |
HAL_TXSTAT_ALTRATE;
ts->ts_rate = MS(ads->ds_ctl3, AR_XmitRate3);
break;
}

View File

@ -561,7 +561,7 @@ ath_rate_tx_complete(struct ath_softc *sc, struct ath_node *an,
const HAL_RATE_TABLE *rt = sc->sc_currates;
int mrr;
final_rix = rt->rateCodeToIndex[ts->ts_rate &~ HAL_TXSTAT_ALTRATE];
final_rix = rt->rateCodeToIndex[ts->ts_rate];
short_tries = ts->ts_shortretry;
long_tries = ts->ts_longretry + 1;
frame_size = ds0->ds_ctl0 & 0x0fff; /* low-order 12 bits of ds_ctl0 */
@ -579,7 +579,7 @@ ath_rate_tx_complete(struct ath_softc *sc, struct ath_node *an,
return;
}
mrr = sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT);
if (!mrr || !(ts->ts_rate & HAL_TXSTAT_ALTRATE)) {
if (!mrr || ts->ts_finaltsi == 0) {
if (!IS_RATE_DEFINED(sn, final_rix)) {
badrate(ifp, 0, ts->ts_rate, long_tries, ts->ts_status);
return;

View File

@ -4918,7 +4918,7 @@ ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq)
u_int8_t txant = ts->ts_antenna;
sc->sc_stats.ast_ant_tx[txant]++;
sc->sc_ant_tx[txant]++;
if (ts->ts_rate & HAL_TXSTAT_ALTRATE)
if (ts->ts_finaltsi != 0)
sc->sc_stats.ast_tx_altrate++;
pri = M_WME_GETAC(bf->bf_m);
if (pri >= WME_AC_VO)