wl1271: Add connection monitoring configuration
Add configuration for connection monitor (number of allowed beacons, and timeout after last received beacon.) Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com> Reviewed-by: Luciano Coelho <luciano.coelho@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
1fba49741d
commit
344152361e
@ -442,6 +442,36 @@ int wl1271_acx_beacon_filter_table(struct wl1271 *wl)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int wl1271_acx_conn_monit_params(struct wl1271 *wl)
|
||||||
|
{
|
||||||
|
struct acx_conn_monit_params *acx;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
wl1271_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 = wl1271_cmd_configure(wl, ACX_CONN_MONIT_PARAMS,
|
||||||
|
acx, sizeof(*acx));
|
||||||
|
if (ret < 0) {
|
||||||
|
wl1271_warning("failed to set connection monitor "
|
||||||
|
"parameters: %d", ret);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
|
kfree(acx);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int wl1271_acx_sg_enable(struct wl1271 *wl)
|
int wl1271_acx_sg_enable(struct wl1271 *wl)
|
||||||
{
|
{
|
||||||
struct acx_bt_wlan_coex *pta;
|
struct acx_bt_wlan_coex *pta;
|
||||||
|
@ -406,6 +406,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,
|
||||||
@ -1198,6 +1208,7 @@ int wl1271_acx_service_period_timeout(struct wl1271 *wl);
|
|||||||
int wl1271_acx_rts_threshold(struct wl1271 *wl, u16 rts_threshold);
|
int wl1271_acx_rts_threshold(struct wl1271 *wl, u16 rts_threshold);
|
||||||
int wl1271_acx_beacon_filter_opt(struct wl1271 *wl);
|
int wl1271_acx_beacon_filter_opt(struct wl1271 *wl);
|
||||||
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_sg_enable(struct wl1271 *wl);
|
int wl1271_acx_sg_enable(struct wl1271 *wl);
|
||||||
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);
|
||||||
|
@ -323,6 +323,11 @@ int wl1271_hw_init(struct wl1271 *wl)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto out_free_memmap;
|
goto out_free_memmap;
|
||||||
|
|
||||||
|
/* Initialize connection monitoring thresholds */
|
||||||
|
ret = wl1271_acx_conn_monit_params(wl);
|
||||||
|
if (ret < 0)
|
||||||
|
goto out_free_memmap;
|
||||||
|
|
||||||
/* Beacon filtering */
|
/* Beacon filtering */
|
||||||
ret = wl1271_init_beacon_filter(wl);
|
ret = wl1271_init_beacon_filter(wl);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
@ -392,6 +397,7 @@ int wl1271_hw_init(struct wl1271 *wl)
|
|||||||
|
|
||||||
out_free_memmap:
|
out_free_memmap:
|
||||||
kfree(wl->target_mem_map);
|
kfree(wl->target_mem_map);
|
||||||
|
wl->target_mem_map = NULL;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user