Date: Wed, 05 Nov 2008 10:48:46 -0500 From: Mike Tancsa <mike@sentex.net> To: Nick Hibma <nick@van-laarhoven.org>, FreeBSD CURRENT Mailing List <current@freebsd.org> Cc: FreeBSD Hardware Mailing list <hardware@freebsd.org> Subject: Re: Request for testers: Option 3G cards, also Sierra, Huawei and Novatel Message-ID: <200811051548.mA5Fmsot040177@lava.sentex.ca> In-Reply-To: <200810092344.10388.nick@van-laarhoven.org> References: <200810092344.10388.nick@van-laarhoven.org>
next in thread | previous in thread | raw e-mail | index | archive | help
At 04:44 PM 10/9/2008, Nick Hibma wrote: >Just now I have committed a driver for Option and Huawei cards previously >supported by the ubsa driver. More information is in the commit message. > >I am looking for people who would be able to provide more information after >testing with the 3G cards branded by: Hi, I gave it a try on the Sierra USB card and it seems to work really well on RELENG_7! There is however also a mini-pci express version of the Sierra card, the MC8775. Do you have plans to add support for it ? I am not sure how the unit is even supposed to show up as I dont see it in the dmesg, but I do see that it shows some sort of umass device # usbdevs addr 1: OHCI root hub, AMD addr 2: USB MMC Storage, Sierra Wireless addr 1: EHCI root hub, AMD dmesg snippet ... isa_probe_children: probing PnP devices umass0: <Sierra Wireless USB MMC Storage, class 0/0, rev 1.10/0.00, addr 2> on uhub0 umass0:0:0:-1: Attached to scbus0 Device configuration finished. procfs registered Timecounter "TSC" frequency 498053687 Hz quality 800 Timecounters tick every 1.000 msec crypto: <crypto device> vlan: initialized, using hash tables with chaining IPsec: Initialized Security Association Processing. pflog0: bpf attached lo0: bpf attached ata0-master: pio=PIO4 wdma=WDMA2 udma=UNSUPPORTED cable=40 wire ad0: setting PIO4 on CS5536 chip ad0: 1953MB <SanDisk SDCFH2-002G HDX 4.32> at ata0-master PIO4 ad0: 4001760 sectors [3970C/16H/63S] 4 sectors/interrupt 1 depth queue GEOM: new disk ad0 pass0 at umass-sim0 bus 0 target 0 lun 0 pass0: <AirCard TRU-Install 2.31> Removable CD-ROM SCSI-0 device pass0: 1.000MB/s transfers Trying to mount root from ufs:/dev/ad0s1a start_init: trying /sbin/init bridge0: bpf attached bridge0: Ethernet address: 3a:72:35:a3:25:ce tun0: bpf attached Not sure why it shows up as a passthrough device ? ---Mike >OEM: > Merlin > Huawei > Option > Sierra > Novatel > Qualcomm > >Rebranded: > Dell > Vodafone > >Note: The driver can be copied across to FreeBSD 7-STABLE if you copy the >sys/modules/u3g directory and sys/dev/usb/u3g.c and sys/dev/usb/usbdevs >files from HEAD and _move_ the ID from ubsa to u3g. > >More information can be found on > > http://people.freebsd.org/~n_hibma/u3g.html > >Thanks, > >Nick >---------- Forwarded Message ---------- >Subject: svn commit: r183735 - in head: share/man/man4 sys/conf sys/dev/usb >sys/i386/conf sys/modules sys/modules/u3g >Date: Thu October 9 2008 >From: Nick Hibma <n_hibma@freebsd.org> >To: src-committers@freebsd.org, svn-src-all@freebsd.org, >svn-src-head@freebsd.org > >Author: n_hibma >Date: Thu Oct 9 21:25:01 2008 >New Revision: 183735 >URL: http://svn.freebsd.org/changeset/base/183735 > >Log: > Say hello to the u3g driver, implementing support for 3G modems. > > This was located in the ubsa driver, but should be moved into a separate > driver: > > - 3G modems provide multiple serial ports to allow AT commands while the >PPP > connection is up. > - 3G modems do not provide baud rate or other serial port settings. > - Huawei cards need specific initialisation. > - ubsa is for Belkin adapters, an Linuxy choice for another device like >3G. > > Speeds achieved here with a weak signal at best is ~40kb/s (UMTS). No >spooky > STALLED messages as well. > > Next: Move over all entries for Sierra and Novatel cards once I have found > testers, and implemented serial port enumeration for Sierra (or rather >have > Andrea Guzzo do it). They list all endpoints in 1 iface instead of 4 >ifaces. > > Submitted by: aguzzo@anywi.com > MFC after: 3 weeks > >Added: > head/share/man/man4/u3g.4 (contents, props changed) > head/sys/dev/usb/u3g.c (contents, props changed) > head/sys/modules/u3g/ > head/sys/modules/u3g/Makefile (contents, props changed) >Modified: > head/share/man/man4/Makefile > head/sys/conf/NOTES > head/sys/conf/files > head/sys/dev/usb/ubsa.c > head/sys/dev/usb/usbdevs > head/sys/i386/conf/GENERIC > head/sys/modules/Makefile > >Modified: head/share/man/man4/Makefile >============================================================================== >--- head/share/man/man4/Makefile Thu Oct 9 20:51:25 >2008 (r183734) >+++ head/share/man/man4/Makefile Thu Oct 9 21:25:01 >2008 (r183735) >@@ -384,6 +384,7 @@ MAN= aac.4 \ > twe.4 \ > tx.4 \ > txp.4 \ >+ u3g.4 \ > uark.4 \ > uart.4 \ > ubsa.4 \ > >Added: head/share/man/man4/u3g.4 >============================================================================== >--- /dev/null 00:00:00 1970 (empty, because file is newly added) >+++ head/share/man/man4/u3g.4 Thu Oct 9 21:25:01 2008 (r183735) >@@ -0,0 +1,100 @@ >+.\" >+.\" Copyright (c) 2008 AnyWi Technologies >+.\" All rights reserved. >+.\" >+.\" This code is derived from uark.c >+.\" >+.\" Permission to use, copy, modify, and distribute this software for any >+.\" purpose with or without fee is hereby granted, provided that the above >+.\" copyright notice and this permission notice appear in all copies. >+.\" >+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL >WARRANTIES >+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF >+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR >+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES >+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN >+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF >+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. >+.\" >+.\" $FreeBSD$ >+.\" >+.Dd October 7, 2008 >+.Dt U3G 4 >+.Os >+.Sh NAME >+.Nm u3g >+.Nd USB support for 3G datacards >+.Sh SYNOPSIS >+To compile this driver into the kernel, >+place the following lines in your >+kernel configuration file: >+.Bd -ragged -offset indent >+.Cd "device u3g" >+.Cd "device ucom" >+.Ed >+.Pp >+Alternatively, to load the driver as a >+module at boot time, place the following line in >+.Xr loader.conf 5 : >+.Bd -literal -offset indent >+u3g_load="YES" >+.Ed >+.Sh DESCRIPTION >+The >+.Nm >+driver provides support for the multiple USB-to-serial interfaces exposed >by >+many 3G usb/pccard modems. >+.Pp >+The device is accessed through the >+.Xr ucom 4 >+driver which makes it behave like a >+.Xr tty 4 . >+.Sh HARDWARE >+The >+.Nm >+driver supports the following adapters: >+.Pp >+.Bl -bullet -compact >+.It >+Option Globetrotter 3G Fusion (only 3G part, not WLAN) >+.It >+Option Globetrotter 3G Fusion Quad (only 3G part, not WLAN) >+.It >+Option Globetrotter 3G Quad >+.It >+Option Globetrotter 3G >+.It >+Vodafone Mobile Connect Card 3G >+.It >+Huawei E220 (E270?) >+.It >+Huawei Mobile >+.El >+.Pp >+The supported 3G cards provide the necessary modem port for ppp, >+pppd, or mpd connections as well as extra ports (depending on the specific >+device) to provide other functions (diagnostic port, SIM toolkit port) >+.Sh SEE ALSO >+.Xr tty 4 , >+.Xr ucom 4 , >+.Xr usb 4 , >+.Xr ubsa 4 >+.Sh HISTORY >+The >+.Nm >+driver >+appeared in >+.Fx 7.0 . >+The >+.Xr ubsa 4 >+manual page was modified for >+.Nm >+by >+.An Andrea Guzzo Aq aguzzo@anywi.com >+in September 2008. >+.Sh AUTHORS >+The >+.Nm >+driver was written by >+.An Andrea Guzzo Aq aguzzo@anywi.com . >+Hardware for testing provided by AnyWi Technologies, Leiden, NL. > >Modified: head/sys/conf/NOTES >============================================================================== >--- head/sys/conf/NOTES Thu Oct 9 20:51:25 2008 (r183734) >+++ head/sys/conf/NOTES Thu Oct 9 21:25:01 2008 (r183735) >@@ -2416,6 +2416,8 @@ device uscanner > # > # USB serial support > device ucom >+# USB support for 3G modem cards by Option, Huawei and Sierra >+device u3g > # USB support for Technologies ARK3116 based serial adapters > device uark > # USB support for Belkin F5U103 and compatible serial adapters >@@ -2441,7 +2443,6 @@ device aue > > # ASIX Electronics AX88172 USB 2.0 ethernet driver. Used in the > # LinkSys USB200M and various other adapters. >- > device axe > > # > >Modified: head/sys/conf/files >============================================================================== >--- head/sys/conf/files Thu Oct 9 20:51:25 2008 (r183734) >+++ head/sys/conf/files Thu Oct 9 21:25:01 2008 (r183735) >@@ -1327,6 +1327,7 @@ dev/usb/ohci_pci.c optional ohci pci > dev/usb/sl811hs.c optional slhci > dev/usb/slhci_pccard.c optional slhci pccard > dev/usb/uark.c optional uark >+dev/usb/u3g.c optional u3g > dev/usb/ubsa.c optional ubsa > dev/usb/ubser.c optional ubser > dev/usb/ucom.c optional ucom > >Added: head/sys/dev/usb/u3g.c >============================================================================== >--- /dev/null 00:00:00 1970 (empty, because file is newly added) >+++ head/sys/dev/usb/u3g.c Thu Oct 9 21:25:01 2008 (r183735) >@@ -0,0 +1,330 @@ >+/* >+ * Copyright (c) 2008 AnyWi Technologies >+ * Author: Andrea Guzzo <aguzzo@anywi.com> >+ * * based on uark.c 1.1 2006/08/14 08:30:22 jsg * >+ * * parts from ubsa.c 183348 2008-09-25 12:00:56Z phk * >+ * >+ * Permission to use, copy, modify, and distribute this software for any >+ * purpose with or without fee is hereby granted, provided that the above >+ * copyright notice and this permission notice appear in all copies. >+ * >+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES >+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF >+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR >+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES >+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN >+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF >+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. >+ * >+ * $FreeBSD$ >+ */ >+ >+#include <sys/param.h> >+#include <sys/systm.h> >+#include <sys/kernel.h> >+#include <sys/malloc.h> >+#include <sys/module.h> >+#include <sys/bus.h> >+#include <sys/ioccom.h> >+#include <sys/fcntl.h> >+#include <sys/conf.h> >+#include <sys/tty.h> >+#include <sys/file.h> >+#include <sys/selinfo.h> >+ >+#include <dev/usb/usb.h> >+#include <dev/usb/usbdi.h> >+#include <dev/usb/usbdi_util.h> >+ >+#include <dev/usb/ucomvar.h> >+ >+#include "usbdevs.h" >+ >+#ifdef U3G_DEBUG >+#define DPRINTFN(n, x) do { if (u3gdebug > (n)) printf x; } while (0) >+int u3gtebug = 0; >+#else >+#define DPRINTFN(n, x) >+#endif >+#define DPRINTF(x) DPRINTFN(0, x) >+ >+#define U3GBUFSZ 1024 >+#define U3G_MAXPORTS 4 >+ >+struct u3g_softc { >+ struct ucom_softc sc_ucom[U3G_MAXPORTS];; >+ device_t sc_dev; >+ usbd_device_handle sc_udev; >+ u_char sc_msr; >+ u_char sc_lsr; >+ u_char numports; >+ >+ usbd_interface_handle sc_intr_iface; /* interrupt interface */ >+#ifdef U3G_DEBUG >+ int sc_intr_number; /* interrupt number */ >+ usbd_pipe_handle sc_intr_pipe; /* interrupt pipe */ >+ u_char *sc_intr_buf; /* interrupt buffer */ >+#endif >+ int sc_isize; >+}; >+ >+struct ucom_callback u3g_callback = { >+ NULL, >+ NULL, >+ NULL, >+ NULL, >+ NULL, >+ NULL, >+ NULL, >+ NULL, >+}; >+ >+static const struct usb_devno u3g_devs[] = { >+ /* OEM: Option */ >+ { USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3G }, >+ { USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GQUAD }, >+ { USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GPLUS }, >+ { USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GTMAX36 }, >+ { USB_VENDOR_OPTION, USB_PRODUCT_OPTION_VODAFONEMC3G }, >+ /* OEM: Huawei */ >+ { USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_MOBILE }, >+ { USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E220 }, >+ >+ { 0, 0 } >+}; >+ >+#ifdef U3G_DEBUG >+static void >+u3g_intr(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status >status) >+{ >+ struct u3g_softc *sc = (struct u3g_softc *)priv; >+ device_printf(sc->sc_dev, "INTERRUPT CALLBACK\n"); >+} >+#endif >+ >+static int >+u3g_huawei_reinit(usbd_device_handle dev) >+{ >+ /* The Huawei device presents itself as a umass device with Windows >+ * drivers on it. After installation of the driver, it reinits into a >+ * 3G serial device. >+ */ >+ usb_device_request_t req; >+ usb_config_descriptor_t *cdesc; >+ >+ /* Get the config descriptor */ >+ cdesc = usbd_get_config_descriptor(dev); >+ if (cdesc == NULL) >+ return (UMATCH_NONE); >+ >+ /* One iface means umass mode, more than 1 (4 usually) means >3G mode */ >+ if (cdesc->bNumInterface > 1) >+ return (UMATCH_VENDOR_PRODUCT); >+ >+ req.bmRequestType = UT_WRITE_DEVICE; >+ req.bRequest = UR_SET_FEATURE; >+ USETW(req.wValue, UF_DEVICE_REMOTE_WAKEUP); >+ USETW(req.wIndex, UHF_PORT_SUSPEND); >+ USETW(req.wLength, 0); >+ >+ (void) usbd_do_request(dev, &req, 0); >+ >+ return UMATCH_NONE; /* mismatch; it will be gone and reappear */ >+} >+ >+static int >+u3g_match(device_t self) >+{ >+ struct usb_attach_arg *uaa = device_get_ivars(self); >+ >+ if (uaa->iface != NULL) >+ return (UMATCH_NONE); >+ >+ if (uaa->vendor == USB_VENDOR_HUAWEI) >+ return u3g_huawei_reinit(uaa->device); >+ >+ if (usb_lookup(u3g_devs, uaa->vendor, uaa->product)) >+ return UMATCH_VENDOR_PRODUCT; >+ >+ return UMATCH_NONE; >+} >+ >+static int >+u3g_attach(device_t self) >+{ >+ struct u3g_softc *sc = device_get_softc(self); >+ struct usb_attach_arg *uaa = device_get_ivars(self); >+ usbd_device_handle dev = uaa->device; >+ usbd_interface_handle iface; >+ usb_interface_descriptor_t *id; >+ usb_endpoint_descriptor_t *ed; >+ usbd_status error; >+ int i, n; >+ usb_config_descriptor_t *cdesc; >+ struct ucom_softc *ucom = NULL; >+ char devnamefmt[32]; >+ >+ sc->sc_dev = self; >+#ifdef DEBUG >+ sc->sc_intr_number = -1; >+ sc->sc_intr_pipe = NULL; >+#endif >+ /* Move the device into the configured state. */ >+ error = usbd_set_config_index(dev, 1, 1); >+ if (error) { >+ device_printf(self, "failed to set configuration: %s\n", >+ usbd_errstr(error)); >+ goto bad; >+ } >+ >+ /* get the config descriptor */ >+ cdesc = usbd_get_config_descriptor(dev); >+ >+ if (cdesc == NULL) { >+ device_printf(self, "failed to get configuration >descriptor\n"); >+ goto bad; >+ } >+ >+ sc->sc_udev = dev; >+ sc->numports = (cdesc->bNumInterface <= >U3G_MAXPORTS)?cdesc->bNumInterface:U3G_MAXPORTS; >+ for ( i = 0; i < sc->numports; i++ ) { >+ ucom = &sc->sc_ucom[i]; >+ >+ ucom->sc_dev = self; >+ ucom->sc_udev = dev; >+ error = usbd_device2interface_handle(dev, i, &iface); >+ if (error) { >+ device_printf(ucom->sc_dev, >+ "failed to get interface, err=%s\n", >+ usbd_errstr(error)); >+ ucom->sc_dying = 1; >+ goto bad; >+ } >+ id = usbd_get_interface_descriptor(iface); >+ ucom->sc_iface = iface; >+ >+ ucom->sc_bulkin_no = ucom->sc_bulkout_no = -1; >+ for (n = 0; n < id->bNumEndpoints; n++) { >+ ed = usbd_interface2endpoint_descriptor(iface, n); >+ if (ed == NULL) { >+ device_printf(ucom->sc_dev, >+ "could not read endpoint >descriptor\n"); >+ goto bad; >+ } >+ if (UE_GET_DIR(ed->bEndpointAddress) == UE_DIR_IN && >+ UE_GET_XFERTYPE(ed->bmAttributes) == UE_BULK) >+ ucom->sc_bulkin_no = ed->bEndpointAddress; >+ else if (UE_GET_DIR(ed->bEndpointAddress) == >UE_DIR_OUT && >+ UE_GET_XFERTYPE(ed->bmAttributes) == UE_BULK) >+ ucom->sc_bulkout_no = ed->bEndpointAddress; >+ } >+ if (ucom->sc_bulkin_no == -1 || ucom->sc_bulkout_no == -1) { >+ device_printf(ucom->sc_dev, "missing endpoint\n"); >+ goto bad; >+ } >+ ucom->sc_parent = sc; >+ ucom->sc_ibufsize = U3GBUFSZ; >+ ucom->sc_obufsize = U3GBUFSZ; >+ ucom->sc_ibufsizepad = U3GBUFSZ; >+ ucom->sc_opkthdrlen = 0; >+ >+ ucom->sc_callback = &u3g_callback; >+ >+ sprintf(devnamefmt,"U%d.%%d", device_get_unit(self)); >+ DPRINTF(("u3g: in=0x%x out=0x%x, devname=%s\n", >+ ucom->sc_bulkin_no, ucom->sc_bulkout_no, devnamefmt)); >+#if __FreeBSD_version < 800000 >+ ucom_attach_tty(ucom, TS_CALLOUT, devnamefmt, i); >+#else >+ ucom_attach_tty(ucom, devnamefmt, i); >+#endif >+ } >+#ifdef U3G_DEBUG >+ if (sc->sc_intr_number != -1 && sc->sc_intr_pipe == NULL) { >+ sc->sc_intr_buf = malloc(sc->sc_isize, M_USBDEV, M_WAITOK); >+ error = usbd_open_pipe_intr(sc->sc_intr_iface, >+ sc->sc_intr_number, >+ USBD_SHORT_XFER_OK, >+ &sc->sc_intr_pipe, >+ sc, >+ sc->sc_intr_buf, >+ sc->sc_isize, >+ u3g_intr, >+ 100); >+ if (error) { >+ device_printf(self, >+ "cannot open interrupt pipe (addr %d)\n", >+ sc->sc_intr_number); >+ goto bad; >+ } >+ } >+#endif >+ device_printf(self, "configured %d serial ports (/dev/cuaU%d.X)", >+ sc->numports, device_get_unit(self)); >+ >+ return 0; >+ >+bad: >+ DPRINTF(("u3g_attach: ATTACH ERROR\n")); >+ ucom->sc_dying = 1; >+ return ENXIO; >+} >+ >+static int >+u3g_detach(device_t self) >+{ >+ struct u3g_softc *sc = device_get_softc(self); >+ int rv = 0; >+ int i; >+ >+ DPRINTF(("u3g_detach: sc=%p\n", sc)); >+ >+ for (i = 0; i < sc->numports; i++) { >+ if(sc->sc_ucom[i].sc_udev) { >+ sc->sc_ucom[i].sc_dying = 1; >+ rv = ucom_detach(&sc->sc_ucom[i]); >+ if(rv != 0) { >+ device_printf(self, "Can't deallocat >port %d", i); >+ return rv; >+ } >+ } >+ } >+ >+#ifdef U3G_DEBUG >+ if (sc->sc_intr_pipe != NULL) { >+ int err = usbd_abort_pipe(sc->sc_intr_pipe); >+ if (err) >+ device_printf(self, >+ "abort interrupt pipe failed: %s\n", >+ usbd_errstr(err)); >+ err = usbd_close_pipe(sc->sc_intr_pipe); >+ if (err) >+ device_printf(self, >+ "close interrupt pipe failed: %s\n", >+ usbd_errstr(err)); >+ free(sc->sc_intr_buf, M_USBDEV); >+ sc->sc_intr_pipe = NULL; >+ } >+#endif >+ >+ return 0; >+} >+ >+static device_method_t u3g_methods[] = { >+ /* Device interface */ >+ DEVMETHOD(device_probe, u3g_match), >+ DEVMETHOD(device_attach, u3g_attach), >+ DEVMETHOD(device_detach, u3g_detach), >+ >+ { 0, 0 } >+}; >+ >+static driver_t u3g_driver = { >+ "ucom", >+ u3g_methods, >+ sizeof (struct u3g_softc) >+}; >+ >+DRIVER_MODULE(u3g, uhub, u3g_driver, ucom_devclass, usbd_driver_load, 0); >+MODULE_DEPEND(u3g, usb, 1, 1, 1); >+MODULE_DEPEND(u3g, ucom, UCOM_MINVER, UCOM_PREFVER, UCOM_MAXVER); > >Modified: head/sys/dev/usb/ubsa.c >============================================================================== >--- head/sys/dev/usb/ubsa.c Thu Oct 9 20:51:25 2008 (r183734) >+++ head/sys/dev/usb/ubsa.c Thu Oct 9 21:25:01 2008 (r183735) >@@ -161,8 +161,6 @@ SYSCTL_INT(_hw_usb_ubsa, OID_AUTO, debug > struct ubsa_softc { > struct ucom_softc sc_ucom; > >- int sc_huawei; >- > int sc_iface_number; /* > interface number */ > > usbd_interface_handle sc_intr_iface; /* interrupt interface */ >@@ -228,24 +226,11 @@ static const struct ubsa_product { > { USB_VENDOR_GOHUBS, USB_PRODUCT_GOHUBS_GOCOM232 }, > /* Peracom */ > { USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_SERIAL1 }, >- /* Dell version of the Novatel 740 */ >- { USB_VENDOR_DELL, USB_PRODUCT_DELL_U740 }, >- /* Option Vodafone MC3G */ >- { USB_VENDOR_OPTION, USB_PRODUCT_OPTION_VODAFONEMC3G }, >- /* Option GlobeTrotter 3G */ >- { USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3G }, >- /* Option GlobeTrotter 3G QUAD */ >- { USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GQUAD }, >- /* Option GlobeTrotter 3G+ */ >- { USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GPLUS }, >- /* Option GlobeTrotter Max 3.6 */ >- { USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GTMAX36 }, >- /* Huawei Mobile */ >- { USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_MOBILE }, >- { USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E270 }, >+ /* Merlin */ > { USB_VENDOR_MERLIN, USB_PRODUCT_MERLIN_V620 }, > /* Qualcomm, Inc. ZTE CDMA */ > { USB_VENDOR_QUALCOMMINC, USB_PRODUCT_QUALCOMMINC_CDMA_MSM }, >+ /* Novatel */ > { USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_CDMA_MODEM }, > /* Novatel Wireless Merlin ES620 */ > { USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_ES620 }, >@@ -256,6 +241,8 @@ static const struct ubsa_product { > /* Novatel Wireless Merlin U740 */ > { USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U740 }, > { USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U740_2 }, >+ /* Dell version of the Novatel 740 */ >+ { USB_VENDOR_DELL, USB_PRODUCT_DELL_U740 }, > /* Novatel Wireless Merlin U950D */ > { USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U950D }, > /* Novatel Wireless Merlin V620 */ >@@ -341,52 +328,6 @@ MODULE_DEPEND(ubsa, usb, 1, 1, 1); > MODULE_DEPEND(ubsa, ucom, UCOM_MINVER, UCOM_PREFVER, UCOM_MAXVER); > MODULE_VERSION(ubsa, UBSA_MODVER); > >-/* >- * Huawei Exxx radio devices have a built in flash disk which is their >- * default power up configuration. This allows the device to carry its >- * own installation software. >- * >- * Instead of following the USB spec, and create multiple configuration >- * descriptors for this, the devices expects the driver to send >- * UF_DEVICE_REMOTE_WAKEUP to endpoint 2 to reset the device, so it >- * reprobes, now with the radio exposed. >- */ >- >-static usbd_status >-ubsa_huawei(device_t self, struct usb_attach_arg *uaa) { >- usb_device_request_t req; usbd_device_handle dev; >- usb_config_descriptor_t *cdesc; >- >- if (self == NULL) >- return (UMATCH_NONE); >- if (uaa == NULL) >- return (UMATCH_NONE); >- dev = uaa->device; >- if (dev == NULL) >- return (UMATCH_NONE); >- /* get the config descriptor */ >- cdesc = usbd_get_config_descriptor(dev); >- if (cdesc == NULL) >- return (UMATCH_NONE); >- >- if (cdesc->bNumInterface > 1) >- return (0); >- >- /* Bend it like Beckham */ >- device_printf(self, "Kicking Huawei device into radio mode\n"); >- memset(&req, 0, sizeof req); >- req.bmRequestType = UT_WRITE_DEVICE; >- req.bRequest = UR_SET_FEATURE; >- USETW(req.wValue, UF_DEVICE_REMOTE_WAKEUP); >- USETW(req.wIndex, 2); >- USETW(req.wLength, 0); >- >- /* We get error return, but it works */ >- (void)usbd_do_request(dev, &req, 0); >- return (UMATCH_NONE); >-} >- >- > static int > ubsa_match(device_t self) > { >@@ -399,9 +340,6 @@ ubsa_match(device_t self) > for (i = 0; ubsa_products[i].vendor != 0; i++) { > if (ubsa_products[i].vendor == uaa->vendor && > ubsa_products[i].product == uaa->product) { >- if (uaa->vendor == USB_VENDOR_HUAWEI && >- ubsa_huawei(self, uaa)) >- break; > return (UMATCH_VENDOR_PRODUCT); > } > } >@@ -424,9 +362,6 @@ ubsa_attach(device_t self) > dev = uaa->device; > ucom = &sc->sc_ucom; > >- if (uaa->vendor == USB_VENDOR_HUAWEI) >- sc->sc_huawei = 1; >- > /* > * initialize rts, dtr variables to something > * different from boolean 0, 1 >@@ -575,8 +510,6 @@ ubsa_request(struct ubsa_softc *sc, u_in > usbd_status err; > > /* The huawei Exxx devices support none of these tricks */ >- if (sc->sc_huawei) >- return (0); > req.bmRequestType = UT_WRITE_VENDOR_DEVICE; > req.bRequest = request; > USETW(req.wValue, value); > >Modified: head/sys/dev/usb/usbdevs >============================================================================== >--- head/sys/dev/usb/usbdevs Thu Oct 9 20:51:25 2008 (r183734) >+++ head/sys/dev/usb/usbdevs Thu Oct 9 21:25:01 2008 (r183735) >@@ -1434,7 +1434,7 @@ product HTC SMARTPHONE 0x0a51 SmartPhon > > /* HUAWEI products */ > product HUAWEI MOBILE 0x1001 Huawei Mobile >-product HUAWEI E270 0x1003 Huawei HSPA modem >+product HUAWEI E220 0x1003 Huawei HSDPA modem > > /* HUAWEI 3com products */ > product HUAWEI3COM WUB320G 0x0009 Aolynk WUB320g > >Modified: head/sys/i386/conf/GENERIC >============================================================================== >--- head/sys/i386/conf/GENERIC Thu Oct 9 20:51:25 2008 (r183734) >+++ head/sys/i386/conf/GENERIC Thu Oct 9 21:25:01 2008 (r183735) >@@ -304,6 +304,7 @@ device urio # Diamond >Rio 500 MP3 play > device uscanner # Scanners > # USB Serial devices > device ucom # Generic com ttys >+device u3g # USB-based 3G modems (Option, Huawei, Sierra) > device uark # Technologies ARK3116 based serial adapters > device ubsa # Belkin F5U103 and compatible > serial adapters > device uftdi # For FTDI usb serial adapters > >Modified: head/sys/modules/Makefile >============================================================================== >--- head/sys/modules/Makefile Thu Oct 9 20:51:25 2008 (r183734) >+++ head/sys/modules/Makefile Thu Oct 9 21:25:01 2008 (r183735) >@@ -269,6 +269,7 @@ SUBDIR= ${_3dfx} \ > twe \ > tx \ > txp \ >+ u3g \ > uark \ > uart \ > ubsa \ > >Added: head/sys/modules/u3g/Makefile >============================================================================== >--- /dev/null 00:00:00 1970 (empty, because file is newly added) >+++ head/sys/modules/u3g/Makefile Thu Oct 9 21:25:01 >2008 (r183735) >@@ -0,0 +1,8 @@ >+# $FreeBSD$ >+ >+.PATH: ${.CURDIR}/../../dev/usb >+ >+KMOD= u3g >+SRCS= u3g.c ucomvar.h opt_usb.h device_if.h bus_if.h usbdevs.h >+ >+.include <bsd.kmod.mk> >_______________________________________________ >svn-src-all@freebsd.org mailing list >http://lists.freebsd.org/mailman/listinfo/svn-src-all >To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org" > >------------------------------------------------------- >_______________________________________________ >freebsd-current@freebsd.org mailing list >http://lists.freebsd.org/mailman/listinfo/freebsd-current >To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200811051548.mA5Fmsot040177>