| 1 | --- a/ath/if_ath.c |
| 2 | +++ b/ath/if_ath.c |
| 3 | @@ -2723,6 +2723,9 @@ ar_device(int devid) |
| 4 | static int |
| 5 | ath_set_ack_bitrate(struct ath_softc *sc, int high) |
| 6 | { |
| 7 | + if (!sc->sc_ackrate_override) |
| 8 | + return 0; |
| 9 | + |
| 10 | if (ar_device(sc->devid) == 5212 || ar_device(sc->devid) == 5213) { |
| 11 | /* set ack to be sent at low bit-rate */ |
| 12 | /* registers taken from the OpenBSD 5212 HAL */ |
| 13 | @@ -10791,8 +10794,13 @@ ATH_SYSCTL_DECL(ath_sysctl_halparam, ctl |
| 14 | break; |
| 15 | #endif |
| 16 | case ATH_ACKRATE: |
| 17 | - sc->sc_ackrate = val; |
| 18 | - ath_set_ack_bitrate(sc, sc->sc_ackrate); |
| 19 | + if (val == -1) |
| 20 | + sc->sc_ackrate_override = 0; |
| 21 | + else { |
| 22 | + sc->sc_ackrate_override = 1; |
| 23 | + sc->sc_ackrate = val; |
| 24 | + ath_set_ack_bitrate(sc, sc->sc_ackrate); |
| 25 | + } |
| 26 | break; |
| 27 | case ATH_RP: |
| 28 | ath_rp_record(sc, |
| 29 | --- a/ath/if_athvar.h |
| 30 | +++ b/ath/if_athvar.h |
| 31 | @@ -681,6 +681,7 @@ struct ath_softc { |
| 32 | unsigned int sc_devstopped:1; /* stopped due to of no tx bufs */ |
| 33 | unsigned int sc_stagbeacons:1; /* use staggered beacons */ |
| 34 | unsigned int sc_dfswait:1; /* waiting on channel for radar detect */ |
| 35 | + unsigned int sc_ackrate_override:1; /* override ack rate */ |
| 36 | unsigned int sc_ackrate:1; /* send acks at high bitrate */ |
| 37 | unsigned int sc_dfs_cac:1; /* waiting on channel for radar detect */ |
| 38 | unsigned int sc_hasintmit:1; /* Interference mitigation */ |
| 39 | |