Report correct MCS information in tx status info
Signed-off-by: Matteo Croce <[email protected]>
--- a/net/mac80211/status.c 2011-05-20 00:22:56.220640264 +0200
+++ b/net/mac80211/status.c 2011-05-20 00:24:14.010640270 +0200
@@ -405,6 +405,20 @@
!(info->status.rates[0].flags & IEEE80211_TX_RC_MCS))
rthdr->rate = sband->bitrates[
info->status.rates[0].idx].bitrate / 5;
+ /* HT rates */
+ if (info->status.rates[0].flags & IEEE80211_TX_RC_MCS) {
+ rthdr->hdr.it_present |=
+ cpu_to_le32(1 << IEEE80211_RADIOTAP_MCS);
+ rthdr->rate = 0;
+ rthdr->ht_known = IEEE80211_RADIOTAP_MCS_HAVE_BW |
+ IEEE80211_RADIOTAP_MCS_HAVE_MCS |
+ IEEE80211_RADIOTAP_MCS_HAVE_GI;
+ rthdr->ht_mcs = info->status.rates[0].idx;
+ if (info->status.rates[0].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
+ rthdr->ht_flag |= IEEE80211_RADIOTAP_MCS_BW_40;
+ if (info->status.rates[0].flags & IEEE80211_TX_RC_SHORT_GI)
+ rthdr->ht_flag |= IEEE80211_RADIOTAP_MCS_SGI;
+ }
/* for now report the total retry_count */
rthdr->data_retries = retry_count;
On Fri, 2011-05-20 at 01:13 +0200, Matteo Croce wrote:
> Report correct MCS information in tx status info
>
> Signed-off-by: Matteo Croce <[email protected]>
>
> --- a/net/mac80211/status.c 2011-05-20 00:22:56.220640264 +0200
> +++ b/net/mac80211/status.c 2011-05-20 00:24:14.010640270 +0200
> @@ -405,6 +405,20 @@
> !(info->status.rates[0].flags & IEEE80211_TX_RC_MCS))
> rthdr->rate = sband->bitrates[
> info->status.rates[0].idx].bitrate / 5;
> + /* HT rates */
> + if (info->status.rates[0].flags & IEEE80211_TX_RC_MCS) {
> + rthdr->hdr.it_present |=
> + cpu_to_le32(1 << IEEE80211_RADIOTAP_MCS);
This means the part that I just commented on from the other patch is
wrong. Think about this again, about how radiotap works etc. You're
creating an invalid radiotap header that's too long if MCS rates aren't
used.
johannes