diff options
author | Ivo van Doorn <ivdoorn@gmail.com> | 2008-03-09 22:48:08 +0100 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-03-14 00:31:42 +0100 |
commit | aa776721b472e343a8db7f3c0673b1fa24e6c7f7 (patch) | |
tree | b3bb79f05cdd729696877783bb25da7c3a7dd3c0 /drivers/net/wireless/rt2x00/rt2x00config.c | |
parent | rt2x00: Always enable TSF ticking (diff) | |
download | linux-aa776721b472e343a8db7f3c0673b1fa24e6c7f7.tar.xz linux-aa776721b472e343a8db7f3c0673b1fa24e6c7f7.zip |
rt2x00: Fix basic rate initialization
The basic rate which is configured in the register
should not match all supported rates, but only the _basic_ rates.
Fix this by adding a new flag to the rt2x00_rate structure
and whenever the mode is changed, loop over all available rates
for that band to get the basic rate mask.
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00config.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00config.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00config.c b/drivers/net/wireless/rt2x00/rt2x00config.c index 72111694154e..5e2d81a9e438 100644 --- a/drivers/net/wireless/rt2x00/rt2x00config.c +++ b/drivers/net/wireless/rt2x00/rt2x00config.c @@ -145,12 +145,26 @@ void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev, rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON_LINK); } +static u32 rt2x00lib_get_basic_rates(struct ieee80211_supported_band *band) +{ + const struct rt2x00_rate *rate; + unsigned int i; + u32 mask = 0; + + for (i = 0; i < band->n_bitrates; i++) { + rate = rt2x00_get_rate(band->bitrates[i].hw_value); + if (rate->flags & DEV_RATE_BASIC) + mask |= rate->ratemask; + } + + return mask; +} + void rt2x00lib_config(struct rt2x00_dev *rt2x00dev, struct ieee80211_conf *conf, const int force_config) { struct rt2x00lib_conf libconf; struct ieee80211_supported_band *band; - struct ieee80211_rate *rate; struct antenna_setup *default_ant = &rt2x00dev->default_ant; struct antenna_setup *active_ant = &rt2x00dev->link.ant.active; int flags = 0; @@ -227,10 +241,9 @@ config: if (flags & CONFIG_UPDATE_PHYMODE) { band = &rt2x00dev->bands[conf->channel->band]; - rate = &band->bitrates[band->n_bitrates - 1]; libconf.band = conf->channel->band; - libconf.basic_rates = rt2x00_get_rate(rate->hw_value)->ratemask; + libconf.basic_rates = rt2x00lib_get_basic_rates(band); } if (flags & CONFIG_UPDATE_CHANNEL) { |