diff options
author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-01-17 01:38:07 +0000 |
---|---|---|
committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-01-17 01:38:07 +0000 |
commit | 9e219ca63654c28f0f63378a4f176fb8da6d5b5e (patch) | |
tree | f229079fb188e5c3e9fda0d76225a9ca5ea5e74f /package/mac80211/patches/550-ath9k_clean_up_timing_handling.patch | |
parent | 682557cca159feecf97ec8cfa025954b4f56b5a0 (diff) |
mac80211: upgrade to compat-wireless 2010-01-15
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@19176 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/mac80211/patches/550-ath9k_clean_up_timing_handling.patch')
-rw-r--r-- | package/mac80211/patches/550-ath9k_clean_up_timing_handling.patch | 229 |
1 files changed, 0 insertions, 229 deletions
diff --git a/package/mac80211/patches/550-ath9k_clean_up_timing_handling.patch b/package/mac80211/patches/550-ath9k_clean_up_timing_handling.patch deleted file mode 100644 index dc6502274..000000000 --- a/package/mac80211/patches/550-ath9k_clean_up_timing_handling.patch +++ /dev/null @@ -1,229 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/main.c -+++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -1790,6 +1790,7 @@ static void ath9k_bss_info_changed(struc - struct ath_hw *ah = sc->sc_ah; - struct ath_common *common = ath9k_hw_common(ah); - struct ath_vif *avp = (void *)vif->drv_priv; -+ int slottime; - int error; - - mutex_lock(&sc->mutex); -@@ -1825,6 +1826,25 @@ static void ath9k_bss_info_changed(struc - ath_beacon_config(sc, vif); - } - -+ if (changed & BSS_CHANGED_ERP_SLOT) { -+ if (bss_conf->use_short_slot) -+ slottime = 9; -+ else -+ slottime = 20; -+ if (vif->type == NL80211_IFTYPE_AP) { -+ /* -+ * Defer update, so that connected stations can adjust -+ * their settings at the same time. -+ * See beacon.c for more details -+ */ -+ sc->beacon.slottime = slottime; -+ sc->beacon.updateslot = UPDATE; -+ } else { -+ ah->slottime = slottime; -+ ath9k_hw_init_global_settings(ah); -+ } -+ } -+ - /* Disable transmission of beacons */ - if ((changed & BSS_CHANGED_BEACON_ENABLED) && !bss_conf->enable_beacon) - ath9k_hw_stoptxdma(sc->sc_ah, sc->beacon.beaconq); ---- a/drivers/net/wireless/ath/ath9k/hw.c -+++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -55,28 +55,6 @@ module_exit(ath9k_exit); - /* Helper Functions */ - /********************/ - --static u32 ath9k_hw_mac_usec(struct ath_hw *ah, u32 clks) --{ -- struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf; -- -- if (!ah->curchan) /* should really check for CCK instead */ -- return clks / ATH9K_CLOCK_RATE_CCK; -- if (conf->channel->band == IEEE80211_BAND_2GHZ) -- return clks / ATH9K_CLOCK_RATE_2GHZ_OFDM; -- -- return clks / ATH9K_CLOCK_RATE_5GHZ_OFDM; --} -- --static u32 ath9k_hw_mac_to_usec(struct ath_hw *ah, u32 clks) --{ -- struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf; -- -- if (conf_is_ht40(conf)) -- return ath9k_hw_mac_usec(ah, clks) / 2; -- else -- return ath9k_hw_mac_usec(ah, clks); --} -- - static u32 ath9k_hw_mac_clks(struct ath_hw *ah, u32 usecs) - { - struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf; -@@ -413,8 +391,6 @@ static void ath9k_hw_init_defaults(struc - ah->beacon_interval = 100; - ah->enable_32kHz_clock = DONT_USE_32KHZ; - ah->slottime = (u32) -1; -- ah->acktimeout = (u32) -1; -- ah->ctstimeout = (u32) -1; - ah->globaltxtimeout = (u32) -1; - ah->power_mode = ATH9K_PM_UNDEFINED; - } -@@ -1196,34 +1172,25 @@ static void ath9k_hw_init_interrupt_mask - } - } - --static bool ath9k_hw_set_ack_timeout(struct ath_hw *ah, u32 us) -+static void ath9k_hw_setslottime(struct ath_hw *ah, u32 us) - { -- if (us > ath9k_hw_mac_to_usec(ah, MS(0xffffffff, AR_TIME_OUT_ACK))) { -- ath_print(ath9k_hw_common(ah), ATH_DBG_RESET, -- "bad ack timeout %u\n", us); -- ah->acktimeout = (u32) -1; -- return false; -- } else { -- REG_RMW_FIELD(ah, AR_TIME_OUT, -- AR_TIME_OUT_ACK, ath9k_hw_mac_to_clks(ah, us)); -- ah->acktimeout = us; -- return true; -- } -+ u32 val = ath9k_hw_mac_to_clks(ah, us); -+ val = min(val, (u32) 0xFFFF); -+ REG_WRITE(ah, AR_D_GBL_IFS_SLOT, val); - } - --static bool ath9k_hw_set_cts_timeout(struct ath_hw *ah, u32 us) -+static void ath9k_hw_set_ack_timeout(struct ath_hw *ah, u32 us) - { -- if (us > ath9k_hw_mac_to_usec(ah, MS(0xffffffff, AR_TIME_OUT_CTS))) { -- ath_print(ath9k_hw_common(ah), ATH_DBG_RESET, -- "bad cts timeout %u\n", us); -- ah->ctstimeout = (u32) -1; -- return false; -- } else { -- REG_RMW_FIELD(ah, AR_TIME_OUT, -- AR_TIME_OUT_CTS, ath9k_hw_mac_to_clks(ah, us)); -- ah->ctstimeout = us; -- return true; -- } -+ u32 val = ath9k_hw_mac_to_clks(ah, us); -+ val = min(val, (u32) MS(0xFFFFFFFF, AR_TIME_OUT_ACK)); -+ REG_RMW_FIELD(ah, AR_TIME_OUT, AR_TIME_OUT_ACK, val); -+} -+ -+static void ath9k_hw_set_cts_timeout(struct ath_hw *ah, u32 us) -+{ -+ u32 val = ath9k_hw_mac_to_clks(ah, us); -+ val = min(val, (u32) MS(0xFFFFFFFF, AR_TIME_OUT_CTS)); -+ REG_RMW_FIELD(ah, AR_TIME_OUT, AR_TIME_OUT_CTS, val); - } - - static bool ath9k_hw_set_global_txtimeout(struct ath_hw *ah, u32 tu) -@@ -1240,23 +1207,32 @@ static bool ath9k_hw_set_global_txtimeou - } - } - --static void ath9k_hw_init_user_settings(struct ath_hw *ah) -+void ath9k_hw_init_global_settings(struct ath_hw *ah) - { -+ struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf; -+ int acktimeout; -+ int sifstime; -+ - ath_print(ath9k_hw_common(ah), ATH_DBG_RESET, "ah->misc_mode 0x%x\n", - ah->misc_mode); - - if (ah->misc_mode != 0) - REG_WRITE(ah, AR_PCU_MISC, - REG_READ(ah, AR_PCU_MISC) | ah->misc_mode); -- if (ah->slottime != (u32) -1) -- ath9k_hw_setslottime(ah, ah->slottime); -- if (ah->acktimeout != (u32) -1) -- ath9k_hw_set_ack_timeout(ah, ah->acktimeout); -- if (ah->ctstimeout != (u32) -1) -- ath9k_hw_set_cts_timeout(ah, ah->ctstimeout); -+ -+ if (conf->channel && conf->channel->band == IEEE80211_BAND_5GHZ) -+ sifstime = 16; -+ else -+ sifstime = 10; -+ -+ acktimeout = ah->slottime + sifstime; -+ ath9k_hw_setslottime(ah, ah->slottime); -+ ath9k_hw_set_ack_timeout(ah, acktimeout); -+ ath9k_hw_set_cts_timeout(ah, acktimeout); - if (ah->globaltxtimeout != (u32) -1) - ath9k_hw_set_global_txtimeout(ah, ah->globaltxtimeout); - } -+EXPORT_SYMBOL(ath9k_hw_init_global_settings); - - void ath9k_hw_deinit(struct ath_hw *ah) - { -@@ -2077,7 +2053,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st - if (ah->caps.hw_caps & ATH9K_HW_CAP_RFSILENT) - ath9k_enable_rfkill(ah); - -- ath9k_hw_init_user_settings(ah); -+ ath9k_hw_init_global_settings(ah); - - if (AR_SREV_9287_12_OR_LATER(ah)) { - REG_WRITE(ah, AR_D_GBL_IFS_SIFS, -@@ -3674,21 +3650,6 @@ u64 ath9k_hw_extend_tsf(struct ath_hw *a - } - EXPORT_SYMBOL(ath9k_hw_extend_tsf); - --bool ath9k_hw_setslottime(struct ath_hw *ah, u32 us) --{ -- if (us < ATH9K_SLOT_TIME_9 || us > ath9k_hw_mac_to_usec(ah, 0xffff)) { -- ath_print(ath9k_hw_common(ah), ATH_DBG_RESET, -- "bad slot time %u\n", us); -- ah->slottime = (u32) -1; -- return false; -- } else { -- REG_WRITE(ah, AR_D_GBL_IFS_SLOT, ath9k_hw_mac_to_clks(ah, us)); -- ah->slottime = us; -- return true; -- } --} --EXPORT_SYMBOL(ath9k_hw_setslottime); -- - void ath9k_hw_set11nmac2040(struct ath_hw *ah) - { - struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf; ---- a/drivers/net/wireless/ath/ath9k/hw.h -+++ b/drivers/net/wireless/ath/ath9k/hw.h -@@ -553,8 +553,6 @@ struct ath_hw { - int16_t txpower_indexoffset; - u32 beacon_interval; - u32 slottime; -- u32 acktimeout; -- u32 ctstimeout; - u32 globaltxtimeout; - - /* ANI */ -@@ -668,7 +666,7 @@ void ath9k_hw_settsf64(struct ath_hw *ah - void ath9k_hw_reset_tsf(struct ath_hw *ah); - void ath9k_hw_set_tsfadjust(struct ath_hw *ah, u32 setting); - u64 ath9k_hw_extend_tsf(struct ath_hw *ah, u32 rstamp); --bool ath9k_hw_setslottime(struct ath_hw *ah, u32 us); -+void ath9k_hw_init_global_settings(struct ath_hw *ah); - void ath9k_hw_set11nmac2040(struct ath_hw *ah); - void ath9k_hw_beaconinit(struct ath_hw *ah, u32 next_beacon, u32 beacon_period); - void ath9k_hw_set_sta_beacon_timers(struct ath_hw *ah, ---- a/drivers/net/wireless/ath/ath9k/beacon.c -+++ b/drivers/net/wireless/ath/ath9k/beacon.c -@@ -480,7 +480,8 @@ void ath_beacon_tasklet(unsigned long da - sc->beacon.updateslot = COMMIT; /* commit next beacon */ - sc->beacon.slotupdate = slot; - } else if (sc->beacon.updateslot == COMMIT && sc->beacon.slotupdate == slot) { -- ath9k_hw_setslottime(sc->sc_ah, sc->beacon.slottime); -+ ah->slottime = sc->beacon.slottime; -+ ath9k_hw_init_global_settings(ah); - sc->beacon.updateslot = OK; - } - if (bfaddr != 0) { |