Commit 34415236 authored by Juuso Oikarinen's avatar Juuso Oikarinen Committed by John W. Linville
Browse files

wl1271: 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>
Reviewed-by: default avatarLuciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: default avatarLuciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 1fba4974
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -442,6 +442,36 @@ int wl1271_acx_beacon_filter_table(struct wl1271 *wl)
	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)
{
	struct acx_bt_wlan_coex *pta;
+11 −0
Original line number Diff line number Diff line
@@ -406,6 +406,16 @@ struct acx_beacon_filter_ie_table {
	u8 pad[3];
} __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 {
	SG_ENABLE = 0,
	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_beacon_filter_opt(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_cfg(struct wl1271 *wl);
int wl1271_acx_cca_threshold(struct wl1271 *wl);
+6 −0
Original line number Diff line number Diff line
@@ -323,6 +323,11 @@ int wl1271_hw_init(struct wl1271 *wl)
	if (ret < 0)
		goto out_free_memmap;

	/* Initialize connection monitoring thresholds */
	ret = wl1271_acx_conn_monit_params(wl);
	if (ret < 0)
		goto out_free_memmap;

	/* Beacon filtering */
	ret = wl1271_init_beacon_filter(wl);
	if (ret < 0)
@@ -392,6 +397,7 @@ int wl1271_hw_init(struct wl1271 *wl)

 out_free_memmap:
	kfree(wl->target_mem_map);
	wl->target_mem_map = NULL;

	return ret;
}