Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/phil-wifi]: src/sys/dev/usb Remove extra if_register() call.



details:   https://anonhg.NetBSD.org/src/rev/e0562e35a51b
branches:  phil-wifi
changeset: 452304:e0562e35a51b
user:      phil <phil%NetBSD.org@localhost>
date:      Wed Jun 26 16:51:29 2019 +0000

description:
Remove extra if_register() call.
Move temporary call to vap_create() to end of attach to make sure
attach works when vap_create() will not be called as part of attach.

diffstat:

 sys/dev/usb/if_urtwn.c |  72 +++++++++++++++++++++++--------------------------
 1 files changed, 34 insertions(+), 38 deletions(-)

diffs (142 lines):

diff -r 1e1b79eb7689 -r e0562e35a51b sys/dev/usb/if_urtwn.c
--- a/sys/dev/usb/if_urtwn.c    Mon Jun 10 21:51:02 2019 +0000
+++ b/sys/dev/usb/if_urtwn.c    Wed Jun 26 16:51:29 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_urtwn.c,v 1.59.2.7 2019/06/10 22:07:34 christos Exp $       */
+/*     $NetBSD: if_urtwn.c,v 1.59.2.8 2019/06/26 16:51:29 phil Exp $   */
 /*     $OpenBSD: if_urtwn.c,v 1.42 2015/02/10 23:25:46 mpi Exp $       */
 
 /*-
@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_urtwn.c,v 1.59.2.7 2019/06/10 22:07:34 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_urtwn.c,v 1.59.2.8 2019/06/26 16:51:29 phil Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -529,8 +529,8 @@
 #else
        urtwn_getradiocaps(ic, IEEE80211_CHAN_MAX, &ic->ic_nchans, 
            ic->ic_channels);
-#endif 
-
+#endif
+       /* XXX issues here ...  Figure out proper attach and vap creation */
        ieee80211_ifattach(ic);
 
        /* override default methods NNN Need more here? */
@@ -547,9 +547,24 @@
        ic->ic_raw_xmit = urtwn_raw_xmit;
        ic->ic_getradiocaps = urtwn_getradiocaps;
        
-
-       /* How should this get called the first time?  Not here? */
-       // uint8_t bssid[IEEE80211_ADDR_LEN] = {0};
+       sc->sc_rxtap_len = sizeof(sc->sc_rxtapu);
+       sc->sc_rxtap.wr_ihdr.it_len = htole16(sc->sc_rxtap_len);
+       sc->sc_rxtap.wr_ihdr.it_present = htole32(URTWN_RX_RADIOTAP_PRESENT);
+
+       sc->sc_txtap_len = sizeof(sc->sc_txtapu);
+       sc->sc_txtap.wt_ihdr.it_len = htole16(sc->sc_txtap_len);
+       sc->sc_txtap.wt_ihdr.it_present = htole32(URTWN_TX_RADIOTAP_PRESENT);
+
+       ieee80211_announce(ic);
+
+       usbd_add_drv_event(USB_EVENT_DRIVER_ATTACH, sc->sc_udev, sc->sc_dev);
+
+       if (!pmf_device_register(self, NULL, NULL))
+               aprint_error_dev(self, "couldn't establish power handler\n");
+
+       SET(sc->sc_flags, URTWN_FLAG_ATTACHED);
+
+       /* Should be called via an IOCTL.  Temp call here for now. */
 
        struct ieee80211vap *vap =
            urtwn_vap_create(ic, device_xname(sc->sc_dev),
@@ -562,34 +577,7 @@
                ieee80211_ifdetach(ic);
                goto fail;
        }
-
-       /* Debug all! NNN */
-       // vap->iv_debug = IEEE80211_MSG_ANY;
-
-       bpf_attach2(vap->iv_ifp, DLT_IEEE802_11_RADIO,
-           sizeof(struct ieee80211_frame) + IEEE80211_RADIOTAP_HDRLEN,
-           &sc->sc_drvbpf);
-
-       sc->sc_rxtap_len = sizeof(sc->sc_rxtapu);
-       sc->sc_rxtap.wr_ihdr.it_len = htole16(sc->sc_rxtap_len);
-       sc->sc_rxtap.wr_ihdr.it_present = htole32(URTWN_RX_RADIOTAP_PRESENT);
-
-       sc->sc_txtap_len = sizeof(sc->sc_txtapu);
-       sc->sc_txtap.wt_ihdr.it_len = htole16(sc->sc_txtap_len);
-       sc->sc_txtap.wt_ihdr.it_present = htole32(URTWN_TX_RADIOTAP_PRESENT);
-
-       struct ifnet *ifp = vap->iv_ifp;
-       ifp->if_percpuq = if_percpuq_create(ifp);
-       if_register(ifp);
-
-       ieee80211_announce(ic);
-
-       usbd_add_drv_event(USB_EVENT_DRIVER_ATTACH, sc->sc_udev, sc->sc_dev);
-
-       if (!pmf_device_register(self, NULL, NULL))
-               aprint_error_dev(self, "couldn't establish power handler\n");
-
-       SET(sc->sc_flags, URTWN_FLAG_ATTACHED);
+       
        return;
 
  fail:
@@ -3403,6 +3391,7 @@
        vap->iv_reset = urtwn_reset;
 
        ifp = vap->iv_ifp;
+        if_initialize(ifp);
        ifp->if_init = urtwn_init;
        ifp->if_ioctl = urtwn_ioctl;
        ifp->if_start = urtwn_start;
@@ -3411,6 +3400,8 @@
        // IFQ_SET_READY(&ifp->if_snd);
        memcpy(ifp->if_xname, device_xname(sc->sc_dev), IFNAMSIZ);
 
+       ifp->if_percpuq = if_percpuq_create(ifp);
+
        /* Override state transition machine. */
        /* NNN --- many possible newstate machines ... issue! */
        sc->sc_newstate = vap->iv_newstate;
@@ -3421,6 +3412,11 @@
            ieee80211_media_status, macaddr);
        ic->ic_opmode = opmode;
 
+       /* Attach the packet filter */
+       bpf_attach2(vap->iv_ifp, DLT_IEEE802_11_RADIO,
+           sizeof(struct ieee80211_frame) + IEEE80211_RADIOTAP_HDRLEN,
+           &sc->sc_drvbpf);
+
        return vap;
 }
 
@@ -3610,7 +3606,7 @@
 
        DPRINTFN(DBG_FN, ("%s: %s\n",device_xname(sc->sc_dev), __func__));
 
-       KASSERT(vap != NULL);  // NNN need these?
+       KASSERT(vap != NULL);   /*  NNN need these? */
        KASSERT(ic != NULL);
        KASSERT(sc != NULL);
        KASSERT(m != NULL);
@@ -3628,8 +3624,8 @@
 
        error = urtwn_tx(sc, m, ni, data);
        if (error != 0) {
-                       printf("ERROR3\n");
-                       vap->iv_ifp->if_oerrors++;
+               printf("ERROR3\n");
+               vap->iv_ifp->if_oerrors++;
        } else {
                sc->tx_timer = 5;
                vap->iv_ifp->if_timer = 1;



Home | Main Index | Thread Index | Old Index