Add umsm(4) driver for EVDO and UMTS modems with Qualcomm MSM chipsets.
authorHasso Tepper <hasso@dragonflybsd.org>
Thu, 16 Aug 2007 20:38:33 +0000 (20:38 +0000)
committerHasso Tepper <hasso@dragonflybsd.org>
Thu, 16 Aug 2007 20:38:33 +0000 (20:38 +0000)
Obtained-from: OpenBSD

share/man/man4/Makefile
share/man/man4/ucom.4
share/man/man4/umsm.4 [new file with mode: 0644]
sys/bus/usb/usbdevs.h
sys/bus/usb/usbdevs_data.h
sys/conf/files
sys/dev/usbmisc/Makefile
sys/dev/usbmisc/umsm/Makefile [new file with mode: 0644]
sys/dev/usbmisc/umsm/umsm.c [new file with mode: 0644]

index 1c9174c..f00c084 100644 (file)
@@ -1,6 +1,6 @@
 #      @(#)Makefile    8.1 (Berkeley) 6/18/93
 # $FreeBSD: src/share/man/man4/Makefile,v 1.83.2.66 2003/06/04 17:10:30 sam Exp $
-# $DragonFly: src/share/man/man4/Makefile,v 1.61 2007/08/16 20:03:56 dillon Exp $
+# $DragonFly: src/share/man/man4/Makefile,v 1.62 2007/08/16 20:38:33 hasso Exp $
 
 MAN=   aac.4 \
        acpi.4 \
@@ -278,6 +278,7 @@ MAN=        aac.4 \
        umct.4 \
        umodem.4 \
        ums.4 \
+       umsm.4 \
        unix.4 \
        uplcom.4 \
        ural.4 \
index 01bbdbf..780aca8 100644 (file)
@@ -35,7 +35,7 @@
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
 .\" $FreeBSD: src/share/man/man4/ucom.4,v 1.2.2.2 2002/08/12 20:32:05 joe Exp $
-.\" $DragonFly: src/share/man/man4/ucom.4,v 1.6 2007/08/14 22:28:11 hasso Exp $
+.\" $DragonFly: src/share/man/man4/ucom.4,v 1.7 2007/08/16 20:38:33 hasso Exp $
 .\"
 .Dd November 25, 1999
 .Dt UCOM 4
@@ -82,6 +82,7 @@ can be used to access the device.
 .Xr uftdi 4 ,
 .Xr umct 4 ,
 .Xr umodem 4 ,
+.Xr umsm 4 ,
 .Xr uplcom 4 ,
 .Xr usb 4 ,
 .Xr uslcom 4 ,
