wl1271: Use slow rates for association messages
authorJuuso Oikarinen <juuso.oikarinen@nokia.com>
Fri, 11 Dec 2009 13:40:58 +0000 (15:40 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 28 Dec 2009 21:31:33 +0000 (16:31 -0500)
While not associated, default the data rates to 1 and 2mbps, so that only
those rates will be used for association related message transfer. Once
associated, configure the full rate-set supported by the AP.

Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Reviewed-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/wl12xx/wl1271.h
drivers/net/wireless/wl12xx/wl1271_conf.h
drivers/net/wireless/wl12xx/wl1271_init.c
drivers/net/wireless/wl12xx/wl1271_main.c

index 8dfc9ec9590de2a5d37136ced35212373697e03f..4b5ddba96f0b0f7263af4bc2ca4cfa90798fed3c 100644 (file)
@@ -107,8 +107,6 @@ enum {
                                  CFG_RX_CTL_EN | CFG_RX_BCN_EN |     \
                                  CFG_RX_AUTH_EN | CFG_RX_ASSOC_EN)
 
-#define WL1271_DEFAULT_BASIC_RATE_SET (CONF_TX_RATE_MASK_ALL)
-
 #define WL1271_FW_NAME "wl1271-fw.bin"
 #define WL1271_NVS_NAME "wl1271-nvs.bin"
 #define WL1271_NVS_LEN  468
index c87ae56ce42a3020f82c99e4dedd07ca5b8973e1..5d1b5b6493e9bc900f8017cf68d40eeb18e77ba7 100644 (file)
@@ -258,7 +258,8 @@ struct conf_rx_settings {
 #define CONF_TX_MAX_RATE_CLASSES       8
 
 #define CONF_TX_RATE_MASK_UNSPECIFIED  0
-#define CONF_TX_RATE_MASK_ALL          0x1eff
+#define CONF_TX_RATE_MASK_BASIC        (CONF_HW_BIT_RATE_1MBPS | \
+                                       CONF_HW_BIT_RATE_2MBPS)
 #define CONF_TX_RATE_RETRY_LIMIT       10
 
 struct conf_tx_rate_class {
index 7bfd6c6a4c77ab7cc6ffc872823e1bc065b37ce9..c67889dd18fcc85745913eef6a11a912702e2d20 100644 (file)
@@ -284,7 +284,7 @@ int wl1271_hw_init(struct wl1271 *wl)
                goto out_free_memmap;
 
        /* Configure TX rate classes */
-       ret = wl1271_acx_rate_policies(wl, WL1271_DEFAULT_BASIC_RATE_SET);
+       ret = wl1271_acx_rate_policies(wl, CONF_TX_RATE_MASK_BASIC);
        if (ret < 0)
                goto out_free_memmap;
 
index 5a6e4d44696250d8b5eeb922d911bd7abc1e8a7b..272a8fa677ef3ae66f80600ce364bca9518a07ec 100644 (file)
@@ -1180,6 +1180,11 @@ static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
                        wl1271_unjoin_channel(wl);
                else
                        wl1271_join_channel(wl, channel);
+
+               if (conf->flags & IEEE80211_CONF_IDLE) {
+                       wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
+                       wl1271_acx_rate_policies(wl, CONF_TX_RATE_MASK_BASIC);
+               }
        }
 
        /* if the channel changes while joined, join again */
@@ -1568,7 +1573,6 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
                        }
                } else {
                        /* use defaults when not associated */
-                       wl->basic_rate_set = WL1271_DEFAULT_BASIC_RATE_SET;
                        wl->aid = 0;
                }
 
@@ -1897,7 +1901,7 @@ static int __devinit wl1271_probe(struct spi_device *spi)
        wl->psm_entry_retry = 0;
        wl->tx_queue_stopped = false;
        wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
-       wl->basic_rate_set = WL1271_DEFAULT_BASIC_RATE_SET;
+       wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
        wl->band = IEEE80211_BAND_2GHZ;
        wl->vif = NULL;
        wl->joined = false;