Commit 521a4a23 authored by Arik Nemtsov's avatar Arik Nemtsov Committed by Luciano Coelho

wl12xx: AP-mode - disable beacon filtering on start up

New AP-mode FWs filter external beacons by default. Disable this
filtering on start up so we can properly configure ERP protection.
Signed-off-by: default avatarArik Nemtsov <arik@wizery.com>
Signed-off-by: default avatarLuciano Coelho <coelho@ti.com>
parent 5f704d18
...@@ -1679,6 +1679,31 @@ int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr) ...@@ -1679,6 +1679,31 @@ int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr)
return ret; return ret;
} }
int wl1271_acx_set_ap_beacon_filter(struct wl1271 *wl, bool enable)
{
struct acx_ap_beacon_filter *acx = NULL;
int ret;
wl1271_debug(DEBUG_ACX, "acx set ap beacon filter: %d", enable);
acx = kzalloc(sizeof(*acx), GFP_KERNEL);
if (!acx)
return -ENOMEM;
acx->enable = enable ? 1 : 0;
ret = wl1271_cmd_configure(wl, ACX_AP_BEACON_FILTER_OPT,
acx, sizeof(*acx));
if (ret < 0) {
wl1271_warning("acx set ap beacon filter failed: %d", ret);
goto out;
}
out:
kfree(acx);
return ret;
}
int wl1271_acx_fm_coex(struct wl1271 *wl) int wl1271_acx_fm_coex(struct wl1271 *wl)
{ {
struct wl1271_acx_fm_coex *acx; struct wl1271_acx_fm_coex *acx;
......
...@@ -303,7 +303,6 @@ struct acx_beacon_filter_option { ...@@ -303,7 +303,6 @@ struct acx_beacon_filter_option {
struct acx_header header; struct acx_header header;
u8 enable; u8 enable;
/* /*
* The number of beacons without the unicast TIM * The number of beacons without the unicast TIM
* bit set that the firmware buffers before * bit set that the firmware buffers before
...@@ -1188,6 +1187,13 @@ struct wl1271_acx_inconnection_sta { ...@@ -1188,6 +1187,13 @@ struct wl1271_acx_inconnection_sta {
u8 padding1[2]; u8 padding1[2];
} __packed; } __packed;
struct acx_ap_beacon_filter {
struct acx_header header;
u8 enable;
u8 pad[3];
} __packed;
/* /*
* ACX_FM_COEX_CFG * ACX_FM_COEX_CFG
* set the FM co-existence parameters. * set the FM co-existence parameters.
...@@ -1265,6 +1271,7 @@ enum { ...@@ -1265,6 +1271,7 @@ enum {
ACX_TID_CFG = 0x001A, ACX_TID_CFG = 0x001A,
ACX_PS_RX_STREAMING = 0x001B, ACX_PS_RX_STREAMING = 0x001B,
ACX_BEACON_FILTER_OPT = 0x001F, ACX_BEACON_FILTER_OPT = 0x001F,
ACX_AP_BEACON_FILTER_OPT = 0x0020,
ACX_NOISE_HIST = 0x0021, ACX_NOISE_HIST = 0x0021,
ACX_HDK_VERSION = 0x0022, /* ??? */ ACX_HDK_VERSION = 0x0022, /* ??? */
ACX_PD_THRESHOLD = 0x0023, ACX_PD_THRESHOLD = 0x0023,
...@@ -1388,6 +1395,7 @@ int wl1271_acx_ap_max_tx_retry(struct wl1271 *wl); ...@@ -1388,6 +1395,7 @@ int wl1271_acx_ap_max_tx_retry(struct wl1271 *wl);
int wl1271_acx_sta_max_tx_retry(struct wl1271 *wl); int wl1271_acx_sta_max_tx_retry(struct wl1271 *wl);
int wl1271_acx_config_ps(struct wl1271 *wl); int wl1271_acx_config_ps(struct wl1271 *wl);
int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr); int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr);
int wl1271_acx_set_ap_beacon_filter(struct wl1271 *wl, bool enable);
int wl1271_acx_fm_coex(struct wl1271 *wl); int wl1271_acx_fm_coex(struct wl1271 *wl);
#endif /* __WL1271_ACX_H__ */ #endif /* __WL1271_ACX_H__ */
...@@ -475,6 +475,14 @@ static int wl1271_ap_hw_init_post_mem(struct wl1271 *wl) ...@@ -475,6 +475,14 @@ static int wl1271_ap_hw_init_post_mem(struct wl1271 *wl)
if (ret < 0) if (ret < 0)
return ret; return ret;
/*
* when operating as AP we want to receive external beacons for
* configuring ERP protection.
*/
ret = wl1271_acx_set_ap_beacon_filter(wl, false);
if (ret < 0)
return ret;
return 0; return 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