Skip to content

Commit

Permalink
wlcore: enable beacon filtering only after receiving a beacon
Browse files Browse the repository at this point in the history
Enabling beacon filtering before receving a beacon
might result in not having a beacon at all for the
current connected AP, which prevents the station
from entering power-save.

Replace the current approach (of starting beacon
filtering on init) and configure beacon filering
only after bss_conf->dtimper is set (which means
mac80211 already parsed a beacon).

Signed-off-by: Eliad Peller <eliad@wizery.com>
  • Loading branch information
elp committed Jan 16, 2014
1 parent 3c412db commit a9391db
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 3 deletions.
3 changes: 2 additions & 1 deletion drivers/net/wireless/ti/wlcore/acx.c
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,8 @@ int wl1271_acx_beacon_filter_opt(struct wl1271 *wl, struct wl12xx_vif *wlvif,
struct acx_beacon_filter_option *beacon_filter = NULL;
int ret = 0;

wl1271_debug(DEBUG_ACX, "acx beacon filter opt");
wl1271_debug(DEBUG_ACX, "acx beacon filter opt enable=%d",
enable_filter);

if (enable_filter &&
wl->conf.conn.bcn_filt_mode == CONF_BCN_FILT_MODE_DISABLED)
Expand Down
4 changes: 2 additions & 2 deletions drivers/net/wireless/ti/wlcore/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -287,8 +287,8 @@ static int wl1271_init_sta_beacon_filter(struct wl1271 *wl,
if (ret < 0)
return ret;

/* enable beacon filtering */
ret = wl1271_acx_beacon_filter_opt(wl, wlvif, true);
/* disable beacon filtering until we get the first beacon */
ret = wl1271_acx_beacon_filter_opt(wl, wlvif, false);
if (ret < 0)
return ret;

Expand Down
12 changes: 12 additions & 0 deletions drivers/net/wireless/ti/wlcore/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -3038,6 +3038,11 @@ static int wlcore_unset_assoc(struct wl1271 *wl, struct wl12xx_vif *wlvif)
ret = wl1271_acx_keep_alive_mode(wl, wlvif, false);
if (ret < 0)
return ret;

/* disable beacon filtering */
ret = wl1271_acx_beacon_filter_opt(wl, wlvif, false);
if (ret < 0)
return ret;
}

if (test_and_clear_bit(WLVIF_FLAG_CS_PROGRESS, &wlvif->flags)) {
Expand Down Expand Up @@ -4434,6 +4439,13 @@ static void wl1271_bss_info_changed_sta(struct wl1271 *wl,
}
}

if ((changed & BSS_CHANGED_BEACON_INFO) && bss_conf->dtim_period) {
/* enable beacon filtering */
ret = wl1271_acx_beacon_filter_opt(wl, wlvif, true);
if (ret < 0)
goto out;
}

ret = wl1271_bss_erp_info_changed(wl, vif, bss_conf, changed);
if (ret < 0)
goto out;
Expand Down

0 comments on commit a9391db

Please sign in to comment.