summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authoralfred <alfred@FreeBSD.org>2008-11-19 08:56:35 +0000
committeralfred <alfred@FreeBSD.org>2008-11-19 08:56:35 +0000
commit881f5acc93790d49318ffde65d52c6f45ca9c1f8 (patch)
tree563c2e235db65a3694986a6531a444241d882b23 /sys
parentf750559c3fe5d18392fa3f5969411eef4c84075c (diff)
downloadFreeBSD-src-881f5acc93790d49318ffde65d52c6f45ca9c1f8.zip
FreeBSD-src-881f5acc93790d49318ffde65d52c6f45ca9c1f8.tar.gz
src/sys/dev/usb2/controller/uss820dci_pccard.c
src/sys/dev/usb2/core/usbdevs src/sys/dev/usb2/include/urio2_ioctl.h src/sys/dev/usb2/storage/ustorage2_fs.h These files are not used any more. src/usr.sbin/Makefile src/etc/mtree/BSD.include.dist src/include/Makefile src/lib/Makefile src/share/man/man7/hier.7 src/share/mk/bsd.libnames.mk src/etc/mtree/BSD.include.dist Make "usbconfig" and "libusb20" a part of the default build. src/sys/dev/usb/rio500_usb.h src/sys/dev/usb2/storage/urio2.c Use common include file. src/sys/dev/usb2/bluetooth/ng_ubt2.c Make USB bluetooth depend on "ng_hci" module. src/sys/dev/usb2/controller/ehci2.c src/sys/dev/usb2/controller/ehci2.h Patches for Marvell EHCI. src/sys/dev/usb2/core/usb2_busdma.c Bugfix for 64-bit platforms. Need to unload the previously loaded DMA map and some cleanup regarding some corner cases. src/sys/dev/usb2/core/usb2_core.h src/sys/dev/usb2/core/usb2_dev.c src/sys/dev/usb2/core/usb2_dev.h Bugfix for libusb filesystem interface. New feature: Add support for filtering device data at the expense of the userland process. Add some more comments. Some minor code styling. Remove unused function, usb2_fifo_get_data_next(). Fix an issue about "fifo_index" being used instead of "ep_index". src/sys/dev/usb2/core/usb2_device.c src/sys/dev/usb2/core/usb2_generic.c Bugfix for Linux USB compat layer. Do not free non-generic FIFOs when doing an alternate setting. Cleanup USB IOCTL and USB reference handling. Fix a corner case where USB-FS was left initialised after setting a new configuration or alternate setting. src/sys/dev/usb2/core/usb2_hub.c Improvement: Check all USB HUB ports by default at least one time. src/sys/dev/usb2/core/usb2_request.c Bugfix: Make sure destination ASCII string is properly zero terminated in all cases. Improvement: Skip invalid characters instead of replacing with a dot. src/sys/dev/usb2/core/usb2_util.c src/sys/dev/usb2/image/uscanner2.c Spelling. src/sys/dev/usb2/include/Makefile Share "usbdevs" with the old USB stack. src/sys/dev/usb2/include/usb2_devid.h src/sys/dev/usb2/include/usb2_devtable.h Regenerate files. Alfred: Please fix the RCS tag at the top. src/sys/dev/usb2/include/usb2_ioctl.h Fix compilation of "kdump". src/sys/dev/usb2/serial/ubsa2.c src/sys/dev/usb2/serial/ugensa2.c Remove device ID's which will end up in a new 3G driver. src/sys/dev/usb2/sound/uaudio2.c Correct a debug printout. src/sys/dev/usb2/storage/umass2.c Sync with old USB stack. src/lib/libusb20/libusb20.3 Add more documentation. src/lib/libusb20/libusb20.c Various bugfixes and improvements. src/usr.sbin/usbconfig/dump.c src/usr.sbin/usbconfig/usbconfig.c New commands for dumping strings and doing custom USB requests from the command line. Remove keyword requirements from generated files: "head/sys/dev/usb2/include/usb2_devid.h" "head/sys/dev/usb2/include/usb2_devtable.h"
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/usb/rio500_usb.h2
-rw-r--r--sys/dev/usb2/bluetooth/ng_ubt2.c1
-rw-r--r--sys/dev/usb2/controller/ehci2.c16
-rw-r--r--sys/dev/usb2/controller/ehci2.h6
-rw-r--r--sys/dev/usb2/controller/uss820dci_pccard.c266
-rw-r--r--sys/dev/usb2/core/usb2_busdma.c51
-rw-r--r--sys/dev/usb2/core/usb2_core.h27
-rw-r--r--sys/dev/usb2/core/usb2_dev.c363
-rw-r--r--sys/dev/usb2/core/usb2_dev.h15
-rw-r--r--sys/dev/usb2/core/usb2_device.c68
-rw-r--r--sys/dev/usb2/core/usb2_generic.c208
-rw-r--r--sys/dev/usb2/core/usb2_generic.h1
-rw-r--r--sys/dev/usb2/core/usb2_hub.c17
-rw-r--r--sys/dev/usb2/core/usb2_request.c25
-rw-r--r--sys/dev/usb2/core/usb2_util.c2
-rw-r--r--sys/dev/usb2/core/usbdevs2482
-rw-r--r--sys/dev/usb2/image/uscanner2.c2
-rw-r--r--sys/dev/usb2/include/Makefile4
-rw-r--r--sys/dev/usb2/include/urio2_ioctl.h41
-rw-r--r--sys/dev/usb2/include/usb2_devid.h14
-rw-r--r--sys/dev/usb2/include/usb2_devtable.h40
-rw-r--r--sys/dev/usb2/include/usb2_ioctl.h5
-rw-r--r--sys/dev/usb2/serial/ubsa2.c20
-rw-r--r--sys/dev/usb2/serial/ugensa2.c4
-rw-r--r--sys/dev/usb2/sound/uaudio2.c6
-rw-r--r--sys/dev/usb2/storage/umass2.c4
-rw-r--r--sys/dev/usb2/storage/urio2.c2
27 files changed, 520 insertions, 3172 deletions
diff --git a/sys/dev/usb/rio500_usb.h b/sys/dev/usb/rio500_usb.h
index 363e0e9..5b53e2c 100644
--- a/sys/dev/usb/rio500_usb.h
+++ b/sys/dev/usb/rio500_usb.h
@@ -32,7 +32,7 @@
struct RioCommand
{
- u_int16_t length;
+ uint16_t length;
int request;
int requesttype;
int value;
diff --git a/sys/dev/usb2/bluetooth/ng_ubt2.c b/sys/dev/usb2/bluetooth/ng_ubt2.c
index 1522ac9..a0de736 100644
--- a/sys/dev/usb2/bluetooth/ng_ubt2.c
+++ b/sys/dev/usb2/bluetooth/ng_ubt2.c
@@ -365,6 +365,7 @@ static const struct usb2_config
DRIVER_MODULE(ng_ubt, ushub, ubt_driver, ubt_devclass, ubt_modevent, 0);
MODULE_VERSION(ng_ubt, NG_BLUETOOTH_VERSION);
MODULE_DEPEND(ng_ubt, netgraph, NG_ABI_VERSION, NG_ABI_VERSION, NG_ABI_VERSION);
+MODULE_DEPEND(ng_ubt, ng_hci, NG_BLUETOOTH_VERSION, NG_BLUETOOTH_VERSION, NG_BLUETOOTH_VERSION);
MODULE_DEPEND(ng_ubt, usb2_bluetooth, 1, 1, 1);
MODULE_DEPEND(ng_ubt, usb2_core, 1, 1, 1);
diff --git a/sys/dev/usb2/controller/ehci2.c b/sys/dev/usb2/controller/ehci2.c
index 5797500..f84f5ad 100644
--- a/sys/dev/usb2/controller/ehci2.c
+++ b/sys/dev/usb2/controller/ehci2.c
@@ -183,6 +183,8 @@ ehci_hc_reset(ehci_softc_t *sc)
usb2_pause_mtx(&sc->sc_bus.bus_mtx, 1);
hcr = EOREAD4(sc, EHCI_USBCMD);
if (!(hcr & EHCI_CMD_HCRESET)) {
+ if (sc->sc_flags & EHCI_SCFLG_SETMODE)
+ EOWRITE4(sc, 0x68, 0x3);
hcr = 0;
break;
}
@@ -3301,7 +3303,16 @@ ehci_root_ctrl_done(struct usb2_xfer *xfer,
}
v = EOREAD4(sc, EHCI_PORTSC(index));
DPRINTFN(9, "port status=0x%04x\n", v);
- i = UPS_HIGH_SPEED;
+ if (sc->sc_flags & EHCI_SCFLG_FORCESPEED) {
+ if ((v & 0xc000000) == 0x8000000)
+ i = UPS_HIGH_SPEED;
+ else if ((v & 0xc000000) == 0x4000000)
+ i = UPS_LOW_SPEED;
+ else
+ i = 0;
+ } else {
+ i = UPS_HIGH_SPEED;
+ }
if (v & EHCI_PS_CS)
i |= UPS_CURRENT_CONNECT_STATUS;
if (v & EHCI_PS_PE)
@@ -3378,7 +3389,8 @@ ehci_root_ctrl_done(struct usb2_xfer *xfer,
}
/* Terminate reset sequence. */
- EOWRITE4(sc, port, v);
+ if (!(sc->sc_flags & EHCI_SCFLG_NORESTERM))
+ EOWRITE4(sc, port, v);
if (use_polling) {
/* polling */
diff --git a/sys/dev/usb2/controller/ehci2.h b/sys/dev/usb2/controller/ehci2.h
index f002d55..6765ace 100644
--- a/sys/dev/usb2/controller/ehci2.h
+++ b/sys/dev/usb2/controller/ehci2.h
@@ -468,6 +468,12 @@ typedef struct ehci_softc {
uint16_t sc_intr_stat[EHCI_VIRTUAL_FRAMELIST_COUNT];
uint16_t sc_id_vendor; /* vendor ID for root hub */
+ uint16_t sc_flags; /* chip specific flags */
+#define EHCI_SCFLG_SETMODE 0x0001 /* set bridge mode again after init
+ * (Marvell) */
+#define EHCI_SCFLG_FORCESPEED 0x0002 /* force speed (Marvell) */
+#define EHCI_SCFLG_NORESTERM 0x0004 /* don't terminate reset sequence
+ * (Marvell) */
uint8_t sc_offs; /* offset to operational registers */
uint8_t sc_doorbell_disable; /* set on doorbell failure */
diff --git a/sys/dev/usb2/controller/uss820dci_pccard.c b/sys/dev/usb2/controller/uss820dci_pccard.c
deleted file mode 100644
index dde423d..0000000
--- a/sys/dev/usb2/controller/uss820dci_pccard.c
+++ /dev/null
@@ -1,266 +0,0 @@
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-/*-
- * Copyright (c) 2008 Hans Petter Selasky <hselasky@freebsd.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <dev/usb2/include/usb2_mfunc.h>
-#include <dev/usb2/include/usb2_defs.h>
-#include <dev/usb2/include/usb2_standard.h>
-
-#include <dev/usb2/core/usb2_core.h>
-#include <dev/usb2/core/usb2_busdma.h>
-#include <dev/usb2/core/usb2_process.h>
-#include <dev/usb2/core/usb2_config_td.h>
-#include <dev/usb2/core/usb2_sw_transfer.h>
-#include <dev/usb2/core/usb2_util.h>
-
-#include <dev/usb2/controller/usb2_controller.h>
-#include <dev/usb2/controller/usb2_bus.h>
-#include <dev/usb2/controller/uss820dci.h>
-
-#include <dev/pccard/pccardreg.h>
-#include <dev/pccard/pccardvar.h>
-
-#include <sys/rman.h>
-
-static device_probe_t uss820_pccard_probe;
-static device_attach_t uss820_pccard_attach;
-static device_detach_t uss820_pccard_detach;
-static device_suspend_t uss820_pccard_suspend;
-static device_resume_t uss820_pccard_resume;
-static device_shutdown_t uss820_pccard_shutdown;
-
-static uint8_t uss820_pccard_lookup(device_t dev);
-
-static device_method_t uss820dci_methods[] = {
- /* Device interface */
- DEVMETHOD(device_probe, uss820_pccard_probe),
- DEVMETHOD(device_attach, uss820_pccard_attach),
- DEVMETHOD(device_detach, uss820_pccard_detach),
- DEVMETHOD(device_suspend, uss820_pccard_suspend),
- DEVMETHOD(device_resume, uss820_pccard_resume),
- DEVMETHOD(device_shutdown, uss820_pccard_shutdown),
-
- /* Bus interface */
- DEVMETHOD(bus_print_child, bus_generic_print_child),
-
- {0, 0}
-};
-
-static driver_t uss820dci_driver = {
- .name = "uss820",
- .methods = uss820dci_methods,
- .size = sizeof(struct uss820dci_softc),
-};
-
-static devclass_t uss820dci_devclass;
-
-DRIVER_MODULE(uss820, pccard, uss820dci_driver, uss820dci_devclass, 0, 0);
-MODULE_DEPEND(uss820, usb2_core, 1, 1, 1);
-
-static const char *const uss820_desc = "USS820 USB Device Controller";
-
-static int
-uss820_pccard_suspend(device_t dev)
-{
- struct uss820dci_softc *sc = device_get_softc(dev);
- int err;
-
- err = bus_generic_suspend(dev);
- if (err == 0) {
- uss820dci_suspend(sc);
- }
- return (err);
-}
-
-static int
-uss820_pccard_resume(device_t dev)
-{
- struct uss820dci_softc *sc = device_get_softc(dev);
- int err;
-
- uss820dci_resume(sc);
-
- err = bus_generic_resume(dev);
-
- return (err);
-}
-
-static int
-uss820_pccard_shutdown(device_t dev)
-{
- struct uss820dci_softc *sc = device_get_softc(dev);
- int err;
-
- err = bus_generic_shutdown(dev);
- if (err)
- return (err);
-
- uss820dci_uninit(sc);
-
- return (0);
-}
-
-static uint8_t
-uss820_pccard_lookup(device_t dev)
-{
- uint32_t prod;
- uint32_t vend;
-
- pccard_get_vendor(dev, &vend);
- pccard_get_product(dev, &prod);
-
- /* ID's will be added later */
- return (0);
-}
-
-static int
-uss820_pccard_probe(device_t dev)
-{
- if (uss820_pccard_lookup(dev)) {
- device_set_desc(dev, uss820_desc);
- return (0);
- }
- return (ENXIO);
-}
-static int
-uss820_pccard_attach(device_t dev)
-{
- struct uss820dci_softc *sc = device_get_softc(dev);
- int err;
- int rid;
-
- if (sc == NULL) {
- return (ENXIO);
- }
- /* get all DMA memory */
-
- if (usb2_bus_mem_alloc_all(&sc->sc_bus,
- USB_GET_DMA_TAG(dev), NULL)) {
- return (ENOMEM);
- }
- rid = 0;
- sc->sc_io_res =
- bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, RF_ACTIVE);
-
- if (!sc->sc_io_res) {
- goto error;
- }
- sc->sc_io_tag = rman_get_bustag(sc->sc_io_res);
- sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res);
- sc->sc_io_size = rman_get_size(sc->sc_io_res);
-
- /* multiply all addresses by 4 */
- sc->sc_reg_shift = 2;
-
- rid = 0;
- sc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
- RF_SHAREABLE | RF_ACTIVE);
- if (sc->sc_irq_res == NULL) {
- goto error;
- }
- sc->sc_bus.bdev = device_add_child(dev, "usbus", -1);
- if (!(sc->sc_bus.bdev)) {
- goto error;
- }
- device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);
-
- err = usb2_config_td_setup(&sc->sc_config_td, sc,
- &sc->sc_bus.bus_mtx, NULL, 0, 4);
- if (err) {
- device_printf(dev, "could not setup config thread!\n");
- goto error;
- }
-#if (__FreeBSD_version >= 700031)
- err = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,
- NULL, (void *)uss820dci_interrupt, sc, &sc->sc_intr_hdl);
-#else
- err = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,
- (void *)uss820dci_interrupt, sc, &sc->sc_intr_hdl);
-#endif
- if (err) {
- sc->sc_intr_hdl = NULL;
- goto error;
- }
- err = uss820dci_init(sc);
- if (err) {
- device_printf(dev, "Init failed\n");
- goto error;
- }
- err = device_probe_and_attach(sc->sc_bus.bdev);
- if (err) {
- device_printf(dev, "USB probe and attach failed\n");
- goto error;
- }
- return (0);
-
-error:
- uss820_pccard_detach(dev);
- return (ENXIO);
-}
-
-static int
-uss820_pccard_detach(device_t dev)
-{
- struct uss820dci_softc *sc = device_get_softc(dev);
- device_t bdev;
- int err;
-
- if (sc->sc_bus.bdev) {
- bdev = sc->sc_bus.bdev;
- device_detach(bdev);
- device_delete_child(dev, bdev);
- }
- /* during module unload there are lots of children leftover */
- device_delete_all_children(dev);
-
- if (sc->sc_irq_res && sc->sc_intr_hdl) {
- /*
- * only call at91_udp_uninit() after at91_udp_init()
- */
- uss820dci_uninit(sc);
-
- err = bus_teardown_intr(dev, sc->sc_irq_res,
- sc->sc_intr_hdl);
- sc->sc_intr_hdl = NULL;
- }
- if (sc->sc_irq_res) {
- bus_release_resource(dev, SYS_RES_IRQ, 0,
- sc->sc_irq_res);
- sc->sc_irq_res = NULL;
- }
- if (sc->sc_io_res) {
- bus_release_resource(dev, SYS_RES_IOPORT, 0,
- sc->sc_io_res);
- sc->sc_io_res = NULL;
- }
- usb2_config_td_unsetup(&sc->sc_config_td);
-
- usb2_bus_mem_free_all(&sc->sc_bus, NULL);
-
- return (0);
-}
diff --git a/sys/dev/usb2/core/usb2_busdma.c b/sys/dev/usb2/core/usb2_busdma.c
index b5fbc7f..df79781 100644
--- a/sys/dev/usb2/core/usb2_busdma.c
+++ b/sys/dev/usb2/core/usb2_busdma.c
@@ -602,6 +602,12 @@ usb2_pc_load_mem(struct usb2_page_cache *pc, uint32_t size, uint8_t sync)
uptag = pc->tag_parent;
/*
+ * We have to unload the previous loaded DMA
+ * pages before trying to load a new one!
+ */
+ bus_dmamap_unload(pc->tag, pc->map);
+
+ /*
* Try to load memory into DMA.
*/
err = bus_dmamap_load(
@@ -617,6 +623,12 @@ usb2_pc_load_mem(struct usb2_page_cache *pc, uint32_t size, uint8_t sync)
} else {
/*
+ * We have to unload the previous loaded DMA
+ * pages before trying to load a new one!
+ */
+ bus_dmamap_unload(pc->tag, pc->map);
+
+ /*
* Try to load memory into DMA. The callback
* will be called in all cases:
*/
@@ -644,6 +656,10 @@ usb2_pc_load_mem(struct usb2_page_cache *pc, uint32_t size, uint8_t sync)
void
usb2_pc_cpu_invalidate(struct usb2_page_cache *pc)
{
+ if (pc->page_offset_end == pc->page_offset_buf) {
+ /* nothing has been loaded into this page cache! */
+ return;
+ }
bus_dmamap_sync(pc->tag, pc->map,
BUS_DMASYNC_POSTWRITE | BUS_DMASYNC_POSTREAD);
return;
@@ -655,6 +671,10 @@ usb2_pc_cpu_invalidate(struct usb2_page_cache *pc)
void
usb2_pc_cpu_flush(struct usb2_page_cache *pc)
{
+ if (pc->page_offset_end == pc->page_offset_buf) {
+ /* nothing has been loaded into this page cache! */
+ return;
+ }
bus_dmamap_sync(pc->tag, pc->map,
BUS_DMASYNC_PREWRITE | BUS_DMASYNC_PREREAD);
return;
@@ -958,6 +978,12 @@ usb2_pc_load_mem(struct usb2_page_cache *pc, uint32_t size, uint8_t sync)
if (size > 0) {
+ /*
+ * We have to unload the previous loaded DMA
+ * pages before trying to load a new one!
+ */
+ bus_dmamap_unload(pc->tag, pc->map);
+
/* try to load memory into DMA using using no wait option */
if (bus_dmamap_load(pc->tag, pc->map, pc->buffer,
size, NULL, BUS_DMA_NOWAIT)) {
@@ -995,6 +1021,10 @@ usb2_pc_cpu_invalidate(struct usb2_page_cache *pc)
len = pc->page_offset_end - pc->page_offset_buf;
+ if (len == 0) {
+ /* nothing has been loaded into this page cache */
+ return;
+ }
bus_dmamap_sync(pc->tag, pc->map, 0, len,
BUS_DMASYNC_POSTWRITE | BUS_DMASYNC_POSTREAD);
return;
@@ -1010,6 +1040,10 @@ usb2_pc_cpu_flush(struct usb2_page_cache *pc)
len = pc->page_offset_end - pc->page_offset_buf;
+ if (len == 0) {
+ /* nothing has been loaded into this page cache */
+ return;
+ }
bus_dmamap_sync(pc->tag, pc->map, 0, len,
BUS_DMASYNC_PREWRITE | BUS_DMASYNC_PREREAD);
return;
@@ -1358,12 +1392,10 @@ usb2_bdma_pre_sync(struct usb2_xfer *xfer)
while (nframes--) {
- if (pc->page_offset_buf != pc->page_offset_end) {
- if (pc->isread) {
- usb2_pc_cpu_invalidate(pc);
- } else {
- usb2_pc_cpu_flush(pc);
- }
+ if (pc->isread) {
+ usb2_pc_cpu_invalidate(pc);
+ } else {
+ usb2_pc_cpu_flush(pc);
}
pc++;
}
@@ -1394,11 +1426,8 @@ usb2_bdma_post_sync(struct usb2_xfer *xfer)
pc = xfer->frbuffers;
while (nframes--) {
-
- if (pc->page_offset_buf != pc->page_offset_end) {
- if (pc->isread) {
- usb2_pc_cpu_invalidate(pc);
- }
+ if (pc->isread) {
+ usb2_pc_cpu_invalidate(pc);
}
pc++;
}
diff --git a/sys/dev/usb2/core/usb2_core.h b/sys/dev/usb2/core/usb2_core.h
index d8b8860..08372e5 100644
--- a/sys/dev/usb2/core/usb2_core.h
+++ b/sys/dev/usb2/core/usb2_core.h
@@ -159,12 +159,12 @@
#define usb2_callout_drain(c) callout_drain(&(c)->co)
#define usb2_callout_pending(c) callout_pending(&(c)->co)
-#define USB_BUS_LOCK(_b) mtx_lock(&(_b)->bus_mtx)
-#define USB_BUS_UNLOCK(_b) mtx_unlock(&(_b)->bus_mtx)
-#define USB_BUS_LOCK_ASSERT(_b, _t) mtx_assert(&(_b)->bus_mtx, _t)
-#define USB_XFER_LOCK(_x) mtx_lock((_x)->xfer_mtx)
-#define USB_XFER_UNLOCK(_x) mtx_unlock((_x)->xfer_mtx)
-#define USB_XFER_LOCK_ASSERT(_x, _t) mtx_assert((_x)->xfer_mtx, _t)
+#define USB_BUS_LOCK(_b) mtx_lock(&(_b)->bus_mtx)
+#define USB_BUS_UNLOCK(_b) mtx_unlock(&(_b)->bus_mtx)
+#define USB_BUS_LOCK_ASSERT(_b, _t) mtx_assert(&(_b)->bus_mtx, _t)
+#define USB_XFER_LOCK(_x) mtx_lock((_x)->xfer_mtx)
+#define USB_XFER_UNLOCK(_x) mtx_unlock((_x)->xfer_mtx)
+#define USB_XFER_LOCK_ASSERT(_x, _t) mtx_assert((_x)->xfer_mtx, _t)
/* structure prototypes */
struct file;
@@ -401,13 +401,14 @@ struct usb2_location {
struct usb2_fifo *rxfifo;
struct usb2_fifo *txfifo;
uint32_t devloc; /* original devloc */
- uint16_t bus_index;
- uint8_t dev_index;
- uint8_t iface_index;
- uint8_t ep_index;
- uint8_t is_read;
- uint8_t is_write;
- uint8_t is_uref;
+ uint16_t bus_index; /* bus index */
+ uint8_t dev_index; /* device index */
+ uint8_t iface_index; /* interface index */
+ uint8_t fifo_index; /* FIFO index */
+ uint8_t is_read; /* set if location has read access */
+ uint8_t is_write; /* set if location has write access */
+ uint8_t is_uref; /* set if USB refcount decr. needed */
+ uint8_t is_usbfs; /* set if USB-FS is active */
};
/* external variables */
diff --git a/sys/dev/usb2/core/usb2_dev.c b/sys/dev/usb2/core/usb2_dev.c
index 1afe83e1..7e0a17e 100644
--- a/sys/dev/usb2/core/usb2_dev.c
+++ b/sys/dev/usb2/core/usb2_dev.c
@@ -464,21 +464,16 @@ usb2_ref_device(struct file *fp, struct usb2_location *ploc, uint32_t devloc)
struct usb2_fifo **ppf;
struct usb2_fifo *f;
int fflags;
- uint8_t need_uref;
+ uint8_t dev_ep_index;
if (fp) {
- /* check if we need uref hint */
- need_uref = devloc ? 0 : 1;
+ /* check if we need uref */
+ ploc->is_uref = devloc ? 0 : 1;
/* get devloc - already verified */
devloc = USB_P2U(fp->f_data);
/* get file flags */
fflags = fp->f_flag;
- /* only ref FIFO */
- ploc->is_uref = 0;
- /* devloc should be valid */
} else {
- /* we need uref */
- need_uref = 1;
/* only ref device */
fflags = 0;
/* search for FIFO */
@@ -496,7 +491,7 @@ usb2_ref_device(struct file *fp, struct usb2_location *ploc, uint32_t devloc)
ploc->dev_index = (devloc / USB_BUS_MAX) % USB_DEV_MAX;
ploc->iface_index = (devloc / (USB_BUS_MAX *
USB_DEV_MAX)) % USB_IFACE_MAX;
- ploc->ep_index = (devloc / (USB_BUS_MAX * USB_DEV_MAX *
+ ploc->fifo_index = (devloc / (USB_BUS_MAX * USB_DEV_MAX *
USB_IFACE_MAX));
mtx_lock(&usb2_ref_lock);
@@ -518,18 +513,6 @@ usb2_ref_device(struct file *fp, struct usb2_location *ploc, uint32_t devloc)
DPRINTFN(2, "no dev ref\n");
goto error;
}
- ploc->iface = usb2_get_iface(ploc->udev, ploc->iface_index);
- if (ploc->ep_index != 0) {
- /* non control endpoint - we need an interface */
- if (ploc->iface == NULL) {
- DPRINTFN(2, "no iface\n");
- goto error;
- }
- if (ploc->iface->idesc == NULL) {
- DPRINTFN(2, "no idesc\n");
- goto error;
- }
- }
/* check if we are doing an open */
if (fp == NULL) {
/* set defaults */
@@ -537,11 +520,18 @@ usb2_ref_device(struct file *fp, struct usb2_location *ploc, uint32_t devloc)
ploc->rxfifo = NULL;
ploc->is_write = 0;
ploc->is_read = 0;
+ ploc->is_usbfs = 0;
+ /* NOTE: variable overloading: */
+ dev_ep_index = ploc->fifo_index;
} else {
+ /* initialise "is_usbfs" flag */
+ ploc->is_usbfs = 0;
+ dev_ep_index = 255; /* dummy */
+
/* check for write */
if (fflags & FWRITE) {
ppf = ploc->udev->fifo;
- f = ppf[ploc->ep_index + USB_FIFO_TX];
+ f = ppf[ploc->fifo_index + USB_FIFO_TX];
ploc->txfifo = f;
ploc->is_write = 1; /* ref */
if ((f == NULL) ||
@@ -549,6 +539,15 @@ usb2_ref_device(struct file *fp, struct usb2_location *ploc, uint32_t devloc)
(f->curr_file != fp)) {
goto error;
}
+ /* check if USB-FS is active */
+ if (f->fs_ep_max != 0) {
+ ploc->is_usbfs = 1;
+ }
+ /*
+ * Get real endpoint index associated with
+ * this FIFO:
+ */
+ dev_ep_index = f->dev_ep_index;
} else {
ploc->txfifo = NULL;
ploc->is_write = 0; /* no ref */
@@ -557,7 +556,7 @@ usb2_ref_device(struct file *fp, struct usb2_location *ploc, uint32_t devloc)
/* check for read */
if (fflags & FREAD) {
ppf = ploc->udev->fifo;
- f = ppf[ploc->ep_index + USB_FIFO_RX];
+ f = ppf[ploc->fifo_index + USB_FIFO_RX];
ploc->rxfifo = f;
ploc->is_read = 1; /* ref */
if ((f == NULL) ||
@@ -565,37 +564,46 @@ usb2_ref_device(struct file *fp, struct usb2_location *ploc, uint32_t devloc)
(f->curr_file != fp)) {
goto error;
}
+ /* check if USB-FS is active */
+ if (f->fs_ep_max != 0) {
+ ploc->is_usbfs = 1;
+ }
+ /*
+ * Get real endpoint index associated with
+ * this FIFO:
+ */
+ dev_ep_index = f->dev_ep_index;
} else {
ploc->rxfifo = NULL;
ploc->is_read = 0; /* no ref */
}
}
+ /* check if we require an interface */
+ ploc->iface = usb2_get_iface(ploc->udev, ploc->iface_index);
+ if (dev_ep_index != 0) {
+ /* non control endpoint - we need an interface */
+ if (ploc->iface == NULL) {
+ DPRINTFN(2, "no iface\n");
+ goto error;
+ }
+ if (ploc->iface->idesc == NULL) {
+ DPRINTFN(2, "no idesc\n");
+ goto error;
+ }
+ }
/* when everything is OK we increment the refcounts */
if (ploc->is_write) {
DPRINTFN(2, "ref write\n");
ploc->txfifo->refcount++;
- if (ploc->txfifo->flag_no_uref == 0) {
- /* we need extra locking */
- ploc->is_uref = 1;
- }
}
if (ploc->is_read) {
DPRINTFN(2, "ref read\n");
ploc->rxfifo->refcount++;
- if (ploc->rxfifo->flag_no_uref == 0) {
- /* we need extra locking */
- ploc->is_uref = 1;
- }
}
if (ploc->is_uref) {
- if (need_uref) {
- DPRINTFN(2, "ref udev - needed\n");
- ploc->udev->refcount++;
- } else {
- DPRINTFN(2, "ref udev - not needed\n");
- ploc->is_uref = 0;
- }
+ DPRINTFN(2, "ref udev - needed\n");
+ ploc->udev->refcount++;
}
mtx_unlock(&usb2_ref_lock);
@@ -616,6 +624,59 @@ error:
}
/*------------------------------------------------------------------------*
+ * usb2_uref_location
+ *
+ * This function is used to upgrade an USB reference to include the
+ * USB device reference on a USB location.
+ *
+ * Return values:
+ * 0: Success, refcount incremented on the given USB device.
+ * Else: Failure.
+ *------------------------------------------------------------------------*/
+static usb2_error_t
+usb2_uref_location(struct usb2_location *ploc)
+{
+ /*
+ * Check if we already got an USB reference on this location:
+ */
+ if (ploc->is_uref) {
+ return (0); /* success */
+ }
+ mtx_lock(&usb2_ref_lock);
+ if (ploc->bus != devclass_get_softc(usb2_devclass_ptr, ploc->bus_index)) {
+ DPRINTFN(2, "bus changed at %u\n", ploc->bus_index);
+ goto error;
+ }
+ if (ploc->udev != ploc->bus->devices[ploc->dev_index]) {
+ DPRINTFN(2, "device changed at %u\n", ploc->dev_index);
+ goto error;
+ }
+ if (ploc->udev->refcount == USB_DEV_REF_MAX) {
+ DPRINTFN(2, "no dev ref\n");
+ goto error;
+ }
+ DPRINTFN(2, "ref udev\n");
+ ploc->udev->refcount++;
+ mtx_unlock(&usb2_ref_lock);
+
+ /* set "uref" */
+ ploc->is_uref = 1;
+
+ /*
+ * We are about to alter the bus-state. Apply the
+ * required locks.
+ */
+ sx_xlock(ploc->udev->default_sx + 1);
+ mtx_lock(&Giant); /* XXX */
+ return (0);
+
+error:
+ mtx_unlock(&usb2_ref_lock);
+ DPRINTFN(2, "fail\n");
+ return (USB_ERR_INVAL);
+}
+
+/*------------------------------------------------------------------------*
* usb2_unref_device
*
* This function will release the reference count by one unit for the
@@ -672,7 +733,9 @@ usb2_fifo_create(struct usb2_location *ploc, uint32_t *pdevloc, int fflags)
struct usb2_fifo *f;
struct usb2_pipe *pipe;
uint8_t iface_index = ploc->iface_index;
- uint8_t dev_ep_index = ploc->ep_index;
+
+ /* NOTE: variable overloading: */
+ uint8_t dev_ep_index = ploc->fifo_index;
uint8_t n;
uint8_t is_tx;
uint8_t is_rx;
@@ -770,9 +833,6 @@ usb2_fifo_create(struct usb2_location *ploc, uint32_t *pdevloc, int fflags)
f->methods = &usb2_ugen_methods;
f->iface_index = iface_index;
f->udev = udev;
- if (dev_ep_index != 0) {
- f->flag_no_uref = 1;
- }
mtx_lock(&usb2_ref_lock);
udev->fifo[n + USB_FIFO_TX] = f;
mtx_unlock(&usb2_ref_lock);
@@ -798,9 +858,6 @@ usb2_fifo_create(struct usb2_location *ploc, uint32_t *pdevloc, int fflags)
f->methods = &usb2_ugen_methods;
f->iface_index = iface_index;
f->udev = udev;
- if (dev_ep_index != 0) {
- f->flag_no_uref = 1;
- }
mtx_lock(&usb2_ref_lock);
udev->fifo[n + USB_FIFO_RX] = f;
mtx_unlock(&usb2_ref_lock);
@@ -1113,15 +1170,23 @@ usb2_check_thread_perm(struct usb2_device *udev, struct thread *td,
struct usb2_interface *iface;
int err;
- iface = usb2_get_iface(udev, iface_index);
- if (iface == NULL) {
- return (EINVAL);
- }
- if (iface->idesc == NULL) {
- return (EINVAL);
+ if (ep_index != 0) {
+ /*
+ * Non-control endpoints are always
+ * associated with an interface:
+ */
+ iface = usb2_get_iface(udev, iface_index);
+ if (iface == NULL) {
+ return (EINVAL);
+ }
+ if (iface->idesc == NULL) {
+ return (EINVAL);
+ }
+ } else {
+ iface = NULL;
}
/* scan down the permissions tree */
- if ((ep_index != 0) && iface &&
+ if ((iface != NULL) &&
(usb2_check_access(fflags, &iface->perm) == 0)) {
/* we got access through the interface */
err = 0;
@@ -1198,8 +1263,14 @@ usb2_fdopen(struct cdev *dev, int xxx_oflags, struct thread *td,
DPRINTFN(2, "cannot ref device\n");
return (ENXIO);
}
+ /*
+ * NOTE: Variable overloading. "usb2_fifo_create" will update
+ * the FIFO index. Right here we can assume that the
+ * "fifo_index" is the same like the endpoint number without
+ * direction mask, if the "fifo_index" is less than 16.
+ */
err = usb2_check_thread_perm(loc.udev, td, fflags,
- loc.iface_index, loc.ep_index);
+ loc.iface_index, loc.fifo_index);
/* check for error */
if (err) {
@@ -1447,7 +1518,7 @@ usb2_close_f(struct file *fp, struct thread *td)
DPRINTFN(2, "fflags=%u\n", fflags);
- err = usb2_ref_device(fp, &loc, 0);;
+ err = usb2_ref_device(fp, &loc, 0 /* need uref */ );;
/* restore some file variables */
fp->f_ops = usb2_old_f_ops;
@@ -1512,7 +1583,7 @@ usb2_ioctl_f_sub(struct usb2_fifo *f, u_long cmd, void *addr,
}
break;
default:
- return (ENOTTY);
+ return (ENOIOCTL);
}
return (error);
}
@@ -1522,13 +1593,11 @@ usb2_ioctl_f(struct file *fp, u_long cmd, void *addr,
struct ucred *cred, struct thread *td)
{
struct usb2_location loc;
+ struct usb2_fifo *f;
int fflags;
- int err_rx;
- int err_tx;
int err;
- uint8_t is_common = 0;
- err = usb2_ref_device(fp, &loc, 0);;
+ err = usb2_ref_device(fp, &loc, 1 /* no uref */ );;
if (err) {
return (ENXIO);
}
@@ -1536,43 +1605,31 @@ usb2_ioctl_f(struct file *fp, u_long cmd, void *addr,
DPRINTFN(2, "fflags=%u, cmd=0x%lx\n", fflags, cmd);
- if (fflags & FREAD) {
- if (fflags & FWRITE) {
- /*
- * Make sure that the IOCTL is not
- * duplicated:
- */
- is_common = 1;
- }
- err_rx = usb2_ioctl_f_sub(loc.rxfifo, cmd, addr, td);
- if (err_rx == ENOTTY) {
- err_rx = (loc.rxfifo->methods->f_ioctl) (
- loc.rxfifo, cmd, addr,
- is_common ? fflags : (fflags & ~FWRITE), td);
- }
- } else {
- err_rx = 0;
- }
+ f = NULL; /* set default value */
+ err = ENOIOCTL; /* set default value */
+
if (fflags & FWRITE) {
- err_tx = usb2_ioctl_f_sub(loc.txfifo, cmd, addr, td);
- if (err_tx == ENOTTY) {
- if (is_common)
- err_tx = 0; /* already handled this IOCTL */
- else
- err_tx = (loc.txfifo->methods->f_ioctl) (
- loc.txfifo, cmd, addr, fflags & ~FREAD, td);
+ f = loc.txfifo;
+ err = usb2_ioctl_f_sub(f, cmd, addr, td);
+ }
+ if (fflags & FREAD) {
+ f = loc.rxfifo;
+ err = usb2_ioctl_f_sub(f, cmd, addr, td);
+ }
+ if (err == ENOIOCTL) {
+ err = (f->methods->f_ioctl) (f, cmd, addr, fflags, td);
+ if (err == ENOIOCTL) {
+ if (usb2_uref_location(&loc)) {
+ err = ENXIO;
+ goto done;
+ }
+ err = (f->methods->f_ioctl_post) (f, cmd, addr, fflags, td);
}
- } else {
- err_tx = 0;
}
-
- if (err_rx) {
- err = err_rx;
- } else if (err_tx) {
- err = err_tx;
- } else {
- err = 0; /* no error */
+ if (err == ENOIOCTL) {
+ err = ENOTTY;
}
+done:
usb2_unref_device(&loc);
return (err);
}
@@ -1594,7 +1651,6 @@ usb2_poll_f(struct file *fp, int events,
struct usb2_mbuf *m;
int fflags;
int revents;
- uint8_t usbfs_active = 0;
revents = usb2_ref_device(fp, &loc, 1 /* no uref */ );;
if (revents) {
@@ -1602,20 +1658,6 @@ usb2_poll_f(struct file *fp, int events,
}
fflags = fp->f_flag;
- /* figure out if the USB File System is active */
-
- if (fflags & FWRITE) {
- f = loc.txfifo;
- if (f->fs_ep_max != 0) {
- usbfs_active = 1;
- }
- }
- if (fflags & FREAD) {
- f = loc.rxfifo;
- if (f->fs_ep_max != 0) {
- usbfs_active = 1;
- }
- }
/* Figure out who needs service */
if ((events & (POLLOUT | POLLWRNORM)) &&
@@ -1625,7 +1667,7 @@ usb2_poll_f(struct file *fp, int events,
mtx_lock(f->priv_mtx);
- if (!usbfs_active) {
+ if (!loc.is_usbfs) {
if (f->flag_iserror) {
/* we got an error */
m = (void *)1;
@@ -1664,7 +1706,7 @@ usb2_poll_f(struct file *fp, int events,
mtx_lock(f->priv_mtx);
- if (!usbfs_active) {
+ if (!loc.is_usbfs) {
if (f->flag_iserror) {
/* we have and error */
m = (void *)1;
@@ -1693,8 +1735,10 @@ usb2_poll_f(struct file *fp, int events,
f->flag_isselect = 1;
selrecord(td, &f->selinfo);
- /* start reading data */
- (f->methods->f_start_read) (f);
+ if (!loc.is_usbfs) {
+ /* start reading data */
+ (f->methods->f_start_read) (f);
+ }
}
mtx_unlock(f->priv_mtx);
@@ -1739,22 +1783,23 @@ usb2_read_f(struct file *fp, struct uio *uio, struct ucred *cred,
mtx_lock(f->priv_mtx);
+ /* check for permanent read error */
if (f->flag_iserror) {
err = EIO;
goto done;
}
+ /* check if USB-FS interface is active */
+ if (loc.is_usbfs) {
+ /*
+ * The queue is used for events that should be
+ * retrieved using the "USB_FS_COMPLETE" ioctl.
+ */
+ err = EINVAL;
+ goto done;
+ }
while (uio->uio_resid > 0) {
- if (f->fs_ep_max == 0) {
- USB_IF_DEQUEUE(&f->used_q, m);
- } else {
- /*
- * The queue is used for events that should be
- * retrieved using the "USB_FS_COMPLETE"
- * ioctl.
- */
- m = NULL;
- }
+ USB_IF_DEQUEUE(&f->used_q, m);
if (m == NULL) {
@@ -1777,9 +1822,16 @@ usb2_read_f(struct file *fp, struct uio *uio, struct ucred *cred,
break;
}
continue;
- } else {
- tr_data = 1;
}
+ if (f->methods->f_filter_read) {
+ /*
+ * Sometimes it is convenient to process data at the
+ * expense of a userland process instead of a kernel
+ * process.
+ */
+ (f->methods->f_filter_read) (f, m);
+ }
+ tr_data = 1;
io_len = MIN(m->cur_data_len, uio->uio_resid);
@@ -1876,26 +1928,27 @@ usb2_write_f(struct file *fp, struct uio *uio, struct ucred *cred,
mtx_lock(f->priv_mtx);
+ /* check for permanent write error */
if (f->flag_iserror) {
err = EIO;
goto done;
}
- if ((f->queue_data == NULL) && (f->fs_ep_max == 0)) {
+ /* check if USB-FS interface is active */
+ if (loc.is_usbfs) {
+ /*
+ * The queue is used for events that should be
+ * retrieved using the "USB_FS_COMPLETE" ioctl.
+ */
+ err = EINVAL;
+ goto done;
+ }
+ if (f->queue_data == NULL) {
/* start write transfer, if not already started */
(f->methods->f_start_write) (f);
}
/* we allow writing zero length data */
do {
- if (f->fs_ep_max == 0) {
- USB_IF_DEQUEUE(&f->free_q, m);
- } else {
- /*
- * The queue is used for events that should be
- * retrieved using the "USB_FS_COMPLETE"
- * ioctl.
- */
- m = NULL;
- }
+ USB_IF_DEQUEUE(&f->free_q, m);
if (m == NULL) {
@@ -1914,9 +1967,8 @@ usb2_write_f(struct file *fp, struct uio *uio, struct ucred *cred,
break;
}
continue;
- } else {
- tr_data = 1;
}
+ tr_data = 1;
USB_MBUF_RESET(m);
@@ -1933,10 +1985,19 @@ usb2_write_f(struct file *fp, struct uio *uio, struct ucred *cred,
if (err) {
USB_IF_ENQUEUE(&f->free_q, m);
break;
- } else {
- USB_IF_ENQUEUE(&f->used_q, m);
- (f->methods->f_start_write) (f);
}
+ if (f->methods->f_filter_write) {
+ /*
+ * Sometimes it is convenient to process data at the
+ * expense of a userland process instead of a kernel
+ * process.
+ */
+ (f->methods->f_filter_write) (f, m);
+ }
+ USB_IF_ENQUEUE(&f->used_q, m);
+
+ (f->methods->f_start_write) (f);
+
} while (uio->uio_resid > 0);
done:
mtx_unlock(f->priv_mtx);
@@ -2066,7 +2127,7 @@ static int
usb2_fifo_dummy_ioctl(struct usb2_fifo *fifo, u_long cmd, void *addr,
int fflags, struct thread *td)
{
- return (ENOTTY);
+ return (ENOIOCTL);
}
static void
@@ -2090,6 +2151,9 @@ usb2_fifo_check_methods(struct usb2_fifo_methods *pm)
if (pm->f_ioctl == NULL)
pm->f_ioctl = &usb2_fifo_dummy_ioctl;
+ if (pm->f_ioctl_post == NULL)
+ pm->f_ioctl_post = &usb2_fifo_dummy_ioctl;
+
if (pm->f_start_read == NULL)
pm->f_start_read = &usb2_fifo_dummy_cmd;
@@ -2173,7 +2237,6 @@ usb2_fifo_attach(struct usb2_device *udev, void *priv_sc,
f_tx->methods = pm;
f_tx->iface_index = iface_index;
f_tx->udev = udev;
- f_tx->flag_no_uref = 1;
f_rx->fifo_index = n + USB_FIFO_RX;
f_rx->dev_ep_index = (n / 2) + (USB_EP_MAX / 2);
@@ -2182,7 +2245,6 @@ usb2_fifo_attach(struct usb2_device *udev, void *priv_sc,
f_rx->methods = pm;
f_rx->iface_index = iface_index;
f_rx->udev = udev;
- f_rx->flag_no_uref = 1;
f_sc->fp[USB_FIFO_TX] = f_tx;
f_sc->fp[USB_FIFO_RX] = f_rx;
@@ -2561,33 +2623,18 @@ usb2_fifo_get_data_buffer(struct usb2_fifo *f, void **pptr, uint32_t *plen)
{
struct usb2_mbuf *m;
- USB_IF_DEQUEUE(&f->used_q, m);
+ USB_IF_POLL(&f->used_q, m);
if (m) {
*plen = m->cur_data_len;
*pptr = m->cur_data_ptr;
- USB_IF_PREPEND(&f->used_q, m);
return (1);
}
return (0);
}
void
-usb2_fifo_get_data_next(struct usb2_fifo *f)
-{
- struct usb2_mbuf *m;
-
- USB_IF_DEQUEUE(&f->used_q, m);
-
- if (m) {
- USB_IF_ENQUEUE(&f->free_q, m);
- usb2_fifo_wakeup(f);
- }
- return;
-}
-
-void
usb2_fifo_get_data_error(struct usb2_fifo *f)
{
f->flag_iserror = 1;
diff --git a/sys/dev/usb2/core/usb2_dev.h b/sys/dev/usb2/core/usb2_dev.h
index 859dd4e..102b2f6 100644
--- a/sys/dev/usb2/core/usb2_dev.h
+++ b/sys/dev/usb2/core/usb2_dev.h
@@ -39,11 +39,13 @@
#define USB_FIFO_RX 1
struct usb2_fifo;
+struct usb2_mbuf;
typedef int (usb2_fifo_open_t)(struct usb2_fifo *fifo, int fflags, struct thread *td);
typedef void (usb2_fifo_close_t)(struct usb2_fifo *fifo, int fflags, struct thread *td);
typedef int (usb2_fifo_ioctl_t)(struct usb2_fifo *fifo, u_long cmd, void *addr, int fflags, struct thread *td);
typedef void (usb2_fifo_cmd_t)(struct usb2_fifo *fifo);
+typedef void (usb2_fifo_filter_t)(struct usb2_fifo *fifo, struct usb2_mbuf *m);
struct usb2_symlink {
TAILQ_ENTRY(usb2_symlink) sym_entry;
@@ -57,17 +59,24 @@ struct usb2_symlink {
/*
* Locking note for the following functions. All the
- * "usb2_fifo_cmd_t" functions are called locked. The others are
- * called unlocked.
+ * "usb2_fifo_cmd_t" and "usb2_fifo_filter_t" functions are called
+ * locked. The others are called unlocked.
*/
struct usb2_fifo_methods {
usb2_fifo_open_t *f_open;
usb2_fifo_close_t *f_close;
usb2_fifo_ioctl_t *f_ioctl;
+ /*
+ * NOTE: The post-ioctl callback is called after the USB reference
+ * gets locked in the IOCTL handler:
+ */
+ usb2_fifo_ioctl_t *f_ioctl_post;
usb2_fifo_cmd_t *f_start_read;
usb2_fifo_cmd_t *f_stop_read;
usb2_fifo_cmd_t *f_start_write;
usb2_fifo_cmd_t *f_stop_write;
+ usb2_fifo_filter_t *f_filter_read;
+ usb2_fifo_filter_t *f_filter_write;
const char *basename[4];
const char *postfix[4];
};
@@ -98,7 +107,6 @@ struct usb2_fifo {
uint32_t bufsize; /* BULK and INTERRUPT buffer size */
uint16_t nframes; /* for isochronous mode */
uint16_t dev_ep_index; /* our device endpoint index */
- uint8_t flag_no_uref; /* set if FIFO is not control endpoint */
uint8_t flag_sleeping; /* set if FIFO is sleeping */
uint8_t flag_iscomplete; /* set if a USB transfer is complete */
uint8_t flag_iserror; /* set if FIFO error happened */
@@ -134,7 +142,6 @@ void usb2_fifo_put_data_error(struct usb2_fifo *fifo);
uint8_t usb2_fifo_get_data(struct usb2_fifo *fifo, struct usb2_page_cache *pc, uint32_t offset, uint32_t len, uint32_t *actlen, uint8_t what);
uint8_t usb2_fifo_get_data_linear(struct usb2_fifo *fifo, void *ptr, uint32_t len, uint32_t *actlen, uint8_t what);
uint8_t usb2_fifo_get_data_buffer(struct usb2_fifo *f, void **pptr, uint32_t *plen);
-void usb2_fifo_get_data_next(struct usb2_fifo *f);
void usb2_fifo_get_data_error(struct usb2_fifo *fifo);
uint8_t usb2_fifo_opened(struct usb2_fifo *fifo);
void usb2_fifo_free(struct usb2_fifo *f);
diff --git a/sys/dev/usb2/core/usb2_device.c b/sys/dev/usb2/core/usb2_device.c
index 10ac7f1..2c52ae7 100644
--- a/sys/dev/usb2/core/usb2_device.c
+++ b/sys/dev/usb2/core/usb2_device.c
@@ -47,6 +47,7 @@
#include <dev/usb2/core/usb2_mbuf.h>
#include <dev/usb2/core/usb2_dev.h>
#include <dev/usb2/core/usb2_msctest.h>
+#include <dev/usb2/core/usb2_generic.h>
#include <dev/usb2/quirk/usb2_quirk.h>
@@ -66,7 +67,7 @@ static void usb2_clear_stall_proc(struct usb2_proc_msg *_pm);
static void usb2_check_strings(struct usb2_device *udev);
static usb2_error_t usb2_fill_iface_data(struct usb2_device *udev, uint8_t iface_index, uint8_t alt_index);
static void usb2_notify_addq(const char *type, struct usb2_device *udev);
-static void usb2_fifo_free_wrap(struct usb2_device *udev, uint8_t iface_index, uint8_t free_all);
+static void usb2_fifo_free_wrap(struct usb2_device *udev, uint8_t iface_index, uint8_t flag);
/* static structures */
@@ -672,7 +673,10 @@ usb2_set_alt_interface_index(struct usb2_device *udev,
if (udev->flags.usb2_mode == USB_MODE_DEVICE) {
usb2_detach_device(udev, iface_index, 1);
}
- /* free all FIFOs for this interface */
+ /*
+ * Free all generic FIFOs for this interface, except control
+ * endpoint FIFOs:
+ */
usb2_fifo_free_wrap(udev, iface_index, 0);
err = usb2_fill_iface_data(udev, iface_index, alt_index);
@@ -2077,14 +2081,20 @@ usb2_notify_addq(const char *type, struct usb2_device *udev)
/*------------------------------------------------------------------------*
* usb2_fifo_free_wrap
*
- * The function will free the FIFOs.
+ * This function will free the FIFOs.
+ *
+ * Flag values, if "iface_index" is equal to "USB_IFACE_INDEX_ANY".
+ * 0: Free all FIFOs except generic control endpoints.
+ * 1: Free all FIFOs.
+ *
+ * Flag values, if "iface_index" is not equal to "USB_IFACE_INDEX_ANY".
+ * Not used.
*------------------------------------------------------------------------*/
static void
usb2_fifo_free_wrap(struct usb2_device *udev,
- uint8_t iface_index, uint8_t free_all)
+ uint8_t iface_index, uint8_t flag)
{
struct usb2_fifo *f;
- struct usb2_pipe *pipe;
uint16_t i;
/*
@@ -2095,16 +2105,48 @@ usb2_fifo_free_wrap(struct usb2_device *udev,
if (f == NULL) {
continue;
}
- pipe = f->priv_sc0;
- if ((pipe == &udev->default_pipe) && (free_all == 0)) {
- /* don't free UGEN control endpoint yet */
- continue;
- }
/* Check if the interface index matches */
- if ((iface_index == f->iface_index) ||
- (iface_index == USB_IFACE_INDEX_ANY)) {
- usb2_fifo_free(f);
+ if (iface_index == f->iface_index) {
+ if (f->methods != &usb2_ugen_methods) {
+ /*
+ * Don't free any non-generic FIFOs in
+ * this case.
+ */
+ continue;
+ }
+ if (f->dev_ep_index == 0) {
+ /*
+ * Don't free the generic control endpoint
+ * yet and make sure that any USB-FS
+ * activity is stopped!
+ */
+ if (ugen_fs_uninit(f)) {
+ /* ignore any failures */
+ DPRINTFN(10, "udev=%p ugen_fs_uninit() "
+ "failed! (ignored)\n", udev);
+ }
+ continue;
+ }
+ } else if (iface_index == USB_IFACE_INDEX_ANY) {
+ if ((f->methods == &usb2_ugen_methods) &&
+ (f->dev_ep_index == 0) && (flag == 0)) {
+ /*
+ * Don't free the generic control endpoint
+ * yet, but make sure that any USB-FS
+ * activity is stopped!
+ */
+ if (ugen_fs_uninit(f)) {
+ /* ignore any failures */
+ DPRINTFN(10, "udev=%p ugen_fs_uninit() "
+ "failed! (ignored)\n", udev);
+ }
+ continue;
+ }
+ } else {
+ continue;
}
+ /* free the FIFO */
+ usb2_fifo_free(f);
}
return;
}
diff --git a/sys/dev/usb2/core/usb2_generic.c b/sys/dev/usb2/core/usb2_generic.c
index 56ada33..43b9c3c 100644
--- a/sys/dev/usb2/core/usb2_generic.c
+++ b/sys/dev/usb2/core/usb2_generic.c
@@ -67,6 +67,7 @@ static usb2_callback_t ugen_default_fs_callback;
static usb2_fifo_open_t ugen_open;
static usb2_fifo_close_t ugen_close;
static usb2_fifo_ioctl_t ugen_ioctl;
+static usb2_fifo_ioctl_t ugen_ioctl_post;
static usb2_fifo_cmd_t ugen_start_read;
static usb2_fifo_cmd_t ugen_start_write;
static usb2_fifo_cmd_t ugen_stop_io;
@@ -81,8 +82,6 @@ static int ugen_get_sdesc(struct usb2_fifo *f, struct usb2_gen_descriptor *ugd);
static int usb2_gen_fill_deviceinfo(struct usb2_fifo *f, struct usb2_device_info *di);
static int ugen_re_enumerate(struct usb2_fifo *f);
static int ugen_iface_ioctl(struct usb2_fifo *f, u_long cmd, void *addr, int fflags);
-static int ugen_ctrl_ioctl(struct usb2_fifo *f, u_long cmd, void *addr, int fflags);
-static int ugen_fs_uninit(struct usb2_fifo *f);
static uint8_t ugen_fs_get_complete(struct usb2_fifo *f, uint8_t *pindex);
@@ -92,6 +91,7 @@ struct usb2_fifo_methods usb2_ugen_methods = {
.f_open = &ugen_open,
.f_close = &ugen_close,
.f_ioctl = &ugen_ioctl,
+ .f_ioctl_post = &ugen_ioctl_post,
.f_start_read = &ugen_start_read,
.f_stop_read = &ugen_stop_io,
.f_start_write = &ugen_start_write,
@@ -209,10 +209,6 @@ ugen_open_pipe_write(struct usb2_fifo *f)
/* transfers are already opened */
return (0);
}
- if (f->fs_xfer) {
- /* should not happen */
- return (EINVAL);
- }
bzero(usb2_config, sizeof(usb2_config));
usb2_config[1].type = UE_CONTROL;
@@ -281,10 +277,6 @@ ugen_open_pipe_read(struct usb2_fifo *f)
/* transfers are already opened */
return (0);
}
- if (f->fs_xfer) {
- /* should not happen */
- return (EINVAL);
- }
bzero(usb2_config, sizeof(usb2_config));
usb2_config[1].type = UE_CONTROL;
@@ -591,10 +583,6 @@ ugen_set_config(struct usb2_fifo *f, uint8_t index)
{
DPRINTFN(2, "index %u\n", index);
- if (f->flag_no_uref) {
- /* not the control endpoint - just forget it */
- return (EINVAL);
- }
if (f->udev->flags.usb2_mode != USB_MODE_HOST) {
/* not possible in device side mode */
return (ENOTTY);
@@ -620,10 +608,6 @@ ugen_set_interface(struct usb2_fifo *f,
{
DPRINTFN(2, "%u, %u\n", iface_index, alt_index);
- if (f->flag_no_uref) {
- /* not the control endpoint - just forget it */
- return (EINVAL);
- }
if (f->udev->flags.usb2_mode != USB_MODE_HOST) {
/* not possible in device side mode */
return (ENOTTY);
@@ -656,10 +640,6 @@ ugen_get_cdesc(struct usb2_fifo *f, struct usb2_gen_descriptor *ugd)
DPRINTFN(6, "\n");
- if (f->flag_no_uref) {
- /* control endpoint only */
- return (EINVAL);
- }
if (ugd->ugd_data == NULL) {
/* userland pointer should not be zero */
return (EINVAL);
@@ -705,10 +685,6 @@ ugen_get_sdesc(struct usb2_fifo *f, struct usb2_gen_descriptor *ugd)
uint16_t size = sizeof(f->udev->bus->scratch[0].data);
int error;
- if (f->flag_no_uref) {
- /* control endpoint only */
- return (EINVAL);
- }
if (usb2_req_get_string_desc(f->udev, &Giant, ptr,
size, ugd->ugd_lang_id, ugd->ugd_string_index)) {
error = EINVAL;
@@ -751,10 +727,6 @@ usb2_gen_fill_devicenames(struct usb2_fifo *f, struct usb2_device_names *dn)
uint8_t i;
uint8_t first = 1;
- if (f->flag_no_uref) {
- /* control endpoint only */
- return (EINVAL);
- }
max_len = dn->udn_devnames_len;
dst = dn->udn_devnames_ptr;
@@ -813,10 +785,6 @@ usb2_gen_fill_deviceinfo(struct usb2_fifo *f, struct usb2_device_info *di)
struct usb2_device *udev;
struct usb2_device *hub;
- if (f->flag_no_uref) {
- /* control endpoint only */
- return (EINVAL);
- }
udev = f->udev;
bzero(di, sizeof(di[0]));
@@ -919,10 +887,6 @@ ugen_do_request(struct usb2_fifo *f, struct usb2_ctl_request *ur)
uint16_t len;
uint16_t actlen;
- if (f->flag_no_uref) {
- /* control endpoint only */
- return (EINVAL);
- }
if (ugen_check_request(f->udev, &ur->ucr_request)) {
return (EPERM);
}
@@ -958,10 +922,6 @@ ugen_re_enumerate(struct usb2_fifo *f)
struct usb2_device *udev = f->udev;
int error;
- if (f->flag_no_uref) {
- /* control endpoint only */
- return (EINVAL);
- }
/*
* This request can be useful for testing USB drivers:
*/
@@ -969,6 +929,12 @@ ugen_re_enumerate(struct usb2_fifo *f)
if (error) {
return (error);
}
+ /* get the device unconfigured */
+ error = ugen_set_config(f, USB_UNCONFIG_INDEX);
+ if (error) {
+ return (error);
+ }
+ /* do a bus-reset */
mtx_lock(f->priv_mtx);
error = usb2_req_re_enumerate(udev, f->priv_mtx);
mtx_unlock(f->priv_mtx);
@@ -976,10 +942,15 @@ ugen_re_enumerate(struct usb2_fifo *f)
if (error) {
return (ENXIO);
}
+ /* restore configuration to index 0 */
+ error = ugen_set_config(f, 0);
+ if (error) {
+ return (error);
+ }
return (0);
}
-static int
+int
ugen_fs_uninit(struct usb2_fifo *f)
{
if (f->fs_xfer == NULL) {
@@ -991,7 +962,6 @@ ugen_fs_uninit(struct usb2_fifo *f)
f->fs_ep_max = 0;
f->fs_ep_ptr = NULL;
f->flag_iscomplete = 0;
- f->flag_no_uref = 0; /* restore operation */
usb2_fifo_free_buffer(f);
return (0);
}
@@ -1393,7 +1363,8 @@ ugen_fifo_in_use(struct usb2_fifo *f, int fflags)
}
static int
-ugen_fs_ioctl(struct usb2_fifo *f, u_long cmd, void *addr, int fflags)
+ugen_ioctl(struct usb2_fifo *f, u_long cmd, void *addr, int fflags,
+ struct thread *td)
{
struct usb2_config usb2_config[1];
struct usb2_device_request req;
@@ -1401,8 +1372,6 @@ ugen_fs_ioctl(struct usb2_fifo *f, u_long cmd, void *addr, int fflags)
struct usb2_fs_complete *pcomp;
struct usb2_fs_start *pstart;
struct usb2_fs_stop *pstop;
- struct usb2_fs_init *pinit;
- struct usb2_fs_uninit *puninit;
struct usb2_fs_open *popen;
struct usb2_fs_close *pclose;
struct usb2_fs_clear_stall_sync *pstall;
@@ -1417,6 +1386,8 @@ ugen_fs_ioctl(struct usb2_fifo *f, u_long cmd, void *addr, int fflags)
u.addr = addr;
+ DPRINTFN(6, "cmd=0x%08lx\n", cmd);
+
switch (cmd) {
case USB_FS_COMPLETE:
mtx_lock(f->priv_mtx);
@@ -1451,59 +1422,6 @@ ugen_fs_ioctl(struct usb2_fifo *f, u_long cmd, void *addr, int fflags)
mtx_unlock(f->priv_mtx);
break;
- case USB_FS_INIT:
- /* verify input parameters */
- if (u.pinit->pEndpoints == NULL) {
- error = EINVAL;
- break;
- }
- if (u.pinit->ep_index_max > 127) {
- error = EINVAL;
- break;
- }
- if (u.pinit->ep_index_max == 0) {
- error = EINVAL;
- break;
- }
- if (f->fs_xfer != NULL) {
- error = EBUSY;
- break;
- }
- if (f->flag_no_uref) {
- error = EINVAL;
- break;
- }
- if (f->dev_ep_index != 0) {
- error = EINVAL;
- break;
- }
- if (ugen_fifo_in_use(f, fflags)) {
- error = EBUSY;
- break;
- }
- error = usb2_fifo_alloc_buffer(f, 1, u.pinit->ep_index_max);
- if (error) {
- break;
- }
- f->fs_xfer = malloc(sizeof(f->fs_xfer[0]) *
- u.pinit->ep_index_max, M_USB, M_WAITOK | M_ZERO);
- if (f->fs_xfer == NULL) {
- usb2_fifo_free_buffer(f);
- error = ENOMEM;
- break;
- }
- f->fs_ep_max = u.pinit->ep_index_max;
- f->fs_ep_ptr = u.pinit->pEndpoints;
- break;
-
- case USB_FS_UNINIT:
- if (u.puninit->dummy != 0) {
- error = EINVAL;
- break;
- }
- error = ugen_fs_uninit(f);
- break;
-
case USB_FS_OPEN:
if (u.popen->ep_index >= f->fs_ep_max) {
error = EINVAL;
@@ -1591,11 +1509,6 @@ ugen_fs_ioctl(struct usb2_fifo *f, u_long cmd, void *addr, int fflags)
f->fs_xfer[u.popen->ep_index]->max_data_length;
f->fs_xfer[u.popen->ep_index]->priv_fifo =
((uint8_t *)0) + u.popen->ep_index;
- /*
- * Increase performance by dropping locks we
- * don't need:
- */
- f->flag_no_uref = 1;
} else {
error = ENOMEM;
}
@@ -1652,9 +1565,12 @@ ugen_fs_ioctl(struct usb2_fifo *f, u_long cmd, void *addr, int fflags)
break;
default:
- error = ENOTTY;
+ error = ENOIOCTL;
break;
}
+
+ DPRINTFN(6, "error=%d\n", error);
+
return (error);
}
@@ -2007,14 +1923,15 @@ ugen_iface_ioctl(struct usb2_fifo *f, u_long cmd, void *addr, int fflags)
break;
default:
- error = ENOTTY;
+ error = ENOIOCTL;
break;
}
return (error);
}
static int
-ugen_ctrl_ioctl(struct usb2_fifo *f, u_long cmd, void *addr, int fflags)
+ugen_ioctl_post(struct usb2_fifo *f, u_long cmd, void *addr, int fflags,
+ struct thread *td)
{
union {
struct usb2_interface_descriptor *idesc;
@@ -2022,6 +1939,8 @@ ugen_ctrl_ioctl(struct usb2_fifo *f, u_long cmd, void *addr, int fflags)
struct usb2_device_descriptor *ddesc;
struct usb2_config_descriptor *cdesc;
struct usb2_device_stats *stat;
+ struct usb2_fs_init *pinit;
+ struct usb2_fs_uninit *puninit;
uint32_t *ptime;
void *addr;
int *pint;
@@ -2034,6 +1953,8 @@ ugen_ctrl_ioctl(struct usb2_fifo *f, u_long cmd, void *addr, int fflags)
u.addr = addr;
+ DPRINTFN(6, "cmd=0x%08lx\n", cmd);
+
switch (cmd) {
case USB_DISCOVER:
usb2_needs_explore_all();
@@ -2178,29 +2099,60 @@ ugen_ctrl_ioctl(struct usb2_fifo *f, u_long cmd, void *addr, int fflags)
*u.pint, 0, UHF_PORT_ENABLE);
break;
- default:
- error = EINVAL;
+ case USB_FS_INIT:
+ /* verify input parameters */
+ if (u.pinit->pEndpoints == NULL) {
+ error = EINVAL;
+ break;
+ }
+ if (u.pinit->ep_index_max > 127) {
+ error = EINVAL;
+ break;
+ }
+ if (u.pinit->ep_index_max == 0) {
+ error = EINVAL;
+ break;
+ }
+ if (f->fs_xfer != NULL) {
+ error = EBUSY;
+ break;
+ }
+ if (f->dev_ep_index != 0) {
+ error = EINVAL;
+ break;
+ }
+ if (ugen_fifo_in_use(f, fflags)) {
+ error = EBUSY;
+ break;
+ }
+ error = usb2_fifo_alloc_buffer(f, 1, u.pinit->ep_index_max);
+ if (error) {
+ break;
+ }
+ f->fs_xfer = malloc(sizeof(f->fs_xfer[0]) *
+ u.pinit->ep_index_max, M_USB, M_WAITOK | M_ZERO);
+ if (f->fs_xfer == NULL) {
+ usb2_fifo_free_buffer(f);
+ error = ENOMEM;
+ break;
+ }
+ f->fs_ep_max = u.pinit->ep_index_max;
+ f->fs_ep_ptr = u.pinit->pEndpoints;
break;
- }
- return (error);
-}
-
-static int
-ugen_ioctl(struct usb2_fifo *f, u_long cmd, void *addr, int fflags,
- struct thread *td)
-{
- int error;
- DPRINTFN(6, "cmd=%08lx\n", cmd);
- error = ugen_fs_ioctl(f, cmd, addr, fflags);
- if (error == ENOTTY) {
- if (f->flag_no_uref) {
- mtx_lock(f->priv_mtx);
- error = ugen_iface_ioctl(f, cmd, addr, fflags);
- mtx_unlock(f->priv_mtx);
- } else {
- error = ugen_ctrl_ioctl(f, cmd, addr, fflags);
+ case USB_FS_UNINIT:
+ if (u.puninit->dummy != 0) {
+ error = EINVAL;
+ break;
}
+ error = ugen_fs_uninit(f);
+ break;
+
+ default:
+ mtx_lock(f->priv_mtx);
+ error = ugen_iface_ioctl(f, cmd, addr, fflags);
+ mtx_unlock(f->priv_mtx);
+ break;
}
DPRINTFN(6, "error=%d\n", error);
return (error);
diff --git a/sys/dev/usb2/core/usb2_generic.h b/sys/dev/usb2/core/usb2_generic.h
index 3a4e7c9..93b341a 100644
--- a/sys/dev/usb2/core/usb2_generic.h
+++ b/sys/dev/usb2/core/usb2_generic.h
@@ -29,5 +29,6 @@
extern struct usb2_fifo_methods usb2_ugen_methods;
int ugen_do_request(struct usb2_fifo *f, struct usb2_ctl_request *ur);
+int ugen_fs_uninit(struct usb2_fifo *f);
#endif /* _USB2_GENERIC_H_ */
diff --git a/sys/dev/usb2/core/usb2_hub.c b/sys/dev/usb2/core/usb2_hub.c
index 7cc23cc..b5336a9 100644
--- a/sys/dev/usb2/core/usb2_hub.c
+++ b/sys/dev/usb2/core/usb2_hub.c
@@ -72,6 +72,7 @@ struct uhub_softc {
struct usb2_device *sc_udev; /* USB device */
struct usb2_xfer *sc_xfer[2]; /* interrupt xfer */
uint8_t sc_flags;
+#define UHUB_FLAG_DID_EXPLORE 0x01
#define UHUB_FLAG_INTR_STALL 0x02
char sc_name[32];
};
@@ -511,6 +512,14 @@ uhub_explore(struct usb2_device *udev)
/* most likely the HUB is gone */
break;
}
+ if (!(sc->sc_flags & UHUB_FLAG_DID_EXPLORE)) {
+ /*
+ * Fake a connect status change so that the
+ * status gets checked initially!
+ */
+ sc->sc_st.port_change |=
+ UPS_C_CONNECT_STATUS;
+ }
if (sc->sc_st.port_change & UPS_C_PORT_ENABLED) {
err = usb2_req_clear_port_feature(
udev, &Giant, portno, UHF_C_PORT_ENABLE);
@@ -533,7 +542,8 @@ uhub_explore(struct usb2_device *udev)
DPRINTFN(0, "port error, giving up "
"port %d\n", portno);
} else {
- sc->sc_st.port_change |= UPS_C_CONNECT_STATUS;
+ sc->sc_st.port_change |=
+ UPS_C_CONNECT_STATUS;
up->restartcnt++;
}
}
@@ -560,6 +570,11 @@ uhub_explore(struct usb2_device *udev)
/* explore succeeded - reset restart counter */
up->restartcnt = 0;
}
+
+ /* initial status checked */
+ sc->sc_flags |= UHUB_FLAG_DID_EXPLORE;
+
+ /* return success */
return (USB_ERR_NORMAL_COMPLETION);
}
diff --git a/sys/dev/usb2/core/usb2_request.c b/sys/dev/usb2/core/usb2_request.c
index e91d27d..bfb3bbb 100644
--- a/sys/dev/usb2/core/usb2_request.c
+++ b/sys/dev/usb2/core/usb2_request.c
@@ -686,24 +686,26 @@ usb2_req_get_string_any(struct usb2_device *udev, struct mtx *mtx, char *buf,
/* should not happen */
return (USB_ERR_NORMAL_COMPLETION);
}
- buf[0] = 0;
-
if (string_index == 0) {
/* this is the language table */
+ buf[0] = 0;
return (USB_ERR_INVAL);
}
if (udev->flags.no_strings) {
+ buf[0] = 0;
return (USB_ERR_STALLED);
}
err = usb2_req_get_string_desc
(udev, mtx, buf, len, udev->langid, string_index);
if (err) {
+ buf[0] = 0;
return (err);
}
temp = (uint8_t *)buf;
if (temp[0] < 2) {
/* string length is too short */
+ buf[0] = 0;
return (USB_ERR_INVAL);
}
/* reserve one byte for terminating zero */
@@ -735,7 +737,8 @@ usb2_req_get_string_any(struct usb2_device *udev, struct mtx *mtx, char *buf,
*s = c >> 8;
swap = 2;
} else {
- *s = '.';
+ /* silently skip bad character */
+ continue;
}
/*
@@ -743,11 +746,12 @@ usb2_req_get_string_any(struct usb2_device *udev, struct mtx *mtx, char *buf,
* signs because they might confuse the dmesg printouts!
*/
if ((*s == '<') || (*s == '>') || (!isprint(*s))) {
- *s = '.';
+ /* silently skip bad character */
+ continue;
}
s++;
}
- *s = 0;
+ *s = 0; /* zero terminate resulting string */
return (USB_ERR_NORMAL_COMPLETION);
}
@@ -1310,6 +1314,10 @@ usb2_req_get_config(struct usb2_device *udev, struct mtx *mtx, uint8_t *pconf)
/*------------------------------------------------------------------------*
* usb2_req_re_enumerate
*
+ * NOTE: After this function returns the hardware is in the
+ * unconfigured state! The application is responsible for setting a
+ * new configuration.
+ *
* Returns:
* 0: Success
* Else: Failure
@@ -1365,12 +1373,5 @@ usb2_req_re_enumerate(struct usb2_device *udev, struct mtx *mtx)
done:
/* restore address */
udev->address = old_addr;
-
- if (err == 0) {
- /* restore configuration */
- err = usb2_req_set_config(udev, mtx, udev->curr_config_no);
- /* wait a little bit, just in case */
- usb2_pause_mtx(mtx, 10);
- }
return (err);
}
diff --git a/sys/dev/usb2/core/usb2_util.c b/sys/dev/usb2/core/usb2_util.c
index d944e44..7edb9a5 100644
--- a/sys/dev/usb2/core/usb2_util.c
+++ b/sys/dev/usb2/core/usb2_util.c
@@ -89,7 +89,7 @@ device_set_usb2_desc(device_t dev)
}
uaa = device_get_ivars(dev);
if (uaa == NULL) {
- /* can happend if called at the wrong time */
+ /* can happen if called at the wrong time */
return;
}
udev = uaa->device;
diff --git a/sys/dev/usb2/core/usbdevs b/sys/dev/usb2/core/usbdevs
deleted file mode 100644
index 8fa1cf1..0000000
--- a/sys/dev/usb2/core/usbdevs
+++ /dev/null
@@ -1,2482 +0,0 @@
-$FreeBSD$
-/* $NetBSD: usbdevs,v 1.392 2004/12/29 08:38:44 imp Exp $ */
-
-/*-
- * Copyright (c) 1998-2004 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Lennart Augustsson (lennart@augustsson.net) at
- * Carlstedt Research & Technology.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * List of known USB vendors
- *
- * USB.org publishes a VID list of USB-IF member companies at
- * http://www.usb.org/developers/tools
- * Note that it does not show companies that have obtained a Vendor ID
- * without becoming full members.
- *
- * Please note that these IDs do not do anything. Adding an ID here and
- * regenerating the usbdevs.h and usbdevs_data.h only makes a symbolic name
- * available to the source code and does not change any functionality, nor
- * does it make your device available to a specific driver.
- * It will however make the descriptive string available if a device does not
- * provide the string itself.
- *
- * After adding a vendor ID VNDR and a product ID PRDCT you will have the
- * following extra defines:
- * #define USB_VENDOR_VNDR 0x????
- * #define USB_PRODUCT_VNDR_PRDCT 0x????
- *
- * You may have to add these defines to the respective probe routines to
- * make the device recognised by the appropriate device driver.
- */
-
-vendor UNKNOWN1 0x0053 Unknown vendor
-vendor UNKNOWN2 0x0105 Unknown vendor
-vendor EGALAX2 0x0123 eGalax, Inc.
-vendor HUMAX 0x02ad HUMAX
-vendor LTS 0x0386 LTS
-vendor BWCT 0x03da Bernd Walter Computer Technology
-vendor AOX 0x03e8 AOX
-vendor THESYS 0x03e9 Thesys
-vendor DATABROADCAST 0x03ea Data Broadcasting
-vendor ATMEL 0x03eb Atmel
-vendor IWATSU 0x03ec Iwatsu America
-vendor MITSUMI 0x03ee Mitsumi
-vendor HP 0x03f0 Hewlett Packard
-vendor GENOA 0x03f1 Genoa
-vendor OAK 0x03f2 Oak
-vendor ADAPTEC 0x03f3 Adaptec
-vendor DIEBOLD 0x03f4 Diebold
-vendor SIEMENSELECTRO 0x03f5 Siemens Electromechanical
-vendor EPSONIMAGING 0x03f8 Epson Imaging
-vendor KEYTRONIC 0x03f9 KeyTronic
-vendor OPTI 0x03fb OPTi
-vendor ELITEGROUP 0x03fc Elitegroup
-vendor XILINX 0x03fd Xilinx
-vendor FARALLON 0x03fe Farallon Communications
-vendor NATIONAL 0x0400 National Semiconductor
-vendor NATIONALREG 0x0401 National Registry
-vendor ACERLABS 0x0402 Acer Labs
-vendor FTDI 0x0403 Future Technology Devices
-vendor NCR 0x0404 NCR
-vendor SYNOPSYS2 0x0405 Synopsys
-vendor FUJITSUICL 0x0406 Fujitsu-ICL
-vendor FUJITSU2 0x0407 Fujitsu Personal Systems
-vendor QUANTA 0x0408 Quanta
-vendor NEC 0x0409 NEC
-vendor KODAK 0x040a Eastman Kodak
-vendor WELTREND 0x040b Weltrend
-vendor VIA 0x040d VIA
-vendor MCCI 0x040e MCCI
-vendor MELCO 0x0411 Melco
-vendor LEADTEK 0x0413 Leadtek
-vendor WINBOND 0x0416 Winbond
-vendor PHOENIX 0x041a Phoenix
-vendor CREATIVE 0x041e Creative Labs
-vendor NOKIA 0x0421 Nokia
-vendor ADI 0x0422 ADI Systems
-vendor CATC 0x0423 Computer Access Technology
-vendor SMC2 0x0424 Standard Microsystems
-vendor MOTOROLA_HK 0x0425 Motorola HK
-vendor GRAVIS 0x0428 Advanced Gravis Computer
-vendor CIRRUSLOGIC 0x0429 Cirrus Logic
-vendor INNOVATIVE 0x042c Innovative Semiconductors
-vendor MOLEX 0x042f Molex
-vendor SUN 0x0430 Sun Microsystems
-vendor UNISYS 0x0432 Unisys
-vendor TAUGA 0x0436 Taugagreining HF
-vendor AMD 0x0438 Advanced Micro Devices
-vendor LEXMARK 0x043d Lexmark International
-vendor LG 0x043e LG Electronics
-vendor NANAO 0x0440 NANAO
-vendor GATEWAY 0x0443 Gateway 2000
-vendor NMB 0x0446 NMB
-vendor ALPS 0x044e Alps Electric
-vendor THRUST 0x044f Thrustmaster
-vendor TI 0x0451 Texas Instruments
-vendor ANALOGDEVICES 0x0456 Analog Devices
-vendor SIS 0x0457 Silicon Integrated Systems Corp.
-vendor KYE 0x0458 KYE Systems
-vendor DIAMOND2 0x045a Diamond (Supra)
-vendor RENESAS 0x045b Renesas
-vendor MICROSOFT 0x045e Microsoft
-vendor PRIMAX 0x0461 Primax Electronics
-vendor MGE 0x0463 MGE UPS Systems
-vendor AMP 0x0464 AMP
-vendor CHERRY 0x046a Cherry Mikroschalter
-vendor MEGATRENDS 0x046b American Megatrends
-vendor LOGITECH 0x046d Logitech
-vendor BTC 0x046e Behavior Tech. Computer
-vendor PHILIPS 0x0471 Philips
-vendor SUN2 0x0472 Sun Microsystems (offical)
-vendor SANYO 0x0474 Sanyo Electric
-vendor SEAGATE 0x0477 Seagate
-vendor CONNECTIX 0x0478 Connectix
-vendor SEMTECH 0x047a Semtech
-vendor KENSINGTON 0x047d Kensington
-vendor LUCENT 0x047e Lucent
-vendor PLANTRONICS 0x047f Plantronics
-vendor KYOCERA 0x0482 Kyocera Wireless Corp.
-vendor STMICRO 0x0483 STMicroelectronics
-vendor FOXCONN 0x0489 Foxconn
-vendor YAMAHA 0x0499 YAMAHA
-vendor COMPAQ 0x049f Compaq
-vendor HITACHI 0x04a4 Hitachi
-vendor ACERP 0x04a5 Acer Peripherals
-vendor DAVICOM 0x04a6 Davicom
-vendor VISIONEER 0x04a7 Visioneer
-vendor CANON 0x04a9 Canon
-vendor NIKON 0x04b0 Nikon
-vendor PAN 0x04b1 Pan International
-vendor IBM 0x04b3 IBM
-vendor CYPRESS 0x04b4 Cypress Semiconductor
-vendor ROHM 0x04b5 ROHM
-vendor COMPAL 0x04b7 Compal
-vendor EPSON 0x04b8 Seiko Epson
-vendor RAINBOW 0x04b9 Rainbow Technologies
-vendor IODATA 0x04bb I-O Data
-vendor TDK 0x04bf TDK
-vendor 3COMUSR 0x04c1 U.S. Robotics
-vendor METHODE 0x04c2 Methode Electronics Far East
-vendor MAXISWITCH 0x04c3 Maxi Switch
-vendor LOCKHEEDMER 0x04c4 Lockheed Martin Energy Research
-vendor FUJITSU 0x04c5 Fujitsu
-vendor TOSHIBAAM 0x04c6 Toshiba America
-vendor MICROMACRO 0x04c7 Micro Macro Technologies
-vendor KONICA 0x04c8 Konica
-vendor LITEON 0x04ca Lite-On Technology
-vendor FUJIPHOTO 0x04cb Fuji Photo Film
-vendor PHILIPSSEMI 0x04cc Philips Semiconductors
-vendor TATUNG 0x04cd Tatung Co. Of America
-vendor SCANLOGIC 0x04ce ScanLogic
-vendor MYSON 0x04cf Myson Technology
-vendor DIGI2 0x04d0 Digi
-vendor ITTCANON 0x04d1 ITT Canon
-vendor ALTEC 0x04d2 Altec Lansing
-vendor LSI 0x04d4 LSI
-vendor MENTORGRAPHICS 0x04d6 Mentor Graphics
-vendor ITUNERNET 0x04d8 I-Tuner Networks
-vendor HOLTEK 0x04d9 Holtek Semiconductor, Inc.
-vendor PANASONIC 0x04da Panasonic (Matsushita)
-vendor HUANHSIN 0x04dc Huan Hsin
-vendor SHARP 0x04dd Sharp
-vendor IIYAMA 0x04e1 Iiyama
-vendor SHUTTLE 0x04e6 Shuttle Technology
-vendor ELO 0x04e7 Elo TouchSystems
-vendor SAMSUNG 0x04e8 Samsung Electronics
-vendor NORTHSTAR 0x04eb Northstar
-vendor TOKYOELECTRON 0x04ec Tokyo Electron
-vendor ANNABOOKS 0x04ed Annabooks
-vendor JVC 0x04f1 JVC
-vendor CHICONY 0x04f2 Chicony Electronics
-vendor ELAN 0x04f3 Elan
-vendor NEWNEX 0x04f7 Newnex
-vendor BROTHER 0x04f9 Brother Industries
-vendor DALLAS 0x04fa Dallas Semiconductor
-vendor SUNPLUS 0x04fc Sunplus
-vendor PFU 0x04fe PFU
-vendor FUJIKURA 0x0501 Fujikura/DDK
-vendor ACER 0x0502 Acer
-vendor 3COM 0x0506 3Com
-vendor HOSIDEN 0x0507 Hosiden Corporation
-vendor AZTECH 0x0509 Aztech Systems
-vendor BELKIN 0x050d Belkin Components
-vendor KAWATSU 0x050f Kawatsu Semiconductor
-vendor FCI 0x0514 FCI
-vendor LONGWELL 0x0516 Longwell
-vendor COMPOSITE 0x0518 Composite
-vendor STAR 0x0519 Star Micronics
-vendor APC 0x051d American Power Conversion
-vendor SCIATLANTA 0x051e Scientific Atlanta
-vendor TSM 0x0520 TSM
-vendor CONNECTEK 0x0522 Advanced Connectek USA
-vendor NETCHIP 0x0525 NetChip Technology
-vendor ALTRA 0x0527 ALTRA
-vendor ATI 0x0528 ATI Technologies
-vendor AKS 0x0529 Aladdin Knowledge Systems
-vendor TEKOM 0x052b Tekom
-vendor CANONDEV 0x052c Canon
-vendor WACOMTECH 0x0531 Wacom
-vendor INVENTEC 0x0537 Inventec
-vendor SHYHSHIUN 0x0539 Shyh Shiun Terminals
-vendor PREHWERKE 0x053a Preh Werke Gmbh & Co. KG
-vendor SYNOPSYS 0x053f Synopsys
-vendor UNIACCESS 0x0540 Universal Access
-vendor VIEWSONIC 0x0543 ViewSonic
-vendor XIRLINK 0x0545 Xirlink
-vendor ANCHOR 0x0547 Anchor Chips
-vendor SONY 0x054c Sony
-vendor FUJIXEROX 0x0550 Fuji Xerox
-vendor VISION 0x0553 VLSI Vision
-vendor ASAHIKASEI 0x0556 Asahi Kasei Microsystems
-vendor ATEN 0x0557 ATEN International
-vendor SAMSUNG2 0x055d Samsung Electronics
-vendor MUSTEK 0x055f Mustek Systems
-vendor TELEX 0x0562 Telex Communications
-vendor CHINON 0x0564 Chinon
-vendor PERACOM 0x0565 Peracom Networks
-vendor ALCOR2 0x0566 Alcor Micro
-vendor XYRATEX 0x0567 Xyratex
-vendor WACOM 0x056a WACOM
-vendor ETEK 0x056c e-TEK Labs
-vendor EIZO 0x056d EIZO
-vendor ELECOM 0x056e Elecom
-vendor CONEXANT 0x0572 Conexant
-vendor HAUPPAUGE 0x0573 Hauppauge Computer Works
-vendor BAFO 0x0576 BAFO/Quality Computer Accessories
-vendor YEDATA 0x057b Y-E Data
-vendor AVM 0x057c AVM
-vendor QUICKSHOT 0x057f Quickshot
-vendor ROLAND 0x0582 Roland
-vendor ROCKFIRE 0x0583 Rockfire
-vendor RATOC 0x0584 RATOC Systems
-vendor ZYXEL 0x0586 ZyXEL Communication
-vendor INFINEON 0x058b Infineon
-vendor MICREL 0x058d Micrel
-vendor ALCOR 0x058f Alcor Micro
-vendor OMRON 0x0590 OMRON
-vendor ZORAN 0x0595 Zoran Microelectronics
-vendor NIIGATA 0x0598 Niigata
-vendor IOMEGA 0x059b Iomega
-vendor ATREND 0x059c A-Trend Technology
-vendor AID 0x059d Advanced Input Devices
-vendor LACIE 0x059f LaCie
-vendor FUJIFILM 0x05a2 Fuji Film
-vendor ARC 0x05a3 ARC
-vendor ORTEK 0x05a4 Ortek
-vendor BOSE 0x05a7 Bose
-vendor OMNIVISION 0x05a9 OmniVision
-vendor INSYSTEM 0x05ab In-System Design
-vendor APPLE 0x05ac Apple Computer
-vendor YCCABLE 0x05ad Y.C. Cable
-vendor DIGITALPERSONA 0x05ba DigitalPersona
-vendor 3G 0x05bc 3G Green Green Globe
-vendor RAFI 0x05bd RAFI
-vendor TYCO 0x05be Tyco
-vendor KAWASAKI 0x05c1 Kawasaki
-vendor DIGI 0x05c5 Digi International
-vendor QUALCOMM2 0x05c6 Qualcomm
-vendor QTRONIX 0x05c7 Qtronix
-vendor FOXLINK 0x05c8 Foxlink
-vendor RICOH 0x05ca Ricoh
-vendor ELSA 0x05cc ELSA
-vendor SCIWORX 0x05ce sci-worx
-vendor BRAINBOXES 0x05d1 Brainboxes Limited
-vendor ULTIMA 0x05d8 Ultima
-vendor AXIOHM 0x05d9 Axiohm Transaction Solutions
-vendor MICROTEK 0x05da Microtek
-vendor SUNTAC 0x05db SUN Corporation
-vendor LEXAR 0x05dc Lexar Media
-vendor ADDTRON 0x05dd Addtron
-vendor SYMBOL 0x05e0 Symbol Technologies
-vendor SYNTEK 0x05e1 Syntek
-vendor GENESYS 0x05e3 Genesys Logic
-vendor FUJI 0x05e5 Fuji Electric
-vendor KEITHLEY 0x05e6 Keithley Instruments
-vendor EIZONANAO 0x05e7 EIZO Nanao
-vendor KLSI 0x05e9 Kawasaki LSI
-vendor FFC 0x05eb FFC
-vendor ANKO 0x05ef Anko Electronic
-vendor PIENGINEERING 0x05f3 P.I. Engineering
-vendor AOC 0x05f6 AOC International
-vendor CHIC 0x05fe Chic Technology
-vendor BARCO 0x0600 Barco Display Systems
-vendor BRIDGE 0x0607 Bridge Information
-vendor SOLIDYEAR 0x060b Solid Year
-vendor BIORAD 0x0614 Bio-Rad Laboratories
-vendor MACALLY 0x0618 Macally
-vendor ACTLABS 0x061c Act Labs
-vendor ALARIS 0x0620 Alaris
-vendor APEX 0x0624 Apex
-vendor CREATIVE3 0x062a Creative Labs
-vendor VIVITAR 0x0636 Vivitar
-vendor GUNZE 0x0637 Gunze Electronics USA
-vendor AVISION 0x0638 Avision
-vendor TEAC 0x0644 TEAC
-vendor SGI 0x065e Silicon Graphics
-vendor SANWASUPPLY 0x0663 Sanwa Supply
-vendor LINKSYS 0x066b Linksys
-vendor ACERSA 0x066e Acer Semiconductor America
-vendor SIGMATEL 0x066f Sigmatel
-vendor DRAYTEK 0x0675 DrayTek
-vendor AIWA 0x0677 Aiwa
-vendor ACARD 0x0678 ACARD Technology
-vendor PROLIFIC 0x067b Prolific Technology
-vendor SIEMENS 0x067c Siemens
-vendor AVANCELOGIC 0x0680 Avance Logic
-vendor SIEMENS2 0x0681 Siemens
-vendor MINOLTA 0x0686 Minolta
-vendor CHPRODUCTS 0x068e CH Products
-vendor HAGIWARA 0x0693 Hagiwara Sys-Com
-vendor CTX 0x0698 Chuntex
-vendor ASKEY 0x069a Askey Computer
-vendor SAITEK 0x06a3 Saitek
-vendor ALCATELT 0x06b9 Alcatel Telecom
-vendor AGFA 0x06bd AGFA-Gevaert
-vendor ASIAMD 0x06be Asia Microelectronic Development
-vendor BIZLINK 0x06c4 Bizlink International
-vendor KEYSPAN 0x06cd Keyspan / InnoSys Inc.
-vendor AASHIMA 0x06d6 Aashima Technology
-vendor MULTITECH 0x06e0 MultiTech
-vendor ADS 0x06e1 ADS Technologies
-vendor ALCATELM 0x06e4 Alcatel Microelectronics
-vendor SIRIUS 0x06ea Sirius Technologies
-vendor GUILLEMOT 0x06f8 Guillemot
-vendor BOSTON 0x06fd Boston Acoustics
-vendor SMC 0x0707 Standard Microsystems
-vendor PUTERCOM 0x0708 Putercom
-vendor MCT 0x0711 MCT
-vendor IMATION 0x0718 Imation
-vendor SONYERICSSON 0x0731 Sony Ericsson
-vendor EICON 0x0734 Eicon Networks
-vendor SYNTECH 0x0745 Syntech Information
-vendor DIGITALSTREAM 0x074e Digital Stream
-vendor AUREAL 0x0755 Aureal Semiconductor
-vendor MIDIMAN 0x0763 Midiman
-vendor CYBERPOWER 0x0764 Cyber Power Systems, Inc.
-vendor SURECOM 0x0769 Surecom Technology
-vendor LINKSYS2 0x077b Linksys
-vendor GRIFFIN 0x077d Griffin Technology
-vendor SANDISK 0x0781 SanDisk
-vendor JENOPTIK 0x0784 Jenoptik
-vendor LOGITEC 0x0789 Logitec
-vendor BRIMAX 0x078e Brimax
-vendor AXIS 0x0792 Axis Communications
-vendor ABL 0x0794 ABL Electronics
-vendor SAGEM 0x079b Sagem
-vendor SUNCOMM 0x079c Sun Communications, Inc.
-vendor ALFADATA 0x079d Alfadata Computer
-vendor NATIONALTECH 0x07a2 National Technical Systems
-vendor ONNTO 0x07a3 Onnto
-vendor BE 0x07a4 Be
-vendor ADMTEK 0x07a6 ADMtek
-vendor COREGA 0x07aa Corega
-vendor FREECOM 0x07ab Freecom
-vendor MICROTECH 0x07af Microtech
-vendor GENERALINSTMNTS 0x07b2 General Instruments (Motorola)
-vendor OLYMPUS 0x07b4 Olympus
-vendor ABOCOM 0x07b8 AboCom Systems
-vendor KEISOKUGIKEN 0x07c1 Keisokugiken
-vendor ONSPEC 0x07c4 OnSpec
-vendor APG 0x07c5 APG Cash Drawer
-vendor BUG 0x07c8 B.U.G.
-vendor ALLIEDTELESYN 0x07c9 Allied Telesyn International
-vendor AVERMEDIA 0x07ca AVerMedia Technologies
-vendor SIIG 0x07cc SIIG
-vendor CASIO 0x07cf CASIO
-vendor DLINK2 0x07d1 D-Link
-vendor APTIO 0x07d2 Aptio Products
-vendor ARASAN 0x07da Arasan Chip Systems
-vendor ALLIEDCABLE 0x07e6 Allied Cable
-vendor STSN 0x07ef STSN
-vendor CENTURY 0x07f7 Century Corp
-vendor ZOOM 0x0803 Zoom Telephonics
-vendor PCS 0x0810 Personal Communication Systems
-vendor BROADLOGIC 0x0827 BroadLogic
-vendor HANDSPRING 0x082d Handspring
-vendor PALM 0x0830 Palm Computing
-vendor SOURCENEXT 0x0833 SOURCENEXT
-vendor ACTIONSTAR 0x0835 Action Star Enterprise
-vendor SAMSUNG_TECHWIN 0x0839 Samsung Techwin
-vendor ACCTON 0x083a Accton Technology
-vendor DIAMOND 0x0841 Diamond
-vendor NETGEAR 0x0846 BayNETGEAR
-vendor TOPRE 0x0853 Topre Corporation
-vendor ACTIVEWIRE 0x0854 ActiveWire
-vendor BBELECTRONICS 0x0856 B&B Electronics
-vendor PORTGEAR 0x085a PortGear
-vendor NETGEAR2 0x0864 Netgear
-vendor SYSTEMTALKS 0x086e System Talks
-vendor METRICOM 0x0870 Metricom
-vendor ADESSOKBTEK 0x087c ADESSO/Kbtek America
-vendor JATON 0x087d Jaton
-vendor APT 0x0880 APT Technologies
-vendor BOCARESEARCH 0x0885 Boca Research
-vendor ANDREA 0x08a8 Andrea Electronics
-vendor BURRBROWN 0x08bb Burr-Brown Japan
-vendor 2WIRE 0x08c8 2Wire
-vendor AIPTEK 0x08ca AIPTEK International
-vendor SMARTBRIDGES 0x08d1 SmartBridges
-vendor BILLIONTON 0x08dd Billionton Systems
-vendor EXTENDED 0x08e9 Extended Systems
-vendor MSYSTEMS 0x08ec M-Systems
-vendor AUTHENTEC 0x08ff AuthenTec
-vendor AUDIOTECHNICA 0x0909 Audio-Technica
-vendor TRUMPION 0x090a Trumpion Microelectronics
-vendor FEIYA 0x090c Feiya
-vendor ALATION 0x0910 Alation Systems
-vendor GLOBESPAN 0x0915 Globespan
-vendor CONCORDCAMERA 0x0919 Concord Camera
-vendor GARMIN 0x091e Garmin International
-vendor GOHUBS 0x0921 GoHubs
-vendor XEROX 0x0924 Xerox
-vendor BIOMETRIC 0x0929 American Biometric Company
-vendor TOSHIBA 0x0930 Toshiba
-vendor PLEXTOR 0x093b Plextor
-vendor INTREPIDCS 0x093c Intrepid
-vendor YANO 0x094f Yano
-vendor KINGSTON 0x0951 Kingston Technology
-vendor BLUEWATER 0x0956 BlueWater Systems
-vendor AGILENT 0x0957 Agilent Technologies
-vendor GUDE 0x0959 Gude ADS
-vendor PORTSMITH 0x095a Portsmith
-vendor ACERW 0x0967 Acer
-vendor ADIRONDACK 0x0976 Adirondack Wire & Cable
-vendor BECKHOFF 0x0978 Beckhoff
-vendor MINDSATWORK 0x097a Minds At Work
-vendor POINTCHIPS 0x09a6 PointChips
-vendor INTERSIL 0x09aa Intersil
-vendor ALTIUS 0x09b3 Altius Solutions
-vendor ARRIS 0x09c1 Arris Interactive
-vendor ACTIVCARD 0x09c3 ACTIVCARD
-vendor ACTISYS 0x09c4 ACTiSYS
-vendor NOVATEL2 0x09d7 Novatel Wireless
-vendor AFOURTECH 0x09da A-FOUR TECH
-vendor AIMEX 0x09dc AIMEX
-vendor ADDONICS 0x09df Addonics Technologies
-vendor AKAI 0x09e8 AKAI professional M.I.
-vendor ARESCOM 0x09f5 ARESCOM
-vendor BAY 0x09f9 Bay Associates
-vendor ALTERA 0x09fb Altera
-vendor CSR 0x0a12 Cambridge Silicon Radio
-vendor TREK 0x0a16 Trek Technology
-vendor ASAHIOPTICAL 0x0a17 Asahi Optical
-vendor BOCASYSTEMS 0x0a43 Boca Systems
-vendor SHANTOU 0x0a46 ShanTou
-vendor MEDIAGEAR 0x0a48 MediaGear
-vendor BROADCOM 0x0a5c Broadcom
-vendor GREENHOUSE 0x0a6b GREENHOUSE
-vendor GEOCAST 0x0a79 Geocast Network Systems
-vendor IDQUANTIQUE 0x0aba id Quantique
-vendor ZYDAS 0x0ace Zydas Technology Corporation
-vendor NEODIO 0x0aec Neodio
-vendor OPTION 0x0af0 Option N.V:
-vendor ASUS 0x0b05 ASUSTeK Computer
-vendor TODOS 0x0b0c Todos Data System
-vendor SIIG2 0x0b39 SIIG
-vendor TEKRAM 0x0b3b Tekram Technology
-vendor HAL 0x0b41 HAL Corporation
-vendor EMS 0x0b43 EMS Production
-vendor NEC2 0x0b62 NEC
-vendor ATI2 0x0b6f ATI
-vendor ZEEVO 0x0b7a Zeevo, Inc.
-vendor KURUSUGAWA 0x0b7e Kurusugawa Electronics, Inc.
-vendor ASIX 0x0b95 ASIX Electronics
-vendor O2MICRO 0x0b97 O2 Micro, Inc.
-vendor USR 0x0baf U.S. Robotics
-vendor AMBIT 0x0bb2 Ambit Microsystems
-vendor HTC 0x0bb4 HTC
-vendor REALTEK 0x0bda Realtek
-vendor ADDONICS2 0x0bf6 Addonics Technology
-vendor FSC 0x0bf8 Fujitsu Siemens Computers
-vendor AGATE 0x0c08 Agate Technologies
-vendor DMI 0x0c0b DMI
-vendor MICRODIA 0x0c45 Chicony
-vendor SEALEVEL 0x0c52 Sealevel System
-vendor LUWEN 0x0c76 Luwen
-vendor KYOCERA2 0x0c88 Kyocera Wireless Corp.
-vendor ZCOM 0x0cde Z-Com
-vendor ATHEROS2 0x0cf3 Atheros Communications
-vendor TANGTOP 0x0d3d Tangtop
-vendor SMC3 0x0d5c Standard Microsystems
-vendor ADDON 0x0d7d Add-on Technology
-vendor ACDC 0x0d7e American Computer & Digital Components
-vendor ABC 0x0d8c ABC
-vendor CONCEPTRONIC 0x0d8e Conceptronic
-vendor SKANHEX 0x0d96 Skanhex Technology, Inc.
-vendor MSI 0x0db0 Micro Star International
-vendor ELCON 0x0db7 ELCON Systemtechnik
-vendor NETAC 0x0dd8 Netac
-vendor SITECOMEU 0x0df6 Sitecom Europe
-vendor MOBILEACTION 0x0df7 Mobile Action
-vendor SPEEDDRAGON 0x0e55 Speed Dragon Multimedia
-vendor HAWKING 0x0e66 Hawking
-vendor FOSSIL 0x0e67 Fossil, Inc
-vendor GMATE 0x0e7e G.Mate, Inc
-vendor OTI 0x0ea0 Ours Technology
-vendor PILOTECH 0x0eaf Pilotech
-vendor NOVATECH 0x0eb0 NovaTech
-vendor ITEGNO 0x0eba iTegno
-vendor WINMAXGROUP 0x0ed1 WinMaxGroup
-vendor TOD 0x0ede TOD
-vendor EGALAX 0x0eef eGalax, Inc.
-vendor AIRPRIME 0x0f3d AirPrime, Inc.
-vendor MICROTUNE 0x0f4d Microtune
-vendor VTECH 0x0f88 VTech
-vendor FALCOM 0x0f94 Falcom Wireless Communications GmbH
-vendor RIM 0x0fca Research In Motion
-vendor DYNASTREAM 0x0fcf Dynastream Innovations
-vendor QUALCOMM 0x1004 Qualcomm
-vendor DESKNOTE 0x1019 Desknote
-vendor GIGABYTE 0x1044 GIGABYTE
-vendor WESTERN 0x1058 Western Digital
-vendor MOTOROLA 0x1063 Motorola
-vendor CCYU 0x1065 CCYU Technology
-vendor CURITEL 0x106c Curitel Communications Inc
-vendor SILABS2 0x10a6 SILABS2
-vendor USI 0x10ab USI
-vendor PLX 0x10b5 PLX
-vendor ASANTE 0x10bd Asante
-vendor SILABS 0x10c4 Silicon Labs
-vendor ANALOG 0x1110 Analog Devices
-vendor TENX 0x1130 Ten X Technology, Inc.
-vendor ISSC 0x1131 Integrated System Solution Corp.
-vendor JRC 0x1145 Japan Radio Company
-vendor SPHAIRON 0x114b Sphairon Access Systems GmbH
-vendor DELORME 0x1163 DeLorme
-vendor SERVERWORKS 0x1166 ServerWorks
-vendor ACERCM 0x1189 Acer Communications & Multimedia
-vendor SIERRA 0x1199 Sierra Wireless
-vendor TOPFIELD 0x11db Topfield Co., Ltd
-vendor SIEMENS3 0x11f5 Siemens
-vendor PROLIFIC2 0x11f6 Prolific
-vendor ALCATEL 0x11f7 Alcatel
-vendor UNKNOWN3 0x1233 Unknown vendor
-vendor TSUNAMI 0x1241 Tsunami
-vendor PHEENET 0x124a Pheenet
-vendor TARGUS 0x1267 Targus
-vendor TWINMOS 0x126f TwinMOS
-vendor TENDA 0x1286 Tenda
-vendor CREATIVE2 0x1292 Creative Labs
-vendor BELKIN2 0x1293 Belkin Components
-vendor CYBERTAN 0x129b CyberTAN Technology
-vendor HUAWEI 0x12d1 Huawei Technologies
-vendor ARANEUS 0x12d8 Araneus Information Systems
-vendor TAPWAVE 0x12ef Tapwave
-vendor AINCOMM 0x12fd Aincomm
-vendor MOBILITY 0x1342 Mobility
-vendor DICKSMITH 0x1371 Dick Smith Electronics
-vendor NETGEAR3 0x1385 Netgear
-vendor BALTECH 0x13ad Baltech
-vendor CISCOLINKSYS 0x13b1 Cisco-Linksys
-vendor SHARK 0x13d2 Shark
-vendor NOVATEL 0x1410 Novatel Wireless
-vendor MERLIN 0x1416 Merlin
-vendor WISTRONNEWEB 0x1435 Wistron NeWeb
-vendor RADIOSHACK 0x1453 Radio Shack
-vendor HUAWEI3COM 0x1472 Huawei-3Com
-vendor SILICOM 0x1485 Silicom
-vendor RALINK 0x148f Ralink Technology
-vendor IMAGINATION 0x149a Imagination Technologies
-vendor CONCEPTRONIC2 0x14b2 Conceptronic
-vendor PLANEX3 0x14ea Planex Communications
-vendor SILICONPORTALS 0x1527 Silicon Portals
-vendor UBIQUAM 0x1529 UBIQUAM Co., Ltd.
-vendor UBLOX 0x1546 U-blox
-vendor PNY 0x154b PNY
-vendor OQO 0x1557 OQO
-vendor UMEDIA 0x157e U-MEDIA Communications
-vendor FIBERLINE 0x1582 Fiberline
-vendor SPARKLAN 0x15a9 SparkLAN
-vendor SOHOWARE 0x15e8 SOHOware
-vendor UMAX 0x1606 UMAX Data Systems
-vendor INSIDEOUT 0x1608 Inside Out Networks
-vendor GOODWAY 0x1631 Good Way Technology
-vendor ENTREGA 0x1645 Entrega
-vendor ACTIONTEC 0x1668 Actiontec Electronics
-vendor ATHEROS 0x168c Atheros Communications
-vendor GIGASET 0x1690 Gigaset
-vendor GLOBALSUN 0x16ab Global Sun Technology
-vendor ANYDATA 0x16d5 AnyDATA Corporation
-vendor JABLOTRON 0x16d6 Jablotron
-vendor CMOTECH 0x16d8 CMOTECH Co., Ltd.
-vendor AXESSTEL 0x1726 Axesstel Co., Ltd.
-vendor LINKSYS4 0x1737 Linksys
-vendor SENAO 0x1740 Senao
-vendor METAGEEK 0x1781 MetaGeek
-vendor AMIT 0x18c5 AMIT
-vendor QCOM 0x18e8 Qcom
-vendor LINKSYS3 0x1915 Linksys
-vendor QUALCOMMINC 0x19d2 Qualcomm, Incorporated
-vendor DLINK 0x2001 D-Link
-vendor PLANEX2 0x2019 Planex Communications
-vendor ERICSSON 0x2282 Ericsson
-vendor MOTOROLA2 0x22b8 Motorola
-vendor TRIPPLITE 0x2478 Tripp-Lite
-vendor HIROSE 0x2631 Hirose Electric
-vendor NHJ 0x2770 NHJ
-vendor PLANEX 0x2c02 Planex Communications
-vendor VIDZMEDIA 0x3275 VidzMedia Pte Ltd
-vendor AEI 0x3334 AEI
-vendor HANK 0x3353 Hank Connection
-vendor PQI 0x3538 PQI
-vendor DAISY 0x3579 Daisy Technology
-vendor NI 0x3923 National Instruments
-vendor MICRONET 0x3980 Micronet Communications
-vendor IODATA2 0x40bb I-O Data
-vendor IRIVER 0x4102 iRiver
-vendor DELL 0x413c Dell
-vendor WCH 0x4348 QinHeng Electronics
-vendor ACEECA 0x4766 Aceeca
-vendor AVERATEC 0x50c2 Averatec
-vendor SWEEX 0x5173 Sweex
-vendor ONSPEC2 0x55aa OnSpec Electronic Inc.
-vendor ZINWELL 0x5a57 Zinwell
-vendor SITECOM 0x6189 Sitecom
-vendor ARKMICRO 0x6547 Arkmicro Technologies Inc.
-vendor 3COM2 0x6891 3Com
-vendor INTEL 0x8086 Intel
-vendor SITECOM2 0x9016 Sitecom
-vendor MOSCHIP 0x9710 MosChip Semiconductor
-vendor 3COM3 0xa727 3Com
-vendor HP2 0xf003 Hewlett Packard
-vendor USRP 0xfffe GNU Radio USRP
-
-/*
- * List of known products. Grouped by vendor.
- */
-
-/* 3Com products */
-product 3COM HOMECONN 0x009d HomeConnect Camera
-product 3COM 3CREB96 0x00a0 Bluetooth USB Adapter
-product 3COM 3C19250 0x03e8 3C19250 Ethernet Adapter
-product 3COM 3CRSHEW696 0x0a01 3CRSHEW696 Wireless Adapter
-product 3COM 3C460 0x11f8 HomeConnect 3C460
-product 3COM USR56K 0x3021 U.S.Robotics 56000 Voice FaxModem Pro
-product 3COM 3C460B 0x4601 HomeConnect 3C460B
-product 3COM2 3CRUSB10075 0xa727 3CRUSB10075
-product 3COM3 AR5523_1 0x6893 AR5523
-product 3COM3 AR5523_2 0x6895 AR5523
-product 3COM3 AR5523_3 0x6897 AR5523
-
-product 3COMUSR OFFICECONN 0x0082 3Com OfficeConnect Analog Modem
-product 3COMUSR USRISDN 0x008f 3Com U.S. Robotics Pro ISDN TA
-product 3COMUSR HOMECONN 0x009d 3Com HomeConnect Camera
-product 3COMUSR USR56K 0x3021 U.S. Robotics 56000 Voice FaxModem Pro
-
-/* AboCom products */
-product ABOCOM XX1 0x110c XX1
-product ABOCOM XX2 0x200c XX2
-product ABOCOM URE450 0x4000 URE450 Ethernet Adapter
-product ABOCOM UFE1000 0x4002 UFE1000 Fast Ethernet Adapter
-product ABOCOM DSB650TX_PNA 0x4003 1/10/100 Ethernet Adapter
-product ABOCOM XX4 0x4004 XX4
-product ABOCOM XX5 0x4007 XX5
-product ABOCOM XX6 0x400b XX6
-product ABOCOM XX7 0x400c XX7
-product ABOCOM RTL8151 0x401a RTL8151
-product ABOCOM XX8 0x4102 XX8
-product ABOCOM XX9 0x4104 XX9
-product ABOCOM UF200 0x420a UF200 Ethernet
-product ABOCOM WL54 0x6001 WL54
-product ABOCOM XX10 0xabc1 XX10
-product ABOCOM BWU613 0xb000 BWU613
-product ABOCOM HWU54DM 0xb21b HWU54DM
-product ABOCOM RT2573_2 0xb21c RT2573
-product ABOCOM RT2573_3 0xb21d RT2573
-product ABOCOM RT2573_4 0xb21e RT2573
-product ABOCOM WUG2700 0xb21f WUG2700
-
-/* Accton products */
-product ACCTON USB320_EC 0x1046 USB320-EC Ethernet Adapter
-product ACCTON 2664W 0x3501 2664W
-product ACCTON 111 0x3503 T-Sinus 111 Wireless Adapter
-product ACCTON SMCWUSBG 0x4505 SMCWUSB-G
-product ACCTON PRISM_GT 0x4521 PrismGT USB 2.0 WLAN
-product ACCTON SS1001 0x5046 SpeedStream Ethernet Adapter
-product ACCTON ZD1211B 0xe501 ZD1211B
-
-/* Aceeca products */
-product ACEECA MEZ1000 0x0001 MEZ1000 RDA
-
-/* Acer Communications & Multimedia (oemd by Surecom) */
-product ACERCM EP1427X2 0x0893 EP-1427X-2 Ethernet Adapter
-
-/* Acer Labs products */
-product ACERLABS M5632 0x5632 USB 2.0 Data Link
-
-/* Acer Peripherals, Inc. products */
-product ACERP ACERSCAN_C310U 0x12a6 Acerscan C310U
-product ACERP ACERSCAN_320U 0x2022 Acerscan 320U
-product ACERP ACERSCAN_640U 0x2040 Acerscan 640U
-product ACERP ACERSCAN_620U 0x2060 Acerscan 620U
-product ACERP ACERSCAN_4300U 0x20b0 Benq 3300U/4300U
-product ACERP ACERSCAN_640BT 0x20be Acerscan 640BT
-product ACERP ACERSCAN_1240U 0x20c0 Acerscan 1240U
-product ACERP ATAPI 0x6003 ATA/ATAPI Adapter
-product ACERP AWL300 0x9000 AWL300 Wireless Adapter
-product ACERP AWL400 0x9001 AWL400 Wireless Adapter
-
-/* Acer Warp products */
-product ACERW WARPLINK 0x0204 Warplink
-
-/* Actiontec, Inc. products */
-product ACTIONTEC PRISM_25 0x0408 Prism2.5 Wireless Adapter
-product ACTIONTEC PRISM_25A 0x0421 Prism2.5 Wireless Adapter A
-product ACTIONTEC FREELAN 0x6106 ROPEX FreeLan 802.11b
-product ACTIONTEC UAT1 0x7605 UAT1 Wireless Ethernet Adapter
-
-/* ACTiSYS products */
-product ACTISYS IR2000U 0x0011 ACT-IR2000U FIR
-
-/* ActiveWire, Inc. products */
-product ACTIVEWIRE IOBOARD 0x0100 I/O Board
-product ACTIVEWIRE IOBOARD_FW1 0x0101 I/O Board, rev. 1 firmware
-
-/* Adaptec products */
-product ADAPTEC AWN8020 0x0020 AWN-8020 WLAN
-
-/* Addtron products */
-product ADDTRON AWU120 0xff31 AWU-120
-
-/* ADMtek products */
-product ADMTEK PEGASUSII_4 0x07c2 AN986A Ethernet
-product ADMTEK PEGASUS 0x0986 AN986 Ethernet
-product ADMTEK PEGASUSII 0x8511 AN8511 Ethernet
-product ADMTEK PEGASUSII_2 0x8513 AN8513 Ethernet
-product ADMTEK PEGASUSII_3 0x8515 AN8515 Ethernet
-
-/* ADDON products */
-/* PNY OEMs these */
-product ADDON ATTACHE 0x1300 USB 2.0 Flash Drive
-product ADDON ATTACHE 0x1300 USB 2.0 Flash Drive
-product ADDON A256MB 0x1400 Attache 256MB USB 2.0 Flash Drive
-product ADDON DISKPRO512 0x1420 USB 2.0 Flash Drive (DANE-ELEC zMate 512MB USB flash drive)
-
-/* Addonics products */
-product ADDONICS2 CABLE_205 0xa001 Cable 205
-
-/* ADS products */
-product ADS UBS10BT 0x0008 UBS-10BT Ethernet
-product ADS UBS10BTX 0x0009 UBS-10BT Ethernet
-
-/* AEI products */
-product AEI FASTETHERNET 0x1701 Fast Ethernet
-
-/* Agate Technologies products */
-product AGATE QDRIVE 0x0378 Q-Drive
-
-/* AGFA products */
-product AGFA SNAPSCAN1212U 0x0001 SnapScan 1212U
-product AGFA SNAPSCAN1236U 0x0002 SnapScan 1236U
-product AGFA SNAPSCANTOUCH 0x0100 SnapScan Touch
-product AGFA SNAPSCAN1212U2 0x2061 SnapScan 1212U
-product AGFA SNAPSCANE40 0x208d SnapScan e40
-product AGFA SNAPSCANE50 0x208f SnapScan e50
-product AGFA SNAPSCANE20 0x2091 SnapScan e20
-product AGFA SNAPSCANE25 0x2095 SnapScan e25
-product AGFA SNAPSCANE26 0x2097 SnapScan e26
-product AGFA SNAPSCANE52 0x20fd SnapScan e52
-
-/* Ain Communication Technology products */
-product AINCOMM AWU2000B 0x1001 AWU2000B Wireless Adapter
-
-/* AIPTEK products */
-product AIPTEK POCKETCAM3M 0x2011 PocketCAM 3Mega
-product SUNPLUS PENCAM_MEGA_1_3 0x504a PenCam Mega 1.3
-
-/* AirPrime products */
-product AIRPRIME PC5220 0x0112 CDMA Wireless PC Card
-
-/* AKS products */
-product AKS USBHASP 0x0001 USB-HASP 0.06
-
-/* Alcor Micro, Inc. products */
-product ALCOR2 KBD_HUB 0x2802 Kbd Hub
-
-product ALCOR MA_KBD_HUB 0x9213 MacAlly Kbd Hub
-product ALCOR AU9814 0x9215 AU9814 Hub
-product ALCOR UMCR_9361 0x9361 USB Multimedia Card Reader
-product ALCOR SM_KBD 0x9410 MicroConnectors/StrongMan Keyboard
-product ALCOR NEC_KBD_HUB 0x9472 NEC Kbd Hub
-
-/* Altec Lansing products */
-product ALTEC ADA70 0x0070 ADA70 Speakers
-product ALTEC ASC495 0xff05 ASC495 Speakers
-
-/* Allied Telesyn International products */
-product ALLIEDTELESYN ATUSB100 0xb100 AT-USB100
-
-/* American Power Conversion products */
-product APC UPS 0x0002 Uninterruptible Power Supply
-
-/* Ambit Microsystems products */
-product AMBIT WLAN 0x0302 WLAN
-product AMBIT NTL_250 0x6098 NTL 250 cable modem
-
-/* AMIT products */
-product AMIT CGWLUSB2GO 0x0002 CG-WLUSB2GO
-
-/* Anchor products */
-product ANCHOR EZUSB 0x2131 EZUSB
-product ANCHOR EZLINK 0x2720 EZLINK
-
-/* AnyData products */
-product ANYDATA ADU_E100X 0x6501 CDMA 2000 1xRTT/EV-DO USB Modem
-product ANYDATA ADU_500A 0x6502 CDMA 2000 EV-DO USB Modem
-
-/* AOX, Inc. products */
-product AOX USB101 0x0008 Ethernet
-
-/* American Power Conversion products */
-product APC UPS 0x0002 Uninterruptible Power Supply
-
-/* Apple Computer products */
-product APPLE EXT_KBD 0x020c Apple Extended USB Keyboard
-product APPLE OPTMOUSE 0x0302 Optical mouse
-product APPLE MIGHTYMOUSE 0x0304 Mighty Mouse
-product APPLE EXT_KBD_HUB 0x1003 Hub in Apple Extended USB Keyboard
-product APPLE SPEAKERS 0x1101 Speakers
-product APPLE IPOD 0x1201 iPod
-product APPLE IPOD2G 0x1202 iPod 2G
-product APPLE IPOD3G 0x1203 iPod 3G
-product APPLE IPOD_04 0x1204 iPod '04'
-product APPLE IPODMINI 0x1205 iPod Mini
-product APPLE IPOD_06 0x1206 iPod '06'
-product APPLE IPOD_07 0x1207 iPod '07'
-product APPLE IPOD_08 0x1208 iPod '08'
-product APPLE IPODVIDEO 0x1209 iPod Video
-product APPLE IPODNANO 0x120a iPod Nano
-product APPLE IPHONE 0x1290 iPhone
-product APPLE IPHONE_3G 0x1292 iPhone 3G
-product APPLE ETHERNET 0x1402 Ethernet A1277
-
-/* Arkmicro Technologies */
-product ARKMICRO ARK3116 0x0232 ARK3116 Serial
-
-/* Asahi Optical products */
-product ASAHIOPTICAL OPTIO230 0x0004 Digital camera
-product ASAHIOPTICAL OPTIO330 0x0006 Digital camera
-
-/* Asante products */
-product ASANTE EA 0x1427 Ethernet
-
-/* ASIX Electronics products */
-product ASIX AX88172 0x1720 10/100 Ethernet
-product ASIX AX88178 0x1780 AX88178
-product ASIX AX88772 0x7720 AX88772
-
-/* ASUS products */
-product ASUS WL167G 0x1707 WL-167g Wireless Adapter
-product ASUS WL159G 0x170c WL-159g
-product ASUS A9T_WIFI 0x171b A9T wireless
-product ASUS RT2573_1 0x1723 RT2573
-product ASUS RT2573_2 0x1724 RT2573
-product ASUS LCM 0x1726 LCM display
-product ASUS P535 0x420f ASUS P535 PDA
-
-/* ATen products */
-product ATEN UC1284 0x2001 Parallel printer
-product ATEN UC10T 0x2002 10Mbps Ethernet
-product ATEN UC110T 0x2007 UC-110T Ethernet
-product ATEN UC232A 0x2008 Serial
-product ATEN UC210T 0x2009 UC-210T Ethernet
-product ATEN DSB650C 0x4000 DSB-650C
-
-/* Atheros Communications products */
-product ATHEROS AR5523 0x0001 AR5523
-product ATHEROS AR5523_NF 0x0002 AR5523 (no firmware)
-product ATHEROS2 AR5523_1 0x0001 AR5523
-product ATHEROS2 AR5523_1_NF 0x0002 AR5523 (no firmware)
-product ATHEROS2 AR5523_2 0x0003 AR5523
-product ATHEROS2 AR5523_2_NF 0x0004 AR5523 (no firmware)
-product ATHEROS2 AR5523_3 0x0005 AR5523
-product ATHEROS2 AR5523_3_NF 0x0006 AR5523 (no firmware)
-
-/* Atmel Comp. products */
-product ATMEL UHB124 0x3301 UHB124 hub
-product ATMEL DWL120 0x7603 DWL-120 Wireless Adapter
-product ATMEL BW002 0x7605 BW002 Wireless Adapter
-product ATMEL WL1130USB 0x7613 WL-1130 USB
-product ATMEL AT76C505A 0x7614 AT76c505a Wireless Adapter
-
-/* Avision products */
-product AVISION 1200U 0x0268 1200U scanner
-
-/* Axesstel products */
-product AXESSTEL DATAMODEM 0x1000 Data Modem
-
-/* Baltech products */
-product BALTECH CARDREADER 0x9999 Card reader
-
-/* B&B Electronics products */
-product BBELECTRONICS USOTL4 0xAC01 RS-422/485
-
-/* Belkin products */
-/*product BELKIN F5U111 0x???? F5U111 Ethernet*/
-product BELKIN F5D6050 0x0050 F5D6050 802.11b Wireless Adapter
-product BELKIN FBT001V 0x0081 FBT001v2 Bluetooth
-product BELKIN FBT003V 0x0084 FBT003v2 Bluetooth
-product BELKIN F5U103 0x0103 F5U103 Serial
-product BELKIN F5U109 0x0109 F5U109 Serial
-product BELKIN USB2SCSI 0x0115 USB to SCSI
-product BELKIN USB2LAN 0x0121 USB to LAN
-product BELKIN F5U208 0x0208 F5U208 VideoBus II
-product BELKIN F5U237 0x0237 F5U237 USB 2.0 7-Port Hub
-product BELKIN F5U257 0x0257 F5U257 Serial
-product BELKIN F5U409 0x0409 F5U409 Serial
-product BELKIN F6C550AVR 0x0551 F6C550-AVR UPS
-product BELKIN F5U120 0x1203 F5U120-PC Hub
-product BELKIN ZD1211B 0x4050 ZD1211B
-product BELKIN F5D5055 0x5055 F5D5055
-product BELKIN F5D7050 0x7050 F5D7050 Wireless Adapter
-product BELKIN F5D7051 0x7051 F5D7051 54g USB Network Adapter
-product BELKIN F5D7050A 0x705a F5D7050A Wireless Adapter
-product BELKIN F5D7050_V4000 0x705c F5D7050 v4000 Wireless Adapter
-product BELKIN F5D9050V3 0x905b F5D9050 ver 3 Wireless Adapter
-product BELKIN2 F5U002 0x0002 F5U002 Parallel printer
-
-/* Billionton products */
-product BILLIONTON USB100 0x0986 USB100N 10/100 FastEthernet
-product BILLIONTON USBLP100 0x0987 USB100LP
-product BILLIONTON USBEL100 0x0988 USB100EL
-product BILLIONTON USBE100 0x8511 USBE100
-product BILLIONTON USB2AR 0x90ff USB2AR Ethernet
-
-/* Broadcom products */
-product BROADCOM BCM2033 0x2033 BCM2033 Bluetooth USB dongle
-
-/* Brother Industries products */
-product BROTHER HL1050 0x0002 HL-1050 laser printer
-
-/* Behavior Technology Computer products */
-product BTC BTC7932 0x6782 Keyboard with mouse port
-
-/* Canon, Inc. products */
-product CANON N656U 0x2206 CanoScan N656U
-product CANON N1220U 0x2207 CanoScan N1220U
-product CANON D660U 0x2208 CanoScan D660U
-product CANON N676U 0x220d CanoScan N676U
-product CANON N1240U 0x220e CanoScan N1240U
-product CANON LIDE25 0x2220 CanoScan LIDE 25
-product CANON S10 0x3041 PowerShot S10
-product CANON S100 0x3045 PowerShot S100
-product CANON S200 0x3065 PowerShot S200
-product CANON REBELXT 0x30ef Digital Rebel XT
-
-/* CATC products */
-product CATC NETMATE 0x000a Netmate Ethernet
-product CATC NETMATE2 0x000c Netmate2 Ethernet
-product CATC CHIEF 0x000d USB Chief Bus & Protocol Analyzer
-product CATC ANDROMEDA 0x1237 Andromeda hub
-
-/* CASIO products */
-product CASIO QV_DIGICAM 0x1001 QV DigiCam
-product CASIO EXS880 0x1105 Exilim EX-S880
-product CASIO BE300 0x2002 BE-300 PDA
-product CASIO NAMELAND 0x4001 CASIO Nameland EZ-USB
-
-/* CCYU products */
-product CCYU ED1064 0x2136 EasyDisk ED1064
-
-/* Century products */
-product CENTURY EX35QUAT 0x011e Century USB Disk Enclosure
-
-/* Cherry products */
-product CHERRY MY3000KBD 0x0001 My3000 keyboard
-product CHERRY MY3000HUB 0x0003 My3000 hub
-product CHERRY CYBOARD 0x0004 CyBoard Keyboard
-
-/* Chic Technology products */
-product CHIC MOUSE1 0x0001 mouse
-product CHIC CYPRESS 0x0003 Cypress USB Mouse
-
-/* Chicony products */
-product CHICONY KB8933 0x0001 KB-8933 keyboard
-product MICRODIA TWINKLECAM 0x600d TwinkleCam USB camera
-
-/* CH Products */
-product CHPRODUCTS PROTHROTTLE 0x00f1 Pro Throttle
-product CHPRODUCTS PROPEDALS 0x00f2 Pro Pedals
-product CHPRODUCTS FIGHTERSTICK 0x00f3 Fighterstick
-product CHPRODUCTS FLIGHTYOKE 0x00ff Flight Sim Yoke
-
-/* Cisco-Linksys products */
-product CISCOLINKSYS WUSB54G 0x000d WUSB54G Wireless Adapter
-product CISCOLINKSYS WUSB54GP 0x0011 WUSB54GP Wireless Adapter
-product CISCOLINKSYS USB200MV2 0x0018 USB200M v2
-product CISCOLINKSYS HU200TS 0x001a HU200TS Wireless Adapter
-product CISCOLINKSYS WUSB54GC 0x0020 WUSB54GC
-product CISCOLINKSYS WUSB54GR 0x0023 WUSB54GR
-product CISCOLINKSYS WUSBF54G 0x0024 WUSBF54G
-
-/* CMOTECH products */
-product CMOTECH CNU510 0x5141 CMOTECH CDMA Technologies USB modem
-product CMOTECH CNU550 0x5543 CDMA 2000 1xRTT/1xEVDO USB modem
-product CMOTECH CDMA_MODEM1 0x6280 CMOTECH CDMA Technologies USB modem
-
-/* Compaq products */
-product COMPAQ IPAQPOCKETPC 0x0003 iPAQ PocketPC
-product COMPAQ PJB100 0x504a Personal Jukebox PJB100
-product COMPAQ IPAQLINUX 0x505a iPAQ Linux
-
-/* Composite Corp products looks the same as "TANGTOP" */
-product COMPOSITE USBPS2 0x0001 USB to PS2 Adaptor
-
-/* Conceptronic products */
-product CONCEPTRONIC PRISM_GT 0x3762 PrismGT USB 2.0 WLAN
-product CONCEPTRONIC C11U 0x7100 C11U
-product CONCEPTRONIC WL210 0x7110 WL-210
-product CONCEPTRONIC AR5523_1 0x7801 AR5523
-product CONCEPTRONIC AR5523_1_NF 0x7802 AR5523 (no firmware)
-product CONCEPTRONIC AR5523_2 0x7811 AR5523
-product CONCEPTRONIC AR5523_2_NF 0x7812 AR5523 (no firmware)
-product CONCEPTRONIC2 C54RU 0x3c02 C54RU WLAN
-product CONCEPTRONIC2 C54RU2 0x3c22 C54RU
-
-/* Connectix products */
-product CONNECTIX QUICKCAM 0x0001 QuickCam
-
-/* Corega products */
-product COREGA ETHER_USB_T 0x0001 Ether USB-T
-product COREGA FETHER_USB_TX 0x0004 FEther USB-TX
-product COREGA WLAN_USB_USB_11 0x000c WirelessLAN USB-11
-product COREGA FETHER_USB_TXS 0x000d FEther USB-TXS
-product COREGA WLANUSB 0x0012 Wireless LAN Stick-11
-product COREGA FETHER_USB2_TX 0x0017 FEther USB2-TX
-product COREGA WLUSB_11_KEY 0x001a ULUSB-11 Key
-product COREGA CGWLUSB2GL 0x002d CG-WLUSB2GL
-product COREGA CGWLUSB2GPX 0x002e CG-WLUSB2GPX
-product COREGA WLUSB_11_STICK 0x7613 WLAN USB Stick 11
-product COREGA FETHER_USB_TXC 0x9601 FEther USB-TXC
-
-/* Creative products */
-product CREATIVE NOMAD_II 0x1002 Nomad II MP3 player
-product CREATIVE NOMAD_IIMG 0x4004 Nomad II MG
-product CREATIVE NOMAD 0x4106 Nomad
-product CREATIVE2 VOIP_BLASTER 0x0258 Voip Blaster
-product CREATIVE3 OPTICAL_MOUSE 0x0001 Notebook Optical Mouse
-
-/* Cambridge Silicon Radio Ltd. products */
-product CSR BT_DONGLE 0x0001 Bluetooth USB dongle
-product CSR CSRDFU 0xffff USB Bluetooth Device in DFU State
-
-/* CTX products */
-product CTX EX1300 0x9999 Ex1300 hub
-
-/* Curitel products */
-product CURITEL HX550C 0x1101 CDMA 2000 1xRTT USB modem (HX-550C)
-product CURITEL HX57XB 0x2101 CDMA 2000 1xRTT USB modem (HX-570/575B/PR-600)
-product CURITEL PC5740 0x3701 Broadband Wireless modem
-
-/* CyberPower products */
-product CYBERPOWER 1500CAVRLCD 0x0501 1500CAVRLCD
-
-/* CyberTAN Technology products */
-product CYBERTAN TG54USB 0x1666 TG54USB
-
-/* Cypress Semiconductor products */
-product CYPRESS MOUSE 0x0001 mouse
-product CYPRESS THERMO 0x0002 thermometer
-product CYPRESS WISPY1A 0x0bad MetaGeek Wi-Spy
-product CYPRESS KBDHUB 0x0101 Keyboard/Hub
-product CYPRESS FMRADIO 0x1002 FM Radio
-product CYPRESS USBRS232 0x5500 USB-RS232 Interface
-product CYPRESS SLIM_HUB 0x6560 Slim Hub
-
-/* Daisy Technology products */
-product DAISY DMC 0x6901 USB MultiMedia Reader
-
-/* Dallas Semiconductor products */
-product DALLAS J6502 0x4201 J-6502 speakers
-
-/* Dell products */
-product DELL PORT 0x0058 Port Replicator
-product DELL AIO926 0x5115 Photo AIO Printer 926
-product DELL BC02 0x8000 BC02 Bluetooth USB Adapter
-product DELL PRISM_GT_1 0x8102 PrismGT USB 2.0 WLAN
-product DELL TM350 0x8103 TrueMobile 350 Bluetooth USB Adapter
-product DELL PRISM_GT_2 0x8104 PrismGT USB 2.0 WLAN
-product DELL U740 0x8135 Dell U740 CDMA
-
-/* Delorme Paublishing products */
-product DELORME EARTHMATE 0x0100 Earthmate GPS
-
-/* Desknote products */
-product DESKNOTE UCR_61S2B 0x0c55 UCR-61S2B
-
-/* Diamond products */
-product DIAMOND RIO500USB 0x0001 Rio 500 USB
-
-/* Dick Smith Electronics (really C-Net) products */
-product DICKSMITH RT2573 0x9022 RT2573
-product DICKSMITH CWD854F 0x9032 C-Net CWD-854 rev F
-
-/* Digi International products */
-product DIGI ACCELEPORT2 0x0002 AccelePort USB 2
-product DIGI ACCELEPORT4 0x0004 AccelePort USB 4
-product DIGI ACCELEPORT8 0x0008 AccelePort USB 8
-
-/* D-Link products */
-/*product DLINK DSBS25 0x0100 DSB-S25 serial*/
-product DLINK DUBE100 0x1a00 10/100 Ethernet
-product DLINK DSB650TX4 0x200c 10/100 Ethernet
-product DLINK DWL120E 0x3200 DWL-120 rev E
-product DLINK DWL122 0x3700 DWL-122
-product DLINK DWLG120 0x3701 DWL-G120
-product DLINK DWL120F 0x3702 DWL-120 rev F
-product DLINK DWLAG132 0x3a00 DWL-AG132
-product DLINK DWLAG132_NF 0x3a01 DWL-AG132 (no firmware)
-product DLINK DWLG132 0x3a02 DWL-G132
-product DLINK DWLG132_NF 0x3a03 DWL-G132 (no firmware)
-product DLINK DWLAG122 0x3a04 DWL-AG122
-product DLINK DWLAG122_NF 0x3a05 DWL-AG122 (no firmware)
-product DLINK DWLG122 0x3c00 DWL-G122 b1 Wireless Adapter
-product DLINK DUBE100B1 0x3c05 DUB-E100 rev B1
-product DLINK DSB650C 0x4000 10Mbps Ethernet
-product DLINK DSB650TX1 0x4001 10/100 Ethernet
-product DLINK DSB650TX 0x4002 10/100 Ethernet
-product DLINK DSB650TX_PNA 0x4003 1/10/100 Ethernet
-product DLINK DSB650TX3 0x400b 10/100 Ethernet
-product DLINK DSB650TX2 0x4102 10/100 Ethernet
-product DLINK DSB650 0xabc1 10/100 Ethernet
-product DLINK2 DWLG122C1 0x3c03 DWL-G122 c1
-product DLINK2 WUA1340 0x3c04 WUA-1340
-product DLINK2 DWA111 0x3c06 DWA-111
-product DLINK2 DWA110 0x3c07 DWA-110
-
-/* DMI products */
-product DMI CFSM_RW 0xa109 CF/SM Reader/Writer
-
-/* DrayTek products */
-product DRAYTEK VIGOR550 0x0550 Vigor550
-
-/* Dynastream Innovations */
-product DYNASTREAM ANTDEVBOARD 0x1003 ANT dev board
-
-/* EIZO products */
-product EIZO HUB 0x0000 hub
-product EIZO MONITOR 0x0001 monitor
-
-/* ELCON Systemtechnik products */
-product ELCON PLAN 0x0002 Goldpfeil P-LAN
-
-/* Elecom products */
-product ELECOM MOUSE29UO 0x0002 mouse 29UO
-product ELECOM LDUSBTX0 0x200c LD-USB/TX
-product ELECOM LDUSBTX1 0x4002 LD-USB/TX
-product ELECOM LDUSBLTX 0x4005 LD-USBL/TX
-product ELECOM LDUSBTX2 0x400b LD-USB/TX
-product ELECOM LDUSB20 0x4010 LD-USB20
-product ELECOM UCSGT 0x5003 UC-SGT
-product ELECOM UCSGT0 0x5004 UC-SGT
-product ELECOM LDUSBTX3 0xabc1 LD-USB/TX
-
-/* Elsa products */
-product ELSA MODEM1 0x2265 ELSA Modem Board
-product ELSA USB2ETHERNET 0x3000 Microlink USB2Ethernet
-
-/* EMS products */
-product EMS DUAL_SHOOTER 0x0003 PSX gun controller converter
-
-/* Entrega products */
-product ENTREGA 1S 0x0001 1S serial
-product ENTREGA 2S 0x0002 2S serial
-product ENTREGA 1S25 0x0003 1S25 serial
-product ENTREGA 4S 0x0004 4S serial
-product ENTREGA E45 0x0005 E45 Ethernet
-product ENTREGA CENTRONICS 0x0006 Parallel Port
-product ENTREGA XX1 0x0008 Ethernet
-product ENTREGA 1S9 0x0093 1S9 serial
-product ENTREGA EZUSB 0x8000 EZ-USB
-/*product ENTREGA SERIAL 0x8001 DB25 Serial*/
-product ENTREGA 2U4S 0x8004 2U4S serial/usb hub
-product ENTREGA XX2 0x8005 Ethernet
-/*product ENTREGA SERIAL_DB9 0x8093 DB9 Serial*/
-
-/* Epson products */
-product EPSON PRINTER1 0x0001 USB Printer
-product EPSON PRINTER2 0x0002 ISD USB Smart Cable for Mac
-product EPSON PRINTER3 0x0003 ISD USB Smart Cable
-product EPSON PRINTER5 0x0005 USB Printer
-product EPSON 636 0x0101 Perfection 636U / 636Photo scanner
-product EPSON 610 0x0103 Perfection 610 scanner
-product EPSON 1200 0x0104 Perfection 1200U / 1200Photo scanner
-product EPSON 1600 0x0107 Expression 1600 scanner
-product EPSON 1640 0x010a Perfection 1640SU scanner
-product EPSON 1240 0x010b Perfection 1240U / 1240Photo scanner
-product EPSON 640U 0x010c Perfection 640U scanner
-product EPSON 1250 0x010f Perfection 1250U / 1250Photo scanner
-product EPSON 1650 0x0110 Perfection 1650 scanner
-product EPSON GT9700F 0x0112 GT-9700F scanner
-product EPSON GT9300UF 0x011b GT-9300UF scanner
-product EPSON 3200 0x011c Perfection 3200 scanner
-product EPSON 1260 0x011d Perfection 1260 scanner
-product EPSON 1660 0x011e Perfection 1660 scanner
-product EPSON 1670 0x011f Perfection 1670 scanner
-product EPSON 1270 0x0120 Perfection 1270 scanner
-product EPSON 2480 0x0121 Perfection 2480 scanner
-product EPSON 3590 0x0122 Perfection 3590 scanner
-product EPSON 4990 0x012a Perfection 4990 Photo scanner
-product EPSON STYLUS_875DC 0x0601 Stylus Photo 875DC Card Reader
-product EPSON STYLUS_895 0x0602 Stylus Photo 895 Card Reader
-product EPSON CX5400 0x0808 CX5400 scanner
-product EPSON 3500 0x080e CX-3500/3600/3650 MFP
-product EPSON RX425 0x080f Stylus Photo RX425 scanner
-product EPSON 4800 0x0819 CX4800 MP scanner
-product EPSON 4200 0x0820 CX4200 MP scanner
-product EPSON 5000 0x082b DX-50x0 MFP scanner
-product EPSON 6000 0x082e DX-60x0 MFP scanner
-product EPSON DX7400 0x0838 DX7400/CX7300 scanner
-product EPSON DX8400 0x0839 DX8400 scanner
-
-/* e-TEK Labs products */
-product ETEK 1COM 0x8007 Serial
-
-/* Extended Systems products */
-product EXTENDED XTNDACCESS 0x0100 XTNDAccess IrDA
-
-/* FEIYA products */
-product FEIYA 5IN1 0x1132 5-in-1 Card Reader
-
-/* Fiberline */
-product FIBERLINE WL430U 0x6003 WL-430U
-
-/* Fossil, Inc products */
-product FOSSIL WRISTPDA 0x0002 Wrist PDA
-
-/* Freecom products */
-product FREECOM DVD 0xfc01 DVD drive
-
-/* Fujitsu Siemens Computers products */
-product FSC E5400 0x1009 PrismGT USB 2.0 WLAN
-
-/* Future Technology Devices products */
-product FTDI SERIAL_8U100AX 0x8372 8U100AX Serial
-product FTDI SERIAL_8U232AM 0x6001 8U232AM Serial
-product FTDI SERIAL_2232C 0x6010 FT2232C Dual port Serial
-/* Gude Analog- und Digitalsysteme products also uses FTDI's id: */
-product FTDI TACTRIX_OPENPORT_13M 0xcc48 OpenPort 1.3 Mitsubishi
-product FTDI TACTRIX_OPENPORT_13S 0xcc49 OpenPort 1.3 Subaru
-product FTDI TACTRIX_OPENPORT_13U 0xcc4a OpenPort 1.3 Universal
-product FTDI EISCOU 0xe888 Expert ISDN Control USB
-product FTDI UOPTBR 0xe889 USB-RS232 OptoBridge
-product FTDI EMCU2D 0xe88a Expert mouseCLOCK USB II
-product FTDI PCMSFU 0xe88b Precision Clock MSF USB
-product FTDI EMCU2H 0xe88c Expert mouseCLOCK USB II HBG
-product FTDI USBSERIAL 0xfa00 Matrix Orbital USB Serial
-product FTDI MX2_3 0xfa01 Matrix Orbital MX2 or MX3
-product FTDI MX4_5 0xfa02 Matrix Orbital MX4 or MX5
-product FTDI LK202 0xfa03 Matrix Orbital VK/LK202 Family
-product FTDI LK204 0xfa04 Matrix Orbital VK/LK204 Family
-product FTDI CFA_632 0xfc08 Crystalfontz CFA-632 USB LCD
-product FTDI CFA_634 0xfc09 Crystalfontz CFA-634 USB LCD
-product FTDI CFA_633 0xfc0b Crystalfontz CFA-633 USB LCD
-product FTDI CFA_631 0xfc0c Crystalfontz CFA-631 USB LCD
-product FTDI CFA_635 0xfc0d Crystalfontz CFA-635 USB LCD
-product FTDI SEMC_DSS20 0xfc82 SEMC DSS-20 SyncStation
-
-/* Fuji photo products */
-product FUJIPHOTO MASS0100 0x0100 Mass Storage
-
-/* Fujitsu protducts */
-product FUJITSU AH_F401U 0x105b AH-F401U Air H device
-
-/* Garmin products */
-product GARMIN IQUE_3600 0x0004 iQue 3600
-
-/* General Instruments (Motorola) products */
-product GENERALINSTMNTS SB5100 0x5100 SURFboard SB5100 Cable modem
-
-/* Genesys Logic products */
-product GENESYS GL620USB 0x0501 GL620USB Host-Host interface
-product GENESYS GL650 0x0604 GL650 Hub
-product GENESYS GL641USB 0x0700 GL641USB CompactFlash Card Reader
-product GENESYS GL641USB2IDE_2 0x0701 GL641USB USB-IDE Bridge No 2
-product GENESYS GL641USB2IDE 0x0702 GL641USB USB-IDE Bridge
-product GENESYS GL641USB_2 0x0760 GL641USB 6-in-1 Card Reader
-
-/* GIGABYTE products */
-product GIGABYTE GN54G 0x8001 GN-54G
-product GIGABYTE GNBR402W 0x8002 GN-BR402W
-product GIGABYTE GNWLBM101 0x8003 GN-WLBM101
-product GIGABYTE GNWBKG 0x8007 GN-WBKG
-product GIGABYTE GNWB01GS 0x8008 GN-WB01GS
-product GIGABYTE GNWI05GS 0x800a GN-WI05GS
-
-/* Gigaset products */
-product GIGASET WLAN 0x0701 WLAN
-product GIGASET SMCWUSBTG 0x0710 SMCWUSBT-G
-product GIGASET SMCWUSBTG_NF 0x0711 SMCWUSBT-G (no firmware)
-product GIGASET AR5523 0x0712 AR5523
-product GIGASET AR5523_NF 0x0713 AR5523 (no firmware)
-product GIGASET RT2573 0x0722 RT2573
-
-/* Global Sun Technology product */
-product GLOBALSUN AR5523_1 0x7801 AR5523
-product GLOBALSUN AR5523_1_NF 0x7802 AR5523 (no firmware)
-product GLOBALSUN AR5523_2 0x7811 AR5523
-product GLOBALSUN AR5523_2_NF 0x7812 AR5523 (no firmware)
-
-/* Globespan products */
-product GLOBESPAN PRISM_GT_1 0x2000 PrismGT USB 2.0 WLAN
-product GLOBESPAN PRISM_GT_2 0x2002 PrismGT USB 2.0 WLAN
-
-/* G.Mate, Inc products */
-product GMATE YP3X00 0x1001 YP3X00 PDA
-
-/* GoHubs products */
-product GOHUBS GOCOM232 0x1001 GoCOM232 Serial
-
-/* Good Way Technology products */
-product GOODWAY GWUSB2E 0x6200 GWUSB2E
-product GOODWAY RT2573 0xc019 RT2573
-
-/* Gravis products */
-product GRAVIS GAMEPADPRO 0x4001 GamePad Pro
-
-/* GREENHOUSE products */
-product GREENHOUSE KANA21 0x0001 CF-writer with MP3
-
-/* Griffin Technology */
-product GRIFFIN IMATE 0x0405 iMate, ADB Adapter
-
-/* Guillemot Corporation */
-product GUILLEMOT DALEADER 0xa300 DA Leader
-product GUILLEMOT HWGUSB254 0xe000 HWGUSB2-54 WLAN
-product GUILLEMOT HWGUSB254LB 0xe010 HWGUSB2-54-LB
-product GUILLEMOT HWGUSB254V2AP 0xe020 HWGUSB2-54V2-AP
-
-/* Hagiwara products */
-product HAGIWARA FGSM 0x0002 FlashGate SmartMedia Card Reader
-product HAGIWARA FGCF 0x0003 FlashGate CompactFlash Card Reader
-product HAGIWARA FG 0x0005 FlashGate
-
-/* HAL Corporation products */
-product HAL IMR001 0x0011 Crossam2+USB IR commander
-
-/* Handspring, Inc. */
-product HANDSPRING VISOR 0x0100 Handspring Visor
-product HANDSPRING TREO 0x0200 Handspring Treo
-product HANDSPRING TREO600 0x0300 Handspring Treo 600
-
-/* Hauppauge Computer Works */
-product HAUPPAUGE WINTV_USB_FM 0x4d12 WinTV USB FM
-
-/* Hawking Technologies products */
-product HAWKING UF100 0x400c 10/100 USB Ethernet
-
-/* Hitachi, Ltd. products */
-product HITACHI DVDCAM_DZ_MV100A 0x0004 DVD-CAM DZ-MV100A Camcorder
-product HITACHI DVDCAM_USB 0x001e DVDCAM USB HS Interface
-
-/* HP products */
-product HP 895C 0x0004 DeskJet 895C
-product HP 4100C 0x0101 Scanjet 4100C
-product HP S20 0x0102 Photosmart S20
-product HP 880C 0x0104 DeskJet 880C
-product HP 4200C 0x0105 ScanJet 4200C
-product HP CDWRITERPLUS 0x0107 CD-Writer Plus
-product HP KBDHUB 0x010c Multimedia Keyboard Hub
-product HP G55XI 0x0111 OfficeJet G55xi
-product HP HN210W 0x011c HN210W 802.11b WLAN
-product HP 49GPLUS 0x0121 49g+ graphing calculator
-product HP 6200C 0x0201 ScanJet 6200C
-product HP S20b 0x0202 PhotoSmart S20
-product HP 815C 0x0204 DeskJet 815C
-product HP 3300C 0x0205 ScanJet 3300C
-product HP CDW8200 0x0207 CD-Writer Plus 8200e
-product HP MMKEYB 0x020c Multimedia keyboard
-product HP 1220C 0x0212 DeskJet 1220C
-product HP 810C 0x0304 DeskJet 810C/812C
-product HP 4300C 0x0305 Scanjet 4300C
-product HP CDW4E 0x0307 CD-Writer+ CD-4e
-product HP G85XI 0x0311 OfficeJet G85xi
-product HP 1200 0x0317 LaserJet 1200
-product HP 5200C 0x0401 Scanjet 5200C
-product HP 830C 0x0404 DeskJet 830C
-product HP 3400CSE 0x0405 ScanJet 3400cse
-product HP 6300C 0x0601 Scanjet 6300C
-product HP 840C 0x0604 DeskJet 840c
-product HP 2200C 0x0605 ScanJet 2200C
-product HP 5300C 0x0701 Scanjet 5300C
-product HP 4400C 0x0705 Scanjet 4400C
-product HP 82x0C 0x0b01 Scanjet 82x0C
-product HP 2300D 0x0b17 Laserjet 2300d
-product HP 970CSE 0x1004 Deskjet 970Cse
-product HP 5400C 0x1005 Scanjet 5400C
-product HP 2215 0x1016 iPAQ 22xx/Jornada 548
-product HP 568J 0x1116 Jornada 568
-product HP 930C 0x1204 DeskJet 930c
-product HP P2000U 0x1801 Inkjet P-2000U
-product HP 640C 0x2004 DeskJet 640c
-product HP 4670V 0x3005 ScanJet 4670v
-product HP P1100 0x3102 Photosmart P1100
-product HP HN210E 0x811c Ethernet HN210E
-product HP2 C500 0x6002 PhotoSmart C500
-
-/* HTC products */
-product HTC WINMOBILE 0x00ce HTC USB Sync
-product HTC PPC6700MODEM 0x00cf PPC6700 Modem
-product HTC SMARTPHONE 0x0a51 SmartPhone USB Sync
-
-/* HUAWEI products */
-product HUAWEI MOBILE 0x1001 Huawei Mobile
-product HUAWEI E270 0x1003 Huawei HSPA modem
-
-/* HUAWEI 3com products */
-product HUAWEI3COM WUB320G 0x0009 Aolynk WUB320g
-
-/* IBM Corporation */
-product IBM USBCDROMDRIVE 0x4427 USB CD-ROM Drive
-
-/* Imagination Technologies products */
-product IMAGINATION DBX1 0x2107 DBX1 DSP core
-
-/* Inside Out Networks products */
-product INSIDEOUT EDGEPORT4 0x0001 EdgePort/4 serial ports
-
-/* In-System products */
-product INSYSTEM F5U002 0x0002 Parallel printer
-product INSYSTEM ATAPI 0x0031 ATAPI Adapter
-product INSYSTEM ISD110 0x0200 IDE Adapter ISD110
-product INSYSTEM ISD105 0x0202 IDE Adapter ISD105
-product INSYSTEM USBCABLE 0x081a USB cable
-product INSYSTEM STORAGE_V2 0x5701 USB Storage Adapter V2
-
-/* Intel products */
-product INTEL EASYPC_CAMERA 0x0110 Easy PC Camera
-product INTEL TESTBOARD 0x9890 82930 test board
-
-/* Intersil products */
-product INTERSIL PRISM_GT 0x1000 PrismGT USB 2.0 WLAN
-product INTERSIL PRISM_2X 0x3642 Prism2.x or Atmel WLAN
-
-/* Interpid Control Systems products */
-product INTREPIDCS VALUECAN 0x0601 ValueCAN CAN bus interface
-product INTREPIDCS NEOVI 0x0701 NeoVI Blue vehicle bus interface
-
-/* I/O DATA products */
-product IODATA IU_CD2 0x0204 DVD Multi-plus unit iU-CD2
-product IODATA DVR_UEH8 0x0206 DVD Multi-plus unit DVR-UEH8
-product IODATA USBSSMRW 0x0314 USB-SSMRW SD-card
-product IODATA USBSDRW 0x031e USB-SDRW SD-card
-product IODATA USBETT 0x0901 USB ETT
-product IODATA USBETTX 0x0904 USB ETTX
-product IODATA USBETTXS 0x0913 USB ETTX
-product IODATA USBWNB11A 0x0919 USB WN-B11
-product IODATA USBWNB11 0x0922 USB Airport WN-B11
-product IODATA ETGUS2 0x0930 ETG-US2
-product IODATA USBRSAQ 0x0a03 Serial USB-RSAQ1
-product IODATA2 USB2SC 0x0a09 USB2.0-SCSI Bridge USB2-SC
-
-/* Iomega products */
-product IOMEGA ZIP100 0x0001 Zip 100
-product IOMEGA ZIP250 0x0030 Zip 250
-
-/* Ituner networks products */
-product ITUNERNET USBLCD2X20 0x0002 USB-LCD 2x20
-
-/* Jablotron products */
-product JABLOTRON PC60B 0x0001 PC-60B
-
-/* Jaton products */
-product JATON EDA 0x5704 Ethernet
-
-/* JVC products */
-product JVC GR_DX95 0x000a GR-DX95
-product JVC MP_PRX1 0x3008 MP-PRX1 Ethernet
-
-/* JRC products */
-product JRC AH_J3001V_J3002V 0x0001 AirH PHONE AH-J3001V/J3002V
-
-/* Kawatsu products */
-product KAWATSU MH4000P 0x0003 MiniHub 4000P
-
-/* Keisokugiken Corp. products */
-product KEISOKUGIKEN USBDAQ 0x0068 HKS-0200 USBDAQ
-
-/* Kensington products */
-product KENSINGTON ORBIT 0x1003 Orbit USB/PS2 trackball
-product KENSINGTON TURBOBALL 0x1005 TurboBall
-
-/* Keyspan products */
-product KEYSPAN USA28_NF 0x0101 USA-28 serial Adapter (no firmware)
-product KEYSPAN USA28X_NF 0x0102 USA-28X serial Adapter (no firmware)
-product KEYSPAN USA19_NF 0x0103 USA-19 serial Adapter (no firmware)
-product KEYSPAN USA18_NF 0x0104 USA-18 serial Adapter (no firmware)
-product KEYSPAN USA18X_NF 0x0105 USA-18X serial Adapter (no firmware)
-product KEYSPAN USA19W_NF 0x0106 USA-19W serial Adapter (no firmware)
-product KEYSPAN USA19 0x0107 USA-19 serial Adapter
-product KEYSPAN USA19W 0x0108 USA-19W serial Adapter
-product KEYSPAN USA49W_NF 0x0109 USA-49W serial Adapter (no firmware)
-product KEYSPAN USA49W 0x010a USA-49W serial Adapter
-product KEYSPAN USA19QI_NF 0x010b USA-19QI serial Adapter (no firmware)
-product KEYSPAN USA19QI 0x010c USA-19QI serial Adapter
-product KEYSPAN USA19Q_NF 0x010d USA-19Q serial Adapter (no firmware)
-product KEYSPAN USA19Q 0x010e USA-19Q serial Adapter
-product KEYSPAN USA28 0x010f USA-28 serial Adapter
-product KEYSPAN USA28XXB 0x0110 USA-28X/XB serial Adapter
-product KEYSPAN USA18 0x0111 USA-18 serial Adapter
-product KEYSPAN USA18X 0x0112 USA-18X serial Adapter
-product KEYSPAN USA28XB_NF 0x0113 USA-28XB serial Adapter (no firmware)
-product KEYSPAN USA28XA_NF 0x0114 USA-28XB serial Adapter (no firmware)
-product KEYSPAN USA28XA 0x0115 USA-28XA serial Adapter
-product KEYSPAN USA18XA_NF 0x0116 USA-18XA serial Adapter (no firmware)
-product KEYSPAN USA18XA 0x0117 USA-18XA serial Adapter
-product KEYSPAN USA19QW_NF 0x0118 USA-19WQ serial Adapter (no firmware)
-product KEYSPAN USA19QW 0x0119 USA-19WQ serial Adapter
-product KEYSPAN USA19HA 0x0121 USA-19HS serial Adapter
-product KEYSPAN UIA10 0x0201 UIA-10 remote control
-product KEYSPAN UIA11 0x0202 UIA-11 remote control
-
-/* Kingston products */
-product KINGSTON XX1 0x0008 Ethernet
-product KINGSTON KNU101TX 0x000a KNU101TX USB Ethernet
-
-/* Kawasaki products */
-product KLSI DUH3E10BT 0x0008 USB Ethernet
-product KLSI DUH3E10BTN 0x0009 USB Ethernet
-
-/* Kodak products */
-product KODAK DC220 0x0100 Digital Science DC220
-product KODAK DC260 0x0110 Digital Science DC260
-product KODAK DC265 0x0111 Digital Science DC265
-product KODAK DC290 0x0112 Digital Science DC290
-product KODAK DC240 0x0120 Digital Science DC240
-product KODAK DC280 0x0130 Digital Science DC280
-
-/* Konica Corp. Products */
-product KONICA CAMERA 0x0720 Digital Color Camera
-
-/* KYE products */
-product KYE NICHE 0x0001 Niche mouse
-product KYE NETSCROLL 0x0003 Genius NetScroll mouse
-product KYE FLIGHT2000 0x1004 Flight 2000 joystick
-product KYE VIVIDPRO 0x2001 ColorPage Vivid-Pro scanner
-
-/* Kyocera products */
-product KYOCERA FINECAM_S3X 0x0100 Finecam S3x
-product KYOCERA FINECAM_S4 0x0101 Finecam S4
-product KYOCERA FINECAM_S5 0x0103 Finecam S5
-product KYOCERA FINECAM_L3 0x0105 Finecam L3
-product KYOCERA AHK3001V 0x0203 AH-K3001V
-product KYOCERA2 CDMA_MSM_K 0x17da Qualcomm Kyocera CDMA Technologies MSM
-
-/* LaCie products */
-product LACIE HD 0xa601 Hard Disk
-product LACIE CDRW 0xa602 CD R/W
-
-/* Lexar products */
-product LEXAR JUMPSHOT 0x0001 jumpSHOT CompactFlash Reader
-product LEXAR CF_READER 0xb002 USB CF Reader
-
-/* Lexmark products */
-product LEXMARK S2450 0x0009 Optra S 2450
-
-/* Linksys products */
-product LINKSYS MAUSB2 0x0105 Camedia MAUSB-2
-product LINKSYS USB10TX1 0x200c USB10TX
-product LINKSYS USB10T 0x2202 USB10T Ethernet
-product LINKSYS USB100TX 0x2203 USB100TX Ethernet
-product LINKSYS USB100H1 0x2204 USB100H1 Ethernet/HPNA
-product LINKSYS USB10TA 0x2206 USB10TA Ethernet
-product LINKSYS USB10TX2 0x400b USB10TX
-product LINKSYS2 WUSB11 0x2219 WUSB11 Wireless Adapter
-product LINKSYS2 USB200M 0x2226 USB 2.0 10/100 Ethernet
-product LINKSYS3 WUSB11v28 0x2233 WUSB11 v2.8 Wireless Adapter
-product LINKSYS4 USB1000 0x0039 USB1000
-
-/* Logitech products */
-product LOGITECH M2452 0x0203 M2452 keyboard
-product LOGITECH M4848 0x0301 M4848 mouse
-product LOGITECH PAGESCAN 0x040f PageScan
-product LOGITECH QUICKCAMWEB 0x0801 QuickCam Web
-product LOGITECH QUICKCAMPRO 0x0810 QuickCam Pro
-product LOGITECH QUICKCAMEXP 0x0840 QuickCam Express
-product LOGITECH QUICKCAM 0x0850 QuickCam
-product LOGITECH N43 0xc000 N43
-product LOGITECH N48 0xc001 N48 mouse
-product LOGITECH MBA47 0xc002 M-BA47 mouse
-product LOGITECH WMMOUSE 0xc004 WingMan Gaming Mouse
-product LOGITECH BD58 0xc00c BD58 mouse
-product LOGITECH UN58A 0xc030 iFeel Mouse
-product LOGITECH UN53B 0xc032 iFeel MouseMan
-product LOGITECH WMPAD 0xc208 WingMan GamePad Extreme
-product LOGITECH WMRPAD 0xc20a WingMan RumblePad
-product LOGITECH WMJOY 0xc281 WingMan Force joystick
-product LOGITECH BB13 0xc401 USB-PS/2 Trackball
-product LOGITECH RK53 0xc501 Cordless mouse
-product LOGITECH RB6 0xc503 Cordless keyboard
-product LOGITECH MX700 0xc506 Cordless optical mouse
-product LOGITECH QUICKCAMPRO2 0xd001 QuickCam Pro
-
-/* Logitec Corp. products */
-product LOGITEC LDR_H443SU2 0x0033 DVD Multi-plus unit LDR-H443SU2
-product LOGITEC LDR_H443U2 0x00b3 DVD Multi-plus unit LDR-H443U2
-
-/* Lucent products */
-product LUCENT EVALKIT 0x1001 USS-720 evaluation kit
-
-/* Luwen products */
-product LUWEN EASYDISK 0x0005 EasyDisc
-
-/* Macally products */
-product MACALLY MOUSE1 0x0101 mouse
-
-/* MCT Corp. */
-product MCT HUB0100 0x0100 Hub
-product MCT DU_H3SP_USB232 0x0200 D-Link DU-H3SP USB BAY Hub
-product MCT USB232 0x0210 USB-232 Interface
-product MCT SITECOM_USB232 0x0230 Sitecom USB-232 Products
-
-/* Melco, Inc products */
-product MELCO LUATX1 0x0001 LUA-TX Ethernet
-product MELCO LUATX5 0x0005 LUA-TX Ethernet
-product MELCO LUA2TX5 0x0009 LUA2-TX Ethernet
-product MELCO LUAKTX 0x0012 LUA-KTX Ethernet
-product MELCO DUBPXXG 0x001c USB-IDE Bridge: DUB-PxxG
-product MELCO LUAU2KTX 0x003d LUA-U2-KTX Ethernet
-product MELCO KG54YB 0x005e WLI-U2-KG54-YB WLAN
-product MELCO KG54 0x0066 WLI-U2-KG54 WLAN
-product MELCO KG54AI 0x0067 WLI-U2-KG54-AI WLAN
-product MELCO NINWIFI 0x008b Nintendo Wi-Fi
-product MELCO PCOPRS1 0x00b3 PC-OP-RS1 RemoteStation
-product MELCO SG54HP 0x00d8 WLI-U2-SG54HP
-product MELCO G54HP 0x00d9 WLI-U2-G54HP
-product MELCO KG54L 0x00da WLI-U2-KG54L
-
-/* Merlin products */
-product MERLIN V620 0x1110 Merlin V620
-
-/* MetaGeek products */
-product METAGEEK WISPY1B 0x083e MetaGeek Wi-Spy
-product METAGEEK WISPY24X 0x083f MetaGeek Wi-Spy 2.4x
-
-/* Metricom products */
-product METRICOM RICOCHET_GS 0x0001 Ricochet GS
-
-/* MGE UPS Systems */
-product MGE UPS1 0x0001 MGE UPS SYSTEMS PROTECTIONCENTER 1
-product MGE UPS2 0xffff MGE UPS SYSTEMS PROTECTIONCENTER 2
-
-/* Micro Star International products */
-product MSI BT_DONGLE 0x1967 Bluetooth USB dongle
-product MSI UB11B 0x6823 UB11B
-product MSI RT2570 0x6861 RT2570
-product MSI RT2570_2 0x6865 RT2570
-product MSI RT2570_3 0x6869 RT2570
-product MSI RT2573_1 0x6874 RT2573
-product MSI RT2573_2 0x6877 RT2573
-product MSI RT2573_3 0xa861 RT2573
-product MSI RT2573_4 0xa874 RT2573
-
-/* Microdia products */
-product MICRODIA TWINKLECAM 0x600d TwinkleCam USB camera
-
-/* Microsoft products */
-product MICROSOFT SIDEPREC 0x0008 SideWinder Precision Pro
-product MICROSOFT INTELLIMOUSE 0x0009 IntelliMouse
-product MICROSOFT NATURALKBD 0x000b Natural Keyboard Elite
-product MICROSOFT DDS80 0x0014 Digital Sound System 80
-product MICROSOFT SIDEWINDER 0x001a Sidewinder Precision Racing Wheel
-product MICROSOFT INETPRO 0x001c Internet Keyboard Pro
-product MICROSOFT TBEXPLORER 0x0024 Trackball Explorer
-product MICROSOFT INTELLIEYE 0x0025 IntelliEye mouse
-product MICROSOFT INETPRO2 0x002b Internet Keyboard Pro
-product MICROSOFT MN510 0x006e MN510 Wireless
-product MICROSOFT MN110 0x007a 10/100 USB NIC
-product MICROSOFT WLINTELLIMOUSE 0x008c Wireless Optical IntelliMouse
-product MICROSOFT WLNOTEBOOK 0x00b9 Wireless Optical Mouse (Model 1023)
-product MICROSOFT WLNOTEBOOK2 0x00e1 Wireless Optical Mouse 3000 (Model 1056)
-product MICROSOFT WLNOTEBOOK3 0x00d2 Wireless Optical Mouse 3000 (Model 1049)
-product MICROSOFT WLUSBMOUSE 0x00b9 Wireless USB Mouse
-product MICROSOFT XBOX360 0x0292 XBOX 360 WLAN
-
-/* Microtech products */
-product MICROTECH SCSIDB25 0x0004 USB-SCSI-DB25
-product MICROTECH SCSIHD50 0x0005 USB-SCSI-HD50
-product MICROTECH DPCM 0x0006 USB CameraMate
-product MICROTECH FREECOM 0xfc01 Freecom USB-IDE
-
-/* Microtek products */
-product MICROTEK 336CX 0x0094 Phantom 336CX - C3 scanner
-product MICROTEK X6U 0x0099 ScanMaker X6 - X6U
-product MICROTEK C6 0x009a Phantom C6 scanner
-product MICROTEK 336CX2 0x00a0 Phantom 336CX - C3 scanner
-product MICROTEK V6USL 0x00a3 ScanMaker V6USL
-product MICROTEK V6USL2 0x80a3 ScanMaker V6USL
-product MICROTEK V6UL 0x80ac ScanMaker V6UL
-
-/* Microtune, Inc. products */
-product MICROTUNE BT_DONGLE 0x1000 Bluetooth USB dongle
-
-/* Midiman products */
-product MIDIMAN MIDISPORT2X2 0x1001 Midisport 2x2
-
-/* MindsAtWork products */
-product MINDSATWORK WALLET 0x0001 Digital Wallet
-
-/* Minolta Co., Ltd. */
-product MINOLTA 2300 0x4001 Dimage 2300
-product MINOLTA S304 0x4007 Dimage S304
-product MINOLTA X 0x4009 Dimage X
-product MINOLTA 5400 0x400e Dimage 5400
-product MINOLTA F300 0x4011 Dimage F300
-product MINOLTA E223 0x4017 Dimage E223
-
-/* Mitsumi products */
-product MITSUMI CDRRW 0x0000 CD-R/RW Drive
-product MITSUMI BT_DONGLE 0x641f Bluetooth USB dongle
-product MITSUMI FDD 0x6901 USB FDD
-
-/* Mobility products */
-product MOBILITY EA 0x0204 Ethernet
-product MOBILITY EASIDOCK 0x0304 EasiDock Ethernet
-
-/* MosChip products */
-product MOSCHIP MCS7703 0x7703 MCS7703 Serial Port Adapter
-product MOSCHIP MCS7830 0x7830 MCS7830 Ethernet
-
-/* Motorola products */
-product MOTOROLA MC141555 0x1555 MC141555 hub controller
-product MOTOROLA SB4100 0x4100 SB4100 USB Cable Modem
-product MOTOROLA2 A41XV32X 0x2a22 A41x/V32x Mobile Phones
-product MOTOROLA2 E398 0x4810 E398 Mobile Phone
-product MOTOROLA2 USBLAN 0x600c USBLAN
-product MOTOROLA2 USBLAN2 0x6027 USBLAN
-
-/* MultiTech products */
-product MULTITECH ATLAS 0xf101 MT5634ZBA-USB modem
-
-/* Mustek products */
-product MUSTEK 1200CU 0x0001 1200 CU scanner
-product MUSTEK 600CU 0x0002 600 CU scanner
-product MUSTEK 1200USB 0x0003 1200 USB scanner
-product MUSTEK 1200UB 0x0006 1200 UB scanner
-product MUSTEK 1200USBPLUS 0x0007 1200 USB Plus scanner
-product MUSTEK 1200CUPLUS 0x0008 1200 CU Plus scanner
-product MUSTEK BEARPAW1200F 0x0010 BearPaw 1200F scanner
-product MUSTEK BEARPAW1200TA 0x021e BearPaw 1200TA scanner
-product MUSTEK 600USB 0x0873 600 USB scanner
-product MUSTEK MDC800 0xa800 MDC-800 digital camera
-
-/* M-Systems products */
-product MSYSTEMS DISKONKEY 0x0010 DiskOnKey
-product MSYSTEMS DISKONKEY2 0x0011 DiskOnKey
-
-/* Myson products */
-product MYSON HEDEN 0x8818 USB-IDE
-
-/* National Semiconductor */
-product NATIONAL BEARPAW1200 0x1000 BearPaw 1200
-product NATIONAL BEARPAW2400 0x1001 BearPaw 2400
-
-/* NEC products */
-product NEC HUB 0x55aa hub
-product NEC HUB_B 0x55ab hub
-
-/* NEODIO products */
-product NEODIO ND3260 0x3260 8-in-1 Multi-format Flash Controller
-product NEODIO ND5010 0x5010 Multi-format Flash Controller
-
-/* Netac products */
-product NETAC CF_CARD 0x1060 USB-CF-Card
-product NETAC ONLYDISK 0x0003 OnlyDisk
-
-/* NetChip Technology Products */
-product NETCHIP TURBOCONNECT 0x1080 Turbo-Connect
-product NETCHIP CLIK_40 0xa140 USB Clik! 40
-product NETCHIP ETHERNETGADGET 0xa4a2 Linux Ethernet/RNDIS gadget on pxa210/25x/26x
-
-/* Netgear products */
-product NETGEAR EA101 0x1001 Ethernet
-product NETGEAR EA101X 0x1002 Ethernet
-product NETGEAR FA101 0x1020 Ethernet 10/100, USB1.1
-product NETGEAR FA120 0x1040 USB 2.0 Ethernet
-product NETGEAR WG111V2_2 0x4240 PrismGT USB 2.0 WLAN
-product NETGEAR WG111U 0x4300 WG111U
-product NETGEAR WG111U_NF 0x4301 WG111U (no firmware)
-product NETGEAR2 MA101 0x4100 MA101
-product NETGEAR2 MA101B 0x4102 MA101 Rev B
-product NETGEAR3 WG111T 0x4250 WG111T
-product NETGEAR3 WG111T_NF 0x4251 WG111T (no firmware)
-product NETGEAR3 WPN111 0x5f00 WPN111
-product NETGEAR3 WPN111_NF 0x5f01 WPN111 (no firmware)
-
-/* Nikon products */
-product NIKON E990 0x0102 Digital Camera E990
-product NIKON LS40 0x4000 CoolScan LS40 ED
-product NIKON D300 0x041a Digital Camera D300
-
-/* NovaTech Products */
-product NOVATECH NV902 0x9020 NovaTech NV-902W
-product NOVATECH RT2573 0x9021 RT2573
-
-/* Novatel Wireless products */
-product NOVATEL V640 0x1100 Merlin V620
-product NOVATEL CDMA_MODEM 0x1110 Novatel Wireless Merlin CDMA
-product NOVATEL V620 0x1110 Merlin V620
-product NOVATEL V740 0x1120 Merlin V740
-product NOVATEL V720 0x1130 Merlin V720
-product NOVATEL U740 0x1400 Merlin U740
-product NOVATEL U740_2 0x1410 Merlin U740
-product NOVATEL U870 0x1420 Merlin U870
-product NOVATEL XU870 0x1430 Merlin XU870
-product NOVATEL X950D 0x1450 Merlin X950D
-product NOVATEL ES620 0x2100 ES620 CDMA
-product NOVATEL U720 0x2110 Merlin U720
-product NOVATEL U727 0x4100 Merlin U727 CDMA
-product NOVATEL U950D 0x4400 Novatel MC950D HSUPA
-product NOVATEL ZEROCD 0x5010 Novatel ZeroCD
-product NOVATEL2 FLEXPACKGPS 0x0100 NovAtel FlexPack GPS receiver
-
-/* Merlin products */
-product MERLIN V620 0x1110 Merlin V620
-
-/* Olympus products */
-product OLYMPUS C1 0x0102 C-1 Digital Camera
-product OLYMPUS C700 0x0105 C-700 Ultra Zoom
-
-/* OmniVision Technologies, Inc. products */
-product OMNIVISION OV511 0x0511 OV511 Camera
-product OMNIVISION OV511PLUS 0xa511 OV511+ Camera
-
-/* OnSpec Electronic, Inc. */
-product ONSPEC MDCFE_B_CF_READER 0xa000 MDCFE-B USB CF Reader
-product ONSPEC CFMS_RW 0xa001 SIIG/Datafab Memory Stick+CF Reader/Writer
-product ONSPEC READER 0xa003 Datafab-based Reader
-product ONSPEC CFSM_READER 0xa005 PNY/Datafab CF+SM Reader
-product ONSPEC CFSM_READER2 0xa006 Simple Tech/Datafab CF+SM Reader
-product ONSPEC MDSM_B_READER 0xa103 MDSM-B reader
-product ONSPEC CFSM_COMBO 0xa109 USB to CF + SM Combo (LC1)
-product ONSPEC UCF100 0xa400 FlashLink UCF-100 CompactFlash Reader
-product ONSPEC2 IMAGEMATE_SDDR55 0xa103 ImageMate SDDR55
-
-/* Option products */
-product OPTION VODAFONEMC3G 0x5000 Vodafone Mobile Connect 3G datacard
-product OPTION GT3G 0x6000 GlobeTrotter 3G datacard
-product OPTION GT3GQUAD 0x6300 GlobeTrotter 3G QUAD datacard
-product OPTION GT3GPLUS 0x6600 GlobeTrotter 3G+ datacard
-product OPTION GTMAX36 0x6701 GlobeTrotter Max 3.6 Modem
-
-/* OQO */
-product OQO WIFI01 0x0002 model 01 WiFi interface
-product OQO BT01 0x0003 model 01 Bluetooth interface
-product OQO ETHER01PLUS 0x7720 model 01+ Ethernet
-product OQO ETHER01 0x8150 model 01 Ethernet interface
-
-/* Palm Computing, Inc. product */
-product PALM SERIAL 0x0080 USB Serial
-product PALM M500 0x0001 Palm m500
-product PALM M505 0x0002 Palm m505
-product PALM M515 0x0003 Palm m515
-product PALM I705 0x0020 Palm i705
-product PALM TUNGSTEN_Z 0x0031 Palm Tungsten Z
-product PALM M125 0x0040 Palm m125
-product PALM M130 0x0050 Palm m130
-product PALM TUNGSTEN_T 0x0060 Palm Tungsten T
-product PALM ZIRE31 0x0061 Palm Zire 31
-product PALM ZIRE 0x0070 Palm Zire
-
-/* Panasonic products */
-product PANASONIC LS120CAM 0x0901 LS-120 Camera
-product PANASONIC KXL840AN 0x0d01 CD-R Drive KXL-840AN
-product PANASONIC KXLRW32AN 0x0d09 CD-R Drive KXL-RW32AN
-product PANASONIC KXLCB20AN 0x0d0a CD-R Drive KXL-CB20AN
-product PANASONIC KXLCB35AN 0x0d0e DVD-ROM & CD-R/RW
-product PANASONIC SDCAAE 0x1b00 MultiMediaCard
-
-/* Peracom products */
-product PERACOM SERIAL1 0x0001 Serial
-product PERACOM ENET 0x0002 Ethernet
-product PERACOM ENET3 0x0003 At Home Ethernet
-product PERACOM ENET2 0x0005 Ethernet
-
-/* Philips products */
-product PHILIPS DSS350 0x0101 DSS 350 Digital Speaker System
-product PHILIPS DSS 0x0104 DSS XXX Digital Speaker System
-product PHILIPS HUB 0x0201 hub
-product PHILIPS PCA646VC 0x0303 PCA646VC PC Camera
-product PHILIPS PCVC680K 0x0308 PCVC680K Vesta Pro PC Camera
-product PHILIPS DSS150 0x0471 DSS 150 Digital Speaker System
-product PHILIPS SNU5600 0x1236 SNU5600
-product PHILIPS UM10016 0x1552 ISP 1581 Hi-Speed USB MPEG2 Encoder Reference Kit
-product PHILIPS DIVAUSB 0x1801 DIVA USB mp3 player
-
-/* Philips Semiconductor products */
-product PHILIPSSEMI HUB1122 0x1122 hub
-
-/* P.I. Engineering products */
-product PIENGINEERING PS2USB 0x020b PS2 to Mac USB Adapter
-
-/* Planex Communications products */
-product PLANEX GW_US11H 0x14ea GW-US11H WLAN
-product PLANEX2 GW_US11S 0x3220 GW-US11S WLAN
-product PLANEX2 GW_US54GXS 0x5303 GW-US54GXS WLAN
-product PLANEX2 GWUS54HP 0xab01 GW-US54HP
-product PLANEX2 GWUS54MINI2 0xab50 GW-US54Mini2
-product PLANEX2 GWUS54SG 0xc002 GW-US54SG
-product PLANEX2 GWUS54GZL 0xc007 GW-US54GZL
-product PLANEX2 GWUS54GD 0xed01 GW-US54GD
-product PLANEX2 GWUSMM 0xed02 GW-USMM
-product PLANEX3 GWUS54GZ 0xab10 GW-US54GZ
-product PLANEX3 GU1000T 0xab11 GU-1000T
-product PLANEX3 GWUS54MINI 0xab13 GW-US54Mini
-
-/* Plextor Corp. */
-product PLEXTOR 40_12_40U 0x0011 PlexWriter 40/12/40U
-
-/* PLX products */
-product PLX TESTBOARD 0x9060 test board
-
-/* PNY products */
-product PNY ATTACHE2 0x0010 USB 2.0 Flash Drive
-
-/* PortGear products */
-product PORTGEAR EA8 0x0008 Ethernet
-product PORTGEAR EA9 0x0009 Ethernet
-
-/* Portsmith products */
-product PORTSMITH EEA 0x3003 Express Ethernet
-
-/* Primax products */
-product PRIMAX G2X300 0x0300 G2-200 scanner
-product PRIMAX G2E300 0x0301 G2E-300 scanner
-product PRIMAX G2300 0x0302 G2-300 scanner
-product PRIMAX G2E3002 0x0303 G2E-300 scanner
-product PRIMAX 9600 0x0340 Colorado USB 9600 scanner
-product PRIMAX 600U 0x0341 Colorado 600u scanner
-product PRIMAX 6200 0x0345 Visioneer 6200 scanner
-product PRIMAX 19200 0x0360 Colorado USB 19200 scanner
-product PRIMAX 1200U 0x0361 Colorado 1200u scanner
-product PRIMAX G600 0x0380 G2-600 scanner
-product PRIMAX 636I 0x0381 ReadyScan 636i
-product PRIMAX G2600 0x0382 G2-600 scanner
-product PRIMAX G2E600 0x0383 G2E-600 scanner
-product PRIMAX COMFORT 0x4d01 Comfort
-product PRIMAX MOUSEINABOX 0x4d02 Mouse-in-a-Box
-product PRIMAX PCGAUMS1 0x4d04 Sony PCGA-UMS1
-
-/* Prolific products */
-product PROLIFIC PL2301 0x0000 PL2301 Host-Host interface
-product PROLIFIC PL2302 0x0001 PL2302 Host-Host interface
-product PROLIFIC RSAQ2 0x04bb PL2303 Serial (IODATA USB-RSAQ2)
-product PROLIFIC PL2303 0x2303 PL2303 Serial (ATEN/IOGEAR UC232A)
-product PROLIFIC PL2305 0x2305 Parallel printer
-product PROLIFIC ATAPI4 0x2307 ATAPI-4 Controller
-product PROLIFIC PL2501 0x2501 PL2501 Host-Host interface
-product PROLIFIC PHAROS 0xaaa0 Prolific Pharos
-product PROLIFIC RSAQ3 0xaaa2 PL2303 Serial Adapter (IODATA USB-RSAQ3)
-product PROLIFIC2 WSIM 0x2001 Willcom WSIM
-
-/* Putercom products */
-product PUTERCOM UPA100 0x047e USB-1284 BRIDGE
-
-/* Qcom products */
-product QCOM RT2573 0x6196 RT2573
-product QCOM RT2573_2 0x6229 RT2573
-
-/* Qualcomm products */
-product QUALCOMM CDMA_MSM 0x6000 CDMA Technologies MSM phone
-product QUALCOMM2 RWT_FCT 0x3100 RWT FCT-CDMA 2000 1xRTT modem
-product QUALCOMM2 CDMA_MSM 0x3196 CDMA Technologies MSM modem
-product QUALCOMMINC CDMA_MSM 0x0001 CDMA Technologies MSM modem
-
-/* Qtronix products */
-product QTRONIX 980N 0x2011 Scorpion-980N keyboard
-
-/* Quickshot products */
-product QUICKSHOT STRIKEPAD 0x6238 USB StrikePad
-
-/* Radio Shack */
-product RADIOSHACK USBCABLE 0x4026 USB to Serial Cable
-
-/* Rainbow Technologies products */
-product RAINBOW IKEY2000 0x1200 i-Key 2000
-
-/* Ralink Technology products */
-product RALINK RT2570 0x1706 RT2500USB Wireless Adapter
-product RALINK RT2570_2 0x2570 RT2500USB Wireless Adapter
-product RALINK RT2573 0x2573 RT2501USB Wireless Adapter
-product RALINK RT2671 0x2671 RT2601USB Wireless Adapter
-product RALINK RT2570_3 0x9020 RT2500USB Wireless Adapter
-product RALINK RT2573_2 0x9021 RT2501USB Wireless Adapter
-
-/* ReakTek products */
-/* Green House and CompUSA OEM this part */
-product REALTEK USBKR100 0x8150 USBKR100 USB Ethernet
-
-/* Ricoh products */
-product RICOH VGPVCC2 0x1830 VGP-VCC2 Camera
-product RICOH VGPVCC3 0x1832 VGP-VCC3 Camera
-product RICOH VGPVCC2_2 0x1833 VGP-VCC2 Camera
-product RICOH VGPVCC2_3 0x1834 VGP-VCC2 Camera
-product RICOH VGPVCC7 0x183a VGP-VCC7 Camera
-product RICOH VGPVCC8 0x183b VGP-VCC8 Camera
-
-/* Roland products */
-product ROLAND UM1 0x0009 UM-1 MIDI I/F
-product ROLAND UM880N 0x0014 EDIROL UM-880 MIDI I/F (native)
-product ROLAND UM880G 0x0015 EDIROL UM-880 MIDI I/F (generic)
-
-/* Rockfire products */
-product ROCKFIRE GAMEPAD 0x2033 gamepad 203USB
-
-/* RATOC Systems products */
-product RATOC REXUSB60 0xb000 REX-USB60
-
-/* Sagem products */
-product SAGEM USBSERIAL 0x0027 USB-Serial Controller
-product SAGEM XG760A 0x004a XG-760A
-product SAGEM XG76NA 0x0062 XG-76NA
-
-/* Samsung products */
-product SAMSUNG ML6060 0x3008 ML-6060 laser printer
-product SAMSUNG YP_U2 0x5050 YP-U2 MP3 Player
-product SAMSUNG I500 0x6601 I500 Palm USB Phone
-
-/* Samsung Techwin products */
-product SAMSUNG_TECHWIN DIGIMAX_410 0x000a Digimax 410
-
-/* SanDisk products */
-product SANDISK SDDR05A 0x0001 ImageMate SDDR-05a
-product SANDISK SDDR31 0x0002 ImageMate SDDR-31
-product SANDISK SDDR05 0x0005 ImageMate SDDR-05
-product SANDISK SDDR12 0x0100 ImageMate SDDR-12
-product SANDISK SDDR09 0x0200 ImageMate SDDR-09
-product SANDISK SDDR75 0x0810 ImageMate SDDR-75
-product SANDISK SDCZ2_256 0x7104 Cruzer Mini 256MB
-product SANDISK SDCZ4_128 0x7112 Cruzer Micro 128MB
-product SANDISK SDCZ4_256 0x7113 Cruzer Micro 256MB
-
-/* Sanyo Electric products */
-product SANYO SCP4900 0x0701 Sanyo SCP-4900 USB Phone
-
-/* ScanLogic products */
-product SCANLOGIC SL11R 0x0002 SL11R IDE Adapter
-product SCANLOGIC 336CX 0x0300 Phantom 336CX - C3 scanner
-
-/* Senao products */
-product SENAO NUB8301 0x2000 NUB-8301
-
-/* ShanTou products */
-product SHANTOU ST268 0x0268 ST268
-product SHANTOU DM9601 0x9601 DM 9601
-
-/* Shark products */
-product SHARK PA 0x0400 Pocket Adapter
-
-/* Sharp products */
-product SHARP SL5500 0x8004 Zaurus SL-5500 PDA
-product SHARP SLA300 0x8005 Zaurus SL-A300 PDA
-product SHARP SL5600 0x8006 Zaurus SL-5600 PDA
-product SHARP SLC700 0x8007 Zaurus SL-C700 PDA
-product SHARP SLC750 0x9031 Zaurus SL-C750 PDA
-product SHARP WZERO3ES 0x9123 W-ZERO3 ES Smartphone
-
-/* Shuttle Technology products */
-product SHUTTLE EUSB 0x0001 E-USB Bridge
-product SHUTTLE EUSCSI 0x0002 eUSCSI Bridge
-product SHUTTLE SDDR09 0x0003 ImageMate SDDR09
-product SHUTTLE EUSBCFSM 0x0005 eUSB SmartMedia / CompactFlash Adapter
-product SHUTTLE ZIOMMC 0x0006 eUSB MultiMediaCard Adapter
-product SHUTTLE HIFD 0x0007 Sony Hifd
-product SHUTTLE EUSBATAPI 0x0009 eUSB ATA/ATAPI Adapter
-product SHUTTLE CF 0x000a eUSB CompactFlash Adapter
-product SHUTTLE EUSCSI_B 0x000b eUSCSI Bridge
-product SHUTTLE EUSCSI_C 0x000c eUSCSI Bridge
-product SHUTTLE CDRW 0x0101 CD-RW Device
-product SHUTTLE EUSBORCA 0x0325 eUSB ORCA Quad Reader
-
-/* Siemens products */
-product SIEMENS SPEEDSTREAM 0x1001 SpeedStream
-product SIEMENS SPEEDSTREAM22 0x1022 SpeedStream 1022
-product SIEMENS2 WLL013 0x001b WLL013
-product SIEMENS2 ES75 0x0034 GSM module MC35
-product SIEMENS2 WL54G 0x3c06 54g USB Network Adapter
-product SIEMENS3 SX1 0x0001 SX1
-product SIEMENS3 X65 0x0003 X65
-product SIEMENS3 X75 0x0004 X75
-
-/* Sierra Wireless products */
-product SIERRA AIRCARD580 0x0112 Sierra Wireless AirCard 580
-product SIERRA AIRCARD595 0x0019 Sierra Wireless AirCard 595
-product SIERRA AC595U 0x0120 Sierra Wireless AirCard 595U
-product SIERRA AC597E 0x0021 Sierra Wireless AirCard 597E
-product SIERRA C597 0x0023 Sierra Wireless Compass 597
-product SIERRA AC880 0x6850 Sierra Wireless AirCard 880
-product SIERRA AC881 0x6851 Sierra Wireless AirCard 881
-product SIERRA AC880E 0x6852 Sierra Wireless AirCard 880E
-product SIERRA AC881E 0x6853 Sierra Wireless AirCard 881E
-product SIERRA AC880U 0x6855 Sierra Wireless AirCard 880U
-product SIERRA AC881U 0x6856 Sierra Wireless AirCard 881U
-product SIERRA EM5625 0x0017 EM5625
-product SIERRA MC5720 0x0218 MC5720 Wireless Modem
-product SIERRA MC5720_2 0x0018 MC5720
-product SIERRA MC5725 0x0020 MC5725
-product SIERRA MINI5725 0x0220 Sierra Wireless miniPCI 5275
-product SIERRA MC8755_2 0x6802 MC8755
-product SIERRA MC8765 0x6803 MC8765
-product SIERRA MC8755 0x6804 MC8755
-product SIERRA AC875U 0x6812 AC875U HSDPA USB Modem
-product SIERRA MC8755_3 0x6813 MC8755 HSDPA
-product SIERRA MC8775_2 0x6815 MC8775
-product SIERRA AIRCARD875 0x6820 Aircard 875 HSDPA
-product SIERRA MC8780 0x6832 MC8780
-product SIERRA MC8781 0x6833 MC8781
-product SIERRA TRUINSTALL 0x0fff Aircard Tru Installer
-
-/* Sigmatel products */
-product SIGMATEL I_BEAD100 0x8008 i-Bead 100 MP3 Player
-
-/* SIIG products */
-/* Also: Omnidirectional Control Technology products */
-product SIIG DIGIFILMREADER 0x0004 DigiFilm-Combo Reader
-product SIIG WINTERREADER 0x0330 WINTERREADER Reader
-product SIIG2 USBTOETHER 0x0109 USB TO Ethernet
-product SIIG2 US2308 0x0421 Serial
-
-/* Silicom products */
-product SILICOM U2E 0x0001 U2E
-product SILICOM GPE 0x0002 Psion Gold Port Ethernet
-
-/* SI Labs */
-product SILABS POLOLU 0x803b Pololu Serial
-product SILABS ARGUSISP 0x8066 Argussoft ISP
-product SILABS CRUMB128 0x807a Crumb128 board
-product SILABS DEGREE 0x80ca Degree Controls Inc
-product SILABS TRAQMATE 0x80ed Track Systems Traqmate
-product SILABS SUUNTO 0x80f6 Suunto Sports Instrument
-product SILABS BURNSIDE 0x813d Burnside Telecon Deskmobile
-product SILABS HELICOM 0x815e Helicomm IP-Link 1220-DVM
-product SILABS CP2102 0xea60 SILABS USB UART
-product SILABS LIPOWSKY_JTAG 0x81c8 Lipowsky Baby-JTAG
-product SILABS LIPOWSKY_LIN 0x81e2 Lipowsky Baby-LIN
-product SILABS LIPOWSKY_HARP 0x8218 Lipowsky HARP-1
-product SILABS CP2102 0xea60 SILABS USB UARTa
-product SILABS CP210X_2 0xea61 CP210x Serial
-product SILABS2 DCU11CLONE 0xaa26 DCU-11 clone
-
-/* Silicon Portals Inc. */
-product SILICONPORTALS YAPPH_NF 0x0200 YAP Phone (no firmware)
-product SILICONPORTALS YAPPHONE 0x0201 YAP Phone
-
-/* Sirius Technologies products */
-product SIRIUS ROADSTER 0x0001 NetComm Roadster II 56 USB
-
-/* Sitecom products */
-product SITECOM LN029 0x182d USB 2.0 Ethernet
-product SITECOM SERIAL 0x2068 USB to serial cable (v2)
-product SITECOM2 WL022 0x182d WL-022
-
-/* Sitecom Europe products */
-product SITECOMEU LN028 0x061c LN-028
-product SITECOMEU WL113 0x9071 WL-113
-product SITECOMEU ZD1211B 0x9075 ZD1211B
-product SITECOMEU WL172 0x90ac WL-172
-product SITECOMEU WL113R2 0x9712 WL-113 rev 2
-
-/* Skanhex Technology products */
-product SKANHEX MD_7425 0x410a MD 7425 Camera
-product SKANHEX SX_520Z 0x5200 SX 520z Camera
-
-/* SmartBridges products */
-product SMARTBRIDGES SMARTLINK 0x0001 SmartLink USB Ethernet
-product SMARTBRIDGES SMARTNIC 0x0003 smartNIC 2 PnP Ethernet
-
-/* SMC products */
-product SMC 2102USB 0x0100 10Mbps Ethernet
-product SMC 2202USB 0x0200 10/100 Ethernet
-product SMC 2206USB 0x0201 EZ Connect USB Ethernet
-product SMC 2862WG 0xee13 EZ Connect Wireless Adapter
-product SMC2 2020HUB 0x2020 USB Hub
-product SMC3 2662WUSB 0xa002 2662W-AR Wireless
-
-/* SOHOware products */
-product SOHOWARE NUB100 0x9100 10/100 USB Ethernet
-product SOHOWARE NUB110 0x9110 10/100 USB Ethernet
-
-/* SOLID YEAR products */
-product SOLIDYEAR KEYBOARD 0x2101 Solid Year USB keyboard
-
-/* SONY products */
-product SONY DSC 0x0010 DSC cameras
-product SONY MS_NW_MS7 0x0025 Memorystick NW-MS7
-product SONY PORTABLE_HDD_V2 0x002b Portable USB Harddrive V2
-product SONY MSACUS1 0x002d Memorystick MSAC-US1
-product SONY HANDYCAM 0x002e Handycam
-product SONY MSC 0x0032 MSC memory stick slot
-product SONY CLIE_35 0x0038 Sony Clie v3.5
-product SONY MS_PEG_N760C 0x0058 PEG N760c Memorystick
-product SONY CLIE_40 0x0066 Sony Clie v4.0
-product SONY MS_MSC_U03 0x0069 Memorystick MSC-U03
-product SONY CLIE_40_MS 0x006d Sony Clie v4.0 Memory Stick slot
-product SONY CLIE_S360 0x0095 Sony Clie s360
-product SONY CLIE_41_MS 0x0099 Sony Clie v4.1 Memory Stick slot
-product SONY CLIE_41 0x009a Sony Clie v4.1
-product SONY CLIE_NX60 0x00da Sony Clie nx60
-product SONY CLIE_TH55 0x0144 Sony Clie th55
-product SONY CLIE_TJ37 0x0169 Sony Clie tj37
-
-/* Sony Ericsson products */
-product SONYERICSSON DCU10 0x0528 USB Cable
-
-/* SOURCENEXT products */
-product SOURCENEXT KEIKAI8 0x039f KeikaiDenwa 8
-product SOURCENEXT KEIKAI8_CHG 0x012e KeikaiDenwa 8 with charger
-
-/* SparkLAN products */
-product SPARKLAN RT2573 0x0004 RT2573
-
-/* Sphairon Access Systems GmbH products */
-product SPHAIRON UB801R 0x0110 UB801R
-
-/* STMicroelectronics products */
-product STMICRO BIOCPU 0x2016 Biometric Coprocessor
-product STMICRO COMMUNICATOR 0x7554 USB Communicator
-
-/* STSN products */
-product STSN STSN0001 0x0001 Internet Access Device
-
-/* SUN Corporation products */
-product SUNTAC DS96L 0x0003 SUNTAC U-Cable type D2
-product SUNTAC PS64P1 0x0005 SUNTAC U-Cable type P1
-product SUNTAC VS10U 0x0009 SUNTAC Slipper U
-product SUNTAC IS96U 0x000a SUNTAC Ir-Trinity
-product SUNTAC AS64LX 0x000b SUNTAC U-Cable type A3
-product SUNTAC AS144L4 0x0011 SUNTAC U-Cable type A4
-
-/* Sun Microsystems products */
-product SUN KEYBOARD 0x0005 Type 6 USB keyboard
-/* XXX The above is a North American PC style keyboard possibly */
-product SUN MOUSE 0x0100 Type 6 USB mouse
-
-/* Supra products */
-product DIAMOND2 SUPRAEXPRESS56K 0x07da Supra Express 56K modem
-product DIAMOND2 SUPRA2890 0x0b4a SupraMax 2890 56K Modem
-product DIAMOND2 RIO600USB 0x5001 Rio 600 USB
-product DIAMOND2 RIO800USB 0x5002 Rio 800 USB
-
-/* Surecom Technology products */
-product SURECOM RT2570 0x11f3 RT2570
-product SURECOM RT2573 0x31f3 RT2573
-
-/* Sweex products */
-product SWEEX ZD1211 0x1809 ZD1211
-
-/* System TALKS, Inc. */
-product SYSTEMTALKS SGCX2UL 0x1920 SGC-X2UL
-
-/* Tapwave products */
-product TAPWAVE ZODIAC 0x0100 Zodiac
-
-/* Taugagreining products */
-product TAUGA CAMERAMATE 0x0005 CameraMate (DPCM_USB)
-
-/* TDK products */
-product TDK UPA9664 0x0115 USB-PDC Adapter UPA9664
-product TDK UCA1464 0x0116 USB-cdmaOne Adapter UCA1464
-product TDK UHA6400 0x0117 USB-PHS Adapter UHA6400
-product TDK UPA6400 0x0118 USB-PHS Adapter UPA6400
-product TDK BT_DONGLE 0x0309 Bluetooth USB dongle
-
-/* TEAC products */
-product TEAC FD05PUB 0x0000 FD-05PUB floppy
-
-/* Tekram Technology products */
-product TEKRAM QUICKWLAN 0x1630 QuickWLAN
-product TEKRAM ZD1211_1 0x5630 ZD1211
-product TEKRAM ZD1211_2 0x6630 ZD1211
-
-/* Telex Communications products */
-product TELEX MIC1 0x0001 Enhanced USB Microphone
-
-/* Ten X Technology, Inc. */
-product TENX UAUDIO0 0xf211 USB audio headset
-
-/* Texas Intel products */
-product TI UTUSB41 0x1446 UT-USB41 hub
-product TI TUSB2046 0x2046 TUSB2046 hub
-
-/* Thrustmaster products */
-product THRUST FUSION_PAD 0xa0a3 Fusion Digital Gamepad
-
-/* Topre Corporation products */
-product TOPRE HHKB 0x0100 HHKB Professional
-
-/* Toshiba Corporation products */
-product TOSHIBA POCKETPC_E740 0x0706 PocketPC e740
-
-/* Trek Technology products */
-product TREK THUMBDRIVE 0x1111 ThumbDrive
-product TREK MEMKEY 0x8888 IBM USB Memory Key
-product TREK THUMBDRIVE_8MB 0x9988 ThumbDrive_8MB
-
-/* Tripp-Lite products */
-product TRIPPLITE U209 0x2008 Serial
-
-/* Trumpion products */
-product TRUMPION T33520 0x1001 T33520 USB Flash Card Controller
-product TRUMPION C3310 0x1100 Comotron C3310 MP3 player
-product TRUMPION MP3 0x1200 MP3 player
-
-/* TwinMOS */
-product TWINMOS G240 0xa006 G240
-product TWINMOS MDIV 0x1325 Memory Disk IV
-
-/* Ubiquam products */
-product UBIQUAM UALL 0x3100 CDMA 1xRTT USB Modem (U-100/105/200/300/520)
-
-/* Ultima products */
-product ULTIMA 1200UBPLUS 0x4002 1200 UB Plus scanner
-
-/* UMAX products */
-product UMAX ASTRA1236U 0x0002 Astra 1236U Scanner
-product UMAX ASTRA1220U 0x0010 Astra 1220U Scanner
-product UMAX ASTRA2000U 0x0030 Astra 2000U Scanner
-product UMAX ASTRA2100U 0x0130 Astra 2100U Scanner
-product UMAX ASTRA2200U 0x0230 Astra 2200U Scanner
-product UMAX ASTRA3400 0x0060 Astra 3400 Scanner
-
-/* U-MEDIA Communications products */
-product UMEDIA TEW444UBEU 0x3006 TEW-444UB EU
-product UMEDIA TEW444UBEU_NF 0x3007 TEW-444UB EU (no firmware)
-product UMEDIA TEW429UB_A 0x300a TEW-429UB_A
-product UMEDIA TEW429UB 0x300b TEW-429UB
-product UMEDIA TEW429UBC1 0x300d TEW-429UB C1
-product UMEDIA ALL0298V2 0x3204 ALL0298 v2
-product UMEDIA AR5523_2 0x3205 AR5523
-product UMEDIA AR5523_2_NF 0x3206 AR5523 (no firmware)
-
-/* Universal Access products */
-product UNIACCESS PANACHE 0x0101 Panache Surf USB ISDN Adapter
-
-/* U.S. Robotics products */
-product USR USR5423 0x0121 USR5423 WLAN
-
-/* VIA Technologies products */
-product VIA USB2IDEBRIDGE 0x6204 USB 2.0 IDE Bridge
-
-/* USI products */
-product USI MC60 0x10c5 MC60 Serial
-
-/* VidzMedia products */
-product VIDZMEDIA MONSTERTV 0x4fb1 MonsterTV P2H
-
-/* Vision products */
-product VISION VC6452V002 0x0002 CPiA Camera
-
-/* Visioneer products */
-product VISIONEER 7600 0x0211 OneTouch 7600
-product VISIONEER 5300 0x0221 OneTouch 5300
-product VISIONEER 3000 0x0224 Scanport 3000
-product VISIONEER 6100 0x0231 OneTouch 6100
-product VISIONEER 6200 0x0311 OneTouch 6200
-product VISIONEER 8100 0x0321 OneTouch 8100
-product VISIONEER 8600 0x0331 OneTouch 8600
-
-/* Vivitar products */
-product VIVITAR 35XX 0x0003 Vivicam 35Xx
-
-/* VTech products */
-product VTECH RT2570 0x3012 RT2570
-product VTECH ZD1211B 0x3014 ZD1211B
-
-/* Wacom products */
-product WACOM CT0405U 0x0000 CT-0405-U Tablet
-product WACOM GRAPHIRE 0x0010 Graphire
-product WACOM GRAPHIRE3_4X5 0x0013 Graphire 3 4x5
-product WACOM INTUOSA5 0x0021 Intuos A5
-product WACOM GD0912U 0x0022 Intuos 9x12 Graphics Tablet
-/* WCH products*/
-product WCH CH341SER 0x5523 CH341/CH340 USB-Serial Bridge
-/* Western Digital products */
-product WESTERN COMBO 0x0200 Firewire USB Combo
-product WESTERN EXTHDD 0x0400 External HDD
-product WESTERN HUB 0x0500 USB HUB
-product WESTERN MYBOOK 0x0901 MyBook External HDD
-
-/* Windbond Electronics */
-product WINBOND UH104 0x5518 4-port USB Hub
-
-/* WinMaxGroup products */
-product WINMAXGROUP FLASH64MC 0x6660 USB Flash Disk 64M-C
-
-/* Wistron NeWeb products */
-product WISTRONNEWEB UR045G 0x0427 PrismGT USB 2.0 WLAN
-product WISTRONNEWEB UR055G 0x0711 UR055G
-product WISTRONNEWEB AR5523_1 0x0826 AR5523
-product WISTRONNEWEB AR5523_1_NF 0x0827 AR5523 (no firmware)
-product WISTRONNEWEB AR5523_2 0x082a AR5523
-product WISTRONNEWEB AR5523_2_NF 0x0829 AR5523 (no firmware)
-
-/* Xerox products */
-product XEROX WCM15 0xffef WorkCenter M15
-
-/* Xirlink products */
-product XIRLINK PCCAM 0x8080 IBM PC Camera
-
-/* Xyratex products */
-product XYRATEX PRISM_GT_1 0x2000 PrismGT USB 2.0 WLAN
-product XYRATEX PRISM_GT_2 0x2002 PrismGT USB 2.0 WLAN
-
-/* Y-E Data products */
-product YEDATA FLASHBUSTERU 0x0000 Flashbuster-U
-
-/* Yamaha products */
-product YAMAHA UX256 0x1000 UX256 MIDI I/F
-product YAMAHA UX96 0x1008 UX96 MIDI I/F
-product YAMAHA RTA54I 0x4000 NetVolante RTA54i Broadband&ISDN Router
-product YAMAHA RTA55I 0x4004 NetVolante RTA55i Broadband VoIP Router
-product YAMAHA RTW65B 0x4001 NetVolante RTW65b Broadband Wireless Router
-product YAMAHA RTW65I 0x4002 NetVolante RTW65i Broadband&ISDN Wireless Router
-
-/* Yano products */
-product YANO U640MO 0x0101 U640MO-03
-product YANO FW800HD 0x05fc METALWEAR-HDD
-
-/* Z-Com products */
-product ZCOM M4Y750 0x0001 M4Y-750
-product ZCOM XI725 0x0002 XI-725/726
-product ZCOM XI735 0x0005 XI-735
-product ZCOM XG703A 0x0008 PrismGT USB 2.0 WLAN
-product ZCOM ZD1211 0x0011 ZD1211
-product ZCOM AR5523 0x0012 AR5523
-product ZCOM AR5523_NF 0x0013 AR5523 driver (no firmware)
-product ZCOM ZD1211B 0x001a ZD1211B
-
-/* Zinwell products */
-product ZINWELL RT2570 0x0260 RT2570
-
-/* Zoom Telephonics, Inc. products */
-product ZOOM 2986L 0x9700 2986L Fax modem
-
-/* Zoran Microelectronics products */
-product ZORAN EX20DSC 0x4343 Digital Camera EX-20 DSC
-
-/* Zydas Technology Corporation products */
-product ZYDAS ZD1211 0x1211 ZD1211 WLAN abg
-product ZYDAS ZD1211B 0x1215 ZD1211B
-
-/* ZyXEL Communication Co. products */
-product ZYXEL OMNI56K 0x1500 Omni 56K Plus
-product ZYXEL 980N 0x2011 Scorpion-980N keyboard
-product ZYXEL ZYAIRG220 0x3401 ZyAIR G-220
-product ZYXEL G200V2 0x3407 G-200 v2
-product ZYXEL AG225H 0x3409 AG-225H
-product ZYXEL M202 0x340a M-202
-product ZYXEL G220V2 0x340f G-220 v2
-product ZYXEL G202 0x3410 G-202
diff --git a/sys/dev/usb2/image/uscanner2.c b/sys/dev/usb2/image/uscanner2.c
index 4dcdde3..89056ea 100644
--- a/sys/dev/usb2/image/uscanner2.c
+++ b/sys/dev/usb2/image/uscanner2.c
@@ -67,7 +67,7 @@ __FBSDID("$FreeBSD$");
static int uscanner_debug = 0;
SYSCTL_NODE(_hw_usb2, OID_AUTO, uscanner, CTLFLAG_RW, 0, "USB uscanner");
-SYSCTL_INT(_hw_usb2_uscanner, OID_AUTO, uscanner, CTLFLAG_RW, &uscanner_debug,
+SYSCTL_INT(_hw_usb2_uscanner, OID_AUTO, debug, CTLFLAG_RW, &uscanner_debug,
0, "uscanner debug level");
#endif
diff --git a/sys/dev/usb2/include/Makefile b/sys/dev/usb2/include/Makefile
index a8f3500..02ac29f 100644
--- a/sys/dev/usb2/include/Makefile
+++ b/sys/dev/usb2/include/Makefile
@@ -6,8 +6,8 @@
S=${.CURDIR}/../../..
all:
- awk -f $S/tools/usbdevs2h.awk $S/dev/usb2/core/usbdevs -d ; mv usbdevs_data.h usb2_devtable.h
- awk -f $S/tools/usbdevs2h.awk $S/dev/usb2/core/usbdevs -h ; mv usbdevs.h usb2_devid.h
+ awk -f $S/tools/usbdevs2h.awk $S/dev/usb/usbdevs -d ; mv usbdevs_data.h usb2_devtable.h
+ awk -f $S/tools/usbdevs2h.awk $S/dev/usb/usbdevs -h ; mv usbdevs.h usb2_devid.h
clean:
rm -f usb2_devtable.h usb2_devid.h
diff --git a/sys/dev/usb2/include/urio2_ioctl.h b/sys/dev/usb2/include/urio2_ioctl.h
deleted file mode 100644
index 713647c..0000000
--- a/sys/dev/usb2/include/urio2_ioctl.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*-
- ----------------------------------------------------------------------
-
- Copyright (C) 2000 Cesar Miquel (miquel@df.uba.ar)
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted under any licence of your choise which
- meets the open source licence definiton
- http://www.opensource.org/opd.html such as the GNU licence or the
- BSD licence.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License or the BSD license for more details.
-
- ----------------------------------------------------------------------
-
- Modified for FreeBSD by Iwasa Kazmi <kzmi@ca2.so-net.ne.jp>
-
- ---------------------------------------------------------------------- */
-
-/* $FreeBSD$ */
-
-#include <sys/ioccom.h>
-
-struct RioCommand {
- uint16_t length;
- int request;
- int requesttype;
- int value;
- int index;
- void *buffer;
- int timeout;
-};
-
-#define RIO_SEND_COMMAND _IOWR('U', 200, struct RioCommand)
-#define RIO_RECV_COMMAND _IOWR('U', 201, struct RioCommand)
-
-#define RIO_DIR_OUT 0x0
-#define RIO_DIR_IN 0x1
diff --git a/sys/dev/usb2/include/usb2_devid.h b/sys/dev/usb2/include/usb2_devid.h
index 7f59f54..f648822 100644
--- a/sys/dev/usb2/include/usb2_devid.h
+++ b/sys/dev/usb2/include/usb2_devid.h
@@ -1,10 +1,10 @@
-/* $FreeBSD$ */
+/* ??? */
/*
* THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
*
* generated from:
- * FreeBSD: src/sys/dev/usb/usbdevs,v 1.372 2008/09/19 09:04:06 kevlo Exp
+ * FreeBSD: src/sys/dev/usb/usbdevs,v 1.381 2008/11/02 03:00:36 imp Exp
*/
/* $NetBSD: usbdevs,v 1.392 2004/12/29 08:38:44 imp Exp $ */
@@ -951,6 +951,7 @@
#define USB_PRODUCT_BELKIN_F5D7050 0x7050 /* F5D7050 Wireless Adapter */
#define USB_PRODUCT_BELKIN_F5D7051 0x7051 /* F5D7051 54g USB Network Adapter */
#define USB_PRODUCT_BELKIN_F5D7050A 0x705a /* F5D7050A Wireless Adapter */
+/* Also sold as 'Ativa 802.11g wireless card' */
#define USB_PRODUCT_BELKIN_F5D7050_V4000 0x705c /* F5D7050 v4000 Wireless Adapter */
#define USB_PRODUCT_BELKIN_F5D9050V3 0x905b /* F5D9050 ver 3 Wireless Adapter */
#define USB_PRODUCT_BELKIN2_F5U002 0x0002 /* F5U002 Parallel printer */
@@ -1431,6 +1432,7 @@
#define USB_PRODUCT_HP_640C 0x2004 /* DeskJet 640c */
#define USB_PRODUCT_HP_4670V 0x3005 /* ScanJet 4670v */
#define USB_PRODUCT_HP_P1100 0x3102 /* Photosmart P1100 */
+#define USB_PRODUCT_HP_OJ4215 0x3d11 /* OfficeJet 4215 */
#define USB_PRODUCT_HP_HN210E 0x811c /* Ethernet HN210E */
#define USB_PRODUCT_HP2_C500 0x6002 /* PhotoSmart C500 */
@@ -1441,7 +1443,7 @@
/* HUAWEI products */
#define USB_PRODUCT_HUAWEI_MOBILE 0x1001 /* Huawei Mobile */
-#define USB_PRODUCT_HUAWEI_E270 0x1003 /* Huawei HSPA modem */
+#define USB_PRODUCT_HUAWEI_E220 0x1003 /* Huawei HSDPA modem */
/* HUAWEI 3com products */
#define USB_PRODUCT_HUAWEI3COM_WUB320G 0x0009 /* Aolynk WUB320g */
@@ -1846,7 +1848,7 @@
#define USB_PRODUCT_NOVATEL_ES620 0x2100 /* ES620 CDMA */
#define USB_PRODUCT_NOVATEL_U720 0x2110 /* Merlin U720 */
#define USB_PRODUCT_NOVATEL_U727 0x4100 /* Merlin U727 CDMA */
-#define USB_PRODUCT_NOVATEL_U950D 0x4400 /* Novatel MC950D HSUPA */
+#define USB_PRODUCT_NOVATEL_MC950D 0x4400 /* Novatel MC950D HSUPA */
#define USB_PRODUCT_NOVATEL_ZEROCD 0x5010 /* Novatel ZeroCD */
#define USB_PRODUCT_NOVATEL2_FLEXPACKGPS 0x0100 /* NovAtel FlexPack GPS receiver */
@@ -1862,6 +1864,7 @@
#define USB_PRODUCT_OMNIVISION_OV511PLUS 0xa511 /* OV511+ Camera */
/* OnSpec Electronic, Inc. */
+#define USB_PRODUCT_ONSPEC_SDS_HOTFIND_D 0x0400 /* SDS-infrared.com Hotfind-D Infrared Camera */
#define USB_PRODUCT_ONSPEC_MDCFE_B_CF_READER 0xa000 /* MDCFE-B USB CF Reader */
#define USB_PRODUCT_ONSPEC_CFMS_RW 0xa001 /* SIIG/Datafab Memory Stick+CF Reader/Writer */
#define USB_PRODUCT_ONSPEC_READER 0xa003 /* Datafab-based Reader */
@@ -1878,6 +1881,7 @@
#define USB_PRODUCT_OPTION_GT3GQUAD 0x6300 /* GlobeTrotter 3G QUAD datacard */
#define USB_PRODUCT_OPTION_GT3GPLUS 0x6600 /* GlobeTrotter 3G+ datacard */
#define USB_PRODUCT_OPTION_GTMAX36 0x6701 /* GlobeTrotter Max 3.6 Modem */
+#define USB_PRODUCT_OPTION_GTMAXHSUPA 0x7001 /* GlobeTrotter HSUPA */
/* OQO */
#define USB_PRODUCT_OQO_WIFI01 0x0002 /* model 01 WiFi interface */
@@ -2001,6 +2005,7 @@
#define USB_PRODUCT_QUALCOMM2_RWT_FCT 0x3100 /* RWT FCT-CDMA 2000 1xRTT modem */
#define USB_PRODUCT_QUALCOMM2_CDMA_MSM 0x3196 /* CDMA Technologies MSM modem */
#define USB_PRODUCT_QUALCOMMINC_CDMA_MSM 0x0001 /* CDMA Technologies MSM modem */
+#define USB_PRODUCT_QUALCOMMINC_ZTE_STOR 0x2000 /* USB ZTE Storage */
/* Qtronix products */
#define USB_PRODUCT_QTRONIX_980N 0x2011 /* Scorpion-980N keyboard */
@@ -2237,6 +2242,7 @@
#define USB_PRODUCT_SONY_CLIE_NX60 0x00da /* Sony Clie nx60 */
#define USB_PRODUCT_SONY_CLIE_TH55 0x0144 /* Sony Clie th55 */
#define USB_PRODUCT_SONY_CLIE_TJ37 0x0169 /* Sony Clie tj37 */
+#define USB_PRODUCT_SONY_RF_RECEIVER 0x01db /* Sony RF mouse/kbd Receiver VGP-WRC1 */
/* Sony Ericsson products */
#define USB_PRODUCT_SONYERICSSON_DCU10 0x0528 /* USB Cable */
diff --git a/sys/dev/usb2/include/usb2_devtable.h b/sys/dev/usb2/include/usb2_devtable.h
index 1684572..dcbf4f1 100644
--- a/sys/dev/usb2/include/usb2_devtable.h
+++ b/sys/dev/usb2/include/usb2_devtable.h
@@ -1,10 +1,10 @@
-/* $FreeBSD$ */
+/* ??? */
/*
* THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
*
* generated from:
- * FreeBSD: src/sys/dev/usb/usbdevs,v 1.372 2008/09/19 09:04:06 kevlo Exp
+ * FreeBSD: src/sys/dev/usb/usbdevs,v 1.381 2008/11/02 03:00:36 imp Exp
*/
/* $NetBSD: usbdevs,v 1.392 2004/12/29 08:38:44 imp Exp $ */
@@ -3101,6 +3101,12 @@ const struct usb_knowndev usb_knowndevs[] = {
"Photosmart P1100",
},
{
+ USB_VENDOR_HP, USB_PRODUCT_HP_OJ4215,
+ 0,
+ "Hewlett Packard",
+ "OfficeJet 4215",
+ },
+ {
USB_VENDOR_HP, USB_PRODUCT_HP_HN210E,
0,
"Hewlett Packard",
@@ -3137,10 +3143,10 @@ const struct usb_knowndev usb_knowndevs[] = {
"Huawei Mobile",
},
{
- USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E270,
+ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E220,
0,
"Huawei Technologies",
- "Huawei HSPA modem",
+ "Huawei HSDPA modem",
},
{
USB_VENDOR_HUAWEI3COM, USB_PRODUCT_HUAWEI3COM_WUB320G,
@@ -4775,7 +4781,7 @@ const struct usb_knowndev usb_knowndevs[] = {
"Merlin U727 CDMA",
},
{
- USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U950D,
+ USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_MC950D,
0,
"Novatel Wireless",
"Novatel MC950D HSUPA",
@@ -4823,6 +4829,12 @@ const struct usb_knowndev usb_knowndevs[] = {
"OV511+ Camera",
},
{
+ USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_SDS_HOTFIND_D,
+ 0,
+ "OnSpec",
+ "SDS-infrared.com Hotfind-D Infrared Camera",
+ },
+ {
USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MDCFE_B_CF_READER,
0,
"OnSpec",
@@ -4907,6 +4919,12 @@ const struct usb_knowndev usb_knowndevs[] = {
"GlobeTrotter Max 3.6 Modem",
},
{
+ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GTMAXHSUPA,
+ 0,
+ "Option N.V:",
+ "GlobeTrotter HSUPA",
+ },
+ {
USB_VENDOR_OQO, USB_PRODUCT_OQO_WIFI01,
0,
"OQO",
@@ -5429,6 +5447,12 @@ const struct usb_knowndev usb_knowndevs[] = {
"CDMA Technologies MSM modem",
},
{
+ USB_VENDOR_QUALCOMMINC, USB_PRODUCT_QUALCOMMINC_ZTE_STOR,
+ 0,
+ "Qualcomm, Incorporated",
+ "USB ZTE Storage",
+ },
+ {
USB_VENDOR_QTRONIX, USB_PRODUCT_QTRONIX_980N,
0,
"Qtronix",
@@ -6389,6 +6413,12 @@ const struct usb_knowndev usb_knowndevs[] = {
"Sony Clie tj37",
},
{
+ USB_VENDOR_SONY, USB_PRODUCT_SONY_RF_RECEIVER,
+ 0,
+ "Sony",
+ "Sony RF mouse/kbd Receiver VGP-WRC1",
+ },
+ {
USB_VENDOR_SONYERICSSON, USB_PRODUCT_SONYERICSSON_DCU10,
0,
"Sony Ericsson",
diff --git a/sys/dev/usb2/include/usb2_ioctl.h b/sys/dev/usb2/include/usb2_ioctl.h
index 0cab67a..2a679c9 100644
--- a/sys/dev/usb2/include/usb2_ioctl.h
+++ b/sys/dev/usb2/include/usb2_ioctl.h
@@ -31,6 +31,11 @@
#include <sys/ioccom.h>
+/* Building "kdump" depends on these includes */
+
+#include <dev/usb2/include/usb2_endian.h>
+#include <dev/usb2/include/usb2_standard.h>
+
#define USB_DEVICE_NAME "usb"
#define USB_GENERIC_NAME "ugen"
diff --git a/sys/dev/usb2/serial/ubsa2.c b/sys/dev/usb2/serial/ubsa2.c
index 68fd882..6a25bc3 100644
--- a/sys/dev/usb2/serial/ubsa2.c
+++ b/sys/dev/usb2/serial/ubsa2.c
@@ -273,26 +273,6 @@ static const struct usb2_device_id ubsa_devs[] = {
{USB_VPI(USB_VENDOR_GOHUBS, USB_PRODUCT_GOHUBS_GOCOM232, 0)},
/* Peracom */
{USB_VPI(USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_SERIAL1, 0)},
- /* Novatel Wireless Merlin cards */
- {USB_VPI(USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U740, 0)},
- /* Dell version of the above */
- {USB_VPI(USB_VENDOR_DELL, USB_PRODUCT_DELL_U740, 0)},
- /* Novatel Wireless Merlin v740 */
- {USB_VPI(USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_V740, 0)},
- /* Option Vodafone MC3G */
- {USB_VPI(USB_VENDOR_OPTION, USB_PRODUCT_OPTION_VODAFONEMC3G, 0)},
- /* Option GlobeTrotter 3G */
- {USB_VPI(USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3G, 0)},
- /* Option GlobeTrotter 3G+ */
- {USB_VPI(USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GPLUS, 0)},
- /* Option GlobeTrotter Max 3.6 */
- {USB_VPI(USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GTMAX36, 0)},
- /* Option GlobeTrotter 3G QUAD */
- {USB_VPI(USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GQUAD, 0)},
- /* Sierra Wireless LENOVO UMTS card */
- {USB_VPI(USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8755_3, 0)},
- /* Qualcomm, Inc. ZTE CDMA */
- {USB_VPI(USB_VENDOR_QUALCOMMINC, USB_PRODUCT_QUALCOMMINC_CDMA_MSM, 0)},
};
static device_method_t ubsa_methods[] = {
diff --git a/sys/dev/usb2/serial/ugensa2.c b/sys/dev/usb2/serial/ugensa2.c
index ccbd8a9..29952e6 100644
--- a/sys/dev/usb2/serial/ugensa2.c
+++ b/sys/dev/usb2/serial/ugensa2.c
@@ -178,7 +178,7 @@ static const struct usb2_device_id ugensa_devs[] = {
{USB_VPI(USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CDMA_MODEM1, 0)},
{USB_VPI(USB_VENDOR_KYOCERA2, USB_PRODUCT_KYOCERA2_CDMA_MSM_K, 0)},
{USB_VPI(USB_VENDOR_HP, USB_PRODUCT_HP_49GPLUS, 0)},
- {USB_VPI(USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E270, 0)},
+/* {USB_VPI(USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E270, 0)}, */
{USB_VPI(USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_MOBILE, 0)},
{USB_VPI(USB_VENDOR_MERLIN, USB_PRODUCT_MERLIN_V620, 0)},
{USB_VPI(USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_CDMA_MODEM, 0)},
@@ -187,7 +187,7 @@ static const struct usb2_device_id ugensa_devs[] = {
{USB_VPI(USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U727, 0)},
{USB_VPI(USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U740, 0)},
{USB_VPI(USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U740_2, 0)},
- {USB_VPI(USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U950D, 0)},
+/* {USB_VPI(USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_U950D, 0)}, */
{USB_VPI(USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_V620, 0)},
{USB_VPI(USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_V640, 0)},
{USB_VPI(USB_VENDOR_NOVATEL, USB_PRODUCT_NOVATEL_V720, 0)},
diff --git a/sys/dev/usb2/sound/uaudio2.c b/sys/dev/usb2/sound/uaudio2.c
index d6e3878..9144a93 100644
--- a/sys/dev/usb2/sound/uaudio2.c
+++ b/sys/dev/usb2/sound/uaudio2.c
@@ -3049,9 +3049,6 @@ uaudio_mixer_signext(uint8_t type, int val)
static int
uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, int32_t val)
{
- DPRINTFN(6, "type=%03x val=%d min=%d max=%d ",
- mc->type, val, mc->minval, mc->maxval);
-
if (mc->type == MIX_ON_OFF) {
val = (val != 0);
} else if (mc->type == MIX_SELECTOR) {
@@ -3063,7 +3060,8 @@ uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, int32_t val)
val = (((val + (mc->delta / 2)) * mc->mul) / 255) + mc->minval;
}
- DPRINTFN(6, "val=%d\n", val);
+ DPRINTFN(6, "type=0x%03x val=%d min=%d max=%d val=%d\n",
+ mc->type, val, mc->minval, mc->maxval, val);
return (val);
}
diff --git a/sys/dev/usb2/storage/umass2.c b/sys/dev/usb2/storage/umass2.c
index f998cf1c..6a284a0 100644
--- a/sys/dev/usb2/storage/umass2.c
+++ b/sys/dev/usb2/storage/umass2.c
@@ -636,6 +636,10 @@ static const struct umass_devdescr umass_devdescr[] = {
UMASS_PROTO_SCSI,
NO_GETMAXLUN
},
+ { USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_SDS_HOTFIND_D, RID_WILDCARD,
+ UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
+ NO_GETMAXLUN | NO_SYNCHRONIZE_CACHE
+ },
{USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_CFMS_RW, RID_WILDCARD,
UMASS_PROTO_SCSI,
NO_QUIRKS
diff --git a/sys/dev/usb2/storage/urio2.c b/sys/dev/usb2/storage/urio2.c
index 775c3cb..adf70bc 100644
--- a/sys/dev/usb2/storage/urio2.c
+++ b/sys/dev/usb2/storage/urio2.c
@@ -49,7 +49,7 @@ __FBSDID("$FreeBSD$");
#include <dev/usb2/include/usb2_mfunc.h>
#include <dev/usb2/include/usb2_error.h>
#include <dev/usb2/include/usb2_ioctl.h>
-#include <dev/usb2/include/urio2_ioctl.h>
+#include <dev/usb/rio500_usb.h>
#define USB_DEBUG_VAR urio_debug
OpenPOWER on IntegriCloud