Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 1 Aug 2012 00:00:34 GMT
From:      dfilter@FreeBSD.ORG (dfilter service)
To:        freebsd-wireless@FreeBSD.org
Subject:   Re: kern/170302: commit references a PR
Message-ID:  <201208010000.q7100Y2o004130@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/170302; it has been noted by GNATS.

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/170302: commit references a PR
Date: Tue, 31 Jul 2012 23:54:31 +0000 (UTC)

 Author: adrian
 Date: Tue Jul 31 23:54:15 2012
 New Revision: 238961
 URL: http://svn.freebsd.org/changeset/base/238961
 
 Log:
   Allow 802.11n hardware to support multi-rate retry when RTS/CTS is
   enabled.
   
   The legacy (pre-802.11n) hardware doesn't support this - although
   the AR5212 era hardware supports MRR, it doesn't have all the bits
   needed to support MRR + RTS/CTS.  The AR5416 and later support
   a packet duration and RTS/CTS flags per rate scenario, so we should
   support it.
   
   Tested:
   
   * AR9280, STA
   
   PR:		kern/170302
 
 Modified:
   head/sys/dev/ath/ath_rate/sample/sample.c
   head/sys/dev/ath/if_ath.c
   head/sys/dev/ath/if_ath_tx.c
   head/sys/dev/ath/if_athvar.h
 
 Modified: head/sys/dev/ath/ath_rate/sample/sample.c
 ==============================================================================
 --- head/sys/dev/ath/ath_rate/sample/sample.c	Tue Jul 31 23:34:06 2012	(r238960)
 +++ head/sys/dev/ath/ath_rate/sample/sample.c	Tue Jul 31 23:54:15 2012	(r238961)
 @@ -502,8 +502,10 @@ ath_rate_findrate(struct ath_softc *sc, 
  		goto done;
  	}
  
 -	/* XXX TODO: this doesn't know about 11gn vs 11g protection; teach it */
 -	mrr = sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT);
 +	mrr = sc->sc_mrretry;
 +	/* XXX check HT protmode too */
 +	if (mrr && (ic->ic_flags & IEEE80211_F_USEPROT) && !sc->sc_mrrprot)
 +		mrr = 0;
  
  	best_rix = pick_best_rate(an, rt, size_bin, !mrr);
  	if (best_rix >= 0) {
 @@ -910,7 +912,11 @@ ath_rate_tx_complete(struct ath_softc *s
  		    short_tries, long_tries);
  		return;
  	}
 -	mrr = sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT);
 +	mrr = sc->sc_mrretry;
 +	/* XXX check HT protmode too */
 +	if (mrr && (ic->ic_flags & IEEE80211_F_USEPROT) && !sc->sc_mrrprot)
 +		mrr = 0;
 +
  	if (!mrr || ts->ts_finaltsi == 0) {
  		if (!IS_RATE_DEFINED(sn, final_rix)) {
  			badrate(ifp, 0, ts->ts_rate, long_tries, status);
 
 Modified: head/sys/dev/ath/if_ath.c
 ==============================================================================
 --- head/sys/dev/ath/if_ath.c	Tue Jul 31 23:34:06 2012	(r238960)
 +++ head/sys/dev/ath/if_ath.c	Tue Jul 31 23:54:15 2012	(r238961)
 @@ -705,6 +705,12 @@ ath_attach(u_int16_t devid, struct ath_s
  		(void) ath_hal_settxchainmask(sc->sc_ah, tx_chainmask);
  	}
  
 +	/*
 +	 * Disable MRR with protected frames by default.
 +	 * Only 802.11n series NICs can handle this.
 +	 */
 +	sc->sc_mrrprot = 0;	/* XXX should be a capability */
 +
  #ifdef	ATH_ENABLE_11N
  	/*
  	 * Query HT capabilities
 @@ -714,6 +720,9 @@ ath_attach(u_int16_t devid, struct ath_s
  		int rxs, txs;
  
  		device_printf(sc->sc_dev, "[HT] enabling HT modes\n");
 +
 +		sc->sc_mrrprot = 1;	/* XXX should be a capability */
 +
  		ic->ic_htcaps = IEEE80211_HTC_HT	/* HT operation */
  			    | IEEE80211_HTC_AMPDU	/* A-MPDU tx/rx */
  			    | IEEE80211_HTC_AMSDU	/* A-MSDU tx/rx */
 
 Modified: head/sys/dev/ath/if_ath_tx.c
 ==============================================================================
 --- head/sys/dev/ath/if_ath_tx.c	Tue Jul 31 23:34:06 2012	(r238960)
 +++ head/sys/dev/ath/if_ath_tx.c	Tue Jul 31 23:54:15 2012	(r238961)
 @@ -1051,11 +1051,12 @@ ath_tx_set_rtscts(struct ath_softc *sc, 
  	
  	/*
  	 * Must disable multi-rate retry when using RTS/CTS.
 -	 * XXX TODO: only for pre-11n NICs.
  	 */
 -	bf->bf_state.bfs_ismrr = 0;
 -	bf->bf_state.bfs_try0 =
 -	    bf->bf_state.bfs_rc[0].tries = ATH_TXMGTTRY;	/* XXX ew */
 +	if (!sc->sc_mrrprot) {
 +		bf->bf_state.bfs_ismrr = 0;
 +		bf->bf_state.bfs_try0 =
 +		    bf->bf_state.bfs_rc[0].tries = ATH_TXMGTTRY; /* XXX ew */
 +	}
  }
  
  /*
 
 Modified: head/sys/dev/ath/if_athvar.h
 ==============================================================================
 --- head/sys/dev/ath/if_athvar.h	Tue Jul 31 23:34:06 2012	(r238960)
 +++ head/sys/dev/ath/if_athvar.h	Tue Jul 31 23:54:15 2012	(r238961)
 @@ -463,6 +463,7 @@ struct ath_softc {
  	void			(*sc_setdefantenna)(struct ath_softc *, u_int);
  	unsigned int		sc_invalid  : 1,/* disable hardware accesses */
  				sc_mrretry  : 1,/* multi-rate retry support */
 +				sc_mrrprot  : 1,/* MRR + protection support */
  				sc_softled  : 1,/* enable LED gpio status */
  				sc_hardled  : 1,/* enable MAC LED status */
  				sc_splitmic : 1,/* split TKIP MIC keys */
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201208010000.q7100Y2o004130>