Module Name:    src
Committed By:   jakllsch
Date:           Fri Dec 20 01:17:54 UTC 2013

Modified Files:
        src/sys/dev/usb: if_udav.c

Log Message:
Add support for the brandless "QF9700" USB 1.1 to 10Mbit/s Ethernet adapter.
The multicast filter doesn't appear to work, so put the chip in promisc
mode so that IPv6 NDP works.


To generate a diff of this commit:
cvs rdiff -u -r1.41 -r1.42 src/sys/dev/usb/if_udav.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_udav.c
diff -u src/sys/dev/usb/if_udav.c:1.41 src/sys/dev/usb/if_udav.c:1.42
--- src/sys/dev/usb/if_udav.c:1.41	Tue Jan 22 12:40:43 2013
+++ src/sys/dev/usb/if_udav.c	Fri Dec 20 01:17:54 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_udav.c,v 1.41 2013/01/22 12:40:43 jmcneill Exp $	*/
+/*	$NetBSD: if_udav.c,v 1.42 2013/12/20 01:17:54 jakllsch Exp $	*/
 /*	$nabe: if_udav.c,v 1.3 2003/08/21 16:57:19 nabe Exp $	*/
 
 /*
@@ -45,7 +45,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_udav.c,v 1.41 2013/01/22 12:40:43 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_udav.c,v 1.42 2013/12/20 01:17:54 jakllsch Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -148,6 +148,7 @@ static const struct udav_type {
 	struct usb_devno udav_dev;
 	u_int16_t udav_flags;
 #define UDAV_EXT_PHY	0x0001
+#define UDAV_NO_PHY	0x0002
 } udav_devs [] = {
 	/* Corega USB-TXC */
 	{{ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TXC }, 0},
@@ -157,6 +158,8 @@ static const struct udav_type {
 	{{ USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ADM8515 }, 0},
 	/* SUNRISING SR9600 */
 	{{ USB_VENDOR_SUNRISING, USB_PRODUCT_SUNRISING_SR9600 }, 0 },
+	/* SUNRISING QF9700 */
+	{{ USB_VENDOR_SUNRISING, USB_PRODUCT_SUNRISING_QF9700 }, UDAV_NO_PHY },
 	/* QUAN DM9601 */
 	{{USB_VENDOR_QUAN, USB_PRODUCT_QUAN_DM9601 }, 0},
 #if 0
@@ -286,6 +289,11 @@ udav_attach(device_t parent, device_t se
 
 	IFQ_SET_READY(&ifp->if_snd);
 
+	if (ISSET(sc->sc_flags, UDAV_NO_PHY)) {
+		sc->sc_link = 1;
+		goto skipmii;
+	}
+
 	/*
 	 * Do ifmedia setup.
 	 */
@@ -305,6 +313,7 @@ udav_attach(device_t parent, device_t se
 	} else
 		ifmedia_set(&mii->mii_media, IFM_ETHER | IFM_AUTO);
 
+skipmii:
 	/* attach the interface */
 	if_attach(ifp);
 	ether_ifattach(ifp, eaddr);
@@ -772,6 +781,12 @@ udav_setmulti(struct udav_softc *sc)
 
 	ifp = GET_IFP(sc);
 
+	if (ISSET(sc->sc_flags, UDAV_NO_PHY)) {
+		UDAV_SETBIT(sc, UDAV_RCR, UDAV_RCR_ALL);
+		UDAV_SETBIT(sc, UDAV_RCR, UDAV_RCR_PRMSC);
+		return;
+	}
+
 	if (ifp->if_flags & IFF_PROMISC) {
 		UDAV_SETBIT(sc, UDAV_RCR, UDAV_RCR_ALL|UDAV_RCR_PRMSC);
 		return;
@@ -1349,7 +1364,8 @@ udav_stop(struct ifnet *ifp, int disable
 		}
 	}
 
-	sc->sc_link = 0;
+	if (!ISSET(sc->sc_flags, UDAV_NO_PHY))
+		sc->sc_link = 0;
 	ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
 }
 

Reply via email to