mac80211: encode rate type (legacy, HT, VHT) with fewer bits
authorJohannes Berg <johannes.berg@intel.com>
Wed, 15 Feb 2017 14:02:09 +0000 (15:02 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 6 Mar 2017 08:21:45 +0000 (09:21 +0100)
We don't really need three different bits for each, since the
types are mutually exclusive. Use just two bits for it.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/sta_info.c
net/mac80211/sta_info.h

index 3323a2f..81ec1f7 100644 (file)
@@ -1960,14 +1960,17 @@ static void sta_stats_decode_rate(struct ieee80211_local *local, u16 rate,
        rinfo->bw = (rate & STA_STATS_RATE_BW_MASK) >>
                STA_STATS_RATE_BW_SHIFT;
 
-       if (rate & STA_STATS_RATE_VHT) {
+       switch (rate & STA_STATS_RATE_TYPE_MASK) {
+       case STA_STATS_RATE_TYPE_VHT:
                rinfo->flags = RATE_INFO_FLAGS_VHT_MCS;
                rinfo->mcs = rate & 0xf;
                rinfo->nss = (rate & 0xf0) >> 4;
-       } else if (rate & STA_STATS_RATE_HT) {
+               break;
+       case STA_STATS_RATE_TYPE_HT:
                rinfo->flags = RATE_INFO_FLAGS_MCS;
                rinfo->mcs = rate & 0xff;
-       } else if (rate & STA_STATS_RATE_LEGACY) {
+               break;
+       case STA_STATS_RATE_TYPE_LEGACY: {
                struct ieee80211_supported_band *sband;
                u16 brate;
                unsigned int shift;
@@ -1982,6 +1985,8 @@ static void sta_stats_decode_rate(struct ieee80211_local *local, u16 rate,
                else
                        shift = 0;
                rinfo->legacy = DIV_ROUND_UP(brate, 1 << shift);
+               break;
+               }
        }
 
        if (rate & STA_STATS_RATE_SGI)
index cc413f5..8949266 100644 (file)
@@ -728,9 +728,10 @@ void ieee80211_sta_ps_deliver_uapsd(struct sta_info *sta);
 unsigned long ieee80211_sta_last_active(struct sta_info *sta);
 
 #define STA_STATS_RATE_INVALID         0
-#define STA_STATS_RATE_VHT             0x8000
-#define STA_STATS_RATE_HT              0x4000
-#define STA_STATS_RATE_LEGACY          0x2000
+#define STA_STATS_RATE_TYPE_MASK       0xC000
+#define STA_STATS_RATE_TYPE_LEGACY     0x4000
+#define STA_STATS_RATE_TYPE_HT         0x8000
+#define STA_STATS_RATE_TYPE_VHT                0xC000
 #define STA_STATS_RATE_SGI             0x1000
 #define STA_STATS_RATE_BW_SHIFT                9
 #define STA_STATS_RATE_BW_MASK         (0x7 << STA_STATS_RATE_BW_SHIFT)
@@ -756,11 +757,11 @@ static inline u16 sta_stats_encode_rate(struct ieee80211_rx_status *s)
                r |= STA_STATS_RATE_SGI;
 
        if (s->flag & RX_FLAG_VHT)
-               r |= STA_STATS_RATE_VHT | (s->vht_nss << 4);
+               r |= STA_STATS_RATE_TYPE_VHT | (s->vht_nss << 4);
        else if (s->flag & RX_FLAG_HT)
-               r |= STA_STATS_RATE_HT;
+               r |= STA_STATS_RATE_TYPE_HT;
        else
-               r |= STA_STATS_RATE_LEGACY | (s->band << 4);
+               r |= STA_STATS_RATE_TYPE_LEGACY | (s->band << 4);
 
        return r;
 }