diff --git a/share/man/man4/umsm.4 b/share/man/man4/umsm.4
new file mode 100644 (file)
index 0000000..7fb1e90
--- /dev/null
@@ -0,0 +1,172 @@
+.\"    $DragonFly: src/share/man/man4/Attic/umsm.4,v 1.1 2007/08/16 20:38:33 hasso Exp $
+.\"    $OpenBSD: umsm.4,v 1.20 2007/05/31 19:19:52 jmc Exp $
+.\"
+.\" Copyright (c) 2006 Jonathan Gray <jsg@openbsd.org>
+.\"
+.\" 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.
+.\"
+.Dd $Mdocdate: May 31 2007 $
+.Dt UMSM 4
+.Os
+.Sh NAME
+.Nm umsm
+.Nd Qualcomm MSM modem device
+.Sh SYNOPSIS
+To compile this driver into the kernel,
+place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device umsm"
+.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
+umsm_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+driver supports Qualcomm MSM modem adapters.
+The MSM chipset is found in EVDO and UMTS capable modems.
+Typically these are CardBus and PCI Express Mini Cards that incorporate a
+USB controller with the actual device attached to it.
+.Pp
+The following devices are known to work with the
+.Nm
+driver:
+.Pp
+.Bl -column "Device                " "Bus" -compact -offset 6n
+.It Em "Device         Bus"
+.It Li "AirPrime PC5220" Ta Ta CardBus
+.It Li "Kyocera KPC650" Ta Ta CardBus
+.It Li "Novatel Wireless ES620" Ta Ta USB
+.It Li "ONDA Communication H600" Ta Ta CardBus
+.It Li "Sierra Wireless MC8755" Ta Ta PCI Express Mini Card
+.It Li "Sierra Wireless AirCard 580" Ta Ta CardBus
+.It Li "Sierra Wireless AirCard 875" Ta Ta CardBus
+.El
+.Pp
+Devices suspected of being compatible are:
+.Pp
+.Bl -column "Device                " "Bus" -compact -offset 6n
+.It Em "Device         Bus"
+.It Li "Dell W5500" Ta Ta PCI Express Mini Card
+.It Li "Novatel Wireless Merlin V620" Ta CardBus
+.It Li "Novatel Wireless S720" Ta Ta CardBus
+.It Li "Novatel Wireless U720" Ta Ta USB
+.It Li "Novatel Wireless XU870 HSDPA" Ta ExpressCard
+.It Li "Sierra Wireless AirCard 595" Ta CardBus
+.It Li "Sierra Wireless EM5625" Ta Ta USB module
+.It Li "Sierra Wireless MC5720" Ta Ta PCI Express Mini Card
+.It Li "Sierra Wireless MC5725" Ta Ta PCI Express Mini Card
+.It Li "Sierra Wireless MC8765" Ta Ta PCI Express Mini Card
+.It Li "Sierra Wireless MC8775" Ta Ta PCI Express Mini Card
+.El
+.Sh EXAMPLES
+An example
+.Pa /etc/ppp/ppp.conf
+configuration for Verizon Wireless might look something like below;
+see
+.Xr ppp 8
+for more information.
+.Bd -literal -offset indent
+default:
+   set device /dev/cuaU0
+   set speed 230400
+   set dial "ABORT BUSY ABORT NO\e\esCARRIER TIMEOUT 5 \e
+             \e"\e" AT OK-AT-OK ATE1Q0s7=60 OK \e\edATDT\e\eT TIMEOUT 40 CONNECT"
+   set phone "#777"
+   set login
+   set authname 4517654321@vzw3g.com
+   set authkey vzw
+   set timeout 120
+   set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
+   add default HISADDR
+   enable dns
+.Ed
+.Pp
+In this example the phone number is (451) 765-4321: replace this with
+the number issued for the card or your phone's number if a handset is being
+used.
+.Pp
+An example demand dial configuration for Cingular Wireless using
+.Xr pppd 8
+appears below.
+.Pp
+.Pa /etc/ppp/cingular-chat :
+.Bd -literal -offset indent
+TIMEOUT 10
+REPORT CONNECT
+ABORT BUSY
+ABORT 'NO CARRIER'
+ABORT ERROR
+'' ATZ OK AT&F OK
+AT+CGDCONT=1,"IP","isp.cingular" OK
+ATD*99***1# CONNECT
+.Ed
+.Pp
+.Pa /etc/ppp/peers/ac875 :
+.Bd -literal -offset indent
+cuaU0
+115200
+debug
+noauth
+nocrtscts
+:10.254.254.1
+ipcp-accept-remote
+defaultroute
+user isp@cingulargprs.com
+demand
+active-filter 'not udp port 123'
+persist
+idle 600
+connect "/usr/sbin/chat -v -f /etc/ppp/cingular-chat"
+.Ed
+.Pp
+.Pa /etc/ppp/chap-secrets :
+.Bd -literal -offset indent
+# Secrets for authentication using CHAP
+# client               server  secret          IP addresses
+isp@cingulargprs.com   *       CINGULAR1
+.Ed
+.Pp
+.Xr pppd 8
+is then started using:
+.Pp
+.Dl # pppd call ac875
+.Sh SEE ALSO
+.Xr ucom 4 ,
+.Xr usb 4 ,
+.Xr pppd 8
+.Sh HISTORY
+The
+.Nm
+device driver first appeared in
+.Ox 4.0
+and was imported into
+.Dx 1.11 .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+driver was written by
+.An Jonathan Gray
+.Aq jsg@openbsd.org .
+.Sh CAVEATS
+For Verizon Wireless (and possibly other services),
+cards require a one-time activation before they will work;
+.Nm
+does not currently support this.
index e7341bc..5ba8f00 100644 (file)
@@ -1,10 +1,10 @@
-/*     $DragonFly: src/sys/bus/usb/Attic/usbdevs.h,v 1.22 2007/08/16 07:03:30 hasso Exp $      */
+/*     $DragonFly: src/sys/bus/usb/Attic/usbdevs.h,v 1.23 2007/08/16 20:38:33 hasso Exp $      */
 
 /*
  * THIS FILE IS AUTOMATICALLY GENERATED.  DO NOT EDIT.
  *
  * generated from:
- *     DragonFly: src/sys/bus/usb/usbdevs,v 1.27 2007/08/16 06:58:02 hasso Exp 
+ *     DragonFly: src/sys/bus/usb/usbdevs,v 1.28 2007/08/16 20:10:08 hasso Exp 
  */
 /* $FreeBSD: src/sys/dev/usb/usbdevs,v 1.203 2004/09/20 04:56:13 sanpei Exp $ */
 /* $NetBSD: usbdevs,v 1.387 2004/10/27 07:02:47 augustss Exp $ */
 #define        USB_PRODUCT_DELL_BC02   0x8000          /* Dell BC02 Bluetooth USB Adapter */
 #define        USB_PRODUCT_DELL_TM1180 0x8100          /* TrueMobile 1180 WLAN */
 #define        USB_PRODUCT_DELL_TM350  0x8103          /* TrueMobile 350 Bluetooth USB Adapter */
