mac80211: clean up channel type config
The channel_type really doesn't need to be the only member in a new structure, so remove the struct. Additionally, remove the _CONF_CHANGE_HT flag and use _CONF_CHANGE_CHANNEL when the channel type changes, since that's enough of a change to require reprogramming the hardware anyway. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
47166791b7
commit
4797938c5d
|
@ -2117,8 +2117,7 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
|
||||||
struct ieee80211_conf *conf = &hw->conf;
|
struct ieee80211_conf *conf = &hw->conf;
|
||||||
|
|
||||||
mutex_lock(&sc->mutex);
|
mutex_lock(&sc->mutex);
|
||||||
if (changed & (IEEE80211_CONF_CHANGE_CHANNEL |
|
if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
|
||||||
IEEE80211_CONF_CHANGE_HT)) {
|
|
||||||
struct ieee80211_channel *curchan = hw->conf.channel;
|
struct ieee80211_channel *curchan = hw->conf.channel;
|
||||||
int pos;
|
int pos;
|
||||||
|
|
||||||
|
@ -2144,7 +2143,7 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
|
||||||
|
|
||||||
sc->sc_ah->ah_channels[pos].chanmode =
|
sc->sc_ah->ah_channels[pos].chanmode =
|
||||||
ath_get_extchanmode(sc, curchan,
|
ath_get_extchanmode(sc, curchan,
|
||||||
conf->ht.channel_type);
|
conf->channel_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
ath_update_chainmask(sc, conf_is_ht(conf));
|
ath_update_chainmask(sc, conf_is_ht(conf));
|
||||||
|
|
|
@ -507,10 +507,6 @@ static inline int __deprecated __IEEE80211_CONF_SHORT_SLOT_TIME(void)
|
||||||
}
|
}
|
||||||
#define IEEE80211_CONF_SHORT_SLOT_TIME (__IEEE80211_CONF_SHORT_SLOT_TIME())
|
#define IEEE80211_CONF_SHORT_SLOT_TIME (__IEEE80211_CONF_SHORT_SLOT_TIME())
|
||||||
|
|
||||||
struct ieee80211_ht_conf {
|
|
||||||
enum nl80211_channel_type channel_type;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* enum ieee80211_conf_changed - denotes which configuration changed
|
* enum ieee80211_conf_changed - denotes which configuration changed
|
||||||
*
|
*
|
||||||
|
@ -520,9 +516,8 @@ struct ieee80211_ht_conf {
|
||||||
* @IEEE80211_CONF_CHANGE_RADIOTAP: the radiotap flag changed
|
* @IEEE80211_CONF_CHANGE_RADIOTAP: the radiotap flag changed
|
||||||
* @IEEE80211_CONF_CHANGE_PS: the PS flag changed
|
* @IEEE80211_CONF_CHANGE_PS: the PS flag changed
|
||||||
* @IEEE80211_CONF_CHANGE_POWER: the TX power changed
|
* @IEEE80211_CONF_CHANGE_POWER: the TX power changed
|
||||||
* @IEEE80211_CONF_CHANGE_CHANNEL: the channel changed
|
* @IEEE80211_CONF_CHANGE_CHANNEL: the channel/channel_type changed
|
||||||
* @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed
|
* @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed
|
||||||
* @IEEE80211_CONF_CHANGE_HT: HT configuration changed
|
|
||||||
*/
|
*/
|
||||||
enum ieee80211_conf_changed {
|
enum ieee80211_conf_changed {
|
||||||
IEEE80211_CONF_CHANGE_RADIO_ENABLED = BIT(0),
|
IEEE80211_CONF_CHANGE_RADIO_ENABLED = BIT(0),
|
||||||
|
@ -533,7 +528,6 @@ enum ieee80211_conf_changed {
|
||||||
IEEE80211_CONF_CHANGE_POWER = BIT(5),
|
IEEE80211_CONF_CHANGE_POWER = BIT(5),
|
||||||
IEEE80211_CONF_CHANGE_CHANNEL = BIT(6),
|
IEEE80211_CONF_CHANGE_CHANNEL = BIT(6),
|
||||||
IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7),
|
IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7),
|
||||||
IEEE80211_CONF_CHANGE_HT = BIT(8),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -547,7 +541,7 @@ enum ieee80211_conf_changed {
|
||||||
* @flags: configuration flags defined above
|
* @flags: configuration flags defined above
|
||||||
* @power_level: requested transmit power (in dBm)
|
* @power_level: requested transmit power (in dBm)
|
||||||
* @channel: the channel to tune to
|
* @channel: the channel to tune to
|
||||||
* @ht: the HT configuration for the device
|
* @channel_type: the channel (HT) type
|
||||||
* @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame
|
* @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame
|
||||||
* (a frame not RTS protected), called "dot11LongRetryLimit" in 802.11,
|
* (a frame not RTS protected), called "dot11LongRetryLimit" in 802.11,
|
||||||
* but actually means the number of transmissions not the number of retries
|
* but actually means the number of transmissions not the number of retries
|
||||||
|
@ -566,7 +560,7 @@ struct ieee80211_conf {
|
||||||
u8 long_frame_max_tx_count, short_frame_max_tx_count;
|
u8 long_frame_max_tx_count, short_frame_max_tx_count;
|
||||||
|
|
||||||
struct ieee80211_channel *channel;
|
struct ieee80211_channel *channel;
|
||||||
struct ieee80211_ht_conf ht;
|
enum nl80211_channel_type channel_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1960,19 +1954,19 @@ void ieee80211_rate_control_unregister(struct rate_control_ops *ops);
|
||||||
static inline bool
|
static inline bool
|
||||||
conf_is_ht20(struct ieee80211_conf *conf)
|
conf_is_ht20(struct ieee80211_conf *conf)
|
||||||
{
|
{
|
||||||
return conf->ht.channel_type == NL80211_CHAN_HT20;
|
return conf->channel_type == NL80211_CHAN_HT20;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
conf_is_ht40_minus(struct ieee80211_conf *conf)
|
conf_is_ht40_minus(struct ieee80211_conf *conf)
|
||||||
{
|
{
|
||||||
return conf->ht.channel_type == NL80211_CHAN_HT40MINUS;
|
return conf->channel_type == NL80211_CHAN_HT40MINUS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
conf_is_ht40_plus(struct ieee80211_conf *conf)
|
conf_is_ht40_plus(struct ieee80211_conf *conf)
|
||||||
{
|
{
|
||||||
return conf->ht.channel_type == NL80211_CHAN_HT40PLUS;
|
return conf->channel_type == NL80211_CHAN_HT40PLUS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
|
@ -1984,7 +1978,7 @@ conf_is_ht40(struct ieee80211_conf *conf)
|
||||||
static inline bool
|
static inline bool
|
||||||
conf_is_ht(struct ieee80211_conf *conf)
|
conf_is_ht(struct ieee80211_conf *conf)
|
||||||
{
|
{
|
||||||
return conf->ht.channel_type != NL80211_CHAN_NO_HT;
|
return conf->channel_type != NL80211_CHAN_NO_HT;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* MAC80211_H */
|
#endif /* MAC80211_H */
|
||||||
|
|
|
@ -131,12 +131,14 @@ u32 ieee80211_enable_ht(struct ieee80211_sub_if_data *sdata,
|
||||||
}
|
}
|
||||||
|
|
||||||
ht_changed = conf_is_ht(&local->hw.conf) != enable_ht ||
|
ht_changed = conf_is_ht(&local->hw.conf) != enable_ht ||
|
||||||
channel_type != local->hw.conf.ht.channel_type;
|
channel_type != local->hw.conf.channel_type;
|
||||||
|
|
||||||
local->oper_channel_type = channel_type;
|
local->oper_channel_type = channel_type;
|
||||||
|
|
||||||
if (ht_changed)
|
if (ht_changed) {
|
||||||
ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_HT);
|
/* channel_type change automatically detected */
|
||||||
|
ieee80211_hw_config(local, 0);
|
||||||
|
}
|
||||||
|
|
||||||
/* disable HT */
|
/* disable HT */
|
||||||
if (!enable_ht)
|
if (!enable_ht)
|
||||||
|
|
|
@ -208,9 +208,9 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chan != local->hw.conf.channel ||
|
if (chan != local->hw.conf.channel ||
|
||||||
channel_type != local->hw.conf.ht.channel_type) {
|
channel_type != local->hw.conf.channel_type) {
|
||||||
local->hw.conf.channel = chan;
|
local->hw.conf.channel = chan;
|
||||||
local->hw.conf.ht.channel_type = channel_type;
|
local->hw.conf.channel_type = channel_type;
|
||||||
changed |= IEEE80211_CONF_CHANGE_CHANNEL;
|
changed |= IEEE80211_CONF_CHANGE_CHANNEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -901,8 +901,8 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
|
||||||
|
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
|
|
||||||
|
/* channel(_type) changes are handled by ieee80211_hw_config */
|
||||||
local->oper_channel_type = NL80211_CHAN_NO_HT;
|
local->oper_channel_type = NL80211_CHAN_NO_HT;
|
||||||
config_changed |= IEEE80211_CONF_CHANGE_HT;
|
|
||||||
|
|
||||||
del_timer_sync(&local->dynamic_ps_timer);
|
del_timer_sync(&local->dynamic_ps_timer);
|
||||||
cancel_work_sync(&local->dynamic_ps_enable_work);
|
cancel_work_sync(&local->dynamic_ps_enable_work);
|
||||||
|
|
Loading…
Reference in New Issue