diff options
author | Christian Lamparter <chunkeey@web.de> | 2009-06-01 15:42:01 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-06-03 14:05:12 -0400 |
commit | 29ceff5d58afbb2c98bb748057788f02b8db20e5 (patch) | |
tree | 1e31eb16449a70b8d41f2e3a1806db27cb383d33 /drivers/net/wireless/ath/ar9170/main.c | |
parent | d7433390e49152101c1b31c08e38caf2a05a1169 (diff) |
ar9170: introduce functions for MAC programming
This patch introduces 3 new function which are used to update
the MAC state, whenever needed... e.g: after a band switch.
Signed-off-by: Christian Lamparter <chunkeey@web.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/ar9170/main.c')
-rw-r--r-- | drivers/net/wireless/ath/ar9170/main.c | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/drivers/net/wireless/ath/ar9170/main.c b/drivers/net/wireless/ath/ar9170/main.c index 99df9ddae9cb..c54c42e5391f 100644 --- a/drivers/net/wireless/ath/ar9170/main.c +++ b/drivers/net/wireless/ath/ar9170/main.c | |||
@@ -1344,15 +1344,21 @@ static int ar9170_op_config(struct ieee80211_hw *hw, u32 changed) | |||
1344 | } | 1344 | } |
1345 | 1345 | ||
1346 | if (changed & IEEE80211_CONF_CHANGE_CHANNEL) { | 1346 | if (changed & IEEE80211_CONF_CHANGE_CHANNEL) { |
1347 | |||
1348 | /* adjust slot time for 5 GHz */ | ||
1349 | err = ar9170_set_slot_time(ar); | ||
1350 | if (err) | ||
1351 | goto out; | ||
1352 | |||
1353 | err = ar9170_set_dyn_sifs_ack(ar); | ||
1354 | if (err) | ||
1355 | goto out; | ||
1356 | |||
1347 | err = ar9170_set_channel(ar, hw->conf.channel, | 1357 | err = ar9170_set_channel(ar, hw->conf.channel, |
1348 | AR9170_RFI_NONE, | 1358 | AR9170_RFI_NONE, |
1349 | nl80211_to_ar9170(hw->conf.channel_type)); | 1359 | nl80211_to_ar9170(hw->conf.channel_type)); |
1350 | if (err) | 1360 | if (err) |
1351 | goto out; | 1361 | goto out; |
1352 | /* adjust slot time for 5 GHz */ | ||
1353 | if (hw->conf.channel->band == IEEE80211_BAND_5GHZ) | ||
1354 | err = ar9170_write_reg(ar, AR9170_MAC_REG_SLOT_TIME, | ||
1355 | 9 << 10); | ||
1356 | } | 1362 | } |
1357 | 1363 | ||
1358 | out: | 1364 | out: |
@@ -1464,15 +1470,19 @@ static void ar9170_op_bss_info_changed(struct ieee80211_hw *hw, | |||
1464 | if (changed & BSS_CHANGED_BSSID) { | 1470 | if (changed & BSS_CHANGED_BSSID) { |
1465 | memcpy(ar->bssid, bss_conf->bssid, ETH_ALEN); | 1471 | memcpy(ar->bssid, bss_conf->bssid, ETH_ALEN); |
1466 | err = ar9170_set_operating_mode(ar); | 1472 | err = ar9170_set_operating_mode(ar); |
1473 | if (err) | ||
1474 | goto out; | ||
1467 | } | 1475 | } |
1468 | 1476 | ||
1469 | if (changed & (BSS_CHANGED_BEACON | BSS_CHANGED_BEACON_ENABLED)) { | 1477 | if (changed & (BSS_CHANGED_BEACON | BSS_CHANGED_BEACON_ENABLED)) { |
1470 | err = ar9170_update_beacon(ar); | 1478 | err = ar9170_update_beacon(ar); |
1471 | if (!err) | 1479 | if (err) |
1472 | ar9170_set_beacon_timers(ar); | 1480 | goto out; |
1473 | } | ||
1474 | 1481 | ||
1475 | ar9170_regwrite_begin(ar); | 1482 | err = ar9170_set_beacon_timers(ar); |
1483 | if (err) | ||
1484 | goto out; | ||
1485 | } | ||
1476 | 1486 | ||
1477 | if (changed & BSS_CHANGED_ASSOC) { | 1487 | if (changed & BSS_CHANGED_ASSOC) { |
1478 | ar->state = bss_conf->assoc ? AR9170_ASSOCIATED : ar->state; | 1488 | ar->state = bss_conf->assoc ? AR9170_ASSOCIATED : ar->state; |
@@ -1483,8 +1493,11 @@ static void ar9170_op_bss_info_changed(struct ieee80211_hw *hw, | |||
1483 | #endif /* CONFIG_AR9170_LEDS */ | 1493 | #endif /* CONFIG_AR9170_LEDS */ |
1484 | } | 1494 | } |
1485 | 1495 | ||
1486 | if (changed & BSS_CHANGED_BEACON_INT) | 1496 | if (changed & BSS_CHANGED_BEACON_INT) { |
1487 | err = ar9170_set_beacon_timers(ar); | 1497 | err = ar9170_set_beacon_timers(ar); |
1498 | if (err) | ||
1499 | goto out; | ||
1500 | } | ||
1488 | 1501 | ||
1489 | if (changed & BSS_CHANGED_HT) { | 1502 | if (changed & BSS_CHANGED_HT) { |
1490 | /* TODO */ | 1503 | /* TODO */ |
@@ -1492,31 +1505,18 @@ static void ar9170_op_bss_info_changed(struct ieee80211_hw *hw, | |||
1492 | } | 1505 | } |
1493 | 1506 | ||
1494 | if (changed & BSS_CHANGED_ERP_SLOT) { | 1507 | if (changed & BSS_CHANGED_ERP_SLOT) { |
1495 | u32 slottime = 20; | 1508 | err = ar9170_set_slot_time(ar); |
1496 | 1509 | if (err) | |
1497 | if (bss_conf->use_short_slot) | 1510 | goto out; |
1498 | slottime = 9; | ||
1499 | |||
1500 | ar9170_regwrite(AR9170_MAC_REG_SLOT_TIME, slottime << 10); | ||
1501 | } | 1511 | } |
1502 | 1512 | ||
1503 | if (changed & BSS_CHANGED_BASIC_RATES) { | 1513 | if (changed & BSS_CHANGED_BASIC_RATES) { |
1504 | u32 cck, ofdm; | 1514 | err = ar9170_set_basic_rates(ar); |
1505 | 1515 | if (err) | |
1506 | if (hw->conf.channel->band == IEEE80211_BAND_5GHZ) { | 1516 | goto out; |
1507 | ofdm = bss_conf->basic_rates; | ||
1508 | cck = 0; | ||
1509 | } else { | ||
1510 | /* four cck rates */ | ||
1511 | cck = bss_conf->basic_rates & 0xf; | ||
1512 | ofdm = bss_conf->basic_rates >> 4; | ||
1513 | } | ||
1514 | ar9170_regwrite(AR9170_MAC_REG_BASIC_RATE, | ||
1515 | ofdm << 8 | cck); | ||
1516 | } | 1517 | } |
1517 | 1518 | ||
1518 | ar9170_regwrite_finish(); | 1519 | out: |
1519 | err = ar9170_regwrite_result(); | ||
1520 | mutex_unlock(&ar->mutex); | 1520 | mutex_unlock(&ar->mutex); |
1521 | } | 1521 | } |
1522 | 1522 | ||