+#define        USB_PRODUCT_DELL_W5500  0x8115          /* W5500 HSDPA */
 
 /* Delorme Paublishing products */
 #define        USB_PRODUCT_DELORME_EARTHMATE   0x0100          /* Earthmate GPS */
 #define        USB_PRODUCT_KYOCERA_FINECAM_S5  0x0103          /* Finecam S5 */
 #define        USB_PRODUCT_KYOCERA_FINECAM_L3  0x0105          /* Finecam L3 */
 #define        USB_PRODUCT_KYOCERA_AHK3001V    0x0203          /* AH-K3001V */
-#define        USB_PRODUCT_KYOCERA2_CDMA_MSM_K 0x17da          /* Qualcomm Kyocera CDMA Technologies MSM */
+#define        USB_PRODUCT_KYOCERA2_KPC650     0x17da          /* KPC650 EVDO */
 
 /* LaCie products */
 #define        USB_PRODUCT_LACIE_HD    0xa601          /* Hard Disk */
 #define        USB_PRODUCT_NOVATECH_RT2573     0x9021          /* RT2573 */
 
 /* Novatel Wireless products */
-#define        USB_PRODUCT_NOVATEL_CDMA_MODEM  0x1110          /* Novatel Wireless Merlin CDMA */
-#define        USB_PRODUCT_NOVATEL_U740        0x1400          /* Merlin U740 */
+#define        USB_PRODUCT_NOVATEL_EXPRESSCARD 0x1100          /* ExpressCard 3G */
+#define        USB_PRODUCT_NOVATEL_MERLINV620  0x1110          /* Merlin V620 */
+#define        USB_PRODUCT_NOVATEL_S720        0x1130          /* S720 */
+#define        USB_PRODUCT_NOVATEL_MERLINU740  0x1400          /* Merlin U740 */
+#define        USB_PRODUCT_NOVATEL_XU870       0x1430          /* XU870 */
+#define        USB_PRODUCT_NOVATEL_ES620       0x2100          /* ES620 CDMA */
+#define        USB_PRODUCT_NOVATEL_U720        0x2110          /* U720 */
+
 #define        USB_PRODUCT_NOVATEL2_FLEXPACKGPS        0x0100          /* NovAtel FlexPack GPS receiver */
 
 /* Olympus products */
 /* Qualcomm products */
 #define        USB_PRODUCT_QUALCOMM_CDMA_MSM   0x3196          /* CDMA Technologies MSM modem */
 #define        USB_PRODUCT_QUALCOMM_CDMA_MSM_2 0x6000          /* CDMA Technologies MSM phone */
