Module Name: src Committed By: mlelstv Date: Sun Jun 13 09:32:01 UTC 2021
Modified Files: src/sys/dev/usb: ubsa.c Log Message: Refactor handling of "quad utms" devices and more. To generate a diff of this commit: cvs rdiff -u -r1.41 -r1.42 src/sys/dev/usb/ubsa.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/ubsa.c diff -u src/sys/dev/usb/ubsa.c:1.41 src/sys/dev/usb/ubsa.c:1.42 --- src/sys/dev/usb/ubsa.c:1.41 Sat Apr 24 23:36:59 2021 +++ src/sys/dev/usb/ubsa.c Sun Jun 13 09:32:01 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: ubsa.c,v 1.41 2021/04/24 23:36:59 thorpej Exp $ */ +/* $NetBSD: ubsa.c,v 1.42 2021/06/13 09:32:01 mlelstv Exp $ */ /*- * Copyright (c) 2002, Alexander Kabaev <kan.FreeBSD.org>. @@ -55,7 +55,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ubsa.c,v 1.41 2021/04/24 23:36:59 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ubsa.c,v 1.42 2021/06/13 09:32:01 mlelstv Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -107,25 +107,28 @@ static const struct ucom_methods ubsa_me .ucom_close = ubsa_close, }; -Static const struct usb_devno ubsa_devs[] = { +Static const struct ubsa_type { + struct usb_devno ubsa_dev; + int ubsa_quadumts; +} ubsa_devs[] = { /* BELKIN F5U103 */ - { USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U103 }, + { { USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U103 }, 0 }, /* BELKIN F5U120 */ - { USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U120 }, + { { USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U120 }, 0 }, /* GoHubs GO-COM232 */ - { USB_VENDOR_ETEK, USB_PRODUCT_ETEK_1COM }, + { { USB_VENDOR_ETEK, USB_PRODUCT_ETEK_1COM }, 0 }, /* GoHubs GO-COM232 */ - { USB_VENDOR_GOHUBS, USB_PRODUCT_GOHUBS_GOCOM232 }, + { { USB_VENDOR_GOHUBS, USB_PRODUCT_GOHUBS_GOCOM232 }, 0 }, /* Peracom */ - { USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_SERIAL1 }, + { { USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_SERIAL1 }, 0 }, /* Option N.V. */ - { USB_VENDOR_OPTIONNV, USB_PRODUCT_OPTIONNV_MC3G }, - { USB_VENDOR_OPTIONNV, USB_PRODUCT_OPTIONNV_QUADUMTS2 }, - { USB_VENDOR_OPTIONNV, USB_PRODUCT_OPTIONNV_QUADUMTS }, - /* AnyDATA ADU-E100H */ - { USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_ADU_E100H }, + { { USB_VENDOR_OPTIONNV, USB_PRODUCT_OPTIONNV_MC3G }, 0 }, + { { USB_VENDOR_OPTIONNV, USB_PRODUCT_OPTIONNV_QUADUMTS2 }, 1 }, + { { USB_VENDOR_OPTIONNV, USB_PRODUCT_OPTIONNV_QUADUMTS }, 1 }, + { { USB_VENDOR_OPTIONNV, USB_PRODUCT_OPTIONNV_QUADPLUSUMTS }, 1 }, + { { USB_VENDOR_OPTIONNV, USB_PRODUCT_OPTIONNV_HSDPA }, 1 }, }; -#define ubsa_lookup(v, p) usb_lookup(ubsa_devs, v, p) +#define ubsa_lookup(v, p) ((const struct ubsa_type *)usb_lookup(ubsa_devs, v, p)) int ubsa_match(device_t, cfdata_t, void *); void ubsa_attach(device_t, device_t, void *); @@ -183,15 +186,7 @@ ubsa_attach(device_t parent, device_t se * Quad UMTS cards use different requests to * control com settings and only some. */ - sc->sc_quadumts = 0; - if (uaa->uaa_vendor == USB_VENDOR_OPTIONNV) { - switch (uaa->uaa_product) { - case USB_PRODUCT_OPTIONNV_QUADUMTS: - case USB_PRODUCT_OPTIONNV_QUADUMTS2: - sc->sc_quadumts = 1; - break; - } - } + sc->sc_quadumts = ubsa_lookup(uaa->uaa_vendor, uaa->uaa_product)->ubsa_quadumts; DPRINTF(("ubsa attach: sc = %p\n", sc));