diff options
author | Arik Nemtsov <arik@wizery.com> | 2010-10-16 12:19:53 -0400 |
---|---|---|
committer | Luciano Coelho <coelho@ti.com> | 2011-01-24 15:11:48 -0500 |
commit | e0fe371b74326a85029fe8720506e021fe73905a (patch) | |
tree | 0eb9864739ae8c876560598aefb410e7c7bec3e6 /drivers/net/wireless/wl12xx/main.c | |
parent | 05285cf9b581af05813cfaa60e23227b009b7754 (diff) |
wl12xx: AP mode - init sequence
Split HW init sequence into AP/STA specific parts
The AP specific init sequence includes configuration of templates, rate
classes, power mode, etc. Also unmask AP specific events in the event mbox.
Separate the differences between AP and STA init into mode
specific functions called from wl1271_hw_init. The first is called after
radio configuration and the second after memory configuration.
Signed-off-by: Arik Nemtsov <arik@wizery.com>
Reviewed-by: Luciano Coelho <coelho@ti.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.c | 32 |
1 files changed, 7 insertions, 25 deletions
diff --git a/drivers/net/wireless/wl12xx/main.c b/drivers/net/wireless/wl12xx/main.c index 9785b4c43c86..67f6db4354f0 100644 --- a/drivers/net/wireless/wl12xx/main.c +++ b/drivers/net/wireless/wl12xx/main.c | |||
@@ -434,7 +434,7 @@ static int wl1271_plt_init(struct wl1271 *wl) | |||
434 | if (ret < 0) | 434 | if (ret < 0) |
435 | return ret; | 435 | return ret; |
436 | 436 | ||
437 | ret = wl1271_init_templates_config(wl); | 437 | ret = wl1271_sta_init_templates_config(wl); |
438 | if (ret < 0) | 438 | if (ret < 0) |
439 | return ret; | 439 | return ret; |
440 | 440 | ||
@@ -1363,24 +1363,6 @@ static void wl1271_set_band_rate(struct wl1271 *wl) | |||
1363 | wl->basic_rate_set = wl->conf.tx.basic_rate_5; | 1363 | wl->basic_rate_set = wl->conf.tx.basic_rate_5; |
1364 | } | 1364 | } |
1365 | 1365 | ||
1366 | static u32 wl1271_min_rate_get(struct wl1271 *wl) | ||
1367 | { | ||
1368 | int i; | ||
1369 | u32 rate = 0; | ||
1370 | |||
1371 | if (!wl->basic_rate_set) { | ||
1372 | WARN_ON(1); | ||
1373 | wl->basic_rate_set = wl->conf.tx.basic_rate; | ||
1374 | } | ||
1375 | |||
1376 | for (i = 0; !rate; i++) { | ||
1377 | if ((wl->basic_rate_set >> i) & 0x1) | ||
1378 | rate = 1 << i; | ||
1379 | } | ||
1380 | |||
1381 | return rate; | ||
1382 | } | ||
1383 | |||
1384 | static int wl1271_handle_idle(struct wl1271 *wl, bool idle) | 1366 | static int wl1271_handle_idle(struct wl1271 *wl, bool idle) |
1385 | { | 1367 | { |
1386 | int ret; | 1368 | int ret; |
@@ -1391,7 +1373,7 @@ static int wl1271_handle_idle(struct wl1271 *wl, bool idle) | |||
1391 | if (ret < 0) | 1373 | if (ret < 0) |
1392 | goto out; | 1374 | goto out; |
1393 | } | 1375 | } |
1394 | wl->rate_set = wl1271_min_rate_get(wl); | 1376 | wl->rate_set = wl1271_tx_min_rate_get(wl); |
1395 | wl->sta_rate_set = 0; | 1377 | wl->sta_rate_set = 0; |
1396 | ret = wl1271_acx_sta_rate_policies(wl); | 1378 | ret = wl1271_acx_sta_rate_policies(wl); |
1397 | if (ret < 0) | 1379 | if (ret < 0) |
@@ -1467,7 +1449,7 @@ static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed) | |||
1467 | if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) | 1449 | if (!test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags)) |
1468 | wl1271_set_band_rate(wl); | 1450 | wl1271_set_band_rate(wl); |
1469 | 1451 | ||
1470 | wl->basic_rate = wl1271_min_rate_get(wl); | 1452 | wl->basic_rate = wl1271_tx_min_rate_get(wl); |
1471 | ret = wl1271_acx_sta_rate_policies(wl); | 1453 | ret = wl1271_acx_sta_rate_policies(wl); |
1472 | if (ret < 0) | 1454 | if (ret < 0) |
1473 | wl1271_warning("rate policy for update channel " | 1455 | wl1271_warning("rate policy for update channel " |
@@ -1927,7 +1909,7 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw, | |||
1927 | ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON, | 1909 | ret = wl1271_cmd_template_set(wl, CMD_TEMPL_BEACON, |
1928 | beacon->data, | 1910 | beacon->data, |
1929 | beacon->len, 0, | 1911 | beacon->len, 0, |
1930 | wl1271_min_rate_get(wl)); | 1912 | wl1271_tx_min_rate_get(wl)); |
1931 | 1913 | ||
1932 | if (ret < 0) { | 1914 | if (ret < 0) { |
1933 | dev_kfree_skb(beacon); | 1915 | dev_kfree_skb(beacon); |
@@ -1943,7 +1925,7 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw, | |||
1943 | CMD_TEMPL_PROBE_RESPONSE, | 1925 | CMD_TEMPL_PROBE_RESPONSE, |
1944 | beacon->data, | 1926 | beacon->data, |
1945 | beacon->len, 0, | 1927 | beacon->len, 0, |
1946 | wl1271_min_rate_get(wl)); | 1928 | wl1271_tx_min_rate_get(wl)); |
1947 | dev_kfree_skb(beacon); | 1929 | dev_kfree_skb(beacon); |
1948 | if (ret < 0) | 1930 | if (ret < 0) |
1949 | goto out_sleep; | 1931 | goto out_sleep; |
@@ -2016,7 +1998,7 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw, | |||
2016 | rates = bss_conf->basic_rates; | 1998 | rates = bss_conf->basic_rates; |
2017 | wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl, | 1999 | wl->basic_rate_set = wl1271_tx_enabled_rates_get(wl, |
2018 | rates); | 2000 | rates); |
2019 | wl->basic_rate = wl1271_min_rate_get(wl); | 2001 | wl->basic_rate = wl1271_tx_min_rate_get(wl); |
2020 | ret = wl1271_acx_sta_rate_policies(wl); | 2002 | ret = wl1271_acx_sta_rate_policies(wl); |
2021 | if (ret < 0) | 2003 | if (ret < 0) |
2022 | goto out_sleep; | 2004 | goto out_sleep; |
@@ -2070,7 +2052,7 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw, | |||
2070 | 2052 | ||
2071 | /* revert back to minimum rates for the current band */ | 2053 | /* revert back to minimum rates for the current band */ |
2072 | wl1271_set_band_rate(wl); | 2054 | wl1271_set_band_rate(wl); |
2073 | wl->basic_rate = wl1271_min_rate_get(wl); | 2055 | wl->basic_rate = wl1271_tx_min_rate_get(wl); |
2074 | ret = wl1271_acx_sta_rate_policies(wl); | 2056 | ret = wl1271_acx_sta_rate_policies(wl); |
2075 | if (ret < 0) | 2057 | if (ret < 0) |
2076 | goto out_sleep; | 2058 | goto out_sleep; |