Message ID | 1329156547-10984-2-git-send-email-seth.forshee@canonical.com |
---|---|
State | New |
Headers | show |
Applied to Precise master-next. Thanks, Leann On Mon, 2012-02-13 at 12:09 -0600, Seth Forshee wrote: > From: Felix Fietkau <nbd@openwrt.org> > > commit adb5066 "ath9k_hw: do not apply the 2.4 ghz ack timeout > workaround to cts" reduced the hardware CTS timeout to the normal > values specified by the standard, but it turns out while it doesn't > need the same extra time that it needs for the ACK timeout, it > does need more than the value specified in the standard, but only > for 2.4 GHz. > > This patch brings the CTS timeout value in sync with the initialization > values, while still allowing adjustment for bigger distances. > > Signed-off-by: Felix Fietkau <nbd@openwrt.org> > Cc: stable@vger.kernel.org > Reported-by: Seth Forshee <seth.forshee@canonical.com> > Reported-by: Marek Lindner <lindner_marek@yahoo.de> > Signed-off-by: John W. Linville <linville@tuxdriver.com> > (cherry picked from commit 55a2bb4a6d5e8c7b324d003e130fd9aaf33be4e6) > BugLink: http://bugs.launchpad.net/bugs/925602 > Signed-off-by: Seth Forshee <seth.forshee@canonical.com> > --- > drivers/net/wireless/ath/ath9k/hw.c | 7 +++++-- > 1 files changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c > index 8873c6e..8b0c2ca 100644 > --- a/drivers/net/wireless/ath/ath9k/hw.c > +++ b/drivers/net/wireless/ath/ath9k/hw.c > @@ -1034,13 +1034,16 @@ void ath9k_hw_init_global_settings(struct ath_hw *ah) > > /* > * Workaround for early ACK timeouts, add an offset to match the > - * initval's 64us ack timeout value. > + * initval's 64us ack timeout value. Use 48us for the CTS timeout. > * This was initially only meant to work around an issue with delayed > * BA frames in some implementations, but it has been found to fix ACK > * timeout issues in other cases as well. > */ > - if (conf->channel && conf->channel->band == IEEE80211_BAND_2GHZ) > + if (conf->channel && conf->channel->band == IEEE80211_BAND_2GHZ) { > acktimeout += 64 - sifstime - ah->slottime; > + ctstimeout += 48 - sifstime - ah->slottime; > + } > + > > ath9k_hw_set_sifs_time(ah, sifstime); > ath9k_hw_setslottime(ah, slottime); > -- > 1.7.9 > >
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c index 8873c6e..8b0c2ca 100644 --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c @@ -1034,13 +1034,16 @@ void ath9k_hw_init_global_settings(struct ath_hw *ah) /* * Workaround for early ACK timeouts, add an offset to match the - * initval's 64us ack timeout value. + * initval's 64us ack timeout value. Use 48us for the CTS timeout. * This was initially only meant to work around an issue with delayed * BA frames in some implementations, but it has been found to fix ACK * timeout issues in other cases as well. */ - if (conf->channel && conf->channel->band == IEEE80211_BAND_2GHZ) + if (conf->channel && conf->channel->band == IEEE80211_BAND_2GHZ) { acktimeout += 64 - sifstime - ah->slottime; + ctstimeout += 48 - sifstime - ah->slottime; + } + ath9k_hw_set_sifs_time(ah, sifstime); ath9k_hw_setslottime(ah, slottime);