OSDN Git Service

ath9k_hw: use standard SIFS time as reference for half/quarter channels
authorFelix Fietkau <nbd@openwrt.org>
Thu, 19 Apr 2012 19:18:22 +0000 (21:18 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 23 Apr 2012 19:35:30 +0000 (15:35 -0400)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/hw.c

index 72c5bcd..a43934f 100644 (file)
@@ -1041,6 +1041,11 @@ void ath9k_hw_init_global_settings(struct ath_hw *ah)
                rx_lat = 37;
        tx_lat = 54;
 
+       if (IS_CHAN_5GHZ(chan))
+               sifstime = 16;
+       else
+               sifstime = 10;
+
        if (IS_CHAN_HALF_RATE(chan)) {
                eifs = 175;
                rx_lat *= 2;
@@ -1048,8 +1053,8 @@ void ath9k_hw_init_global_settings(struct ath_hw *ah)
                if (IS_CHAN_A_FAST_CLOCK(ah, chan))
                    tx_lat += 11;
 
+               sifstime *= 2;
                slottime = 13;
-               sifstime = 32;
        } else if (IS_CHAN_QUARTER_RATE(chan)) {
                eifs = 340;
                rx_lat = (rx_lat * 4) - 1;
@@ -1057,8 +1062,8 @@ void ath9k_hw_init_global_settings(struct ath_hw *ah)
                if (IS_CHAN_A_FAST_CLOCK(ah, chan))
                    tx_lat += 22;
 
+               sifstime *= 4;
                slottime = 21;
-               sifstime = 64;
        } else {
                if (AR_SREV_9287(ah) && AR_SREV_9287_13_OR_LATER(ah)) {
                        eifs = AR_D_GBL_IFS_EIFS_ASYNC_FIFO;
@@ -1072,10 +1077,6 @@ void ath9k_hw_init_global_settings(struct ath_hw *ah)
                tx_lat = MS(reg, AR_USEC_TX_LAT);
 
                slottime = ah->slottime;
-               if (IS_CHAN_5GHZ(chan))
-                       sifstime = 16;
-               else
-                       sifstime = 10;
        }
 
        /* As defined by IEEE 802.11-2007 17.3.8.6 */