--- a/ath/if_ath.c
+++ b/ath/if_ath.c
@@ -10274,11 +10274,11 @@
 	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 @@
 #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 @@
 		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 @@
 		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 @@
 #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 @@
 	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 @@
 	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 @@
 #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