aboutsummaryrefslogtreecommitdiff
path: root/drivers/net/wireless/wl12xx/main.c
diff options
context:
space:
mode:
authorArik Nemtsov <arik@wizery.com>2011-08-14 13:17:27 +0300
committerLuciano Coelho <coelho@ti.com>2011-08-22 12:35:29 +0300
commit0b932ab9f156488a56577873b638ecb1e65fa8d7 (patch)
treee8e7df2e93d0a4f3dc42d063a896169b51f85a53 /drivers/net/wireless/wl12xx/main.c
parent227e81e18422851901b9de11c5955d292c4a47fc (diff)
wl12xx: AP-mode - set STA HT capabilities when adding a STA
In addition, set global HT operation mode via ACX_HT_BSS_OPERATION when a change is detected by usermode Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Eliad Peller <eliad@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
Diffstat (limited to 'drivers/net/wireless/wl12xx/main.c')
-rw-r--r--drivers/net/wireless/wl12xx/main.c34
1 files changed, 27 insertions, 7 deletions
diff --git a/drivers/net/wireless/wl12xx/main.c b/drivers/net/wireless/wl12xx/main.c
index e280d9d7911..0a0b4b634bd 100644
--- a/drivers/net/wireless/wl12xx/main.c
+++ b/drivers/net/wireless/wl12xx/main.c
@@ -3124,6 +3124,18 @@ static void wl1271_bss_info_changed_ap(struct wl1271 *wl,
ret = wl1271_bss_erp_info_changed(wl, bss_conf, changed);
if (ret < 0)
goto out;
+
+ /* Handle HT information change */
+ if ((changed & BSS_CHANGED_HT) &&
+ (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
+ ret = wl1271_acx_set_ht_information(wl,
+ bss_conf->ht_operation_mode);
+ if (ret < 0) {
+ wl1271_warning("Set ht information failed %d", ret);
+ goto out;
+ }
+ }
+
out:
return;
}
@@ -3439,12 +3451,14 @@ sta_not_found:
}
}
- /* Handle new association with HT. Do this only after join. */
+ /* Handle new association with HT. Do this after join. */
if (sta_exists) {
if ((changed & BSS_CHANGED_HT) &&
(bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
- ret = wl1271_acx_set_ht_capabilities(wl, &sta_ht_cap,
- true);
+ ret = wl1271_acx_set_ht_capabilities(wl,
+ &sta_ht_cap,
+ true,
+ wl->sta_hlid);
if (ret < 0) {
wl1271_warning("Set ht cap true failed %d",
ret);
@@ -3453,8 +3467,10 @@ sta_not_found:
}
/* handle new association without HT and disassociation */
else if (changed & BSS_CHANGED_ASSOC) {
- ret = wl1271_acx_set_ht_capabilities(wl, &sta_ht_cap,
- false);
+ ret = wl1271_acx_set_ht_capabilities(wl,
+ &sta_ht_cap,
+ false,
+ wl->sta_hlid);
if (ret < 0) {
wl1271_warning("Set ht cap false failed %d",
ret);
@@ -3463,8 +3479,8 @@ sta_not_found:
}
}
- /* Handle HT information change. Only after join. */
- if (sta_exists && (changed & BSS_CHANGED_HT) &&
+ /* Handle HT information change. Done after join. */
+ if ((changed & BSS_CHANGED_HT) &&
(bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
ret = wl1271_acx_set_ht_information(wl,
bss_conf->ht_operation_mode);
@@ -3703,6 +3719,10 @@ static int wl1271_op_sta_add(struct ieee80211_hw *hw,
if (ret < 0)
goto out_sleep;
+ ret = wl1271_acx_set_ht_capabilities(wl, &sta->ht_cap, true, hlid);
+ if (ret < 0)
+ goto out_sleep;
+
out_sleep:
wl1271_ps_elp_sleep(wl);