Author: adrian
Date: Tue Jan 10 07:50:21 2017
New Revision: 311862
URL: https://svnweb.freebsd.org/changeset/base/311862

Log:
  [net80211] add VHT mediatype initialisation and update helper functions.

Modified:
  head/sys/net80211/ieee80211.c

Modified: head/sys/net80211/ieee80211.c
==============================================================================
--- head/sys/net80211/ieee80211.c       Tue Jan 10 07:24:29 2017        
(r311861)
+++ head/sys/net80211/ieee80211.c       Tue Jan 10 07:50:21 2017        
(r311862)
@@ -70,6 +70,8 @@ const char *ieee80211_phymode_name[IEEE8
        [IEEE80211_MODE_QUARTER]  = "quarter",
        [IEEE80211_MODE_11NA]     = "11na",
        [IEEE80211_MODE_11NG]     = "11ng",
+       [IEEE80211_MODE_VHT_2GHZ]         = "11acg",
+       [IEEE80211_MODE_VHT_5GHZ]         = "11ac",
 };
 /* map ieee80211_opmode to the corresponding capability bit */
 const int ieee80211_opcap[IEEE80211_OPMODE_MAX] = {
@@ -181,6 +183,10 @@ ieee80211_chan_init(struct ieee80211com 
                        setbit(ic->ic_modecaps, IEEE80211_MODE_11NA);
                if (IEEE80211_IS_CHAN_HTG(c))
                        setbit(ic->ic_modecaps, IEEE80211_MODE_11NG);
+               if (IEEE80211_IS_CHAN_VHTA(c))
+                       setbit(ic->ic_modecaps, IEEE80211_MODE_VHT_5GHZ);
+               if (IEEE80211_IS_CHAN_VHTG(c))
+                       setbit(ic->ic_modecaps, IEEE80211_MODE_VHT_2GHZ);
        }
        /* initialize candidate channels to all available */
        memcpy(ic->ic_chan_active, ic->ic_chan_avail,
@@ -208,6 +214,8 @@ ieee80211_chan_init(struct ieee80211com 
        DEFAULTRATES(IEEE80211_MODE_QUARTER,     ieee80211_rateset_quarter);
        DEFAULTRATES(IEEE80211_MODE_11NA,        ieee80211_rateset_11a);
        DEFAULTRATES(IEEE80211_MODE_11NG,        ieee80211_rateset_11g);
+       DEFAULTRATES(IEEE80211_MODE_VHT_2GHZ,    ieee80211_rateset_11g);
+       DEFAULTRATES(IEEE80211_MODE_VHT_5GHZ,    ieee80211_rateset_11a);
 
        /*
         * Setup required information to fill the mcsset field, if driver did
@@ -1492,6 +1500,8 @@ addmedia(struct ifmedia *media, int caps
            [IEEE80211_MODE_QUARTER]    = IFM_IEEE80211_11A,    /* XXX */
            [IEEE80211_MODE_11NA]       = IFM_IEEE80211_11NA,
            [IEEE80211_MODE_11NG]       = IFM_IEEE80211_11NG,
+           [IEEE80211_MODE_VHT_2GHZ]   = IFM_IEEE80211_VHT2G,
+           [IEEE80211_MODE_VHT_5GHZ]   = IFM_IEEE80211_VHT5G,
        };
        u_int mopt;
 
@@ -1604,6 +1614,19 @@ ieee80211_media_setup(struct ieee80211co
                if (rate > maxrate)
                        maxrate = rate;
        }
+
+       /*
+        * Add VHT media.
+        */
+       for (; mode <= IEEE80211_MODE_VHT_5GHZ; mode++) {
+               if (isclr(ic->ic_modecaps, mode))
+                       continue;
+               addmedia(media, caps, addsta, mode, IFM_AUTO);
+               addmedia(media, caps, addsta, mode, IFM_IEEE80211_VHT);
+
+               /* XXX TODO: VHT maxrate */
+       }
+
        return maxrate;
 }
 
@@ -1883,7 +1906,11 @@ enum ieee80211_phymode
 ieee80211_chan2mode(const struct ieee80211_channel *chan)
 {
 
-       if (IEEE80211_IS_CHAN_HTA(chan))
+       if (IEEE80211_IS_CHAN_VHT_2GHZ(chan))
+               return IEEE80211_MODE_VHT_2GHZ;
+       else if (IEEE80211_IS_CHAN_VHT_5GHZ(chan))
+               return IEEE80211_MODE_VHT_5GHZ;
+       else if (IEEE80211_IS_CHAN_HTA(chan))
                return IEEE80211_MODE_11NA;
        else if (IEEE80211_IS_CHAN_HTG(chan))
                return IEEE80211_MODE_11NG;
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to