summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>2011-05-17 17:17:57 +0200
committerPhilippe LANGLAIS <philippe.langlais@stericsson.com>2011-05-23 08:34:17 +0200
commitea46b1c727697ac60318bfe1d38695ced0554a3d (patch)
tree38adef65fbaeb7a5404d6c3e188658c0d9c79c67
parentb934b4f6a4f0fabb6292340ebe5d0101a4015eb6 (diff)
wlan: cw1200: Reenable filtering.
Filtering is enabled again (was broken in earlier firmware). Added support for FIF_PROBE_REQ for management frames. New WSM API wsm_set_bssid_filtering is used. Signed-off-by: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com> Change-Id: Id8a44424a8ae2b0ba7d4082a096c88344e7a1a78 Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/23605 Reviewed-by: Philippe LANGLAIS <philippe.langlais@stericsson.com>
-rw-r--r--drivers/staging/cw1200/sta.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/staging/cw1200/sta.c b/drivers/staging/cw1200/sta.c
index 4cdcd4a43a6..540439863dd 100644
--- a/drivers/staging/cw1200/sta.c
+++ b/drivers/staging/cw1200/sta.c
@@ -326,11 +326,11 @@ void cw1200_configure_filter(struct ieee80211_hw *dev,
unsigned int *total_flags,
u64 multicast)
{
-#if 0
struct cw1200_common *priv = dev->priv;
struct wsm_rx_filter filter = {
.promiscuous = (*total_flags & FIF_PROMISC_IN_BSS) ? 1 : 0,
- .bssid = (*total_flags & FIF_OTHER_BSS) ? 1 : 0,
+ .bssid = (*total_flags & (FIF_OTHER_BSS | FIF_PROBE_REQ)) ?
+ 1 : 0,
.fcs = (*total_flags & FIF_FCSFAIL) ? 1 : 0,
};
struct wsm_beacon_filter_control bf_control = {
@@ -339,18 +339,16 @@ void cw1200_configure_filter(struct ieee80211_hw *dev,
(FIF_BCN_PRBRESP_PROMISC | FIF_PROMISC_IN_BSS)) ?
1 : 0,
};
-#endif
*total_flags &= FIF_PROMISC_IN_BSS |
FIF_OTHER_BSS |
FIF_FCSFAIL |
- FIF_BCN_PRBRESP_PROMISC;
+ FIF_BCN_PRBRESP_PROMISC |
+ FIF_PROBE_REQ;
-#if 0
- /* FIXME: FW behaves strange if promiscuous mode is enabled. */
WARN_ON(wsm_set_rx_filter(priv, &filter));
WARN_ON(wsm_beacon_filter_control(priv, &bf_control));
-#endif
+ WARN_ON(wsm_set_bssid_filtering(priv, !filter.bssid));
}
int cw1200_conf_tx(struct ieee80211_hw *dev, u16 queue,
@@ -596,6 +594,8 @@ static int __cw1200_flush(struct cw1200_common *priv, bool drop)
if (!ret)
ret = -ETIMEDOUT;
break;
+ } else {
+ ret = 0;
}
wsm_lock_tx(priv);