Author: avos
Date: Thu May 26 15:56:27 2016
New Revision: 300751
URL: https://svnweb.freebsd.org/changeset/base/300751

Log:
  zyd: switch to ieee80211_add_channel_list_*()
  
  - Use device's channel list instead of default one (adds 12, 13 and 14
  2GHz channels).
  - Add ic_getradiocaps() method.
  
  Differential Revision:        https://reviews.freebsd.org/D6171

Modified:
  head/sys/dev/usb/wlan/if_zyd.c
  head/sys/dev/usb/wlan/if_zydreg.h

Modified: head/sys/dev/usb/wlan/if_zyd.c
==============================================================================
--- head/sys/dev/usb/wlan/if_zyd.c      Thu May 26 15:45:36 2016        
(r300750)
+++ head/sys/dev/usb/wlan/if_zyd.c      Thu May 26 15:56:27 2016        
(r300751)
@@ -164,6 +164,8 @@ static void zyd_stop(struct zyd_softc *)
 static int     zyd_loadfirmware(struct zyd_softc *);
 static void    zyd_scan_start(struct ieee80211com *);
 static void    zyd_scan_end(struct ieee80211com *);
+static void    zyd_getradiocaps(struct ieee80211com *, int, int *,
+                   struct ieee80211_channel[]);
 static void    zyd_set_channel(struct ieee80211com *);
 static int     zyd_rfmd_init(struct zyd_rf *);
 static int     zyd_rfmd_switch_radio(struct zyd_rf *, int);
@@ -334,7 +336,6 @@ zyd_attach(device_t dev)
        struct usb_attach_arg *uaa = device_get_ivars(dev);
        struct zyd_softc *sc = device_get_softc(dev);
        struct ieee80211com *ic = &sc->sc_ic;
-       uint8_t bands[IEEE80211_MODE_BYTES];
        uint8_t iface_index;
        int error;
 
@@ -388,15 +389,14 @@ zyd_attach(device_t dev)
                | IEEE80211_C_WPA               /* 802.11i */
                ;
 
-       memset(bands, 0, sizeof(bands));
-       setbit(bands, IEEE80211_MODE_11B);
-       setbit(bands, IEEE80211_MODE_11G);
-       ieee80211_init_channels(ic, NULL, bands);
+       zyd_getradiocaps(ic, IEEE80211_CHAN_MAX, &ic->ic_nchans,
+           ic->ic_channels);
 
        ieee80211_ifattach(ic);
        ic->ic_raw_xmit = zyd_raw_xmit;
        ic->ic_scan_start = zyd_scan_start;
        ic->ic_scan_end = zyd_scan_end;
+       ic->ic_getradiocaps = zyd_getradiocaps;
        ic->ic_set_channel = zyd_set_channel;
        ic->ic_vap_create = zyd_vap_create;
        ic->ic_vap_delete = zyd_vap_delete;
@@ -2865,6 +2865,19 @@ zyd_scan_end(struct ieee80211com *ic)
 }
 
 static void
+zyd_getradiocaps(struct ieee80211com *ic,
+    int maxchans, int *nchans, struct ieee80211_channel chans[])
+{
+       uint8_t bands[IEEE80211_MODE_BYTES];
+
+       memset(bands, 0, sizeof(bands));
+       setbit(bands, IEEE80211_MODE_11B);
+       setbit(bands, IEEE80211_MODE_11G);
+       ieee80211_add_channel_list_2ghz(chans, maxchans, nchans,
+           zyd_chan_2ghz, nitems(zyd_chan_2ghz), bands, 0);
+}
+
+static void
 zyd_set_channel(struct ieee80211com *ic)
 {
        struct zyd_softc *sc = ic->ic_softc;

Modified: head/sys/dev/usb/wlan/if_zydreg.h
==============================================================================
--- head/sys/dev/usb/wlan/if_zydreg.h   Thu May 26 15:45:36 2016        
(r300750)
+++ head/sys/dev/usb/wlan/if_zydreg.h   Thu May 26 15:56:27 2016        
(r300751)
@@ -421,6 +421,10 @@
 #define ZYD_CR254              0x93f8
 #define ZYD_CR255              0x93fc
 
+/* nitems(ZYD_*_CHANTABLE) */
+static const uint8_t zyd_chan_2ghz[] =
+       { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 };
+
 /* copied nearly verbatim from the Linux driver rewrite */
 #define        ZYD_DEF_PHY                                                     
\
 {                                                                      \
_______________________________________________
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