--- a/ath/if_ath.c +++ b/ath/if_ath.c @@ -10276,11 +10276,11 @@ ath_setcurmode(struct ath_softc *sc, enu sc->sc_currates = rt; sc->sc_curmode = mode; /* - * All protection frames are transmitted at 2Mb/s for - * 11g, otherwise at 1Mb/s. + * All protection frames are transmitted at 11Mb/s for + * 11g, otherwise at 2Mb/s. * XXX select protection rate index from rate table. */ - sc->sc_protrix = (mode == IEEE80211_MODE_11G ? 1 : 0); + sc->sc_protrix = (mode == IEEE80211_MODE_11G ? 3 : 1); /* rate index used to send mgt frames */ sc->sc_minrateix = 0; } --- a/ath/if_athvar.h +++ b/ath/if_athvar.h @@ -272,6 +272,10 @@ static inline struct net_device *_alloc_ #define AES_ICV_FIELD_SIZE 8 /* AES ICV field size */ #define EXT_IV_FIELD_SIZE 4 /* ext IV field size */ +/* This is what the HAL uses by default for 11a+g */ +#define ATH_DEFAULT_CWMIN 15 +#define ATH_DEFAULT_CWMAX 1023 + /* XR specific macros */ #define XR_DEFAULT_GRPPOLL_RATE_STR "0.25 1 1 3 3 6 6 20" --- a/ath_rate/minstrel/minstrel.c +++ b/ath_rate/minstrel/minstrel.c @@ -197,7 +197,7 @@ calc_usecs_unicast_packet(struct ath_sof unsigned int x = 0, tt = 0; unsigned int cix = rt->info[rix].controlRate; int rts = 0, cts = 0; - int cw = WIFI_CW_MIN; + int cw = ATH_DEFAULT_CWMIN; KASSERT(rt != NULL, ("no rate table, mode %u", sc->sc_curmode)); @@ -281,7 +281,7 @@ calc_usecs_unicast_packet(struct ath_sof tt += (long_retries + 1) * ath_hal_computetxtime(sc->sc_ah, rt, length, rix, AH_TRUE); for (x = 0; x <= short_retries + long_retries; x++) { - cw = MIN(WIFI_CW_MAX, (cw + 1) * 2); + cw = MIN(ATH_DEFAULT_CWMAX, (cw + 1) * 2); tt += (t_slot * cw / 2); } return tt; --- a/ath_rate/minstrel/minstrel.h +++ b/ath_rate/minstrel/minstrel.h @@ -180,14 +180,6 @@ struct minstrel_node { #define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif -#if 0 -#define WIFI_CW_MIN 31 -#define WIFI_CW_MAX 1023 -#else -#define WIFI_CW_MIN 3 -#define WIFI_CW_MAX 10 -#endif - /* * Definitions for pulling the rate and trie counts from * a 5212 h/w descriptor. These Don't belong here; the --- a/ath_rate/sample/sample.c +++ b/ath_rate/sample/sample.c @@ -170,7 +170,7 @@ calc_usecs_unicast_packet(struct ath_sof struct ieee80211com *ic = &sc->sc_ic; unsigned int tt = 0; unsigned int x; - unsigned int cw = WIFI_CW_MIN; + unsigned int cw = ATH_DEFAULT_CWMIN; unsigned int cix = rt->info[rix].controlRate; KASSERT(rt != NULL, ("no rate table, mode %u", sc->sc_curmode)); @@ -254,7 +254,7 @@ calc_usecs_unicast_packet(struct ath_sof tt += (long_retries+1)*ath_hal_computetxtime(sc->sc_ah, rt, length, rix, AH_TRUE); for (x = 0; x <= short_retries + long_retries; x++) { - cw = MIN(WIFI_CW_MAX, (cw + 1) * 2); + cw = MIN(ATH_DEFAULT_CWMAX, (cw + 1) * 2); tt += (t_slot * cw / 2); } return tt; --- a/ath_rate/sample/sample.h +++ b/ath_rate/sample/sample.h @@ -106,9 +106,6 @@ struct sample_node { #define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif -#define WIFI_CW_MIN 31 -#define WIFI_CW_MAX 1023 - /* * Definitions for pulling the rate and trie counts from * a 5212 h/w descriptor. These Don't belong here; the