Commit bee0ffec authored by Arik Nemtsov's avatar Arik Nemtsov Committed by Luciano Coelho

wl12xx: AP mode config in ieee80211_ops.config

Separate configuration according to mode. AP has different rate
set configuration and no handling of idle-state.
Signed-off-by: default avatarArik Nemtsov <arik@wizery.com>
Reviewed-by: default avatarLuciano Coelho <coelho@ti.com>
Signed-off-by: default avatarLuciano Coelho <coelho@ti.com>
parent e78a287a
...@@ -1362,7 +1362,7 @@ static void wl1271_set_band_rate(struct wl1271 *wl) ...@@ -1362,7 +1362,7 @@ static void wl1271_set_band_rate(struct wl1271 *wl)
wl->basic_rate_set = wl->conf.tx.basic_rate_5; wl->basic_rate_set = wl->conf.tx.basic_rate_5;
} }
static int wl1271_handle_idle(struct wl1271 *wl, bool idle) static int wl1271_sta_handle_idle(struct wl1271 *wl, bool idle)
{ {
int ret; int ret;
...@@ -1403,14 +1403,17 @@ static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed) ...@@ -1403,14 +1403,17 @@ static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
struct wl1271 *wl = hw->priv; struct wl1271 *wl = hw->priv;
struct ieee80211_conf *conf = &hw->conf; struct ieee80211_conf *conf = &hw->conf;
int channel, ret = 0; int channel, ret = 0;
bool is_ap;
channel = ieee80211_frequency_to_channel(conf->channel->center_freq); channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s", wl1271_debug(DEBUG_MAC80211, "mac80211 config ch %d psm %s power %d %s"
" changed 0x%x",
channel, channel,
conf->flags & IEEE80211_CONF_PS ? "on" : "off", conf->flags & IEEE80211_CONF_PS ? "on" : "off",
conf->power_level, conf->power_level,
conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use"); conf->flags & IEEE80211_CONF_IDLE ? "idle" : "in use",
changed);
/* /*
* mac80211 will go to idle nearly immediately after transmitting some * mac80211 will go to idle nearly immediately after transmitting some
...@@ -1428,6 +1431,8 @@ static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed) ...@@ -1428,6 +1431,8 @@ static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
goto out; goto out;
} }
is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
ret = wl1271_ps_elp_wakeup(wl, false); ret = wl1271_ps_elp_wakeup(wl, false);
if (ret < 0) if (ret < 0)
goto out; goto out;
...@@ -1439,31 +1444,34 @@ static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed) ...@@ -1439,31 +1444,34 @@ static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
wl->band = conf->channel->band; wl->band = conf->channel->band;
wl->channel = channel; wl->channel = channel;
/* if (!is_ap) {
* FIXME: the mac80211 should really provide a fixed rate /*
* to use here. for now, just use the smallest possible rate * FIXME: the mac80211 should really provide a fixed
* for the band as a fixed rate for association frames and * rate to use here. for now, just use the smallest
* other control messages. * possible rate for the band as a fixed rate for
*/ * association frames and other control messages.
if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) */
wl1271_set_band_rate(wl); if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
wl1271_set_band_rate(wl);
wl->basic_rate = wl1271_tx_min_rate_get(wl);
ret = wl1271_acx_sta_rate_policies(wl);
if (ret < 0)
wl1271_warning("rate policy for update channel "
"failed %d", ret);
if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) { wl->basic_rate = wl1271_tx_min_rate_get(wl);
ret = wl1271_join(wl, false); ret = wl1271_acx_sta_rate_policies(wl);
if (ret < 0) if (ret < 0)
wl1271_warning("cmd join to update channel " wl1271_warning("rate policy for channel "
"failed %d", ret); "failed %d", ret);
if (test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
ret = wl1271_join(wl, false);
if (ret < 0)
wl1271_warning("cmd join on channel "
"failed %d", ret);
}
} }
} }
if (changed & IEEE80211_CONF_CHANGE_IDLE) { if (changed & IEEE80211_CONF_CHANGE_IDLE && !is_ap) {
ret = wl1271_handle_idle(wl, conf->flags & IEEE80211_CONF_IDLE); ret = wl1271_sta_handle_idle(wl,
conf->flags & IEEE80211_CONF_IDLE);
if (ret < 0) if (ret < 0)
wl1271_warning("idle mode change failed %d", ret); wl1271_warning("idle mode change failed %d", ret);
} }
......
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