diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl4965-base.c | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl4965-base.c index 4570fd133d74..8e7860debdf6 100644 --- a/drivers/net/wireless/iwlwifi/iwl4965-base.c +++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c | |||
@@ -1176,22 +1176,11 @@ static void iwl4965_connection_init_rx_config(struct iwl_priv *priv) | |||
1176 | 1176 | ||
1177 | static int iwl4965_set_mode(struct iwl_priv *priv, int mode) | 1177 | static int iwl4965_set_mode(struct iwl_priv *priv, int mode) |
1178 | { | 1178 | { |
1179 | if (mode == IEEE80211_IF_TYPE_IBSS) { | ||
1180 | const struct iwl_channel_info *ch_info; | ||
1181 | |||
1182 | ch_info = iwl_get_channel_info(priv, | ||
1183 | priv->band, | ||
1184 | le16_to_cpu(priv->staging_rxon.channel)); | ||
1185 | |||
1186 | if (!ch_info || !is_channel_ibss(ch_info)) { | ||
1187 | IWL_ERROR("channel %d not IBSS channel\n", | ||
1188 | le16_to_cpu(priv->staging_rxon.channel)); | ||
1189 | return -EINVAL; | ||
1190 | } | ||
1191 | } | ||
1192 | |||
1193 | priv->iw_mode = mode; | 1179 | priv->iw_mode = mode; |
1194 | 1180 | ||
1181 | /* init channel/phymode to values given at driver init */ | ||
1182 | iwl_set_rxon_channel(priv, IEEE80211_BAND_2GHZ, 6); | ||
1183 | |||
1195 | iwl4965_connection_init_rx_config(priv); | 1184 | iwl4965_connection_init_rx_config(priv); |
1196 | memcpy(priv->staging_rxon.node_addr, priv->mac_addr, ETH_ALEN); | 1185 | memcpy(priv->staging_rxon.node_addr, priv->mac_addr, ETH_ALEN); |
1197 | 1186 | ||
@@ -3892,6 +3881,14 @@ static int iwl4965_mac_config(struct ieee80211_hw *hw, struct ieee80211_conf *co | |||
3892 | goto out; | 3881 | goto out; |
3893 | } | 3882 | } |
3894 | 3883 | ||
3884 | if (priv->iw_mode == IEEE80211_IF_TYPE_IBSS && | ||
3885 | !is_channel_ibss(ch_info)) { | ||
3886 | IWL_ERROR("channel %d in band %d not IBSS channel\n", | ||
3887 | conf->channel->hw_value, conf->channel->band); | ||
3888 | ret = -EINVAL; | ||
3889 | goto out; | ||
3890 | } | ||
3891 | |||
3895 | spin_lock_irqsave(&priv->lock, flags); | 3892 | spin_lock_irqsave(&priv->lock, flags); |
3896 | 3893 | ||
3897 | /* if we are switching from ht to 2.4 clear flags | 3894 | /* if we are switching from ht to 2.4 clear flags |