Author: bz
Date: Sun Aug 23 21:37:20 2020
New Revision: 364551
URL: https://svnweb.freebsd.org/changeset/base/364551

Log:
  net80211: set_vht_extchan() reverse order to always return best
  
  In set_vht_extchan() the checks are performed in the order of VHT20/40/80.
  That means if a channel has a lower and higheer VHT flag set we would
  return the lower first.
  We normally do not set more than one VHT flag so this change is supposed
  to be a NOP but follows the logical thinking order of returning the best
  first. Also we nowhere assert a single VHT flag so make sure we'll not
  be stuck with VHT20 when we could do more.
  
  While here add the debugging printfs for VHT160 and VHT80P80 which still
  need doing once we deal with a driver at that level.
  
  Reviewed by:  adrian, gnn
  MFC after:    2 weeks
  Sponsored by: Rubicon Communications, LLC (d/b/a "Netgate")
  Differential Revision:        https://reviews.freebsd.org/D26088

Modified:
  head/sys/net80211/ieee80211.c

Modified: head/sys/net80211/ieee80211.c
==============================================================================
--- head/sys/net80211/ieee80211.c       Sun Aug 23 21:35:23 2020        
(r364550)
+++ head/sys/net80211/ieee80211.c       Sun Aug 23 21:37:20 2020        
(r364551)
@@ -1168,23 +1168,17 @@ set_vht_extchan(struct ieee80211_channel *c)
 {
        int i;
 
-       if (! IEEE80211_IS_CHAN_VHT(c)) {
+       if (! IEEE80211_IS_CHAN_VHT(c))
                return (0);
-       }
 
-       if (IEEE80211_IS_CHAN_VHT20(c)) {
-               c->ic_vht_ch_freq1 = c->ic_ieee;
-               return (1);
+       if (IEEE80211_IS_CHAN_VHT80P80(c)) {
+               printf("%s: TODO VHT80+80 channel (ieee=%d, flags=0x%08x)\n",
+                   __func__, c->ic_ieee, c->ic_flags);
        }
 
-       if (IEEE80211_IS_CHAN_VHT40(c)) {
-               if (IEEE80211_IS_CHAN_HT40U(c))
-                       c->ic_vht_ch_freq1 = c->ic_ieee + 2;
-               else if (IEEE80211_IS_CHAN_HT40D(c))
-                       c->ic_vht_ch_freq1 = c->ic_ieee - 2;
-               else
-                       return (0);
-               return (1);
+       if (IEEE80211_IS_CHAN_VHT160(c)) {
+               printf("%s: TODO VHT160 channel (ieee=%d, flags=0x%08x)\n",
+                   __func__, c->ic_ieee, c->ic_flags);
        }
 
        if (IEEE80211_IS_CHAN_VHT80(c)) {
@@ -1206,6 +1200,21 @@ set_vht_extchan(struct ieee80211_channel *c)
                        }
                }
                return (0);
+       }
+
+       if (IEEE80211_IS_CHAN_VHT40(c)) {
+               if (IEEE80211_IS_CHAN_HT40U(c))
+                       c->ic_vht_ch_freq1 = c->ic_ieee + 2;
+               else if (IEEE80211_IS_CHAN_HT40D(c))
+                       c->ic_vht_ch_freq1 = c->ic_ieee - 2;
+               else
+                       return (0);
+               return (1);
+       }
+
+       if (IEEE80211_IS_CHAN_VHT20(c)) {
+               c->ic_vht_ch_freq1 = c->ic_ieee;
+               return (1);
        }
 
        printf("%s: unknown VHT channel type (ieee=%d, flags=0x%08x)\n",
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to