Author: sam
Date: Wed Jan  7 23:30:26 2009
New Revision: 186879
URL: http://svn.freebsd.org/changeset/base/186879

Log:
  correct fixed rate handling; the rixmap was changed a while back
  to be indexed by the ieee rate code

Modified:
  head/sys/dev/ath/ath_rate/sample/sample.c

Modified: head/sys/dev/ath/ath_rate/sample/sample.c
==============================================================================
--- head/sys/dev/ath/ath_rate/sample/sample.c   Wed Jan  7 21:52:47 2009        
(r186878)
+++ head/sys/dev/ath/ath_rate/sample/sample.c   Wed Jan  7 23:30:26 2009        
(r186879)
@@ -754,23 +754,18 @@ ath_rate_ctl_reset(struct ath_softc *sc,
         sn->static_rix = -1;
        if (tp != NULL && tp->ucastrate != IEEE80211_FIXED_RATE_NONE) {
                /*
-                * A fixed rate is to be used; ic_fixed_rate is the
-                * IEEE code for this rate (sans basic bit).  Convert this
-                * to the index into the negotiated rate set for
-                * the node.
+                * A fixed rate is to be used; ucastrate is the IEEE code
+                * for this rate (sans basic bit).  Check this against the
+                * negotiated rate set for the node.  Note the fixed rate
+                * may not be available for various reasons so we only
+                * setup the static rate index if the lookup is successful.
+                * XXX handle MCS
                 */
-               /* NB: the rate set is assumed sorted */
-               srate = ni->ni_rates.rs_nrates - 1;
-               for (; srate >= 0 && RATE(srate) != tp->ucastrate; srate--)
-                       ;
-               /*
-                * The fixed rate may not be available due to races
-                * and mode settings.  Also orphaned nodes created in
-                * adhoc mode may not have any rate set so this lookup
-                * can fail.
-                */
-               if (srate >= 0)
-                       sn->static_rix = sc->sc_rixmap[srate];
+               for (srate = ni->ni_rates.rs_nrates - 1; srate >= 0; srate--)
+                       if (RATE(srate) == tp->ucastrate) {
+                               sn->static_rix = sc->sc_rixmap[tp->ucastrate];
+                               break;
+                       }
        }
 
        /*
_______________________________________________
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-unsubscr...@freebsd.org"

Reply via email to