Merge tag 'mac80211-next-for-davem-2015-01-19' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
Some further updates for net-next: * fix network-manager which was broken by the previous changes * fix delete-station events, which were broken by me making the genlmsg_end() mistake * fix a timer left running during suspend in some race conditions that would cause an annoying (but harmless) warning * (less important, but in the tree already) remove 80+80 MHz rate reporting since the spec doesn't distinguish it from 160 MHz; as the bitrate they're both 160 MHz bandwidth Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -21,7 +21,6 @@
|
||||
#include <linux/sched.h>
|
||||
#include <net/genetlink.h>
|
||||
#include <net/cfg80211.h>
|
||||
#include <net/rtnetlink.h>
|
||||
#include "nl80211.h"
|
||||
#include "core.h"
|
||||
#include "sysfs.h"
|
||||
@@ -964,10 +963,6 @@ void cfg80211_stop_iface(struct wiphy *wiphy, struct wireless_dev *wdev,
|
||||
}
|
||||
EXPORT_SYMBOL(cfg80211_stop_iface);
|
||||
|
||||
static const struct rtnl_link_ops wireless_link_ops = {
|
||||
.kind = "wlan",
|
||||
};
|
||||
|
||||
static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
|
||||
unsigned long state, void *ptr)
|
||||
{
|
||||
@@ -986,7 +981,6 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
|
||||
switch (state) {
|
||||
case NETDEV_POST_INIT:
|
||||
SET_NETDEV_DEVTYPE(dev, &wiphy_type);
|
||||
dev->rtnl_link_ops = &wireless_link_ops;
|
||||
break;
|
||||
case NETDEV_REGISTER:
|
||||
/*
|
||||
|
@@ -3580,6 +3580,7 @@ static bool nl80211_put_sta_rate(struct sk_buff *msg, struct rate_info *info,
|
||||
struct nlattr *rate;
|
||||
u32 bitrate;
|
||||
u16 bitrate_compat;
|
||||
enum nl80211_attrs rate_flg;
|
||||
|
||||
rate = nla_nest_start(msg, attr);
|
||||
if (!rate)
|
||||
@@ -3596,12 +3597,36 @@ static bool nl80211_put_sta_rate(struct sk_buff *msg, struct rate_info *info,
|
||||
nla_put_u16(msg, NL80211_RATE_INFO_BITRATE, bitrate_compat))
|
||||
return false;
|
||||
|
||||
switch (info->bw) {
|
||||
case RATE_INFO_BW_5:
|
||||
rate_flg = NL80211_RATE_INFO_5_MHZ_WIDTH;
|
||||
break;
|
||||
case RATE_INFO_BW_10:
|
||||
rate_flg = NL80211_RATE_INFO_10_MHZ_WIDTH;
|
||||
break;
|
||||
default:
|
||||
WARN_ON(1);
|
||||
/* fall through */
|
||||
case RATE_INFO_BW_20:
|
||||
rate_flg = 0;
|
||||
break;
|
||||
case RATE_INFO_BW_40:
|
||||
rate_flg = NL80211_RATE_INFO_40_MHZ_WIDTH;
|
||||
break;
|
||||
case RATE_INFO_BW_80:
|
||||
rate_flg = NL80211_RATE_INFO_80_MHZ_WIDTH;
|
||||
break;
|
||||
case RATE_INFO_BW_160:
|
||||
rate_flg = NL80211_RATE_INFO_160_MHZ_WIDTH;
|
||||
break;
|
||||
}
|
||||
|
||||
if (rate_flg && nla_put_flag(msg, rate_flg))
|
||||
return false;
|
||||
|
||||
if (info->flags & RATE_INFO_FLAGS_MCS) {
|
||||
if (nla_put_u8(msg, NL80211_RATE_INFO_MCS, info->mcs))
|
||||
return false;
|
||||
if (info->flags & RATE_INFO_FLAGS_40_MHZ_WIDTH &&
|
||||
nla_put_flag(msg, NL80211_RATE_INFO_40_MHZ_WIDTH))
|
||||
return false;
|
||||
if (info->flags & RATE_INFO_FLAGS_SHORT_GI &&
|
||||
nla_put_flag(msg, NL80211_RATE_INFO_SHORT_GI))
|
||||
return false;
|
||||
@@ -3610,18 +3635,6 @@ static bool nl80211_put_sta_rate(struct sk_buff *msg, struct rate_info *info,
|
||||
return false;
|
||||
if (nla_put_u8(msg, NL80211_RATE_INFO_VHT_NSS, info->nss))
|
||||
return false;
|
||||
if (info->flags & RATE_INFO_FLAGS_40_MHZ_WIDTH &&
|
||||
nla_put_flag(msg, NL80211_RATE_INFO_40_MHZ_WIDTH))
|
||||
return false;
|
||||
if (info->flags & RATE_INFO_FLAGS_80_MHZ_WIDTH &&
|
||||
nla_put_flag(msg, NL80211_RATE_INFO_80_MHZ_WIDTH))
|
||||
return false;
|
||||
if (info->flags & RATE_INFO_FLAGS_80P80_MHZ_WIDTH &&
|
||||
nla_put_flag(msg, NL80211_RATE_INFO_80P80_MHZ_WIDTH))
|
||||
return false;
|
||||
if (info->flags & RATE_INFO_FLAGS_160_MHZ_WIDTH &&
|
||||
nla_put_flag(msg, NL80211_RATE_INFO_160_MHZ_WIDTH))
|
||||
return false;
|
||||
if (info->flags & RATE_INFO_FLAGS_SHORT_GI &&
|
||||
nla_put_flag(msg, NL80211_RATE_INFO_SHORT_GI))
|
||||
return false;
|
||||
@@ -11784,7 +11797,7 @@ void cfg80211_del_sta_sinfo(struct net_device *dev, const u8 *mac_addr,
|
||||
return;
|
||||
|
||||
if (nl80211_send_station(msg, NL80211_CMD_DEL_STATION, 0, 0, 0,
|
||||
rdev, dev, mac_addr, sinfo)) {
|
||||
rdev, dev, mac_addr, sinfo) < 0) {
|
||||
nlmsg_free(msg);
|
||||
return;
|
||||
}
|
||||
|
@@ -1073,10 +1073,24 @@ static u32 cfg80211_calculate_bitrate_vht(struct rate_info *rate)
|
||||
if (WARN_ON_ONCE(rate->mcs > 9))
|
||||
return 0;
|
||||
|
||||
idx = rate->flags & (RATE_INFO_FLAGS_160_MHZ_WIDTH |
|
||||
RATE_INFO_FLAGS_80P80_MHZ_WIDTH) ? 3 :
|
||||
rate->flags & RATE_INFO_FLAGS_80_MHZ_WIDTH ? 2 :
|
||||
rate->flags & RATE_INFO_FLAGS_40_MHZ_WIDTH ? 1 : 0;
|
||||
switch (rate->bw) {
|
||||
case RATE_INFO_BW_160:
|
||||
idx = 3;
|
||||
break;
|
||||
case RATE_INFO_BW_80:
|
||||
idx = 2;
|
||||
break;
|
||||
case RATE_INFO_BW_40:
|
||||
idx = 1;
|
||||
break;
|
||||
case RATE_INFO_BW_5:
|
||||
case RATE_INFO_BW_10:
|
||||
default:
|
||||
WARN_ON(1);
|
||||
/* fall through */
|
||||
case RATE_INFO_BW_20:
|
||||
idx = 0;
|
||||
}
|
||||
|
||||
bitrate = base[idx][rate->mcs];
|
||||
bitrate *= rate->nss;
|
||||
@@ -1107,8 +1121,7 @@ u32 cfg80211_calculate_bitrate(struct rate_info *rate)
|
||||
modulation = rate->mcs & 7;
|
||||
streams = (rate->mcs >> 3) + 1;
|
||||
|
||||
bitrate = (rate->flags & RATE_INFO_FLAGS_40_MHZ_WIDTH) ?
|
||||
13500000 : 6500000;
|
||||
bitrate = (rate->bw == RATE_INFO_BW_40) ? 13500000 : 6500000;
|
||||
|
||||
if (modulation < 4)
|
||||
bitrate *= (modulation + 1);
|
||||
|
Reference in New Issue
Block a user