wl1251: fix filtering support
This driver has a hack in cmd.c which effectively disables all filtering. This seems to be triggering a firmware bug where it stops reporting any rx packets after random time on some routers, which is eliminated (or at least appears much more rarely) when filtering is on. I have found that only BSSID filter needs to be disabled for association to work, so disable only that instead of all filtering. Signed-off-by: Grazvydas Ignotas <notasas@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
7e05bedca0
commit
a2d2bb8675
2 changed files with 6 additions and 9 deletions
|
@ -277,15 +277,6 @@ int wl1251_cmd_join(struct wl1251 *wl, u8 bss_type, u8 channel,
|
||||||
join->rx_config_options = wl->rx_config;
|
join->rx_config_options = wl->rx_config;
|
||||||
join->rx_filter_options = wl->rx_filter;
|
join->rx_filter_options = wl->rx_filter;
|
||||||
|
|
||||||
/*
|
|
||||||
* FIXME: disable temporarily all filters because after commit
|
|
||||||
* 9cef8737 "mac80211: fix managed mode BSSID handling" broke
|
|
||||||
* association. The filter logic needs to be implemented properly
|
|
||||||
* and once that is done, this hack can be removed.
|
|
||||||
*/
|
|
||||||
join->rx_config_options = 0;
|
|
||||||
join->rx_filter_options = WL1251_DEFAULT_RX_FILTER;
|
|
||||||
|
|
||||||
join->basic_rate_set = RATE_MASK_1MBPS | RATE_MASK_2MBPS |
|
join->basic_rate_set = RATE_MASK_1MBPS | RATE_MASK_2MBPS |
|
||||||
RATE_MASK_5_5MBPS | RATE_MASK_11MBPS;
|
RATE_MASK_5_5MBPS | RATE_MASK_11MBPS;
|
||||||
|
|
||||||
|
|
|
@ -334,6 +334,12 @@ static int wl1251_join(struct wl1251 *wl, u8 bss_type, u8 channel,
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Join command applies filters, and if we are not associated,
|
||||||
|
* BSSID filter must be disabled for association to work.
|
||||||
|
*/
|
||||||
|
if (is_zero_ether_addr(wl->bssid))
|
||||||
|
wl->rx_config &= ~CFG_BSSID_FILTER_EN;
|
||||||
|
|
||||||
ret = wl1251_cmd_join(wl, bss_type, channel, beacon_interval,
|
ret = wl1251_cmd_join(wl, bss_type, channel, beacon_interval,
|
||||||
dtim_period);
|
dtim_period);
|
||||||
|
|
Loading…
Add table
Reference in a new issue