wl1251: send filters to firmware as they are set
Firmware supports changing filters using ACX_RX_CFG command, so use it in .configure_filter callback. Firmware also supports probe request filtering, so add it too along the way. This will also re-enable BSSID filter which is now removed by join command while associating. Signed-off-by: Grazvydas Ignotas <notasas@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
a2d2bb8675
commit
84b60c144c
@ -659,13 +659,15 @@ out:
|
||||
FIF_FCSFAIL | \
|
||||
FIF_BCN_PRBRESP_PROMISC | \
|
||||
FIF_CONTROL | \
|
||||
FIF_OTHER_BSS)
|
||||
FIF_OTHER_BSS | \
|
||||
FIF_PROBE_REQ)
|
||||
|
||||
static void wl1251_op_configure_filter(struct ieee80211_hw *hw,
|
||||
unsigned int changed,
|
||||
unsigned int *total,u64 multicast)
|
||||
{
|
||||
struct wl1251 *wl = hw->priv;
|
||||
int ret;
|
||||
|
||||
wl1251_debug(DEBUG_MAC80211, "mac80211 configure filter");
|
||||
|
||||
@ -676,7 +678,7 @@ static void wl1251_op_configure_filter(struct ieee80211_hw *hw,
|
||||
/* no filters which we support changed */
|
||||
return;
|
||||
|
||||
/* FIXME: wl->rx_config and wl->rx_filter are not protected */
|
||||
mutex_lock(&wl->mutex);
|
||||
|
||||
wl->rx_config = WL1251_DEFAULT_RX_CONFIG;
|
||||
wl->rx_filter = WL1251_DEFAULT_RX_FILTER;
|
||||
@ -699,8 +701,25 @@ static void wl1251_op_configure_filter(struct ieee80211_hw *hw,
|
||||
}
|
||||
if (*total & FIF_CONTROL)
|
||||
wl->rx_filter |= CFG_RX_CTL_EN;
|
||||
if (*total & FIF_OTHER_BSS)
|
||||
wl->rx_filter &= ~CFG_BSSID_FILTER_EN;
|
||||
if (*total & FIF_OTHER_BSS || is_zero_ether_addr(wl->bssid))
|
||||
wl->rx_config &= ~CFG_BSSID_FILTER_EN;
|
||||
if (*total & FIF_PROBE_REQ)
|
||||
wl->rx_filter |= CFG_RX_PREQ_EN;
|
||||
|
||||
if (wl->state == WL1251_STATE_OFF)
|
||||
goto out;
|
||||
|
||||
ret = wl1251_ps_elp_wakeup(wl);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
/* send filters to firmware */
|
||||
wl1251_acx_rx_config(wl, wl->rx_config, wl->rx_filter);
|
||||
|
||||
wl1251_ps_elp_sleep(wl);
|
||||
|
||||
out:
|
||||
mutex_unlock(&wl->mutex);
|
||||
}
|
||||
|
||||
/* HW encryption */
|
||||
|
Loading…
Reference in New Issue
Block a user