diff options
author | Stefano Brivio <stefano.brivio@polimi.it> | 2008-04-13 18:57:03 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-04-16 15:59:57 -0400 |
commit | 3e2c40ef09f397b0123fc0233d5d0531c217dc39 (patch) | |
tree | d245bb9e7ce830b53f270993a9703fe907a4e4dc /drivers/net/wireless/b43legacy/main.c | |
parent | 245cbe7a65f3e17999de276ea1c84538f3a7451e (diff) |
b43legacy: fix TBTT and PU timings
This fixes some timings for pre-TBTT and synthetic PU.
The patch by Michael Buesch has been ported to b43legacy.
Signed-off-by: Stefano Brivio <stefano.brivio@polimi.it>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43legacy/main.c')
-rw-r--r-- | drivers/net/wireless/b43legacy/main.c | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c index f518e796bdec..2422a5dab1d2 100644 --- a/drivers/net/wireless/b43legacy/main.c +++ b/drivers/net/wireless/b43legacy/main.c | |||
@@ -3005,6 +3005,34 @@ static void b43legacy_set_retry_limits(struct b43legacy_wldev *dev, | |||
3005 | b43legacy_shm_write16(dev, B43legacy_SHM_WIRELESS, 0x0007, long_retry); | 3005 | b43legacy_shm_write16(dev, B43legacy_SHM_WIRELESS, 0x0007, long_retry); |
3006 | } | 3006 | } |
3007 | 3007 | ||
3008 | static void b43legacy_set_synth_pu_delay(struct b43legacy_wldev *dev, | ||
3009 | bool idle) { | ||
3010 | u16 pu_delay = 1050; | ||
3011 | |||
3012 | if (b43legacy_is_mode(dev->wl, IEEE80211_IF_TYPE_IBSS) || idle) | ||
3013 | pu_delay = 500; | ||
3014 | if ((dev->phy.radio_ver == 0x2050) && (dev->phy.radio_rev == 8)) | ||
3015 | pu_delay = max(pu_delay, (u16)2400); | ||
3016 | |||
3017 | b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, | ||
3018 | B43legacy_SHM_SH_SPUWKUP, pu_delay); | ||
3019 | } | ||
3020 | |||
3021 | /* Set the TSF CFP pre-TargetBeaconTransmissionTime. */ | ||
3022 | static void b43legacy_set_pretbtt(struct b43legacy_wldev *dev) | ||
3023 | { | ||
3024 | u16 pretbtt; | ||
3025 | |||
3026 | /* The time value is in microseconds. */ | ||
3027 | if (b43legacy_is_mode(dev->wl, IEEE80211_IF_TYPE_IBSS)) | ||
3028 | pretbtt = 2; | ||
3029 | else | ||
3030 | pretbtt = 250; | ||
3031 | b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, | ||
3032 | B43legacy_SHM_SH_PRETBTT, pretbtt); | ||
3033 | b43legacy_write16(dev, B43legacy_MMIO_TSF_CFP_PRETBTT, pretbtt); | ||
3034 | } | ||
3035 | |||
3008 | /* Shutdown a wireless core */ | 3036 | /* Shutdown a wireless core */ |
3009 | /* Locking: wl->mutex */ | 3037 | /* Locking: wl->mutex */ |
3010 | static void b43legacy_wireless_core_exit(struct b43legacy_wldev *dev) | 3038 | static void b43legacy_wireless_core_exit(struct b43legacy_wldev *dev) |
@@ -3191,9 +3219,7 @@ static int b43legacy_wireless_core_init(struct b43legacy_wldev *dev) | |||
3191 | if (err) | 3219 | if (err) |
3192 | goto err_chip_exit; | 3220 | goto err_chip_exit; |
3193 | 3221 | ||
3194 | b43legacy_write16(dev, 0x0612, 0x0050); | 3222 | b43legacy_set_synth_pu_delay(dev, 1); |
3195 | b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, 0x0416, 0x0050); | ||
3196 | b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, 0x0414, 0x01F4); | ||
3197 | 3223 | ||
3198 | ssb_bus_powerup(bus, 1); /* Enable dynamic PCTL */ | 3224 | ssb_bus_powerup(bus, 1); /* Enable dynamic PCTL */ |
3199 | b43legacy_upload_card_macaddress(dev); | 3225 | b43legacy_upload_card_macaddress(dev); |
@@ -3249,6 +3275,8 @@ static int b43legacy_op_add_interface(struct ieee80211_hw *hw, | |||
3249 | 3275 | ||
3250 | spin_lock_irqsave(&wl->irq_lock, flags); | 3276 | spin_lock_irqsave(&wl->irq_lock, flags); |
3251 | b43legacy_adjust_opmode(dev); | 3277 | b43legacy_adjust_opmode(dev); |
3278 | b43legacy_set_pretbtt(dev); | ||
3279 | b43legacy_set_synth_pu_delay(dev, 0); | ||
3252 | b43legacy_upload_card_macaddress(dev); | 3280 | b43legacy_upload_card_macaddress(dev); |
3253 | spin_unlock_irqrestore(&wl->irq_lock, flags); | 3281 | spin_unlock_irqrestore(&wl->irq_lock, flags); |
3254 | 3282 | ||