Module Name:    src
Committed By:   phil
Date:           Wed Jun 26 16:51:29 UTC 2019

Modified Files:
        src/sys/dev/usb [phil-wifi]: if_urtwn.c

Log Message:
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.


To generate a diff of this commit:
cvs rdiff -u -r1.59.2.7 -r1.59.2.8 src/sys/dev/usb/if_urtwn.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/usb/if_urtwn.c
diff -u src/sys/dev/usb/if_urtwn.c:1.59.2.7 src/sys/dev/usb/if_urtwn.c:1.59.2.8
--- src/sys/dev/usb/if_urtwn.c:1.59.2.7	Mon Jun 10 22:07:34 2019
+++ src/sys/dev/usb/if_urtwn.c	Wed Jun 26 16:51:29 2019
@@ -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 @@ urtwn_attach(device_t parent, device_t s
 #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,29 +547,6 @@ urtwn_attach(device_t parent, device_t s
 	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};
-
-	struct ieee80211vap *vap =
-	    urtwn_vap_create(ic, device_xname(sc->sc_dev),
-	        device_unit(sc->sc_dev), IEEE80211_M_STA,
-	        IEEE80211_CLONE_MACADDR, ic->ic_macaddr, ic->ic_macaddr);
-
-	if (vap == NULL) {
-		/* Didn't work ... now what! */
-		printf ("NNN vap_create didn't work ...\n");
-		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);
@@ -578,10 +555,6 @@ urtwn_attach(device_t parent, device_t s
 	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);
@@ -590,6 +563,21 @@ urtwn_attach(device_t parent, device_t s
 		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),
+	        device_unit(sc->sc_dev), IEEE80211_M_STA,
+	        IEEE80211_CLONE_MACADDR, ic->ic_macaddr, ic->ic_macaddr);
+
+	if (vap == NULL) {
+		/* Didn't work ... now what! */
+		printf ("NNN vap_create didn't work ...\n");
+		ieee80211_ifdetach(ic);
+		goto fail;
+	}
+	
 	return;
 
  fail:
@@ -3403,6 +3391,7 @@ urtwn_vap_create(struct ieee80211com *ic
 	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 @@ urtwn_vap_create(struct ieee80211com *ic
 	// 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 @@ urtwn_vap_create(struct ieee80211com *ic
 	    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 @@ urtwn_raw_xmit(struct ieee80211_node *ni
 
 	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 @@ urtwn_raw_xmit(struct ieee80211_node *ni
 
 	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;

Reply via email to