summaryrefslogtreecommitdiffstats
path: root/package/mac80211/patches/463-ath5k_fix_slottime.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/mac80211/patches/463-ath5k_fix_slottime.patch')
-rw-r--r--package/mac80211/patches/463-ath5k_fix_slottime.patch42
1 files changed, 42 insertions, 0 deletions
diff --git a/package/mac80211/patches/463-ath5k_fix_slottime.patch b/package/mac80211/patches/463-ath5k_fix_slottime.patch
new file mode 100644
index 000000000..01e55d35d
--- /dev/null
+++ b/package/mac80211/patches/463-ath5k_fix_slottime.patch
@@ -0,0 +1,42 @@
+--- a/drivers/net/wireless/ath/ath5k/ath5k.h
++++ b/drivers/net/wireless/ath/ath5k/ath5k.h
+@@ -1057,6 +1057,7 @@ struct ath5k_hw {
+ u8 ah_coverage_class;
+ bool ah_ack_bitrate_high;
+ u8 ah_bwmode;
++ bool ah_short_slot;
+
+ /* Antenna Control */
+ u32 ah_ant_ctl[AR5K_EEPROM_N_MODES][AR5K_ANT_MAX];
+--- a/drivers/net/wireless/ath/ath5k/mac80211-ops.c
++++ b/drivers/net/wireless/ath/ath5k/mac80211-ops.c
+@@ -282,6 +282,15 @@ ath5k_bss_info_changed(struct ieee80211_
+ if (changes & BSS_CHANGED_BEACON_INT)
+ sc->bintval = bss_conf->beacon_int;
+
++ if (changes & BSS_CHANGED_ERP_SLOT) {
++ int slot_time;
++
++ ah->ah_short_slot = bss_conf->use_short_slot;
++ slot_time = ath5k_hw_get_default_slottime(ah) +
++ 3 * ah->ah_coverage_class;
++ ath5k_hw_set_ifs_intervals(ah, slot_time);
++ }
++
+ if (changes & BSS_CHANGED_ASSOC) {
+ avf->assoc = bss_conf->assoc;
+ if (bss_conf->assoc)
+--- a/drivers/net/wireless/ath/ath5k/pcu.c
++++ b/drivers/net/wireless/ath/ath5k/pcu.c
+@@ -151,9 +151,9 @@ unsigned int ath5k_hw_get_default_slotti
+ slot_time = AR5K_INIT_SLOT_TIME_QUARTER_RATE;
+ break;
+ case AR5K_BWMODE_DEFAULT:
+- slot_time = AR5K_INIT_SLOT_TIME_DEFAULT;
+ default:
+- if (channel->hw_value & CHANNEL_CCK)
++ slot_time = AR5K_INIT_SLOT_TIME_DEFAULT;
++ if ((channel->hw_value & CHANNEL_CCK) && !ah->ah_short_slot)
+ slot_time = AR5K_INIT_SLOT_TIME_B;
+ break;
+ }