wl12xx: AP specific RX filter configuration
authorArik Nemtsov <arik@wizery.com>
Sat, 16 Oct 2010 16:45:07 +0000 (18:45 +0200)
committerLuciano Coelho <coelho@ti.com>
Mon, 24 Jan 2011 20:11:48 +0000 (22:11 +0200)
Set filters according to the mode of operation.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Reviewed-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
drivers/net/wireless/wl12xx/boot.c
drivers/net/wireless/wl12xx/main.c
drivers/net/wireless/wl12xx/rx.c
drivers/net/wireless/wl12xx/rx.h
drivers/net/wireless/wl12xx/wl12xx.h

index b504367f281f15384aa5684047ca8b7b190604d2..2b1019f67d27d7c7c8809e63c8d9ebc62c064344 100644 (file)
@@ -28,6 +28,7 @@
 #include "boot.h"
 #include "io.h"
 #include "event.h"
+#include "rx.h"
 
 static struct wl1271_partition_set part_table[PART_TABLE_LEN] = {
        [PART_DOWN] = {
@@ -598,8 +599,7 @@ int wl1271_boot(struct wl1271 *wl)
        wl1271_boot_enable_interrupts(wl);
 
        /* set the wl1271 default filters */
-       wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
-       wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
+       wl1271_set_default_filters(wl);
 
        wl1271_event_mbox_config(wl);
 
index 67f6db4354f0b423559fc7116b9df4955400fb1d..d1075a5ac406957df4cdc92644fe7097d2e0d902 100644 (file)
@@ -1227,8 +1227,7 @@ static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
 
 static void wl1271_configure_filters(struct wl1271 *wl, unsigned int filters)
 {
-       wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
-       wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
+       wl1271_set_default_filters(wl);
 
        /* combine requested filters with current filter config */
        filters = wl->filters | filters;
@@ -2758,8 +2757,8 @@ struct ieee80211_hw *wl1271_alloc_hw(void)
        wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
        wl->default_key = 0;
        wl->rx_counter = 0;
-       wl->rx_config = WL1271_DEFAULT_RX_CONFIG;
-       wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
+       wl->rx_config = WL1271_DEFAULT_STA_RX_CONFIG;
+       wl->rx_filter = WL1271_DEFAULT_STA_RX_FILTER;
        wl->psm_entry_retry = 0;
        wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
        wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
index c6402529eac8a8c6e9e6e5f51b4b2fb093d1165a..b0c6ddc2a9455b6064cd43831148c245ce122d46 100644 (file)
@@ -200,3 +200,14 @@ void wl1271_rx(struct wl1271 *wl, struct wl1271_fw_status *status)
        }
        wl1271_write32(wl, RX_DRIVER_COUNTER_ADDRESS, wl->rx_counter);
 }
+
+void wl1271_set_default_filters(struct wl1271 *wl)
+{
+       if (wl->bss_type == BSS_TYPE_AP_BSS) {
+               wl->rx_config = WL1271_DEFAULT_AP_RX_CONFIG;
+               wl->rx_filter = WL1271_DEFAULT_AP_RX_FILTER;
+       } else {
+               wl->rx_config = WL1271_DEFAULT_STA_RX_CONFIG;
+               wl->rx_filter = WL1271_DEFAULT_STA_RX_FILTER;
+       }
+}
index 3abb26fe0364f3d5e66c76d2ec7000a8b056f4ea..f695553f31e0eebd5cd95b692e2aaae44aee8cee 100644 (file)
@@ -117,5 +117,6 @@ struct wl1271_rx_descriptor {
 
 void wl1271_rx(struct wl1271 *wl, struct wl1271_fw_status *status);
 u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band);
+void wl1271_set_default_filters(struct wl1271 *wl);
 
 #endif
index 340153f609c756f56bb52074c3a7757c56d94df6..4bbdb89f1bcbb27baac0a443d7b00dbcf8683a16 100644 (file)
@@ -103,15 +103,24 @@ extern u32 wl12xx_debug_level;
                                       true);                           \
        } while (0)
 
-#define WL1271_DEFAULT_RX_CONFIG (CFG_UNI_FILTER_EN |  \
+#define WL1271_DEFAULT_STA_RX_CONFIG (CFG_UNI_FILTER_EN |      \
                                  CFG_BSSID_FILTER_EN | \
                                  CFG_MC_FILTER_EN)
 
-#define WL1271_DEFAULT_RX_FILTER (CFG_RX_RCTS_ACK | CFG_RX_PRSP_EN |  \
+#define WL1271_DEFAULT_STA_RX_FILTER (CFG_RX_RCTS_ACK | CFG_RX_PRSP_EN |  \
                                  CFG_RX_MGMT_EN | CFG_RX_DATA_EN |   \
                                  CFG_RX_CTL_EN | CFG_RX_BCN_EN |     \
                                  CFG_RX_AUTH_EN | CFG_RX_ASSOC_EN)
 
+#define WL1271_DEFAULT_AP_RX_CONFIG  0
+
+#define WL1271_DEFAULT_AP_RX_FILTER  (CFG_RX_RCTS_ACK | CFG_RX_PREQ_EN | \
+                                 CFG_RX_MGMT_EN | CFG_RX_DATA_EN | \
+                                 CFG_RX_CTL_EN | CFG_RX_AUTH_EN | \
+                                 CFG_RX_ASSOC_EN)
+
+
+
 #define WL1271_FW_NAME "wl1271-fw.bin"
 #define WL1271_NVS_NAME "wl1271-nvs.bin"