aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00/rt2800lib.c
diff options
context:
space:
mode:
authorHelmut Schaa <helmut.schaa@googlemail.com>2010-07-11 06:28:23 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-07-12 16:05:35 -0400
commit9f926fb57a2eb14d58ea6d6699544f9ccd0df8c7 (patch)
tree968fd46eea2a5691e1be0d2cca4ec6697d53d825 /drivers/net/wireless/rt2x00/rt2800lib.c
parent07896fe2f4df3802a224a2ee1aad1c7345d2513c (diff)
rt2x00: Use pretbtt irq for fetching beacons on rt2800pci
Updating the beacon on pre tbtt instead of beacondone allows much lower latency in regard to TIM updates. Hence, use the pre tbtt interrupt for updating the beacon in rt2800pci (older devices don't provide a pre tbtt interrupt). Also, add a new driver flag to indicate if a driver has pre tbtt support or not and implement the according behavior in rt2x00lib. Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com> Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2800lib.c')
-rw-r--r--drivers/net/wireless/rt2x00/rt2800lib.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index afad3e1c1838..55727328e227 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -807,6 +807,15 @@ void rt2800_config_intf(struct rt2x00_dev *rt2x00dev, struct rt2x00_intf *intf,
807 rt2x00_set_field32(&reg, BCN_TIME_CFG_TBTT_ENABLE, 807 rt2x00_set_field32(&reg, BCN_TIME_CFG_TBTT_ENABLE,
808 (conf->sync == TSF_SYNC_BEACON)); 808 (conf->sync == TSF_SYNC_BEACON));
809 rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg); 809 rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg);
810
811 /*
812 * Enable pre tbtt interrupt for beaconing modes
813 */
814 rt2800_register_read(rt2x00dev, INT_TIMER_EN, &reg);
815 rt2x00_set_field32(&reg, INT_TIMER_EN_PRE_TBTT_TIMER,
816 (conf->sync == TSF_SYNC_BEACON));
817 rt2800_register_write(rt2x00dev, INT_TIMER_EN, reg);
818
810 } 819 }
811 820
812 if (flags & CONFIG_UPDATE_MAC) { 821 if (flags & CONFIG_UPDATE_MAC) {
@@ -1732,6 +1741,13 @@ int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)
1732 rt2800_register_read(rt2x00dev, TX_STA_CNT1, &reg); 1741 rt2800_register_read(rt2x00dev, TX_STA_CNT1, &reg);
1733 rt2800_register_read(rt2x00dev, TX_STA_CNT2, &reg); 1742 rt2800_register_read(rt2x00dev, TX_STA_CNT2, &reg);
1734 1743
1744 /*
1745 * Setup leadtime for pre tbtt interrupt to 6ms
1746 */
1747 rt2800_register_read(rt2x00dev, INT_TIMER_CFG, &reg);
1748 rt2x00_set_field32(&reg, INT_TIMER_CFG_PRE_TBTT_TIMER, 6 << 4);
1749 rt2800_register_write(rt2x00dev, INT_TIMER_CFG, reg);
1750
1735 return 0; 1751 return 0;
1736} 1752}
1737EXPORT_SYMBOL_GPL(rt2800_init_registers); 1753EXPORT_SYMBOL_GPL(rt2800_init_registers);