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>
 #include "boot.h"
 #include "io.h"
 #include "event.h"
+#include "rx.h"
 
 static struct wl1271_partition_set part_table[PART_TABLE_LEN] = {
        [PART_DOWN] = {
        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);
 
 
 
 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;
        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;
 
        }
        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;
+       }
+}
 
 
 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
 
                                       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"