+#define        USB_PRODUCT_QUALCOMM_MSM_HSDPA  0x6613          /* HSDPA MSM */
 
 #define        USB_PRODUCT_QUALCOMM2_RWT_FCT   0x3100          /* RWT FCT-CDMA 2000 1xRTT modem */
 #define        USB_PRODUCT_QUALCOMM2_CDMA_MSM  0x6000          /* CDMA Technologies MSM phone */
 #define        USB_PRODUCT_SIEMENS3_X75        0x0004          /* X75 */
 
 /* Sierra Wireless products */
-#define        USB_PRODUCT_SIERRA_AIRCARD580   0x0112          /* Sierra Wireless AirCard 580 */
-#define        USB_PRODUCT_SIERRA_MC5720       0x0218          /* MC5720 Wireless Modem */
+#define        USB_PRODUCT_SIERRA_EM5625       0x0017          /* EM5625 */
+#define        USB_PRODUCT_SIERRA_MC5720       0x0018          /* MC5720 */
+#define        USB_PRODUCT_SIERRA_AIRCARD_595  0x0019          /* AirCard 595 */
+#define        USB_PRODUCT_SIERRA_MC5725       0x0020          /* MC5725 */
+#define        USB_PRODUCT_SIERRA_AIRCARD_580  0x0112          /* Aircard 580 EVDO */
+#define        USB_PRODUCT_SIERRA_MC5720_2     0x0218          /* MC5720 */
+#define        USB_PRODUCT_SIERRA_MC8755_2     0x6802          /* MC8755 */
+#define        USB_PRODUCT_SIERRA_MC8765       0x6803          /* MC8765 */
+#define        USB_PRODUCT_SIERRA_MC8755       0x6804          /* MC8755 HSDPA */
+#define        USB_PRODUCT_SIERRA_MC8775       0x6812          /* MC8775 HSDPA */
+#define        USB_PRODUCT_SIERRA_AIRCARD_875  0x6820          /* Aircard 875 HSDPA */
 
 /* Sigmatel products */
 #define        USB_PRODUCT_SIGMATEL_IRDA       0x4200          /* IrDA */
index 4dff6eb..6c88ab4 100644 (file)
@@ -1,10 +1,10 @@
-/*     $DragonFly: src/sys/bus/usb/Attic/usbdevs_data.h,v 1.22 2007/08/16 07:03:30 hasso Exp $ */
+/*     $DragonFly: src/sys/bus/usb/Attic/usbdevs_data.h,v 1.23 2007/08/16 20:38:33 hasso Exp $ */
 
 /*
  * THIS FILE IS AUTOMATICALLY GENERATED.  DO NOT EDIT.
  *
  * generated from:
- *     DragonFly: src/sys/bus/usb/usbdevs,v 1.27 2007/08/16 06:58:02 hasso Exp 
+ *     DragonFly: src/sys/bus/usb/usbdevs,v 1.28 2007/08/16 20:10:08 hasso Exp 
  */
 /* $FreeBSD: src/sys/dev/usb/usbdevs,v 1.203 2004/09/20 04:56:13 sanpei Exp $ */
 /* $NetBSD: usbdevs,v 1.387 2004/10/27 07:02:47 augustss Exp $ */
@@ -1829,6 +1829,12 @@ const struct usb_knowndev usb_knowndevs[] = {
            "Dell",
            "TrueMobile 350 Bluetooth USB Adapter",
        },
