svn commit: r269584 - in head/sys/dev/usb: . net
Nick Hibma
n_hibma at FreeBSD.org
Tue Aug 5 12:08:51 UTC 2014
Author: n_hibma
Date: Tue Aug 5 12:08:50 2014
New Revision: 269584
URL: http://svnweb.freebsd.org/changeset/base/269584
Log:
Add support for Huawei E3272 modems which are supported by the CDC
ethernet class.
Note: This is untested as I do not have a device like this. That is
reflected in the MFC timeout.
PR: 192345
Submitted by: rozhuk.im gmail.com
MFC after: 4 weeks
Modified:
head/sys/dev/usb/net/if_cdce.c
head/sys/dev/usb/usbdevs
Modified: head/sys/dev/usb/net/if_cdce.c
==============================================================================
--- head/sys/dev/usb/net/if_cdce.c Tue Aug 5 12:04:40 2014 (r269583)
+++ head/sys/dev/usb/net/if_cdce.c Tue Aug 5 12:08:50 2014 (r269584)
@@ -80,6 +80,7 @@ __FBSDID("$FreeBSD$");
#define USB_DEBUG_VAR cdce_debug
#include <dev/usb/usb_debug.h>
#include <dev/usb/usb_process.h>
+#include <dev/usb/usb_msctest.h>
#include "usb_if.h"
#include <dev/usb/net/usb_ethernet.h>
@@ -251,8 +252,11 @@ static driver_t cdce_driver = {
};
static devclass_t cdce_devclass;
+static eventhandler_tag cdce_etag;
-DRIVER_MODULE(cdce, uhub, cdce_driver, cdce_devclass, NULL, 0);
+static int cdce_driver_loaded(struct module *, int, void *);
+
+DRIVER_MODULE(cdce, uhub, cdce_driver, cdce_devclass, cdce_driver_loaded, 0);
MODULE_VERSION(cdce, 1);
MODULE_DEPEND(cdce, uether, 1, 1, 1);
MODULE_DEPEND(cdce, usb, 1, 1, 1);
@@ -267,6 +271,10 @@ static const struct usb_ether_methods cd
.ue_setpromisc = cdce_setpromisc,
};
+static const STRUCT_USB_HOST_ID cdce_switch_devs[] = {
+ {USB_VPI(USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E3272_INIT, MSC_EJECT_HUAWEI2)},
+};
+
static const STRUCT_USB_HOST_ID cdce_host_devs[] = {
{USB_VPI(USB_VENDOR_ACERLABS, USB_PRODUCT_ACERLABS_M5632, CDCE_FLAG_NO_UNION)},
{USB_VPI(USB_VENDOR_AMBIT, USB_PRODUCT_AMBIT_NTL_250, CDCE_FLAG_NO_UNION)},
@@ -281,6 +289,16 @@ static const STRUCT_USB_HOST_ID cdce_hos
{USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SLA300, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION)},
{USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SLC700, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION)},
{USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SLC750, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION)},
+
+ {USB_VENDOR(USB_VENDOR_HUAWEI), USB_IFACE_CLASS(UICLASS_VENDOR),
+ USB_IFACE_SUBCLASS(0x02), USB_IFACE_PROTOCOL(0x16),
+ USB_DRIVER_INFO(0)},
+ {USB_VENDOR(USB_VENDOR_HUAWEI), USB_IFACE_CLASS(UICLASS_VENDOR),
+ USB_IFACE_SUBCLASS(0x02), USB_IFACE_PROTOCOL(0x46),
+ USB_DRIVER_INFO(0)},
+ {USB_VENDOR(USB_VENDOR_HUAWEI), USB_IFACE_CLASS(UICLASS_VENDOR),
+ USB_IFACE_SUBCLASS(0x02), USB_IFACE_PROTOCOL(0x76),
+ USB_DRIVER_INFO(0)},
};
static const STRUCT_USB_DUAL_ID cdce_dual_devs[] = {
@@ -474,6 +492,48 @@ cdce_ncm_init(struct cdce_softc *sc)
}
#endif
+static void
+cdce_test_autoinst(void *arg, struct usb_device *udev,
+ struct usb_attach_arg *uaa)
+{
+ struct usb_interface *iface;
+ struct usb_interface_descriptor *id;
+
+ if (uaa->dev_state != UAA_DEV_READY)
+ return;
+
+ iface = usbd_get_iface(udev, 0);
+ if (iface == NULL)
+ return;
+ id = iface->idesc;
+ if (id == NULL || id->bInterfaceClass != UICLASS_MASS)
+ return;
+ if (usbd_lookup_id_by_uaa(cdce_switch_devs, sizeof(cdce_switch_devs), uaa))
+ return; /* no device match */
+
+ if (usb_msc_eject(udev, 0, USB_GET_DRIVER_INFO(uaa)) == 0) {
+ /* success, mark the udev as disappearing */
+ uaa->dev_state = UAA_DEV_EJECTING;
+ }
+}
+
+static int
+cdce_driver_loaded(struct module *mod, int what, void *arg)
+{
+ switch (what) {
+ case MOD_LOAD:
+ /* register our autoinstall handler */
+ cdce_etag = EVENTHANDLER_REGISTER(usb_dev_configured,
+ cdce_test_autoinst, NULL, EVENTHANDLER_PRI_ANY);
+ return (0);
+ case MOD_UNLOAD:
+ EVENTHANDLER_DEREGISTER(usb_dev_configured, cdce_etag);
+ return (0);
+ default:
+ return (EOPNOTSUPP);
+ }
+}
+
static int
cdce_probe(device_t dev)
{
Modified: head/sys/dev/usb/usbdevs
==============================================================================
--- head/sys/dev/usb/usbdevs Tue Aug 5 12:04:40 2014 (r269583)
+++ head/sys/dev/usb/usbdevs Tue Aug 5 12:08:50 2014 (r269584)
@@ -2342,9 +2342,11 @@ product HUAWEI E392 0x1505 LTE modem
product HUAWEI E3131 0x1506 3G modem
product HUAWEI K3765_INIT 0x1520 K3765 Initial
product HUAWEI K4505_INIT 0x1521 K4505 Initial
+product HUAWEI E3272_INIT 0x155b LTE modem initial
product HUAWEI ETS2055 0x1803 CDMA modem
product HUAWEI E173 0x1c05 3G modem
product HUAWEI E173_INIT 0x1c0b 3G modem initial
+product HUAWEI E3272 0x1c1e LTE modem
/* HUAWEI 3com products */
product HUAWEI3COM WUB320G 0x0009 Aolynk WUB320g
More information about the svn-src-head
mailing list