Commit 6ccbb92e authored by Juuso Oikarinen's avatar Juuso Oikarinen Committed by John W. Linville

wl1271: Disable connection monitoring while not associated

The wl1271 does not support disabling the connection monitor feature.
Perform the next best thing by increasing the beacon-loss threshold and
BSS_LOSE event timeout to the maximum values.

This is needed, because we really don't want any random probe-requests during
scanning or especially while in ad-hoc mode and not beaconing.
Signed-off-by: default avatarJuuso Oikarinen <juuso.oikarinen@nokia.com>
Reviewed-by: default avatarTeemu Paasikivi <ext-teemu.3.paasikivi@nokia.com>
Signed-off-by: default avatarLuciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent e7942235
...@@ -504,12 +504,17 @@ int wl1271_acx_beacon_filter_table(struct wl1271 *wl) ...@@ -504,12 +504,17 @@ int wl1271_acx_beacon_filter_table(struct wl1271 *wl)
return ret; return ret;
} }
int wl1271_acx_conn_monit_params(struct wl1271 *wl) #define ACX_CONN_MONIT_DISABLE_VALUE 0xffffffff
int wl1271_acx_conn_monit_params(struct wl1271 *wl, bool enable)
{ {
struct acx_conn_monit_params *acx; struct acx_conn_monit_params *acx;
u32 threshold = ACX_CONN_MONIT_DISABLE_VALUE;
u32 timeout = ACX_CONN_MONIT_DISABLE_VALUE;
int ret; int ret;
wl1271_debug(DEBUG_ACX, "acx connection monitor parameters"); wl1271_debug(DEBUG_ACX, "acx connection monitor parameters: %s",
enable ? "enabled" : "disabled");
acx = kzalloc(sizeof(*acx), GFP_KERNEL); acx = kzalloc(sizeof(*acx), GFP_KERNEL);
if (!acx) { if (!acx) {
...@@ -517,8 +522,13 @@ int wl1271_acx_conn_monit_params(struct wl1271 *wl) ...@@ -517,8 +522,13 @@ int wl1271_acx_conn_monit_params(struct wl1271 *wl)
goto out; goto out;
} }
acx->synch_fail_thold = cpu_to_le32(wl->conf.conn.synch_fail_thold); if (enable) {
acx->bss_lose_timeout = cpu_to_le32(wl->conf.conn.bss_lose_timeout); threshold = wl->conf.conn.synch_fail_thold;
timeout = wl->conf.conn.bss_lose_timeout;
}
acx->synch_fail_thold = cpu_to_le32(threshold);
acx->bss_lose_timeout = cpu_to_le32(timeout);
ret = wl1271_cmd_configure(wl, ACX_CONN_MONIT_PARAMS, ret = wl1271_cmd_configure(wl, ACX_CONN_MONIT_PARAMS,
acx, sizeof(*acx)); acx, sizeof(*acx));
......
...@@ -1004,7 +1004,7 @@ int wl1271_acx_rts_threshold(struct wl1271 *wl, u16 rts_threshold); ...@@ -1004,7 +1004,7 @@ int wl1271_acx_rts_threshold(struct wl1271 *wl, u16 rts_threshold);
int wl1271_acx_dco_itrim_params(struct wl1271 *wl); int wl1271_acx_dco_itrim_params(struct wl1271 *wl);
int wl1271_acx_beacon_filter_opt(struct wl1271 *wl, bool enable_filter); int wl1271_acx_beacon_filter_opt(struct wl1271 *wl, bool enable_filter);
int wl1271_acx_beacon_filter_table(struct wl1271 *wl); int wl1271_acx_beacon_filter_table(struct wl1271 *wl);
int wl1271_acx_conn_monit_params(struct wl1271 *wl); int wl1271_acx_conn_monit_params(struct wl1271 *wl, bool enable);
int wl1271_acx_sg_enable(struct wl1271 *wl, bool enable); int wl1271_acx_sg_enable(struct wl1271 *wl, bool enable);
int wl1271_acx_sg_cfg(struct wl1271 *wl); int wl1271_acx_sg_cfg(struct wl1271 *wl);
int wl1271_acx_cca_threshold(struct wl1271 *wl); int wl1271_acx_cca_threshold(struct wl1271 *wl);
......
...@@ -236,7 +236,7 @@ int wl1271_hw_init(struct wl1271 *wl) ...@@ -236,7 +236,7 @@ int wl1271_hw_init(struct wl1271 *wl)
goto out_free_memmap; goto out_free_memmap;
/* Initialize connection monitoring thresholds */ /* Initialize connection monitoring thresholds */
ret = wl1271_acx_conn_monit_params(wl); ret = wl1271_acx_conn_monit_params(wl, false);
if (ret < 0) if (ret < 0)
goto out_free_memmap; goto out_free_memmap;
......
...@@ -348,7 +348,7 @@ static int wl1271_plt_init(struct wl1271 *wl) ...@@ -348,7 +348,7 @@ static int wl1271_plt_init(struct wl1271 *wl)
goto out_free_memmap; goto out_free_memmap;
/* Initialize connection monitoring thresholds */ /* Initialize connection monitoring thresholds */
ret = wl1271_acx_conn_monit_params(wl); ret = wl1271_acx_conn_monit_params(wl, false);
if (ret < 0) if (ret < 0)
goto out_free_memmap; goto out_free_memmap;
...@@ -1651,6 +1651,11 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw, ...@@ -1651,6 +1651,11 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
if (ret < 0) if (ret < 0)
goto out_sleep; goto out_sleep;
/* enable the connection monitoring feature */
ret = wl1271_acx_conn_monit_params(wl, true);
if (ret < 0)
goto out_sleep;
/* If we want to go in PSM but we're not there yet */ /* If we want to go in PSM but we're not there yet */
if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) && if (test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags) &&
!test_bit(WL1271_FLAG_PSM, &wl->flags)) { !test_bit(WL1271_FLAG_PSM, &wl->flags)) {
...@@ -1663,6 +1668,11 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw, ...@@ -1663,6 +1668,11 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
/* use defaults when not associated */ /* use defaults when not associated */
clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags); clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
wl->aid = 0; wl->aid = 0;
/* disable connection monitor features */
ret = wl1271_acx_conn_monit_params(wl, false);
if (ret < 0)
goto out_sleep;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment