summaryrefslogtreecommitdiff
path: root/sys/dev/usb
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/usb')
-rw-r--r--sys/dev/usb/if_upgt.c40
-rw-r--r--sys/dev/usb/if_upgtvar.h3
2 files changed, 38 insertions, 5 deletions
diff --git a/sys/dev/usb/if_upgt.c b/sys/dev/usb/if_upgt.c
index 35adb66beab..776bae584fd 100644
--- a/sys/dev/usb/if_upgt.c
+++ b/sys/dev/usb/if_upgt.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_upgt.c,v 1.32 2008/01/27 21:05:59 mglocker Exp $ */
+/* $OpenBSD: if_upgt.c,v 1.33 2008/02/02 13:48:44 mglocker Exp $ */
/*
* Copyright (c) 2007 Marcus Glocker <mglocker@openbsd.org>
@@ -93,6 +93,7 @@ void upgt_shutdown_hook(void *);
int upgt_detach(struct device *, int);
int upgt_activate(struct device *, enum devact);
+int upgt_device_type(struct upgt_softc *, uint16_t, uint16_t);
int upgt_device_init(struct upgt_softc *);
int upgt_mem_init(struct upgt_softc *);
uint32_t upgt_mem_alloc(struct upgt_softc *);
@@ -157,7 +158,13 @@ const struct cfattach upgt_ca = {
upgt_activate,
};
-static const struct usb_devno upgt_devs[] = {
+static const struct usb_devno upgt_devs_1[] = {
+ /* version 1 devices */
+ { USB_VENDOR_ALCATELT, USB_PRODUCT_ALCATELT_ST120G }
+};
+
+static const struct usb_devno upgt_devs_2[] = {
+ /* version 2 devices */
{ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_PRISM_GT },
{ USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050 },
{ USB_VENDOR_CONCEPTRONIC, USB_PRODUCT_CONCEPTRONIC_PRISM_GT },
@@ -183,8 +190,13 @@ upgt_match(struct device *parent, void *match, void *aux)
if (uaa->iface != NULL)
return (UMATCH_NONE);
- return ((usb_lookup(upgt_devs, uaa->vendor, uaa->product) != NULL) ?
- UMATCH_VENDOR_PRODUCT : UMATCH_NONE);
+ if (usb_lookup(upgt_devs_1, uaa->vendor, uaa->product) != NULL)
+ return (UMATCH_VENDOR_PRODUCT);
+
+ if (usb_lookup(upgt_devs_2, uaa->vendor, uaa->product) != NULL)
+ return (UMATCH_VENDOR_PRODUCT);
+
+ return (UMATCH_NONE);
}
void
@@ -202,6 +214,10 @@ upgt_attach(struct device *parent, struct device *self, void *aux)
*/
sc->sc_udev = uaa->device;
+ /* check device type */
+ if (upgt_device_type(sc, uaa->vendor, uaa->product) != 0)
+ return;
+
/* set configuration number */
if (usbd_set_config_no(sc->sc_udev, UPGT_CONFIG_NO, 0) != 0) {
printf("%s: could not set configuration no!\n",
@@ -521,6 +537,22 @@ upgt_activate(struct device *self, enum devact act)
}
int
+upgt_device_type(struct upgt_softc *sc, uint16_t vendor, uint16_t product)
+{
+ if (usb_lookup(upgt_devs_1, vendor, product) != NULL) {
+ sc->sc_device_type = 1;
+ /* XXX */
+ printf("%s: version 1 devices not supported yet!\n",
+ sc->sc_dev.dv_xname);
+ return (1);
+ } else {
+ sc->sc_device_type = 2;
+ }
+
+ return (0);
+}
+
+int
upgt_device_init(struct upgt_softc *sc)
{
struct upgt_data *data_cmd = &sc->cmd_data;
diff --git a/sys/dev/usb/if_upgtvar.h b/sys/dev/usb/if_upgtvar.h
index c8b4f09bc94..9e54fc298a6 100644
--- a/sys/dev/usb/if_upgtvar.h
+++ b/sys/dev/usb/if_upgtvar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_upgtvar.h,v 1.13 2008/01/24 22:35:08 mglocker Exp $ */
+/* $OpenBSD: if_upgtvar.h,v 1.14 2008/02/02 13:48:44 mglocker Exp $ */
/*
* Copyright (c) 2007 Marcus Glocker <mglocker@openbsd.org>
@@ -409,6 +409,7 @@ struct upgt_softc {
struct upgt_data cmd_data;
int tx_queued;
+ uint8_t sc_device_type;
struct ieee80211com sc_ic;
enum ieee80211_state sc_state;
int sc_arg;