+       {
+           USB_VENDOR_DELL, USB_PRODUCT_DELL_W5500,
+           0,
+           "Dell",
+           "W5500 HSDPA",
+       },
        {
            USB_VENDOR_DELORME, USB_PRODUCT_DELORME_EARTHMATE,
            0,
@@ -3960,10 +3966,10 @@ const struct usb_knowndev usb_knowndevs[] = {
            "AH-K3001V",
        },
        {
-           USB_VENDOR_KYOCERA2, USB_PRODUCT_KYOCERA2_CDMA_MSM_K,
+           USB_VENDOR_KYOCERA2, USB_PRODUCT_KYOCERA2_KPC650,
            0,
            "Kyocera Wireless Corp.",
-           "Qualcomm Kyocera CDMA Technologies MSM",
+           "KPC650 EVDO",
        },
        {
            USB_VENDOR_LACIE, USB_PRODUCT_LACIE_HD,
@@ -5268,17 +5274,47 @@ const struct usb_knowndev usb_knowndevs[] = {
            "RT2573",
        },
        {
-           USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_CDMA_MODEM,
+           USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_EXPRESSCARD,
+           0,
+           "Novatel Wireless",
+           "ExpressCard 3G",
+       },
+       {
+           USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINV620,
            0,
            "Novatel Wireless",
-           "Novatel Wireless Merlin CDMA",
+           "Merlin V620",
        },
        {
-           USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U740,
+           USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_S720,
+           0,
+           "Novatel Wireless",
+           "S720",
+       },
+       {
+           USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MERLINU740,
            0,
            "Novatel Wireless",
            "Merlin U740",
        },
+       {
+           USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_XU870,
+           0,
+           "Novatel Wireless",
+           "XU870",
+       },
+       {
+           USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_ES620,
+           0,
+           "Novatel Wireless",
+           "ES620 CDMA",
+       },
+       {
+           USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U720,
+           0,
+           "Novatel Wireless",
+           "U720",
+       },
        {
            USB_VENDOR_NOVATEL2, USB_PRODUCT_NOVATEL2_FLEXPACKGPS,
            0,
@@ -6035,6 +6071,12 @@ const struct usb_knowndev usb_knowndevs[] = {
            "Qualcomm",
            "CDMA Technologies MSM phone",
        },
+       {
+           USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_HSDPA,
+           0,
+           "Qualcomm",
+           "HSDPA MSM",
+       },
        {
            USB_VENDOR_QUALCOMM2, USB_PRODUCT_QUALCOMM2_RWT_FCT,
            0,
@@ -6564,16 +6606,70 @@ const struct usb_knowndev usb_knowndevs[] = {
            "X75",
        },
        {
-           USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD580,
+           USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_EM5625,
            0,
            "Sierra Wireless",
-           "Sierra Wireless AirCard 580",
+           "EM5625",
        },
        {
            USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5720,
            0,
            "Sierra Wireless",
-           "MC5720 Wireless Modem",
+           "MC5720",
+       },
+       {
+           USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_595,
+           0,
+           "Sierra Wireless",
+           "AirCard 595",
+       },
+       {
+           USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5725,
+           0,
+           "Sierra Wireless",
+           "MC5725",
+       },
+       {
+           USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_580,
+           0,
+           "Sierra Wireless",
+           "Aircard 580 EVDO",
+       },
+       {
+           USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5720_2,
+           0,
+           "Sierra Wireless",
+           "MC5720",
+       },
+       {
+           USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8755_2,
+           0,
+           "Sierra Wireless",
+           "MC8755",
+       },
+       {
+           USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8765,
+           0,
+           "Sierra Wireless",
+           "MC8765",
+       },
+       {
+           USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8755,
+           0,
+           "Sierra Wireless",
+           "MC8755 HSDPA",
+       },
+       {
+           USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8775,
+           0,
+           "Sierra Wireless",
+           "MC8775 HSDPA",
+       },
+       {
+           USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_875,
+           0,
+           "Sierra Wireless",
+           "Aircard 875 HSDPA",
        },
        {
            USB_VENDOR_SIGMATEL, USB_PRODUCT_SIGMATEL_IRDA,
index 4363ba5..3ee4785 100644 (file)
@@ -1,5 +1,5 @@
 # $FreeBSD: src/sys/conf/files,v 1.340.2.137 2003/06/04 17:10:30 sam Exp $
-# $DragonFly: src/sys/conf/files,v 1.173 2007/08/16 20:03:52 dillon Exp $
+# $DragonFly: src/sys/conf/files,v 1.174 2007/08/16 20:38:33 hasso Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -1193,6 +1193,7 @@ dev/usbmisc/ugen/ugenbuf.c        optional ugen
 dev/usbmisc/uhid/uhid.c                optional uhid
 dev/usbmisc/umct/umct.c                optional umct ucom
 dev/usbmisc/ums/ums.c          optional ums
+dev/usbmisc/umsm/umsm.c                optional umsm ucom
 dev/usbmisc/uplcom/uplcom.c    optional uplcom ucom
 dev/usbmisc/urio/urio.c                optional urio
 dev/usbmisc/uslcom/uslcom.c    optional uslcom ucom
index 3ec7e9e..669efd3 100644 (file)
@@ -1,7 +1,7 @@
-# $DragonFly: src/sys/dev/usbmisc/Makefile,v 1.4 2007/08/14 22:28:11 hasso Exp $
+# $DragonFly: src/sys/dev/usbmisc/Makefile,v 1.5 2007/08/16 20:38:33 hasso Exp $
 #
 
-SUBDIR= uark ubsa ucom ufm uftdi ugen uhid ukbd ulpt umass umodem ums \
+SUBDIR= uark ubsa ucom ufm uftdi ugen uhid ukbd ulpt umass umodem ums umsm \
        uplcom uscanner uslcom uvisor uvscom umct
 
 .include <bsd.subdir.mk>
diff --git a/sys/dev/usbmisc/umsm/Makefile b/sys/dev/usbmisc/umsm/Makefile
new file mode 100644 (file)
index 0000000..9b7ae16
--- /dev/null
@@ -0,0 +1,10 @@
+# $DragonFly: src/sys/dev/usbmisc/umsm/Attic/Makefile,v 1.1 2007/08/16 20:38:33 hasso Exp $
+
+.PATH: ${.CURDIR}/../ucom
+
+KMOD=  umsm
+SRCS=  umsm.c
+NOMAN=
+KMODDEPS= ucom
+
+.include <bsd.kmod.mk>
diff --git a/sys/dev/usbmisc/umsm/umsm.c b/sys/dev/usbmisc/umsm/umsm.c
new file mode 100644 (file)
index 0000000..c1ec1f2
--- /dev/null
@@ -0,0 +1,246 @@
+/*     $DragonFly: src/sys/dev/usbmisc/umsm/Attic/umsm.c,v 1.1 2007/08/16 20:38:33 hasso Exp $ */
+/*     $OpenBSD: umsm.c,v 1.15 2007/06/14 10:11:16 mbalmer Exp $       */
+
+/*
+ * Copyright (c) 2006 Jonathan Gray <jsg@openbsd.org>
+ *
+ * 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.
+ */
+
+/* Driver for Qualcomm MSM EVDO and UMTS communication devices */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/device.h>
+#include <sys/conf.h>
+#include <sys/tty.h>
+#include <sys/types.h>
+#include <sys/bus.h>
+#include <sys/module.h>
+
+#include <bus/usb/usb.h>
+#include <bus/usb/usbdi.h>
+#include <bus/usb/usbdi_util.h>
+#include <bus/usb/usbdevs.h>
+#include <dev/usbmisc/ucom/ucomvar.h>
+
+#ifdef UMSM_DEBUG
+static int     umsmdebug = 1;
+#define DPRINTFN(n, x)  do { if (umsmdebug > (n)) printf x; } while (0)
+#else
+#define DPRINTFN(n, x)
+#endif
+#define DPRINTF(x) DPRINTFN(0, x)
+
+#define UMSMBUFSZ      2048
+#define UMSM_CONFIG_NO 0
+#define UMSM_IFACE_NO  0
+
+struct umsm_softc {
+       struct ucom_softc        sc_ucom;
+};
+
+struct ucom_callback umsm_callback = {
+       NULL,
+       NULL,
+       NULL,
+       NULL,
+       NULL,
+       NULL,
+       NULL,
+       NULL
+};
+
+static const struct usb_devno umsm_devs[] = {
+       { USB_VENDOR_AIRPRIME,  USB_PRODUCT_AIRPRIME_PC5220 },
+       { USB_VENDOR_DELL,      USB_PRODUCT_DELL_W5500 },
+       { USB_VENDOR_KYOCERA2,  USB_PRODUCT_KYOCERA2_KPC650 },
+       { USB_VENDOR_NOVATEL,   USB_PRODUCT_NOVATEL_EXPRESSCARD },
+       { USB_VENDOR_NOVATEL,   USB_PRODUCT_NOVATEL_MERLINV620 },
+       { USB_VENDOR_NOVATEL,   USB_PRODUCT_NOVATEL_S720 },
+       { USB_VENDOR_NOVATEL,   USB_PRODUCT_NOVATEL_U720 },
+       { USB_VENDOR_NOVATEL,   USB_PRODUCT_NOVATEL_XU870 },
+       { USB_VENDOR_NOVATEL,   USB_PRODUCT_NOVATEL_ES620 },
+       { USB_VENDOR_QUALCOMM,  USB_PRODUCT_QUALCOMM_MSM_HSDPA },
+       { USB_VENDOR_SIERRA,    USB_PRODUCT_SIERRA_EM5625 },
+       { USB_VENDOR_SIERRA,    USB_PRODUCT_SIERRA_AIRCARD_580 },
+       { USB_VENDOR_SIERRA,    USB_PRODUCT_SIERRA_AIRCARD_595 },
+       { USB_VENDOR_SIERRA,    USB_PRODUCT_SIERRA_AIRCARD_875 },
+       { USB_VENDOR_SIERRA,    USB_PRODUCT_SIERRA_MC5720 },
+       { USB_VENDOR_SIERRA,    USB_PRODUCT_SIERRA_MC5720_2 },
+       { USB_VENDOR_SIERRA,    USB_PRODUCT_SIERRA_MC5725 },
+       { USB_VENDOR_SIERRA,    USB_PRODUCT_SIERRA_MC8755 },
+       { USB_VENDOR_SIERRA,    USB_PRODUCT_SIERRA_MC8755_2 },
+       { USB_VENDOR_SIERRA,    USB_PRODUCT_SIERRA_MC8765 },
+       { USB_VENDOR_SIERRA,    USB_PRODUCT_SIERRA_MC8775 },
+};
+
+static device_probe_t umsm_match;
+static device_attach_t umsm_attach;
+static device_detach_t umsm_detach;
+
+static device_method_t umsm_methods[] = {
+       /* Device interface */
+       DEVMETHOD(device_probe, umsm_match),
+       DEVMETHOD(device_attach, umsm_attach),
+       DEVMETHOD(device_detach, umsm_detach),
+       { 0, 0 }
+};
+
+static driver_t umsm_driver = { 
+       "ucom",
+       umsm_methods,
+       sizeof (struct umsm_softc)
+};
+
+DRIVER_MODULE(umsm, uhub, umsm_driver, ucom_devclass, usbd_driver_load, 0);
+MODULE_DEPEND(umsm, usb, 1, 1, 1);
+MODULE_DEPEND(umsm, ucom, UCOM_MINVER, UCOM_PREFVER, UCOM_MAXVER);
+MODULE_VERSION(umsm, 1);
+
+static int
+umsm_match(device_t self)
+{
+       struct usb_attach_arg *uaa = device_get_ivars(self);
+
+       if (uaa->iface != NULL)
+               return UMATCH_NONE;
+
+       return (usb_lookup(umsm_devs, uaa->vendor, uaa->product) != NULL) ?
+           UMATCH_VENDOR_PRODUCT : UMATCH_NONE;
+}
+
+static int
+umsm_attach(device_t self)
+{
+       struct umsm_softc *sc = device_get_softc(self);
+       struct usb_attach_arg *uaa = device_get_ivars(self);
+       struct ucom_softc *ucom;
+       usb_interface_descriptor_t *id;
+       usb_endpoint_descriptor_t *ed;
+       usbd_status error;
+       char *devinfo;
+       const char *devname;
+       int i;
+
+       devinfo = kmalloc(1024, M_USBDEV, M_INTWAIT);
+       ucom = &sc->sc_ucom;
+
+       bzero(sc, sizeof (struct umsm_softc));
+
+       usbd_devinfo(uaa->device, 0, devinfo);
+       ucom->sc_dev = self;
+       device_set_desc_copy(self, devinfo);
+
+       ucom->sc_udev = uaa->device;
+       ucom->sc_iface = uaa->iface;
+
+       devname = device_get_nameunit(ucom->sc_dev);
+       kprintf("%s: %s\n", devname, devinfo);
+       kfree(devinfo, M_USBDEV);
+
+       if (usbd_set_config_index(ucom->sc_udev, UMSM_CONFIG_NO, 1) != 0) {
+               kprintf("%s: could not set configuration no\n", devname);
+               goto error;
+       }
+
+       /* get the first interface handle */
+       error = usbd_device2interface_handle(ucom->sc_udev, UMSM_IFACE_NO,
+           &ucom->sc_iface);
+       if (error != 0) {
+               kprintf("%s: could not get interface handle\n", devname);
+               goto error;
+       }
+
+       id = usbd_get_interface_descriptor(ucom->sc_iface);
+
+       ucom->sc_bulkin_no = ucom->sc_bulkout_no = -1;
+       for (i = 0; i < id->bNumEndpoints; i++) {
+               ed = usbd_interface2endpoint_descriptor(ucom->sc_iface, i);
+               if (ed == NULL) {
+                       kprintf("%s: no endpoint descriptor found for %d\n",
+                               devname, i);
+                       goto error;
+               }
+
+               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) {
+               kprintf("%s: missing endpoint\n", devname);
+               goto error;
+       }
+
+       ucom->sc_parent = sc;
+       ucom->sc_portno = UCOM_UNK_PORTNO;
+       ucom->sc_ibufsize = UMSMBUFSZ;
+       ucom->sc_obufsize = UMSMBUFSZ;
+       ucom->sc_ibufsizepad = UMSMBUFSZ;
+       ucom->sc_opkthdrlen = 0;
+       ucom->sc_callback = &umsm_callback;
+
+       usbd_add_drv_event(USB_EVENT_DRIVER_ATTACH, ucom->sc_udev,
+                          ucom->sc_dev);
+
+       DPRINTF(("umsm: in = 0x%x, out = 0x%x, intr = 0x%x\n",
+                ucom->sc_bulkin_no, ucom->sc_bulkout_no, sc->sc_intr_number));
+
+       ucom_attach(&sc->sc_ucom);
+
+       return 0;
+
+error:
+       ucom->sc_dying = 1;
+       return ENXIO;
+}
+
+static int
+umsm_detach(device_t self)
+{
+       struct umsm_softc *sc = device_get_softc(self);
+       int rv = 0;
+
+       DPRINTF(("umsm_detach: sc=%p\n", sc));
+       sc->sc_ucom.sc_dying = 1;
+       rv = ucom_detach(&sc->sc_ucom);
+       usbd_add_drv_event(USB_EVENT_DRIVER_DETACH, sc->sc_ucom.sc_udev,
+                          sc->sc_ucom.sc_dev);
+
+       return (rv);
+}
+
+#if 0 /* not yet */
+int
+umsm_activate(struct device *self, enum devact act)
+{
+       struct umsm_softc *sc = (struct umsm_softc *)self;
+       int rv = 0;
+
+       switch (act) {
+       case DVACT_ACTIVATE:
+               break;
+
+       case DVACT_DEACTIVATE:
+               if (sc->sc_subdev != NULL)
+                       rv = config_deactivate(sc->sc_subdev);
+               sc->sc_dying = 1;
+               break;
+       }
+       return (rv);
+}
+#endif