Commit 6a09ae95 authored by Simon Wunderlich's avatar Simon Wunderlich Committed by John W. Linville

ath5k: set 5/10 MHz supported channels and fix duration

Signed-off-by: default avatarSimon Wunderlich <siwu@hrz.tu-chemnitz.de>
Signed-off-by: default avatarMathias Kretschmer <mathias.kretschmer@fokus.fraunhofer.de>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 312a6443
...@@ -165,28 +165,36 @@ static const struct ieee80211_rate ath5k_rates[] = { ...@@ -165,28 +165,36 @@ static const struct ieee80211_rate ath5k_rates[] = {
.flags = IEEE80211_RATE_SHORT_PREAMBLE }, .flags = IEEE80211_RATE_SHORT_PREAMBLE },
{ .bitrate = 60, { .bitrate = 60,
.hw_value = ATH5K_RATE_CODE_6M, .hw_value = ATH5K_RATE_CODE_6M,
.flags = 0 }, .flags = IEEE80211_RATE_SUPPORTS_5MHZ |
IEEE80211_RATE_SUPPORTS_10MHZ },
{ .bitrate = 90, { .bitrate = 90,
.hw_value = ATH5K_RATE_CODE_9M, .hw_value = ATH5K_RATE_CODE_9M,
.flags = 0 }, .flags = IEEE80211_RATE_SUPPORTS_5MHZ |
IEEE80211_RATE_SUPPORTS_10MHZ },
{ .bitrate = 120, { .bitrate = 120,
.hw_value = ATH5K_RATE_CODE_12M, .hw_value = ATH5K_RATE_CODE_12M,
.flags = 0 }, .flags = IEEE80211_RATE_SUPPORTS_5MHZ |
IEEE80211_RATE_SUPPORTS_10MHZ },
{ .bitrate = 180, { .bitrate = 180,
.hw_value = ATH5K_RATE_CODE_18M, .hw_value = ATH5K_RATE_CODE_18M,
.flags = 0 }, .flags = IEEE80211_RATE_SUPPORTS_5MHZ |
IEEE80211_RATE_SUPPORTS_10MHZ },
{ .bitrate = 240, { .bitrate = 240,
.hw_value = ATH5K_RATE_CODE_24M, .hw_value = ATH5K_RATE_CODE_24M,
.flags = 0 }, .flags = IEEE80211_RATE_SUPPORTS_5MHZ |
IEEE80211_RATE_SUPPORTS_10MHZ },
{ .bitrate = 360, { .bitrate = 360,
.hw_value = ATH5K_RATE_CODE_36M, .hw_value = ATH5K_RATE_CODE_36M,
.flags = 0 }, .flags = IEEE80211_RATE_SUPPORTS_5MHZ |
IEEE80211_RATE_SUPPORTS_10MHZ },
{ .bitrate = 480, { .bitrate = 480,
.hw_value = ATH5K_RATE_CODE_48M, .hw_value = ATH5K_RATE_CODE_48M,
.flags = 0 }, .flags = IEEE80211_RATE_SUPPORTS_5MHZ |
IEEE80211_RATE_SUPPORTS_10MHZ },
{ .bitrate = 540, { .bitrate = 540,
.hw_value = ATH5K_RATE_CODE_54M, .hw_value = ATH5K_RATE_CODE_54M,
.flags = 0 }, .flags = IEEE80211_RATE_SUPPORTS_5MHZ |
IEEE80211_RATE_SUPPORTS_10MHZ },
}; };
static inline u64 ath5k_extend_tsf(struct ath5k_hw *ah, u32 rstamp) static inline u64 ath5k_extend_tsf(struct ath5k_hw *ah, u32 rstamp)
......
...@@ -144,11 +144,13 @@ ath5k_hw_get_frame_duration(struct ath5k_hw *ah, enum ieee80211_band band, ...@@ -144,11 +144,13 @@ ath5k_hw_get_frame_duration(struct ath5k_hw *ah, enum ieee80211_band band,
sifs = AR5K_INIT_SIFS_HALF_RATE; sifs = AR5K_INIT_SIFS_HALF_RATE;
preamble *= 2; preamble *= 2;
sym_time *= 2; sym_time *= 2;
bitrate = DIV_ROUND_UP(bitrate, 2);
break; break;
case AR5K_BWMODE_5MHZ: case AR5K_BWMODE_5MHZ:
sifs = AR5K_INIT_SIFS_QUARTER_RATE; sifs = AR5K_INIT_SIFS_QUARTER_RATE;
preamble *= 4; preamble *= 4;
sym_time *= 4; sym_time *= 4;
bitrate = DIV_ROUND_UP(bitrate, 4);
break; break;
default: default:
sifs = AR5K_INIT_SIFS_DEFAULT_BG; sifs = AR5K_INIT_SIFS_DEFAULT_BG;
......
...@@ -566,9 +566,11 @@ int ath5k_hw_set_ifs_intervals(struct ath5k_hw *ah, unsigned int slot_time) ...@@ -566,9 +566,11 @@ int ath5k_hw_set_ifs_intervals(struct ath5k_hw *ah, unsigned int slot_time)
{ {
struct ieee80211_channel *channel = ah->ah_current_channel; struct ieee80211_channel *channel = ah->ah_current_channel;
enum ieee80211_band band; enum ieee80211_band band;
struct ieee80211_supported_band *sband;
struct ieee80211_rate *rate; struct ieee80211_rate *rate;
u32 ack_tx_time, eifs, eifs_clock, sifs, sifs_clock; u32 ack_tx_time, eifs, eifs_clock, sifs, sifs_clock;
u32 slot_time_clock = ath5k_hw_htoclock(ah, slot_time); u32 slot_time_clock = ath5k_hw_htoclock(ah, slot_time);
u32 rate_flags, i;
if (slot_time < 6 || slot_time_clock > AR5K_SLOT_TIME_MAX) if (slot_time < 6 || slot_time_clock > AR5K_SLOT_TIME_MAX)
return -EINVAL; return -EINVAL;
...@@ -605,7 +607,28 @@ int ath5k_hw_set_ifs_intervals(struct ath5k_hw *ah, unsigned int slot_time) ...@@ -605,7 +607,28 @@ int ath5k_hw_set_ifs_intervals(struct ath5k_hw *ah, unsigned int slot_time)
else else
band = IEEE80211_BAND_2GHZ; band = IEEE80211_BAND_2GHZ;
rate = &ah->sbands[band].bitrates[0]; switch (ah->ah_bwmode) {
case AR5K_BWMODE_5MHZ:
rate_flags = IEEE80211_RATE_SUPPORTS_5MHZ;
break;
case AR5K_BWMODE_10MHZ:
rate_flags = IEEE80211_RATE_SUPPORTS_10MHZ;
break;
default:
rate_flags = 0;
break;
}
sband = &ah->sbands[band];
rate = NULL;
for (i = 0; i < sband->n_bitrates; i++) {
if ((rate_flags & sband->bitrates[i].flags) != rate_flags)
continue;
rate = &sband->bitrates[i];
break;
}
if (WARN_ON(!rate))
return -EINVAL;
ack_tx_time = ath5k_hw_get_frame_duration(ah, band, 10, rate, false); ack_tx_time = ath5k_hw_get_frame_duration(ah, band, 10, rate, false);
/* ack_tx_time includes an SIFS already */ /* ack_tx_time includes an SIFS already */
......
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