Skip to content

Commit

Permalink
wl1271: Add connection monitoring configuration
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Juuso Oikarinen authored and John W. Linville committed Oct 27, 2009
1 parent 1fba497 commit 3441523
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 0 deletions.
30 changes: 30 additions & 0 deletions drivers/net/wireless/wl12xx/wl1271_acx.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
11 changes: 11 additions & 0 deletions drivers/net/wireless/wl12xx/wl1271_acx.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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);
Expand Down
6 changes: 6 additions & 0 deletions drivers/net/wireless/wl12xx/wl1271_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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;
}

0 comments on commit 3441523

Please sign in to comment.