mirror of https://gitee.com/openkylin/linux.git
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: Juuso Oikarinen <juuso.oikarinen@nokia.com> Reviewed-by: Teemu Paasikivi <ext-teemu.3.paasikivi@nokia.com> Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
e7942235f2
commit
6ccbb92ead
|
@ -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)
|
||||||
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);
|
||||||
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)
|
||||||
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)
|
||||||
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,
|
||||||
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,
|
||||||
/* 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue