aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArik Nemtsov <arik@wizery.com>2010-10-16 12:45:07 -0400
committerLuciano Coelho <coelho@ti.com>2011-01-24 15:11:48 -0500
commitae113b57826b40f1962a6e2417efd757b638e6a9 (patch)
tree1cb667e29cb3d21521afc9c8f304fcb83947fa3e
parente0fe371b74326a85029fe8720506e021fe73905a (diff)
wl12xx: AP specific RX filter configuration
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>
-rw-r--r--drivers/net/wireless/wl12xx/boot.c4
-rw-r--r--drivers/net/wireless/wl12xx/main.c7
-rw-r--r--drivers/net/wireless/wl12xx/rx.c11
-rw-r--r--drivers/net/wireless/wl12xx/rx.h1
-rw-r--r--drivers/net/wireless/wl12xx/wl12xx.h13
5 files changed, 28 insertions, 8 deletions
diff --git a/drivers/net/wireless/wl12xx/boot.c b/drivers/net/wireless/wl12xx/boot.c
index b504367f281..2b1019f67d2 100644
--- a/drivers/net/wireless/wl12xx/boot.c
+++ b/drivers/net/wireless/wl12xx/boot.c
@@ -28,6 +28,7 @@
28#include "boot.h" 28#include "boot.h"
29#include "io.h" 29#include "io.h"
30#include "event.h" 30#include "event.h"
31#include "rx.h"
31 32
32static struct wl1271_partition_set part_table[PART_TABLE_LEN] = { 33static struct wl1271_partition_set part_table[PART_TABLE_LEN] = {
33 [PART_DOWN] = { 34 [PART_DOWN] = {
@@ -598,8 +599,7 @@ int wl1271_boot(struct wl1271 *wl)
598 wl1271_boot_enable_interrupts(wl); 599 wl1271_boot_enable_interrupts(wl);
599 600
600 /* set the wl1271 default filters */ 601 /* set the wl1271 default filters */
601 wl->rx_config = WL1271_DEFAULT_RX_CONFIG; 602 wl1271_set_default_filters(wl);
602 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
603 603
604 wl1271_event_mbox_config(wl); 604 wl1271_event_mbox_config(wl);
605 605
diff --git a/drivers/net/wireless/wl12xx/main.c b/drivers/net/wireless/wl12xx/main.c
index 67f6db4354f..d1075a5ac40 100644
--- a/drivers/net/wireless/wl12xx/main.c
+++ b/drivers/net/wireless/wl12xx/main.c
@@ -1227,8 +1227,7 @@ static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
1227 1227
1228static void wl1271_configure_filters(struct wl1271 *wl, unsigned int filters) 1228static void wl1271_configure_filters(struct wl1271 *wl, unsigned int filters)
1229{ 1229{
1230 wl->rx_config = WL1271_DEFAULT_RX_CONFIG; 1230 wl1271_set_default_filters(wl);
1231 wl->rx_filter = WL1271_DEFAULT_RX_FILTER;
1232 1231
1233 /* combine requested filters with current filter config */ 1232 /* combine requested filters with current filter config */
1234 filters = wl->filters | filters; 1233 filters = wl->filters | filters;
@@ -2758,8 +2757,8 @@ struct ieee80211_hw *wl1271_alloc_hw(void)
2758 wl->beacon_int = WL1271_DEFAULT_BEACON_INT; 2757 wl->beacon_int = WL1271_DEFAULT_BEACON_INT;
2759 wl->default_key = 0; 2758 wl->default_key = 0;
2760 wl->rx_counter = 0; 2759 wl->rx_counter = 0;
2761 wl->rx_config = WL1271_DEFAULT_RX_CONFIG; 2760 wl->rx_config = WL1271_DEFAULT_STA_RX_CONFIG;
2762 wl->rx_filter = WL1271_DEFAULT_RX_FILTER; 2761 wl->rx_filter = WL1271_DEFAULT_STA_RX_FILTER;
2763 wl->psm_entry_retry = 0; 2762 wl->psm_entry_retry = 0;
2764 wl->power_level = WL1271_DEFAULT_POWER_LEVEL; 2763 wl->power_level = WL1271_DEFAULT_POWER_LEVEL;
2765 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC; 2764 wl->basic_rate_set = CONF_TX_RATE_MASK_BASIC;
diff --git a/drivers/net/wireless/wl12xx/rx.c b/drivers/net/wireless/wl12xx/rx.c
index c6402529eac..b0c6ddc2a94 100644
--- a/drivers/net/wireless/wl12xx/rx.c
+++ b/drivers/net/wireless/wl12xx/rx.c
@@ -200,3 +200,14 @@ void wl1271_rx(struct wl1271 *wl, struct wl1271_fw_status *status)
200 } 200 }
201 wl1271_write32(wl, RX_DRIVER_COUNTER_ADDRESS, wl->rx_counter); 201 wl1271_write32(wl, RX_DRIVER_COUNTER_ADDRESS, wl->rx_counter);
202} 202}
203
204void wl1271_set_default_filters(struct wl1271 *wl)
205{
206 if (wl->bss_type == BSS_TYPE_AP_BSS) {
207 wl->rx_config = WL1271_DEFAULT_AP_RX_CONFIG;
208 wl->rx_filter = WL1271_DEFAULT_AP_RX_FILTER;
209 } else {
210 wl->rx_config = WL1271_DEFAULT_STA_RX_CONFIG;
211 wl->rx_filter = WL1271_DEFAULT_STA_RX_FILTER;
212 }
213}
diff --git a/drivers/net/wireless/wl12xx/rx.h b/drivers/net/wireless/wl12xx/rx.h
index 3abb26fe036..f695553f31e 100644
--- a/drivers/net/wireless/wl12xx/rx.h
+++ b/drivers/net/wireless/wl12xx/rx.h
@@ -117,5 +117,6 @@ struct wl1271_rx_descriptor {
117 117
118void wl1271_rx(struct wl1271 *wl, struct wl1271_fw_status *status); 118void wl1271_rx(struct wl1271 *wl, struct wl1271_fw_status *status);
119u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band); 119u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band);
120void wl1271_set_default_filters(struct wl1271 *wl);
120 121
121#endif 122#endif
diff --git a/drivers/net/wireless/wl12xx/wl12xx.h b/drivers/net/wireless/wl12xx/wl12xx.h
index 340153f609c..4bbdb89f1bc 100644
--- a/drivers/net/wireless/wl12xx/wl12xx.h
+++ b/drivers/net/wireless/wl12xx/wl12xx.h
@@ -103,15 +103,24 @@ extern u32 wl12xx_debug_level;
103 true); \ 103 true); \
104 } while (0) 104 } while (0)
105 105
106#define WL1271_DEFAULT_RX_CONFIG (CFG_UNI_FILTER_EN | \ 106#define WL1271_DEFAULT_STA_RX_CONFIG (CFG_UNI_FILTER_EN | \
107 CFG_BSSID_FILTER_EN | \ 107 CFG_BSSID_FILTER_EN | \
108 CFG_MC_FILTER_EN) 108 CFG_MC_FILTER_EN)
109 109
110#define WL1271_DEFAULT_RX_FILTER (CFG_RX_RCTS_ACK | CFG_RX_PRSP_EN | \ 110#define WL1271_DEFAULT_STA_RX_FILTER (CFG_RX_RCTS_ACK | CFG_RX_PRSP_EN | \
111 CFG_RX_MGMT_EN | CFG_RX_DATA_EN | \ 111 CFG_RX_MGMT_EN | CFG_RX_DATA_EN | \
112 CFG_RX_CTL_EN | CFG_RX_BCN_EN | \ 112 CFG_RX_CTL_EN | CFG_RX_BCN_EN | \
113 CFG_RX_AUTH_EN | CFG_RX_ASSOC_EN) 113 CFG_RX_AUTH_EN | CFG_RX_ASSOC_EN)
114 114
115#define WL1271_DEFAULT_AP_RX_CONFIG 0
116
117#define WL1271_DEFAULT_AP_RX_FILTER (CFG_RX_RCTS_ACK | CFG_RX_PREQ_EN | \
118 CFG_RX_MGMT_EN | CFG_RX_DATA_EN | \
119 CFG_RX_CTL_EN | CFG_RX_AUTH_EN | \
120 CFG_RX_ASSOC_EN)
121
122
123
115#define WL1271_FW_NAME "wl1271-fw.bin" 124#define WL1271_FW_NAME "wl1271-fw.bin"
116#define WL1271_NVS_NAME "wl1271-nvs.bin" 125#define WL1271_NVS_NAME "wl1271-nvs.bin"
117 126