Commit 474c48c9 authored by Juuso Oikarinen's avatar Juuso Oikarinen Committed by John W. Linville

wl1251: Add connection monitoring configuration

Add configuration for connection monitor (number of allowed beacons, and
timeout after last received beacon.)
Signed-off-by: default avatarJuuso Oikarinen <juuso.oikarinen@nokia.com>
Signed-off-by: default avatarKalle Valo <kalle.valo@nokia.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 15295380
...@@ -550,6 +550,35 @@ int wl1251_acx_beacon_filter_table(struct wl1251 *wl) ...@@ -550,6 +550,35 @@ int wl1251_acx_beacon_filter_table(struct wl1251 *wl)
return ret; return ret;
} }
int wl1251_acx_conn_monit_params(struct wl1251 *wl)
{
struct acx_conn_monit_params *acx;
int ret;
wl1251_debug(DEBUG_ACX, "acx connection monitor parameters");
acx = kzalloc(sizeof(*acx), GFP_KERNEL);
if (!acx) {
ret = -ENOMEM;
goto out;
}
acx->synch_fail_thold = SYNCH_FAIL_DEFAULT_THRESHOLD;
acx->bss_lose_timeout = NO_BEACON_DEFAULT_TIMEOUT;
ret = wl1251_cmd_configure(wl, ACX_CONN_MONIT_PARAMS,
acx, sizeof(*acx));
if (ret < 0) {
wl1251_warning("failed to set connection monitor "
"parameters: %d", ret);
goto out;
}
out:
kfree(acx);
return ret;
}
int wl1251_acx_sg_enable(struct wl1251 *wl) int wl1251_acx_sg_enable(struct wl1251 *wl)
{ {
struct acx_bt_wlan_coex *pta; struct acx_bt_wlan_coex *pta;
......
...@@ -458,6 +458,16 @@ struct acx_beacon_filter_ie_table { ...@@ -458,6 +458,16 @@ struct acx_beacon_filter_ie_table {
u8 pad[3]; u8 pad[3];
} __attribute__ ((packed)); } __attribute__ ((packed));
#define SYNCH_FAIL_DEFAULT_THRESHOLD 5 /* number of beacons */
#define NO_BEACON_DEFAULT_TIMEOUT (100) /* TU */
struct acx_conn_monit_params {
struct acx_header header;
u32 synch_fail_thold; /* number of beacons missed */
u32 bss_lose_timeout; /* number of TU's from synch fail */
};
enum { enum {
SG_ENABLE = 0, SG_ENABLE = 0,
SG_DISABLE, SG_DISABLE,
...@@ -1275,6 +1285,7 @@ int wl1251_acx_service_period_timeout(struct wl1251 *wl); ...@@ -1275,6 +1285,7 @@ int wl1251_acx_service_period_timeout(struct wl1251 *wl);
int wl1251_acx_rts_threshold(struct wl1251 *wl, u16 rts_threshold); int wl1251_acx_rts_threshold(struct wl1251 *wl, u16 rts_threshold);
int wl1251_acx_beacon_filter_opt(struct wl1251 *wl); int wl1251_acx_beacon_filter_opt(struct wl1251 *wl);
int wl1251_acx_beacon_filter_table(struct wl1251 *wl); int wl1251_acx_beacon_filter_table(struct wl1251 *wl);
int wl1251_acx_conn_monit_params(struct wl1251 *wl);
int wl1251_acx_sg_enable(struct wl1251 *wl); int wl1251_acx_sg_enable(struct wl1251 *wl);
int wl1251_acx_sg_cfg(struct wl1251 *wl); int wl1251_acx_sg_cfg(struct wl1251 *wl);
int wl1251_acx_cca_threshold(struct wl1251 *wl); int wl1251_acx_cca_threshold(struct wl1251 *wl);
......
...@@ -364,6 +364,11 @@ int wl1251_hw_init(struct wl1251 *wl) ...@@ -364,6 +364,11 @@ int wl1251_hw_init(struct wl1251 *wl)
if (ret < 0) if (ret < 0)
goto out_free_data_path; goto out_free_data_path;
/* Initialize connection monitoring thresholds */
ret = wl1251_acx_conn_monit_params(wl);
if (ret < 0)
goto out_free_data_path;
/* Beacon filtering */ /* Beacon filtering */
ret = wl1251_hw_init_beacon_filter(wl); ret = wl1251_hw_init_beacon_filter(wl);
if (ret < 0) if (ret < 0)
......
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