Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 into for-davem
Conflicts: drivers/net/wireless/ath/ar9170/main.c
This commit is contained in:
@ -1162,15 +1162,39 @@ static int ieee80211_set_txq_params(struct wiphy *wiphy,
|
||||
}
|
||||
|
||||
static int ieee80211_set_channel(struct wiphy *wiphy,
|
||||
struct net_device *netdev,
|
||||
struct ieee80211_channel *chan,
|
||||
enum nl80211_channel_type channel_type)
|
||||
{
|
||||
struct ieee80211_local *local = wiphy_priv(wiphy);
|
||||
struct ieee80211_sub_if_data *sdata = NULL;
|
||||
|
||||
if (netdev)
|
||||
sdata = IEEE80211_DEV_TO_SUB_IF(netdev);
|
||||
|
||||
switch (ieee80211_get_channel_mode(local, NULL)) {
|
||||
case CHAN_MODE_HOPPING:
|
||||
return -EBUSY;
|
||||
case CHAN_MODE_FIXED:
|
||||
if (local->oper_channel != chan)
|
||||
return -EBUSY;
|
||||
if (!sdata && local->_oper_channel_type == channel_type)
|
||||
return 0;
|
||||
break;
|
||||
case CHAN_MODE_UNDEFINED:
|
||||
break;
|
||||
}
|
||||
|
||||
local->oper_channel = chan;
|
||||
local->oper_channel_type = channel_type;
|
||||
|
||||
return ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
|
||||
if (!ieee80211_set_channel_type(local, sdata, channel_type))
|
||||
return -EBUSY;
|
||||
|
||||
ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
|
||||
if (sdata && sdata->vif.type != NL80211_IFTYPE_MONITOR)
|
||||
ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_HT);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
@ -1214,6 +1238,20 @@ static int ieee80211_auth(struct wiphy *wiphy, struct net_device *dev,
|
||||
static int ieee80211_assoc(struct wiphy *wiphy, struct net_device *dev,
|
||||
struct cfg80211_assoc_request *req)
|
||||
{
|
||||
struct ieee80211_local *local = wiphy_priv(wiphy);
|
||||
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
|
||||
switch (ieee80211_get_channel_mode(local, sdata)) {
|
||||
case CHAN_MODE_HOPPING:
|
||||
return -EBUSY;
|
||||
case CHAN_MODE_FIXED:
|
||||
if (local->oper_channel == req->bss->channel)
|
||||
break;
|
||||
return -EBUSY;
|
||||
case CHAN_MODE_UNDEFINED:
|
||||
break;
|
||||
}
|
||||
|
||||
return ieee80211_mgd_assoc(IEEE80211_DEV_TO_SUB_IF(dev), req);
|
||||
}
|
||||
|
||||
@ -1236,8 +1274,22 @@ static int ieee80211_disassoc(struct wiphy *wiphy, struct net_device *dev,
|
||||
static int ieee80211_join_ibss(struct wiphy *wiphy, struct net_device *dev,
|
||||
struct cfg80211_ibss_params *params)
|
||||
{
|
||||
struct ieee80211_local *local = wiphy_priv(wiphy);
|
||||
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
|
||||
switch (ieee80211_get_channel_mode(local, sdata)) {
|
||||
case CHAN_MODE_HOPPING:
|
||||
return -EBUSY;
|
||||
case CHAN_MODE_FIXED:
|
||||
if (!params->channel_fixed)
|
||||
return -EBUSY;
|
||||
if (local->oper_channel == params->channel)
|
||||
break;
|
||||
return -EBUSY;
|
||||
case CHAN_MODE_UNDEFINED:
|
||||
break;
|
||||
}
|
||||
|
||||
return ieee80211_ibss_join(sdata, params);
|
||||
}
|
||||
|
||||
@ -1366,7 +1418,7 @@ int __ieee80211_request_smps(struct ieee80211_sub_if_data *sdata,
|
||||
* association, there's no need to send an action frame.
|
||||
*/
|
||||
if (!sdata->u.mgd.associated ||
|
||||
sdata->local->oper_channel_type == NL80211_CHAN_NO_HT) {
|
||||
sdata->vif.bss_conf.channel_type == NL80211_CHAN_NO_HT) {
|
||||
mutex_lock(&sdata->local->iflist_mtx);
|
||||
ieee80211_recalc_smps(sdata->local, sdata);
|
||||
mutex_unlock(&sdata->local->iflist_mtx);
|
||||
|
Reference in New Issue
Block a user