39 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
--- a/ath/if_ath.c
 | 
						|
+++ b/ath/if_ath.c
 | 
						|
@@ -2723,6 +2723,9 @@ ar_device(int devid)
 | 
						|
 static int
 | 
						|
 ath_set_ack_bitrate(struct ath_softc *sc, int high)
 | 
						|
 {
 | 
						|
+	if (!sc->sc_ackrate_override)
 | 
						|
+		return 0;
 | 
						|
+
 | 
						|
 	if (ar_device(sc->devid) == 5212 || ar_device(sc->devid) == 5213) {
 | 
						|
 		/* set ack to be sent at low bit-rate */
 | 
						|
 		/* registers taken from the OpenBSD 5212 HAL */
 | 
						|
@@ -10791,8 +10794,13 @@ ATH_SYSCTL_DECL(ath_sysctl_halparam, ctl
 | 
						|
 				break;
 | 
						|
 #endif
 | 
						|
 			case ATH_ACKRATE:
 | 
						|
-				sc->sc_ackrate = val;
 | 
						|
-				ath_set_ack_bitrate(sc, sc->sc_ackrate);
 | 
						|
+				if (val == -1)
 | 
						|
+					sc->sc_ackrate_override = 0;
 | 
						|
+				else {
 | 
						|
+					sc->sc_ackrate_override = 1;
 | 
						|
+					sc->sc_ackrate = val;
 | 
						|
+					ath_set_ack_bitrate(sc, sc->sc_ackrate);
 | 
						|
+				}
 | 
						|
 				break;
 | 
						|
 			case ATH_RP:
 | 
						|
 				ath_rp_record(sc,
 | 
						|
--- a/ath/if_athvar.h
 | 
						|
+++ b/ath/if_athvar.h
 | 
						|
@@ -681,6 +681,7 @@ struct ath_softc {
 | 
						|
 	unsigned int	sc_devstopped:1;	/* stopped due to of no tx bufs */
 | 
						|
 	unsigned int	sc_stagbeacons:1;	/* use staggered beacons */
 | 
						|
 	unsigned int	sc_dfswait:1;		/* waiting on channel for radar detect */
 | 
						|
+	unsigned int	sc_ackrate_override:1;	/* override ack rate */
 | 
						|
 	unsigned int	sc_ackrate:1;		/* send acks at high bitrate */
 | 
						|
 	unsigned int	sc_dfs_cac:1;		/* waiting on channel for radar detect */
 | 
						|
 	unsigned int	sc_hasintmit:1;		/* Interference mitigation */
 |