diff options
author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-01-15 01:16:48 +0000 |
---|---|---|
committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-01-15 01:16:48 +0000 |
commit | 128fd665e55e2f136db6bfdaaa68ae7481cb877e (patch) | |
tree | 293b0a07abd3136c142447ed1b677a9facd6545c /package/mac80211/patches/560-ath9k_coverage_class.patch | |
parent | 67599df0cbc74955ee3ad8443b800b0514934350 (diff) |
ath9k: fix short slot vs long slot handling, implement support for setting the coverage class
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@19141 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/mac80211/patches/560-ath9k_coverage_class.patch')
-rw-r--r-- | package/mac80211/patches/560-ath9k_coverage_class.patch | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/package/mac80211/patches/560-ath9k_coverage_class.patch b/package/mac80211/patches/560-ath9k_coverage_class.patch new file mode 100644 index 000000000..035eabb1f --- /dev/null +++ b/package/mac80211/patches/560-ath9k_coverage_class.patch @@ -0,0 +1,60 @@ +--- a/drivers/net/wireless/ath/ath9k/hw.c ++++ b/drivers/net/wireless/ath/ath9k/hw.c +@@ -1211,6 +1211,7 @@ void ath9k_hw_init_global_settings(struc + { + struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf; + int acktimeout; ++ int slottime; + int sifstime; + + ath_print(ath9k_hw_common(ah), ATH_DBG_RESET, "ah->misc_mode 0x%x\n", +@@ -1225,8 +1226,10 @@ void ath9k_hw_init_global_settings(struc + else + sifstime = 10; + +- acktimeout = ah->slottime + sifstime; +- ath9k_hw_setslottime(ah, ah->slottime); ++ /* As defined by IEEE 802.11-2007 17.3.8.6 */ ++ slottime = ah->slottime + 3 * ah->coverage_class; ++ acktimeout = slottime + sifstime; ++ ath9k_hw_setslottime(ah, slottime); + ath9k_hw_set_ack_timeout(ah, acktimeout); + ath9k_hw_set_cts_timeout(ah, acktimeout); + if (ah->globaltxtimeout != (u32) -1) +--- a/drivers/net/wireless/ath/ath9k/hw.h ++++ b/drivers/net/wireless/ath/ath9k/hw.h +@@ -551,6 +551,7 @@ struct ath_hw { + u32 *bank6Temp; + + int16_t txpower_indexoffset; ++ int coverage_class; + u32 beacon_interval; + u32 slottime; + u32 globaltxtimeout; +--- a/drivers/net/wireless/ath/ath9k/main.c ++++ b/drivers/net/wireless/ath/ath9k/main.c +@@ -2015,6 +2015,18 @@ static void ath9k_sw_scan_complete(struc + mutex_unlock(&sc->mutex); + } + ++static void ath9k_set_coverage_class(struct ieee80211_hw *hw, u8 coverage_class) ++{ ++ struct ath_wiphy *aphy = hw->priv; ++ struct ath_softc *sc = aphy->sc; ++ struct ath_hw *ah = sc->sc_ah; ++ ++ mutex_lock(&sc->mutex); ++ ah->coverage_class = coverage_class; ++ ath9k_hw_init_global_settings(ah); ++ mutex_unlock(&sc->mutex); ++} ++ + struct ieee80211_ops ath9k_ops = { + .tx = ath9k_tx, + .start = ath9k_start, +@@ -2034,4 +2046,5 @@ struct ieee80211_ops ath9k_ops = { + .sw_scan_start = ath9k_sw_scan_start, + .sw_scan_complete = ath9k_sw_scan_complete, + .rfkill_poll = ath9k_rfkill_poll_state, ++ .set_coverage_class = ath9k_set_coverage_class, + }; |