* [PATCH] wireless: report non-zero bitrate for MCS rates through wext
@ 2009-12-09 21:46 John W. Linville
2009-12-09 22:01 ` John W. Linville
2009-12-10 9:40 ` Kalle Valo
0 siblings, 2 replies; 5+ messages in thread
From: John W. Linville @ 2009-12-09 21:46 UTC (permalink / raw)
To: linux-wireless; +Cc: John W. Linville
Signed-off-by: John W. Linville <linville@tuxdriver.com>
---
net/wireless/core.h | 2 ++
net/wireless/nl80211.c | 37 ++-----------------------------------
net/wireless/util.c | 33 +++++++++++++++++++++++++++++++++
net/wireless/wext-compat.c | 5 +----
4 files changed, 38 insertions(+), 39 deletions(-)
diff --git a/net/wireless/core.h b/net/wireless/core.h
index 4ef3efc..35b7121 100644
--- a/net/wireless/core.h
+++ b/net/wireless/core.h
@@ -378,6 +378,8 @@ int rdev_set_freq(struct cfg80211_registered_device *rdev,
struct wireless_dev *for_wdev,
int freq, enum nl80211_channel_type channel_type);
+u16 cfg80211_calculate_bitrate(struct rate_info *rate);
+
#ifdef CONFIG_CFG80211_DEVELOPER_WARNINGS
#define CFG80211_DEV_WARN_ON(cond) WARN_ON(cond)
#else
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index a602843..7cb0d64 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -1637,39 +1637,6 @@ static int parse_station_flags(struct genl_info *info,
return 0;
}
-static u16 nl80211_calculate_bitrate(struct rate_info *rate)
-{
- int modulation, streams, bitrate;
-
- if (!(rate->flags & RATE_INFO_FLAGS_MCS))
- return rate->legacy;
-
- /* the formula below does only work for MCS values smaller than 32 */
- if (rate->mcs >= 32)
- return 0;
-
- modulation = rate->mcs & 7;
- streams = (rate->mcs >> 3) + 1;
-
- bitrate = (rate->flags & RATE_INFO_FLAGS_40_MHZ_WIDTH) ?
- 13500000 : 6500000;
-
- if (modulation < 4)
- bitrate *= (modulation + 1);
- else if (modulation == 4)
- bitrate *= (modulation + 2);
- else
- bitrate *= (modulation + 3);
-
- bitrate *= streams;
-
- if (rate->flags & RATE_INFO_FLAGS_SHORT_GI)
- bitrate = (bitrate / 9) * 10;
-
- /* do NOT round down here */
- return (bitrate + 50000) / 100000;
-}
-
static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq,
int flags, struct net_device *dev,
u8 *mac_addr, struct station_info *sinfo)
@@ -1716,8 +1683,8 @@ static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq,
if (!txrate)
goto nla_put_failure;
- /* nl80211_calculate_bitrate will return 0 for mcs >= 32 */
- bitrate = nl80211_calculate_bitrate(&sinfo->txrate);
+ /* cfg80211_calculate_bitrate will return 0 for mcs >= 32 */
+ bitrate = cfg80211_calculate_bitrate(&sinfo->txrate);
if (bitrate > 0)
NLA_PUT_U16(msg, NL80211_RATE_INFO_BITRATE, bitrate);
diff --git a/net/wireless/util.c b/net/wireless/util.c
index 59361fd..a3c841a 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -720,3 +720,36 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
return err;
}
+
+u16 cfg80211_calculate_bitrate(struct rate_info *rate)
+{
+ int modulation, streams, bitrate;
+
+ if (!(rate->flags & RATE_INFO_FLAGS_MCS))
+ return rate->legacy;
+
+ /* the formula below does only work for MCS values smaller than 32 */
+ if (rate->mcs >= 32)
+ return 0;
+
+ modulation = rate->mcs & 7;
+ streams = (rate->mcs >> 3) + 1;
+
+ bitrate = (rate->flags & RATE_INFO_FLAGS_40_MHZ_WIDTH) ?
+ 13500000 : 6500000;
+
+ if (modulation < 4)
+ bitrate *= (modulation + 1);
+ else if (modulation == 4)
+ bitrate *= (modulation + 2);
+ else
+ bitrate *= (modulation + 3);
+
+ bitrate *= streams;
+
+ if (rate->flags & RATE_INFO_FLAGS_SHORT_GI)
+ bitrate = (bitrate / 9) * 10;
+
+ /* do NOT round down here */
+ return (bitrate + 50000) / 100000;
+}
diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c
index 54face3..4198243 100644
--- a/net/wireless/wext-compat.c
+++ b/net/wireless/wext-compat.c
@@ -1257,10 +1257,7 @@ int cfg80211_wext_giwrate(struct net_device *dev,
if (!(sinfo.filled & STATION_INFO_TX_BITRATE))
return -EOPNOTSUPP;
- rate->value = 0;
-
- if (!(sinfo.txrate.flags & RATE_INFO_FLAGS_MCS))
- rate->value = 100000 * sinfo.txrate.legacy;
+ rate->value = 100000 * cfg80211_calculate_bitrate(&sinfo.txrate);
return 0;
}
--
1.6.2.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] wireless: report non-zero bitrate for MCS rates through wext
2009-12-09 21:46 [PATCH] wireless: report non-zero bitrate for MCS rates through wext John W. Linville
@ 2009-12-09 22:01 ` John W. Linville
2009-12-10 9:40 ` Kalle Valo
1 sibling, 0 replies; 5+ messages in thread
From: John W. Linville @ 2009-12-09 22:01 UTC (permalink / raw)
To: linux-wireless
No testing, BTW -- I'm not near any 802.11n APs ATM. Anyone care to
test and give me a warm fuzzy? :-)
John
On Wed, Dec 09, 2009 at 04:46:05PM -0500, John W. Linville wrote:
> Signed-off-by: John W. Linville <linville@tuxdriver.com>
> ---
> net/wireless/core.h | 2 ++
> net/wireless/nl80211.c | 37 ++-----------------------------------
> net/wireless/util.c | 33 +++++++++++++++++++++++++++++++++
> net/wireless/wext-compat.c | 5 +----
> 4 files changed, 38 insertions(+), 39 deletions(-)
>
> diff --git a/net/wireless/core.h b/net/wireless/core.h
> index 4ef3efc..35b7121 100644
> --- a/net/wireless/core.h
> +++ b/net/wireless/core.h
> @@ -378,6 +378,8 @@ int rdev_set_freq(struct cfg80211_registered_device *rdev,
> struct wireless_dev *for_wdev,
> int freq, enum nl80211_channel_type channel_type);
>
> +u16 cfg80211_calculate_bitrate(struct rate_info *rate);
> +
> #ifdef CONFIG_CFG80211_DEVELOPER_WARNINGS
> #define CFG80211_DEV_WARN_ON(cond) WARN_ON(cond)
> #else
> diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
> index a602843..7cb0d64 100644
> --- a/net/wireless/nl80211.c
> +++ b/net/wireless/nl80211.c
> @@ -1637,39 +1637,6 @@ static int parse_station_flags(struct genl_info *info,
> return 0;
> }
>
> -static u16 nl80211_calculate_bitrate(struct rate_info *rate)
> -{
> - int modulation, streams, bitrate;
> -
> - if (!(rate->flags & RATE_INFO_FLAGS_MCS))
> - return rate->legacy;
> -
> - /* the formula below does only work for MCS values smaller than 32 */
> - if (rate->mcs >= 32)
> - return 0;
> -
> - modulation = rate->mcs & 7;
> - streams = (rate->mcs >> 3) + 1;
> -
> - bitrate = (rate->flags & RATE_INFO_FLAGS_40_MHZ_WIDTH) ?
> - 13500000 : 6500000;
> -
> - if (modulation < 4)
> - bitrate *= (modulation + 1);
> - else if (modulation == 4)
> - bitrate *= (modulation + 2);
> - else
> - bitrate *= (modulation + 3);
> -
> - bitrate *= streams;
> -
> - if (rate->flags & RATE_INFO_FLAGS_SHORT_GI)
> - bitrate = (bitrate / 9) * 10;
> -
> - /* do NOT round down here */
> - return (bitrate + 50000) / 100000;
> -}
> -
> static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq,
> int flags, struct net_device *dev,
> u8 *mac_addr, struct station_info *sinfo)
> @@ -1716,8 +1683,8 @@ static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq,
> if (!txrate)
> goto nla_put_failure;
>
> - /* nl80211_calculate_bitrate will return 0 for mcs >= 32 */
> - bitrate = nl80211_calculate_bitrate(&sinfo->txrate);
> + /* cfg80211_calculate_bitrate will return 0 for mcs >= 32 */
> + bitrate = cfg80211_calculate_bitrate(&sinfo->txrate);
> if (bitrate > 0)
> NLA_PUT_U16(msg, NL80211_RATE_INFO_BITRATE, bitrate);
>
> diff --git a/net/wireless/util.c b/net/wireless/util.c
> index 59361fd..a3c841a 100644
> --- a/net/wireless/util.c
> +++ b/net/wireless/util.c
> @@ -720,3 +720,36 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
>
> return err;
> }
> +
> +u16 cfg80211_calculate_bitrate(struct rate_info *rate)
> +{
> + int modulation, streams, bitrate;
> +
> + if (!(rate->flags & RATE_INFO_FLAGS_MCS))
> + return rate->legacy;
> +
> + /* the formula below does only work for MCS values smaller than 32 */
> + if (rate->mcs >= 32)
> + return 0;
> +
> + modulation = rate->mcs & 7;
> + streams = (rate->mcs >> 3) + 1;
> +
> + bitrate = (rate->flags & RATE_INFO_FLAGS_40_MHZ_WIDTH) ?
> + 13500000 : 6500000;
> +
> + if (modulation < 4)
> + bitrate *= (modulation + 1);
> + else if (modulation == 4)
> + bitrate *= (modulation + 2);
> + else
> + bitrate *= (modulation + 3);
> +
> + bitrate *= streams;
> +
> + if (rate->flags & RATE_INFO_FLAGS_SHORT_GI)
> + bitrate = (bitrate / 9) * 10;
> +
> + /* do NOT round down here */
> + return (bitrate + 50000) / 100000;
> +}
> diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c
> index 54face3..4198243 100644
> --- a/net/wireless/wext-compat.c
> +++ b/net/wireless/wext-compat.c
> @@ -1257,10 +1257,7 @@ int cfg80211_wext_giwrate(struct net_device *dev,
> if (!(sinfo.filled & STATION_INFO_TX_BITRATE))
> return -EOPNOTSUPP;
>
> - rate->value = 0;
> -
> - if (!(sinfo.txrate.flags & RATE_INFO_FLAGS_MCS))
> - rate->value = 100000 * sinfo.txrate.legacy;
> + rate->value = 100000 * cfg80211_calculate_bitrate(&sinfo.txrate);
>
> return 0;
> }
> --
> 1.6.2.5
>
>
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] wireless: report non-zero bitrate for MCS rates through wext
2009-12-09 21:46 [PATCH] wireless: report non-zero bitrate for MCS rates through wext John W. Linville
2009-12-09 22:01 ` John W. Linville
@ 2009-12-10 9:40 ` Kalle Valo
2009-12-10 13:00 ` John W. Linville
1 sibling, 1 reply; 5+ messages in thread
From: Kalle Valo @ 2009-12-10 9:40 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless
"John W. Linville" <linville@tuxdriver.com> writes:
> Signed-off-by: John W. Linville <linville@tuxdriver.com>
A small description in the commit log would be nice.
And I don't have any 11n APs right now, so I can't test it either :(
--
Kalle Valo
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] wireless: report non-zero bitrate for MCS rates through wext
2009-12-10 9:40 ` Kalle Valo
@ 2009-12-10 13:00 ` John W. Linville
2009-12-10 13:32 ` Kalle Valo
0 siblings, 1 reply; 5+ messages in thread
From: John W. Linville @ 2009-12-10 13:00 UTC (permalink / raw)
To: Kalle Valo; +Cc: linux-wireless
On Thu, Dec 10, 2009 at 11:40:37AM +0200, Kalle Valo wrote:
> "John W. Linville" <linville@tuxdriver.com> writes:
>
> > Signed-off-by: John W. Linville <linville@tuxdriver.com>
>
> A small description in the commit log would be nice.
>
> And I don't have any 11n APs right now, so I can't test it either :(
I found a spot to test it myself, seems fine.
What (beyond the subject) would you put in the commit log for this one?
John
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] wireless: report non-zero bitrate for MCS rates through wext
2009-12-10 13:00 ` John W. Linville
@ 2009-12-10 13:32 ` Kalle Valo
0 siblings, 0 replies; 5+ messages in thread
From: Kalle Valo @ 2009-12-10 13:32 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless
"John W. Linville" <linville@tuxdriver.com> writes:
> On Thu, Dec 10, 2009 at 11:40:37AM +0200, Kalle Valo wrote:
>> "John W. Linville" <linville@tuxdriver.com> writes:
>>
>> > Signed-off-by: John W. Linville <linville@tuxdriver.com>
>>
>> A small description in the commit log would be nice.
[...]
> What (beyond the subject) would you put in the commit log for this one?
How it affects me as an user? IMHO "non-zero bitrate for MCS" doesn't
tell that much and is a bit confusing. I would prefer something like
this:
wireless: report 802.11n bitrates through wext
cfg80211 reports all MCS rates (from 802.11n) as zero. Fix it by
moving nl80211__calculate_bitrate() to cfg80211 and using it also
with MCS rates.
But maybe I'm just weird :)
--
Kalle Valo
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2009-12-10 13:32 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-12-09 21:46 [PATCH] wireless: report non-zero bitrate for MCS rates through wext John W. Linville
2009-12-09 22:01 ` John W. Linville
2009-12-10 9:40 ` Kalle Valo
2009-12-10 13:00 ` John W. Linville
2009-12-10 13:32 ` Kalle Valo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).