From eba21c49e4f4dac384b24af2807a36608fb25e14 Mon Sep 17 00:00:00 2001 From: Reinhold Kainhofer <reinhold@kainhofer.com> Date: Wed, 21 Mar 2012 14:03:32 +0100 Subject: [PATCH] Kernel: Copy USB/IP modules over and rename for HP2101nw --- modules/hp2101nw/debian/changelog | 5 + modules/hp2101nw/debian/compat | 1 + modules/hp2101nw/debian/control | 9 + modules/hp2101nw/debian/control.modules.in | 20 + modules/hp2101nw/debian/copyright | 0 modules/hp2101nw/debian/docs | 1 + modules/hp2101nw/debian/postinst.modules.in | 10 + modules/hp2101nw/debian/postrm.modules.in | 8 + modules/hp2101nw/debian/rules | 46 + modules/hp2101nw/src/Makefile | 68 + modules/hp2101nw/src/README | 26 + modules/hp2101nw/src/headers/hcd.h | 480 + modules/hp2101nw/src/headers/hub.h | 195 + modules/hp2101nw/src/serhci.h | 142 + modules/hp2101nw/src/serhci_common.c | 997 ++ modules/hp2101nw/src/serhci_common.h | 406 + modules/hp2101nw/src/serhci_event.c | 141 + modules/hp2101nw/src/serhci_hcd.c | 1275 ++ modules/hp2101nw/src/serhci_rx.c | 251 + modules/hp2101nw/src/serhci_sysfs.c | 250 + modules/hp2101nw/src/serhci_tx.c | 239 + modules/hp2101nw/src/unused/stub.h | 95 + modules/hp2101nw/src/unused/stub_dev.c | 483 + modules/hp2101nw/src/unused/stub_main.c | 300 + modules/hp2101nw/src/unused/stub_rx.c | 615 + modules/hp2101nw/src/unused/stub_tx.c | 371 + modules/hp2101nw/usbip/.hp2101nw.ko.cmd | 1 + modules/hp2101nw/usbip/.hp2101nw.mod.o.cmd | 479 + modules/hp2101nw/usbip/.hp2101nw.o.cmd | 1 + modules/hp2101nw/usbip/.hp2101nw_common.o.cmd | 879 + modules/hp2101nw/usbip/.hp2101nw_event.o.cmd | 684 + .../hp2101nw/usbip/.tmp_versions/hp2101nw.mod | 2 + modules/hp2101nw/usbip/.vhci_hcd.o.cmd | 705 + modules/hp2101nw/usbip/.vhci_rx.o.cmd | 702 + modules/hp2101nw/usbip/.vhci_sysfs.o.cmd | 690 + modules/hp2101nw/usbip/.vhci_tx.o.cmd | 702 + modules/hp2101nw/usbip/Kconfig | 23 + modules/hp2101nw/usbip/Makefile | 64 + modules/hp2101nw/usbip/Makefile.kerneltree | 4 + modules/hp2101nw/usbip/Module.symvers | 16 + modules/hp2101nw/usbip/README | 6 + modules/hp2101nw/usbip/hp2101nw.ko | Bin 0 -> 52210 bytes modules/hp2101nw/usbip/hp2101nw.mod.c | 86 + modules/hp2101nw/usbip/hp2101nw.mod.o | Bin 0 -> 6088 bytes modules/hp2101nw/usbip/hp2101nw.o | Bin 0 -> 53026 bytes modules/hp2101nw/usbip/hp2101nw_common.c | 860 + modules/hp2101nw/usbip/hp2101nw_common.h | 339 + modules/hp2101nw/usbip/hp2101nw_common.o | Bin 0 -> 20760 bytes modules/hp2101nw/usbip/hp2101nw_event.c | 124 + modules/hp2101nw/usbip/hp2101nw_event.o | Bin 0 -> 9504 bytes modules/hp2101nw/usbip/modules.order | 1 + modules/hp2101nw/usbip/userspace/AUTHORS | 2 + modules/hp2101nw/usbip/userspace/COPYING | 340 + modules/hp2101nw/usbip/userspace/INSTALL | 237 + modules/hp2101nw/usbip/userspace/Makefile.am | 11 + modules/hp2101nw/usbip/userspace/README | 215 + modules/hp2101nw/usbip/userspace/autogen.sh | 9 + modules/hp2101nw/usbip/userspace/cleanup.sh | 10 + modules/hp2101nw/usbip/userspace/configure.ac | 114 + modules/hp2101nw/usbip/userspace/doc/usbip.8 | 71 + .../usbip/userspace/doc/usbip_bind_driver.8 | 42 + modules/hp2101nw/usbip/userspace/doc/usbipd.8 | 62 + .../usbip/userspace/libsrc/Makefile.am | 7 + .../hp2101nw/usbip/userspace/libsrc/names.c | 793 + .../hp2101nw/usbip/userspace/libsrc/names.h | 57 + .../usbip/userspace/libsrc/stub_driver.c | 391 + .../usbip/userspace/libsrc/stub_driver.h | 36 + .../hp2101nw/usbip/userspace/libsrc/usbip.h | 19 + .../usbip/userspace/libsrc/usbip_common.c | 282 + .../usbip/userspace/libsrc/usbip_common.h | 149 + .../usbip/userspace/libsrc/vhci_driver.c | 506 + .../usbip/userspace/libsrc/vhci_driver.h | 61 + .../hp2101nw/usbip/userspace/src/Makefile.am | 10 + .../usbip/userspace/src/bind-driver.c | 643 + modules/hp2101nw/usbip/userspace/src/usbip.c | 723 + .../usbip/userspace/src/usbip_network.c | 251 + .../usbip/userspace/src/usbip_network.h | 198 + modules/hp2101nw/usbip/userspace/src/usbipd.c | 570 + modules/hp2101nw/usbip/userspace/src/utils.c | 255 + modules/hp2101nw/usbip/userspace/src/utils.h | 38 + modules/hp2101nw/usbip/userspace/usb.ids | 13209 ++++++++++++++++ modules/hp2101nw/usbip/vhci.h | 136 + modules/hp2101nw/usbip/vhci_hcd.c | 1238 ++ modules/hp2101nw/usbip/vhci_hcd.o | Bin 0 -> 23696 bytes modules/hp2101nw/usbip/vhci_rx.c | 248 + modules/hp2101nw/usbip/vhci_rx.o | Bin 0 -> 7936 bytes modules/hp2101nw/usbip/vhci_sysfs.c | 244 + modules/hp2101nw/usbip/vhci_sysfs.o | Bin 0 -> 8216 bytes modules/hp2101nw/usbip/vhci_tx.c | 226 + modules/hp2101nw/usbip/vhci_tx.o | Bin 0 -> 5312 bytes 90 files changed, 34205 insertions(+) create mode 100644 modules/hp2101nw/debian/changelog create mode 100644 modules/hp2101nw/debian/compat create mode 100644 modules/hp2101nw/debian/control create mode 100644 modules/hp2101nw/debian/control.modules.in create mode 100644 modules/hp2101nw/debian/copyright create mode 100644 modules/hp2101nw/debian/docs create mode 100644 modules/hp2101nw/debian/postinst.modules.in create mode 100644 modules/hp2101nw/debian/postrm.modules.in create mode 100755 modules/hp2101nw/debian/rules create mode 100644 modules/hp2101nw/src/Makefile create mode 100644 modules/hp2101nw/src/README create mode 100644 modules/hp2101nw/src/headers/hcd.h create mode 100644 modules/hp2101nw/src/headers/hub.h create mode 100644 modules/hp2101nw/src/serhci.h create mode 100644 modules/hp2101nw/src/serhci_common.c create mode 100644 modules/hp2101nw/src/serhci_common.h create mode 100644 modules/hp2101nw/src/serhci_event.c create mode 100644 modules/hp2101nw/src/serhci_hcd.c create mode 100644 modules/hp2101nw/src/serhci_rx.c create mode 100644 modules/hp2101nw/src/serhci_sysfs.c create mode 100644 modules/hp2101nw/src/serhci_tx.c create mode 100644 modules/hp2101nw/src/unused/stub.h create mode 100644 modules/hp2101nw/src/unused/stub_dev.c create mode 100644 modules/hp2101nw/src/unused/stub_main.c create mode 100644 modules/hp2101nw/src/unused/stub_rx.c create mode 100644 modules/hp2101nw/src/unused/stub_tx.c create mode 100644 modules/hp2101nw/usbip/.hp2101nw.ko.cmd create mode 100644 modules/hp2101nw/usbip/.hp2101nw.mod.o.cmd create mode 100644 modules/hp2101nw/usbip/.hp2101nw.o.cmd create mode 100644 modules/hp2101nw/usbip/.hp2101nw_common.o.cmd create mode 100644 modules/hp2101nw/usbip/.hp2101nw_event.o.cmd create mode 100644 modules/hp2101nw/usbip/.tmp_versions/hp2101nw.mod create mode 100644 modules/hp2101nw/usbip/.vhci_hcd.o.cmd create mode 100644 modules/hp2101nw/usbip/.vhci_rx.o.cmd create mode 100644 modules/hp2101nw/usbip/.vhci_sysfs.o.cmd create mode 100644 modules/hp2101nw/usbip/.vhci_tx.o.cmd create mode 100644 modules/hp2101nw/usbip/Kconfig create mode 100644 modules/hp2101nw/usbip/Makefile create mode 100644 modules/hp2101nw/usbip/Makefile.kerneltree create mode 100644 modules/hp2101nw/usbip/Module.symvers create mode 100644 modules/hp2101nw/usbip/README create mode 100644 modules/hp2101nw/usbip/hp2101nw.ko create mode 100644 modules/hp2101nw/usbip/hp2101nw.mod.c create mode 100644 modules/hp2101nw/usbip/hp2101nw.mod.o create mode 100644 modules/hp2101nw/usbip/hp2101nw.o create mode 100644 modules/hp2101nw/usbip/hp2101nw_common.c create mode 100644 modules/hp2101nw/usbip/hp2101nw_common.h create mode 100644 modules/hp2101nw/usbip/hp2101nw_common.o create mode 100644 modules/hp2101nw/usbip/hp2101nw_event.c create mode 100644 modules/hp2101nw/usbip/hp2101nw_event.o create mode 100644 modules/hp2101nw/usbip/modules.order create mode 100644 modules/hp2101nw/usbip/userspace/AUTHORS create mode 100644 modules/hp2101nw/usbip/userspace/COPYING create mode 100644 modules/hp2101nw/usbip/userspace/INSTALL create mode 100644 modules/hp2101nw/usbip/userspace/Makefile.am create mode 100644 modules/hp2101nw/usbip/userspace/README create mode 100755 modules/hp2101nw/usbip/userspace/autogen.sh create mode 100755 modules/hp2101nw/usbip/userspace/cleanup.sh create mode 100644 modules/hp2101nw/usbip/userspace/configure.ac create mode 100644 modules/hp2101nw/usbip/userspace/doc/usbip.8 create mode 100644 modules/hp2101nw/usbip/userspace/doc/usbip_bind_driver.8 create mode 100644 modules/hp2101nw/usbip/userspace/doc/usbipd.8 create mode 100644 modules/hp2101nw/usbip/userspace/libsrc/Makefile.am create mode 100644 modules/hp2101nw/usbip/userspace/libsrc/names.c create mode 100644 modules/hp2101nw/usbip/userspace/libsrc/names.h create mode 100644 modules/hp2101nw/usbip/userspace/libsrc/stub_driver.c create mode 100644 modules/hp2101nw/usbip/userspace/libsrc/stub_driver.h create mode 100644 modules/hp2101nw/usbip/userspace/libsrc/usbip.h create mode 100644 modules/hp2101nw/usbip/userspace/libsrc/usbip_common.c create mode 100644 modules/hp2101nw/usbip/userspace/libsrc/usbip_common.h create mode 100644 modules/hp2101nw/usbip/userspace/libsrc/vhci_driver.c create mode 100644 modules/hp2101nw/usbip/userspace/libsrc/vhci_driver.h create mode 100644 modules/hp2101nw/usbip/userspace/src/Makefile.am create mode 100644 modules/hp2101nw/usbip/userspace/src/bind-driver.c create mode 100644 modules/hp2101nw/usbip/userspace/src/usbip.c create mode 100644 modules/hp2101nw/usbip/userspace/src/usbip_network.c create mode 100644 modules/hp2101nw/usbip/userspace/src/usbip_network.h create mode 100644 modules/hp2101nw/usbip/userspace/src/usbipd.c create mode 100644 modules/hp2101nw/usbip/userspace/src/utils.c create mode 100644 modules/hp2101nw/usbip/userspace/src/utils.h create mode 100644 modules/hp2101nw/usbip/userspace/usb.ids create mode 100644 modules/hp2101nw/usbip/vhci.h create mode 100644 modules/hp2101nw/usbip/vhci_hcd.c create mode 100644 modules/hp2101nw/usbip/vhci_hcd.o create mode 100644 modules/hp2101nw/usbip/vhci_rx.c create mode 100644 modules/hp2101nw/usbip/vhci_rx.o create mode 100644 modules/hp2101nw/usbip/vhci_sysfs.c create mode 100644 modules/hp2101nw/usbip/vhci_sysfs.o create mode 100644 modules/hp2101nw/usbip/vhci_tx.c create mode 100644 modules/hp2101nw/usbip/vhci_tx.o diff --git a/modules/hp2101nw/debian/changelog b/modules/hp2101nw/debian/changelog new file mode 100644 index 0000000..a43db5c --- /dev/null +++ b/modules/hp2101nw/debian/changelog @@ -0,0 +1,5 @@ +serhci (0.0.1-0) unstable; urgency=low + + * Initial release + + -- Reinhold kainhofer <reinhold@kainhofer.com> Sun, 15 Jan 2011 14:34:19 +0100 diff --git a/modules/hp2101nw/debian/compat b/modules/hp2101nw/debian/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/modules/hp2101nw/debian/compat @@ -0,0 +1 @@ +7 diff --git a/modules/hp2101nw/debian/control b/modules/hp2101nw/debian/control new file mode 100644 index 0000000..37e15a2 --- /dev/null +++ b/modules/hp2101nw/debian/control @@ -0,0 +1,9 @@ +Source: serhci +Section: admin +Priority: optional +Maintainer: Reinhold Kainhofer <reinhold@kainhofer.com> +Build-Depends: debhelper (>= 7) +Standards-Version: 3.8.0 +Homepage: +Vcs-Browser: +Vcs-Git: diff --git a/modules/hp2101nw/debian/control.modules.in b/modules/hp2101nw/debian/control.modules.in new file mode 100644 index 0000000..01cc1f8 --- /dev/null +++ b/modules/hp2101nw/debian/control.modules.in @@ -0,0 +1,20 @@ +Source: serhci +Section: admin +Priority: optional +Maintainer: Reinhold Kainhofer <reinhold@kainhofer.com> +Build-Depends: debhelper (>= 7) +Standards-Version: 3.8.0 +Homepage: +Vcs-Browser: +Vcs-Git: + +Package: serhci-modules-_KVERS_ +Architecture: any +Depends: linux-modules-_KVERS_ | linux-image-_KVERS_ +Provides: serhci-modules +Description: Kernel module for the HP2101nw wireless G USB print server + The device is manufactured by Sercom and simply forwards the USB data over + wlan. + . + This package provides kernel modules for Linux _KVERS_. + diff --git a/modules/hp2101nw/debian/copyright b/modules/hp2101nw/debian/copyright new file mode 100644 index 0000000..e69de29 diff --git a/modules/hp2101nw/debian/docs b/modules/hp2101nw/debian/docs new file mode 100644 index 0000000..0dad564 --- /dev/null +++ b/modules/hp2101nw/debian/docs @@ -0,0 +1 @@ +src/README diff --git a/modules/hp2101nw/debian/postinst.modules.in b/modules/hp2101nw/debian/postinst.modules.in new file mode 100644 index 0000000..a8c69b2 --- /dev/null +++ b/modules/hp2101nw/debian/postinst.modules.in @@ -0,0 +1,10 @@ +#!/bin/sh +set -e + +if [ "$1" = "configure" ]; then + if [ -e /boot/System.map-_KVERS_ ]; then + depmod -a -F /boot/System.map-_KVERS_ _KVERS_ || true + fi +fi + +#DEBHELPER# diff --git a/modules/hp2101nw/debian/postrm.modules.in b/modules/hp2101nw/debian/postrm.modules.in new file mode 100644 index 0000000..654d03e --- /dev/null +++ b/modules/hp2101nw/debian/postrm.modules.in @@ -0,0 +1,8 @@ +#!/bin/sh +set -e + +if [ -e /boot/System.map-_KVERS_ ]; then + depmod -a -F /boot/System.map-_KVERS_ _KVERS_ || true +fi + +#DEBHELPER# diff --git a/modules/hp2101nw/debian/rules b/modules/hp2101nw/debian/rules new file mode 100755 index 0000000..f4f38e0 --- /dev/null +++ b/modules/hp2101nw/debian/rules @@ -0,0 +1,46 @@ +#!/usr/bin/make -f + +####### module-assistant ########## +PACKAGE=serhci-modules + +MA_DIR ?= /usr/share/modass +-include $(MA_DIR)/include/generic.make +-include $(MA_DIR)/include/common-rules.make +####### module-assistant ########## + +kdist_configure: prep-deb-files + +kdist_clean: + $(MAKE) $(MFLAGS) -f debian/rules clean + +binary-modules: prep-deb-files + dh_testroot + dh_clean + + # Build the module + cd src && $(MAKE) KSOURCE=$(KSRC) HCD_HEADER=$(CURDIR)/src/headers/hcd.h KBUILD_VERBOSE=0 + + # Install the modules ( serhci_common_mod.ko, serhci-hcd.ko and serhci.ko) + install -d $(CURDIR)/debian/$(PACKAGE)-$(KVERS)/lib/modules/$(KVERS)/updates/serhci + install -m 0644 src/serhci_common_mod.ko debian/$(PACKAGE)-$(KVERS)/lib/modules/$(KVERS)/updates/serhci/ + install -m 0644 src/serhci-hcd.ko debian/$(PACKAGE)-$(KVERS)/lib/modules/$(KVERS)/updates/serhci/ +# install -m 0644 src/serhci.ko debian/$(PACKAGE)-$(KVERS)/lib/modules/$(KVERS)/updates/serhci/ + + dh_installdocs src/README + dh_installchangelogs + dh_compress + dh_fixperms + dh_installmodules + dh_installdeb + dh_gencontrol -- -v$(VERSION) + dh_md5sums + dh_builddeb --destdir=$(DEB_DESTDIR) + dh_clean + +clean: + dh_testdir + dh_testroot + cd src && make clean KSOURCE=$(KSRC) + dh_clean + +.PHONY: kdist_configure binary-modules kdist_clean clean diff --git a/modules/hp2101nw/src/Makefile b/modules/hp2101nw/src/Makefile new file mode 100644 index 0000000..cecd650 --- /dev/null +++ b/modules/hp2101nw/src/Makefile @@ -0,0 +1,68 @@ +# Makefile for the USB/IP driver +# +# $Id: Makefile 14 2007-06-18 12:20:03Z hirofuchi $ +# +# Copyright (C) 2003-2007 Takahiro Hirofuchi +# +# +# This is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This 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 for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +# USA. +# + + +# Please modify here or set environments. +# KSOURCE should be pointed to the build directory of your kernel. +# +DEBUG ?= n +KSOURCE ?= /usr/src/linux + + +%.x:%.c + gcc -o $@ $< + +KBUILD_VERBOSE:=1 + +HCD_HEADER:=$(KSOURCE)/drivers/usb/core/hcd.h + +serhci_common_mod-objs := serhci_common.o serhci_event.o +# serhci-objs := stub_dev.o stub_main.o stub_rx.o stub_tx.o +serhci-hcd-objs := serhci_sysfs.o serhci_tx.o serhci_rx.o serhci_hcd.o + +obj-m += serhci_common_mod.o +# obj-m += serhci.o +obj-m += serhci-hcd.o + +EXTRA_CFLAGS += -DHCD_HEADER=\"$(HCD_HEADER)\" + +ifeq ($(DEBUG),y) + EXTRA_CFLAGS += -DCONFIG_USB_DEBUG +endif + + +default: + make -C $(KSOURCE) LANG=C KBUILD_VERBOSE=${KBUILD_VERBOSE} M=`pwd` modules + +check: + #make -C $(KSOURCE) LANG=C KBUILD_VERBOSE=${KBUILD_VERBOSE} C=1 M=`pwd` modules checkstack namespacecheck headers_check + make -C $(KSOURCE) LANG=C KBUILD_VERBOSE=${KBUILD_VERBOSE} C=1 M=`pwd` modules + +.PHONY: cscope +cscope: + cscope -b -k -R + +.PHONY: clean +clean: + make -C $(KSOURCE) LANG=C KBUILD_VERBOSE=${KBUILD_VERBOSE} M=`pwd` clean + rm -f *.x *~ diff --git a/modules/hp2101nw/src/README b/modules/hp2101nw/src/README new file mode 100644 index 0000000..845696c --- /dev/null +++ b/modules/hp2101nw/src/README @@ -0,0 +1,26 @@ +This directory contains the source code of the serhci drivers for mainline kernel. + +[How to make the serhci drivers] + 1. cd $(top)/drivers/{version}/ + + 2. make KSOURCE=/usr/src/kernel-source-2.6.20 + + KSOURCE is the directory that your kernel was built. + + 3. If succeed, serhci-hcd.ko and serhci_common_mod.ko are built. + + 4. Copy these kernel modules to client and server hosts. + + 5. Don't forget to make the serhci userspace tools. See $(top)/src/README. + +[Tips] + If you want to see a lot of debug messages, + make KSOURCE=/usr/src/kernel-source-2.6.15 DEBUG=y + + It is also a good idea to recompile your kernel with CONFIG_USB_DEBUG + and CONFIG_USB_STORAGE_DEBUG flags. + + To disable debug output temporaly, write 0 to serhci_debug. + If you use ZSH, + echo 0 >| /sys/bus/platform/drivers/serhci_hcd/serhci_hcd/serhci_debug + echo 0 >| /sys/bus/usb/drivers/serhci/*/serhci_debug diff --git a/modules/hp2101nw/src/headers/hcd.h b/modules/hp2101nw/src/headers/hcd.h new file mode 100644 index 0000000..98e2419 --- /dev/null +++ b/modules/hp2101nw/src/headers/hcd.h @@ -0,0 +1,480 @@ +/* + * Copyright (c) 2001-2002 by David Brownell + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * 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 + * for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + +#ifdef __KERNEL__ + +#include <linux/rwsem.h> + +/* This file contains declarations of usbcore internals that are mostly + * used or exposed by Host Controller Drivers. + */ + +/* + * USB Packet IDs (PIDs) + */ +#define USB_PID_UNDEF_0 0xf0 +#define USB_PID_OUT 0xe1 +#define USB_PID_ACK 0xd2 +#define USB_PID_DATA0 0xc3 +#define USB_PID_PING 0xb4 /* USB 2.0 */ +#define USB_PID_SOF 0xa5 +#define USB_PID_NYET 0x96 /* USB 2.0 */ +#define USB_PID_DATA2 0x87 /* USB 2.0 */ +#define USB_PID_SPLIT 0x78 /* USB 2.0 */ +#define USB_PID_IN 0x69 +#define USB_PID_NAK 0x5a +#define USB_PID_DATA1 0x4b +#define USB_PID_PREAMBLE 0x3c /* Token mode */ +#define USB_PID_ERR 0x3c /* USB 2.0: handshake mode */ +#define USB_PID_SETUP 0x2d +#define USB_PID_STALL 0x1e +#define USB_PID_MDATA 0x0f /* USB 2.0 */ + +/*-------------------------------------------------------------------------*/ + +/* + * USB Host Controller Driver (usb_hcd) framework + * + * Since "struct usb_bus" is so thin, you can't share much code in it. + * This framework is a layer over that, and should be more sharable. + * + * @authorized_default: Specifies if new devices are authorized to + * connect by default or they require explicit + * user space authorization; this bit is settable + * through /sys/class/usb_host/X/authorized_default. + * For the rest is RO, so we don't lock to r/w it. + */ + +/*-------------------------------------------------------------------------*/ + +struct usb_hcd { + + /* + * housekeeping + */ + struct usb_bus self; /* hcd is-a bus */ + struct kref kref; /* reference counter */ + + const char *product_desc; /* product/vendor string */ + char irq_descr[24]; /* driver + bus # */ + + struct timer_list rh_timer; /* drives root-hub polling */ + struct urb *status_urb; /* the current status urb */ +#ifdef CONFIG_PM + struct work_struct wakeup_work; /* for remote wakeup */ +#endif + + /* + * hardware info/state + */ + const struct hc_driver *driver; /* hw-specific hooks */ + + /* Flags that need to be manipulated atomically */ + unsigned long flags; +#define HCD_FLAG_HW_ACCESSIBLE 0x00000001 +#define HCD_FLAG_SAW_IRQ 0x00000002 + + unsigned rh_registered:1;/* is root hub registered? */ + + /* The next flag is a stopgap, to be removed when all the HCDs + * support the new root-hub polling mechanism. */ + unsigned uses_new_polling:1; + unsigned poll_rh:1; /* poll for rh status? */ + unsigned poll_pending:1; /* status has changed? */ + unsigned wireless:1; /* Wireless USB HCD */ + unsigned authorized_default:1; + + int irq; /* irq allocated */ + void __iomem *regs; /* device memory/io */ + u64 rsrc_start; /* memory/io resource start */ + u64 rsrc_len; /* memory/io resource length */ + unsigned power_budget; /* in mA, 0 = no limit */ + +#define HCD_BUFFER_POOLS 4 + struct dma_pool *pool [HCD_BUFFER_POOLS]; + + int state; +# define __ACTIVE 0x01 +# define __SUSPEND 0x04 +# define __TRANSIENT 0x80 + +# define HC_STATE_HALT 0 +# define HC_STATE_RUNNING (__ACTIVE) +# define HC_STATE_QUIESCING (__SUSPEND|__TRANSIENT|__ACTIVE) +# define HC_STATE_RESUMING (__SUSPEND|__TRANSIENT) +# define HC_STATE_SUSPENDED (__SUSPEND) + +#define HC_IS_RUNNING(state) ((state) & __ACTIVE) +#define HC_IS_SUSPENDED(state) ((state) & __SUSPEND) + + /* more shared queuing code would be good; it should support + * smarter scheduling, handle transaction translators, etc; + * input size of periodic table to an interrupt scheduler. + * (ohci 32, uhci 1024, ehci 256/512/1024). + */ + + /* The HC driver's private data is stored at the end of + * this structure. + */ + unsigned long hcd_priv[0] + __attribute__ ((aligned (sizeof(unsigned long)))); +}; + +/* 2.4 does this a bit differently ... */ +static inline struct usb_bus *hcd_to_bus (struct usb_hcd *hcd) +{ + return &hcd->self; +} + +static inline struct usb_hcd *bus_to_hcd (struct usb_bus *bus) +{ + return container_of(bus, struct usb_hcd, self); +} + +struct hcd_timeout { /* timeouts we allocate */ + struct list_head timeout_list; + struct timer_list timer; +}; + +/*-------------------------------------------------------------------------*/ + + +struct hc_driver { + const char *description; /* "ehci-hcd" etc */ + const char *product_desc; /* product/vendor string */ + size_t hcd_priv_size; /* size of private data */ + + /* irq handler */ + irqreturn_t (*irq) (struct usb_hcd *hcd); + + int flags; +#define HCD_MEMORY 0x0001 /* HC regs use memory (else I/O) */ +#define HCD_USB11 0x0010 /* USB 1.1 */ +#define HCD_USB2 0x0020 /* USB 2.0 */ + + /* called to init HCD and root hub */ + int (*reset) (struct usb_hcd *hcd); + int (*start) (struct usb_hcd *hcd); + + /* NOTE: these suspend/resume calls relate to the HC as + * a whole, not just the root hub; they're for PCI bus glue. + */ + /* called after suspending the hub, before entering D3 etc */ + int (*suspend) (struct usb_hcd *hcd, pm_message_t message); + + /* called after entering D0 (etc), before resuming the hub */ + int (*resume) (struct usb_hcd *hcd); + + /* cleanly make HCD stop writing memory and doing I/O */ + void (*stop) (struct usb_hcd *hcd); + + /* shutdown HCD */ + void (*shutdown) (struct usb_hcd *hcd); + + /* return current frame number */ + int (*get_frame_number) (struct usb_hcd *hcd); + + /* manage i/o requests, device state */ + int (*urb_enqueue)(struct usb_hcd *hcd, + struct urb *urb, gfp_t mem_flags); + int (*urb_dequeue)(struct usb_hcd *hcd, + struct urb *urb, int status); + + /* hw synch, freeing endpoint resources that urb_dequeue can't */ + void (*endpoint_disable)(struct usb_hcd *hcd, + struct usb_host_endpoint *ep); + + /* root hub support */ + int (*hub_status_data) (struct usb_hcd *hcd, char *buf); + int (*hub_control) (struct usb_hcd *hcd, + u16 typeReq, u16 wValue, u16 wIndex, + char *buf, u16 wLength); + int (*bus_suspend)(struct usb_hcd *); + int (*bus_resume)(struct usb_hcd *); + int (*start_port_reset)(struct usb_hcd *, unsigned port_num); + void (*hub_irq_enable)(struct usb_hcd *); + /* Needed only if port-change IRQs are level-triggered */ +}; + +extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb); +extern int usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb, + int status); +extern void usb_hcd_unlink_urb_from_ep(struct usb_hcd *hcd, struct urb *urb); + +extern int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags); +extern int usb_hcd_unlink_urb (struct urb *urb, int status); +extern void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, + int status); +extern void usb_hcd_flush_endpoint(struct usb_device *udev, + struct usb_host_endpoint *ep); +extern void usb_hcd_disable_endpoint(struct usb_device *udev, + struct usb_host_endpoint *ep); +extern int usb_hcd_get_frame_number (struct usb_device *udev); + +extern struct usb_hcd *usb_create_hcd (const struct hc_driver *driver, + struct device *dev, char *bus_name); +extern struct usb_hcd *usb_get_hcd (struct usb_hcd *hcd); +extern void usb_put_hcd (struct usb_hcd *hcd); +extern int usb_add_hcd(struct usb_hcd *hcd, + unsigned int irqnum, unsigned long irqflags); +extern void usb_remove_hcd(struct usb_hcd *hcd); + +struct platform_device; +extern void usb_hcd_platform_shutdown(struct platform_device* dev); + +#ifdef CONFIG_PCI +struct pci_dev; +struct pci_device_id; +extern int usb_hcd_pci_probe (struct pci_dev *dev, + const struct pci_device_id *id); +extern void usb_hcd_pci_remove (struct pci_dev *dev); + +#ifdef CONFIG_PM +extern int usb_hcd_pci_suspend (struct pci_dev *dev, pm_message_t state); +extern int usb_hcd_pci_resume (struct pci_dev *dev); +#endif /* CONFIG_PM */ + +extern void usb_hcd_pci_shutdown (struct pci_dev *dev); + +#endif /* CONFIG_PCI */ + +/* pci-ish (pdev null is ok) buffer alloc/mapping support */ +int hcd_buffer_create (struct usb_hcd *hcd); +void hcd_buffer_destroy (struct usb_hcd *hcd); + +void *hcd_buffer_alloc (struct usb_bus *bus, size_t size, + gfp_t mem_flags, dma_addr_t *dma); +void hcd_buffer_free (struct usb_bus *bus, size_t size, + void *addr, dma_addr_t dma); + +/* generic bus glue, needed for host controllers that don't use PCI */ +extern irqreturn_t usb_hcd_irq (int irq, void *__hcd); + +extern void usb_hc_died (struct usb_hcd *hcd); +extern void usb_hcd_poll_rh_status(struct usb_hcd *hcd); + +/* -------------------------------------------------------------------------- */ + +/* Enumeration is only for the hub driver, or HCD virtual root hubs */ +extern struct usb_device *usb_alloc_dev(struct usb_device *parent, + struct usb_bus *, unsigned port); +extern int usb_new_device(struct usb_device *dev); +extern void usb_disconnect(struct usb_device **); + +extern int usb_get_configuration(struct usb_device *dev); +extern void usb_destroy_configuration(struct usb_device *dev); + +/*-------------------------------------------------------------------------*/ + +/* + * HCD Root Hub support + */ + +#include "hub.h" + +/* (shifted) direction/type/recipient from the USB 2.0 spec, table 9.2 */ +#define DeviceRequest \ + ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8) +#define DeviceOutRequest \ + ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8) + +#define InterfaceRequest \ + ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) + +#define EndpointRequest \ + ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) +#define EndpointOutRequest \ + ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) + +/* class requests from the USB 2.0 hub spec, table 11-15 */ +/* GetBusState and SetHubDescriptor are optional, omitted */ +#define ClearHubFeature (0x2000 | USB_REQ_CLEAR_FEATURE) +#define ClearPortFeature (0x2300 | USB_REQ_CLEAR_FEATURE) +#define GetHubDescriptor (0xa000 | USB_REQ_GET_DESCRIPTOR) +#define GetHubStatus (0xa000 | USB_REQ_GET_STATUS) +#define GetPortStatus (0xa300 | USB_REQ_GET_STATUS) +#define SetHubFeature (0x2000 | USB_REQ_SET_FEATURE) +#define SetPortFeature (0x2300 | USB_REQ_SET_FEATURE) + + +/*-------------------------------------------------------------------------*/ + +/* + * Generic bandwidth allocation constants/support + */ +#define FRAME_TIME_USECS 1000L +#define BitTime(bytecount) (7 * 8 * bytecount / 6) /* with integer truncation */ + /* Trying not to use worst-case bit-stuffing + of (7/6 * 8 * bytecount) = 9.33 * bytecount */ + /* bytecount = data payload byte count */ + +#define NS_TO_US(ns) ((ns + 500L) / 1000L) + /* convert & round nanoseconds to microseconds */ + + +/* + * Full/low speed bandwidth allocation constants/support. + */ +#define BW_HOST_DELAY 1000L /* nanoseconds */ +#define BW_HUB_LS_SETUP 333L /* nanoseconds */ + /* 4 full-speed bit times (est.) */ + +#define FRAME_TIME_BITS 12000L /* frame = 1 millisecond */ +#define FRAME_TIME_MAX_BITS_ALLOC (90L * FRAME_TIME_BITS / 100L) +#define FRAME_TIME_MAX_USECS_ALLOC (90L * FRAME_TIME_USECS / 100L) + +/* + * Ceiling [nano/micro]seconds (typical) for that many bytes at high speed + * ISO is a bit less, no ACK ... from USB 2.0 spec, 5.11.3 (and needed + * to preallocate bandwidth) + */ +#define USB2_HOST_DELAY 5 /* nsec, guess */ +#define HS_NSECS(bytes) ( ((55 * 8 * 2083) \ + + (2083UL * (3 + BitTime(bytes))))/1000 \ + + USB2_HOST_DELAY) +#define HS_NSECS_ISO(bytes) ( ((38 * 8 * 2083) \ + + (2083UL * (3 + BitTime(bytes))))/1000 \ + + USB2_HOST_DELAY) +#define HS_USECS(bytes) NS_TO_US (HS_NSECS(bytes)) +#define HS_USECS_ISO(bytes) NS_TO_US (HS_NSECS_ISO(bytes)) + +extern long usb_calc_bus_time (int speed, int is_input, + int isoc, int bytecount); + +/*-------------------------------------------------------------------------*/ + +extern void usb_set_device_state(struct usb_device *udev, + enum usb_device_state new_state); + +/*-------------------------------------------------------------------------*/ + +/* exported only within usbcore */ + +extern struct list_head usb_bus_list; +extern struct mutex usb_bus_list_lock; +extern wait_queue_head_t usb_kill_urb_queue; + +extern void usb_enable_root_hub_irq (struct usb_bus *bus); + +extern int usb_find_interface_driver (struct usb_device *dev, + struct usb_interface *interface); + +#define usb_endpoint_out(ep_dir) (!((ep_dir) & USB_DIR_IN)) + +#ifdef CONFIG_PM +extern void usb_hcd_resume_root_hub (struct usb_hcd *hcd); +extern void usb_root_hub_lost_power (struct usb_device *rhdev); +extern int hcd_bus_suspend(struct usb_device *rhdev); +extern int hcd_bus_resume(struct usb_device *rhdev); +#else +static inline void usb_hcd_resume_root_hub(struct usb_hcd *hcd) +{ + return; +} +#endif /* CONFIG_PM */ + +/* + * USB device fs stuff + */ + +#ifdef CONFIG_USB_DEVICEFS + +/* + * these are expected to be called from the USB core/hub thread + * with the kernel lock held + */ +extern void usbfs_update_special (void); +extern int usbfs_init(void); +extern void usbfs_cleanup(void); + +#else /* CONFIG_USB_DEVICEFS */ + +static inline void usbfs_update_special (void) {} +static inline int usbfs_init(void) { return 0; } +static inline void usbfs_cleanup(void) { } + +#endif /* CONFIG_USB_DEVICEFS */ + +/*-------------------------------------------------------------------------*/ + +#if defined(CONFIG_USB_MON) + +struct usb_mon_operations { + void (*urb_submit)(struct usb_bus *bus, struct urb *urb); + void (*urb_submit_error)(struct usb_bus *bus, struct urb *urb, int err); + void (*urb_complete)(struct usb_bus *bus, struct urb *urb, int status); + /* void (*urb_unlink)(struct usb_bus *bus, struct urb *urb); */ +}; + +extern struct usb_mon_operations *mon_ops; + +static inline void usbmon_urb_submit(struct usb_bus *bus, struct urb *urb) +{ + if (bus->monitored) + (*mon_ops->urb_submit)(bus, urb); +} + +static inline void usbmon_urb_submit_error(struct usb_bus *bus, struct urb *urb, + int error) +{ + if (bus->monitored) + (*mon_ops->urb_submit_error)(bus, urb, error); +} + +static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb, + int status) +{ + if (bus->monitored) + (*mon_ops->urb_complete)(bus, urb, status); +} + +int usb_mon_register(struct usb_mon_operations *ops); +void usb_mon_deregister(void); + +#else + +static inline void usbmon_urb_submit(struct usb_bus *bus, struct urb *urb) {} +static inline void usbmon_urb_submit_error(struct usb_bus *bus, struct urb *urb, + int error) {} +static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb, + int status) {} + +#endif /* CONFIG_USB_MON */ + +/*-------------------------------------------------------------------------*/ + +/* hub.h ... DeviceRemovable in 2.4.2-ac11, gone in 2.4.10 */ +// bleech -- resurfaced in 2.4.11 or 2.4.12 +#define bitmap DeviceRemovable + + +/*-------------------------------------------------------------------------*/ + +/* random stuff */ + +#define RUN_CONTEXT (in_irq () ? "in_irq" \ + : (in_interrupt () ? "in_interrupt" : "can sleep")) + + +/* This rwsem is for use only by the hub driver and ehci-hcd. + * Nobody else should touch it. + */ +extern struct rw_semaphore ehci_cf_port_reset_rwsem; + +#endif /* __KERNEL__ */ diff --git a/modules/hp2101nw/src/headers/hub.h b/modules/hp2101nw/src/headers/hub.h new file mode 100644 index 0000000..cf9559c --- /dev/null +++ b/modules/hp2101nw/src/headers/hub.h @@ -0,0 +1,195 @@ +#ifndef __LINUX_HUB_H +#define __LINUX_HUB_H + +/* + * Hub protocol and driver data structures. + * + * Some of these are known to the "virtual root hub" code + * in host controller drivers. + */ + +#include <linux/list.h> +#include <linux/workqueue.h> +#include <linux/compiler.h> /* likely()/unlikely() */ + +/* + * Hub request types + */ + +#define USB_RT_HUB (USB_TYPE_CLASS | USB_RECIP_DEVICE) +#define USB_RT_PORT (USB_TYPE_CLASS | USB_RECIP_OTHER) + +/* + * Hub class requests + * See USB 2.0 spec Table 11-16 + */ +#define HUB_CLEAR_TT_BUFFER 8 +#define HUB_RESET_TT 9 +#define HUB_GET_TT_STATE 10 +#define HUB_STOP_TT 11 + +/* + * Hub Class feature numbers + * See USB 2.0 spec Table 11-17 + */ +#define C_HUB_LOCAL_POWER 0 +#define C_HUB_OVER_CURRENT 1 + +/* + * Port feature numbers + * See USB 2.0 spec Table 11-17 + */ +#define USB_PORT_FEAT_CONNECTION 0 +#define USB_PORT_FEAT_ENABLE 1 +#define USB_PORT_FEAT_SUSPEND 2 +#define USB_PORT_FEAT_OVER_CURRENT 3 +#define USB_PORT_FEAT_RESET 4 +#define USB_PORT_FEAT_POWER 8 +#define USB_PORT_FEAT_LOWSPEED 9 +#define USB_PORT_FEAT_HIGHSPEED 10 +#define USB_PORT_FEAT_C_CONNECTION 16 +#define USB_PORT_FEAT_C_ENABLE 17 +#define USB_PORT_FEAT_C_SUSPEND 18 +#define USB_PORT_FEAT_C_OVER_CURRENT 19 +#define USB_PORT_FEAT_C_RESET 20 +#define USB_PORT_FEAT_TEST 21 +#define USB_PORT_FEAT_INDICATOR 22 + +/* + * Hub Status and Hub Change results + * See USB 2.0 spec Table 11-19 and Table 11-20 + */ +struct usb_port_status { + __le16 wPortStatus; + __le16 wPortChange; +} __attribute__ ((packed)); + +/* + * wPortStatus bit field + * See USB 2.0 spec Table 11-21 + */ +#define USB_PORT_STAT_CONNECTION 0x0001 +#define USB_PORT_STAT_ENABLE 0x0002 +#define USB_PORT_STAT_SUSPEND 0x0004 +#define USB_PORT_STAT_OVERCURRENT 0x0008 +#define USB_PORT_STAT_RESET 0x0010 +/* bits 5 to 7 are reserved */ +#define USB_PORT_STAT_POWER 0x0100 +#define USB_PORT_STAT_LOW_SPEED 0x0200 +#define USB_PORT_STAT_HIGH_SPEED 0x0400 +#define USB_PORT_STAT_TEST 0x0800 +#define USB_PORT_STAT_INDICATOR 0x1000 +/* bits 13 to 15 are reserved */ + +/* + * wPortChange bit field + * See USB 2.0 spec Table 11-22 + * Bits 0 to 4 shown, bits 5 to 15 are reserved + */ +#define USB_PORT_STAT_C_CONNECTION 0x0001 +#define USB_PORT_STAT_C_ENABLE 0x0002 +#define USB_PORT_STAT_C_SUSPEND 0x0004 +#define USB_PORT_STAT_C_OVERCURRENT 0x0008 +#define USB_PORT_STAT_C_RESET 0x0010 + +/* + * wHubCharacteristics (masks) + * See USB 2.0 spec Table 11-13, offset 3 + */ +#define HUB_CHAR_LPSM 0x0003 /* D1 .. D0 */ +#define HUB_CHAR_COMPOUND 0x0004 /* D2 */ +#define HUB_CHAR_OCPM 0x0018 /* D4 .. D3 */ +#define HUB_CHAR_TTTT 0x0060 /* D6 .. D5 */ +#define HUB_CHAR_PORTIND 0x0080 /* D7 */ + +struct usb_hub_status { + __le16 wHubStatus; + __le16 wHubChange; +} __attribute__ ((packed)); + +/* + * Hub Status & Hub Change bit masks + * See USB 2.0 spec Table 11-19 and Table 11-20 + * Bits 0 and 1 for wHubStatus and wHubChange + * Bits 2 to 15 are reserved for both + */ +#define HUB_STATUS_LOCAL_POWER 0x0001 +#define HUB_STATUS_OVERCURRENT 0x0002 +#define HUB_CHANGE_LOCAL_POWER 0x0001 +#define HUB_CHANGE_OVERCURRENT 0x0002 + + +/* + * Hub descriptor + * See USB 2.0 spec Table 11-13 + */ + +#define USB_DT_HUB (USB_TYPE_CLASS | 0x09) +#define USB_DT_HUB_NONVAR_SIZE 7 + +struct usb_hub_descriptor { + __u8 bDescLength; + __u8 bDescriptorType; + __u8 bNbrPorts; + __le16 wHubCharacteristics; + __u8 bPwrOn2PwrGood; + __u8 bHubContrCurrent; + /* add 1 bit for hub status change; round to bytes */ + __u8 DeviceRemovable[(USB_MAXCHILDREN + 1 + 7) / 8]; + __u8 PortPwrCtrlMask[(USB_MAXCHILDREN + 1 + 7) / 8]; +} __attribute__ ((packed)); + + +/* port indicator status selectors, tables 11-7 and 11-25 */ +#define HUB_LED_AUTO 0 +#define HUB_LED_AMBER 1 +#define HUB_LED_GREEN 2 +#define HUB_LED_OFF 3 + +enum hub_led_mode { + INDICATOR_AUTO = 0, + INDICATOR_CYCLE, + /* software blinks for attention: software, hardware, reserved */ + INDICATOR_GREEN_BLINK, INDICATOR_GREEN_BLINK_OFF, + INDICATOR_AMBER_BLINK, INDICATOR_AMBER_BLINK_OFF, + INDICATOR_ALT_BLINK, INDICATOR_ALT_BLINK_OFF +} __attribute__ ((packed)); + +struct usb_device; + +/* Transaction Translator Think Times, in bits */ +#define HUB_TTTT_8_BITS 0x00 +#define HUB_TTTT_16_BITS 0x20 +#define HUB_TTTT_24_BITS 0x40 +#define HUB_TTTT_32_BITS 0x60 + +/* + * As of USB 2.0, full/low speed devices are segregated into trees. + * One type grows from USB 1.1 host controllers (OHCI, UHCI etc). + * The other type grows from high speed hubs when they connect to + * full/low speed devices using "Transaction Translators" (TTs). + * + * TTs should only be known to the hub driver, and high speed bus + * drivers (only EHCI for now). They affect periodic scheduling and + * sometimes control/bulk error recovery. + */ +struct usb_tt { + struct usb_device *hub; /* upstream highspeed hub */ + int multi; /* true means one TT per port */ + unsigned think_time; /* think time in ns */ + + /* for control/bulk error recovery (CLEAR_TT_BUFFER) */ + spinlock_t lock; + struct list_head clear_list; /* of usb_tt_clear */ + struct work_struct kevent; +}; + +struct usb_tt_clear { + struct list_head clear_list; + unsigned tt; + u16 devinfo; +}; + +extern void usb_hub_tt_clear_buffer (struct usb_device *dev, int pipe); + +#endif /* __LINUX_HUB_H */ diff --git a/modules/hp2101nw/src/serhci.h b/modules/hp2101nw/src/serhci.h new file mode 100644 index 0000000..3266356 --- /dev/null +++ b/modules/hp2101nw/src/serhci.h @@ -0,0 +1,142 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include <linux/platform_device.h> +#include "headers/hcd.h" + + +struct serhci_device { + struct usb_device *udev; + + /* + * devid specifies a remote usb device uniquely instead + * of combination of busnum and devnum. + */ + __u32 devid; + + /* speed of a remote device */ + enum usb_device_speed speed; + + /* serhci root-hub port to which this device is attached */ + __u32 rhport; + + struct usbip_device ud; + + + /* lock for the below link lists */ + spinlock_t priv_lock; + + /* serhci_priv is linked to one of them. */ + struct list_head priv_tx; + struct list_head priv_rx; + + /* serhci_unlink is linked to one of them */ + struct list_head unlink_tx; + struct list_head unlink_rx; + + /* serhci_tx thread sleeps for this queue */ + wait_queue_head_t waitq_tx; +}; + + +/* urb->hcpriv, use container_of() */ +struct serhci_priv { + unsigned long seqnum; + struct list_head list; + + struct serhci_device *vdev; + struct urb *urb; +}; + + +struct serhci_unlink { + /* seqnum of this request */ + unsigned long seqnum; + + struct list_head list; + + /* seqnum of the unlink target */ + unsigned long unlink_seqnum; +}; + +/* + * The number of ports is less than 16 ? + * USB_MAXCHILDREN is statically defined to 16 in usb.h. Its maximum value + * would be 31 because the event_bits[1] of struct usb_hub is defined as + * unsigned long in hub.h + */ +#define VHCI_NPORTS 8 + +/* for usb_bus.hcpriv */ +struct serhci_hcd { + spinlock_t lock; + + u32 port_status[VHCI_NPORTS]; + + unsigned resuming:1; + unsigned long re_timeout; + + atomic_t seqnum; + + /* + * NOTE: + * wIndex shows the port number and begins from 1. + * But, the index of this array begins from 0. + */ + struct serhci_device vdev[VHCI_NPORTS]; + + /* serhci_device which has not been assiged its address yet */ + int pending_port; +}; + + +extern struct serhci_hcd *the_controller; +extern struct attribute_group dev_attr_group; + + +/*-------------------------------------------------------------------------*/ +/* prototype declaration */ + +/* serhci_hcd.c */ +void rh_port_connect(int rhport, enum usb_device_speed speed); +void rh_port_disconnect(int rhport); +void serhci_rx_loop(struct usbip_task *ut); +void serhci_tx_loop(struct usbip_task *ut); + +#define hardware (&the_controller->pdev.dev) + +static inline struct serhci_device *port_to_vdev(__u32 port) +{ + return &the_controller->vdev[port]; +} + +static inline struct serhci_hcd *hcd_to_serhci(struct usb_hcd *hcd) +{ + return (struct serhci_hcd *) (hcd->hcd_priv); +} + +static inline struct usb_hcd *serhci_to_hcd(struct serhci_hcd *serhci) +{ + return container_of((void *) serhci, struct usb_hcd, hcd_priv); +} + +static inline struct device *serhci_dev(struct serhci_hcd *serhci) +{ + return serhci_to_hcd(serhci)->self.controller; +} diff --git a/modules/hp2101nw/src/serhci_common.c b/modules/hp2101nw/src/serhci_common.c new file mode 100644 index 0000000..eae9c7e --- /dev/null +++ b/modules/hp2101nw/src/serhci_common.c @@ -0,0 +1,997 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include <linux/kernel.h> +#include <linux/file.h> +#include <linux/tcp.h> +#include <linux/in.h> +#include "serhci_common.h" + +/* version information */ +#define DRIVER_VERSION "1.0" +#define DRIVER_AUTHOR "Takahiro Hirofuchi <hirofuchi _at_ users.sourceforge.net>" +#define DRIVER_DESC "usbip common driver" + +/*-------------------------------------------------------------------------*/ +/* debug routines */ + +#ifdef CONFIG_USB_DEBUG +unsigned long usbip_debug_flag = 0xffffffff; +#else +unsigned long usbip_debug_flag; +#endif +EXPORT_SYMBOL_GPL(usbip_debug_flag); + + +/* FIXME */ +struct device_attribute dev_attr_usbip_debug; +EXPORT_SYMBOL_GPL(dev_attr_usbip_debug); + + +static ssize_t show_flag(struct device *dev, struct device_attribute *attr, + char *buf) +{ + return sprintf(buf, "%lx\n", usbip_debug_flag); +} + +static ssize_t store_flag(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned long flag; + + sscanf(buf, "%lx", &flag); + usbip_debug_flag = flag; + + return count; +} +DEVICE_ATTR(usbip_debug, (S_IRUGO | S_IWUSR), show_flag, store_flag); + +static void usbip_dump_buffer(char *buff, int bufflen) +{ + int i; + + if (bufflen > 128) { + for (i = 0; i < 128; i++) { + if (i%24 == 0) + printk(" "); + printk("%02x ", (unsigned char) buff[i]); + if (i%4 == 3) + printk("| "); + if (i%24 == 23) + printk("\n"); + } + printk("... (%d byte)\n", bufflen); + return; + } + + for (i = 0; i < bufflen; i++) { + if (i%24 == 0) + printk(" "); + printk("%02x ", (unsigned char) buff[i]); + if (i%4 == 3) + printk("| "); + if (i%24 == 23) + printk("\n"); + } + printk("\n"); + +} + +static void usbip_dump_pipe(unsigned int p) +{ + unsigned char type = usb_pipetype(p); + unsigned char ep = usb_pipeendpoint(p); + unsigned char dev = usb_pipedevice(p); + unsigned char dir = usb_pipein(p); + + printk("dev(%d) ", dev); + printk("ep(%d) ", ep); + printk("%s ", dir ? "IN" : "OUT"); + + switch (type) { + case PIPE_ISOCHRONOUS: + printk("%s ", "ISO"); + break; + case PIPE_INTERRUPT: + printk("%s ", "INT"); + break; + case PIPE_CONTROL: + printk("%s ", "CTL"); + break; + case PIPE_BULK: + printk("%s ", "BLK"); + break; + default: + printk("ERR"); + } + + printk("\n"); + +} + +static void usbip_dump_usb_device(struct usb_device *udev) +{ + struct device *dev = &udev->dev; + int i; + + dev_dbg(dev, " devnum(%d) devpath(%s)", + udev->devnum, udev->devpath); + + switch (udev->speed) { + case USB_SPEED_HIGH: + printk(" SPD_HIGH"); + break; + case USB_SPEED_FULL: + printk(" SPD_FULL"); + break; + case USB_SPEED_LOW: + printk(" SPD_LOW"); + break; + case USB_SPEED_UNKNOWN: + printk(" SPD_UNKNOWN"); + break; + default: + printk(" SPD_ERROR"); + } + + printk(" tt %p, ttport %d", udev->tt, udev->ttport); + printk("\n"); + + dev_dbg(dev, " "); + for (i = 0; i < 16; i++) + printk(" %2u", i); + printk("\n"); + + dev_dbg(dev, " toggle0(IN) :"); + for (i = 0; i < 16; i++) + printk(" %2u", (udev->toggle[0] & (1 << i)) ? 1 : 0); + printk("\n"); + + dev_dbg(dev, " toggle1(OUT):"); + for (i = 0; i < 16; i++) + printk(" %2u", (udev->toggle[1] & (1 << i)) ? 1 : 0); + printk("\n"); + + + dev_dbg(dev, " epmaxp_in :"); + for (i = 0; i < 16; i++) { + if (udev->ep_in[i]) + printk(" %2u", + le16_to_cpu(udev->ep_in[i]->desc.wMaxPacketSize)); + } + printk("\n"); + + dev_dbg(dev, " epmaxp_out :"); + for (i = 0; i < 16; i++) { + if (udev->ep_out[i]) + printk(" %2u", + le16_to_cpu(udev->ep_out[i]->desc.wMaxPacketSize)); + } + printk("\n"); + + dev_dbg(dev, "parent %p, bus %p\n", udev->parent, udev->bus); + + dev_dbg(dev, "descriptor %p, config %p, actconfig %p, " + "rawdescriptors %p\n", &udev->descriptor, udev->config, + udev->actconfig, udev->rawdescriptors); + + dev_dbg(dev, "have_langid %d, string_langid %d\n", + udev->have_langid, udev->string_langid); + + dev_dbg(dev, "maxchild %d, children %p\n", + udev->maxchild, udev->children); +} + +static void usbip_dump_request_type(__u8 rt) +{ + switch (rt & USB_RECIP_MASK) { + case USB_RECIP_DEVICE: + printk("DEVICE"); + break; + case USB_RECIP_INTERFACE: + printk("INTERF"); + break; + case USB_RECIP_ENDPOINT: + printk("ENDPOI"); + break; + case USB_RECIP_OTHER: + printk("OTHER "); + break; + default: + printk("------"); + } +} + +static void usbip_dump_usb_ctrlrequest(struct usb_ctrlrequest *cmd) +{ + if (!cmd) { + printk(" %s : null pointer\n", __func__); + return; + } + + printk(" "); + printk("bRequestType(%02X) ", cmd->bRequestType); + printk("bRequest(%02X) " , cmd->bRequest); + printk("wValue(%04X) ", cmd->wValue); + printk("wIndex(%04X) ", cmd->wIndex); + printk("wLength(%04X) ", cmd->wLength); + + printk("\n "); + + if ((cmd->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) { + printk("STANDARD "); + switch (cmd->bRequest) { + case USB_REQ_GET_STATUS: + printk("GET_STATUS"); + break; + case USB_REQ_CLEAR_FEATURE: + printk("CLEAR_FEAT"); + break; + case USB_REQ_SET_FEATURE: + printk("SET_FEAT "); + break; + case USB_REQ_SET_ADDRESS: + printk("SET_ADDRRS"); + break; + case USB_REQ_GET_DESCRIPTOR: + printk("GET_DESCRI"); + break; + case USB_REQ_SET_DESCRIPTOR: + printk("SET_DESCRI"); + break; + case USB_REQ_GET_CONFIGURATION: + printk("GET_CONFIG"); + break; + case USB_REQ_SET_CONFIGURATION: + printk("SET_CONFIG"); + break; + case USB_REQ_GET_INTERFACE: + printk("GET_INTERF"); + break; + case USB_REQ_SET_INTERFACE: + printk("SET_INTERF"); + break; + case USB_REQ_SYNCH_FRAME: + printk("SYNC_FRAME"); + break; + default: + printk("REQ(%02X) ", cmd->bRequest); + } + + printk(" "); + usbip_dump_request_type(cmd->bRequestType); + + } else if ((cmd->bRequestType & USB_TYPE_MASK) == USB_TYPE_CLASS) + printk("CLASS "); + + else if ((cmd->bRequestType & USB_TYPE_MASK) == USB_TYPE_VENDOR) + printk("VENDOR "); + + else if ((cmd->bRequestType & USB_TYPE_MASK) == USB_TYPE_RESERVED) + printk("RESERVED"); + + printk("\n"); +} + +void usbip_dump_urb(struct urb *urb) +{ + struct device *dev; + + if (!urb) { + printk(KERN_DEBUG KBUILD_MODNAME + ":%s: urb: null pointer!!\n", __func__); + return; + } + + if (!urb->dev) { + printk(KERN_DEBUG KBUILD_MODNAME + ":%s: urb->dev: null pointer!!\n", __func__); + return; + } + dev = &urb->dev->dev; + + dev_dbg(dev, " urb :%p\n", urb); + dev_dbg(dev, " dev :%p\n", urb->dev); + + usbip_dump_usb_device(urb->dev); + + dev_dbg(dev, " pipe :%08x ", urb->pipe); + + usbip_dump_pipe(urb->pipe); + + dev_dbg(dev, " status :%d\n", urb->status); + dev_dbg(dev, " transfer_flags :%08X\n", urb->transfer_flags); + dev_dbg(dev, " transfer_buffer :%p\n", urb->transfer_buffer); + dev_dbg(dev, " transfer_buffer_length:%d\n", urb->transfer_buffer_length); + dev_dbg(dev, " actual_length :%d\n", urb->actual_length); + dev_dbg(dev, " setup_packet :%p\n", urb->setup_packet); + + if (urb->setup_packet && usb_pipetype(urb->pipe) == PIPE_CONTROL) + usbip_dump_usb_ctrlrequest( + (struct usb_ctrlrequest *)urb->setup_packet); + + dev_dbg(dev, " start_frame :%d\n", urb->start_frame); + dev_dbg(dev, " number_of_packets :%d\n", urb->number_of_packets); + dev_dbg(dev, " interval :%d\n", urb->interval); + dev_dbg(dev, " error_count :%d\n", urb->error_count); + dev_dbg(dev, " context :%p\n", urb->context); + dev_dbg(dev, " complete :%p\n", urb->complete); +} +EXPORT_SYMBOL_GPL(usbip_dump_urb); + +void usbip_dump_header(struct usbip_header *pdu) +{ + udbg("BASE: cmd %u seq %u devid %u dir %u ep %u\n", + pdu->base.command, + pdu->base.seqnum, + pdu->base.devid, + pdu->base.direction, + pdu->base.ep); + + switch (pdu->base.command) { + case USBIP_CMD_SUBMIT: + udbg("CMD_SUBMIT: x_flags %u x_len %u sf %u #p %u iv %u\n", + pdu->u.cmd_submit.transfer_flags, + pdu->u.cmd_submit.transfer_buffer_length, + pdu->u.cmd_submit.start_frame, + pdu->u.cmd_submit.number_of_packets, + pdu->u.cmd_submit.interval); + break; + case USBIP_CMD_UNLINK: + udbg("CMD_UNLINK: seq %u\n", pdu->u.cmd_unlink.seqnum); + break; + case USBIP_RET_SUBMIT: + udbg("RET_SUBMIT: st %d al %u sf %d ec %d\n", + pdu->u.ret_submit.status, + pdu->u.ret_submit.actual_length, + pdu->u.ret_submit.start_frame, + pdu->u.ret_submit.error_count); + case USBIP_RET_UNLINK: + udbg("RET_UNLINK: status %d\n", pdu->u.ret_unlink.status); + break; + default: + /* NOT REACHED */ + udbg("UNKNOWN\n"); + } +} +EXPORT_SYMBOL_GPL(usbip_dump_header); + + +/*-------------------------------------------------------------------------*/ +/* thread routines */ + +int usbip_thread(void *param) +{ + struct usbip_task *ut = param; + + if (!ut) + return -EINVAL; + + lock_kernel(); + daemonize(ut->name); + allow_signal(SIGKILL); + ut->thread = current; + unlock_kernel(); + + /* srv.rb must wait for rx_thread starting */ + complete(&ut->thread_done); + + /* start of while loop */ + ut->loop_ops(ut); + + /* end of loop */ + ut->thread = NULL; + + complete_and_exit(&ut->thread_done, 0); +} + +void usbip_start_threads(struct usbip_device *ud) +{ + /* + * threads are invoked per one device (per one connection). + */ + kernel_thread(usbip_thread, (void *)&ud->tcp_rx, 0); + kernel_thread(usbip_thread, (void *)&ud->tcp_tx, 0); + + /* confirm threads are starting */ + wait_for_completion(&ud->tcp_rx.thread_done); + wait_for_completion(&ud->tcp_tx.thread_done); +} +EXPORT_SYMBOL_GPL(usbip_start_threads); + +void usbip_stop_threads(struct usbip_device *ud) +{ + /* kill threads related to this sdev, if v.c. exists */ + if (ud->tcp_rx.thread != NULL) { + send_sig(SIGKILL, ud->tcp_rx.thread, 1); + wait_for_completion(&ud->tcp_rx.thread_done); + udbg("rx_thread for ud %p has finished\n", ud); + } + + if (ud->tcp_tx.thread != NULL) { + send_sig(SIGKILL, ud->tcp_tx.thread, 1); + wait_for_completion(&ud->tcp_tx.thread_done); + udbg("tx_thread for ud %p has finished\n", ud); + } +} +EXPORT_SYMBOL_GPL(usbip_stop_threads); + +void usbip_task_init(struct usbip_task *ut, char *name, + void (*loop_ops)(struct usbip_task *)) +{ + ut->thread = NULL; + init_completion(&ut->thread_done); + ut->name = name; + ut->loop_ops = loop_ops; +} +EXPORT_SYMBOL_GPL(usbip_task_init); + + +/*-------------------------------------------------------------------------*/ +/* socket routines */ + + /* Send/receive messages over TCP/IP. I refer drivers/block/nbd.c */ +int usbip_xmit(int send, struct socket *sock, char *buf, + int size, int msg_flags) +{ + int result; + struct msghdr msg; + struct kvec iov; + int total = 0; + + /* for blocks of if (dbg_flag_xmit) */ + char *bp = buf; + int osize = size; + + dbg_xmit("enter\n"); + + if (!sock || !buf || !size) { + printk(KERN_ERR "%s: invalid arg, sock %p buff %p size %d\n", + __func__, sock, buf, size); + return -EINVAL; + } + + + if (dbg_flag_xmit) { + if (send) { + if (!in_interrupt()) + printk(KERN_DEBUG "%-10s:", current->comm); + else + printk(KERN_DEBUG "interupt :"); + + printk("%s: sending... , sock %p, buf %p, " + "size %d, msg_flags %d\n", __func__, + sock, buf, size, msg_flags); + usbip_dump_buffer(buf, size); + } + } + + + do { + sock->sk->sk_allocation = GFP_NOIO; + iov.iov_base = buf; + iov.iov_len = size; + msg.msg_name = NULL; + msg.msg_namelen = 0; + msg.msg_control = NULL; + msg.msg_controllen = 0; + msg.msg_namelen = 0; + msg.msg_flags = msg_flags | MSG_NOSIGNAL; + + if (send) + result = kernel_sendmsg(sock, &msg, &iov, 1, size); + else + result = kernel_recvmsg(sock, &msg, &iov, 1, size, + MSG_WAITALL); + + if (result <= 0) { + udbg("usbip_xmit: %s sock %p buf %p size %u ret %d" + " total %d\n", + send ? "send" : "receive", sock, buf, + size, result, total); + goto err; + } + + size -= result; + buf += result; + total += result; + + } while (size > 0); + + + if (dbg_flag_xmit) { + if (!send) { + if (!in_interrupt()) + printk(KERN_DEBUG "%-10s:", current->comm); + else + printk(KERN_DEBUG "interupt :"); + + printk("usbip_xmit: receiving....\n"); + usbip_dump_buffer(bp, osize); + printk("usbip_xmit: received, osize %d ret %d size %d " + "total %d\n", osize, result, size, + total); + } + + if (send) + printk("usbip_xmit: send, total %d\n", total); + } + + return total; + +err: + return result; +} +EXPORT_SYMBOL_GPL(usbip_xmit); + + +/* now a usrland utility should set options. */ +#if 0 +int setquickack(struct socket *socket) +{ + mm_segment_t oldfs; + int val = 1; + int ret; + + oldfs = get_fs(); + set_fs(get_ds()); + ret = socket->ops->setsockopt(socket, SOL_TCP, TCP_QUICKACK, + (char __user *) &val, sizeof(ret)); + set_fs(oldfs); + + return ret; +} + +int setnodelay(struct socket *socket) +{ + mm_segment_t oldfs; + int val = 1; + int ret; + + oldfs = get_fs(); + set_fs(get_ds()); + ret = socket->ops->setsockopt(socket, SOL_TCP, TCP_NODELAY, + (char __user *) &val, sizeof(ret)); + set_fs(oldfs); + + return ret; +} + +int setkeepalive(struct socket *socket) +{ + mm_segment_t oldfs; + int val = 1; + int ret; + + oldfs = get_fs(); + set_fs(get_ds()); + ret = socket->ops->setsockopt(socket, SOL_SOCKET, SO_KEEPALIVE, + (char __user *) &val, sizeof(ret)); + set_fs(oldfs); + + return ret; +} + +void setreuse(struct socket *socket) +{ + socket->sk->sk_reuse = 1; +} +#endif + +struct socket *sockfd_to_socket(unsigned int sockfd) +{ + struct socket *socket; + struct file *file; + struct inode *inode; + + file = fget(sockfd); + if (!file) { + printk(KERN_ERR "%s: invalid sockfd\n", __func__); + return NULL; + } + + inode = file->f_dentry->d_inode; + + if (!inode || !S_ISSOCK(inode->i_mode)) + return NULL; + + socket = SOCKET_I(inode); + + return socket; +} +EXPORT_SYMBOL_GPL(sockfd_to_socket); + + + +/*-------------------------------------------------------------------------*/ +/* pdu routines */ + +/* there may be more cases to tweak the flags. */ +static unsigned int tweak_transfer_flags(unsigned int flags) +{ + + if (flags & URB_NO_TRANSFER_DMA_MAP) + /* + * vhci_hcd does not provide DMA-mapped I/O. The upper + * driver does not need to set this flag. The remote + * usbip.ko does not still perform DMA-mapped I/O for + * DMA-caplable host controllers. So, clear this flag. + */ + flags &= ~URB_NO_TRANSFER_DMA_MAP; + + if (flags & URB_NO_SETUP_DMA_MAP) + flags &= ~URB_NO_SETUP_DMA_MAP; + + return flags; +} + +static void usbip_pack_cmd_submit(struct usbip_header *pdu, struct urb *urb, + int pack) +{ + struct usbip_header_cmd_submit *spdu = &pdu->u.cmd_submit; + + /* + * Some members are not still implemented in usbip. I hope this issue + * will be discussed when usbip is ported to other operating systems. + */ + if (pack) { + /* vhci_tx.c */ + spdu->transfer_flags = + tweak_transfer_flags(urb->transfer_flags); + spdu->transfer_buffer_length = urb->transfer_buffer_length; + spdu->start_frame = urb->start_frame; + spdu->number_of_packets = urb->number_of_packets; + spdu->interval = urb->interval; + } else { + /* stub_rx.c */ + urb->transfer_flags = spdu->transfer_flags; + + urb->transfer_buffer_length = spdu->transfer_buffer_length; + urb->start_frame = spdu->start_frame; + urb->number_of_packets = spdu->number_of_packets; + urb->interval = spdu->interval; + } +} + +static void usbip_pack_ret_submit(struct usbip_header *pdu, struct urb *urb, + int pack) +{ + struct usbip_header_ret_submit *rpdu = &pdu->u.ret_submit; + + if (pack) { + /* stub_tx.c */ + + rpdu->status = urb->status; + rpdu->actual_length = urb->actual_length; + rpdu->start_frame = urb->start_frame; + rpdu->error_count = urb->error_count; + } else { + /* vhci_rx.c */ + + urb->status = rpdu->status; + urb->actual_length = rpdu->actual_length; + urb->start_frame = rpdu->start_frame; + urb->error_count = rpdu->error_count; + } +} + + +void usbip_pack_pdu(struct usbip_header *pdu, struct urb *urb, int cmd, + int pack) +{ + switch (cmd) { + case USBIP_CMD_SUBMIT: + usbip_pack_cmd_submit(pdu, urb, pack); + break; + case USBIP_RET_SUBMIT: + usbip_pack_ret_submit(pdu, urb, pack); + break; + default: + err("unknown command"); + /* NOTREACHED */ + /* BUG(); */ + } +} +EXPORT_SYMBOL_GPL(usbip_pack_pdu); + + +static void correct_endian_basic(struct usbip_header_basic *base, int send) +{ + if (send) { + base->command = cpu_to_be32(base->command); + base->seqnum = cpu_to_be32(base->seqnum); + base->devid = cpu_to_be32(base->devid); + base->direction = cpu_to_be32(base->direction); + base->ep = cpu_to_be32(base->ep); + } else { + base->command = be32_to_cpu(base->command); + base->seqnum = be32_to_cpu(base->seqnum); + base->devid = be32_to_cpu(base->devid); + base->direction = be32_to_cpu(base->direction); + base->ep = be32_to_cpu(base->ep); + } +} + +static void correct_endian_cmd_submit(struct usbip_header_cmd_submit *pdu, + int send) +{ + if (send) { + pdu->transfer_flags = cpu_to_be32(pdu->transfer_flags); + + cpu_to_be32s(&pdu->transfer_buffer_length); + cpu_to_be32s(&pdu->start_frame); + cpu_to_be32s(&pdu->number_of_packets); + cpu_to_be32s(&pdu->interval); + } else { + pdu->transfer_flags = be32_to_cpu(pdu->transfer_flags); + + be32_to_cpus(&pdu->transfer_buffer_length); + be32_to_cpus(&pdu->start_frame); + be32_to_cpus(&pdu->number_of_packets); + be32_to_cpus(&pdu->interval); + } +} + +static void correct_endian_ret_submit(struct usbip_header_ret_submit *pdu, + int send) +{ + if (send) { + cpu_to_be32s(&pdu->status); + cpu_to_be32s(&pdu->actual_length); + cpu_to_be32s(&pdu->start_frame); + cpu_to_be32s(&pdu->error_count); + } else { + be32_to_cpus(&pdu->status); + be32_to_cpus(&pdu->actual_length); + be32_to_cpus(&pdu->start_frame); + be32_to_cpus(&pdu->error_count); + } +} + +static void correct_endian_cmd_unlink(struct usbip_header_cmd_unlink *pdu, + int send) +{ + if (send) + pdu->seqnum = cpu_to_be32(pdu->seqnum); + else + pdu->seqnum = be32_to_cpu(pdu->seqnum); +} + +static void correct_endian_ret_unlink(struct usbip_header_ret_unlink *pdu, + int send) +{ + if (send) + cpu_to_be32s(&pdu->status); + else + be32_to_cpus(&pdu->status); +} + +void usbip_header_correct_endian(struct usbip_header *pdu, int send) +{ + __u32 cmd = 0; + + if (send) + cmd = pdu->base.command; + + correct_endian_basic(&pdu->base, send); + + if (!send) + cmd = pdu->base.command; + + switch (cmd) { + case USBIP_CMD_SUBMIT: + correct_endian_cmd_submit(&pdu->u.cmd_submit, send); + break; + case USBIP_RET_SUBMIT: + correct_endian_ret_submit(&pdu->u.ret_submit, send); + break; + case USBIP_CMD_UNLINK: + correct_endian_cmd_unlink(&pdu->u.cmd_unlink, send); + break; + case USBIP_RET_UNLINK: + correct_endian_ret_unlink(&pdu->u.ret_unlink, send); + break; + default: + /* NOTREACHED */ + err("unknown command in pdu header: %d", cmd); + /* BUG(); */ + } +} +EXPORT_SYMBOL_GPL(usbip_header_correct_endian); + +static void usbip_iso_pakcet_correct_endian( + struct usbip_iso_packet_descriptor *iso, + int send) +{ + /* does not need all members. but copy all simply. */ + if (send) { + iso->offset = cpu_to_be32(iso->offset); + iso->length = cpu_to_be32(iso->length); + iso->status = cpu_to_be32(iso->status); + iso->actual_length = cpu_to_be32(iso->actual_length); + } else { + iso->offset = be32_to_cpu(iso->offset); + iso->length = be32_to_cpu(iso->length); + iso->status = be32_to_cpu(iso->status); + iso->actual_length = be32_to_cpu(iso->actual_length); + } +} + +static void usbip_pack_iso(struct usbip_iso_packet_descriptor *iso, + struct usb_iso_packet_descriptor *uiso, int pack) +{ + if (pack) { + iso->offset = uiso->offset; + iso->length = uiso->length; + iso->status = uiso->status; + iso->actual_length = uiso->actual_length; + } else { + uiso->offset = iso->offset; + uiso->length = iso->length; + uiso->status = iso->status; + uiso->actual_length = iso->actual_length; + } +} + + +/* must free buffer */ +void *usbip_alloc_iso_desc_pdu(struct urb *urb, ssize_t *bufflen) +{ + void *buff; + struct usbip_iso_packet_descriptor *iso; + int np = urb->number_of_packets; + ssize_t size = np * sizeof(*iso); + int i; + + buff = kzalloc(size, GFP_KERNEL); + if (!buff) + return NULL; + + for (i = 0; i < np; i++) { + iso = buff + (i * sizeof(*iso)); + + usbip_pack_iso(iso, &urb->iso_frame_desc[i], 1); + usbip_iso_pakcet_correct_endian(iso, 1); + } + + *bufflen = size; + + return buff; +} +EXPORT_SYMBOL_GPL(usbip_alloc_iso_desc_pdu); + +/* some members of urb must be substituted before. */ +int usbip_recv_iso(struct usbip_device *ud, struct urb *urb) +{ + void *buff; + struct usbip_iso_packet_descriptor *iso; + int np = urb->number_of_packets; + int size = np * sizeof(*iso); + int i; + int ret; + + if (!usb_pipeisoc(urb->pipe)) + return 0; + + /* my Bluetooth dongle gets ISO URBs which are np = 0 */ + if (np == 0) { + /* uinfo("iso np == 0\n"); */ + /* usbip_dump_urb(urb); */ + return 0; + } + + buff = kzalloc(size, GFP_KERNEL); + if (!buff) + return -ENOMEM; + + ret = usbip_xmit(0, ud->tcp_socket, buff, size, 0); + if (ret != size) { + dev_err(&urb->dev->dev, "recv iso_frame_descriptor, %d\n", + ret); + kfree(buff); + + if (ud->side == USBIP_STUB) + usbip_event_add(ud, SDEV_EVENT_ERROR_TCP); + else + usbip_event_add(ud, VDEV_EVENT_ERROR_TCP); + + return -EPIPE; + } + + for (i = 0; i < np; i++) { + iso = buff + (i * sizeof(*iso)); + + usbip_iso_pakcet_correct_endian(iso, 0); + usbip_pack_iso(iso, &urb->iso_frame_desc[i], 0); + } + + + kfree(buff); + + return ret; +} +EXPORT_SYMBOL_GPL(usbip_recv_iso); + + +/* some members of urb must be substituted before. */ +int usbip_recv_xbuff(struct usbip_device *ud, struct urb *urb) +{ + int ret; + int size; + + if (ud->side == USBIP_STUB) { + /* stub_rx.c */ + /* the direction of urb must be OUT. */ + if (usb_pipein(urb->pipe)) + return 0; + + size = urb->transfer_buffer_length; + } else { + /* vhci_rx.c */ + /* the direction of urb must be IN. */ + if (usb_pipeout(urb->pipe)) + return 0; + + size = urb->actual_length; + } + + /* no need to recv xbuff */ + if (!(size > 0)) + return 0; + + ret = usbip_xmit(0, ud->tcp_socket, (char *)urb->transfer_buffer, + size, 0); + if (ret != size) { + dev_err(&urb->dev->dev, "recv xbuf, %d\n", ret); + if (ud->side == USBIP_STUB) { + usbip_event_add(ud, SDEV_EVENT_ERROR_TCP); + } else { + usbip_event_add(ud, VDEV_EVENT_ERROR_TCP); + return -EPIPE; + } + } + + return ret; +} +EXPORT_SYMBOL_GPL(usbip_recv_xbuff); + + +/*-------------------------------------------------------------------------*/ + +static int __init usbip_common_init(void) +{ + printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "" DRIVER_VERSION); + + return 0; +} + +static void __exit usbip_common_exit(void) +{ + return; +} + + + + +module_init(usbip_common_init); +module_exit(usbip_common_exit); + +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_LICENSE("GPL"); diff --git a/modules/hp2101nw/src/serhci_common.h b/modules/hp2101nw/src/serhci_common.h new file mode 100644 index 0000000..4c8ffb0 --- /dev/null +++ b/modules/hp2101nw/src/serhci_common.h @@ -0,0 +1,406 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#ifndef __SERHCI_COMMON_H +#define __SERHCI_COMMON_H + + +#include <linux/version.h> +#include <linux/usb.h> +#include <asm/byteorder.h> +#include <net/sock.h> + +/*-------------------------------------------------------------------------*/ + +/* + * define macros to print messages + */ + +/** + * udbg - print debug messages if CONFIG_USB_DEBUG is defined + * @fmt: + * @args: + */ + +#ifdef CONFIG_USB_DEBUG + +#define udbg(fmt, args...) \ + do { \ + printk(KERN_DEBUG "%-10s:(%s,%d) %s: " fmt, \ + (in_interrupt() ? "interrupt" : (current)->comm),\ + __FILE__, __LINE__, __func__, ##args); \ + } while (0) + +#else /* CONFIG_USB_DEBUG */ + +#define udbg(fmt, args...) do { } while (0) + +#endif /* CONFIG_USB_DEBUG */ + + +enum { + usbip_debug_xmit = (1 << 0), + usbip_debug_sysfs = (1 << 1), + usbip_debug_urb = (1 << 2), + usbip_debug_eh = (1 << 3), + + usbip_debug_stub_cmp = (1 << 8), + usbip_debug_stub_dev = (1 << 9), + usbip_debug_stub_rx = (1 << 10), + usbip_debug_stub_tx = (1 << 11), + + usbip_debug_serhci_rh = (1 << 8), + usbip_debug_serhci_hc = (1 << 9), + usbip_debug_serhci_rx = (1 << 10), + usbip_debug_serhci_tx = (1 << 11), + usbip_debug_serhci_sysfs = (1 << 12) +}; + +#define dbg_flag_xmit (usbip_debug_flag & usbip_debug_xmit) +#define dbg_flag_serhci_rh (usbip_debug_flag & usbip_debug_serhci_rh) +#define dbg_flag_serhci_hc (usbip_debug_flag & usbip_debug_serhci_hc) +#define dbg_flag_serhci_rx (usbip_debug_flag & usbip_debug_serhci_rx) +#define dbg_flag_serhci_tx (usbip_debug_flag & usbip_debug_serhci_tx) +#define dbg_flag_serhci_sysfs (usbip_debug_flag & usbip_debug_serhci_sysfs) +#define dbg_flag_stub_rx (usbip_debug_flag & usbip_debug_stub_rx) +#define dbg_flag_stub_tx (usbip_debug_flag & usbip_debug_stub_tx) + +extern unsigned long usbip_debug_flag; +extern struct device_attribute dev_attr_usbip_debug; + +#define dbg_with_flag(flag, fmt, args...) \ + do { \ + if (flag & usbip_debug_flag) \ + udbg(fmt , ##args); \ + } while (0) + +#define dbg_sysfs(fmt, args...) \ + dbg_with_flag(usbip_debug_sysfs, fmt , ##args) +#define dbg_xmit(fmt, args...) \ + dbg_with_flag(usbip_debug_xmit, fmt , ##args) +#define dbg_urb(fmt, args...) \ + dbg_with_flag(usbip_debug_urb, fmt , ##args) +#define dbg_eh(fmt, args...) \ + dbg_with_flag(usbip_debug_eh, fmt , ##args) + +#define dbg_serhci_rh(fmt, args...) \ + dbg_with_flag(usbip_debug_serhci_rh, fmt , ##args) +#define dbg_serhci_hc(fmt, args...) \ + dbg_with_flag(usbip_debug_serhci_hc, fmt , ##args) +#define dbg_serhci_rx(fmt, args...) \ + dbg_with_flag(usbip_debug_serhci_rx, fmt , ##args) +#define dbg_serhci_tx(fmt, args...) \ + dbg_with_flag(usbip_debug_serhci_tx, fmt , ##args) +#define dbg_serhci_sysfs(fmt, args...) \ + dbg_with_flag(usbip_debug_serhci_sysfs, fmt , ##args) + +#define dbg_stub_cmp(fmt, args...) \ + dbg_with_flag(usbip_debug_stub_cmp, fmt , ##args) +#define dbg_stub_rx(fmt, args...) \ + dbg_with_flag(usbip_debug_stub_rx, fmt , ##args) +#define dbg_stub_tx(fmt, args...) \ + dbg_with_flag(usbip_debug_stub_tx, fmt , ##args) + + +/** + * uerr - print error messages + * @fmt: + * @args: + */ +#define uerr(fmt, args...) \ + do { \ + printk(KERN_ERR "%-10s: ***ERROR*** (%s,%d) %s: " fmt, \ + (in_interrupt() ? "interrupt" : (current)->comm),\ + __FILE__, __LINE__, __func__, ##args); \ + } while (0) + +/** + * uinfo - print information messages + * @fmt: + * @args: + */ +#define uinfo(fmt, args...) \ + do { \ + printk(KERN_INFO "usbip: " fmt , ## args); \ + } while (0) + + +/*-------------------------------------------------------------------------*/ + +/* + * USB/IP request headers. + * Currently, we define 4 request types: + * + * - CMD_SUBMIT transfers a USB request, corresponding to usb_submit_urb(). + * (client to server) + * - RET_RETURN transfers the result of CMD_SUBMIT. + * (server to client) + * - CMD_UNLINK transfers an unlink request of a pending USB request. + * (client to server) + * - RET_UNLINK transfers the result of CMD_UNLINK. + * (server to client) + * + * Note: The below request formats are based on the USB subsystem of Linux. Its + * details will be defined when other implementations come. + * + * + */ + +/* + * A basic header followed by other additional headers. + */ +struct usbip_header_basic { +#define USBIP_CMD_SUBMIT 0x0001 +#define USBIP_CMD_UNLINK 0x0002 +#define USBIP_RET_SUBMIT 0x0003 +#define USBIP_RET_UNLINK 0x0004 + __u32 command; + + /* sequencial number which identifies requests. + * incremented per connections */ + __u32 seqnum; + + /* devid is used to specify a remote USB device uniquely instead + * of busnum and devnum in Linux. In the case of Linux stub_driver, + * this value is ((busnum << 16) | devnum) */ + __u32 devid; + +#define USBIP_DIR_OUT 0 +#define USBIP_DIR_IN 1 + __u32 direction; + __u32 ep; /* endpoint number */ +} __attribute__ ((packed)); + +/* + * An additional header for a CMD_SUBMIT packet. + */ +struct usbip_header_cmd_submit { + /* these values are basically the same as in a URB. */ + + /* the same in a URB. */ + __u32 transfer_flags; + + /* set the following data size (out), + * or expected reading data size (in) */ + __s32 transfer_buffer_length; + + /* it is difficult for usbip to sync frames (reserved only?) */ + __s32 start_frame; + + /* the number of iso descriptors that follows this header */ + __s32 number_of_packets; + + /* the maximum time within which this request works in a host + * controller of a server side */ + __s32 interval; + + /* set setup packet data for a CTRL request */ + unsigned char setup[8]; +} __attribute__ ((packed)); + +/* + * An additional header for a RET_SUBMIT packet. + */ +struct usbip_header_ret_submit { + __s32 status; + __s32 actual_length; /* returned data length */ + __s32 start_frame; /* ISO and INT */ + __s32 number_of_packets; /* ISO only */ + __s32 error_count; /* ISO only */ +} __attribute__ ((packed)); + +/* + * An additional header for a CMD_UNLINK packet. + */ +struct usbip_header_cmd_unlink { + __u32 seqnum; /* URB's seqnum which will be unlinked */ +} __attribute__ ((packed)); + + +/* + * An additional header for a RET_UNLINK packet. + */ +struct usbip_header_ret_unlink { + __s32 status; +} __attribute__ ((packed)); + + +/* the same as usb_iso_packet_descriptor but packed for pdu */ +struct usbip_iso_packet_descriptor { + __u32 offset; + __u32 length; /* expected length */ + __u32 actual_length; + __u32 status; +} __attribute__ ((packed)); + + +/* + * All usbip packets use a common header to keep code simple. + */ +struct usbip_header { + struct usbip_header_basic base; + + union { + struct usbip_header_cmd_submit cmd_submit; + struct usbip_header_ret_submit ret_submit; + struct usbip_header_cmd_unlink cmd_unlink; + struct usbip_header_ret_unlink ret_unlink; + } u; +} __attribute__ ((packed)); + + + + +/*-------------------------------------------------------------------------*/ + + +int usbip_xmit(int, struct socket *, char *, int, int); +int usbip_sendmsg(struct socket *, struct msghdr *, int); + + +static inline int interface_to_busnum(struct usb_interface *interface) +{ + struct usb_device *udev = interface_to_usbdev(interface); + return udev->bus->busnum; +} + +static inline int interface_to_devnum(struct usb_interface *interface) +{ + struct usb_device *udev = interface_to_usbdev(interface); + return udev->devnum; +} + +static inline int interface_to_infnum(struct usb_interface *interface) +{ + return interface->cur_altsetting->desc.bInterfaceNumber; +} + +#if 0 +int setnodelay(struct socket *); +int setquickack(struct socket *); +int setkeepalive(struct socket *socket); +void setreuse(struct socket *); +#endif + +struct socket *sockfd_to_socket(unsigned int); +int set_sockaddr(struct socket *socket, struct sockaddr_storage *ss); + +void usbip_dump_urb(struct urb *purb); +void usbip_dump_header(struct usbip_header *pdu); + + +struct usbip_device; + +struct usbip_task { + struct task_struct *thread; + struct completion thread_done; + char *name; + void (*loop_ops)(struct usbip_task *); +}; + +enum usbip_side { + USBIP_VHCI, + USBIP_STUB, +}; + +enum usbip_status { + /* sdev is available. */ + SDEV_ST_AVAILABLE = 0x01, + /* sdev is now used. */ + SDEV_ST_USED, + /* sdev is unusable because of a fatal error. */ + SDEV_ST_ERROR, + + /* vdev does not connect a remote device. */ + VDEV_ST_NULL, + /* vdev is used, but the USB address is not assigned yet */ + VDEV_ST_NOTASSIGNED, + VDEV_ST_USED, + VDEV_ST_ERROR +}; + +/* a common structure for stub_device and serhci_device */ +struct usbip_device { + enum usbip_side side; + + enum usbip_status status; + + /* lock for status */ + spinlock_t lock; + + struct socket *tcp_socket; + + struct usbip_task tcp_rx; + struct usbip_task tcp_tx; + + /* event handler */ +#define USBIP_EH_SHUTDOWN (1 << 0) +#define USBIP_EH_BYE (1 << 1) +#define USBIP_EH_RESET (1 << 2) +#define USBIP_EH_UNUSABLE (1 << 3) + +#define SDEV_EVENT_REMOVED (USBIP_EH_SHUTDOWN | USBIP_EH_RESET | USBIP_EH_BYE) +#define SDEV_EVENT_DOWN (USBIP_EH_SHUTDOWN | USBIP_EH_RESET) +#define SDEV_EVENT_ERROR_TCP (USBIP_EH_SHUTDOWN | USBIP_EH_RESET) +#define SDEV_EVENT_ERROR_SUBMIT (USBIP_EH_SHUTDOWN | USBIP_EH_RESET) +#define SDEV_EVENT_ERROR_MALLOC (USBIP_EH_SHUTDOWN | USBIP_EH_UNUSABLE) + +#define VDEV_EVENT_REMOVED (USBIP_EH_SHUTDOWN | USBIP_EH_BYE) +#define VDEV_EVENT_DOWN (USBIP_EH_SHUTDOWN | USBIP_EH_RESET) +#define VDEV_EVENT_ERROR_TCP (USBIP_EH_SHUTDOWN | USBIP_EH_RESET) +#define VDEV_EVENT_ERROR_MALLOC (USBIP_EH_SHUTDOWN | USBIP_EH_UNUSABLE) + + unsigned long event; + struct usbip_task eh; + wait_queue_head_t eh_waitq; + + struct eh_ops { + void (*shutdown)(struct usbip_device *); + void (*reset)(struct usbip_device *); + void (*unusable)(struct usbip_device *); + } eh_ops; +}; + + +void usbip_task_init(struct usbip_task *ut, char *, + void (*loop_ops)(struct usbip_task *)); + +void usbip_start_threads(struct usbip_device *ud); +void usbip_stop_threads(struct usbip_device *ud); +int usbip_thread(void *param); + +void usbip_pack_pdu(struct usbip_header *pdu, struct urb *urb, int cmd, + int pack); + +void usbip_header_correct_endian(struct usbip_header *pdu, int send); +/* some members of urb must be substituted before. */ +int usbip_recv_xbuff(struct usbip_device *ud, struct urb *urb); +/* some members of urb must be substituted before. */ +int usbip_recv_iso(struct usbip_device *ud, struct urb *urb); +void *usbip_alloc_iso_desc_pdu(struct urb *urb, ssize_t *bufflen); + + +/* usbip_event.c */ +void usbip_start_eh(struct usbip_device *ud); +void usbip_stop_eh(struct usbip_device *ud); +void usbip_event_add(struct usbip_device *ud, unsigned long event); +int usbip_event_happend(struct usbip_device *ud); + + +#endif diff --git a/modules/hp2101nw/src/serhci_event.c b/modules/hp2101nw/src/serhci_event.c new file mode 100644 index 0000000..3e2c131 --- /dev/null +++ b/modules/hp2101nw/src/serhci_event.c @@ -0,0 +1,141 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include "serhci_common.h" + +static int event_handler(struct usbip_device *ud) +{ + dbg_eh("enter\n"); + + /* + * Events are handled by only this thread. + */ + while (usbip_event_happend(ud)) { + dbg_eh("pending event %lx\n", ud->event); + + /* + * NOTE: shutdown must come first. + * Shutdown the device. + */ + if (ud->event & USBIP_EH_SHUTDOWN) { + ud->eh_ops.shutdown(ud); + + ud->event &= ~USBIP_EH_SHUTDOWN; + + break; + } + + /* Stop the error handler. */ + if (ud->event & USBIP_EH_BYE) + return -1; + + /* Reset the device. */ + if (ud->event & USBIP_EH_RESET) { + ud->eh_ops.reset(ud); + + ud->event &= ~USBIP_EH_RESET; + + break; + } + + /* Mark the device as unusable. */ + if (ud->event & USBIP_EH_UNUSABLE) { + ud->eh_ops.unusable(ud); + + ud->event &= ~USBIP_EH_UNUSABLE; + + break; + } + + /* NOTREACHED */ + printk(KERN_ERR "%s: unknown event\n", __func__); + return -1; + } + + return 0; +} + +static void event_handler_loop(struct usbip_task *ut) +{ + struct usbip_device *ud = container_of(ut, struct usbip_device, eh); + + while (1) { + if (signal_pending(current)) { + dbg_eh("signal catched!\n"); + break; + } + + if (event_handler(ud) < 0) + break; + + wait_event_interruptible(ud->eh_waitq, usbip_event_happend(ud)); + dbg_eh("wakeup\n"); + } +} + +void usbip_start_eh(struct usbip_device *ud) +{ + struct usbip_task *eh = &ud->eh; + + init_waitqueue_head(&ud->eh_waitq); + ud->event = 0; + + usbip_task_init(eh, "usbip_eh", event_handler_loop); + + kernel_thread(usbip_thread, (void *)eh, 0); + + wait_for_completion(&eh->thread_done); +} +EXPORT_SYMBOL_GPL(usbip_start_eh); + +void usbip_stop_eh(struct usbip_device *ud) +{ + struct usbip_task *eh = &ud->eh; + + wait_for_completion(&eh->thread_done); + dbg_eh("usbip_eh has finished\n"); +} +EXPORT_SYMBOL_GPL(usbip_stop_eh); + +void usbip_event_add(struct usbip_device *ud, unsigned long event) +{ + spin_lock(&ud->lock); + + ud->event |= event; + + wake_up(&ud->eh_waitq); + + spin_unlock(&ud->lock); +} +EXPORT_SYMBOL_GPL(usbip_event_add); + +int usbip_event_happend(struct usbip_device *ud) +{ + int happend = 0; + + spin_lock(&ud->lock); + + if (ud->event != 0) + happend = 1; + + spin_unlock(&ud->lock); + + return happend; +} +EXPORT_SYMBOL_GPL(usbip_event_happend); diff --git a/modules/hp2101nw/src/serhci_hcd.c b/modules/hp2101nw/src/serhci_hcd.c new file mode 100644 index 0000000..6da3db4 --- /dev/null +++ b/modules/hp2101nw/src/serhci_hcd.c @@ -0,0 +1,1275 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + + +#include "serhci_common.h" +#include "serhci.h" + +#define DRIVER_VERSION "1.0" +#define DRIVER_AUTHOR "Takahiro Hirofuchi" +#define DRIVER_DESC "Virtual Host Controller Interface Driver for USB/IP" +#define DRIVER_LICENCE "GPL" +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_LICENSE(DRIVER_LICENCE); + + + +/* + * TODO + * - update root hub emulation + * - move the emulation code to userland ? + * porting to other operating systems + * minimize kernel code + * - add suspend/resume code + * - clean up everything + */ + + +/* See usb gadget dummy hcd */ + + +static int serhci_hub_status(struct usb_hcd *hcd, char *buff); +static int serhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, + u16 wIndex, char *buff, u16 wLength); +static int serhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, + gfp_t mem_flags); +static int serhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status); +static int serhci_start(struct usb_hcd *serhci_hcd); +static void serhci_stop(struct usb_hcd *hcd); +static int serhci_get_frame_number(struct usb_hcd *hcd); + +static const char driver_name[] = "serhci_hcd"; +static const char driver_desc[] = "USB/IP Virtual Host Contoroller"; + +struct serhci_hcd *the_controller; + +static const char *bit_desc[] = { + "CONNECTION", /*0*/ + "ENABLE", /*1*/ + "SUSPEND", /*2*/ + "OVER_CURRENT", /*3*/ + "RESET", /*4*/ + "R5", /*5*/ + "R6", /*6*/ + "R7", /*7*/ + "POWER", /*8*/ + "LOWSPEED", /*9*/ + "HIGHSPEED", /*10*/ + "PORT_TEST", /*11*/ + "INDICATOR", /*12*/ + "R13", /*13*/ + "R14", /*14*/ + "R15", /*15*/ + "C_CONNECTION", /*16*/ + "C_ENABLE", /*17*/ + "C_SUSPEND", /*18*/ + "C_OVER_CURRENT", /*19*/ + "C_RESET", /*20*/ + "R21", /*21*/ + "R22", /*22*/ + "R23", /*23*/ + "R24", /*24*/ + "R25", /*25*/ + "R26", /*26*/ + "R27", /*27*/ + "R28", /*28*/ + "R29", /*29*/ + "R30", /*30*/ + "R31", /*31*/ +}; + + +static void dump_port_status(u32 status) +{ + int i = 0; + + printk(KERN_DEBUG "status %08x:", status); + for (i = 0; i < 32; i++) { + if (status & (1 << i)) + printk(" %s", bit_desc[i]); + } + + printk("\n"); +} + + + +void rh_port_connect(int rhport, enum usb_device_speed speed) +{ + unsigned long flags; + + dbg_serhci_rh("rh_port_connect %d\n", rhport); + + spin_lock_irqsave(&the_controller->lock, flags); + + the_controller->port_status[rhport] |= USB_PORT_STAT_CONNECTION + | (1 << USB_PORT_FEAT_C_CONNECTION); + + switch (speed) { + case USB_SPEED_HIGH: + the_controller->port_status[rhport] |= USB_PORT_STAT_HIGH_SPEED; + break; + case USB_SPEED_LOW: + the_controller->port_status[rhport] |= USB_PORT_STAT_LOW_SPEED; + break; + default: + break; + } + + /* spin_lock(&the_controller->vdev[rhport].ud.lock); + * the_controller->vdev[rhport].ud.status = VDEV_CONNECT; + * spin_unlock(&the_controller->vdev[rhport].ud.lock); */ + + the_controller->pending_port = rhport; + + spin_unlock_irqrestore(&the_controller->lock, flags); + + usb_hcd_poll_rh_status(serhci_to_hcd(the_controller)); +} + +void rh_port_disconnect(int rhport) +{ + unsigned long flags; + + dbg_serhci_rh("rh_port_disconnect %d\n", rhport); + + spin_lock_irqsave(&the_controller->lock, flags); + /* stop_activity(dum, driver); */ + the_controller->port_status[rhport] &= ~USB_PORT_STAT_CONNECTION; + the_controller->port_status[rhport] |= + (1 << USB_PORT_FEAT_C_CONNECTION); + + + /* not yet complete the disconnection + * spin_lock(&vdev->ud.lock); + * vdev->ud.status = VHC_ST_DISCONNECT; + * spin_unlock(&vdev->ud.lock); */ + + spin_unlock_irqrestore(&the_controller->lock, flags); +} + + + +/*----------------------------------------------------------------------*/ + +#define PORT_C_MASK \ + ((USB_PORT_STAT_C_CONNECTION \ + | USB_PORT_STAT_C_ENABLE \ + | USB_PORT_STAT_C_SUSPEND \ + | USB_PORT_STAT_C_OVERCURRENT \ + | USB_PORT_STAT_C_RESET) << 16) + +/* + * This function is almostly the same as dummy_hcd.c:dummy_hub_status() without + * suspend/resume support. But, it is modified to provide multiple ports. + * + * @buf: a bitmap to show which port status has been changed. + * bit 0: reserved or used for another purpose? + * bit 1: the status of port 0 has been changed. + * bit 2: the status of port 1 has been changed. + * ... + * bit 7: the status of port 6 has been changed. + * bit 8: the status of port 7 has been changed. + * ... + * bit 15: the status of port 14 has been changed. + * + * So, the maximum number of ports is 31 ( port 0 to port 30) ? + * + * The return value is the actual transfered length in byte. If nothing has + * been changed, return 0. In the case that the number of ports is less than or + * equal to 6 (VHCI_NPORTS==7), return 1. + * + */ +static int serhci_hub_status(struct usb_hcd *hcd, char *buf) +{ + struct serhci_hcd *serhci; + unsigned long flags; + int retval = 0; + + /* the enough buffer is allocated according to USB_MAXCHILDREN */ + unsigned long *event_bits = (unsigned long *) buf; + int rhport; + int changed = 0; + + + *event_bits = 0; + + serhci = hcd_to_serhci(hcd); + + spin_lock_irqsave(&serhci->lock, flags); + if (!test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags)) { + dbg_serhci_rh("hw accessible flag in on?\n"); + goto done; + } + + /* check pseudo status register for each port */ + for (rhport = 0; rhport < VHCI_NPORTS; rhport++) { + if ((serhci->port_status[rhport] & PORT_C_MASK)) { + /* The status of a port has been changed, */ + dbg_serhci_rh("port %d is changed\n", rhport); + + *event_bits |= 1 << (rhport + 1); + changed = 1; + } + } + + uinfo("changed %d\n", changed); + + if (hcd->state == HC_STATE_SUSPENDED) + usb_hcd_resume_root_hub(hcd); + + if (changed) + retval = 1 + (VHCI_NPORTS / 8); + else + retval = 0; + +done: + spin_unlock_irqrestore(&serhci->lock, flags); + return retval; +} + +/* See hub_configure in hub.c */ +static inline void hub_descriptor(struct usb_hub_descriptor *desc) +{ + memset(desc, 0, sizeof(*desc)); + desc->bDescriptorType = 0x29; + desc->bDescLength = 9; + desc->wHubCharacteristics = (__force __u16) + (__constant_cpu_to_le16(0x0001)); + desc->bNbrPorts = VHCI_NPORTS; + desc->bitmap[0] = 0xff; + desc->bitmap[1] = 0xff; +} + +static int serhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, + u16 wIndex, char *buf, u16 wLength) +{ + struct serhci_hcd *dum; + int retval = 0; + unsigned long flags; + int rhport; + + u32 prev_port_status[VHCI_NPORTS]; + + if (!test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags)) + return -ETIMEDOUT; + + /* + * NOTE: + * wIndex shows the port number and begins from 1. + */ + dbg_serhci_rh("typeReq %x wValue %x wIndex %x\n", typeReq, wValue, + wIndex); + if (wIndex > VHCI_NPORTS) + printk(KERN_ERR "%s: invalid port number %d\n", __func__, wIndex); + rhport = ((__u8)(wIndex & 0x00ff)) - 1; + + dum = hcd_to_serhci(hcd); + + spin_lock_irqsave(&dum->lock, flags); + + /* store old status and compare now and old later */ + if (dbg_flag_serhci_rh) { + int i = 0; + for (i = 0; i < VHCI_NPORTS; i++) + prev_port_status[i] = dum->port_status[i]; + } + + switch (typeReq) { + case ClearHubFeature: + dbg_serhci_rh(" ClearHubFeature\n"); + break; + case ClearPortFeature: + switch (wValue) { + case USB_PORT_FEAT_SUSPEND: + if (dum->port_status[rhport] & USB_PORT_STAT_SUSPEND) { + /* 20msec signaling */ + dum->resuming = 1; + dum->re_timeout = + jiffies + msecs_to_jiffies(20); + } + break; + case USB_PORT_FEAT_POWER: + dbg_serhci_rh(" ClearPortFeature: USB_PORT_FEAT_POWER\n"); + dum->port_status[rhport] = 0; + /* dum->address = 0; */ + /* dum->hdev = 0; */ + dum->resuming = 0; + break; + case USB_PORT_FEAT_C_RESET: + dbg_serhci_rh(" ClearPortFeature: " + "USB_PORT_FEAT_C_RESET\n"); + switch (dum->vdev[rhport].speed) { + case USB_SPEED_HIGH: + dum->port_status[rhport] |= + USB_PORT_STAT_HIGH_SPEED; + break; + case USB_SPEED_LOW: + dum->port_status[rhport] |= + USB_PORT_STAT_LOW_SPEED; + break; + default: + break; + } + default: + dbg_serhci_rh(" ClearPortFeature: default %x\n", wValue); + dum->port_status[rhport] &= ~(1 << wValue); + } + break; + case GetHubDescriptor: + dbg_serhci_rh(" GetHubDescriptor\n"); + hub_descriptor((struct usb_hub_descriptor *) buf); + break; + case GetHubStatus: + dbg_serhci_rh(" GetHubStatus\n"); + *(__le32 *) buf = __constant_cpu_to_le32(0); + break; + case GetPortStatus: + dbg_serhci_rh(" GetPortStatus port %x\n", wIndex); + if (wIndex > VHCI_NPORTS || wIndex < 1) { + printk(KERN_ERR "%s: invalid port number %d\n", + __func__, wIndex); + retval = -EPIPE; + } + + /* we do no care of resume. */ + + /* whoever resets or resumes must GetPortStatus to + * complete it!! + * */ + if (dum->resuming && time_after(jiffies, dum->re_timeout)) { + printk(KERN_ERR "%s: not yet\n", __func__); + dum->port_status[rhport] |= + (1 << USB_PORT_FEAT_C_SUSPEND); + dum->port_status[rhport] &= + ~(1 << USB_PORT_FEAT_SUSPEND); + dum->resuming = 0; + dum->re_timeout = 0; + /* if (dum->driver && dum->driver->resume) { + * spin_unlock (&dum->lock); + * dum->driver->resume (&dum->gadget); + * spin_lock (&dum->lock); + * } */ + } + + if ((dum->port_status[rhport] & (1 << USB_PORT_FEAT_RESET)) != + 0 && time_after(jiffies, dum->re_timeout)) { + dum->port_status[rhport] |= + (1 << USB_PORT_FEAT_C_RESET); + dum->port_status[rhport] &= + ~(1 << USB_PORT_FEAT_RESET); + dum->re_timeout = 0; + + if (dum->vdev[rhport].ud.status == + VDEV_ST_NOTASSIGNED) { + dbg_serhci_rh(" enable rhport %d (status %u)\n", + rhport, + dum->vdev[rhport].ud.status); + dum->port_status[rhport] |= + USB_PORT_STAT_ENABLE; + } +#if 0 + if (dum->driver) { + + dum->port_status[rhport] |= + USB_PORT_STAT_ENABLE; + /* give it the best speed we agree on */ + dum->gadget.speed = dum->driver->speed; + dum->gadget.ep0->maxpacket = 64; + switch (dum->gadget.speed) { + case USB_SPEED_HIGH: + dum->port_status[rhport] |= + USB_PORT_STAT_HIGH_SPEED; + break; + case USB_SPEED_LOW: + dum->gadget.ep0->maxpacket = 8; + dum->port_status[rhport] |= + USB_PORT_STAT_LOW_SPEED; + break; + default: + dum->gadget.speed = USB_SPEED_FULL; + break; + } + } +#endif + + } + ((u16 *) buf)[0] = cpu_to_le16(dum->port_status[rhport]); + ((u16 *) buf)[1] = + cpu_to_le16(dum->port_status[rhport] >> 16); + + dbg_serhci_rh(" GetPortStatus bye %x %x\n", ((u16 *)buf)[0], + ((u16 *)buf)[1]); + break; + case SetHubFeature: + dbg_serhci_rh(" SetHubFeature\n"); + retval = -EPIPE; + break; + case SetPortFeature: + switch (wValue) { + case USB_PORT_FEAT_SUSPEND: + dbg_serhci_rh(" SetPortFeature: " + "USB_PORT_FEAT_SUSPEND\n"); + printk(KERN_ERR "%s: not yet\n", __func__); +#if 0 + dum->port_status[rhport] |= + (1 << USB_PORT_FEAT_SUSPEND); + if (dum->driver->suspend) { + spin_unlock(&dum->lock); + dum->driver->suspend(&dum->gadget); + spin_lock(&dum->lock); + } +#endif + break; + case USB_PORT_FEAT_RESET: + dbg_serhci_rh(" SetPortFeature: USB_PORT_FEAT_RESET\n"); + /* if it's already running, disconnect first */ + if (dum->port_status[rhport] & USB_PORT_STAT_ENABLE) { + dum->port_status[rhport] &= + ~(USB_PORT_STAT_ENABLE | + USB_PORT_STAT_LOW_SPEED | + USB_PORT_STAT_HIGH_SPEED); +#if 0 + if (dum->driver) { + dev_dbg(hardware, "disconnect\n"); + stop_activity(dum, dum->driver); + } +#endif + + /* FIXME test that code path! */ + } + /* 50msec reset signaling */ + dum->re_timeout = jiffies + msecs_to_jiffies(50); + + /* FALLTHROUGH */ + default: + dbg_serhci_rh(" SetPortFeature: default %d\n", wValue); + dum->port_status[rhport] |= (1 << wValue); + } + break; + + default: + printk(KERN_ERR "%s: default: no such request\n", __func__); + /* dev_dbg (hardware, + * "hub control req%04x v%04x i%04x l%d\n", + * typeReq, wValue, wIndex, wLength); */ + + /* "protocol stall" on error */ + retval = -EPIPE; + } + + if (dbg_flag_serhci_rh) { + printk(KERN_DEBUG "port %d\n", rhport); + dump_port_status(prev_port_status[rhport]); + dump_port_status(dum->port_status[rhport]); + } + dbg_serhci_rh(" bye\n"); + + spin_unlock_irqrestore(&dum->lock, flags); + + return retval; +} + + + +/*----------------------------------------------------------------------*/ + +static struct serhci_device *get_vdev(struct usb_device *udev) +{ + int i; + + if (!udev) + return NULL; + + for (i = 0; i < VHCI_NPORTS; i++) + if (the_controller->vdev[i].udev == udev) + return port_to_vdev(i); + + return NULL; +} + +static void serhci_tx_urb(struct urb *urb) +{ + struct serhci_device *vdev = get_vdev(urb->dev); + struct serhci_priv *priv; + unsigned long flag; + + if (!vdev) { + err("could not get virtual device"); + /* BUG(); */ + return; + } + + spin_lock_irqsave(&vdev->priv_lock, flag); + + priv = kzalloc(sizeof(struct serhci_priv), GFP_ATOMIC); + if (!priv) { + dev_err(&urb->dev->dev, "malloc serhci_priv\n"); + spin_unlock_irqrestore(&vdev->priv_lock, flag); + usbip_event_add(&vdev->ud, VDEV_EVENT_ERROR_MALLOC); + return; + } + + priv->seqnum = atomic_inc_return(&the_controller->seqnum); + if (priv->seqnum == 0xffff) + uinfo("seqnum max\n"); + + priv->vdev = vdev; + priv->urb = urb; + + urb->hcpriv = (void *) priv; + + + list_add_tail(&priv->list, &vdev->priv_tx); + + wake_up(&vdev->waitq_tx); + spin_unlock_irqrestore(&vdev->priv_lock, flag); +} + +static int serhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, + gfp_t mem_flags) +{ + struct device *dev = &urb->dev->dev; + int ret = 0; + unsigned long flags; + + dbg_serhci_hc("enter, usb_hcd %p urb %p mem_flags %d\n", + hcd, urb, mem_flags); + + /* patch to usb_sg_init() is in 2.5.60 */ + BUG_ON(!urb->transfer_buffer && urb->transfer_buffer_length); + + spin_lock_irqsave(&the_controller->lock, flags); + + /* check HC is active or not */ + if (!HC_IS_RUNNING(hcd->state)) { + dev_err(dev, "HC is not running\n"); + spin_unlock_irqrestore(&the_controller->lock, flags); + return -ENODEV; + } + + if (urb->status != -EINPROGRESS) { + dev_err(dev, "URB already unlinked!, status %d\n", urb->status); + spin_unlock_irqrestore(&the_controller->lock, flags); + return urb->status; + } + + ret = usb_hcd_link_urb_to_ep(hcd, urb); + if (ret) + goto no_need_unlink; + + /* + * The enumelation process is as follows; + * + * 1. Get_Descriptor request to DevAddrs(0) EndPoint(0) + * to get max packet length of default pipe + * + * 2. Set_Address request to DevAddr(0) EndPoint(0) + * + */ + + if (usb_pipedevice(urb->pipe) == 0) { + __u8 type = usb_pipetype(urb->pipe); + struct usb_ctrlrequest *ctrlreq = + (struct usb_ctrlrequest *) urb->setup_packet; + struct serhci_device *vdev = + port_to_vdev(the_controller->pending_port); + + if (type != PIPE_CONTROL || !ctrlreq) { + dev_err(dev, "invalid request to devnum 0\n"); + ret = EINVAL; + goto no_need_xmit; + } + + switch (ctrlreq->bRequest) { + case USB_REQ_SET_ADDRESS: + /* set_address may come when a device is reset */ + dev_info(dev, "SetAddress Request (%d) to port %d\n", + ctrlreq->wValue, vdev->rhport); + + vdev->udev = urb->dev; + + spin_lock(&vdev->ud.lock); + vdev->ud.status = VDEV_ST_USED; + spin_unlock(&vdev->ud.lock); + + if (urb->status == -EINPROGRESS) { + /* This request is successfully completed. */ + /* If not -EINPROGRESS, possibly unlinked. */ + urb->status = 0; + } + + goto no_need_xmit; + + case USB_REQ_GET_DESCRIPTOR: + if (ctrlreq->wValue == (USB_DT_DEVICE << 8)) + dbg_serhci_hc("Not yet?: " + "Get_Descriptor to device 0 " + "(get max pipe size)\n"); + + /* FIXME: reference count? (usb_get_dev()) */ + vdev->udev = urb->dev; + goto out; + + default: + /* NOT REACHED */ + dev_err(dev, "invalid request to devnum 0 bRequest %u, " + "wValue %u\n", ctrlreq->bRequest, + ctrlreq->wValue); + ret = -EINVAL; + goto no_need_xmit; + } + + } + +out: + serhci_tx_urb(urb); + + spin_unlock_irqrestore(&the_controller->lock, flags); + + return 0; + +no_need_xmit: + usb_hcd_unlink_urb_from_ep(hcd, urb); +no_need_unlink: + spin_unlock_irqrestore(&the_controller->lock, flags); + + usb_hcd_giveback_urb(serhci_to_hcd(the_controller), urb, urb->status); + + return 0; +} + +/* + * serhci_rx gives back the urb after receiving the reply of the urb. If an + * unlink pdu is sent or not, serhci_rx receives a normal return pdu and gives + * back its urb. For the driver unlinking the urb, the content of the urb is + * not important, but the calling to its completion handler is important; the + * completion of unlinking is notified by the completion handler. + * + * + * CLIENT SIDE + * + * - When serhci_hcd receives RET_SUBMIT, + * + * - case 1a). the urb of the pdu is not unlinking. + * - normal case + * => just give back the urb + * + * - case 1b). the urb of the pdu is unlinking. + * - usbip.ko will return a reply of the unlinking request. + * => give back the urb now and go to case 2b). + * + * - When serhci_hcd receives RET_UNLINK, + * + * - case 2a). a submit request is still pending in serhci_hcd. + * - urb was really pending in usbip.ko and urb_unlink_urb() was + * completed there. + * => free a pending submit request + * => notify unlink completeness by giving back the urb + * + * - case 2b). a submit request is *not* pending in serhci_hcd. + * - urb was already given back to the core driver. + * => do not give back the urb + * + * + * SERVER SIDE + * + * - When usbip receives CMD_UNLINK, + * + * - case 3a). the urb of the unlink request is now in submission. + * => do usb_unlink_urb(). + * => after the unlink is completed, send RET_UNLINK. + * + * - case 3b). the urb of the unlink request is not in submission. + * - may be already completed or never be received + * => send RET_UNLINK + * + */ +static int serhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) +{ + unsigned long flags; + struct serhci_priv *priv; + struct serhci_device *vdev; + + uinfo("serhci_hcd: dequeue a urb %p\n", urb); + + + spin_lock_irqsave(&the_controller->lock, flags); + + priv = urb->hcpriv; + if (!priv) { + /* URB was never linked! or will be soon given back by + * serhci_rx. */ + spin_unlock_irqrestore(&the_controller->lock, flags); + return 0; + } + + { + int ret = 0; + ret = usb_hcd_check_unlink_urb(hcd, urb, status); + if (ret) { + spin_unlock_irqrestore(&the_controller->lock, flags); + return 0; + } + } + + /* send unlink request here? */ + vdev = priv->vdev; + + if (!vdev->ud.tcp_socket) { + /* tcp connection is closed */ + unsigned long flags2; + + spin_lock_irqsave(&vdev->priv_lock, flags2); + + uinfo("serhci_hcd: device %p seems to be disconnected\n", vdev); + list_del(&priv->list); + kfree(priv); + urb->hcpriv = NULL; + + spin_unlock_irqrestore(&vdev->priv_lock, flags2); + + } else { + /* tcp connection is alive */ + unsigned long flags2; + struct serhci_unlink *unlink; + + spin_lock_irqsave(&vdev->priv_lock, flags2); + + /* setup CMD_UNLINK pdu */ + unlink = kzalloc(sizeof(struct serhci_unlink), GFP_ATOMIC); + if (!unlink) { + uerr("malloc serhci_unlink\n"); + spin_unlock_irqrestore(&vdev->priv_lock, flags2); + spin_unlock_irqrestore(&the_controller->lock, flags); + usbip_event_add(&vdev->ud, VDEV_EVENT_ERROR_MALLOC); + return -ENOMEM; + } + + unlink->seqnum = atomic_inc_return(&the_controller->seqnum); + if (unlink->seqnum == 0xffff) + uinfo("seqnum max\n"); + + unlink->unlink_seqnum = priv->seqnum; + + uinfo("serhci_hcd: device %p seems to be still connected\n", + vdev); + + /* send cmd_unlink and try to cancel the pending URB in the + * peer */ + list_add_tail(&unlink->list, &vdev->unlink_tx); + wake_up(&vdev->waitq_tx); + + spin_unlock_irqrestore(&vdev->priv_lock, flags2); + } + + + /* + * If tcp connection is alive, we have sent CMD_UNLINK. + * serhci_rx will receive RET_UNLINK and give back the URB. + * Otherwise, we give back it here. + */ + if (!vdev->ud.tcp_socket) { + /* tcp connection is closed */ + uinfo("serhci_hcd: serhci_urb_dequeue() gives back urb %p\n", urb); + + usb_hcd_unlink_urb_from_ep(hcd, urb); + + spin_unlock_irqrestore(&the_controller->lock, flags); + usb_hcd_giveback_urb(serhci_to_hcd(the_controller), urb, + urb->status); + spin_lock_irqsave(&the_controller->lock, flags); + } + + spin_unlock_irqrestore(&the_controller->lock, flags); + + dbg_serhci_hc("leave\n"); + return 0; +} + + +static void serhci_device_unlink_cleanup(struct serhci_device *vdev) +{ + struct serhci_unlink *unlink, *tmp; + + spin_lock(&vdev->priv_lock); + + list_for_each_entry_safe(unlink, tmp, &vdev->unlink_tx, list) { + list_del(&unlink->list); + kfree(unlink); + } + + list_for_each_entry_safe(unlink, tmp, &vdev->unlink_rx, list) { + list_del(&unlink->list); + kfree(unlink); + } + + spin_unlock(&vdev->priv_lock); +} + +/* + * The important thing is that only one context begins cleanup. + * This is why error handling and cleanup become simple. + * We do not want to consider race condition as possible. + */ +static void serhci_shutdown_connection(struct usbip_device *ud) +{ + struct serhci_device *vdev = container_of(ud, struct serhci_device, ud); + + /* need this? see stub_dev.c */ + if (ud->tcp_socket) { + udbg("shutdown tcp_socket %p\n", ud->tcp_socket); + kernel_sock_shutdown(ud->tcp_socket, SHUT_RDWR); + } + + usbip_stop_threads(&vdev->ud); + uinfo("stop threads\n"); + + /* active connection is closed */ + if (vdev->ud.tcp_socket != NULL) { + sock_release(vdev->ud.tcp_socket); + vdev->ud.tcp_socket = NULL; + } + uinfo("release socket\n"); + + serhci_device_unlink_cleanup(vdev); + + /* + * rh_port_disconnect() is a trigger of ... + * usb_disable_device(): + * disable all the endpoints for a USB device. + * usb_disable_endpoint(): + * disable endpoints. pending urbs are unlinked(dequeued). + * + * NOTE: After calling rh_port_disconnect(), the USB device drivers of a + * deteched device should release used urbs in a cleanup function(i.e. + * xxx_disconnect()). Therefore, serhci_hcd does not need to release + * pushed urbs and their private data in this function. + * + * NOTE: serhci_dequeue() must be considered carefully. When shutdowning + * a connection, serhci_shutdown_connection() expects serhci_dequeue() + * gives back pushed urbs and frees their private data by request of + * the cleanup function of a USB driver. When unlinking a urb with an + * active connection, serhci_dequeue() does not give back the urb which + * is actually given back by serhci_rx after receiving its return pdu. + * + */ + rh_port_disconnect(vdev->rhport); + + uinfo("disconnect device\n"); +} + + +static void serhci_device_reset(struct usbip_device *ud) +{ + struct serhci_device *vdev = container_of(ud, struct serhci_device, ud); + + spin_lock(&ud->lock); + + vdev->speed = 0; + vdev->devid = 0; + + ud->tcp_socket = NULL; + + ud->status = VDEV_ST_NULL; + + spin_unlock(&ud->lock); +} + +static void serhci_device_unusable(struct usbip_device *ud) +{ + spin_lock(&ud->lock); + + ud->status = VDEV_ST_ERROR; + + spin_unlock(&ud->lock); +} + +static void serhci_device_init(struct serhci_device *vdev) +{ + memset(vdev, 0, sizeof(*vdev)); + + usbip_task_init(&vdev->ud.tcp_rx, "serhci_rx", serhci_rx_loop); + usbip_task_init(&vdev->ud.tcp_tx, "serhci_tx", serhci_tx_loop); + + vdev->ud.side = USBIP_VHCI; + vdev->ud.status = VDEV_ST_NULL; + /* vdev->ud.lock = SPIN_LOCK_UNLOCKED; */ + spin_lock_init(&vdev->ud.lock); + + INIT_LIST_HEAD(&vdev->priv_rx); + INIT_LIST_HEAD(&vdev->priv_tx); + INIT_LIST_HEAD(&vdev->unlink_tx); + INIT_LIST_HEAD(&vdev->unlink_rx); + /* vdev->priv_lock = SPIN_LOCK_UNLOCKED; */ + spin_lock_init(&vdev->priv_lock); + + init_waitqueue_head(&vdev->waitq_tx); + + vdev->ud.eh_ops.shutdown = serhci_shutdown_connection; + vdev->ud.eh_ops.reset = serhci_device_reset; + vdev->ud.eh_ops.unusable = serhci_device_unusable; + + usbip_start_eh(&vdev->ud); +} + + +/*----------------------------------------------------------------------*/ + +static int serhci_start(struct usb_hcd *hcd) +{ + struct serhci_hcd *serhci = hcd_to_serhci(hcd); + int rhport; + int err = 0; + + dbg_serhci_hc("enter serhci_start\n"); + + + /* initialize private data of usb_hcd */ + + for (rhport = 0; rhport < VHCI_NPORTS; rhport++) { + struct serhci_device *vdev = &serhci->vdev[rhport]; + serhci_device_init(vdev); + vdev->rhport = rhport; + } + + atomic_set(&serhci->seqnum, 0); + spin_lock_init(&serhci->lock); + + + + hcd->power_budget = 0; /* no limit */ + hcd->state = HC_STATE_RUNNING; + hcd->uses_new_polling = 1; + + + /* serhci_hcd is now ready to be controlled through sysfs */ + err = sysfs_create_group(&serhci_dev(serhci)->kobj, &dev_attr_group); + if (err) { + uerr("create sysfs files\n"); + return err; + } + + return 0; +} + +static void serhci_stop(struct usb_hcd *hcd) +{ + struct serhci_hcd *serhci = hcd_to_serhci(hcd); + int rhport = 0; + + dbg_serhci_hc("stop VHCI controller\n"); + + + /* 1. remove the userland interface of serhci_hcd */ + sysfs_remove_group(&serhci_dev(serhci)->kobj, &dev_attr_group); + + /* 2. shutdown all the ports of serhci_hcd */ + for (rhport = 0 ; rhport < VHCI_NPORTS; rhport++) { + struct serhci_device *vdev = &serhci->vdev[rhport]; + + usbip_event_add(&vdev->ud, VDEV_EVENT_REMOVED); + usbip_stop_eh(&vdev->ud); + } + + + uinfo("serhci_stop done\n"); +} + +/*----------------------------------------------------------------------*/ + +static int serhci_get_frame_number(struct usb_hcd *hcd) +{ + uerr("Not yet implemented\n"); + return 0; +} + + +#ifdef CONFIG_PM + +/* FIXME: suspend/resume */ +static int serhci_bus_suspend(struct usb_hcd *hcd) +{ + struct serhci_hcd *serhci = hcd_to_serhci(hcd); + + dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__); + + spin_lock_irq(&serhci->lock); + /* serhci->rh_state = DUMMY_RH_SUSPENDED; + * set_link_state(serhci); */ + hcd->state = HC_STATE_SUSPENDED; + spin_unlock_irq(&serhci->lock); + + return 0; +} + +static int serhci_bus_resume(struct usb_hcd *hcd) +{ + struct serhci_hcd *serhci = hcd_to_serhci(hcd); + int rc = 0; + + dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__); + + spin_lock_irq(&serhci->lock); + if (!test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags)) { + rc = -ESHUTDOWN; + } else { + /* serhci->rh_state = DUMMY_RH_RUNNING; + * set_link_state(serhci); + * if (!list_empty(&serhci->urbp_list)) + * mod_timer(&serhci->timer, jiffies); */ + hcd->state = HC_STATE_RUNNING; + } + spin_unlock_irq(&serhci->lock); + return rc; + + return 0; +} + +#else + +#define serhci_bus_suspend NULL +#define serhci_bus_resume NULL +#endif + + + +static struct hc_driver serhci_hc_driver = { + .description = driver_name, + .product_desc = driver_desc, + .hcd_priv_size = sizeof(struct serhci_hcd), + + .flags = HCD_USB2, + + .start = serhci_start, + .stop = serhci_stop, + + .urb_enqueue = serhci_urb_enqueue, + .urb_dequeue = serhci_urb_dequeue, + + .get_frame_number = serhci_get_frame_number, + + .hub_status_data = serhci_hub_status, + .hub_control = serhci_hub_control, + .bus_suspend = serhci_bus_suspend, + .bus_resume = serhci_bus_resume, +}; + +static int serhci_hcd_probe(struct platform_device *pdev) +{ + struct usb_hcd *hcd; + int ret; + + uinfo("proving...\n"); + + dbg_serhci_hc("name %s id %d\n", pdev->name, pdev->id); + + /* will be removed */ + if (pdev->dev.dma_mask) { + dev_info(&pdev->dev, "serhci_hcd DMA not supported\n"); + return -EINVAL; + } + + /* + * Allocate and initialize hcd. + * Our private data is also allocated automatically. + */ + hcd = usb_create_hcd(&serhci_hc_driver, &pdev->dev, pdev->dev.bus_id); + if (!hcd) { + uerr("create hcd failed\n"); + return -ENOMEM; + } + + + /* this is private data for serhci_hcd */ + the_controller = hcd_to_serhci(hcd); + + /* + * Finish generic HCD structure initialization and register. + * Call the driver's reset() and start() routines. + */ + ret = usb_add_hcd(hcd, 0, 0); + if (ret != 0) { + uerr("usb_add_hcd failed %d\n", ret); + usb_put_hcd(hcd); + the_controller = NULL; + return ret; + } + + + dbg_serhci_hc("bye\n"); + return 0; +} + + +static int serhci_hcd_remove(struct platform_device *pdev) +{ + struct usb_hcd *hcd; + + hcd = platform_get_drvdata(pdev); + if (!hcd) + return 0; + + /* + * Disconnects the root hub, + * then reverses the effects of usb_add_hcd(), + * invoking the HCD's stop() methods. + */ + usb_remove_hcd(hcd); + usb_put_hcd(hcd); + the_controller = NULL; + + + return 0; +} + + + +#ifdef CONFIG_PM + +/* what should happen for USB/IP under suspend/resume? */ +static int serhci_hcd_suspend(struct platform_device *pdev, pm_message_t state) +{ + struct usb_hcd *hcd; + int rhport = 0; + int connected = 0; + int ret = 0; + + dev_dbg(&pdev->dev, "%s\n", __func__); + + hcd = platform_get_drvdata(pdev); + + spin_lock(&the_controller->lock); + + for (rhport = 0; rhport < VHCI_NPORTS; rhport++) + if (the_controller->port_status[rhport] & + USB_PORT_STAT_CONNECTION) + connected += 1; + + spin_unlock(&the_controller->lock); + + if (connected > 0) { + uinfo("We have %d active connection%s. Do not suspend.\n", + connected, (connected == 1 ? "" : "s")); + ret = -EBUSY; + } else { + uinfo("suspend serhci_hcd"); + clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); + } + + return ret; +} + +static int serhci_hcd_resume(struct platform_device *pdev) +{ + struct usb_hcd *hcd; + + dev_dbg(&pdev->dev, "%s\n", __func__); + + hcd = platform_get_drvdata(pdev); + set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); + usb_hcd_poll_rh_status(hcd); + + return 0; +} + +#else + +#define serhci_hcd_suspend NULL +#define serhci_hcd_resume NULL + +#endif + + +static struct platform_driver serhci_driver = { + .probe = serhci_hcd_probe, + .remove = __devexit_p(serhci_hcd_remove), + .suspend = serhci_hcd_suspend, + .resume = serhci_hcd_resume, + .driver = { + .name = (char *) driver_name, + .owner = THIS_MODULE, + }, +}; + +/*----------------------------------------------------------------------*/ + +/* + * The VHCI 'device' is 'virtual'; not a real plug&play hardware. + * We need to add this virtual device as a platform device arbitrarily: + * 1. platform_device_register() + */ +static void the_pdev_release(struct device *dev) +{ + return; +} + +static struct platform_device the_pdev = { + /* should be the same name as driver_name */ + .name = (char *) driver_name, + .id = -1, + .dev = { + /* .driver = &serhci_driver, */ + .release = the_pdev_release, + }, +}; + +static int __init serhci_init(void) +{ + int ret; + + dbg_serhci_hc("enter\n"); + if (usb_disabled()) + return -ENODEV; + + printk(KERN_INFO KBUILD_MODNAME ": %s, %s\n", driver_name, + DRIVER_VERSION); + + ret = platform_driver_register(&serhci_driver); + if (ret < 0) + goto err_driver_register; + + ret = platform_device_register(&the_pdev); + if (ret < 0) + goto err_platform_device_register; + + dbg_serhci_hc("bye\n"); + return ret; + + /* error occurred */ +err_platform_device_register: + platform_driver_unregister(&serhci_driver); + +err_driver_register: + dbg_serhci_hc("bye\n"); + return ret; +} +module_init(serhci_init); + +static void __exit serhci_cleanup(void) +{ + dbg_serhci_hc("enter\n"); + + platform_device_unregister(&the_pdev); + platform_driver_unregister(&serhci_driver); + + dbg_serhci_hc("bye\n"); +} +module_exit(serhci_cleanup); diff --git a/modules/hp2101nw/src/serhci_rx.c b/modules/hp2101nw/src/serhci_rx.c new file mode 100644 index 0000000..6033923 --- /dev/null +++ b/modules/hp2101nw/src/serhci_rx.c @@ -0,0 +1,251 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include "serhci_common.h" +#include "serhci.h" + + +/* get URB from transmitted urb queue */ +static struct urb *pickup_urb_and_free_priv(struct serhci_device *vdev, + __u32 seqnum) +{ + struct serhci_priv *priv, *tmp; + struct urb *urb = NULL; + int status; + + spin_lock(&vdev->priv_lock); + + list_for_each_entry_safe(priv, tmp, &vdev->priv_rx, list) { + if (priv->seqnum == seqnum) { + urb = priv->urb; + status = urb->status; + + dbg_serhci_rx("find urb %p vurb %p seqnum %u\n", + urb, priv, seqnum); + + /* TODO: fix logic here to improve indent situtation */ + if (status != -EINPROGRESS) { + if (status == -ENOENT || + status == -ECONNRESET) + dev_info(&urb->dev->dev, + "urb %p was unlinked " + "%ssynchronuously.\n", urb, + status == -ENOENT ? "" : "a"); + else + dev_info(&urb->dev->dev, + "urb %p may be in a error, " + "status %d\n", urb, status); + } + + list_del(&priv->list); + kfree(priv); + urb->hcpriv = NULL; + + break; + } + } + + spin_unlock(&vdev->priv_lock); + + return urb; +} + +static void serhci_recv_ret_submit(struct serhci_device *vdev, + struct usbip_header *pdu) +{ + struct usbip_device *ud = &vdev->ud; + struct urb *urb; + + + urb = pickup_urb_and_free_priv(vdev, pdu->base.seqnum); + + + if (!urb) { + uerr("cannot find a urb of seqnum %u\n", pdu->base.seqnum); + uinfo("max seqnum %d\n", atomic_read(&the_controller->seqnum)); + usbip_event_add(ud, VDEV_EVENT_ERROR_TCP); + return; + } + + + /* unpack the pdu to a urb */ + usbip_pack_pdu(pdu, urb, USBIP_RET_SUBMIT, 0); + + + /* recv transfer buffer */ + if (usbip_recv_xbuff(ud, urb) < 0) + return; + + + /* recv iso_packet_descriptor */ + if (usbip_recv_iso(ud, urb) < 0) + return; + + + if (dbg_flag_serhci_rx) + usbip_dump_urb(urb); + + + dbg_serhci_rx("now giveback urb %p\n", urb); + + spin_lock(&the_controller->lock); + usb_hcd_unlink_urb_from_ep(serhci_to_hcd(the_controller), urb); + spin_unlock(&the_controller->lock); + + usb_hcd_giveback_urb(serhci_to_hcd(the_controller), urb, urb->status); + + + dbg_serhci_rx("Leave\n"); + + return; +} + + +static struct serhci_unlink *dequeue_pending_unlink(struct serhci_device *vdev, + struct usbip_header *pdu) +{ + struct serhci_unlink *unlink, *tmp; + + spin_lock(&vdev->priv_lock); + + list_for_each_entry_safe(unlink, tmp, &vdev->unlink_rx, list) { + uinfo("unlink->seqnum %lu\n", unlink->seqnum); + if (unlink->seqnum == pdu->base.seqnum) { + dbg_serhci_rx("found pending unlink, %lu\n", + unlink->seqnum); + list_del(&unlink->list); + + spin_unlock(&vdev->priv_lock); + return unlink; + } + } + + spin_unlock(&vdev->priv_lock); + + return NULL; +} + + +static void serhci_recv_ret_unlink(struct serhci_device *vdev, + struct usbip_header *pdu) +{ + struct serhci_unlink *unlink; + struct urb *urb; + + usbip_dump_header(pdu); + + unlink = dequeue_pending_unlink(vdev, pdu); + if (!unlink) { + uinfo("cannot find the pending unlink %u\n", pdu->base.seqnum); + return; + } + + urb = pickup_urb_and_free_priv(vdev, unlink->unlink_seqnum); + if (!urb) { + /* + * I get the result of a unlink request. But, it seems that I + * already received the result of its submit result and gave + * back the URB. + */ + uinfo("the urb (seqnum %d) was already given backed\n", + pdu->base.seqnum); + } else { + dbg_serhci_rx("now giveback urb %p\n", urb); + + /* If unlink is succeed, status is -ECONNRESET */ + urb->status = pdu->u.ret_unlink.status; + uinfo("%d\n", urb->status); + + spin_lock(&the_controller->lock); + usb_hcd_unlink_urb_from_ep(serhci_to_hcd(the_controller), urb); + spin_unlock(&the_controller->lock); + + usb_hcd_giveback_urb(serhci_to_hcd(the_controller), urb, + urb->status); + } + + kfree(unlink); + + return; +} + +/* recv a pdu */ +static void serhci_rx_pdu(struct usbip_device *ud) +{ + int ret; + struct usbip_header pdu; + struct serhci_device *vdev = container_of(ud, struct serhci_device, ud); + + + dbg_serhci_rx("Enter\n"); + + memset(&pdu, 0, sizeof(pdu)); + + + /* 1. receive a pdu header */ + ret = usbip_xmit(0, ud->tcp_socket, (char *) &pdu, sizeof(pdu), 0); + if (ret != sizeof(pdu)) { + uerr("receiving pdu failed! size is %d, should be %d\n", + ret, (unsigned int)sizeof(pdu)); + usbip_event_add(ud, VDEV_EVENT_ERROR_TCP); + return; + } + + usbip_header_correct_endian(&pdu, 0); + + if (dbg_flag_serhci_rx) + usbip_dump_header(&pdu); + + switch (pdu.base.command) { + case USBIP_RET_SUBMIT: + serhci_recv_ret_submit(vdev, &pdu); + break; + case USBIP_RET_UNLINK: + serhci_recv_ret_unlink(vdev, &pdu); + break; + default: + /* NOTREACHED */ + uerr("unknown pdu %u\n", pdu.base.command); + usbip_dump_header(&pdu); + usbip_event_add(ud, VDEV_EVENT_ERROR_TCP); + } +} + + +/*-------------------------------------------------------------------------*/ + +void serhci_rx_loop(struct usbip_task *ut) +{ + struct usbip_device *ud = container_of(ut, struct usbip_device, tcp_rx); + + + while (1) { + if (signal_pending(current)) { + dbg_serhci_rx("signal catched!\n"); + break; + } + + + if (usbip_event_happend(ud)) + break; + + serhci_rx_pdu(ud); + } +} + diff --git a/modules/hp2101nw/src/serhci_sysfs.c b/modules/hp2101nw/src/serhci_sysfs.c new file mode 100644 index 0000000..0ed70f2 --- /dev/null +++ b/modules/hp2101nw/src/serhci_sysfs.c @@ -0,0 +1,250 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include "serhci_common.h" +#include "serhci.h" + +#include <linux/in.h> + +/* TODO: refine locking ?*/ + +/* Sysfs entry to show port status */ +static ssize_t show_status(struct device *dev, struct device_attribute *attr, + char *out) +{ + char *s = out; + int i = 0; + + if (!the_controller || !out) + BUG(); + + spin_lock(&the_controller->lock); + + /* + * output example: + * prt sta spd dev socket local_busid + * 000 004 000 000 c5a7bb80 1-2.3 + * 001 004 000 000 d8cee980 2-3.4 + * + * IP address can be retrieved from a socket pointer address by looking + * up /proc/net/{tcp,tcp6}. Also, a userland program may remember a + * port number and its peer IP address. + */ + out += sprintf(out, "prt sta spd bus dev socket " + "local_busid\n"); + + for (i = 0; i < VHCI_NPORTS; i++) { + struct serhci_device *vdev = port_to_vdev(i); + + spin_lock(&vdev->ud.lock); + + out += sprintf(out, "%03u %03u ", i, vdev->ud.status); + + if (vdev->ud.status == VDEV_ST_USED) { + out += sprintf(out, "%03u %08x ", + vdev->speed, vdev->devid); + out += sprintf(out, "%16p ", vdev->ud.tcp_socket); + out += sprintf(out, "%s", vdev->udev->dev.bus_id); + + } else + out += sprintf(out, "000 000 000 0000000000000000 0-0"); + + out += sprintf(out, "\n"); + + spin_unlock(&vdev->ud.lock); + } + + spin_unlock(&the_controller->lock); + + return out - s; +} +static DEVICE_ATTR(status, S_IRUGO, show_status, NULL); + +/* Sysfs entry to shutdown a virtual connection */ +static int serhci_port_disconnect(__u32 rhport) +{ + struct serhci_device *vdev; + + dbg_serhci_sysfs("enter\n"); + + /* lock */ + spin_lock(&the_controller->lock); + + vdev = port_to_vdev(rhport); + + spin_lock(&vdev->ud.lock); + if (vdev->ud.status == VDEV_ST_NULL) { + uerr("not connected %d\n", vdev->ud.status); + + /* unlock */ + spin_unlock(&vdev->ud.lock); + spin_unlock(&the_controller->lock); + + return -EINVAL; + } + + /* unlock */ + spin_unlock(&vdev->ud.lock); + spin_unlock(&the_controller->lock); + + usbip_event_add(&vdev->ud, VDEV_EVENT_DOWN); + + return 0; +} + +static ssize_t store_detach(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + int err; + __u32 rhport = 0; + + sscanf(buf, "%u", &rhport); + + /* check rhport */ + if (rhport >= VHCI_NPORTS) { + uerr("invalid port %u\n", rhport); + return -EINVAL; + } + + err = serhci_port_disconnect(rhport); + if (err < 0) + return -EINVAL; + + dbg_serhci_sysfs("Leave\n"); + return count; +} +static DEVICE_ATTR(detach, S_IWUSR, NULL, store_detach); + +/* Sysfs entry to establish a virtual connection */ +static int valid_args(__u32 rhport, enum usb_device_speed speed) +{ + /* check rhport */ + if ((rhport < 0) || (rhport >= VHCI_NPORTS)) { + uerr("port %u\n", rhport); + return -EINVAL; + } + + /* check speed */ + switch (speed) { + case USB_SPEED_LOW: + case USB_SPEED_FULL: + case USB_SPEED_HIGH: + case USB_SPEED_VARIABLE: + break; + default: + uerr("speed %d\n", speed); + return -EINVAL; + } + + return 0; +} + +/* + * To start a new USB/IP attachment, a userland program needs to setup a TCP + * connection and then write its socket descriptor with remote device + * information into this sysfs file. + * + * A remote device is virtually attached to the root-hub port of @rhport with + * @speed. @devid is embedded into a request to specify the remote device in a + * server host. + * + * write() returns 0 on success, else negative errno. + */ +static ssize_t store_attach(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + struct serhci_device *vdev; + struct socket *socket; + int sockfd = 0; + __u32 rhport = 0, devid = 0, speed = 0; + + /* + * @rhport: port number of serhci_hcd + * @sockfd: socket descriptor of an established TCP connection + * @devid: unique device identifier in a remote host + * @speed: usb device speed in a remote host + */ + sscanf(buf, "%u %u %u %u", &rhport, &sockfd, &devid, &speed); + + dbg_serhci_sysfs("rhport(%u) sockfd(%u) devid(%u) speed(%u)\n", + rhport, sockfd, devid, speed); + + + /* check received parameters */ + if (valid_args(rhport, speed) < 0) + return -EINVAL; + + /* check sockfd */ + socket = sockfd_to_socket(sockfd); + if (!socket) + return -EINVAL; + + /* now need lock until setting vdev status as used */ + + /* begin a lock */ + spin_lock(&the_controller->lock); + + vdev = port_to_vdev(rhport); + + spin_lock(&vdev->ud.lock); + + if (vdev->ud.status != VDEV_ST_NULL) { + /* end of the lock */ + spin_unlock(&vdev->ud.lock); + spin_unlock(&the_controller->lock); + + uerr("port %d already used\n", rhport); + return -EINVAL; + } + + uinfo("rhport(%u) sockfd(%d) devid(%u) speed(%u)\n", + rhport, sockfd, devid, speed); + + vdev->devid = devid; + vdev->speed = speed; + vdev->ud.tcp_socket = socket; + vdev->ud.status = VDEV_ST_NOTASSIGNED; + + spin_unlock(&vdev->ud.lock); + spin_unlock(&the_controller->lock); + /* end the lock */ + + /* + * this function will sleep, so should be out of the lock. but, it's ok + * because we already marked vdev as being used. really? + */ + usbip_start_threads(&vdev->ud); + + rh_port_connect(rhport, speed); + + return count; +} +static DEVICE_ATTR(attach, S_IWUSR, NULL, store_attach); + +static struct attribute *dev_attrs[] = { + &dev_attr_status.attr, + &dev_attr_detach.attr, + &dev_attr_attach.attr, + &dev_attr_usbip_debug.attr, + NULL, +}; + +struct attribute_group dev_attr_group = { + .attrs = dev_attrs, +}; diff --git a/modules/hp2101nw/src/serhci_tx.c b/modules/hp2101nw/src/serhci_tx.c new file mode 100644 index 0000000..900ff2a --- /dev/null +++ b/modules/hp2101nw/src/serhci_tx.c @@ -0,0 +1,239 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include "serhci_common.h" +#include "serhci.h" + + +static void setup_cmd_submit_pdu(struct usbip_header *pdup, struct urb *urb) +{ + struct serhci_priv *priv = ((struct serhci_priv *)urb->hcpriv); + struct serhci_device *vdev = priv->vdev; + + dbg_serhci_tx("URB, local devnum %u, remote devid %u\n", + usb_pipedevice(urb->pipe), vdev->devid); + + pdup->base.command = USBIP_CMD_SUBMIT; + pdup->base.seqnum = priv->seqnum; + pdup->base.devid = vdev->devid; + if (usb_pipein(urb->pipe)) + pdup->base.direction = USBIP_DIR_IN; + else + pdup->base.direction = USBIP_DIR_OUT; + pdup->base.ep = usb_pipeendpoint(urb->pipe); + + usbip_pack_pdu(pdup, urb, USBIP_CMD_SUBMIT, 1); + + if (urb->setup_packet) + memcpy(pdup->u.cmd_submit.setup, urb->setup_packet, 8); +} + +static struct serhci_priv *dequeue_from_priv_tx(struct serhci_device *vdev) +{ + unsigned long flags; + struct serhci_priv *priv, *tmp; + + spin_lock_irqsave(&vdev->priv_lock, flags); + + list_for_each_entry_safe(priv, tmp, &vdev->priv_tx, list) { + list_move_tail(&priv->list, &vdev->priv_rx); + spin_unlock_irqrestore(&vdev->priv_lock, flags); + return priv; + } + + spin_unlock_irqrestore(&vdev->priv_lock, flags); + + return NULL; +} + + + +static int serhci_send_cmd_submit(struct serhci_device *vdev) +{ + struct serhci_priv *priv = NULL; + + struct msghdr msg; + struct kvec iov[3]; + size_t txsize; + + size_t total_size = 0; + + while ((priv = dequeue_from_priv_tx(vdev)) != NULL) { + int ret; + struct urb *urb = priv->urb; + struct usbip_header pdu_header; + void *iso_buffer = NULL; + + txsize = 0; + memset(&pdu_header, 0, sizeof(pdu_header)); + memset(&msg, 0, sizeof(msg)); + memset(&iov, 0, sizeof(iov)); + + dbg_serhci_tx("setup txdata urb %p\n", urb); + + + /* 1. setup usbip_header */ + setup_cmd_submit_pdu(&pdu_header, urb); + usbip_header_correct_endian(&pdu_header, 1); + + iov[0].iov_base = &pdu_header; + iov[0].iov_len = sizeof(pdu_header); + txsize += sizeof(pdu_header); + + /* 2. setup transfer buffer */ + if (!usb_pipein(urb->pipe) && urb->transfer_buffer_length > 0) { + iov[1].iov_base = urb->transfer_buffer; + iov[1].iov_len = urb->transfer_buffer_length; + txsize += urb->transfer_buffer_length; + } + + /* 3. setup iso_packet_descriptor */ + if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) { + ssize_t len = 0; + + iso_buffer = usbip_alloc_iso_desc_pdu(urb, &len); + if (!iso_buffer) { + usbip_event_add(&vdev->ud, + SDEV_EVENT_ERROR_MALLOC); + return -1; + } + + iov[2].iov_base = iso_buffer; + iov[2].iov_len = len; + txsize += len; + } + + ret = kernel_sendmsg(vdev->ud.tcp_socket, &msg, iov, 3, txsize); + if (ret != txsize) { + uerr("sendmsg failed!, retval %d for %zd\n", ret, + txsize); + kfree(iso_buffer); + usbip_event_add(&vdev->ud, VDEV_EVENT_ERROR_TCP); + return -1; + } + + kfree(iso_buffer); + dbg_serhci_tx("send txdata\n"); + + total_size += txsize; + } + + return total_size; +} + + +/*-------------------------------------------------------------------------*/ + +static struct serhci_unlink *dequeue_from_unlink_tx(struct serhci_device *vdev) +{ + unsigned long flags; + struct serhci_unlink *unlink, *tmp; + + spin_lock_irqsave(&vdev->priv_lock, flags); + + list_for_each_entry_safe(unlink, tmp, &vdev->unlink_tx, list) { + list_move_tail(&unlink->list, &vdev->unlink_rx); + spin_unlock_irqrestore(&vdev->priv_lock, flags); + return unlink; + } + + spin_unlock_irqrestore(&vdev->priv_lock, flags); + + return NULL; +} + +static int serhci_send_cmd_unlink(struct serhci_device *vdev) +{ + struct serhci_unlink *unlink = NULL; + + struct msghdr msg; + struct kvec iov[3]; + size_t txsize; + + size_t total_size = 0; + + while ((unlink = dequeue_from_unlink_tx(vdev)) != NULL) { + int ret; + struct usbip_header pdu_header; + + txsize = 0; + memset(&pdu_header, 0, sizeof(pdu_header)); + memset(&msg, 0, sizeof(msg)); + memset(&iov, 0, sizeof(iov)); + + dbg_serhci_tx("setup cmd unlink, %lu \n", unlink->seqnum); + + + /* 1. setup usbip_header */ + pdu_header.base.command = USBIP_CMD_UNLINK; + pdu_header.base.seqnum = unlink->seqnum; + pdu_header.base.devid = vdev->devid; + pdu_header.base.ep = 0; + pdu_header.u.cmd_unlink.seqnum = unlink->unlink_seqnum; + + usbip_header_correct_endian(&pdu_header, 1); + + iov[0].iov_base = &pdu_header; + iov[0].iov_len = sizeof(pdu_header); + txsize += sizeof(pdu_header); + + ret = kernel_sendmsg(vdev->ud.tcp_socket, &msg, iov, 1, txsize); + if (ret != txsize) { + uerr("sendmsg failed!, retval %d for %zd\n", ret, + txsize); + usbip_event_add(&vdev->ud, VDEV_EVENT_ERROR_TCP); + return -1; + } + + + dbg_serhci_tx("send txdata\n"); + + total_size += txsize; + } + + return total_size; +} + + +/*-------------------------------------------------------------------------*/ + +void serhci_tx_loop(struct usbip_task *ut) +{ + struct usbip_device *ud = container_of(ut, struct usbip_device, tcp_tx); + struct serhci_device *vdev = container_of(ud, struct serhci_device, ud); + + while (1) { + if (signal_pending(current)) { + uinfo("serhci_tx signal catched\n"); + break; + } + + if (serhci_send_cmd_submit(vdev) < 0) + break; + + if (serhci_send_cmd_unlink(vdev) < 0) + break; + + wait_event_interruptible(vdev->waitq_tx, + (!list_empty(&vdev->priv_tx) || + !list_empty(&vdev->unlink_tx))); + + dbg_serhci_tx("pending urbs ?, now wake up\n"); + } +} diff --git a/modules/hp2101nw/src/unused/stub.h b/modules/hp2101nw/src/unused/stub.h new file mode 100644 index 0000000..f541a3a --- /dev/null +++ b/modules/hp2101nw/src/unused/stub.h @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include <linux/kernel.h> +#include <linux/list.h> +#include <linux/spinlock.h> +#include <linux/slab.h> +#include <linux/string.h> +#include <linux/module.h> +#include <linux/net.h> + +struct stub_device { + struct usb_interface *interface; + struct list_head list; + + struct usbip_device ud; + __u32 devid; + + /* + * stub_priv preserves private data of each urb. + * It is allocated as stub_priv_cache and assigned to urb->context. + * + * stub_priv is always linked to any one of 3 lists; + * priv_init: linked to this until the comletion of a urb. + * priv_tx : linked to this after the completion of a urb. + * priv_free: linked to this after the sending of the result. + * + * Any of these list operations should be locked by priv_lock. + */ + spinlock_t priv_lock; + struct list_head priv_init; + struct list_head priv_tx; + struct list_head priv_free; + + /* see comments for unlinking in stub_rx.c */ + struct list_head unlink_tx; + struct list_head unlink_free; + + + wait_queue_head_t tx_waitq; +}; + +/* private data into urb->priv */ +struct stub_priv { + unsigned long seqnum; + struct list_head list; + struct stub_device *sdev; + struct urb *urb; + + int unlinking; +}; + +struct stub_unlink { + unsigned long seqnum; + struct list_head list; + __u32 status; +}; + + +extern struct kmem_cache *stub_priv_cache; + + +/*-------------------------------------------------------------------------*/ +/* prototype declarations */ + +/* stub_tx.c */ +void stub_complete(struct urb *); +void stub_tx_loop(struct usbip_task *); + +/* stub_dev.c */ +extern struct usb_driver stub_driver; + +/* stub_rx.c */ +void stub_rx_loop(struct usbip_task *); +void stub_enqueue_ret_unlink(struct stub_device *, __u32, __u32); + +/* stub_main.c */ +int match_busid(char *busid); +void stub_device_cleanup_urbs(struct stub_device *sdev); diff --git a/modules/hp2101nw/src/unused/stub_dev.c b/modules/hp2101nw/src/unused/stub_dev.c new file mode 100644 index 0000000..ee455a0 --- /dev/null +++ b/modules/hp2101nw/src/unused/stub_dev.c @@ -0,0 +1,483 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include "usbip_common.h" +#include "stub.h" + + + +static int stub_probe(struct usb_interface *interface, + const struct usb_device_id *id); +static void stub_disconnect(struct usb_interface *interface); + + +/* + * Define device IDs here if you want to explicitly limit exportable devices. + * In the most cases, wild card matching will be ok because driver binding can + * be changed dynamically by a userland program. + */ +static struct usb_device_id stub_table[] = { +#if 0 + /* just an example */ + { USB_DEVICE(0x05ac, 0x0301) }, /* Mac 1 button mouse */ + { USB_DEVICE(0x0430, 0x0009) }, /* Plat Home Keyboard */ + { USB_DEVICE(0x059b, 0x0001) }, /* Iomega USB Zip 100 */ + { USB_DEVICE(0x04b3, 0x4427) }, /* IBM USB CD-ROM */ + { USB_DEVICE(0x05a9, 0xa511) }, /* LifeView USB cam */ + { USB_DEVICE(0x55aa, 0x0201) }, /* Imation card reader */ + { USB_DEVICE(0x046d, 0x0870) }, /* Qcam Express(QV-30) */ + { USB_DEVICE(0x04bb, 0x0101) }, /* IO-DATA HD 120GB */ + { USB_DEVICE(0x04bb, 0x0904) }, /* IO-DATA USB-ET/TX */ + { USB_DEVICE(0x04bb, 0x0201) }, /* IO-DATA USB-ET/TX */ + { USB_DEVICE(0x08bb, 0x2702) }, /* ONKYO USB Speaker */ + { USB_DEVICE(0x046d, 0x08b2) }, /* Logicool Qcam 4000 Pro */ +#endif + /* magic for wild card */ + { .driver_info = 1 }, + { 0, } /* Terminating entry */ +}; +MODULE_DEVICE_TABLE(usb, stub_table); + +struct usb_driver stub_driver = { + .name = "usbip", + .probe = stub_probe, + .disconnect = stub_disconnect, + .id_table = stub_table, +}; + + +/*-------------------------------------------------------------------------*/ + +/* Define sysfs entries for a usbip-bound device */ + + +/* + * usbip_status shows status of usbip as long as this driver is bound to the + * target device. + */ +static ssize_t show_status(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct stub_device *sdev = dev_get_drvdata(dev); + int status; + + if (!sdev) { + dev_err(dev, "sdev is null\n"); + return -ENODEV; + } + + spin_lock(&sdev->ud.lock); + status = sdev->ud.status; + spin_unlock(&sdev->ud.lock); + + return snprintf(buf, PAGE_SIZE, "%d\n", status); +} +static DEVICE_ATTR(usbip_status, S_IRUGO, show_status, NULL); + +/* + * usbip_sockfd gets a socket descriptor of an established TCP connection that + * is used to transfer usbip requests by kernel threads. -1 is a magic number + * by which usbip connection is finished. + */ +static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + struct stub_device *sdev = dev_get_drvdata(dev); + int sockfd = 0; + struct socket *socket; + + if (!sdev) { + dev_err(dev, "sdev is null\n"); + return -ENODEV; + } + + sscanf(buf, "%d", &sockfd); + + if (sockfd != -1) { + dev_info(dev, "stub up\n"); + + spin_lock(&sdev->ud.lock); + + if (sdev->ud.status != SDEV_ST_AVAILABLE) { + dev_err(dev, "not ready\n"); + spin_unlock(&sdev->ud.lock); + return -EINVAL; + } + + socket = sockfd_to_socket(sockfd); + if (!socket) { + spin_unlock(&sdev->ud.lock); + return -EINVAL; + } + +#if 0 + setnodelay(socket); + setkeepalive(socket); + setreuse(socket); +#endif + + sdev->ud.tcp_socket = socket; + + spin_unlock(&sdev->ud.lock); + + usbip_start_threads(&sdev->ud); + + spin_lock(&sdev->ud.lock); + sdev->ud.status = SDEV_ST_USED; + spin_unlock(&sdev->ud.lock); + + } else { + dev_info(dev, "stub down\n"); + + spin_lock(&sdev->ud.lock); + if (sdev->ud.status != SDEV_ST_USED) { + spin_unlock(&sdev->ud.lock); + return -EINVAL; + } + spin_unlock(&sdev->ud.lock); + + usbip_event_add(&sdev->ud, SDEV_EVENT_DOWN); + } + + return count; +} +static DEVICE_ATTR(usbip_sockfd, S_IWUSR, NULL, store_sockfd); + +static int stub_add_files(struct device *dev) +{ + int err = 0; + + err = device_create_file(dev, &dev_attr_usbip_status); + if (err) + goto err_status; + + err = device_create_file(dev, &dev_attr_usbip_sockfd); + if (err) + goto err_sockfd; + + err = device_create_file(dev, &dev_attr_usbip_debug); + if (err) + goto err_debug; + + return 0; + +err_debug: + device_remove_file(dev, &dev_attr_usbip_sockfd); + +err_sockfd: + device_remove_file(dev, &dev_attr_usbip_status); + +err_status: + return err; +} + +static void stub_remove_files(struct device *dev) +{ + device_remove_file(dev, &dev_attr_usbip_status); + device_remove_file(dev, &dev_attr_usbip_sockfd); + device_remove_file(dev, &dev_attr_usbip_debug); +} + + + +/*-------------------------------------------------------------------------*/ + +/* Event handler functions called by an event handler thread */ + +static void stub_shutdown_connection(struct usbip_device *ud) +{ + struct stub_device *sdev = container_of(ud, struct stub_device, ud); + + /* + * When removing an exported device, kernel panic sometimes occurred + * and then EIP was sk_wait_data of stub_rx thread. Is this because + * sk_wait_data returned though stub_rx thread was already finished by + * step 1? + */ + if (ud->tcp_socket) { + udbg("shutdown tcp_socket %p\n", ud->tcp_socket); + kernel_sock_shutdown(ud->tcp_socket, SHUT_RDWR); + } + + /* 1. stop threads */ + usbip_stop_threads(ud); + + /* 2. close the socket */ + /* + * tcp_socket is freed after threads are killed. + * So usbip_xmit do not touch NULL socket. + */ + if (ud->tcp_socket) { + sock_release(ud->tcp_socket); + ud->tcp_socket = NULL; + } + + /* 3. free used data */ + stub_device_cleanup_urbs(sdev); + + /* 4. free stub_unlink */ + { + unsigned long flags; + struct stub_unlink *unlink, *tmp; + + spin_lock_irqsave(&sdev->priv_lock, flags); + + list_for_each_entry_safe(unlink, tmp, &sdev->unlink_tx, list) { + list_del(&unlink->list); + kfree(unlink); + } + + list_for_each_entry_safe(unlink, tmp, + &sdev->unlink_free, list) { + list_del(&unlink->list); + kfree(unlink); + } + + spin_unlock_irqrestore(&sdev->priv_lock, flags); + } +} + +static void stub_device_reset(struct usbip_device *ud) +{ + struct stub_device *sdev = container_of(ud, struct stub_device, ud); + struct usb_device *udev = interface_to_usbdev(sdev->interface); + int ret; + + udbg("device reset"); + ret = usb_lock_device_for_reset(udev, sdev->interface); + if (ret < 0) { + dev_err(&udev->dev, "lock for reset\n"); + + spin_lock(&ud->lock); + ud->status = SDEV_ST_ERROR; + spin_unlock(&ud->lock); + + return; + } + + /* try to reset the device */ + ret = usb_reset_device(udev); + + usb_unlock_device(udev); + + spin_lock(&ud->lock); + if (ret) { + dev_err(&udev->dev, "device reset\n"); + ud->status = SDEV_ST_ERROR; + + } else { + dev_info(&udev->dev, "device reset\n"); + ud->status = SDEV_ST_AVAILABLE; + + } + spin_unlock(&ud->lock); + + return; +} + +static void stub_device_unusable(struct usbip_device *ud) +{ + spin_lock(&ud->lock); + ud->status = SDEV_ST_ERROR; + spin_unlock(&ud->lock); +} + + +/*-------------------------------------------------------------------------*/ + +/** + * stub_device_alloc - allocate a new stub_device struct + * @interface: usb_interface of a new device + * + * Allocates and initializes a new stub_device struct. + */ +static struct stub_device *stub_device_alloc(struct usb_interface *interface) +{ + struct stub_device *sdev; + int busnum = interface_to_busnum(interface); + int devnum = interface_to_devnum(interface); + + dev_dbg(&interface->dev, "allocating stub device"); + + /* yes, it's a new device */ + sdev = kzalloc(sizeof(struct stub_device), GFP_KERNEL); + if (!sdev) { + dev_err(&interface->dev, "no memory for stub_device\n"); + return NULL; + } + + sdev->interface = interface; + + /* + * devid is defined with devnum when this driver is first allocated. + * devnum may change later if a device is reset. However, devid never + * changes during a usbip connection. + */ + sdev->devid = (busnum << 16) | devnum; + + usbip_task_init(&sdev->ud.tcp_rx, "stub_rx", stub_rx_loop); + usbip_task_init(&sdev->ud.tcp_tx, "stub_tx", stub_tx_loop); + + sdev->ud.side = USBIP_STUB; + sdev->ud.status = SDEV_ST_AVAILABLE; + /* sdev->ud.lock = SPIN_LOCK_UNLOCKED; */ + spin_lock_init(&sdev->ud.lock); + sdev->ud.tcp_socket = NULL; + + INIT_LIST_HEAD(&sdev->priv_init); + INIT_LIST_HEAD(&sdev->priv_tx); + INIT_LIST_HEAD(&sdev->priv_free); + INIT_LIST_HEAD(&sdev->unlink_free); + INIT_LIST_HEAD(&sdev->unlink_tx); + /* sdev->priv_lock = SPIN_LOCK_UNLOCKED; */ + spin_lock_init(&sdev->priv_lock); + + init_waitqueue_head(&sdev->tx_waitq); + + sdev->ud.eh_ops.shutdown = stub_shutdown_connection; + sdev->ud.eh_ops.reset = stub_device_reset; + sdev->ud.eh_ops.unusable = stub_device_unusable; + + usbip_start_eh(&sdev->ud); + + udbg("register new interface\n"); + return sdev; +} + +static int stub_device_free(struct stub_device *sdev) +{ + if (!sdev) + return -EINVAL; + + kfree(sdev); + udbg("kfree udev ok\n"); + + return 0; +} + + +/*-------------------------------------------------------------------------*/ + +/* + * If a usb device has multiple active interfaces, this driver is bound to all + * the active interfaces. However, usbip exports *a* usb device (i.e., not *an* + * active interface). Currently, a userland program must ensure that it + * looks at the usbip's sysfs entries of only the first active interface. + * + * TODO: use "struct usb_device_driver" to bind a usb device. + * However, it seems it is not fully supported in mainline kernel yet + * (2.6.19.2). + */ +static int stub_probe(struct usb_interface *interface, + const struct usb_device_id *id) +{ + struct usb_device *udev = interface_to_usbdev(interface); + struct stub_device *sdev = NULL; + char *udev_busid = interface->dev.parent->bus_id; + int err = 0; + + dev_dbg(&interface->dev, "Enter\n"); + + /* check we should claim or not by busid_table */ + if (match_busid(udev_busid)) { + dev_info(&interface->dev, + "this device %s is not in match_busid table. skip!\n", + udev_busid); + + /* + * Return value should be ENODEV or ENOXIO to continue trying + * other matched drivers by the driver core. + * See driver_probe_device() in driver/base/dd.c + */ + return -ENODEV; + } + + if (udev->descriptor.bDeviceClass == USB_CLASS_HUB) { + udbg("this device %s is a usb hub device. skip!\n", + udev_busid); + return -ENODEV; + } + + if (!strcmp(udev->bus->bus_name, "vhci_hcd")) { + udbg("this device %s is attached on vhci_hcd. skip!\n", + udev_busid); + return -ENODEV; + } + + /* ok. this is my device. */ + sdev = stub_device_alloc(interface); + if (!sdev) + return -ENOMEM; + + dev_info(&interface->dev, "USB/IP Stub: register a new interface " + "(bus %u dev %u ifn %u)\n", udev->bus->busnum, udev->devnum, + interface->cur_altsetting->desc.bInterfaceNumber); + + /* set private data to usb_interface */ + usb_set_intfdata(interface, sdev); + + err = stub_add_files(&interface->dev); + if (err) { + dev_err(&interface->dev, "create sysfs files for %s\n", + udev_busid); + return err; + } + + return 0; +} + + +/* + * called in usb_disconnect() or usb_deregister() + * but only if actconfig(active configuration) exists + */ +static void stub_disconnect(struct usb_interface *interface) +{ + struct stub_device *sdev = usb_get_intfdata(interface); + + udbg("Enter\n"); + + /* get stub_device */ + if (!sdev) { + err(" could not get device from inteface data"); + /* BUG(); */ + return; + } + + usb_set_intfdata(interface, NULL); + + + /* + * NOTE: + * rx/tx threads are invoked for each usb_device. + */ + stub_remove_files(&interface->dev); + + /* 1. shutdown the current connection */ + usbip_event_add(&sdev->ud, SDEV_EVENT_REMOVED); + + /* 2. wait for the stop of the event handler */ + usbip_stop_eh(&sdev->ud); + + /* 3. free sdev */ + stub_device_free(sdev); + + + udbg("bye\n"); +} diff --git a/modules/hp2101nw/src/unused/stub_main.c b/modules/hp2101nw/src/unused/stub_main.c new file mode 100644 index 0000000..c665d7f --- /dev/null +++ b/modules/hp2101nw/src/unused/stub_main.c @@ -0,0 +1,300 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + + +#include "usbip_common.h" +#include "stub.h" + +/* Version Information */ +#define DRIVER_VERSION "1.0" +#define DRIVER_AUTHOR "Takahiro Hirofuchi" +#define DRIVER_DESC "Stub Driver for USB/IP" + +/* stub_priv is allocated from stub_priv_cache */ +struct kmem_cache *stub_priv_cache; + +/*-------------------------------------------------------------------------*/ + +/* Define sysfs entries for the usbip driver */ + + +/* + * busid_tables defines matching busids that usbip can grab. A user can change + * dynamically what device is locally used and what device is exported to a + * remote host. + */ +#define MAX_BUSID 16 +static char busid_table[MAX_BUSID][BUS_ID_SIZE]; +static spinlock_t busid_table_lock; + + +int match_busid(char *busid) +{ + int i; + + spin_lock(&busid_table_lock); + + for (i = 0; i < MAX_BUSID; i++) + if (busid_table[i][0]) + if (!strncmp(busid_table[i], busid, BUS_ID_SIZE)) { + /* already registerd */ + spin_unlock(&busid_table_lock); + return 0; + } + + spin_unlock(&busid_table_lock); + + return 1; +} + +static ssize_t show_match_busid(struct device_driver *drv, char *buf) +{ + int i; + char *out = buf; + + spin_lock(&busid_table_lock); + + for (i = 0; i < MAX_BUSID; i++) + if (busid_table[i][0]) + out += sprintf(out, "%s ", busid_table[i]); + + spin_unlock(&busid_table_lock); + + out += sprintf(out, "\n"); + + return out - buf; +} + +static int add_match_busid(char *busid) +{ + int i; + + if (!match_busid(busid)) + return 0; + + spin_lock(&busid_table_lock); + + for (i = 0; i < MAX_BUSID; i++) + if (!busid_table[i][0]) { + strncpy(busid_table[i], busid, BUS_ID_SIZE); + spin_unlock(&busid_table_lock); + return 0; + } + + spin_unlock(&busid_table_lock); + + return -1; +} + +static int del_match_busid(char *busid) +{ + int i; + + spin_lock(&busid_table_lock); + + for (i = 0; i < MAX_BUSID; i++) + if (!strncmp(busid_table[i], busid, BUS_ID_SIZE)) { + /* found */ + memset(busid_table[i], 0, BUS_ID_SIZE); + spin_unlock(&busid_table_lock); + return 0; + } + + spin_unlock(&busid_table_lock); + + return -1; +} + +static ssize_t store_match_busid(struct device_driver *dev, const char *buf, + size_t count) +{ + int len; + char busid[BUS_ID_SIZE]; + + if (count < 5) + return -EINVAL; + + /* strnlen() does not include \0 */ + len = strnlen(buf + 4, BUS_ID_SIZE); + + /* busid needs to include \0 termination */ + if (!(len < BUS_ID_SIZE)) + return -EINVAL; + + strncpy(busid, buf + 4, BUS_ID_SIZE); + + + if (!strncmp(buf, "add ", 4)) { + if (add_match_busid(busid) < 0) + return -ENOMEM; + else { + udbg("add busid %s\n", busid); + return count; + } + } else if (!strncmp(buf, "del ", 4)) { + if (del_match_busid(busid) < 0) + return -ENODEV; + else { + udbg("del busid %s\n", busid); + return count; + } + } else + return -EINVAL; +} + +static DRIVER_ATTR(match_busid, S_IRUSR|S_IWUSR, show_match_busid, + store_match_busid); + + + +/*-------------------------------------------------------------------------*/ + +/* Cleanup functions used to free private data */ + +static struct stub_priv *stub_priv_pop_from_listhead(struct list_head *listhead) +{ + struct stub_priv *priv, *tmp; + + list_for_each_entry_safe(priv, tmp, listhead, list) { + list_del(&priv->list); + return priv; + } + + return NULL; +} + +static struct stub_priv *stub_priv_pop(struct stub_device *sdev) +{ + unsigned long flags; + struct stub_priv *priv; + + spin_lock_irqsave(&sdev->priv_lock, flags); + + priv = stub_priv_pop_from_listhead(&sdev->priv_init); + if (priv) { + spin_unlock_irqrestore(&sdev->priv_lock, flags); + return priv; + } + + priv = stub_priv_pop_from_listhead(&sdev->priv_tx); + if (priv) { + spin_unlock_irqrestore(&sdev->priv_lock, flags); + return priv; + } + + priv = stub_priv_pop_from_listhead(&sdev->priv_free); + if (priv) { + spin_unlock_irqrestore(&sdev->priv_lock, flags); + return priv; + } + + spin_unlock_irqrestore(&sdev->priv_lock, flags); + return NULL; +} + +void stub_device_cleanup_urbs(struct stub_device *sdev) +{ + struct stub_priv *priv; + + udbg("free sdev %p\n", sdev); + + while ((priv = stub_priv_pop(sdev))) { + struct urb *urb = priv->urb; + + udbg(" free urb %p\n", urb); + usb_kill_urb(urb); + + kmem_cache_free(stub_priv_cache, priv); + + if (urb->transfer_buffer != NULL) + kfree(urb->transfer_buffer); + + if (urb->setup_packet != NULL) + kfree(urb->setup_packet); + + usb_free_urb(urb); + } +} + + +/*-------------------------------------------------------------------------*/ + +static int __init usb_stub_init(void) +{ + int ret; + + stub_priv_cache = kmem_cache_create("stub_priv", + sizeof(struct stub_priv), 0, + SLAB_HWCACHE_ALIGN, NULL); + + if (!stub_priv_cache) { + printk(KERN_ERR KBUILD_MODNAME + ": create stub_priv_cache error\n"); + return -ENOMEM; + } + + ret = usb_register(&stub_driver); + if (ret) { + printk(KERN_ERR KBUILD_MODNAME ": usb_register failed %d\n", + ret); + goto error_usb_register; + } + + printk(KERN_INFO KBUILD_MODNAME ":" + DRIVER_DESC ":" DRIVER_VERSION "\n"); + + memset(busid_table, 0, sizeof(busid_table)); + spin_lock_init(&busid_table_lock); + + ret = driver_create_file(&stub_driver.drvwrap.driver, + &driver_attr_match_busid); + + if (ret) { + printk(KERN_ERR KBUILD_MODNAME ": create driver sysfs\n"); + goto error_create_file; + } + + return ret; +error_create_file: + usb_deregister(&stub_driver); +error_usb_register: + kmem_cache_destroy(stub_priv_cache); + return ret; +} + +static void __exit usb_stub_exit(void) +{ + driver_remove_file(&stub_driver.drvwrap.driver, + &driver_attr_match_busid); + + /* + * deregister() calls stub_disconnect() for all devices. Device + * specific data is cleared in stub_disconnect(). + */ + usb_deregister(&stub_driver); + + kmem_cache_destroy(stub_priv_cache); +} + +module_init(usb_stub_init); +module_exit(usb_stub_exit); + +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_LICENSE("GPL"); diff --git a/modules/hp2101nw/src/unused/stub_rx.c b/modules/hp2101nw/src/unused/stub_rx.c new file mode 100644 index 0000000..bc99b3b --- /dev/null +++ b/modules/hp2101nw/src/unused/stub_rx.c @@ -0,0 +1,615 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include "usbip_common.h" +#include "stub.h" +#include "headers/hcd.h" + + +static int is_clear_halt_cmd(struct urb *urb) +{ + struct usb_ctrlrequest *req; + + req = (struct usb_ctrlrequest *) urb->setup_packet; + + return (req->bRequest == USB_REQ_CLEAR_FEATURE) && + (req->bRequestType == USB_RECIP_ENDPOINT) && + (req->wValue == USB_ENDPOINT_HALT); +} + +static int is_set_interface_cmd(struct urb *urb) +{ + struct usb_ctrlrequest *req; + + req = (struct usb_ctrlrequest *) urb->setup_packet; + + return (req->bRequest == USB_REQ_SET_INTERFACE) && + (req->bRequestType == USB_RECIP_INTERFACE); +} + +static int is_set_configuration_cmd(struct urb *urb) +{ + struct usb_ctrlrequest *req; + + req = (struct usb_ctrlrequest *) urb->setup_packet; + + return (req->bRequest == USB_REQ_SET_CONFIGURATION) && + (req->bRequestType == USB_RECIP_DEVICE); +} + +static int is_reset_device_cmd(struct urb *urb) +{ + struct usb_ctrlrequest *req; + __u16 value; + __u16 index; + + req = (struct usb_ctrlrequest *) urb->setup_packet; + value = le16_to_cpu(req->wValue); + index = le16_to_cpu(req->wIndex); + + if ((req->bRequest == USB_REQ_SET_FEATURE) && + (req->bRequestType == USB_RT_PORT) && + (value = USB_PORT_FEAT_RESET)) { + dbg_stub_rx("reset_device_cmd, port %u\n", index); + return 1; + } else + return 0; +} + +static int tweak_clear_halt_cmd(struct urb *urb) +{ + struct usb_ctrlrequest *req; + int target_endp; + int target_dir; + int target_pipe; + int ret; + + req = (struct usb_ctrlrequest *) urb->setup_packet; + + /* + * The stalled endpoint is specified in the wIndex value. The endpoint + * of the urb is the target of this clear_halt request (i.e., control + * endpoint). + */ + target_endp = le16_to_cpu(req->wIndex) & 0x000f; + + /* the stalled endpoint direction is IN or OUT?. USB_DIR_IN is 0x80. */ + target_dir = le16_to_cpu(req->wIndex) & 0x0080; + + if (target_dir) + target_pipe = usb_rcvctrlpipe(urb->dev, target_endp); + else + target_pipe = usb_sndctrlpipe(urb->dev, target_endp); + + ret = usb_clear_halt(urb->dev, target_pipe); + if (ret < 0) + uinfo("clear_halt error: devnum %d endp %d, %d\n", + urb->dev->devnum, target_endp, ret); + else + uinfo("clear_halt done: devnum %d endp %d\n", + urb->dev->devnum, target_endp); + + return ret; +} + +static int tweak_set_interface_cmd(struct urb *urb) +{ + struct usb_ctrlrequest *req; + __u16 alternate; + __u16 interface; + int ret; + + req = (struct usb_ctrlrequest *) urb->setup_packet; + alternate = le16_to_cpu(req->wValue); + interface = le16_to_cpu(req->wIndex); + + dbg_stub_rx("set_interface: inf %u alt %u\n", interface, alternate); + + ret = usb_set_interface(urb->dev, interface, alternate); + if (ret < 0) + uinfo("set_interface error: inf %u alt %u, %d\n", + interface, alternate, ret); + else + uinfo("set_interface done: inf %u alt %u\n", + interface, + alternate); + + return ret; +} + +static int tweak_set_configuration_cmd(struct urb *urb) +{ + struct usb_ctrlrequest *req; + __u16 config; + + req = (struct usb_ctrlrequest *) urb->setup_packet; + config = le16_to_cpu(req->wValue); + + /* + * I have never seen a multi-config device. Very rare. + * For most devices, this will be called to choose a default + * configuration only once in an initialization phase. + * + * set_configuration may change a device configuration and its device + * drivers will be unbound and assigned for a new device configuration. + * This means this usbip driver will be also unbound when called, then + * eventually reassigned to the device as far as driver matching + * condition is kept. + * + * Unfortunatelly, an existing usbip connection will be dropped + * due to this driver unbinding. So, skip here. + * A user may need to set a special configuration value before + * exporting the device. + */ + uinfo("set_configuration (%d) to %s\n", config, urb->dev->dev.bus_id); + uinfo("but, skip!\n"); + + return 0; + /* return usb_driver_set_configuration(urb->dev, config); */ +} + +static int tweak_reset_device_cmd(struct urb *urb) +{ + struct usb_ctrlrequest *req; + __u16 value; + __u16 index; + int ret; + + req = (struct usb_ctrlrequest *) urb->setup_packet; + value = le16_to_cpu(req->wValue); + index = le16_to_cpu(req->wIndex); + + uinfo("reset_device (port %d) to %s\n", index, urb->dev->dev.bus_id); + + /* all interfaces should be owned by usbip driver, so just reset it. */ + ret = usb_lock_device_for_reset(urb->dev, NULL); + if (ret < 0) { + dev_err(&urb->dev->dev, "lock for reset\n"); + return ret; + } + + /* try to reset the device */ + ret = usb_reset_device(urb->dev); + if (ret < 0) + dev_err(&urb->dev->dev, "device reset\n"); + + usb_unlock_device(urb->dev); + + return ret; +} + +/* + * clear_halt, set_interface, and set_configuration require special tricks. + */ +static void tweak_special_requests(struct urb *urb) +{ + if (!urb || !urb->setup_packet) + return; + + if (usb_pipetype(urb->pipe) != PIPE_CONTROL) + return; + + if (is_clear_halt_cmd(urb)) + /* tweak clear_halt */ + tweak_clear_halt_cmd(urb); + + else if (is_set_interface_cmd(urb)) + /* tweak set_interface */ + tweak_set_interface_cmd(urb); + + else if (is_set_configuration_cmd(urb)) + /* tweak set_configuration */ + tweak_set_configuration_cmd(urb); + + else if (is_reset_device_cmd(urb)) + tweak_reset_device_cmd(urb); + else + dbg_stub_rx("no need to tweak\n"); +} + +/* + * stub_recv_unlink() unlinks the URB by a call to usb_unlink_urb(). + * By unlinking the urb asynchronously, stub_rx can continuously + * process coming urbs. Even if the urb is unlinked, its completion + * handler will be called and stub_tx will send a return pdu. + * + * See also comments about unlinking strategy in vhci_hcd.c. + */ +static int stub_recv_cmd_unlink(struct stub_device *sdev, + struct usbip_header *pdu) +{ + struct list_head *listhead = &sdev->priv_init; + struct list_head *ptr; + unsigned long flags; + + struct stub_priv *priv; + + + spin_lock_irqsave(&sdev->priv_lock, flags); + + for (ptr = listhead->next; ptr != listhead; ptr = ptr->next) { + priv = list_entry(ptr, struct stub_priv, list); + if (priv->seqnum == pdu->u.cmd_unlink.seqnum) { + int ret; + + dev_info(&priv->urb->dev->dev, "unlink urb %p\n", + priv->urb); + + /* + * This matched urb is not completed yet (i.e., be in + * flight in usb hcd hardware/driver). Now we are + * cancelling it. The unlinking flag means that we are + * now not going to return the normal result pdu of a + * submission request, but going to return a result pdu + * of the unlink request. + */ + priv->unlinking = 1; + + /* + * In the case that unlinking flag is on, prev->seqnum + * is changed from the seqnum of the cancelling urb to + * the seqnum of the unlink request. This will be used + * to make the result pdu of the unlink request. + */ + priv->seqnum = pdu->base.seqnum; + + spin_unlock_irqrestore(&sdev->priv_lock, flags); + + /* + * usb_unlink_urb() is now out of spinlocking to avoid + * spinlock recursion since stub_complete() is + * sometimes called in this context but not in the + * interrupt context. If stub_complete() is executed + * before we call usb_unlink_urb(), usb_unlink_urb() + * will return an error value. In this case, stub_tx + * will return the result pdu of this unlink request + * though submission is completed and actual unlinking + * is not executed. OK? + */ + /* In the above case, urb->status is not -ECONNRESET, + * so a driver in a client host will know the failure + * of the unlink request ? + */ + ret = usb_unlink_urb(priv->urb); + if (ret != -EINPROGRESS) + dev_err(&priv->urb->dev->dev, + "failed to unlink a urb %p, ret %d\n", + priv->urb, ret); + return 0; + } + } + + dbg_stub_rx("seqnum %d is not pending\n", pdu->u.cmd_unlink.seqnum); + + /* + * The urb of the unlink target is not found in priv_init queue. It was + * already completed and its results is/was going to be sent by a + * CMD_RET pdu. In this case, usb_unlink_urb() is not needed. We only + * return the completeness of this unlink request to vhci_hcd. + */ + stub_enqueue_ret_unlink(sdev, pdu->base.seqnum, 0); + + spin_unlock_irqrestore(&sdev->priv_lock, flags); + + + return 0; +} + +static int valid_request(struct stub_device *sdev, struct usbip_header *pdu) +{ + struct usbip_device *ud = &sdev->ud; + + if (pdu->base.devid == sdev->devid) { + spin_lock(&ud->lock); + if (ud->status == SDEV_ST_USED) { + /* A request is valid. */ + spin_unlock(&ud->lock); + return 1; + } + spin_unlock(&ud->lock); + } + + return 0; +} + +static struct stub_priv *stub_priv_alloc(struct stub_device *sdev, + struct usbip_header *pdu) +{ + struct stub_priv *priv; + struct usbip_device *ud = &sdev->ud; + unsigned long flags; + + spin_lock_irqsave(&sdev->priv_lock, flags); + + priv = kmem_cache_alloc(stub_priv_cache, GFP_ATOMIC); + if (!priv) { + dev_err(&sdev->interface->dev, "alloc stub_priv\n"); + spin_unlock_irqrestore(&sdev->priv_lock, flags); + usbip_event_add(ud, SDEV_EVENT_ERROR_MALLOC); + return NULL; + } + + memset(priv, 0, sizeof(struct stub_priv)); + + priv->seqnum = pdu->base.seqnum; + priv->sdev = sdev; + + /* + * After a stub_priv is linked to a list_head, + * our error handler can free allocated data. + */ + list_add_tail(&priv->list, &sdev->priv_init); + + spin_unlock_irqrestore(&sdev->priv_lock, flags); + + return priv; +} + + +static struct usb_host_endpoint *get_ep_from_epnum(struct usb_device *udev, + int epnum0) +{ + struct usb_host_config *config; + int i = 0, j = 0; + struct usb_host_endpoint *ep = NULL; + int epnum; + int found = 0; + + if (epnum0 == 0) + return &udev->ep0; + + config = udev->actconfig; + if (!config) + return NULL; + + for (i = 0; i < config->desc.bNumInterfaces; i++) { + struct usb_host_interface *setting; + + setting = config->interface[i]->cur_altsetting; + + for (j = 0; j < setting->desc.bNumEndpoints; j++) { + ep = &setting->endpoint[j]; + epnum = (ep->desc.bEndpointAddress & 0x7f); + + if (epnum == epnum0) { + /* uinfo("found epnum %d\n", epnum0); */ + found = 1; + break; + } + } + } + + if (found) + return ep; + else + return NULL; +} + + +static int get_pipe(struct stub_device *sdev, int epnum, int dir) +{ + struct usb_device *udev = interface_to_usbdev(sdev->interface); + struct usb_host_endpoint *ep; + struct usb_endpoint_descriptor *epd = NULL; + + ep = get_ep_from_epnum(udev, epnum); + if (!ep) { + dev_err(&sdev->interface->dev, "no such endpoint?, %d\n", + epnum); + BUG(); + } + + epd = &ep->desc; + + +#if 0 + /* epnum 0 is always control */ + if (epnum == 0) { + if (dir == USBIP_DIR_OUT) + return usb_sndctrlpipe(udev, 0); + else + return usb_rcvctrlpipe(udev, 0); + } +#endif + + if (usb_endpoint_xfer_control(epd)) { + if (dir == USBIP_DIR_OUT) + return usb_sndctrlpipe(udev, epnum); + else + return usb_rcvctrlpipe(udev, epnum); + } + + if (usb_endpoint_xfer_bulk(epd)) { + if (dir == USBIP_DIR_OUT) + return usb_sndbulkpipe(udev, epnum); + else + return usb_rcvbulkpipe(udev, epnum); + } + + if (usb_endpoint_xfer_int(epd)) { + if (dir == USBIP_DIR_OUT) + return usb_sndintpipe(udev, epnum); + else + return usb_rcvintpipe(udev, epnum); + } + + if (usb_endpoint_xfer_isoc(epd)) { + if (dir == USBIP_DIR_OUT) + return usb_sndisocpipe(udev, epnum); + else + return usb_rcvisocpipe(udev, epnum); + } + + /* NOT REACHED */ + dev_err(&sdev->interface->dev, "get pipe, epnum %d\n", epnum); + return 0; +} + +static void stub_recv_cmd_submit(struct stub_device *sdev, + struct usbip_header *pdu) +{ + int ret; + struct stub_priv *priv; + struct usbip_device *ud = &sdev->ud; + struct usb_device *udev = interface_to_usbdev(sdev->interface); + int pipe = get_pipe(sdev, pdu->base.ep, pdu->base.direction); + + + priv = stub_priv_alloc(sdev, pdu); + if (!priv) + return; + + /* setup a urb */ + if (usb_pipeisoc(pipe)) + priv->urb = usb_alloc_urb(pdu->u.cmd_submit.number_of_packets, + GFP_KERNEL); + else + priv->urb = usb_alloc_urb(0, GFP_KERNEL); + + if (!priv->urb) { + dev_err(&sdev->interface->dev, "malloc urb\n"); + usbip_event_add(ud, SDEV_EVENT_ERROR_MALLOC); + return; + } + + /* set priv->urb->transfer_buffer */ + if (pdu->u.cmd_submit.transfer_buffer_length > 0) { + priv->urb->transfer_buffer = + kzalloc(pdu->u.cmd_submit.transfer_buffer_length, + GFP_KERNEL); + if (!priv->urb->transfer_buffer) { + dev_err(&sdev->interface->dev, "malloc x_buff\n"); + usbip_event_add(ud, SDEV_EVENT_ERROR_MALLOC); + return; + } + } + + /* set priv->urb->setup_packet */ + priv->urb->setup_packet = kzalloc(8, GFP_KERNEL); + if (!priv->urb->setup_packet) { + dev_err(&sdev->interface->dev, "allocate setup_packet\n"); + usbip_event_add(ud, SDEV_EVENT_ERROR_MALLOC); + return; + } + memcpy(priv->urb->setup_packet, &pdu->u.cmd_submit.setup, 8); + + /* set other members from the base header of pdu */ + priv->urb->context = (void *) priv; + priv->urb->dev = udev; + priv->urb->pipe = pipe; + priv->urb->complete = stub_complete; + + usbip_pack_pdu(pdu, priv->urb, USBIP_CMD_SUBMIT, 0); + + + if (usbip_recv_xbuff(ud, priv->urb) < 0) + return; + + if (usbip_recv_iso(ud, priv->urb) < 0) + return; + + /* no need to submit an intercepted request, but harmless? */ + tweak_special_requests(priv->urb); + + /* urb is now ready to submit */ + ret = usb_submit_urb(priv->urb, GFP_KERNEL); + + if (ret == 0) + dbg_stub_rx("submit urb ok, seqnum %u\n", pdu->base.seqnum); + else { + dev_err(&sdev->interface->dev, "submit_urb error, %d\n", ret); + usbip_dump_header(pdu); + usbip_dump_urb(priv->urb); + + /* + * Pessimistic. + * This connection will be discarded. + */ + usbip_event_add(ud, SDEV_EVENT_ERROR_SUBMIT); + } + + dbg_stub_rx("Leave\n"); + return; +} + +/* recv a pdu */ +static void stub_rx_pdu(struct usbip_device *ud) +{ + int ret; + struct usbip_header pdu; + struct stub_device *sdev = container_of(ud, struct stub_device, ud); + struct device *dev = &sdev->interface->dev; + + dbg_stub_rx("Enter\n"); + + memset(&pdu, 0, sizeof(pdu)); + + /* 1. receive a pdu header */ + ret = usbip_xmit(0, ud->tcp_socket, (char *) &pdu, sizeof(pdu), 0); + if (ret != sizeof(pdu)) { + dev_err(dev, "recv a header, %d\n", ret); + usbip_event_add(ud, SDEV_EVENT_ERROR_TCP); + return; + } + + usbip_header_correct_endian(&pdu, 0); + + if (dbg_flag_stub_rx) + usbip_dump_header(&pdu); + + if (!valid_request(sdev, &pdu)) { + dev_err(dev, "recv invalid request\n"); + usbip_event_add(ud, SDEV_EVENT_ERROR_TCP); + return; + } + + switch (pdu.base.command) { + case USBIP_CMD_UNLINK: + stub_recv_cmd_unlink(sdev, &pdu); + break; + + case USBIP_CMD_SUBMIT: + stub_recv_cmd_submit(sdev, &pdu); + break; + + default: + /* NOTREACHED */ + dev_err(dev, "unknown pdu\n"); + usbip_event_add(ud, SDEV_EVENT_ERROR_TCP); + return; + } + +} + +void stub_rx_loop(struct usbip_task *ut) +{ + struct usbip_device *ud = container_of(ut, struct usbip_device, tcp_rx); + + while (1) { + if (signal_pending(current)) { + dbg_stub_rx("signal caught!\n"); + break; + } + + if (usbip_event_happend(ud)) + break; + + stub_rx_pdu(ud); + } +} diff --git a/modules/hp2101nw/src/unused/stub_tx.c b/modules/hp2101nw/src/unused/stub_tx.c new file mode 100644 index 0000000..d5563cd --- /dev/null +++ b/modules/hp2101nw/src/unused/stub_tx.c @@ -0,0 +1,371 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include "usbip_common.h" +#include "stub.h" + + +static void stub_free_priv_and_urb(struct stub_priv *priv) +{ + struct urb *urb = priv->urb; + + kfree(urb->setup_packet); + kfree(urb->transfer_buffer); + list_del(&priv->list); + kmem_cache_free(stub_priv_cache, priv); + usb_free_urb(urb); +} + +/* be in spin_lock_irqsave(&sdev->priv_lock, flags) */ +void stub_enqueue_ret_unlink(struct stub_device *sdev, __u32 seqnum, + __u32 status) +{ + struct stub_unlink *unlink; + + unlink = kzalloc(sizeof(struct stub_unlink), GFP_ATOMIC); + if (!unlink) { + dev_err(&sdev->interface->dev, "alloc stub_unlink\n"); + usbip_event_add(&sdev->ud, VDEV_EVENT_ERROR_MALLOC); + return; + } + + unlink->seqnum = seqnum; + unlink->status = status; + + list_add_tail(&unlink->list, &sdev->unlink_tx); +} + +/** + * stub_complete - completion handler of a usbip urb + * @urb: pointer to the urb completed + * @regs: + * + * When a urb has completed, the USB core driver calls this function mostly in + * the interrupt context. To return the result of a urb, the completed urb is + * linked to the pending list of returning. + * + */ +void stub_complete(struct urb *urb) +{ + struct stub_priv *priv = (struct stub_priv *) urb->context; + struct stub_device *sdev = priv->sdev; + unsigned long flags; + + dbg_stub_tx("complete! status %d\n", urb->status); + + + switch (urb->status) { + case 0: + /* OK */ + break; + case -ENOENT: + uinfo("stopped by a call of usb_kill_urb() because of" + "cleaning up a virtual connection\n"); + return; + case -ECONNRESET: + uinfo("unlinked by a call of usb_unlink_urb()\n"); + break; + case -EPIPE: + uinfo("endpoint %d is stalled\n", usb_pipeendpoint(urb->pipe)); + break; + case -ESHUTDOWN: + uinfo("device removed?\n"); + break; + default: + uinfo("urb completion with non-zero status %d\n", urb->status); + } + + /* link a urb to the queue of tx. */ + spin_lock_irqsave(&sdev->priv_lock, flags); + + if (priv->unlinking) { + stub_enqueue_ret_unlink(sdev, priv->seqnum, urb->status); + stub_free_priv_and_urb(priv); + } else + list_move_tail(&priv->list, &sdev->priv_tx); + + + spin_unlock_irqrestore(&sdev->priv_lock, flags); + + /* wake up tx_thread */ + wake_up(&sdev->tx_waitq); +} + + +/*-------------------------------------------------------------------------*/ +/* fill PDU */ + +static inline void setup_base_pdu(struct usbip_header_basic *base, + __u32 command, __u32 seqnum) +{ + base->command = command; + base->seqnum = seqnum; + base->devid = 0; + base->ep = 0; + base->direction = 0; +} + +static void setup_ret_submit_pdu(struct usbip_header *rpdu, struct urb *urb) +{ + struct stub_priv *priv = (struct stub_priv *) urb->context; + + setup_base_pdu(&rpdu->base, USBIP_RET_SUBMIT, priv->seqnum); + + usbip_pack_pdu(rpdu, urb, USBIP_RET_SUBMIT, 1); +} + +static void setup_ret_unlink_pdu(struct usbip_header *rpdu, + struct stub_unlink *unlink) +{ + setup_base_pdu(&rpdu->base, USBIP_RET_UNLINK, unlink->seqnum); + + rpdu->u.ret_unlink.status = unlink->status; +} + + +/*-------------------------------------------------------------------------*/ +/* send RET_SUBMIT */ + +static struct stub_priv *dequeue_from_priv_tx(struct stub_device *sdev) +{ + unsigned long flags; + struct stub_priv *priv, *tmp; + + spin_lock_irqsave(&sdev->priv_lock, flags); + + list_for_each_entry_safe(priv, tmp, &sdev->priv_tx, list) { + list_move_tail(&priv->list, &sdev->priv_free); + spin_unlock_irqrestore(&sdev->priv_lock, flags); + return priv; + } + + spin_unlock_irqrestore(&sdev->priv_lock, flags); + + return NULL; +} + +static int stub_send_ret_submit(struct stub_device *sdev) +{ + unsigned long flags; + struct stub_priv *priv, *tmp; + + struct msghdr msg; + struct kvec iov[3]; + size_t txsize; + + size_t total_size = 0; + + while ((priv = dequeue_from_priv_tx(sdev)) != NULL) { + int ret; + struct urb *urb = priv->urb; + struct usbip_header pdu_header; + void *iso_buffer = NULL; + + txsize = 0; + memset(&pdu_header, 0, sizeof(pdu_header)); + memset(&msg, 0, sizeof(msg)); + memset(&iov, 0, sizeof(iov)); + + dbg_stub_tx("setup txdata urb %p\n", urb); + + + /* 1. setup usbip_header */ + setup_ret_submit_pdu(&pdu_header, urb); + usbip_header_correct_endian(&pdu_header, 1); + + iov[0].iov_base = &pdu_header; + iov[0].iov_len = sizeof(pdu_header); + txsize += sizeof(pdu_header); + + /* 2. setup transfer buffer */ + if (usb_pipein(urb->pipe) && urb->actual_length > 0) { + iov[1].iov_base = urb->transfer_buffer; + iov[1].iov_len = urb->actual_length; + txsize += urb->actual_length; + } + + /* 3. setup iso_packet_descriptor */ + if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) { + ssize_t len = 0; + + iso_buffer = usbip_alloc_iso_desc_pdu(urb, &len); + if (!iso_buffer) { + usbip_event_add(&sdev->ud, + SDEV_EVENT_ERROR_MALLOC); + return -1; + } + + iov[2].iov_base = iso_buffer; + iov[2].iov_len = len; + txsize += len; + } + + ret = kernel_sendmsg(sdev->ud.tcp_socket, &msg, iov, + 3, txsize); + if (ret != txsize) { + dev_err(&sdev->interface->dev, + "sendmsg failed!, retval %d for %zd\n", + ret, txsize); + kfree(iso_buffer); + usbip_event_add(&sdev->ud, SDEV_EVENT_ERROR_TCP); + return -1; + } + + kfree(iso_buffer); + dbg_stub_tx("send txdata\n"); + + total_size += txsize; + } + + + spin_lock_irqsave(&sdev->priv_lock, flags); + + list_for_each_entry_safe(priv, tmp, &sdev->priv_free, list) { + stub_free_priv_and_urb(priv); + } + + spin_unlock_irqrestore(&sdev->priv_lock, flags); + + return total_size; +} + + +/*-------------------------------------------------------------------------*/ +/* send RET_UNLINK */ + +static struct stub_unlink *dequeue_from_unlink_tx(struct stub_device *sdev) +{ + unsigned long flags; + struct stub_unlink *unlink, *tmp; + + spin_lock_irqsave(&sdev->priv_lock, flags); + + list_for_each_entry_safe(unlink, tmp, &sdev->unlink_tx, list) { + list_move_tail(&unlink->list, &sdev->unlink_free); + spin_unlock_irqrestore(&sdev->priv_lock, flags); + return unlink; + } + + spin_unlock_irqrestore(&sdev->priv_lock, flags); + + return NULL; +} + + +static int stub_send_ret_unlink(struct stub_device *sdev) +{ + unsigned long flags; + struct stub_unlink *unlink, *tmp; + + struct msghdr msg; + struct kvec iov[1]; + size_t txsize; + + size_t total_size = 0; + + while ((unlink = dequeue_from_unlink_tx(sdev)) != NULL) { + int ret; + struct usbip_header pdu_header; + + txsize = 0; + memset(&pdu_header, 0, sizeof(pdu_header)); + memset(&msg, 0, sizeof(msg)); + memset(&iov, 0, sizeof(iov)); + + dbg_stub_tx("setup ret unlink %lu\n", unlink->seqnum); + + /* 1. setup usbip_header */ + setup_ret_unlink_pdu(&pdu_header, unlink); + usbip_header_correct_endian(&pdu_header, 1); + + iov[0].iov_base = &pdu_header; + iov[0].iov_len = sizeof(pdu_header); + txsize += sizeof(pdu_header); + + ret = kernel_sendmsg(sdev->ud.tcp_socket, &msg, iov, + 1, txsize); + if (ret != txsize) { + dev_err(&sdev->interface->dev, + "sendmsg failed!, retval %d for %zd\n", + ret, txsize); + usbip_event_add(&sdev->ud, SDEV_EVENT_ERROR_TCP); + return -1; + } + + + dbg_stub_tx("send txdata\n"); + + total_size += txsize; + } + + + spin_lock_irqsave(&sdev->priv_lock, flags); + + list_for_each_entry_safe(unlink, tmp, &sdev->unlink_free, list) { + list_del(&unlink->list); + kfree(unlink); + } + + spin_unlock_irqrestore(&sdev->priv_lock, flags); + + return total_size; +} + + +/*-------------------------------------------------------------------------*/ + +void stub_tx_loop(struct usbip_task *ut) +{ + struct usbip_device *ud = container_of(ut, struct usbip_device, tcp_tx); + struct stub_device *sdev = container_of(ud, struct stub_device, ud); + + while (1) { + if (signal_pending(current)) { + dbg_stub_tx("signal catched\n"); + break; + } + + if (usbip_event_happend(ud)) + break; + + /* + * send_ret_submit comes earlier than send_ret_unlink. stub_rx + * looks at only priv_init queue. If the completion of a URB is + * earlier than the receive of CMD_UNLINK, priv is moved to + * priv_tx queue and stub_rx does not find the target priv. In + * this case, vhci_rx receives the result of the submit request + * and then receives the result of the unlink request. The + * result of the submit is given back to the usbcore as the + * completion of the unlink request. The request of the + * unlink is ignored. This is ok because a driver who calls + * usb_unlink_urb() understands the unlink was too late by + * getting the status of the given-backed URB which has the + * status of usb_submit_urb(). + */ + if (stub_send_ret_submit(sdev) < 0) + break; + + if (stub_send_ret_unlink(sdev) < 0) + break; + + wait_event_interruptible(sdev->tx_waitq, + (!list_empty(&sdev->priv_tx) || + !list_empty(&sdev->unlink_tx))); + } +} diff --git a/modules/hp2101nw/usbip/.hp2101nw.ko.cmd b/modules/hp2101nw/usbip/.hp2101nw.ko.cmd new file mode 100644 index 0000000..6d8ba86 --- /dev/null +++ b/modules/hp2101nw/usbip/.hp2101nw.ko.cmd @@ -0,0 +1 @@ +cmd_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw.ko := ld -r -m elf_x86_64 -T /usr/src/linux-headers-3.0.0-16-generic/scripts/module-common.lds --build-id -o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw.ko /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw.mod.o diff --git a/modules/hp2101nw/usbip/.hp2101nw.mod.o.cmd b/modules/hp2101nw/usbip/.hp2101nw.mod.o.cmd new file mode 100644 index 0000000..f0bef9f --- /dev/null +++ b/modules/hp2101nw/usbip/.hp2101nw.mod.o.cmd @@ -0,0 +1,479 @@ +cmd_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw.mod.o := gcc -Wp,-MD,/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/.hp2101nw.mod.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include -I/usr/src/linux-headers-3.0.0-16-generic/arch/x86/include -Iarch/x86/include/generated -Iinclude -include include/generated/autoconf.h -Iubuntu/include -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m64 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=1024 -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -DHCD_HEADER=\"/usr/src/linux-headers-3.0.0-16-generic/include/linux/usb/hcd.h\" -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(hp2101nw.mod)" -D"KBUILD_MODNAME=KBUILD_STR(hp2101nw)" -DMODULE -c -o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw.mod.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw.mod.c + +source_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw.mod.o := /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw.mod.c + +deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw.mod.o := \ + $(wildcard include/config/module/unload.h) \ + include/linux/module.h \ + $(wildcard include/config/symbol/prefix.h) \ + $(wildcard include/config/sysfs.h) \ + $(wildcard include/config/modules.h) \ + $(wildcard include/config/modversions.h) \ + $(wildcard include/config/unused/symbols.h) \ + $(wildcard include/config/generic/bug.h) \ + $(wildcard include/config/kallsyms.h) \ + $(wildcard include/config/smp.h) \ + $(wildcard include/config/tracepoints.h) \ + $(wildcard include/config/tracing.h) \ + $(wildcard include/config/event/tracing.h) \ + $(wildcard include/config/ftrace/mcount/record.h) \ + $(wildcard include/config/constructors.h) \ + $(wildcard include/config/debug/set/module/ronx.h) \ + include/linux/list.h \ + $(wildcard include/config/debug/list.h) \ + include/linux/types.h \ + $(wildcard include/config/uid16.h) \ + $(wildcard include/config/lbdaf.h) \ + $(wildcard include/config/arch/dma/addr/t/64bit.h) \ + $(wildcard include/config/phys/addr/t/64bit.h) \ + $(wildcard include/config/64bit.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/types.h \ + include/asm-generic/types.h \ + include/asm-generic/int-ll64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bitsperlong.h \ + include/asm-generic/bitsperlong.h \ + include/linux/posix_types.h \ + include/linux/stddef.h \ + include/linux/compiler.h \ + $(wildcard include/config/sparse/rcu/pointer.h) \ + $(wildcard include/config/trace/branch/profiling.h) \ + $(wildcard include/config/profile/all/branches.h) \ + $(wildcard include/config/enable/must/check.h) \ + $(wildcard include/config/enable/warn/deprecated.h) \ + include/linux/compiler-gcc.h \ + $(wildcard include/config/arch/supports/optimized/inlining.h) \ + $(wildcard include/config/optimize/inlining.h) \ + include/linux/compiler-gcc4.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/x86/32.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/posix_types_64.h \ + include/linux/poison.h \ + $(wildcard include/config/illegal/pointer/value.h) \ + include/linux/const.h \ + include/linux/stat.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/stat.h \ + include/linux/time.h \ + $(wildcard include/config/arch/uses/gettimeoffset.h) \ + include/linux/cache.h \ + $(wildcard include/config/arch/has/cache/line/size.h) \ + include/linux/kernel.h \ + $(wildcard include/config/preempt/voluntary.h) \ + $(wildcard include/config/debug/spinlock/sleep.h) \ + $(wildcard include/config/prove/locking.h) \ + $(wildcard include/config/ring/buffer.h) \ + $(wildcard include/config/numa.h) \ + $(wildcard include/config/compaction.h) \ + /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stdarg.h \ + include/linux/linkage.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/x86/64.h) \ + $(wildcard include/config/x86/alignment/16.h) \ + include/linux/stringify.h \ + include/linux/bitops.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bitops.h \ + $(wildcard include/config/x86/cmov.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/alternative.h \ + $(wildcard include/config/paravirt.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/asm.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cpufeature.h \ + $(wildcard include/config/x86/invlpg.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/required-features.h \ + $(wildcard include/config/x86/minimum/cpu/family.h) \ + $(wildcard include/config/math/emulation.h) \ + $(wildcard include/config/x86/pae.h) \ + $(wildcard include/config/x86/cmpxchg64.h) \ + $(wildcard include/config/x86/use/3dnow.h) \ + $(wildcard include/config/x86/p6/nop.h) \ + include/asm-generic/bitops/find.h \ + $(wildcard include/config/generic/find/first/bit.h) \ + include/asm-generic/bitops/sched.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/arch_hweight.h \ + include/asm-generic/bitops/const_hweight.h \ + include/asm-generic/bitops/fls64.h \ + include/asm-generic/bitops/le.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/byteorder.h \ + include/linux/byteorder/little_endian.h \ + include/linux/swab.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/swab.h \ + $(wildcard include/config/x86/bswap.h) \ + include/linux/byteorder/generic.h \ + include/linux/log2.h \ + $(wildcard include/config/arch/has/ilog2/u32.h) \ + $(wildcard include/config/arch/has/ilog2/u64.h) \ + include/linux/typecheck.h \ + include/linux/printk.h \ + $(wildcard include/config/printk.h) \ + $(wildcard include/config/dynamic/debug.h) \ + include/linux/init.h \ + $(wildcard include/config/hotplug.h) \ + include/linux/dynamic_debug.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bug.h \ + $(wildcard include/config/bug.h) \ + $(wildcard include/config/debug/bugverbose.h) \ + include/asm-generic/bug.h \ + $(wildcard include/config/generic/bug/relative/pointers.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cache.h \ + $(wildcard include/config/x86/l1/cache/shift.h) \ + $(wildcard include/config/x86/internode/cache/shift.h) \ + $(wildcard include/config/x86/vsmp.h) \ + include/linux/seqlock.h \ + include/linux/spinlock.h \ + $(wildcard include/config/debug/spinlock.h) \ + $(wildcard include/config/generic/lockbreak.h) \ + $(wildcard include/config/preempt.h) \ + $(wildcard include/config/debug/lock/alloc.h) \ + include/linux/preempt.h \ + $(wildcard include/config/debug/preempt.h) \ + $(wildcard include/config/preempt/tracer.h) \ + $(wildcard include/config/preempt/notifiers.h) \ + include/linux/thread_info.h \ + $(wildcard include/config/compat.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/debug/stack/usage.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/physical/start.h) \ + $(wildcard include/config/physical/align.h) \ + $(wildcard include/config/flatmem.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_64.h \ + include/asm-generic/memory_model.h \ + $(wildcard include/config/discontigmem.h) \ + $(wildcard include/config/sparsemem/vmemmap.h) \ + $(wildcard include/config/sparsemem.h) \ + include/asm-generic/getorder.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/processor.h \ + $(wildcard include/config/cc/stackprotector.h) \ + $(wildcard include/config/m386.h) \ + $(wildcard include/config/m486.h) \ + $(wildcard include/config/x86/debugctlmsr.h) \ + $(wildcard include/config/cpu/sup/amd.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/vm86.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vm86.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ptrace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ptrace-abi.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/segment.h \ + include/asm-generic/ptrace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/math_emu.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sigcontext.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/current.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/percpu.h \ + $(wildcard include/config/x86/64/smp.h) \ + include/asm-generic/percpu.h \ + $(wildcard include/config/have/setup/per/cpu/area.h) \ + include/linux/threads.h \ + $(wildcard include/config/nr/cpus.h) \ + $(wildcard include/config/base/small.h) \ + include/linux/percpu-defs.h \ + $(wildcard include/config/debug/force/weak/per/cpu.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/system.h \ + $(wildcard include/config/ia32/emulation.h) \ + $(wildcard include/config/x86/32/lazy/gs.h) \ + $(wildcard include/config/x86/ppro/fence.h) \ + $(wildcard include/config/x86/oostore.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cmpxchg.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cmpxchg_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/nops.h \ + $(wildcard include/config/mk7.h) \ + include/linux/irqflags.h \ + $(wildcard include/config/trace/irqflags.h) \ + $(wildcard include/config/irqsoff/tracer.h) \ + $(wildcard include/config/trace/irqflags/support.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irqflags.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/paravirt.h \ + $(wildcard include/config/transparent/hugepage.h) \ + $(wildcard include/config/paravirt/spinlocks.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/kmemcheck.h) \ + $(wildcard include/config/compat/vdso.h) \ + $(wildcard include/config/proc/fs.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pgtable_64_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/x86/local/apic.h) \ + $(wildcard include/config/paravirt/debug.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/desc_defs.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/kmap_types.h \ + $(wildcard include/config/debug/highmem.h) \ + include/asm-generic/kmap_types.h \ + include/linux/cpumask.h \ + $(wildcard include/config/cpumask/offstack.h) \ + $(wildcard include/config/hotplug/cpu.h) \ + $(wildcard include/config/debug/per/cpu/maps.h) \ + $(wildcard include/config/disable/obsolete/cpumask/functions.h) \ + include/linux/bitmap.h \ + include/linux/string.h \ + $(wildcard include/config/binary/printf.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/string.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/string_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/msr.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/msr-index.h \ + include/linux/ioctl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ioctl.h \ + include/asm-generic/ioctl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/errno.h \ + include/asm-generic/errno.h \ + include/asm-generic/errno-base.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cpumask.h \ + include/linux/personality.h \ + include/linux/math64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/div64.h \ + include/asm-generic/div64.h \ + include/linux/err.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ftrace.h \ + $(wildcard include/config/function/tracer.h) \ + $(wildcard include/config/dynamic/ftrace.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/atomic.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/atomic64_64.h \ + include/asm-generic/atomic-long.h \ + include/linux/bottom_half.h \ + include/linux/spinlock_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/spinlock_types.h \ + include/linux/lockdep.h \ + $(wildcard include/config/lockdep.h) \ + $(wildcard include/config/lock/stat.h) \ + $(wildcard include/config/prove/rcu.h) \ + include/linux/rwlock_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/spinlock.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/rwlock.h \ + include/linux/rwlock.h \ + include/linux/spinlock_api_smp.h \ + $(wildcard include/config/inline/spin/lock.h) \ + $(wildcard include/config/inline/spin/lock/bh.h) \ + $(wildcard include/config/inline/spin/lock/irq.h) \ + $(wildcard include/config/inline/spin/lock/irqsave.h) \ + $(wildcard include/config/inline/spin/trylock.h) \ + $(wildcard include/config/inline/spin/trylock/bh.h) \ + $(wildcard include/config/inline/spin/unlock.h) \ + $(wildcard include/config/inline/spin/unlock/bh.h) \ + $(wildcard include/config/inline/spin/unlock/irq.h) \ + $(wildcard include/config/inline/spin/unlock/irqrestore.h) \ + include/linux/rwlock_api_smp.h \ + $(wildcard include/config/inline/read/lock.h) \ + $(wildcard include/config/inline/write/lock.h) \ + $(wildcard include/config/inline/read/lock/bh.h) \ + $(wildcard include/config/inline/write/lock/bh.h) \ + $(wildcard include/config/inline/read/lock/irq.h) \ + $(wildcard include/config/inline/write/lock/irq.h) \ + $(wildcard include/config/inline/read/lock/irqsave.h) \ + $(wildcard include/config/inline/write/lock/irqsave.h) \ + $(wildcard include/config/inline/read/trylock.h) \ + $(wildcard include/config/inline/write/trylock.h) \ + $(wildcard include/config/inline/read/unlock.h) \ + $(wildcard include/config/inline/write/unlock.h) \ + $(wildcard include/config/inline/read/unlock/bh.h) \ + $(wildcard include/config/inline/write/unlock/bh.h) \ + $(wildcard include/config/inline/read/unlock/irq.h) \ + $(wildcard include/config/inline/write/unlock/irq.h) \ + $(wildcard include/config/inline/read/unlock/irqrestore.h) \ + $(wildcard include/config/inline/write/unlock/irqrestore.h) \ + include/linux/kmod.h \ + include/linux/gfp.h \ + $(wildcard include/config/highmem.h) \ + $(wildcard include/config/zone/dma.h) \ + $(wildcard include/config/zone/dma32.h) \ + include/linux/mmzone.h \ + $(wildcard include/config/force/max/zoneorder.h) \ + $(wildcard include/config/memory/hotplug.h) \ + $(wildcard include/config/arch/populates/node/map.h) \ + $(wildcard include/config/flat/node/mem/map.h) \ + $(wildcard include/config/cgroup/mem/res/ctlr.h) \ + $(wildcard include/config/no/bootmem.h) \ + $(wildcard include/config/have/memory/present.h) \ + $(wildcard include/config/have/memoryless/nodes.h) \ + $(wildcard include/config/need/node/memmap/size.h) \ + $(wildcard include/config/need/multiple/nodes.h) \ + $(wildcard include/config/have/arch/early/pfn/to/nid.h) \ + $(wildcard include/config/sparsemem/extreme.h) \ + $(wildcard include/config/have/arch/pfn/valid.h) \ + $(wildcard include/config/nodes/span/other/nodes.h) \ + $(wildcard include/config/holes/in/zone.h) \ + $(wildcard include/config/arch/has/holes/memorymodel.h) \ + include/linux/wait.h \ + include/linux/numa.h \ + $(wildcard include/config/nodes/shift.h) \ + include/linux/nodemask.h \ + include/linux/pageblock-flags.h \ + $(wildcard include/config/hugetlb/page.h) \ + $(wildcard include/config/hugetlb/page/size/variable.h) \ + include/generated/bounds.h \ + include/linux/memory_hotplug.h \ + $(wildcard include/config/memory/hotremove.h) \ + $(wildcard include/config/have/arch/nodedata/extension.h) \ + include/linux/notifier.h \ + include/linux/errno.h \ + include/linux/mutex.h \ + $(wildcard include/config/debug/mutexes.h) \ + $(wildcard include/config/have/arch/mutex/cpu/relax.h) \ + include/linux/rwsem.h \ + $(wildcard include/config/rwsem/generic/spinlock.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/rwsem.h \ + include/linux/srcu.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmzone.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmzone_64.h \ + include/linux/mmdebug.h \ + $(wildcard include/config/debug/vm.h) \ + $(wildcard include/config/debug/virtual.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/smp.h \ + $(wildcard include/config/x86/io/apic.h) \ + $(wildcard include/config/x86/32/smp.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/x86/numaq.h) \ + $(wildcard include/config/mca.h) \ + $(wildcard include/config/eisa.h) \ + $(wildcard include/config/x86/mpparse.h) \ + $(wildcard include/config/acpi.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mpspec_def.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/x86_init.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bootparam.h \ + include/linux/screen_info.h \ + include/linux/apm_bios.h \ + include/linux/edd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/e820.h \ + $(wildcard include/config/efi.h) \ + $(wildcard include/config/intel/txt.h) \ + $(wildcard include/config/hibernation.h) \ + $(wildcard include/config/memtest.h) \ + include/linux/ioport.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ist.h \ + include/video/edid.h \ + $(wildcard include/config/x86.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/apicdef.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/apic.h \ + $(wildcard include/config/x86/x2apic.h) \ + include/linux/pm.h \ + $(wildcard include/config/pm.h) \ + $(wildcard include/config/pm/sleep.h) \ + $(wildcard include/config/pm/runtime.h) \ + include/linux/workqueue.h \ + $(wildcard include/config/debug/objects/work.h) \ + $(wildcard include/config/freezer.h) \ + include/linux/timer.h \ + $(wildcard include/config/timer/stats.h) \ + $(wildcard include/config/debug/objects/timers.h) \ + include/linux/ktime.h \ + $(wildcard include/config/ktime/scalar.h) \ + include/linux/jiffies.h \ + include/linux/timex.h \ + include/linux/param.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/param.h \ + include/asm-generic/param.h \ + $(wildcard include/config/hz.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/timex.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/tsc.h \ + $(wildcard include/config/x86/tsc.h) \ + include/linux/debugobjects.h \ + $(wildcard include/config/debug/objects.h) \ + $(wildcard include/config/debug/objects/free.h) \ + include/linux/completion.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/provide/ohci1394/dma/init.h) \ + $(wildcard include/config/x86/visws/apic.h) \ + $(wildcard include/config/x86/f00f/bug.h) \ + $(wildcard include/config/x86/cyclone/timer.h) \ + $(wildcard include/config/pci/mmconfig.h) \ + $(wildcard include/config/x86/mrst.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/acpi.h \ + $(wildcard include/config/acpi/numa.h) \ + include/acpi/pdc_intel.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/numa.h \ + $(wildcard include/config/numa/emu.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/topology.h \ + $(wildcard include/config/x86/ht.h) \ + include/asm-generic/topology.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/numa_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmu.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/trampoline.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/io.h \ + $(wildcard include/config/xen.h) \ + include/xen/xen.h \ + $(wildcard include/config/xen/dom0.h) \ + include/xen/interface/xen.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/interface.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/interface_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pvclock-abi.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/hypervisor.h \ + include/asm-generic/iomap.h \ + include/linux/vmalloc.h \ + $(wildcard include/config/mmu.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vsyscall.h \ + $(wildcard include/config/generic/time.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vvar.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/io_apic.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/sparse/irq.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sparsemem.h \ + include/linux/topology.h \ + $(wildcard include/config/sched/smt.h) \ + $(wildcard include/config/sched/mc.h) \ + $(wildcard include/config/sched/book.h) \ + $(wildcard include/config/use/percpu/numa/node/id.h) \ + include/linux/smp.h \ + $(wildcard include/config/use/generic/smp/helpers.h) \ + include/linux/percpu.h \ + $(wildcard include/config/need/per/cpu/embed/first/chunk.h) \ + $(wildcard include/config/need/per/cpu/page/first/chunk.h) \ + include/linux/pfn.h \ + include/linux/sysctl.h \ + include/linux/rcupdate.h \ + $(wildcard include/config/rcu/torture/test.h) \ + $(wildcard include/config/tree/rcu.h) \ + $(wildcard include/config/tree/preempt/rcu.h) \ + $(wildcard include/config/preempt/rcu.h) \ + $(wildcard include/config/no/hz.h) \ + $(wildcard include/config/tiny/rcu.h) \ + $(wildcard include/config/tiny/preempt/rcu.h) \ + $(wildcard include/config/debug/objects/rcu/head.h) \ + $(wildcard include/config/preempt/rt.h) \ + include/linux/rcutree.h \ + include/linux/elf.h \ + include/linux/elf-em.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/elf.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/user.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/user_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/auxvec.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vdso.h \ + include/linux/kobject.h \ + include/linux/sysfs.h \ + include/linux/kobject_ns.h \ + include/linux/kref.h \ + include/linux/moduleparam.h \ + $(wildcard include/config/alpha.h) \ + $(wildcard include/config/ia64.h) \ + $(wildcard include/config/ppc64.h) \ + include/linux/tracepoint.h \ + include/linux/jump_label.h \ + $(wildcard include/config/jump/label.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/jump_label.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/module.h \ + $(wildcard include/config/m586.h) \ + $(wildcard include/config/m586tsc.h) \ + $(wildcard include/config/m586mmx.h) \ + $(wildcard include/config/mcore2.h) \ + $(wildcard include/config/matom.h) \ + $(wildcard include/config/m686.h) \ + $(wildcard include/config/mpentiumii.h) \ + $(wildcard include/config/mpentiumiii.h) \ + $(wildcard include/config/mpentiumm.h) \ + $(wildcard include/config/mpentium4.h) \ + $(wildcard include/config/mk6.h) \ + $(wildcard include/config/mk8.h) \ + $(wildcard include/config/melan.h) \ + $(wildcard include/config/mcrusoe.h) \ + $(wildcard include/config/mefficeon.h) \ + $(wildcard include/config/mwinchipc6.h) \ + $(wildcard include/config/mwinchip3d.h) \ + $(wildcard include/config/mcyrixiii.h) \ + $(wildcard include/config/mviac3/2.h) \ + $(wildcard include/config/mviac7.h) \ + $(wildcard include/config/mgeodegx1.h) \ + $(wildcard include/config/mgeode/lx.h) \ + include/asm-generic/module.h \ + include/trace/events/module.h \ + include/trace/define_trace.h \ + include/linux/vermagic.h \ + include/generated/utsrelease.h \ + +/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw.mod.o: $(deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw.mod.o) + +$(deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw.mod.o): diff --git a/modules/hp2101nw/usbip/.hp2101nw.o.cmd b/modules/hp2101nw/usbip/.hp2101nw.o.cmd new file mode 100644 index 0000000..7443fd0 --- /dev/null +++ b/modules/hp2101nw/usbip/.hp2101nw.o.cmd @@ -0,0 +1 @@ +cmd_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw.o := ld -m elf_x86_64 -r -o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_sysfs.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_tx.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_rx.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_hcd.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_common.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_event.o diff --git a/modules/hp2101nw/usbip/.hp2101nw_common.o.cmd b/modules/hp2101nw/usbip/.hp2101nw_common.o.cmd new file mode 100644 index 0000000..d4897b7 --- /dev/null +++ b/modules/hp2101nw/usbip/.hp2101nw_common.o.cmd @@ -0,0 +1,879 @@ +cmd_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_common.o := gcc -Wp,-MD,/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/.hp2101nw_common.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include -I/usr/src/linux-headers-3.0.0-16-generic/arch/x86/include -Iarch/x86/include/generated -Iinclude -include include/generated/autoconf.h -Iubuntu/include -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m64 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=1024 -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -DHCD_HEADER=\"/usr/src/linux-headers-3.0.0-16-generic/include/linux/usb/hcd.h\" -DMODULE -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(hp2101nw_common)" -D"KBUILD_MODNAME=KBUILD_STR(hp2101nw)" -c -o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/.tmp_hp2101nw_common.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_common.c + +source_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_common.o := /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_common.c + +deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_common.o := \ + $(wildcard include/config/hp2101nw/debug.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/byteorder.h \ + include/linux/byteorder/little_endian.h \ + include/linux/types.h \ + $(wildcard include/config/uid16.h) \ + $(wildcard include/config/lbdaf.h) \ + $(wildcard include/config/arch/dma/addr/t/64bit.h) \ + $(wildcard include/config/phys/addr/t/64bit.h) \ + $(wildcard include/config/64bit.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/types.h \ + include/asm-generic/types.h \ + include/asm-generic/int-ll64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bitsperlong.h \ + include/asm-generic/bitsperlong.h \ + include/linux/posix_types.h \ + include/linux/stddef.h \ + include/linux/compiler.h \ + $(wildcard include/config/sparse/rcu/pointer.h) \ + $(wildcard include/config/trace/branch/profiling.h) \ + $(wildcard include/config/profile/all/branches.h) \ + $(wildcard include/config/enable/must/check.h) \ + $(wildcard include/config/enable/warn/deprecated.h) \ + include/linux/compiler-gcc.h \ + $(wildcard include/config/arch/supports/optimized/inlining.h) \ + $(wildcard include/config/optimize/inlining.h) \ + include/linux/compiler-gcc4.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/x86/32.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/posix_types_64.h \ + include/linux/swab.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/swab.h \ + $(wildcard include/config/x86/bswap.h) \ + include/linux/byteorder/generic.h \ + include/linux/file.h \ + include/linux/fs.h \ + $(wildcard include/config/sysfs.h) \ + $(wildcard include/config/smp.h) \ + $(wildcard include/config/security.h) \ + $(wildcard include/config/quota.h) \ + $(wildcard include/config/fsnotify.h) \ + $(wildcard include/config/ima.h) \ + $(wildcard include/config/fs/posix/acl.h) \ + $(wildcard include/config/preempt.h) \ + $(wildcard include/config/epoll.h) \ + $(wildcard include/config/debug/writecount.h) \ + $(wildcard include/config/file/locking.h) \ + $(wildcard include/config/auditsyscall.h) \ + $(wildcard include/config/block.h) \ + $(wildcard include/config/fs/xip.h) \ + $(wildcard include/config/migration.h) \ + include/linux/limits.h \ + include/linux/ioctl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ioctl.h \ + include/asm-generic/ioctl.h \ + include/linux/blk_types.h \ + $(wildcard include/config/blk/dev/integrity.h) \ + include/linux/linkage.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/x86/64.h) \ + $(wildcard include/config/x86/alignment/16.h) \ + include/linux/stringify.h \ + include/linux/wait.h \ + $(wildcard include/config/lockdep.h) \ + include/linux/list.h \ + $(wildcard include/config/debug/list.h) \ + include/linux/poison.h \ + $(wildcard include/config/illegal/pointer/value.h) \ + include/linux/const.h \ + include/linux/spinlock.h \ + $(wildcard include/config/debug/spinlock.h) \ + $(wildcard include/config/generic/lockbreak.h) \ + $(wildcard include/config/debug/lock/alloc.h) \ + include/linux/typecheck.h \ + include/linux/preempt.h \ + $(wildcard include/config/debug/preempt.h) \ + $(wildcard include/config/preempt/tracer.h) \ + $(wildcard include/config/preempt/notifiers.h) \ + include/linux/thread_info.h \ + $(wildcard include/config/compat.h) \ + include/linux/bitops.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bitops.h \ + $(wildcard include/config/x86/cmov.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/alternative.h \ + $(wildcard include/config/paravirt.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/asm.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cpufeature.h \ + $(wildcard include/config/x86/invlpg.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/required-features.h \ + $(wildcard include/config/x86/minimum/cpu/family.h) \ + $(wildcard include/config/math/emulation.h) \ + $(wildcard include/config/x86/pae.h) \ + $(wildcard include/config/x86/cmpxchg64.h) \ + $(wildcard include/config/x86/use/3dnow.h) \ + $(wildcard include/config/x86/p6/nop.h) \ + include/asm-generic/bitops/find.h \ + $(wildcard include/config/generic/find/first/bit.h) \ + include/asm-generic/bitops/sched.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/arch_hweight.h \ + include/asm-generic/bitops/const_hweight.h \ + include/asm-generic/bitops/fls64.h \ + include/asm-generic/bitops/le.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/debug/stack/usage.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/physical/start.h) \ + $(wildcard include/config/physical/align.h) \ + $(wildcard include/config/flatmem.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_64.h \ + include/asm-generic/memory_model.h \ + $(wildcard include/config/discontigmem.h) \ + $(wildcard include/config/sparsemem/vmemmap.h) \ + $(wildcard include/config/sparsemem.h) \ + include/asm-generic/getorder.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/processor.h \ + $(wildcard include/config/x86/vsmp.h) \ + $(wildcard include/config/cc/stackprotector.h) \ + $(wildcard include/config/m386.h) \ + $(wildcard include/config/m486.h) \ + $(wildcard include/config/x86/debugctlmsr.h) \ + $(wildcard include/config/cpu/sup/amd.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/vm86.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vm86.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ptrace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ptrace-abi.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/segment.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cache.h \ + $(wildcard include/config/x86/l1/cache/shift.h) \ + $(wildcard include/config/x86/internode/cache/shift.h) \ + include/linux/init.h \ + $(wildcard include/config/modules.h) \ + $(wildcard include/config/hotplug.h) \ + include/asm-generic/ptrace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/math_emu.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sigcontext.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/current.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/percpu.h \ + $(wildcard include/config/x86/64/smp.h) \ + include/linux/kernel.h \ + $(wildcard include/config/preempt/voluntary.h) \ + $(wildcard include/config/debug/spinlock/sleep.h) \ + $(wildcard include/config/prove/locking.h) \ + $(wildcard include/config/ring/buffer.h) \ + $(wildcard include/config/tracing.h) \ + $(wildcard include/config/numa.h) \ + $(wildcard include/config/compaction.h) \ + $(wildcard include/config/ftrace/mcount/record.h) \ + /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stdarg.h \ + include/linux/log2.h \ + $(wildcard include/config/arch/has/ilog2/u32.h) \ + $(wildcard include/config/arch/has/ilog2/u64.h) \ + include/linux/printk.h \ + $(wildcard include/config/printk.h) \ + $(wildcard include/config/dynamic/debug.h) \ + include/linux/dynamic_debug.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bug.h \ + $(wildcard include/config/bug.h) \ + $(wildcard include/config/debug/bugverbose.h) \ + include/asm-generic/bug.h \ + $(wildcard include/config/generic/bug.h) \ + $(wildcard include/config/generic/bug/relative/pointers.h) \ + include/asm-generic/percpu.h \ + $(wildcard include/config/have/setup/per/cpu/area.h) \ + include/linux/threads.h \ + $(wildcard include/config/nr/cpus.h) \ + $(wildcard include/config/base/small.h) \ + include/linux/percpu-defs.h \ + $(wildcard include/config/debug/force/weak/per/cpu.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/system.h \ + $(wildcard include/config/ia32/emulation.h) \ + $(wildcard include/config/x86/32/lazy/gs.h) \ + $(wildcard include/config/x86/ppro/fence.h) \ + $(wildcard include/config/x86/oostore.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cmpxchg.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cmpxchg_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/nops.h \ + $(wildcard include/config/mk7.h) \ + include/linux/irqflags.h \ + $(wildcard include/config/trace/irqflags.h) \ + $(wildcard include/config/irqsoff/tracer.h) \ + $(wildcard include/config/trace/irqflags/support.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irqflags.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/paravirt.h \ + $(wildcard include/config/transparent/hugepage.h) \ + $(wildcard include/config/paravirt/spinlocks.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/kmemcheck.h) \ + $(wildcard include/config/compat/vdso.h) \ + $(wildcard include/config/proc/fs.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pgtable_64_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/x86/local/apic.h) \ + $(wildcard include/config/paravirt/debug.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/desc_defs.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/kmap_types.h \ + $(wildcard include/config/debug/highmem.h) \ + include/asm-generic/kmap_types.h \ + include/linux/cpumask.h \ + $(wildcard include/config/cpumask/offstack.h) \ + $(wildcard include/config/hotplug/cpu.h) \ + $(wildcard include/config/debug/per/cpu/maps.h) \ + $(wildcard include/config/disable/obsolete/cpumask/functions.h) \ + include/linux/bitmap.h \ + include/linux/string.h \ + $(wildcard include/config/binary/printf.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/string.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/string_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/msr.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/msr-index.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/errno.h \ + include/asm-generic/errno.h \ + include/asm-generic/errno-base.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cpumask.h \ + include/linux/personality.h \ + include/linux/cache.h \ + $(wildcard include/config/arch/has/cache/line/size.h) \ + include/linux/math64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/div64.h \ + include/asm-generic/div64.h \ + include/linux/err.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ftrace.h \ + $(wildcard include/config/function/tracer.h) \ + $(wildcard include/config/dynamic/ftrace.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/atomic.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/atomic64_64.h \ + include/asm-generic/atomic-long.h \ + include/linux/bottom_half.h \ + include/linux/spinlock_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/spinlock_types.h \ + include/linux/lockdep.h \ + $(wildcard include/config/lock/stat.h) \ + $(wildcard include/config/prove/rcu.h) \ + include/linux/rwlock_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/spinlock.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/rwlock.h \ + include/linux/rwlock.h \ + include/linux/spinlock_api_smp.h \ + $(wildcard include/config/inline/spin/lock.h) \ + $(wildcard include/config/inline/spin/lock/bh.h) \ + $(wildcard include/config/inline/spin/lock/irq.h) \ + $(wildcard include/config/inline/spin/lock/irqsave.h) \ + $(wildcard include/config/inline/spin/trylock.h) \ + $(wildcard include/config/inline/spin/trylock/bh.h) \ + $(wildcard include/config/inline/spin/unlock.h) \ + $(wildcard include/config/inline/spin/unlock/bh.h) \ + $(wildcard include/config/inline/spin/unlock/irq.h) \ + $(wildcard include/config/inline/spin/unlock/irqrestore.h) \ + include/linux/rwlock_api_smp.h \ + $(wildcard include/config/inline/read/lock.h) \ + $(wildcard include/config/inline/write/lock.h) \ + $(wildcard include/config/inline/read/lock/bh.h) \ + $(wildcard include/config/inline/write/lock/bh.h) \ + $(wildcard include/config/inline/read/lock/irq.h) \ + $(wildcard include/config/inline/write/lock/irq.h) \ + $(wildcard include/config/inline/read/lock/irqsave.h) \ + $(wildcard include/config/inline/write/lock/irqsave.h) \ + $(wildcard include/config/inline/read/trylock.h) \ + $(wildcard include/config/inline/write/trylock.h) \ + $(wildcard include/config/inline/read/unlock.h) \ + $(wildcard include/config/inline/write/unlock.h) \ + $(wildcard include/config/inline/read/unlock/bh.h) \ + $(wildcard include/config/inline/write/unlock/bh.h) \ + $(wildcard include/config/inline/read/unlock/irq.h) \ + $(wildcard include/config/inline/write/unlock/irq.h) \ + $(wildcard include/config/inline/read/unlock/irqrestore.h) \ + $(wildcard include/config/inline/write/unlock/irqrestore.h) \ + include/linux/kdev_t.h \ + include/linux/dcache.h \ + include/linux/rculist.h \ + include/linux/rcupdate.h \ + $(wildcard include/config/rcu/torture/test.h) \ + $(wildcard include/config/tree/rcu.h) \ + $(wildcard include/config/tree/preempt/rcu.h) \ + $(wildcard include/config/preempt/rcu.h) \ + $(wildcard include/config/no/hz.h) \ + $(wildcard include/config/tiny/rcu.h) \ + $(wildcard include/config/tiny/preempt/rcu.h) \ + $(wildcard include/config/debug/objects/rcu/head.h) \ + $(wildcard include/config/preempt/rt.h) \ + include/linux/seqlock.h \ + include/linux/completion.h \ + include/linux/debugobjects.h \ + $(wildcard include/config/debug/objects.h) \ + $(wildcard include/config/debug/objects/free.h) \ + include/linux/rcutree.h \ + include/linux/rculist_bl.h \ + include/linux/list_bl.h \ + include/linux/bit_spinlock.h \ + include/linux/path.h \ + include/linux/stat.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/stat.h \ + include/linux/time.h \ + $(wildcard include/config/arch/uses/gettimeoffset.h) \ + include/linux/radix-tree.h \ + include/linux/prio_tree.h \ + include/linux/pid.h \ + include/linux/mutex.h \ + $(wildcard include/config/debug/mutexes.h) \ + $(wildcard include/config/have/arch/mutex/cpu/relax.h) \ + include/linux/capability.h \ + include/linux/semaphore.h \ + include/linux/fiemap.h \ + include/linux/quota.h \ + $(wildcard include/config/quota/netlink/interface.h) \ + include/linux/errno.h \ + include/linux/rwsem.h \ + $(wildcard include/config/rwsem/generic/spinlock.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/rwsem.h \ + include/linux/percpu_counter.h \ + include/linux/smp.h \ + $(wildcard include/config/use/generic/smp/helpers.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/smp.h \ + $(wildcard include/config/x86/io/apic.h) \ + $(wildcard include/config/x86/32/smp.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/x86/numaq.h) \ + $(wildcard include/config/mca.h) \ + $(wildcard include/config/eisa.h) \ + $(wildcard include/config/x86/mpparse.h) \ + $(wildcard include/config/acpi.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mpspec_def.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/x86_init.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bootparam.h \ + include/linux/screen_info.h \ + include/linux/apm_bios.h \ + include/linux/edd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/e820.h \ + $(wildcard include/config/nodes/shift.h) \ + $(wildcard include/config/efi.h) \ + $(wildcard include/config/intel/txt.h) \ + $(wildcard include/config/hibernation.h) \ + $(wildcard include/config/memtest.h) \ + include/linux/numa.h \ + include/linux/ioport.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ist.h \ + include/video/edid.h \ + $(wildcard include/config/x86.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/apicdef.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/apic.h \ + $(wildcard include/config/x86/x2apic.h) \ + include/linux/pm.h \ + $(wildcard include/config/pm.h) \ + $(wildcard include/config/pm/sleep.h) \ + $(wildcard include/config/pm/runtime.h) \ + include/linux/workqueue.h \ + $(wildcard include/config/debug/objects/work.h) \ + $(wildcard include/config/freezer.h) \ + include/linux/timer.h \ + $(wildcard include/config/timer/stats.h) \ + $(wildcard include/config/debug/objects/timers.h) \ + include/linux/ktime.h \ + $(wildcard include/config/ktime/scalar.h) \ + include/linux/jiffies.h \ + include/linux/timex.h \ + include/linux/param.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/param.h \ + include/asm-generic/param.h \ + $(wildcard include/config/hz.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/timex.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/tsc.h \ + $(wildcard include/config/x86/tsc.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/provide/ohci1394/dma/init.h) \ + $(wildcard include/config/x86/visws/apic.h) \ + $(wildcard include/config/x86/f00f/bug.h) \ + $(wildcard include/config/x86/cyclone/timer.h) \ + $(wildcard include/config/pci/mmconfig.h) \ + $(wildcard include/config/x86/mrst.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/acpi.h \ + $(wildcard include/config/acpi/numa.h) \ + include/acpi/pdc_intel.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/numa.h \ + $(wildcard include/config/numa/emu.h) \ + include/linux/nodemask.h \ + $(wildcard include/config/highmem.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/topology.h \ + $(wildcard include/config/x86/ht.h) \ + include/asm-generic/topology.h \ + $(wildcard include/config/have/memoryless/nodes.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/numa_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmu.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/trampoline.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/io.h \ + $(wildcard include/config/xen.h) \ + include/xen/xen.h \ + $(wildcard include/config/xen/dom0.h) \ + include/xen/interface/xen.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/interface.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/interface_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pvclock-abi.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/hypervisor.h \ + include/asm-generic/iomap.h \ + include/linux/vmalloc.h \ + $(wildcard include/config/mmu.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vsyscall.h \ + $(wildcard include/config/generic/time.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vvar.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/io_apic.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/sparse/irq.h) \ + include/linux/percpu.h \ + $(wildcard include/config/need/per/cpu/embed/first/chunk.h) \ + $(wildcard include/config/need/per/cpu/page/first/chunk.h) \ + include/linux/pfn.h \ + include/linux/dqblk_xfs.h \ + include/linux/dqblk_v1.h \ + include/linux/dqblk_v2.h \ + include/linux/dqblk_qtree.h \ + include/linux/nfs_fs_i.h \ + include/linux/nfs.h \ + include/linux/sunrpc/msg_prot.h \ + include/linux/inet.h \ + include/linux/fcntl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/fcntl.h \ + include/asm-generic/fcntl.h \ + include/linux/slab.h \ + $(wildcard include/config/slab/debug.h) \ + $(wildcard include/config/failslab.h) \ + $(wildcard include/config/slub.h) \ + $(wildcard include/config/slob.h) \ + $(wildcard include/config/debug/slab.h) \ + $(wildcard include/config/slab.h) \ + include/linux/gfp.h \ + $(wildcard include/config/zone/dma.h) \ + $(wildcard include/config/zone/dma32.h) \ + include/linux/mmzone.h \ + $(wildcard include/config/force/max/zoneorder.h) \ + $(wildcard include/config/memory/hotplug.h) \ + $(wildcard include/config/arch/populates/node/map.h) \ + $(wildcard include/config/flat/node/mem/map.h) \ + $(wildcard include/config/cgroup/mem/res/ctlr.h) \ + $(wildcard include/config/no/bootmem.h) \ + $(wildcard include/config/have/memory/present.h) \ + $(wildcard include/config/need/node/memmap/size.h) \ + $(wildcard include/config/need/multiple/nodes.h) \ + $(wildcard include/config/have/arch/early/pfn/to/nid.h) \ + $(wildcard include/config/sparsemem/extreme.h) \ + $(wildcard include/config/have/arch/pfn/valid.h) \ + $(wildcard include/config/nodes/span/other/nodes.h) \ + $(wildcard include/config/holes/in/zone.h) \ + $(wildcard include/config/arch/has/holes/memorymodel.h) \ + include/linux/pageblock-flags.h \ + $(wildcard include/config/hugetlb/page.h) \ + $(wildcard include/config/hugetlb/page/size/variable.h) \ + include/generated/bounds.h \ + include/linux/memory_hotplug.h \ + $(wildcard include/config/memory/hotremove.h) \ + $(wildcard include/config/have/arch/nodedata/extension.h) \ + include/linux/notifier.h \ + include/linux/srcu.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmzone.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmzone_64.h \ + include/linux/mmdebug.h \ + $(wildcard include/config/debug/vm.h) \ + $(wildcard include/config/debug/virtual.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sparsemem.h \ + include/linux/topology.h \ + $(wildcard include/config/sched/smt.h) \ + $(wildcard include/config/sched/mc.h) \ + $(wildcard include/config/sched/book.h) \ + $(wildcard include/config/use/percpu/numa/node/id.h) \ + include/linux/slub_def.h \ + $(wildcard include/config/slub/stats.h) \ + $(wildcard include/config/slub/debug.h) \ + include/linux/kobject.h \ + include/linux/sysfs.h \ + include/linux/kobject_ns.h \ + include/linux/kref.h \ + include/linux/kmemleak.h \ + $(wildcard include/config/debug/kmemleak.h) \ + include/net/sock.h \ + $(wildcard include/config/net/ns.h) \ + $(wildcard include/config/rps.h) \ + $(wildcard include/config/net/dma.h) \ + $(wildcard include/config/xfrm.h) \ + $(wildcard include/config/cgroups.h) \ + include/linux/list_nulls.h \ + include/linux/module.h \ + $(wildcard include/config/symbol/prefix.h) \ + $(wildcard include/config/modversions.h) \ + $(wildcard include/config/unused/symbols.h) \ + $(wildcard include/config/kallsyms.h) \ + $(wildcard include/config/tracepoints.h) \ + $(wildcard include/config/event/tracing.h) \ + $(wildcard include/config/module/unload.h) \ + $(wildcard include/config/constructors.h) \ + $(wildcard include/config/debug/set/module/ronx.h) \ + include/linux/kmod.h \ + include/linux/sysctl.h \ + include/linux/elf.h \ + include/linux/elf-em.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/elf.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/user.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/user_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/auxvec.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vdso.h \ + include/linux/moduleparam.h \ + $(wildcard include/config/alpha.h) \ + $(wildcard include/config/ia64.h) \ + $(wildcard include/config/ppc64.h) \ + include/linux/tracepoint.h \ + include/linux/jump_label.h \ + $(wildcard include/config/jump/label.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/jump_label.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/module.h \ + $(wildcard include/config/m586.h) \ + $(wildcard include/config/m586tsc.h) \ + $(wildcard include/config/m586mmx.h) \ + $(wildcard include/config/mcore2.h) \ + $(wildcard include/config/matom.h) \ + $(wildcard include/config/m686.h) \ + $(wildcard include/config/mpentiumii.h) \ + $(wildcard include/config/mpentiumiii.h) \ + $(wildcard include/config/mpentiumm.h) \ + $(wildcard include/config/mpentium4.h) \ + $(wildcard include/config/mk6.h) \ + $(wildcard include/config/mk8.h) \ + $(wildcard include/config/melan.h) \ + $(wildcard include/config/mcrusoe.h) \ + $(wildcard include/config/mefficeon.h) \ + $(wildcard include/config/mwinchipc6.h) \ + $(wildcard include/config/mwinchip3d.h) \ + $(wildcard include/config/mcyrixiii.h) \ + $(wildcard include/config/mviac3/2.h) \ + $(wildcard include/config/mviac7.h) \ + $(wildcard include/config/mgeodegx1.h) \ + $(wildcard include/config/mgeode/lx.h) \ + include/asm-generic/module.h \ + include/trace/events/module.h \ + include/trace/define_trace.h \ + include/linux/netdevice.h \ + $(wildcard include/config/dcb.h) \ + $(wildcard include/config/wlan.h) \ + $(wildcard include/config/ax25.h) \ + $(wildcard include/config/mac80211/mesh.h) \ + $(wildcard include/config/tr.h) \ + $(wildcard include/config/net/ipip.h) \ + $(wildcard include/config/net/ipgre.h) \ + $(wildcard include/config/ipv6/sit.h) \ + $(wildcard include/config/ipv6/tunnel.h) \ + $(wildcard include/config/netpoll.h) \ + $(wildcard include/config/xps.h) \ + $(wildcard include/config/rfs/accel.h) \ + $(wildcard include/config/net/poll/controller.h) \ + $(wildcard include/config/fcoe.h) \ + $(wildcard include/config/wireless/ext.h) \ + $(wildcard include/config/vlan/8021q.h) \ + $(wildcard include/config/net/dsa.h) \ + $(wildcard include/config/net/dsa/tag/dsa.h) \ + $(wildcard include/config/net/dsa/tag/trailer.h) \ + $(wildcard include/config/netpoll/trap.h) \ + include/linux/if.h \ + include/linux/socket.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/socket.h \ + include/asm-generic/socket.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sockios.h \ + include/asm-generic/sockios.h \ + include/linux/sockios.h \ + include/linux/uio.h \ + include/linux/hdlc/ioctl.h \ + include/linux/if_ether.h \ + include/linux/skbuff.h \ + $(wildcard include/config/nf/conntrack.h) \ + $(wildcard include/config/bridge/netfilter.h) \ + $(wildcard include/config/nf/defrag/ipv4.h) \ + $(wildcard include/config/nf/defrag/ipv6.h) \ + $(wildcard include/config/net/sched.h) \ + $(wildcard include/config/net/cls/act.h) \ + $(wildcard include/config/ipv6/ndisc/nodetype.h) \ + $(wildcard include/config/network/secmark.h) \ + $(wildcard include/config/network/phy/timestamping.h) \ + include/linux/kmemcheck.h \ + include/linux/mm_types.h \ + $(wildcard include/config/split/ptlock/cpus.h) \ + $(wildcard include/config/want/page/debug/flags.h) \ + $(wildcard include/config/aio.h) \ + $(wildcard include/config/mm/owner.h) \ + $(wildcard include/config/mmu/notifier.h) \ + include/linux/auxvec.h \ + include/linux/rbtree.h \ + include/linux/page-debug-flags.h \ + $(wildcard include/config/page/poisoning.h) \ + $(wildcard include/config/page/debug/something/else.h) \ + include/linux/net.h \ + include/linux/random.h \ + include/linux/irqnr.h \ + $(wildcard include/config/generic/hardirqs.h) \ + include/linux/textsearch.h \ + include/net/checksum.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/x86/wp/works/ok.h) \ + $(wildcard include/config/x86/intel/usercopy.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/uaccess_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/checksum.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/checksum_64.h \ + include/linux/dmaengine.h \ + $(wildcard include/config/async/tx/enable/channel/switch.h) \ + $(wildcard include/config/dma/engine.h) \ + $(wildcard include/config/async/tx/dma.h) \ + include/linux/device.h \ + $(wildcard include/config/debug/devres.h) \ + $(wildcard include/config/devtmpfs.h) \ + $(wildcard include/config/sysfs/deprecated.h) \ + include/linux/klist.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/device.h \ + $(wildcard include/config/dmar.h) \ + $(wildcard include/config/amd/iommu.h) \ + include/linux/pm_wakeup.h \ + include/linux/dma-mapping.h \ + $(wildcard include/config/has/dma.h) \ + $(wildcard include/config/have/dma/attrs.h) \ + $(wildcard include/config/need/dma/map/state.h) \ + include/linux/dma-attrs.h \ + include/linux/bug.h \ + include/linux/scatterlist.h \ + $(wildcard include/config/debug/sg.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/scatterlist.h \ + include/asm-generic/scatterlist.h \ + $(wildcard include/config/need/sg/dma/length.h) \ + include/linux/mm.h \ + $(wildcard include/config/sysctl.h) \ + $(wildcard include/config/stack/growsup.h) \ + $(wildcard include/config/ksm.h) \ + $(wildcard include/config/debug/pagealloc.h) \ + $(wildcard include/config/hugetlbfs.h) \ + include/linux/debug_locks.h \ + $(wildcard include/config/debug/locking/api/selftests.h) \ + include/linux/range.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pgtable.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pgtable_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pgtable_64_types.h \ + include/asm-generic/pgtable.h \ + include/linux/page-flags.h \ + $(wildcard include/config/pageflags/extended.h) \ + $(wildcard include/config/arch/uses/pg/uncached.h) \ + $(wildcard include/config/memory/failure.h) \ + $(wildcard include/config/swap.h) \ + $(wildcard include/config/s390.h) \ + include/linux/huge_mm.h \ + include/linux/vmstat.h \ + $(wildcard include/config/vm/event/counters.h) \ + include/linux/vm_event_item.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/dma-mapping.h \ + $(wildcard include/config/isa.h) \ + include/linux/dma-debug.h \ + $(wildcard include/config/dma/api/debug.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/swiotlb.h \ + $(wildcard include/config/swiotlb.h) \ + include/linux/swiotlb.h \ + include/asm-generic/dma-coherent.h \ + $(wildcard include/config/have/generic/dma/coherent.h) \ + include/asm-generic/dma-mapping-common.h \ + include/linux/hrtimer.h \ + $(wildcard include/config/high/res/timers.h) \ + $(wildcard include/config/timerfd.h) \ + include/linux/timerqueue.h \ + include/linux/if_packet.h \ + include/linux/if_link.h \ + include/linux/netlink.h \ + include/linux/pm_qos_params.h \ + include/linux/plist.h \ + $(wildcard include/config/debug/pi/list.h) \ + include/linux/miscdevice.h \ + include/linux/major.h \ + include/linux/delay.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/delay.h \ + include/linux/ethtool.h \ + include/linux/compat.h \ + $(wildcard include/config/nfsd.h) \ + $(wildcard include/config/nfsd/deprecated.h) \ + include/linux/sem.h \ + $(wildcard include/config/sysvipc.h) \ + include/linux/ipc.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ipcbuf.h \ + include/asm-generic/ipcbuf.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sembuf.h \ + include/linux/aio_abi.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/compat.h \ + include/linux/sched.h \ + $(wildcard include/config/sched/debug.h) \ + $(wildcard include/config/lockup/detector.h) \ + $(wildcard include/config/detect/hung/task.h) \ + $(wildcard include/config/core/dump/default/elf/headers.h) \ + $(wildcard include/config/sched/autogroup.h) \ + $(wildcard include/config/virt/cpu/accounting.h) \ + $(wildcard include/config/bsd/process/acct.h) \ + $(wildcard include/config/taskstats.h) \ + $(wildcard include/config/audit.h) \ + $(wildcard include/config/inotify/user.h) \ + $(wildcard include/config/fanotify.h) \ + $(wildcard include/config/posix/mqueue.h) \ + $(wildcard include/config/keys.h) \ + $(wildcard include/config/perf/events.h) \ + $(wildcard include/config/schedstats.h) \ + $(wildcard include/config/task/delay/acct.h) \ + $(wildcard include/config/fair/group/sched.h) \ + $(wildcard include/config/rt/group/sched.h) \ + $(wildcard include/config/blk/dev/io/trace.h) \ + $(wildcard include/config/rcu/boost.h) \ + $(wildcard include/config/compat/brk.h) \ + $(wildcard include/config/rt/mutexes.h) \ + $(wildcard include/config/task/xacct.h) \ + $(wildcard include/config/cpusets.h) \ + $(wildcard include/config/futex.h) \ + $(wildcard include/config/fault/injection.h) \ + $(wildcard include/config/latencytop.h) \ + $(wildcard include/config/function/graph/tracer.h) \ + $(wildcard include/config/have/hw/breakpoint.h) \ + $(wildcard include/config/have/unstable/sched/clock.h) \ + $(wildcard include/config/irq/time/accounting.h) \ + $(wildcard include/config/cgroup/sched.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cputime.h \ + include/asm-generic/cputime.h \ + include/linux/signal.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/signal.h \ + include/asm-generic/signal-defs.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/siginfo.h \ + include/asm-generic/siginfo.h \ + include/linux/proportions.h \ + include/linux/seccomp.h \ + $(wildcard include/config/seccomp.h) \ + $(wildcard include/config/seccomp/filter.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/seccomp.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/seccomp_64.h \ + include/linux/unistd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/unistd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/unistd_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/asm-offsets.h \ + include/generated/asm-offsets.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ia32_unistd.h \ + include/linux/rtmutex.h \ + $(wildcard include/config/debug/rt/mutexes.h) \ + include/linux/resource.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/resource.h \ + include/asm-generic/resource.h \ + include/linux/task_io_accounting.h \ + $(wildcard include/config/task/io/accounting.h) \ + include/linux/latencytop.h \ + include/linux/cred.h \ + $(wildcard include/config/debug/credentials.h) \ + $(wildcard include/config/user/ns.h) \ + include/linux/key.h \ + include/linux/selinux.h \ + $(wildcard include/config/security/selinux.h) \ + include/linux/aio.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/user32.h \ + include/net/net_namespace.h \ + $(wildcard include/config/ipv6.h) \ + $(wildcard include/config/ip/dccp.h) \ + $(wildcard include/config/netfilter.h) \ + $(wildcard include/config/wext/core.h) \ + $(wildcard include/config/net.h) \ + include/net/netns/core.h \ + include/net/netns/mib.h \ + $(wildcard include/config/xfrm/statistics.h) \ + include/net/snmp.h \ + include/linux/snmp.h \ + include/linux/u64_stats_sync.h \ + include/net/netns/unix.h \ + include/net/netns/packet.h \ + include/net/netns/ipv4.h \ + $(wildcard include/config/ip/multiple/tables.h) \ + $(wildcard include/config/ip/mroute.h) \ + $(wildcard include/config/ip/mroute/multiple/tables.h) \ + include/net/inet_frag.h \ + include/net/netns/ipv6.h \ + $(wildcard include/config/ipv6/multiple/tables.h) \ + $(wildcard include/config/ipv6/mroute.h) \ + $(wildcard include/config/ipv6/mroute/multiple/tables.h) \ + include/net/dst_ops.h \ + include/net/netns/dccp.h \ + include/net/netns/x_tables.h \ + $(wildcard include/config/bridge/nf/ebtables.h) \ + include/linux/netfilter.h \ + $(wildcard include/config/netfilter/debug.h) \ + $(wildcard include/config/nf/nat/needed.h) \ + include/linux/in.h \ + include/linux/in6.h \ + include/net/flow.h \ + include/linux/proc_fs.h \ + $(wildcard include/config/proc/devicetree.h) \ + $(wildcard include/config/proc/kcore.h) \ + include/linux/magic.h \ + include/net/netns/conntrack.h \ + include/net/netns/xfrm.h \ + include/linux/xfrm.h \ + include/linux/seq_file_net.h \ + include/linux/seq_file.h \ + include/net/dsa.h \ + include/net/dcbnl.h \ + include/linux/dcbnl.h \ + include/linux/interrupt.h \ + $(wildcard include/config/irq/forced/threading.h) \ + $(wildcard include/config/generic/irq/probe.h) \ + include/linux/irqreturn.h \ + include/linux/hardirq.h \ + include/linux/ftrace_irq.h \ + $(wildcard include/config/ftrace/nmi/enter.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/hardirq.h \ + $(wildcard include/config/x86/thermal/vector.h) \ + $(wildcard include/config/x86/mce/threshold.h) \ + include/linux/irq.h \ + $(wildcard include/config/irq/release/method.h) \ + $(wildcard include/config/generic/pending/irq.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq_regs.h \ + include/linux/irqdesc.h \ + $(wildcard include/config/irq/preflow/fasteoi.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/hw_irq.h \ + $(wildcard include/config/intr/remap.h) \ + include/linux/profile.h \ + $(wildcard include/config/profiling.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sections.h \ + $(wildcard include/config/debug/rodata.h) \ + include/asm-generic/sections.h \ + include/trace/events/irq.h \ + include/linux/security.h \ + $(wildcard include/config/security/path.h) \ + $(wildcard include/config/security/network.h) \ + $(wildcard include/config/security/network/xfrm.h) \ + $(wildcard include/config/securityfs.h) \ + include/linux/fsnotify.h \ + include/linux/fsnotify_backend.h \ + $(wildcard include/config/fanotify/access/permissions.h) \ + include/linux/idr.h \ + include/linux/audit.h \ + $(wildcard include/config/change.h) \ + include/linux/binfmts.h \ + include/linux/shm.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/shmparam.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/shmbuf.h \ + include/asm-generic/shmbuf.h \ + include/linux/msg.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/msgbuf.h \ + include/asm-generic/msgbuf.h \ + include/linux/uaccess.h \ + include/linux/filter.h \ + $(wildcard include/config/bpf/jit.h) \ + include/linux/rculist_nulls.h \ + include/linux/poll.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/poll.h \ + include/asm-generic/poll.h \ + include/linux/atomic.h \ + $(wildcard include/config/arch/has/atomic/or.h) \ + include/net/dst.h \ + $(wildcard include/config/ip/route/classid.h) \ + include/linux/rtnetlink.h \ + include/linux/if_addr.h \ + include/linux/neighbour.h \ + include/net/neighbour.h \ + include/net/rtnetlink.h \ + include/net/netlink.h \ + /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_common.h \ + include/linux/usb.h \ + $(wildcard include/config/usb/devicefs.h) \ + $(wildcard include/config/usb/mon.h) \ + $(wildcard include/config/usb/device/class.h) \ + $(wildcard include/config/usb/suspend.h) \ + include/linux/mod_devicetable.h \ + include/linux/usb/ch9.h \ + $(wildcard include/config/size.h) \ + $(wildcard include/config/att/one.h) \ + $(wildcard include/config/att/selfpower.h) \ + $(wildcard include/config/att/wakeup.h) \ + $(wildcard include/config/att/battery.h) \ + include/linux/pm_runtime.h \ + $(wildcard include/config/pm/runtime/clk.h) \ + $(wildcard include/config/have/clk.h) \ + +/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_common.o: $(deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_common.o) + +$(deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_common.o): diff --git a/modules/hp2101nw/usbip/.hp2101nw_event.o.cmd b/modules/hp2101nw/usbip/.hp2101nw_event.o.cmd new file mode 100644 index 0000000..7ed02d5 --- /dev/null +++ b/modules/hp2101nw/usbip/.hp2101nw_event.o.cmd @@ -0,0 +1,684 @@ +cmd_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_event.o := gcc -Wp,-MD,/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/.hp2101nw_event.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include -I/usr/src/linux-headers-3.0.0-16-generic/arch/x86/include -Iarch/x86/include/generated -Iinclude -include include/generated/autoconf.h -Iubuntu/include -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m64 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=1024 -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -DHCD_HEADER=\"/usr/src/linux-headers-3.0.0-16-generic/include/linux/usb/hcd.h\" -DMODULE -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(hp2101nw_event)" -D"KBUILD_MODNAME=KBUILD_STR(hp2101nw)" -c -o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/.tmp_hp2101nw_event.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_event.c + +source_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_event.o := /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_event.c + +deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_event.o := \ + include/linux/kthread.h \ + $(wildcard include/config/lockdep.h) \ + include/linux/err.h \ + include/linux/compiler.h \ + $(wildcard include/config/sparse/rcu/pointer.h) \ + $(wildcard include/config/trace/branch/profiling.h) \ + $(wildcard include/config/profile/all/branches.h) \ + $(wildcard include/config/enable/must/check.h) \ + $(wildcard include/config/enable/warn/deprecated.h) \ + include/linux/compiler-gcc.h \ + $(wildcard include/config/arch/supports/optimized/inlining.h) \ + $(wildcard include/config/optimize/inlining.h) \ + include/linux/compiler-gcc4.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/errno.h \ + include/asm-generic/errno.h \ + include/asm-generic/errno-base.h \ + include/linux/sched.h \ + $(wildcard include/config/sched/debug.h) \ + $(wildcard include/config/prove/rcu.h) \ + $(wildcard include/config/smp.h) \ + $(wildcard include/config/no/hz.h) \ + $(wildcard include/config/lockup/detector.h) \ + $(wildcard include/config/detect/hung/task.h) \ + $(wildcard include/config/mmu.h) \ + $(wildcard include/config/core/dump/default/elf/headers.h) \ + $(wildcard include/config/sched/autogroup.h) \ + $(wildcard include/config/virt/cpu/accounting.h) \ + $(wildcard include/config/bsd/process/acct.h) \ + $(wildcard include/config/taskstats.h) \ + $(wildcard include/config/audit.h) \ + $(wildcard include/config/cgroups.h) \ + $(wildcard include/config/inotify/user.h) \ + $(wildcard include/config/fanotify.h) \ + $(wildcard include/config/epoll.h) \ + $(wildcard include/config/posix/mqueue.h) \ + $(wildcard include/config/keys.h) \ + $(wildcard include/config/perf/events.h) \ + $(wildcard include/config/schedstats.h) \ + $(wildcard include/config/task/delay/acct.h) \ + $(wildcard include/config/fair/group/sched.h) \ + $(wildcard include/config/rt/group/sched.h) \ + $(wildcard include/config/preempt/notifiers.h) \ + $(wildcard include/config/blk/dev/io/trace.h) \ + $(wildcard include/config/preempt/rcu.h) \ + $(wildcard include/config/rcu/boost.h) \ + $(wildcard include/config/tree/preempt/rcu.h) \ + $(wildcard include/config/compat/brk.h) \ + $(wildcard include/config/cc/stackprotector.h) \ + $(wildcard include/config/sysvipc.h) \ + $(wildcard include/config/auditsyscall.h) \ + $(wildcard include/config/generic/hardirqs.h) \ + $(wildcard include/config/rt/mutexes.h) \ + $(wildcard include/config/debug/mutexes.h) \ + $(wildcard include/config/trace/irqflags.h) \ + $(wildcard include/config/block.h) \ + $(wildcard include/config/task/xacct.h) \ + $(wildcard include/config/cpusets.h) \ + $(wildcard include/config/futex.h) \ + $(wildcard include/config/compat.h) \ + $(wildcard include/config/numa.h) \ + $(wildcard include/config/fault/injection.h) \ + $(wildcard include/config/latencytop.h) \ + $(wildcard include/config/function/graph/tracer.h) \ + $(wildcard include/config/tracing.h) \ + $(wildcard include/config/cgroup/mem/res/ctlr.h) \ + $(wildcard include/config/have/hw/breakpoint.h) \ + $(wildcard include/config/cpumask/offstack.h) \ + $(wildcard include/config/have/unstable/sched/clock.h) \ + $(wildcard include/config/irq/time/accounting.h) \ + $(wildcard include/config/hotplug/cpu.h) \ + $(wildcard include/config/proc/fs.h) \ + $(wildcard include/config/stack/growsup.h) \ + $(wildcard include/config/debug/stack/usage.h) \ + $(wildcard include/config/preempt.h) \ + $(wildcard include/config/cgroup/sched.h) \ + $(wildcard include/config/mm/owner.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/param.h \ + include/asm-generic/param.h \ + $(wildcard include/config/hz.h) \ + include/linux/capability.h \ + include/linux/types.h \ + $(wildcard include/config/uid16.h) \ + $(wildcard include/config/lbdaf.h) \ + $(wildcard include/config/arch/dma/addr/t/64bit.h) \ + $(wildcard include/config/phys/addr/t/64bit.h) \ + $(wildcard include/config/64bit.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/types.h \ + include/asm-generic/types.h \ + include/asm-generic/int-ll64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bitsperlong.h \ + include/asm-generic/bitsperlong.h \ + include/linux/posix_types.h \ + include/linux/stddef.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/x86/32.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/posix_types_64.h \ + include/linux/threads.h \ + $(wildcard include/config/nr/cpus.h) \ + $(wildcard include/config/base/small.h) \ + include/linux/kernel.h \ + $(wildcard include/config/preempt/voluntary.h) \ + $(wildcard include/config/debug/spinlock/sleep.h) \ + $(wildcard include/config/prove/locking.h) \ + $(wildcard include/config/ring/buffer.h) \ + $(wildcard include/config/compaction.h) \ + $(wildcard include/config/ftrace/mcount/record.h) \ + /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stdarg.h \ + include/linux/linkage.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/x86/64.h) \ + $(wildcard include/config/x86/alignment/16.h) \ + include/linux/stringify.h \ + include/linux/bitops.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bitops.h \ + $(wildcard include/config/x86/cmov.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/alternative.h \ + $(wildcard include/config/paravirt.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/asm.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cpufeature.h \ + $(wildcard include/config/x86/invlpg.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/required-features.h \ + $(wildcard include/config/x86/minimum/cpu/family.h) \ + $(wildcard include/config/math/emulation.h) \ + $(wildcard include/config/x86/pae.h) \ + $(wildcard include/config/x86/cmpxchg64.h) \ + $(wildcard include/config/x86/use/3dnow.h) \ + $(wildcard include/config/x86/p6/nop.h) \ + include/asm-generic/bitops/find.h \ + $(wildcard include/config/generic/find/first/bit.h) \ + include/asm-generic/bitops/sched.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/arch_hweight.h \ + include/asm-generic/bitops/const_hweight.h \ + include/asm-generic/bitops/fls64.h \ + include/asm-generic/bitops/le.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/byteorder.h \ + include/linux/byteorder/little_endian.h \ + include/linux/swab.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/swab.h \ + $(wildcard include/config/x86/bswap.h) \ + include/linux/byteorder/generic.h \ + include/linux/log2.h \ + $(wildcard include/config/arch/has/ilog2/u32.h) \ + $(wildcard include/config/arch/has/ilog2/u64.h) \ + include/linux/typecheck.h \ + include/linux/printk.h \ + $(wildcard include/config/printk.h) \ + $(wildcard include/config/dynamic/debug.h) \ + include/linux/init.h \ + $(wildcard include/config/modules.h) \ + $(wildcard include/config/hotplug.h) \ + include/linux/dynamic_debug.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bug.h \ + $(wildcard include/config/bug.h) \ + $(wildcard include/config/debug/bugverbose.h) \ + include/asm-generic/bug.h \ + $(wildcard include/config/generic/bug.h) \ + $(wildcard include/config/generic/bug/relative/pointers.h) \ + include/linux/timex.h \ + include/linux/time.h \ + $(wildcard include/config/arch/uses/gettimeoffset.h) \ + include/linux/cache.h \ + $(wildcard include/config/arch/has/cache/line/size.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cache.h \ + $(wildcard include/config/x86/l1/cache/shift.h) \ + $(wildcard include/config/x86/internode/cache/shift.h) \ + $(wildcard include/config/x86/vsmp.h) \ + include/linux/seqlock.h \ + include/linux/spinlock.h \ + $(wildcard include/config/debug/spinlock.h) \ + $(wildcard include/config/generic/lockbreak.h) \ + $(wildcard include/config/debug/lock/alloc.h) \ + include/linux/preempt.h \ + $(wildcard include/config/debug/preempt.h) \ + $(wildcard include/config/preempt/tracer.h) \ + include/linux/thread_info.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/thread_info.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_types.h \ + include/linux/const.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/physical/start.h) \ + $(wildcard include/config/physical/align.h) \ + $(wildcard include/config/flatmem.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_64.h \ + include/asm-generic/memory_model.h \ + $(wildcard include/config/discontigmem.h) \ + $(wildcard include/config/sparsemem/vmemmap.h) \ + $(wildcard include/config/sparsemem.h) \ + include/asm-generic/getorder.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/processor.h \ + $(wildcard include/config/m386.h) \ + $(wildcard include/config/m486.h) \ + $(wildcard include/config/x86/debugctlmsr.h) \ + $(wildcard include/config/cpu/sup/amd.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/vm86.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vm86.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ptrace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ptrace-abi.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/segment.h \ + include/asm-generic/ptrace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/math_emu.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sigcontext.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/current.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/percpu.h \ + $(wildcard include/config/x86/64/smp.h) \ + include/asm-generic/percpu.h \ + $(wildcard include/config/have/setup/per/cpu/area.h) \ + include/linux/percpu-defs.h \ + $(wildcard include/config/debug/force/weak/per/cpu.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/system.h \ + $(wildcard include/config/ia32/emulation.h) \ + $(wildcard include/config/x86/32/lazy/gs.h) \ + $(wildcard include/config/x86/ppro/fence.h) \ + $(wildcard include/config/x86/oostore.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cmpxchg.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cmpxchg_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/nops.h \ + $(wildcard include/config/mk7.h) \ + include/linux/irqflags.h \ + $(wildcard include/config/irqsoff/tracer.h) \ + $(wildcard include/config/trace/irqflags/support.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irqflags.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/paravirt.h \ + $(wildcard include/config/transparent/hugepage.h) \ + $(wildcard include/config/paravirt/spinlocks.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/kmemcheck.h) \ + $(wildcard include/config/compat/vdso.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pgtable_64_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/x86/local/apic.h) \ + $(wildcard include/config/paravirt/debug.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/desc_defs.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/kmap_types.h \ + $(wildcard include/config/debug/highmem.h) \ + include/asm-generic/kmap_types.h \ + include/linux/cpumask.h \ + $(wildcard include/config/debug/per/cpu/maps.h) \ + $(wildcard include/config/disable/obsolete/cpumask/functions.h) \ + include/linux/bitmap.h \ + include/linux/string.h \ + $(wildcard include/config/binary/printf.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/string.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/string_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/msr.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/msr-index.h \ + include/linux/ioctl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ioctl.h \ + include/asm-generic/ioctl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cpumask.h \ + include/linux/personality.h \ + include/linux/math64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/div64.h \ + include/asm-generic/div64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ftrace.h \ + $(wildcard include/config/function/tracer.h) \ + $(wildcard include/config/dynamic/ftrace.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/atomic.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/atomic64_64.h \ + include/asm-generic/atomic-long.h \ + include/linux/list.h \ + $(wildcard include/config/debug/list.h) \ + include/linux/poison.h \ + $(wildcard include/config/illegal/pointer/value.h) \ + include/linux/bottom_half.h \ + include/linux/spinlock_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/spinlock_types.h \ + include/linux/lockdep.h \ + $(wildcard include/config/lock/stat.h) \ + include/linux/rwlock_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/spinlock.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/rwlock.h \ + include/linux/rwlock.h \ + include/linux/spinlock_api_smp.h \ + $(wildcard include/config/inline/spin/lock.h) \ + $(wildcard include/config/inline/spin/lock/bh.h) \ + $(wildcard include/config/inline/spin/lock/irq.h) \ + $(wildcard include/config/inline/spin/lock/irqsave.h) \ + $(wildcard include/config/inline/spin/trylock.h) \ + $(wildcard include/config/inline/spin/trylock/bh.h) \ + $(wildcard include/config/inline/spin/unlock.h) \ + $(wildcard include/config/inline/spin/unlock/bh.h) \ + $(wildcard include/config/inline/spin/unlock/irq.h) \ + $(wildcard include/config/inline/spin/unlock/irqrestore.h) \ + include/linux/rwlock_api_smp.h \ + $(wildcard include/config/inline/read/lock.h) \ + $(wildcard include/config/inline/write/lock.h) \ + $(wildcard include/config/inline/read/lock/bh.h) \ + $(wildcard include/config/inline/write/lock/bh.h) \ + $(wildcard include/config/inline/read/lock/irq.h) \ + $(wildcard include/config/inline/write/lock/irq.h) \ + $(wildcard include/config/inline/read/lock/irqsave.h) \ + $(wildcard include/config/inline/write/lock/irqsave.h) \ + $(wildcard include/config/inline/read/trylock.h) \ + $(wildcard include/config/inline/write/trylock.h) \ + $(wildcard include/config/inline/read/unlock.h) \ + $(wildcard include/config/inline/write/unlock.h) \ + $(wildcard include/config/inline/read/unlock/bh.h) \ + $(wildcard include/config/inline/write/unlock/bh.h) \ + $(wildcard include/config/inline/read/unlock/irq.h) \ + $(wildcard include/config/inline/write/unlock/irq.h) \ + $(wildcard include/config/inline/read/unlock/irqrestore.h) \ + $(wildcard include/config/inline/write/unlock/irqrestore.h) \ + include/linux/param.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/timex.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/tsc.h \ + $(wildcard include/config/x86/tsc.h) \ + include/linux/jiffies.h \ + include/linux/rbtree.h \ + include/linux/errno.h \ + include/linux/nodemask.h \ + $(wildcard include/config/highmem.h) \ + include/linux/numa.h \ + $(wildcard include/config/nodes/shift.h) \ + include/linux/mm_types.h \ + $(wildcard include/config/split/ptlock/cpus.h) \ + $(wildcard include/config/want/page/debug/flags.h) \ + $(wildcard include/config/aio.h) \ + $(wildcard include/config/mmu/notifier.h) \ + include/linux/auxvec.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/auxvec.h \ + include/linux/prio_tree.h \ + include/linux/rwsem.h \ + $(wildcard include/config/rwsem/generic/spinlock.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/rwsem.h \ + include/linux/completion.h \ + include/linux/wait.h \ + include/linux/page-debug-flags.h \ + $(wildcard include/config/page/poisoning.h) \ + $(wildcard include/config/page/debug/something/else.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmu.h \ + include/linux/mutex.h \ + $(wildcard include/config/have/arch/mutex/cpu/relax.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cputime.h \ + include/asm-generic/cputime.h \ + include/linux/smp.h \ + $(wildcard include/config/use/generic/smp/helpers.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/smp.h \ + $(wildcard include/config/x86/io/apic.h) \ + $(wildcard include/config/x86/32/smp.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/x86/numaq.h) \ + $(wildcard include/config/mca.h) \ + $(wildcard include/config/eisa.h) \ + $(wildcard include/config/x86/mpparse.h) \ + $(wildcard include/config/acpi.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mpspec_def.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/x86_init.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bootparam.h \ + include/linux/screen_info.h \ + include/linux/apm_bios.h \ + include/linux/edd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/e820.h \ + $(wildcard include/config/efi.h) \ + $(wildcard include/config/intel/txt.h) \ + $(wildcard include/config/hibernation.h) \ + $(wildcard include/config/memtest.h) \ + include/linux/ioport.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ist.h \ + include/video/edid.h \ + $(wildcard include/config/x86.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/apicdef.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/apic.h \ + $(wildcard include/config/x86/x2apic.h) \ + include/linux/pm.h \ + $(wildcard include/config/pm.h) \ + $(wildcard include/config/pm/sleep.h) \ + $(wildcard include/config/pm/runtime.h) \ + include/linux/workqueue.h \ + $(wildcard include/config/debug/objects/work.h) \ + $(wildcard include/config/freezer.h) \ + include/linux/timer.h \ + $(wildcard include/config/timer/stats.h) \ + $(wildcard include/config/debug/objects/timers.h) \ + include/linux/ktime.h \ + $(wildcard include/config/ktime/scalar.h) \ + include/linux/debugobjects.h \ + $(wildcard include/config/debug/objects.h) \ + $(wildcard include/config/debug/objects/free.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/provide/ohci1394/dma/init.h) \ + $(wildcard include/config/x86/visws/apic.h) \ + $(wildcard include/config/x86/f00f/bug.h) \ + $(wildcard include/config/x86/cyclone/timer.h) \ + $(wildcard include/config/pci/mmconfig.h) \ + $(wildcard include/config/x86/mrst.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/acpi.h \ + $(wildcard include/config/acpi/numa.h) \ + include/acpi/pdc_intel.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/numa.h \ + $(wildcard include/config/numa/emu.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/topology.h \ + $(wildcard include/config/x86/ht.h) \ + include/asm-generic/topology.h \ + $(wildcard include/config/have/memoryless/nodes.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/numa_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/trampoline.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/io.h \ + $(wildcard include/config/xen.h) \ + include/xen/xen.h \ + $(wildcard include/config/xen/dom0.h) \ + include/xen/interface/xen.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/interface.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/interface_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pvclock-abi.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/hypervisor.h \ + include/asm-generic/iomap.h \ + include/linux/vmalloc.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vsyscall.h \ + $(wildcard include/config/generic/time.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vvar.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/io_apic.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/sparse/irq.h) \ + include/linux/sem.h \ + include/linux/ipc.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ipcbuf.h \ + include/asm-generic/ipcbuf.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sembuf.h \ + include/linux/rcupdate.h \ + $(wildcard include/config/rcu/torture/test.h) \ + $(wildcard include/config/tree/rcu.h) \ + $(wildcard include/config/tiny/rcu.h) \ + $(wildcard include/config/tiny/preempt/rcu.h) \ + $(wildcard include/config/debug/objects/rcu/head.h) \ + $(wildcard include/config/preempt/rt.h) \ + include/linux/rcutree.h \ + include/linux/signal.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/signal.h \ + include/asm-generic/signal-defs.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/siginfo.h \ + include/asm-generic/siginfo.h \ + include/linux/pid.h \ + include/linux/percpu.h \ + $(wildcard include/config/need/per/cpu/embed/first/chunk.h) \ + $(wildcard include/config/need/per/cpu/page/first/chunk.h) \ + include/linux/pfn.h \ + include/linux/topology.h \ + $(wildcard include/config/sched/smt.h) \ + $(wildcard include/config/sched/mc.h) \ + $(wildcard include/config/sched/book.h) \ + $(wildcard include/config/use/percpu/numa/node/id.h) \ + include/linux/mmzone.h \ + $(wildcard include/config/force/max/zoneorder.h) \ + $(wildcard include/config/zone/dma.h) \ + $(wildcard include/config/zone/dma32.h) \ + $(wildcard include/config/memory/hotplug.h) \ + $(wildcard include/config/arch/populates/node/map.h) \ + $(wildcard include/config/flat/node/mem/map.h) \ + $(wildcard include/config/no/bootmem.h) \ + $(wildcard include/config/have/memory/present.h) \ + $(wildcard include/config/need/node/memmap/size.h) \ + $(wildcard include/config/need/multiple/nodes.h) \ + $(wildcard include/config/have/arch/early/pfn/to/nid.h) \ + $(wildcard include/config/sparsemem/extreme.h) \ + $(wildcard include/config/have/arch/pfn/valid.h) \ + $(wildcard include/config/nodes/span/other/nodes.h) \ + $(wildcard include/config/holes/in/zone.h) \ + $(wildcard include/config/arch/has/holes/memorymodel.h) \ + include/linux/pageblock-flags.h \ + $(wildcard include/config/hugetlb/page.h) \ + $(wildcard include/config/hugetlb/page/size/variable.h) \ + include/generated/bounds.h \ + include/linux/memory_hotplug.h \ + $(wildcard include/config/memory/hotremove.h) \ + $(wildcard include/config/have/arch/nodedata/extension.h) \ + include/linux/notifier.h \ + include/linux/srcu.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmzone.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmzone_64.h \ + include/linux/mmdebug.h \ + $(wildcard include/config/debug/vm.h) \ + $(wildcard include/config/debug/virtual.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sparsemem.h \ + include/linux/proportions.h \ + include/linux/percpu_counter.h \ + include/linux/seccomp.h \ + $(wildcard include/config/seccomp.h) \ + $(wildcard include/config/seccomp/filter.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/seccomp.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/seccomp_64.h \ + include/linux/unistd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/unistd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/unistd_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/asm-offsets.h \ + include/generated/asm-offsets.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ia32_unistd.h \ + include/linux/rculist.h \ + include/linux/rtmutex.h \ + $(wildcard include/config/debug/rt/mutexes.h) \ + include/linux/plist.h \ + $(wildcard include/config/debug/pi/list.h) \ + include/linux/resource.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/resource.h \ + include/asm-generic/resource.h \ + include/linux/hrtimer.h \ + $(wildcard include/config/high/res/timers.h) \ + $(wildcard include/config/timerfd.h) \ + include/linux/timerqueue.h \ + include/linux/task_io_accounting.h \ + $(wildcard include/config/task/io/accounting.h) \ + include/linux/latencytop.h \ + include/linux/cred.h \ + $(wildcard include/config/debug/credentials.h) \ + $(wildcard include/config/security.h) \ + $(wildcard include/config/user/ns.h) \ + include/linux/key.h \ + $(wildcard include/config/sysctl.h) \ + include/linux/sysctl.h \ + include/linux/selinux.h \ + $(wildcard include/config/security/selinux.h) \ + include/linux/aio.h \ + include/linux/aio_abi.h \ + include/linux/uio.h \ + /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_common.h \ + include/linux/device.h \ + $(wildcard include/config/debug/devres.h) \ + $(wildcard include/config/devtmpfs.h) \ + $(wildcard include/config/sysfs/deprecated.h) \ + include/linux/kobject.h \ + include/linux/sysfs.h \ + $(wildcard include/config/sysfs.h) \ + include/linux/kobject_ns.h \ + include/linux/kref.h \ + include/linux/klist.h \ + include/linux/module.h \ + $(wildcard include/config/symbol/prefix.h) \ + $(wildcard include/config/modversions.h) \ + $(wildcard include/config/unused/symbols.h) \ + $(wildcard include/config/kallsyms.h) \ + $(wildcard include/config/tracepoints.h) \ + $(wildcard include/config/event/tracing.h) \ + $(wildcard include/config/module/unload.h) \ + $(wildcard include/config/constructors.h) \ + $(wildcard include/config/debug/set/module/ronx.h) \ + include/linux/stat.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/stat.h \ + include/linux/kmod.h \ + include/linux/gfp.h \ + include/linux/elf.h \ + include/linux/elf-em.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/elf.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/user.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/user_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vdso.h \ + include/linux/moduleparam.h \ + $(wildcard include/config/alpha.h) \ + $(wildcard include/config/ia64.h) \ + $(wildcard include/config/ppc64.h) \ + include/linux/tracepoint.h \ + include/linux/jump_label.h \ + $(wildcard include/config/jump/label.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/jump_label.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/module.h \ + $(wildcard include/config/m586.h) \ + $(wildcard include/config/m586tsc.h) \ + $(wildcard include/config/m586mmx.h) \ + $(wildcard include/config/mcore2.h) \ + $(wildcard include/config/matom.h) \ + $(wildcard include/config/m686.h) \ + $(wildcard include/config/mpentiumii.h) \ + $(wildcard include/config/mpentiumiii.h) \ + $(wildcard include/config/mpentiumm.h) \ + $(wildcard include/config/mpentium4.h) \ + $(wildcard include/config/mk6.h) \ + $(wildcard include/config/mk8.h) \ + $(wildcard include/config/melan.h) \ + $(wildcard include/config/mcrusoe.h) \ + $(wildcard include/config/mefficeon.h) \ + $(wildcard include/config/mwinchipc6.h) \ + $(wildcard include/config/mwinchip3d.h) \ + $(wildcard include/config/mcyrixiii.h) \ + $(wildcard include/config/mviac3/2.h) \ + $(wildcard include/config/mviac7.h) \ + $(wildcard include/config/mgeodegx1.h) \ + $(wildcard include/config/mgeode/lx.h) \ + include/asm-generic/module.h \ + include/trace/events/module.h \ + include/trace/define_trace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/device.h \ + $(wildcard include/config/dmar.h) \ + $(wildcard include/config/amd/iommu.h) \ + include/linux/pm_wakeup.h \ + include/linux/interrupt.h \ + $(wildcard include/config/irq/forced/threading.h) \ + $(wildcard include/config/generic/irq/probe.h) \ + include/linux/irqreturn.h \ + include/linux/irqnr.h \ + include/linux/hardirq.h \ + include/linux/ftrace_irq.h \ + $(wildcard include/config/ftrace/nmi/enter.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/hardirq.h \ + $(wildcard include/config/x86/thermal/vector.h) \ + $(wildcard include/config/x86/mce/threshold.h) \ + include/linux/irq.h \ + $(wildcard include/config/s390.h) \ + $(wildcard include/config/irq/release/method.h) \ + $(wildcard include/config/generic/pending/irq.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq_regs.h \ + include/linux/irqdesc.h \ + $(wildcard include/config/irq/preflow/fasteoi.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/hw_irq.h \ + $(wildcard include/config/intr/remap.h) \ + include/linux/profile.h \ + $(wildcard include/config/profiling.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sections.h \ + $(wildcard include/config/debug/rodata.h) \ + include/asm-generic/sections.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/x86/wp/works/ok.h) \ + $(wildcard include/config/x86/intel/usercopy.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/uaccess_64.h \ + include/trace/events/irq.h \ + include/linux/net.h \ + include/linux/socket.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/socket.h \ + include/asm-generic/socket.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sockios.h \ + include/asm-generic/sockios.h \ + include/linux/sockios.h \ + include/linux/random.h \ + include/linux/fcntl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/fcntl.h \ + include/asm-generic/fcntl.h \ + include/linux/kmemcheck.h \ + include/linux/usb.h \ + $(wildcard include/config/usb/devicefs.h) \ + $(wildcard include/config/usb/mon.h) \ + $(wildcard include/config/usb/device/class.h) \ + $(wildcard include/config/usb/suspend.h) \ + include/linux/mod_devicetable.h \ + include/linux/usb/ch9.h \ + $(wildcard include/config/size.h) \ + $(wildcard include/config/att/one.h) \ + $(wildcard include/config/att/selfpower.h) \ + $(wildcard include/config/att/wakeup.h) \ + $(wildcard include/config/att/battery.h) \ + include/linux/delay.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/delay.h \ + include/linux/fs.h \ + $(wildcard include/config/quota.h) \ + $(wildcard include/config/fsnotify.h) \ + $(wildcard include/config/ima.h) \ + $(wildcard include/config/fs/posix/acl.h) \ + $(wildcard include/config/debug/writecount.h) \ + $(wildcard include/config/file/locking.h) \ + $(wildcard include/config/fs/xip.h) \ + $(wildcard include/config/migration.h) \ + include/linux/limits.h \ + include/linux/blk_types.h \ + $(wildcard include/config/blk/dev/integrity.h) \ + include/linux/kdev_t.h \ + include/linux/dcache.h \ + include/linux/rculist_bl.h \ + include/linux/list_bl.h \ + include/linux/bit_spinlock.h \ + include/linux/path.h \ + include/linux/radix-tree.h \ + include/linux/semaphore.h \ + include/linux/fiemap.h \ + include/linux/quota.h \ + $(wildcard include/config/quota/netlink/interface.h) \ + include/linux/dqblk_xfs.h \ + include/linux/dqblk_v1.h \ + include/linux/dqblk_v2.h \ + include/linux/dqblk_qtree.h \ + include/linux/nfs_fs_i.h \ + include/linux/nfs.h \ + include/linux/sunrpc/msg_prot.h \ + include/linux/inet.h \ + include/linux/pm_runtime.h \ + $(wildcard include/config/pm/runtime/clk.h) \ + $(wildcard include/config/have/clk.h) \ + +/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_event.o: $(deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_event.o) + +$(deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_event.o): diff --git a/modules/hp2101nw/usbip/.tmp_versions/hp2101nw.mod b/modules/hp2101nw/usbip/.tmp_versions/hp2101nw.mod new file mode 100644 index 0000000..fff56e0 --- /dev/null +++ b/modules/hp2101nw/usbip/.tmp_versions/hp2101nw.mod @@ -0,0 +1,2 @@ +/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw.ko +/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_sysfs.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_tx.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_rx.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_hcd.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_common.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_event.o diff --git a/modules/hp2101nw/usbip/.vhci_hcd.o.cmd b/modules/hp2101nw/usbip/.vhci_hcd.o.cmd new file mode 100644 index 0000000..d801abb --- /dev/null +++ b/modules/hp2101nw/usbip/.vhci_hcd.o.cmd @@ -0,0 +1,705 @@ +cmd_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_hcd.o := gcc -Wp,-MD,/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/.vhci_hcd.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include -I/usr/src/linux-headers-3.0.0-16-generic/arch/x86/include -Iarch/x86/include/generated -Iinclude -include include/generated/autoconf.h -Iubuntu/include -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m64 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=1024 -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -DHCD_HEADER=\"/usr/src/linux-headers-3.0.0-16-generic/include/linux/usb/hcd.h\" -DMODULE -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(vhci_hcd)" -D"KBUILD_MODNAME=KBUILD_STR(hp2101nw)" -c -o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/.tmp_vhci_hcd.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_hcd.c + +source_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_hcd.o := /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_hcd.c + +deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_hcd.o := \ + $(wildcard include/config/pm.h) \ + include/linux/init.h \ + $(wildcard include/config/modules.h) \ + $(wildcard include/config/hotplug.h) \ + include/linux/compiler.h \ + $(wildcard include/config/sparse/rcu/pointer.h) \ + $(wildcard include/config/trace/branch/profiling.h) \ + $(wildcard include/config/profile/all/branches.h) \ + $(wildcard include/config/enable/must/check.h) \ + $(wildcard include/config/enable/warn/deprecated.h) \ + include/linux/compiler-gcc.h \ + $(wildcard include/config/arch/supports/optimized/inlining.h) \ + $(wildcard include/config/optimize/inlining.h) \ + include/linux/compiler-gcc4.h \ + include/linux/kernel.h \ + $(wildcard include/config/lbdaf.h) \ + $(wildcard include/config/preempt/voluntary.h) \ + $(wildcard include/config/debug/spinlock/sleep.h) \ + $(wildcard include/config/prove/locking.h) \ + $(wildcard include/config/ring/buffer.h) \ + $(wildcard include/config/tracing.h) \ + $(wildcard include/config/numa.h) \ + $(wildcard include/config/compaction.h) \ + $(wildcard include/config/ftrace/mcount/record.h) \ + /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stdarg.h \ + include/linux/linkage.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/x86/32.h) \ + $(wildcard include/config/x86/64.h) \ + $(wildcard include/config/x86/alignment/16.h) \ + include/linux/stringify.h \ + include/linux/stddef.h \ + include/linux/types.h \ + $(wildcard include/config/uid16.h) \ + $(wildcard include/config/arch/dma/addr/t/64bit.h) \ + $(wildcard include/config/phys/addr/t/64bit.h) \ + $(wildcard include/config/64bit.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/types.h \ + include/asm-generic/types.h \ + include/asm-generic/int-ll64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bitsperlong.h \ + include/asm-generic/bitsperlong.h \ + include/linux/posix_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/posix_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/posix_types_64.h \ + include/linux/bitops.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bitops.h \ + $(wildcard include/config/x86/cmov.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/alternative.h \ + $(wildcard include/config/smp.h) \ + $(wildcard include/config/paravirt.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/asm.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cpufeature.h \ + $(wildcard include/config/x86/invlpg.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/required-features.h \ + $(wildcard include/config/x86/minimum/cpu/family.h) \ + $(wildcard include/config/math/emulation.h) \ + $(wildcard include/config/x86/pae.h) \ + $(wildcard include/config/x86/cmpxchg64.h) \ + $(wildcard include/config/x86/use/3dnow.h) \ + $(wildcard include/config/x86/p6/nop.h) \ + include/asm-generic/bitops/find.h \ + $(wildcard include/config/generic/find/first/bit.h) \ + include/asm-generic/bitops/sched.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/arch_hweight.h \ + include/asm-generic/bitops/const_hweight.h \ + include/asm-generic/bitops/fls64.h \ + include/asm-generic/bitops/le.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/byteorder.h \ + include/linux/byteorder/little_endian.h \ + include/linux/swab.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/swab.h \ + $(wildcard include/config/x86/bswap.h) \ + include/linux/byteorder/generic.h \ + include/linux/log2.h \ + $(wildcard include/config/arch/has/ilog2/u32.h) \ + $(wildcard include/config/arch/has/ilog2/u64.h) \ + include/linux/typecheck.h \ + include/linux/printk.h \ + $(wildcard include/config/printk.h) \ + $(wildcard include/config/dynamic/debug.h) \ + include/linux/dynamic_debug.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bug.h \ + $(wildcard include/config/bug.h) \ + $(wildcard include/config/debug/bugverbose.h) \ + include/asm-generic/bug.h \ + $(wildcard include/config/generic/bug.h) \ + $(wildcard include/config/generic/bug/relative/pointers.h) \ + include/linux/kthread.h \ + $(wildcard include/config/lockdep.h) \ + include/linux/err.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/errno.h \ + include/asm-generic/errno.h \ + include/asm-generic/errno-base.h \ + include/linux/sched.h \ + $(wildcard include/config/sched/debug.h) \ + $(wildcard include/config/prove/rcu.h) \ + $(wildcard include/config/no/hz.h) \ + $(wildcard include/config/lockup/detector.h) \ + $(wildcard include/config/detect/hung/task.h) \ + $(wildcard include/config/mmu.h) \ + $(wildcard include/config/core/dump/default/elf/headers.h) \ + $(wildcard include/config/sched/autogroup.h) \ + $(wildcard include/config/virt/cpu/accounting.h) \ + $(wildcard include/config/bsd/process/acct.h) \ + $(wildcard include/config/taskstats.h) \ + $(wildcard include/config/audit.h) \ + $(wildcard include/config/cgroups.h) \ + $(wildcard include/config/inotify/user.h) \ + $(wildcard include/config/fanotify.h) \ + $(wildcard include/config/epoll.h) \ + $(wildcard include/config/posix/mqueue.h) \ + $(wildcard include/config/keys.h) \ + $(wildcard include/config/perf/events.h) \ + $(wildcard include/config/schedstats.h) \ + $(wildcard include/config/task/delay/acct.h) \ + $(wildcard include/config/fair/group/sched.h) \ + $(wildcard include/config/rt/group/sched.h) \ + $(wildcard include/config/preempt/notifiers.h) \ + $(wildcard include/config/blk/dev/io/trace.h) \ + $(wildcard include/config/preempt/rcu.h) \ + $(wildcard include/config/rcu/boost.h) \ + $(wildcard include/config/tree/preempt/rcu.h) \ + $(wildcard include/config/compat/brk.h) \ + $(wildcard include/config/cc/stackprotector.h) \ + $(wildcard include/config/sysvipc.h) \ + $(wildcard include/config/auditsyscall.h) \ + $(wildcard include/config/generic/hardirqs.h) \ + $(wildcard include/config/rt/mutexes.h) \ + $(wildcard include/config/debug/mutexes.h) \ + $(wildcard include/config/trace/irqflags.h) \ + $(wildcard include/config/block.h) \ + $(wildcard include/config/task/xacct.h) \ + $(wildcard include/config/cpusets.h) \ + $(wildcard include/config/futex.h) \ + $(wildcard include/config/compat.h) \ + $(wildcard include/config/fault/injection.h) \ + $(wildcard include/config/latencytop.h) \ + $(wildcard include/config/function/graph/tracer.h) \ + $(wildcard include/config/cgroup/mem/res/ctlr.h) \ + $(wildcard include/config/have/hw/breakpoint.h) \ + $(wildcard include/config/cpumask/offstack.h) \ + $(wildcard include/config/have/unstable/sched/clock.h) \ + $(wildcard include/config/irq/time/accounting.h) \ + $(wildcard include/config/hotplug/cpu.h) \ + $(wildcard include/config/proc/fs.h) \ + $(wildcard include/config/stack/growsup.h) \ + $(wildcard include/config/debug/stack/usage.h) \ + $(wildcard include/config/preempt.h) \ + $(wildcard include/config/cgroup/sched.h) \ + $(wildcard include/config/mm/owner.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/param.h \ + include/asm-generic/param.h \ + $(wildcard include/config/hz.h) \ + include/linux/capability.h \ + include/linux/threads.h \ + $(wildcard include/config/nr/cpus.h) \ + $(wildcard include/config/base/small.h) \ + include/linux/timex.h \ + include/linux/time.h \ + $(wildcard include/config/arch/uses/gettimeoffset.h) \ + include/linux/cache.h \ + $(wildcard include/config/arch/has/cache/line/size.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cache.h \ + $(wildcard include/config/x86/l1/cache/shift.h) \ + $(wildcard include/config/x86/internode/cache/shift.h) \ + $(wildcard include/config/x86/vsmp.h) \ + include/linux/seqlock.h \ + include/linux/spinlock.h \ + $(wildcard include/config/debug/spinlock.h) \ + $(wildcard include/config/generic/lockbreak.h) \ + $(wildcard include/config/debug/lock/alloc.h) \ + include/linux/preempt.h \ + $(wildcard include/config/debug/preempt.h) \ + $(wildcard include/config/preempt/tracer.h) \ + include/linux/thread_info.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/thread_info.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_types.h \ + include/linux/const.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/physical/start.h) \ + $(wildcard include/config/physical/align.h) \ + $(wildcard include/config/flatmem.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_64.h \ + include/asm-generic/memory_model.h \ + $(wildcard include/config/discontigmem.h) \ + $(wildcard include/config/sparsemem/vmemmap.h) \ + $(wildcard include/config/sparsemem.h) \ + include/asm-generic/getorder.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/processor.h \ + $(wildcard include/config/m386.h) \ + $(wildcard include/config/m486.h) \ + $(wildcard include/config/x86/debugctlmsr.h) \ + $(wildcard include/config/cpu/sup/amd.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/vm86.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vm86.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ptrace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ptrace-abi.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/segment.h \ + include/asm-generic/ptrace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/math_emu.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sigcontext.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/current.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/percpu.h \ + $(wildcard include/config/x86/64/smp.h) \ + include/asm-generic/percpu.h \ + $(wildcard include/config/have/setup/per/cpu/area.h) \ + include/linux/percpu-defs.h \ + $(wildcard include/config/debug/force/weak/per/cpu.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/system.h \ + $(wildcard include/config/ia32/emulation.h) \ + $(wildcard include/config/x86/32/lazy/gs.h) \ + $(wildcard include/config/x86/ppro/fence.h) \ + $(wildcard include/config/x86/oostore.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cmpxchg.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cmpxchg_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/nops.h \ + $(wildcard include/config/mk7.h) \ + include/linux/irqflags.h \ + $(wildcard include/config/irqsoff/tracer.h) \ + $(wildcard include/config/trace/irqflags/support.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irqflags.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/paravirt.h \ + $(wildcard include/config/transparent/hugepage.h) \ + $(wildcard include/config/paravirt/spinlocks.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/kmemcheck.h) \ + $(wildcard include/config/compat/vdso.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pgtable_64_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/x86/local/apic.h) \ + $(wildcard include/config/paravirt/debug.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/desc_defs.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/kmap_types.h \ + $(wildcard include/config/debug/highmem.h) \ + include/asm-generic/kmap_types.h \ + include/linux/cpumask.h \ + $(wildcard include/config/debug/per/cpu/maps.h) \ + $(wildcard include/config/disable/obsolete/cpumask/functions.h) \ + include/linux/bitmap.h \ + include/linux/string.h \ + $(wildcard include/config/binary/printf.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/string.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/string_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/msr.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/msr-index.h \ + include/linux/ioctl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ioctl.h \ + include/asm-generic/ioctl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cpumask.h \ + include/linux/personality.h \ + include/linux/math64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/div64.h \ + include/asm-generic/div64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ftrace.h \ + $(wildcard include/config/function/tracer.h) \ + $(wildcard include/config/dynamic/ftrace.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/atomic.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/atomic64_64.h \ + include/asm-generic/atomic-long.h \ + include/linux/list.h \ + $(wildcard include/config/debug/list.h) \ + include/linux/poison.h \ + $(wildcard include/config/illegal/pointer/value.h) \ + include/linux/bottom_half.h \ + include/linux/spinlock_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/spinlock_types.h \ + include/linux/lockdep.h \ + $(wildcard include/config/lock/stat.h) \ + include/linux/rwlock_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/spinlock.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/rwlock.h \ + include/linux/rwlock.h \ + include/linux/spinlock_api_smp.h \ + $(wildcard include/config/inline/spin/lock.h) \ + $(wildcard include/config/inline/spin/lock/bh.h) \ + $(wildcard include/config/inline/spin/lock/irq.h) \ + $(wildcard include/config/inline/spin/lock/irqsave.h) \ + $(wildcard include/config/inline/spin/trylock.h) \ + $(wildcard include/config/inline/spin/trylock/bh.h) \ + $(wildcard include/config/inline/spin/unlock.h) \ + $(wildcard include/config/inline/spin/unlock/bh.h) \ + $(wildcard include/config/inline/spin/unlock/irq.h) \ + $(wildcard include/config/inline/spin/unlock/irqrestore.h) \ + include/linux/rwlock_api_smp.h \ + $(wildcard include/config/inline/read/lock.h) \ + $(wildcard include/config/inline/write/lock.h) \ + $(wildcard include/config/inline/read/lock/bh.h) \ + $(wildcard include/config/inline/write/lock/bh.h) \ + $(wildcard include/config/inline/read/lock/irq.h) \ + $(wildcard include/config/inline/write/lock/irq.h) \ + $(wildcard include/config/inline/read/lock/irqsave.h) \ + $(wildcard include/config/inline/write/lock/irqsave.h) \ + $(wildcard include/config/inline/read/trylock.h) \ + $(wildcard include/config/inline/write/trylock.h) \ + $(wildcard include/config/inline/read/unlock.h) \ + $(wildcard include/config/inline/write/unlock.h) \ + $(wildcard include/config/inline/read/unlock/bh.h) \ + $(wildcard include/config/inline/write/unlock/bh.h) \ + $(wildcard include/config/inline/read/unlock/irq.h) \ + $(wildcard include/config/inline/write/unlock/irq.h) \ + $(wildcard include/config/inline/read/unlock/irqrestore.h) \ + $(wildcard include/config/inline/write/unlock/irqrestore.h) \ + include/linux/param.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/timex.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/tsc.h \ + $(wildcard include/config/x86/tsc.h) \ + include/linux/jiffies.h \ + include/linux/rbtree.h \ + include/linux/errno.h \ + include/linux/nodemask.h \ + $(wildcard include/config/highmem.h) \ + include/linux/numa.h \ + $(wildcard include/config/nodes/shift.h) \ + include/linux/mm_types.h \ + $(wildcard include/config/split/ptlock/cpus.h) \ + $(wildcard include/config/want/page/debug/flags.h) \ + $(wildcard include/config/aio.h) \ + $(wildcard include/config/mmu/notifier.h) \ + include/linux/auxvec.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/auxvec.h \ + include/linux/prio_tree.h \ + include/linux/rwsem.h \ + $(wildcard include/config/rwsem/generic/spinlock.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/rwsem.h \ + include/linux/completion.h \ + include/linux/wait.h \ + include/linux/page-debug-flags.h \ + $(wildcard include/config/page/poisoning.h) \ + $(wildcard include/config/page/debug/something/else.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmu.h \ + include/linux/mutex.h \ + $(wildcard include/config/have/arch/mutex/cpu/relax.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cputime.h \ + include/asm-generic/cputime.h \ + include/linux/smp.h \ + $(wildcard include/config/use/generic/smp/helpers.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/smp.h \ + $(wildcard include/config/x86/io/apic.h) \ + $(wildcard include/config/x86/32/smp.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/x86/numaq.h) \ + $(wildcard include/config/mca.h) \ + $(wildcard include/config/eisa.h) \ + $(wildcard include/config/x86/mpparse.h) \ + $(wildcard include/config/acpi.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mpspec_def.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/x86_init.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bootparam.h \ + include/linux/screen_info.h \ + include/linux/apm_bios.h \ + include/linux/edd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/e820.h \ + $(wildcard include/config/efi.h) \ + $(wildcard include/config/intel/txt.h) \ + $(wildcard include/config/hibernation.h) \ + $(wildcard include/config/memtest.h) \ + include/linux/ioport.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ist.h \ + include/video/edid.h \ + $(wildcard include/config/x86.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/apicdef.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/apic.h \ + $(wildcard include/config/x86/x2apic.h) \ + include/linux/pm.h \ + $(wildcard include/config/pm/sleep.h) \ + $(wildcard include/config/pm/runtime.h) \ + include/linux/workqueue.h \ + $(wildcard include/config/debug/objects/work.h) \ + $(wildcard include/config/freezer.h) \ + include/linux/timer.h \ + $(wildcard include/config/timer/stats.h) \ + $(wildcard include/config/debug/objects/timers.h) \ + include/linux/ktime.h \ + $(wildcard include/config/ktime/scalar.h) \ + include/linux/debugobjects.h \ + $(wildcard include/config/debug/objects.h) \ + $(wildcard include/config/debug/objects/free.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/provide/ohci1394/dma/init.h) \ + $(wildcard include/config/x86/visws/apic.h) \ + $(wildcard include/config/x86/f00f/bug.h) \ + $(wildcard include/config/x86/cyclone/timer.h) \ + $(wildcard include/config/pci/mmconfig.h) \ + $(wildcard include/config/x86/mrst.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/acpi.h \ + $(wildcard include/config/acpi/numa.h) \ + include/acpi/pdc_intel.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/numa.h \ + $(wildcard include/config/numa/emu.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/topology.h \ + $(wildcard include/config/x86/ht.h) \ + include/asm-generic/topology.h \ + $(wildcard include/config/have/memoryless/nodes.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/numa_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/trampoline.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/io.h \ + $(wildcard include/config/xen.h) \ + include/xen/xen.h \ + $(wildcard include/config/xen/dom0.h) \ + include/xen/interface/xen.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/interface.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/interface_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pvclock-abi.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/hypervisor.h \ + include/asm-generic/iomap.h \ + include/linux/vmalloc.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vsyscall.h \ + $(wildcard include/config/generic/time.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vvar.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/io_apic.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/sparse/irq.h) \ + include/linux/sem.h \ + include/linux/ipc.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ipcbuf.h \ + include/asm-generic/ipcbuf.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sembuf.h \ + include/linux/rcupdate.h \ + $(wildcard include/config/rcu/torture/test.h) \ + $(wildcard include/config/tree/rcu.h) \ + $(wildcard include/config/tiny/rcu.h) \ + $(wildcard include/config/tiny/preempt/rcu.h) \ + $(wildcard include/config/debug/objects/rcu/head.h) \ + $(wildcard include/config/preempt/rt.h) \ + include/linux/rcutree.h \ + include/linux/signal.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/signal.h \ + include/asm-generic/signal-defs.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/siginfo.h \ + include/asm-generic/siginfo.h \ + include/linux/pid.h \ + include/linux/percpu.h \ + $(wildcard include/config/need/per/cpu/embed/first/chunk.h) \ + $(wildcard include/config/need/per/cpu/page/first/chunk.h) \ + include/linux/pfn.h \ + include/linux/topology.h \ + $(wildcard include/config/sched/smt.h) \ + $(wildcard include/config/sched/mc.h) \ + $(wildcard include/config/sched/book.h) \ + $(wildcard include/config/use/percpu/numa/node/id.h) \ + include/linux/mmzone.h \ + $(wildcard include/config/force/max/zoneorder.h) \ + $(wildcard include/config/zone/dma.h) \ + $(wildcard include/config/zone/dma32.h) \ + $(wildcard include/config/memory/hotplug.h) \ + $(wildcard include/config/arch/populates/node/map.h) \ + $(wildcard include/config/flat/node/mem/map.h) \ + $(wildcard include/config/no/bootmem.h) \ + $(wildcard include/config/have/memory/present.h) \ + $(wildcard include/config/need/node/memmap/size.h) \ + $(wildcard include/config/need/multiple/nodes.h) \ + $(wildcard include/config/have/arch/early/pfn/to/nid.h) \ + $(wildcard include/config/sparsemem/extreme.h) \ + $(wildcard include/config/have/arch/pfn/valid.h) \ + $(wildcard include/config/nodes/span/other/nodes.h) \ + $(wildcard include/config/holes/in/zone.h) \ + $(wildcard include/config/arch/has/holes/memorymodel.h) \ + include/linux/pageblock-flags.h \ + $(wildcard include/config/hugetlb/page.h) \ + $(wildcard include/config/hugetlb/page/size/variable.h) \ + include/generated/bounds.h \ + include/linux/memory_hotplug.h \ + $(wildcard include/config/memory/hotremove.h) \ + $(wildcard include/config/have/arch/nodedata/extension.h) \ + include/linux/notifier.h \ + include/linux/srcu.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmzone.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmzone_64.h \ + include/linux/mmdebug.h \ + $(wildcard include/config/debug/vm.h) \ + $(wildcard include/config/debug/virtual.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sparsemem.h \ + include/linux/proportions.h \ + include/linux/percpu_counter.h \ + include/linux/seccomp.h \ + $(wildcard include/config/seccomp.h) \ + $(wildcard include/config/seccomp/filter.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/seccomp.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/seccomp_64.h \ + include/linux/unistd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/unistd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/unistd_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/asm-offsets.h \ + include/generated/asm-offsets.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ia32_unistd.h \ + include/linux/rculist.h \ + include/linux/rtmutex.h \ + $(wildcard include/config/debug/rt/mutexes.h) \ + include/linux/plist.h \ + $(wildcard include/config/debug/pi/list.h) \ + include/linux/resource.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/resource.h \ + include/asm-generic/resource.h \ + include/linux/hrtimer.h \ + $(wildcard include/config/high/res/timers.h) \ + $(wildcard include/config/timerfd.h) \ + include/linux/timerqueue.h \ + include/linux/task_io_accounting.h \ + $(wildcard include/config/task/io/accounting.h) \ + include/linux/latencytop.h \ + include/linux/cred.h \ + $(wildcard include/config/debug/credentials.h) \ + $(wildcard include/config/security.h) \ + $(wildcard include/config/user/ns.h) \ + include/linux/key.h \ + $(wildcard include/config/sysctl.h) \ + include/linux/sysctl.h \ + include/linux/selinux.h \ + $(wildcard include/config/security/selinux.h) \ + include/linux/aio.h \ + include/linux/aio_abi.h \ + include/linux/uio.h \ + include/linux/module.h \ + $(wildcard include/config/symbol/prefix.h) \ + $(wildcard include/config/sysfs.h) \ + $(wildcard include/config/modversions.h) \ + $(wildcard include/config/unused/symbols.h) \ + $(wildcard include/config/kallsyms.h) \ + $(wildcard include/config/tracepoints.h) \ + $(wildcard include/config/event/tracing.h) \ + $(wildcard include/config/module/unload.h) \ + $(wildcard include/config/constructors.h) \ + $(wildcard include/config/debug/set/module/ronx.h) \ + include/linux/stat.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/stat.h \ + include/linux/kmod.h \ + include/linux/gfp.h \ + include/linux/elf.h \ + include/linux/elf-em.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/elf.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/user.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/user_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vdso.h \ + include/linux/kobject.h \ + include/linux/sysfs.h \ + include/linux/kobject_ns.h \ + include/linux/kref.h \ + include/linux/moduleparam.h \ + $(wildcard include/config/alpha.h) \ + $(wildcard include/config/ia64.h) \ + $(wildcard include/config/ppc64.h) \ + include/linux/tracepoint.h \ + include/linux/jump_label.h \ + $(wildcard include/config/jump/label.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/jump_label.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/module.h \ + $(wildcard include/config/m586.h) \ + $(wildcard include/config/m586tsc.h) \ + $(wildcard include/config/m586mmx.h) \ + $(wildcard include/config/mcore2.h) \ + $(wildcard include/config/matom.h) \ + $(wildcard include/config/m686.h) \ + $(wildcard include/config/mpentiumii.h) \ + $(wildcard include/config/mpentiumiii.h) \ + $(wildcard include/config/mpentiumm.h) \ + $(wildcard include/config/mpentium4.h) \ + $(wildcard include/config/mk6.h) \ + $(wildcard include/config/mk8.h) \ + $(wildcard include/config/melan.h) \ + $(wildcard include/config/mcrusoe.h) \ + $(wildcard include/config/mefficeon.h) \ + $(wildcard include/config/mwinchipc6.h) \ + $(wildcard include/config/mwinchip3d.h) \ + $(wildcard include/config/mcyrixiii.h) \ + $(wildcard include/config/mviac3/2.h) \ + $(wildcard include/config/mviac7.h) \ + $(wildcard include/config/mgeodegx1.h) \ + $(wildcard include/config/mgeode/lx.h) \ + include/asm-generic/module.h \ + include/trace/events/module.h \ + include/trace/define_trace.h \ + include/linux/platform_device.h \ + $(wildcard include/config/suspend.h) \ + $(wildcard include/config/hibernate/callbacks.h) \ + include/linux/device.h \ + $(wildcard include/config/debug/devres.h) \ + $(wildcard include/config/devtmpfs.h) \ + $(wildcard include/config/sysfs/deprecated.h) \ + include/linux/klist.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/device.h \ + $(wildcard include/config/dmar.h) \ + $(wildcard include/config/amd/iommu.h) \ + include/linux/pm_wakeup.h \ + include/linux/mod_devicetable.h \ + include/linux/slab.h \ + $(wildcard include/config/slab/debug.h) \ + $(wildcard include/config/failslab.h) \ + $(wildcard include/config/slub.h) \ + $(wildcard include/config/slob.h) \ + $(wildcard include/config/debug/slab.h) \ + $(wildcard include/config/slab.h) \ + include/linux/slub_def.h \ + $(wildcard include/config/slub/stats.h) \ + $(wildcard include/config/slub/debug.h) \ + include/linux/kmemleak.h \ + $(wildcard include/config/debug/kmemleak.h) \ + /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_common.h \ + include/linux/interrupt.h \ + $(wildcard include/config/irq/forced/threading.h) \ + $(wildcard include/config/generic/irq/probe.h) \ + include/linux/irqreturn.h \ + include/linux/irqnr.h \ + include/linux/hardirq.h \ + include/linux/ftrace_irq.h \ + $(wildcard include/config/ftrace/nmi/enter.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/hardirq.h \ + $(wildcard include/config/x86/thermal/vector.h) \ + $(wildcard include/config/x86/mce/threshold.h) \ + include/linux/irq.h \ + $(wildcard include/config/s390.h) \ + $(wildcard include/config/irq/release/method.h) \ + $(wildcard include/config/generic/pending/irq.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq_regs.h \ + include/linux/irqdesc.h \ + $(wildcard include/config/irq/preflow/fasteoi.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/hw_irq.h \ + $(wildcard include/config/intr/remap.h) \ + include/linux/profile.h \ + $(wildcard include/config/profiling.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sections.h \ + $(wildcard include/config/debug/rodata.h) \ + include/asm-generic/sections.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/x86/wp/works/ok.h) \ + $(wildcard include/config/x86/intel/usercopy.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/uaccess_64.h \ + include/trace/events/irq.h \ + include/linux/net.h \ + include/linux/socket.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/socket.h \ + include/asm-generic/socket.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sockios.h \ + include/asm-generic/sockios.h \ + include/linux/sockios.h \ + include/linux/random.h \ + include/linux/fcntl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/fcntl.h \ + include/asm-generic/fcntl.h \ + include/linux/kmemcheck.h \ + include/linux/usb.h \ + $(wildcard include/config/usb/devicefs.h) \ + $(wildcard include/config/usb/mon.h) \ + $(wildcard include/config/usb/device/class.h) \ + $(wildcard include/config/usb/suspend.h) \ + include/linux/usb/ch9.h \ + $(wildcard include/config/size.h) \ + $(wildcard include/config/att/one.h) \ + $(wildcard include/config/att/selfpower.h) \ + $(wildcard include/config/att/wakeup.h) \ + $(wildcard include/config/att/battery.h) \ + include/linux/delay.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/delay.h \ + include/linux/fs.h \ + $(wildcard include/config/quota.h) \ + $(wildcard include/config/fsnotify.h) \ + $(wildcard include/config/ima.h) \ + $(wildcard include/config/fs/posix/acl.h) \ + $(wildcard include/config/debug/writecount.h) \ + $(wildcard include/config/file/locking.h) \ + $(wildcard include/config/fs/xip.h) \ + $(wildcard include/config/migration.h) \ + include/linux/limits.h \ + include/linux/blk_types.h \ + $(wildcard include/config/blk/dev/integrity.h) \ + include/linux/kdev_t.h \ + include/linux/dcache.h \ + include/linux/rculist_bl.h \ + include/linux/list_bl.h \ + include/linux/bit_spinlock.h \ + include/linux/path.h \ + include/linux/radix-tree.h \ + include/linux/semaphore.h \ + include/linux/fiemap.h \ + include/linux/quota.h \ + $(wildcard include/config/quota/netlink/interface.h) \ + include/linux/dqblk_xfs.h \ + include/linux/dqblk_v1.h \ + include/linux/dqblk_v2.h \ + include/linux/dqblk_qtree.h \ + include/linux/nfs_fs_i.h \ + include/linux/nfs.h \ + include/linux/sunrpc/msg_prot.h \ + include/linux/inet.h \ + include/linux/pm_runtime.h \ + $(wildcard include/config/pm/runtime/clk.h) \ + $(wildcard include/config/have/clk.h) \ + /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci.h \ + include/linux/usb/hcd.h \ + $(wildcard include/config/pci.h) \ + include/linux/usb/ch11.h \ + $(wildcard include/config/error.h) \ + $(wildcard include/config/err.h) \ + +/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_hcd.o: $(deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_hcd.o) + +$(deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_hcd.o): diff --git a/modules/hp2101nw/usbip/.vhci_rx.o.cmd b/modules/hp2101nw/usbip/.vhci_rx.o.cmd new file mode 100644 index 0000000..ebb8616 --- /dev/null +++ b/modules/hp2101nw/usbip/.vhci_rx.o.cmd @@ -0,0 +1,702 @@ +cmd_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_rx.o := gcc -Wp,-MD,/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/.vhci_rx.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include -I/usr/src/linux-headers-3.0.0-16-generic/arch/x86/include -Iarch/x86/include/generated -Iinclude -include include/generated/autoconf.h -Iubuntu/include -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m64 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=1024 -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -DHCD_HEADER=\"/usr/src/linux-headers-3.0.0-16-generic/include/linux/usb/hcd.h\" -DMODULE -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(vhci_rx)" -D"KBUILD_MODNAME=KBUILD_STR(hp2101nw)" -c -o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/.tmp_vhci_rx.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_rx.c + +source_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_rx.o := /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_rx.c + +deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_rx.o := \ + include/linux/kthread.h \ + $(wildcard include/config/lockdep.h) \ + include/linux/err.h \ + include/linux/compiler.h \ + $(wildcard include/config/sparse/rcu/pointer.h) \ + $(wildcard include/config/trace/branch/profiling.h) \ + $(wildcard include/config/profile/all/branches.h) \ + $(wildcard include/config/enable/must/check.h) \ + $(wildcard include/config/enable/warn/deprecated.h) \ + include/linux/compiler-gcc.h \ + $(wildcard include/config/arch/supports/optimized/inlining.h) \ + $(wildcard include/config/optimize/inlining.h) \ + include/linux/compiler-gcc4.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/errno.h \ + include/asm-generic/errno.h \ + include/asm-generic/errno-base.h \ + include/linux/sched.h \ + $(wildcard include/config/sched/debug.h) \ + $(wildcard include/config/prove/rcu.h) \ + $(wildcard include/config/smp.h) \ + $(wildcard include/config/no/hz.h) \ + $(wildcard include/config/lockup/detector.h) \ + $(wildcard include/config/detect/hung/task.h) \ + $(wildcard include/config/mmu.h) \ + $(wildcard include/config/core/dump/default/elf/headers.h) \ + $(wildcard include/config/sched/autogroup.h) \ + $(wildcard include/config/virt/cpu/accounting.h) \ + $(wildcard include/config/bsd/process/acct.h) \ + $(wildcard include/config/taskstats.h) \ + $(wildcard include/config/audit.h) \ + $(wildcard include/config/cgroups.h) \ + $(wildcard include/config/inotify/user.h) \ + $(wildcard include/config/fanotify.h) \ + $(wildcard include/config/epoll.h) \ + $(wildcard include/config/posix/mqueue.h) \ + $(wildcard include/config/keys.h) \ + $(wildcard include/config/perf/events.h) \ + $(wildcard include/config/schedstats.h) \ + $(wildcard include/config/task/delay/acct.h) \ + $(wildcard include/config/fair/group/sched.h) \ + $(wildcard include/config/rt/group/sched.h) \ + $(wildcard include/config/preempt/notifiers.h) \ + $(wildcard include/config/blk/dev/io/trace.h) \ + $(wildcard include/config/preempt/rcu.h) \ + $(wildcard include/config/rcu/boost.h) \ + $(wildcard include/config/tree/preempt/rcu.h) \ + $(wildcard include/config/compat/brk.h) \ + $(wildcard include/config/cc/stackprotector.h) \ + $(wildcard include/config/sysvipc.h) \ + $(wildcard include/config/auditsyscall.h) \ + $(wildcard include/config/generic/hardirqs.h) \ + $(wildcard include/config/rt/mutexes.h) \ + $(wildcard include/config/debug/mutexes.h) \ + $(wildcard include/config/trace/irqflags.h) \ + $(wildcard include/config/block.h) \ + $(wildcard include/config/task/xacct.h) \ + $(wildcard include/config/cpusets.h) \ + $(wildcard include/config/futex.h) \ + $(wildcard include/config/compat.h) \ + $(wildcard include/config/numa.h) \ + $(wildcard include/config/fault/injection.h) \ + $(wildcard include/config/latencytop.h) \ + $(wildcard include/config/function/graph/tracer.h) \ + $(wildcard include/config/tracing.h) \ + $(wildcard include/config/cgroup/mem/res/ctlr.h) \ + $(wildcard include/config/have/hw/breakpoint.h) \ + $(wildcard include/config/cpumask/offstack.h) \ + $(wildcard include/config/have/unstable/sched/clock.h) \ + $(wildcard include/config/irq/time/accounting.h) \ + $(wildcard include/config/hotplug/cpu.h) \ + $(wildcard include/config/proc/fs.h) \ + $(wildcard include/config/stack/growsup.h) \ + $(wildcard include/config/debug/stack/usage.h) \ + $(wildcard include/config/preempt.h) \ + $(wildcard include/config/cgroup/sched.h) \ + $(wildcard include/config/mm/owner.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/param.h \ + include/asm-generic/param.h \ + $(wildcard include/config/hz.h) \ + include/linux/capability.h \ + include/linux/types.h \ + $(wildcard include/config/uid16.h) \ + $(wildcard include/config/lbdaf.h) \ + $(wildcard include/config/arch/dma/addr/t/64bit.h) \ + $(wildcard include/config/phys/addr/t/64bit.h) \ + $(wildcard include/config/64bit.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/types.h \ + include/asm-generic/types.h \ + include/asm-generic/int-ll64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bitsperlong.h \ + include/asm-generic/bitsperlong.h \ + include/linux/posix_types.h \ + include/linux/stddef.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/x86/32.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/posix_types_64.h \ + include/linux/threads.h \ + $(wildcard include/config/nr/cpus.h) \ + $(wildcard include/config/base/small.h) \ + include/linux/kernel.h \ + $(wildcard include/config/preempt/voluntary.h) \ + $(wildcard include/config/debug/spinlock/sleep.h) \ + $(wildcard include/config/prove/locking.h) \ + $(wildcard include/config/ring/buffer.h) \ + $(wildcard include/config/compaction.h) \ + $(wildcard include/config/ftrace/mcount/record.h) \ + /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stdarg.h \ + include/linux/linkage.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/x86/64.h) \ + $(wildcard include/config/x86/alignment/16.h) \ + include/linux/stringify.h \ + include/linux/bitops.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bitops.h \ + $(wildcard include/config/x86/cmov.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/alternative.h \ + $(wildcard include/config/paravirt.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/asm.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cpufeature.h \ + $(wildcard include/config/x86/invlpg.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/required-features.h \ + $(wildcard include/config/x86/minimum/cpu/family.h) \ + $(wildcard include/config/math/emulation.h) \ + $(wildcard include/config/x86/pae.h) \ + $(wildcard include/config/x86/cmpxchg64.h) \ + $(wildcard include/config/x86/use/3dnow.h) \ + $(wildcard include/config/x86/p6/nop.h) \ + include/asm-generic/bitops/find.h \ + $(wildcard include/config/generic/find/first/bit.h) \ + include/asm-generic/bitops/sched.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/arch_hweight.h \ + include/asm-generic/bitops/const_hweight.h \ + include/asm-generic/bitops/fls64.h \ + include/asm-generic/bitops/le.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/byteorder.h \ + include/linux/byteorder/little_endian.h \ + include/linux/swab.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/swab.h \ + $(wildcard include/config/x86/bswap.h) \ + include/linux/byteorder/generic.h \ + include/linux/log2.h \ + $(wildcard include/config/arch/has/ilog2/u32.h) \ + $(wildcard include/config/arch/has/ilog2/u64.h) \ + include/linux/typecheck.h \ + include/linux/printk.h \ + $(wildcard include/config/printk.h) \ + $(wildcard include/config/dynamic/debug.h) \ + include/linux/init.h \ + $(wildcard include/config/modules.h) \ + $(wildcard include/config/hotplug.h) \ + include/linux/dynamic_debug.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bug.h \ + $(wildcard include/config/bug.h) \ + $(wildcard include/config/debug/bugverbose.h) \ + include/asm-generic/bug.h \ + $(wildcard include/config/generic/bug.h) \ + $(wildcard include/config/generic/bug/relative/pointers.h) \ + include/linux/timex.h \ + include/linux/time.h \ + $(wildcard include/config/arch/uses/gettimeoffset.h) \ + include/linux/cache.h \ + $(wildcard include/config/arch/has/cache/line/size.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cache.h \ + $(wildcard include/config/x86/l1/cache/shift.h) \ + $(wildcard include/config/x86/internode/cache/shift.h) \ + $(wildcard include/config/x86/vsmp.h) \ + include/linux/seqlock.h \ + include/linux/spinlock.h \ + $(wildcard include/config/debug/spinlock.h) \ + $(wildcard include/config/generic/lockbreak.h) \ + $(wildcard include/config/debug/lock/alloc.h) \ + include/linux/preempt.h \ + $(wildcard include/config/debug/preempt.h) \ + $(wildcard include/config/preempt/tracer.h) \ + include/linux/thread_info.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/thread_info.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_types.h \ + include/linux/const.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/physical/start.h) \ + $(wildcard include/config/physical/align.h) \ + $(wildcard include/config/flatmem.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_64.h \ + include/asm-generic/memory_model.h \ + $(wildcard include/config/discontigmem.h) \ + $(wildcard include/config/sparsemem/vmemmap.h) \ + $(wildcard include/config/sparsemem.h) \ + include/asm-generic/getorder.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/processor.h \ + $(wildcard include/config/m386.h) \ + $(wildcard include/config/m486.h) \ + $(wildcard include/config/x86/debugctlmsr.h) \ + $(wildcard include/config/cpu/sup/amd.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/vm86.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vm86.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ptrace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ptrace-abi.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/segment.h \ + include/asm-generic/ptrace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/math_emu.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sigcontext.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/current.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/percpu.h \ + $(wildcard include/config/x86/64/smp.h) \ + include/asm-generic/percpu.h \ + $(wildcard include/config/have/setup/per/cpu/area.h) \ + include/linux/percpu-defs.h \ + $(wildcard include/config/debug/force/weak/per/cpu.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/system.h \ + $(wildcard include/config/ia32/emulation.h) \ + $(wildcard include/config/x86/32/lazy/gs.h) \ + $(wildcard include/config/x86/ppro/fence.h) \ + $(wildcard include/config/x86/oostore.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cmpxchg.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cmpxchg_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/nops.h \ + $(wildcard include/config/mk7.h) \ + include/linux/irqflags.h \ + $(wildcard include/config/irqsoff/tracer.h) \ + $(wildcard include/config/trace/irqflags/support.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irqflags.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/paravirt.h \ + $(wildcard include/config/transparent/hugepage.h) \ + $(wildcard include/config/paravirt/spinlocks.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/kmemcheck.h) \ + $(wildcard include/config/compat/vdso.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pgtable_64_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/x86/local/apic.h) \ + $(wildcard include/config/paravirt/debug.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/desc_defs.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/kmap_types.h \ + $(wildcard include/config/debug/highmem.h) \ + include/asm-generic/kmap_types.h \ + include/linux/cpumask.h \ + $(wildcard include/config/debug/per/cpu/maps.h) \ + $(wildcard include/config/disable/obsolete/cpumask/functions.h) \ + include/linux/bitmap.h \ + include/linux/string.h \ + $(wildcard include/config/binary/printf.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/string.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/string_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/msr.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/msr-index.h \ + include/linux/ioctl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ioctl.h \ + include/asm-generic/ioctl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cpumask.h \ + include/linux/personality.h \ + include/linux/math64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/div64.h \ + include/asm-generic/div64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ftrace.h \ + $(wildcard include/config/function/tracer.h) \ + $(wildcard include/config/dynamic/ftrace.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/atomic.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/atomic64_64.h \ + include/asm-generic/atomic-long.h \ + include/linux/list.h \ + $(wildcard include/config/debug/list.h) \ + include/linux/poison.h \ + $(wildcard include/config/illegal/pointer/value.h) \ + include/linux/bottom_half.h \ + include/linux/spinlock_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/spinlock_types.h \ + include/linux/lockdep.h \ + $(wildcard include/config/lock/stat.h) \ + include/linux/rwlock_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/spinlock.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/rwlock.h \ + include/linux/rwlock.h \ + include/linux/spinlock_api_smp.h \ + $(wildcard include/config/inline/spin/lock.h) \ + $(wildcard include/config/inline/spin/lock/bh.h) \ + $(wildcard include/config/inline/spin/lock/irq.h) \ + $(wildcard include/config/inline/spin/lock/irqsave.h) \ + $(wildcard include/config/inline/spin/trylock.h) \ + $(wildcard include/config/inline/spin/trylock/bh.h) \ + $(wildcard include/config/inline/spin/unlock.h) \ + $(wildcard include/config/inline/spin/unlock/bh.h) \ + $(wildcard include/config/inline/spin/unlock/irq.h) \ + $(wildcard include/config/inline/spin/unlock/irqrestore.h) \ + include/linux/rwlock_api_smp.h \ + $(wildcard include/config/inline/read/lock.h) \ + $(wildcard include/config/inline/write/lock.h) \ + $(wildcard include/config/inline/read/lock/bh.h) \ + $(wildcard include/config/inline/write/lock/bh.h) \ + $(wildcard include/config/inline/read/lock/irq.h) \ + $(wildcard include/config/inline/write/lock/irq.h) \ + $(wildcard include/config/inline/read/lock/irqsave.h) \ + $(wildcard include/config/inline/write/lock/irqsave.h) \ + $(wildcard include/config/inline/read/trylock.h) \ + $(wildcard include/config/inline/write/trylock.h) \ + $(wildcard include/config/inline/read/unlock.h) \ + $(wildcard include/config/inline/write/unlock.h) \ + $(wildcard include/config/inline/read/unlock/bh.h) \ + $(wildcard include/config/inline/write/unlock/bh.h) \ + $(wildcard include/config/inline/read/unlock/irq.h) \ + $(wildcard include/config/inline/write/unlock/irq.h) \ + $(wildcard include/config/inline/read/unlock/irqrestore.h) \ + $(wildcard include/config/inline/write/unlock/irqrestore.h) \ + include/linux/param.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/timex.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/tsc.h \ + $(wildcard include/config/x86/tsc.h) \ + include/linux/jiffies.h \ + include/linux/rbtree.h \ + include/linux/errno.h \ + include/linux/nodemask.h \ + $(wildcard include/config/highmem.h) \ + include/linux/numa.h \ + $(wildcard include/config/nodes/shift.h) \ + include/linux/mm_types.h \ + $(wildcard include/config/split/ptlock/cpus.h) \ + $(wildcard include/config/want/page/debug/flags.h) \ + $(wildcard include/config/aio.h) \ + $(wildcard include/config/mmu/notifier.h) \ + include/linux/auxvec.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/auxvec.h \ + include/linux/prio_tree.h \ + include/linux/rwsem.h \ + $(wildcard include/config/rwsem/generic/spinlock.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/rwsem.h \ + include/linux/completion.h \ + include/linux/wait.h \ + include/linux/page-debug-flags.h \ + $(wildcard include/config/page/poisoning.h) \ + $(wildcard include/config/page/debug/something/else.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmu.h \ + include/linux/mutex.h \ + $(wildcard include/config/have/arch/mutex/cpu/relax.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cputime.h \ + include/asm-generic/cputime.h \ + include/linux/smp.h \ + $(wildcard include/config/use/generic/smp/helpers.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/smp.h \ + $(wildcard include/config/x86/io/apic.h) \ + $(wildcard include/config/x86/32/smp.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/x86/numaq.h) \ + $(wildcard include/config/mca.h) \ + $(wildcard include/config/eisa.h) \ + $(wildcard include/config/x86/mpparse.h) \ + $(wildcard include/config/acpi.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mpspec_def.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/x86_init.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bootparam.h \ + include/linux/screen_info.h \ + include/linux/apm_bios.h \ + include/linux/edd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/e820.h \ + $(wildcard include/config/efi.h) \ + $(wildcard include/config/intel/txt.h) \ + $(wildcard include/config/hibernation.h) \ + $(wildcard include/config/memtest.h) \ + include/linux/ioport.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ist.h \ + include/video/edid.h \ + $(wildcard include/config/x86.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/apicdef.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/apic.h \ + $(wildcard include/config/x86/x2apic.h) \ + include/linux/pm.h \ + $(wildcard include/config/pm.h) \ + $(wildcard include/config/pm/sleep.h) \ + $(wildcard include/config/pm/runtime.h) \ + include/linux/workqueue.h \ + $(wildcard include/config/debug/objects/work.h) \ + $(wildcard include/config/freezer.h) \ + include/linux/timer.h \ + $(wildcard include/config/timer/stats.h) \ + $(wildcard include/config/debug/objects/timers.h) \ + include/linux/ktime.h \ + $(wildcard include/config/ktime/scalar.h) \ + include/linux/debugobjects.h \ + $(wildcard include/config/debug/objects.h) \ + $(wildcard include/config/debug/objects/free.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/provide/ohci1394/dma/init.h) \ + $(wildcard include/config/x86/visws/apic.h) \ + $(wildcard include/config/x86/f00f/bug.h) \ + $(wildcard include/config/x86/cyclone/timer.h) \ + $(wildcard include/config/pci/mmconfig.h) \ + $(wildcard include/config/x86/mrst.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/acpi.h \ + $(wildcard include/config/acpi/numa.h) \ + include/acpi/pdc_intel.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/numa.h \ + $(wildcard include/config/numa/emu.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/topology.h \ + $(wildcard include/config/x86/ht.h) \ + include/asm-generic/topology.h \ + $(wildcard include/config/have/memoryless/nodes.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/numa_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/trampoline.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/io.h \ + $(wildcard include/config/xen.h) \ + include/xen/xen.h \ + $(wildcard include/config/xen/dom0.h) \ + include/xen/interface/xen.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/interface.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/interface_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pvclock-abi.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/hypervisor.h \ + include/asm-generic/iomap.h \ + include/linux/vmalloc.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vsyscall.h \ + $(wildcard include/config/generic/time.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vvar.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/io_apic.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/sparse/irq.h) \ + include/linux/sem.h \ + include/linux/ipc.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ipcbuf.h \ + include/asm-generic/ipcbuf.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sembuf.h \ + include/linux/rcupdate.h \ + $(wildcard include/config/rcu/torture/test.h) \ + $(wildcard include/config/tree/rcu.h) \ + $(wildcard include/config/tiny/rcu.h) \ + $(wildcard include/config/tiny/preempt/rcu.h) \ + $(wildcard include/config/debug/objects/rcu/head.h) \ + $(wildcard include/config/preempt/rt.h) \ + include/linux/rcutree.h \ + include/linux/signal.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/signal.h \ + include/asm-generic/signal-defs.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/siginfo.h \ + include/asm-generic/siginfo.h \ + include/linux/pid.h \ + include/linux/percpu.h \ + $(wildcard include/config/need/per/cpu/embed/first/chunk.h) \ + $(wildcard include/config/need/per/cpu/page/first/chunk.h) \ + include/linux/pfn.h \ + include/linux/topology.h \ + $(wildcard include/config/sched/smt.h) \ + $(wildcard include/config/sched/mc.h) \ + $(wildcard include/config/sched/book.h) \ + $(wildcard include/config/use/percpu/numa/node/id.h) \ + include/linux/mmzone.h \ + $(wildcard include/config/force/max/zoneorder.h) \ + $(wildcard include/config/zone/dma.h) \ + $(wildcard include/config/zone/dma32.h) \ + $(wildcard include/config/memory/hotplug.h) \ + $(wildcard include/config/arch/populates/node/map.h) \ + $(wildcard include/config/flat/node/mem/map.h) \ + $(wildcard include/config/no/bootmem.h) \ + $(wildcard include/config/have/memory/present.h) \ + $(wildcard include/config/need/node/memmap/size.h) \ + $(wildcard include/config/need/multiple/nodes.h) \ + $(wildcard include/config/have/arch/early/pfn/to/nid.h) \ + $(wildcard include/config/sparsemem/extreme.h) \ + $(wildcard include/config/have/arch/pfn/valid.h) \ + $(wildcard include/config/nodes/span/other/nodes.h) \ + $(wildcard include/config/holes/in/zone.h) \ + $(wildcard include/config/arch/has/holes/memorymodel.h) \ + include/linux/pageblock-flags.h \ + $(wildcard include/config/hugetlb/page.h) \ + $(wildcard include/config/hugetlb/page/size/variable.h) \ + include/generated/bounds.h \ + include/linux/memory_hotplug.h \ + $(wildcard include/config/memory/hotremove.h) \ + $(wildcard include/config/have/arch/nodedata/extension.h) \ + include/linux/notifier.h \ + include/linux/srcu.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmzone.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmzone_64.h \ + include/linux/mmdebug.h \ + $(wildcard include/config/debug/vm.h) \ + $(wildcard include/config/debug/virtual.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sparsemem.h \ + include/linux/proportions.h \ + include/linux/percpu_counter.h \ + include/linux/seccomp.h \ + $(wildcard include/config/seccomp.h) \ + $(wildcard include/config/seccomp/filter.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/seccomp.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/seccomp_64.h \ + include/linux/unistd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/unistd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/unistd_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/asm-offsets.h \ + include/generated/asm-offsets.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ia32_unistd.h \ + include/linux/rculist.h \ + include/linux/rtmutex.h \ + $(wildcard include/config/debug/rt/mutexes.h) \ + include/linux/plist.h \ + $(wildcard include/config/debug/pi/list.h) \ + include/linux/resource.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/resource.h \ + include/asm-generic/resource.h \ + include/linux/hrtimer.h \ + $(wildcard include/config/high/res/timers.h) \ + $(wildcard include/config/timerfd.h) \ + include/linux/timerqueue.h \ + include/linux/task_io_accounting.h \ + $(wildcard include/config/task/io/accounting.h) \ + include/linux/latencytop.h \ + include/linux/cred.h \ + $(wildcard include/config/debug/credentials.h) \ + $(wildcard include/config/security.h) \ + $(wildcard include/config/user/ns.h) \ + include/linux/key.h \ + $(wildcard include/config/sysctl.h) \ + include/linux/sysctl.h \ + include/linux/selinux.h \ + $(wildcard include/config/security/selinux.h) \ + include/linux/aio.h \ + include/linux/aio_abi.h \ + include/linux/uio.h \ + include/linux/slab.h \ + $(wildcard include/config/slab/debug.h) \ + $(wildcard include/config/failslab.h) \ + $(wildcard include/config/slub.h) \ + $(wildcard include/config/slob.h) \ + $(wildcard include/config/debug/slab.h) \ + $(wildcard include/config/slab.h) \ + include/linux/gfp.h \ + include/linux/slub_def.h \ + $(wildcard include/config/slub/stats.h) \ + $(wildcard include/config/slub/debug.h) \ + $(wildcard include/config/sysfs.h) \ + include/linux/kobject.h \ + include/linux/sysfs.h \ + include/linux/kobject_ns.h \ + include/linux/kref.h \ + include/linux/kmemleak.h \ + $(wildcard include/config/debug/kmemleak.h) \ + /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_common.h \ + include/linux/device.h \ + $(wildcard include/config/debug/devres.h) \ + $(wildcard include/config/devtmpfs.h) \ + $(wildcard include/config/sysfs/deprecated.h) \ + include/linux/klist.h \ + include/linux/module.h \ + $(wildcard include/config/symbol/prefix.h) \ + $(wildcard include/config/modversions.h) \ + $(wildcard include/config/unused/symbols.h) \ + $(wildcard include/config/kallsyms.h) \ + $(wildcard include/config/tracepoints.h) \ + $(wildcard include/config/event/tracing.h) \ + $(wildcard include/config/module/unload.h) \ + $(wildcard include/config/constructors.h) \ + $(wildcard include/config/debug/set/module/ronx.h) \ + include/linux/stat.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/stat.h \ + include/linux/kmod.h \ + include/linux/elf.h \ + include/linux/elf-em.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/elf.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/user.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/user_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vdso.h \ + include/linux/moduleparam.h \ + $(wildcard include/config/alpha.h) \ + $(wildcard include/config/ia64.h) \ + $(wildcard include/config/ppc64.h) \ + include/linux/tracepoint.h \ + include/linux/jump_label.h \ + $(wildcard include/config/jump/label.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/jump_label.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/module.h \ + $(wildcard include/config/m586.h) \ + $(wildcard include/config/m586tsc.h) \ + $(wildcard include/config/m586mmx.h) \ + $(wildcard include/config/mcore2.h) \ + $(wildcard include/config/matom.h) \ + $(wildcard include/config/m686.h) \ + $(wildcard include/config/mpentiumii.h) \ + $(wildcard include/config/mpentiumiii.h) \ + $(wildcard include/config/mpentiumm.h) \ + $(wildcard include/config/mpentium4.h) \ + $(wildcard include/config/mk6.h) \ + $(wildcard include/config/mk8.h) \ + $(wildcard include/config/melan.h) \ + $(wildcard include/config/mcrusoe.h) \ + $(wildcard include/config/mefficeon.h) \ + $(wildcard include/config/mwinchipc6.h) \ + $(wildcard include/config/mwinchip3d.h) \ + $(wildcard include/config/mcyrixiii.h) \ + $(wildcard include/config/mviac3/2.h) \ + $(wildcard include/config/mviac7.h) \ + $(wildcard include/config/mgeodegx1.h) \ + $(wildcard include/config/mgeode/lx.h) \ + include/asm-generic/module.h \ + include/trace/events/module.h \ + include/trace/define_trace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/device.h \ + $(wildcard include/config/dmar.h) \ + $(wildcard include/config/amd/iommu.h) \ + include/linux/pm_wakeup.h \ + include/linux/interrupt.h \ + $(wildcard include/config/irq/forced/threading.h) \ + $(wildcard include/config/generic/irq/probe.h) \ + include/linux/irqreturn.h \ + include/linux/irqnr.h \ + include/linux/hardirq.h \ + include/linux/ftrace_irq.h \ + $(wildcard include/config/ftrace/nmi/enter.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/hardirq.h \ + $(wildcard include/config/x86/thermal/vector.h) \ + $(wildcard include/config/x86/mce/threshold.h) \ + include/linux/irq.h \ + $(wildcard include/config/s390.h) \ + $(wildcard include/config/irq/release/method.h) \ + $(wildcard include/config/generic/pending/irq.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq_regs.h \ + include/linux/irqdesc.h \ + $(wildcard include/config/irq/preflow/fasteoi.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/hw_irq.h \ + $(wildcard include/config/intr/remap.h) \ + include/linux/profile.h \ + $(wildcard include/config/profiling.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sections.h \ + $(wildcard include/config/debug/rodata.h) \ + include/asm-generic/sections.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/x86/wp/works/ok.h) \ + $(wildcard include/config/x86/intel/usercopy.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/uaccess_64.h \ + include/trace/events/irq.h \ + include/linux/net.h \ + include/linux/socket.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/socket.h \ + include/asm-generic/socket.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sockios.h \ + include/asm-generic/sockios.h \ + include/linux/sockios.h \ + include/linux/random.h \ + include/linux/fcntl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/fcntl.h \ + include/asm-generic/fcntl.h \ + include/linux/kmemcheck.h \ + include/linux/usb.h \ + $(wildcard include/config/usb/devicefs.h) \ + $(wildcard include/config/usb/mon.h) \ + $(wildcard include/config/usb/device/class.h) \ + $(wildcard include/config/usb/suspend.h) \ + include/linux/mod_devicetable.h \ + include/linux/usb/ch9.h \ + $(wildcard include/config/size.h) \ + $(wildcard include/config/att/one.h) \ + $(wildcard include/config/att/selfpower.h) \ + $(wildcard include/config/att/wakeup.h) \ + $(wildcard include/config/att/battery.h) \ + include/linux/delay.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/delay.h \ + include/linux/fs.h \ + $(wildcard include/config/quota.h) \ + $(wildcard include/config/fsnotify.h) \ + $(wildcard include/config/ima.h) \ + $(wildcard include/config/fs/posix/acl.h) \ + $(wildcard include/config/debug/writecount.h) \ + $(wildcard include/config/file/locking.h) \ + $(wildcard include/config/fs/xip.h) \ + $(wildcard include/config/migration.h) \ + include/linux/limits.h \ + include/linux/blk_types.h \ + $(wildcard include/config/blk/dev/integrity.h) \ + include/linux/kdev_t.h \ + include/linux/dcache.h \ + include/linux/rculist_bl.h \ + include/linux/list_bl.h \ + include/linux/bit_spinlock.h \ + include/linux/path.h \ + include/linux/radix-tree.h \ + include/linux/semaphore.h \ + include/linux/fiemap.h \ + include/linux/quota.h \ + $(wildcard include/config/quota/netlink/interface.h) \ + include/linux/dqblk_xfs.h \ + include/linux/dqblk_v1.h \ + include/linux/dqblk_v2.h \ + include/linux/dqblk_qtree.h \ + include/linux/nfs_fs_i.h \ + include/linux/nfs.h \ + include/linux/sunrpc/msg_prot.h \ + include/linux/inet.h \ + include/linux/pm_runtime.h \ + $(wildcard include/config/pm/runtime/clk.h) \ + $(wildcard include/config/have/clk.h) \ + /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci.h \ + include/linux/usb/hcd.h \ + $(wildcard include/config/pci.h) \ + include/linux/usb/ch11.h \ + $(wildcard include/config/error.h) \ + $(wildcard include/config/err.h) \ + +/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_rx.o: $(deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_rx.o) + +$(deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_rx.o): diff --git a/modules/hp2101nw/usbip/.vhci_sysfs.o.cmd b/modules/hp2101nw/usbip/.vhci_sysfs.o.cmd new file mode 100644 index 0000000..78fbecb --- /dev/null +++ b/modules/hp2101nw/usbip/.vhci_sysfs.o.cmd @@ -0,0 +1,690 @@ +cmd_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_sysfs.o := gcc -Wp,-MD,/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/.vhci_sysfs.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include -I/usr/src/linux-headers-3.0.0-16-generic/arch/x86/include -Iarch/x86/include/generated -Iinclude -include include/generated/autoconf.h -Iubuntu/include -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m64 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=1024 -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -DHCD_HEADER=\"/usr/src/linux-headers-3.0.0-16-generic/include/linux/usb/hcd.h\" -DMODULE -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(vhci_sysfs)" -D"KBUILD_MODNAME=KBUILD_STR(hp2101nw)" -c -o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/.tmp_vhci_sysfs.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_sysfs.c + +source_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_sysfs.o := /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_sysfs.c + +deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_sysfs.o := \ + include/linux/kthread.h \ + $(wildcard include/config/lockdep.h) \ + include/linux/err.h \ + include/linux/compiler.h \ + $(wildcard include/config/sparse/rcu/pointer.h) \ + $(wildcard include/config/trace/branch/profiling.h) \ + $(wildcard include/config/profile/all/branches.h) \ + $(wildcard include/config/enable/must/check.h) \ + $(wildcard include/config/enable/warn/deprecated.h) \ + include/linux/compiler-gcc.h \ + $(wildcard include/config/arch/supports/optimized/inlining.h) \ + $(wildcard include/config/optimize/inlining.h) \ + include/linux/compiler-gcc4.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/errno.h \ + include/asm-generic/errno.h \ + include/asm-generic/errno-base.h \ + include/linux/sched.h \ + $(wildcard include/config/sched/debug.h) \ + $(wildcard include/config/prove/rcu.h) \ + $(wildcard include/config/smp.h) \ + $(wildcard include/config/no/hz.h) \ + $(wildcard include/config/lockup/detector.h) \ + $(wildcard include/config/detect/hung/task.h) \ + $(wildcard include/config/mmu.h) \ + $(wildcard include/config/core/dump/default/elf/headers.h) \ + $(wildcard include/config/sched/autogroup.h) \ + $(wildcard include/config/virt/cpu/accounting.h) \ + $(wildcard include/config/bsd/process/acct.h) \ + $(wildcard include/config/taskstats.h) \ + $(wildcard include/config/audit.h) \ + $(wildcard include/config/cgroups.h) \ + $(wildcard include/config/inotify/user.h) \ + $(wildcard include/config/fanotify.h) \ + $(wildcard include/config/epoll.h) \ + $(wildcard include/config/posix/mqueue.h) \ + $(wildcard include/config/keys.h) \ + $(wildcard include/config/perf/events.h) \ + $(wildcard include/config/schedstats.h) \ + $(wildcard include/config/task/delay/acct.h) \ + $(wildcard include/config/fair/group/sched.h) \ + $(wildcard include/config/rt/group/sched.h) \ + $(wildcard include/config/preempt/notifiers.h) \ + $(wildcard include/config/blk/dev/io/trace.h) \ + $(wildcard include/config/preempt/rcu.h) \ + $(wildcard include/config/rcu/boost.h) \ + $(wildcard include/config/tree/preempt/rcu.h) \ + $(wildcard include/config/compat/brk.h) \ + $(wildcard include/config/cc/stackprotector.h) \ + $(wildcard include/config/sysvipc.h) \ + $(wildcard include/config/auditsyscall.h) \ + $(wildcard include/config/generic/hardirqs.h) \ + $(wildcard include/config/rt/mutexes.h) \ + $(wildcard include/config/debug/mutexes.h) \ + $(wildcard include/config/trace/irqflags.h) \ + $(wildcard include/config/block.h) \ + $(wildcard include/config/task/xacct.h) \ + $(wildcard include/config/cpusets.h) \ + $(wildcard include/config/futex.h) \ + $(wildcard include/config/compat.h) \ + $(wildcard include/config/numa.h) \ + $(wildcard include/config/fault/injection.h) \ + $(wildcard include/config/latencytop.h) \ + $(wildcard include/config/function/graph/tracer.h) \ + $(wildcard include/config/tracing.h) \ + $(wildcard include/config/cgroup/mem/res/ctlr.h) \ + $(wildcard include/config/have/hw/breakpoint.h) \ + $(wildcard include/config/cpumask/offstack.h) \ + $(wildcard include/config/have/unstable/sched/clock.h) \ + $(wildcard include/config/irq/time/accounting.h) \ + $(wildcard include/config/hotplug/cpu.h) \ + $(wildcard include/config/proc/fs.h) \ + $(wildcard include/config/stack/growsup.h) \ + $(wildcard include/config/debug/stack/usage.h) \ + $(wildcard include/config/preempt.h) \ + $(wildcard include/config/cgroup/sched.h) \ + $(wildcard include/config/mm/owner.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/param.h \ + include/asm-generic/param.h \ + $(wildcard include/config/hz.h) \ + include/linux/capability.h \ + include/linux/types.h \ + $(wildcard include/config/uid16.h) \ + $(wildcard include/config/lbdaf.h) \ + $(wildcard include/config/arch/dma/addr/t/64bit.h) \ + $(wildcard include/config/phys/addr/t/64bit.h) \ + $(wildcard include/config/64bit.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/types.h \ + include/asm-generic/types.h \ + include/asm-generic/int-ll64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bitsperlong.h \ + include/asm-generic/bitsperlong.h \ + include/linux/posix_types.h \ + include/linux/stddef.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/x86/32.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/posix_types_64.h \ + include/linux/threads.h \ + $(wildcard include/config/nr/cpus.h) \ + $(wildcard include/config/base/small.h) \ + include/linux/kernel.h \ + $(wildcard include/config/preempt/voluntary.h) \ + $(wildcard include/config/debug/spinlock/sleep.h) \ + $(wildcard include/config/prove/locking.h) \ + $(wildcard include/config/ring/buffer.h) \ + $(wildcard include/config/compaction.h) \ + $(wildcard include/config/ftrace/mcount/record.h) \ + /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stdarg.h \ + include/linux/linkage.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/x86/64.h) \ + $(wildcard include/config/x86/alignment/16.h) \ + include/linux/stringify.h \ + include/linux/bitops.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bitops.h \ + $(wildcard include/config/x86/cmov.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/alternative.h \ + $(wildcard include/config/paravirt.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/asm.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cpufeature.h \ + $(wildcard include/config/x86/invlpg.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/required-features.h \ + $(wildcard include/config/x86/minimum/cpu/family.h) \ + $(wildcard include/config/math/emulation.h) \ + $(wildcard include/config/x86/pae.h) \ + $(wildcard include/config/x86/cmpxchg64.h) \ + $(wildcard include/config/x86/use/3dnow.h) \ + $(wildcard include/config/x86/p6/nop.h) \ + include/asm-generic/bitops/find.h \ + $(wildcard include/config/generic/find/first/bit.h) \ + include/asm-generic/bitops/sched.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/arch_hweight.h \ + include/asm-generic/bitops/const_hweight.h \ + include/asm-generic/bitops/fls64.h \ + include/asm-generic/bitops/le.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/byteorder.h \ + include/linux/byteorder/little_endian.h \ + include/linux/swab.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/swab.h \ + $(wildcard include/config/x86/bswap.h) \ + include/linux/byteorder/generic.h \ + include/linux/log2.h \ + $(wildcard include/config/arch/has/ilog2/u32.h) \ + $(wildcard include/config/arch/has/ilog2/u64.h) \ + include/linux/typecheck.h \ + include/linux/printk.h \ + $(wildcard include/config/printk.h) \ + $(wildcard include/config/dynamic/debug.h) \ + include/linux/init.h \ + $(wildcard include/config/modules.h) \ + $(wildcard include/config/hotplug.h) \ + include/linux/dynamic_debug.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bug.h \ + $(wildcard include/config/bug.h) \ + $(wildcard include/config/debug/bugverbose.h) \ + include/asm-generic/bug.h \ + $(wildcard include/config/generic/bug.h) \ + $(wildcard include/config/generic/bug/relative/pointers.h) \ + include/linux/timex.h \ + include/linux/time.h \ + $(wildcard include/config/arch/uses/gettimeoffset.h) \ + include/linux/cache.h \ + $(wildcard include/config/arch/has/cache/line/size.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cache.h \ + $(wildcard include/config/x86/l1/cache/shift.h) \ + $(wildcard include/config/x86/internode/cache/shift.h) \ + $(wildcard include/config/x86/vsmp.h) \ + include/linux/seqlock.h \ + include/linux/spinlock.h \ + $(wildcard include/config/debug/spinlock.h) \ + $(wildcard include/config/generic/lockbreak.h) \ + $(wildcard include/config/debug/lock/alloc.h) \ + include/linux/preempt.h \ + $(wildcard include/config/debug/preempt.h) \ + $(wildcard include/config/preempt/tracer.h) \ + include/linux/thread_info.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/thread_info.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_types.h \ + include/linux/const.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/physical/start.h) \ + $(wildcard include/config/physical/align.h) \ + $(wildcard include/config/flatmem.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_64.h \ + include/asm-generic/memory_model.h \ + $(wildcard include/config/discontigmem.h) \ + $(wildcard include/config/sparsemem/vmemmap.h) \ + $(wildcard include/config/sparsemem.h) \ + include/asm-generic/getorder.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/processor.h \ + $(wildcard include/config/m386.h) \ + $(wildcard include/config/m486.h) \ + $(wildcard include/config/x86/debugctlmsr.h) \ + $(wildcard include/config/cpu/sup/amd.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/vm86.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vm86.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ptrace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ptrace-abi.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/segment.h \ + include/asm-generic/ptrace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/math_emu.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sigcontext.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/current.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/percpu.h \ + $(wildcard include/config/x86/64/smp.h) \ + include/asm-generic/percpu.h \ + $(wildcard include/config/have/setup/per/cpu/area.h) \ + include/linux/percpu-defs.h \ + $(wildcard include/config/debug/force/weak/per/cpu.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/system.h \ + $(wildcard include/config/ia32/emulation.h) \ + $(wildcard include/config/x86/32/lazy/gs.h) \ + $(wildcard include/config/x86/ppro/fence.h) \ + $(wildcard include/config/x86/oostore.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cmpxchg.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cmpxchg_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/nops.h \ + $(wildcard include/config/mk7.h) \ + include/linux/irqflags.h \ + $(wildcard include/config/irqsoff/tracer.h) \ + $(wildcard include/config/trace/irqflags/support.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irqflags.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/paravirt.h \ + $(wildcard include/config/transparent/hugepage.h) \ + $(wildcard include/config/paravirt/spinlocks.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/kmemcheck.h) \ + $(wildcard include/config/compat/vdso.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pgtable_64_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/x86/local/apic.h) \ + $(wildcard include/config/paravirt/debug.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/desc_defs.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/kmap_types.h \ + $(wildcard include/config/debug/highmem.h) \ + include/asm-generic/kmap_types.h \ + include/linux/cpumask.h \ + $(wildcard include/config/debug/per/cpu/maps.h) \ + $(wildcard include/config/disable/obsolete/cpumask/functions.h) \ + include/linux/bitmap.h \ + include/linux/string.h \ + $(wildcard include/config/binary/printf.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/string.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/string_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/msr.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/msr-index.h \ + include/linux/ioctl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ioctl.h \ + include/asm-generic/ioctl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cpumask.h \ + include/linux/personality.h \ + include/linux/math64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/div64.h \ + include/asm-generic/div64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ftrace.h \ + $(wildcard include/config/function/tracer.h) \ + $(wildcard include/config/dynamic/ftrace.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/atomic.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/atomic64_64.h \ + include/asm-generic/atomic-long.h \ + include/linux/list.h \ + $(wildcard include/config/debug/list.h) \ + include/linux/poison.h \ + $(wildcard include/config/illegal/pointer/value.h) \ + include/linux/bottom_half.h \ + include/linux/spinlock_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/spinlock_types.h \ + include/linux/lockdep.h \ + $(wildcard include/config/lock/stat.h) \ + include/linux/rwlock_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/spinlock.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/rwlock.h \ + include/linux/rwlock.h \ + include/linux/spinlock_api_smp.h \ + $(wildcard include/config/inline/spin/lock.h) \ + $(wildcard include/config/inline/spin/lock/bh.h) \ + $(wildcard include/config/inline/spin/lock/irq.h) \ + $(wildcard include/config/inline/spin/lock/irqsave.h) \ + $(wildcard include/config/inline/spin/trylock.h) \ + $(wildcard include/config/inline/spin/trylock/bh.h) \ + $(wildcard include/config/inline/spin/unlock.h) \ + $(wildcard include/config/inline/spin/unlock/bh.h) \ + $(wildcard include/config/inline/spin/unlock/irq.h) \ + $(wildcard include/config/inline/spin/unlock/irqrestore.h) \ + include/linux/rwlock_api_smp.h \ + $(wildcard include/config/inline/read/lock.h) \ + $(wildcard include/config/inline/write/lock.h) \ + $(wildcard include/config/inline/read/lock/bh.h) \ + $(wildcard include/config/inline/write/lock/bh.h) \ + $(wildcard include/config/inline/read/lock/irq.h) \ + $(wildcard include/config/inline/write/lock/irq.h) \ + $(wildcard include/config/inline/read/lock/irqsave.h) \ + $(wildcard include/config/inline/write/lock/irqsave.h) \ + $(wildcard include/config/inline/read/trylock.h) \ + $(wildcard include/config/inline/write/trylock.h) \ + $(wildcard include/config/inline/read/unlock.h) \ + $(wildcard include/config/inline/write/unlock.h) \ + $(wildcard include/config/inline/read/unlock/bh.h) \ + $(wildcard include/config/inline/write/unlock/bh.h) \ + $(wildcard include/config/inline/read/unlock/irq.h) \ + $(wildcard include/config/inline/write/unlock/irq.h) \ + $(wildcard include/config/inline/read/unlock/irqrestore.h) \ + $(wildcard include/config/inline/write/unlock/irqrestore.h) \ + include/linux/param.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/timex.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/tsc.h \ + $(wildcard include/config/x86/tsc.h) \ + include/linux/jiffies.h \ + include/linux/rbtree.h \ + include/linux/errno.h \ + include/linux/nodemask.h \ + $(wildcard include/config/highmem.h) \ + include/linux/numa.h \ + $(wildcard include/config/nodes/shift.h) \ + include/linux/mm_types.h \ + $(wildcard include/config/split/ptlock/cpus.h) \ + $(wildcard include/config/want/page/debug/flags.h) \ + $(wildcard include/config/aio.h) \ + $(wildcard include/config/mmu/notifier.h) \ + include/linux/auxvec.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/auxvec.h \ + include/linux/prio_tree.h \ + include/linux/rwsem.h \ + $(wildcard include/config/rwsem/generic/spinlock.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/rwsem.h \ + include/linux/completion.h \ + include/linux/wait.h \ + include/linux/page-debug-flags.h \ + $(wildcard include/config/page/poisoning.h) \ + $(wildcard include/config/page/debug/something/else.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmu.h \ + include/linux/mutex.h \ + $(wildcard include/config/have/arch/mutex/cpu/relax.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cputime.h \ + include/asm-generic/cputime.h \ + include/linux/smp.h \ + $(wildcard include/config/use/generic/smp/helpers.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/smp.h \ + $(wildcard include/config/x86/io/apic.h) \ + $(wildcard include/config/x86/32/smp.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/x86/numaq.h) \ + $(wildcard include/config/mca.h) \ + $(wildcard include/config/eisa.h) \ + $(wildcard include/config/x86/mpparse.h) \ + $(wildcard include/config/acpi.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mpspec_def.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/x86_init.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bootparam.h \ + include/linux/screen_info.h \ + include/linux/apm_bios.h \ + include/linux/edd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/e820.h \ + $(wildcard include/config/efi.h) \ + $(wildcard include/config/intel/txt.h) \ + $(wildcard include/config/hibernation.h) \ + $(wildcard include/config/memtest.h) \ + include/linux/ioport.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ist.h \ + include/video/edid.h \ + $(wildcard include/config/x86.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/apicdef.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/apic.h \ + $(wildcard include/config/x86/x2apic.h) \ + include/linux/pm.h \ + $(wildcard include/config/pm.h) \ + $(wildcard include/config/pm/sleep.h) \ + $(wildcard include/config/pm/runtime.h) \ + include/linux/workqueue.h \ + $(wildcard include/config/debug/objects/work.h) \ + $(wildcard include/config/freezer.h) \ + include/linux/timer.h \ + $(wildcard include/config/timer/stats.h) \ + $(wildcard include/config/debug/objects/timers.h) \ + include/linux/ktime.h \ + $(wildcard include/config/ktime/scalar.h) \ + include/linux/debugobjects.h \ + $(wildcard include/config/debug/objects.h) \ + $(wildcard include/config/debug/objects/free.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/provide/ohci1394/dma/init.h) \ + $(wildcard include/config/x86/visws/apic.h) \ + $(wildcard include/config/x86/f00f/bug.h) \ + $(wildcard include/config/x86/cyclone/timer.h) \ + $(wildcard include/config/pci/mmconfig.h) \ + $(wildcard include/config/x86/mrst.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/acpi.h \ + $(wildcard include/config/acpi/numa.h) \ + include/acpi/pdc_intel.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/numa.h \ + $(wildcard include/config/numa/emu.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/topology.h \ + $(wildcard include/config/x86/ht.h) \ + include/asm-generic/topology.h \ + $(wildcard include/config/have/memoryless/nodes.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/numa_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/trampoline.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/io.h \ + $(wildcard include/config/xen.h) \ + include/xen/xen.h \ + $(wildcard include/config/xen/dom0.h) \ + include/xen/interface/xen.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/interface.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/interface_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pvclock-abi.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/hypervisor.h \ + include/asm-generic/iomap.h \ + include/linux/vmalloc.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vsyscall.h \ + $(wildcard include/config/generic/time.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vvar.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/io_apic.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/sparse/irq.h) \ + include/linux/sem.h \ + include/linux/ipc.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ipcbuf.h \ + include/asm-generic/ipcbuf.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sembuf.h \ + include/linux/rcupdate.h \ + $(wildcard include/config/rcu/torture/test.h) \ + $(wildcard include/config/tree/rcu.h) \ + $(wildcard include/config/tiny/rcu.h) \ + $(wildcard include/config/tiny/preempt/rcu.h) \ + $(wildcard include/config/debug/objects/rcu/head.h) \ + $(wildcard include/config/preempt/rt.h) \ + include/linux/rcutree.h \ + include/linux/signal.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/signal.h \ + include/asm-generic/signal-defs.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/siginfo.h \ + include/asm-generic/siginfo.h \ + include/linux/pid.h \ + include/linux/percpu.h \ + $(wildcard include/config/need/per/cpu/embed/first/chunk.h) \ + $(wildcard include/config/need/per/cpu/page/first/chunk.h) \ + include/linux/pfn.h \ + include/linux/topology.h \ + $(wildcard include/config/sched/smt.h) \ + $(wildcard include/config/sched/mc.h) \ + $(wildcard include/config/sched/book.h) \ + $(wildcard include/config/use/percpu/numa/node/id.h) \ + include/linux/mmzone.h \ + $(wildcard include/config/force/max/zoneorder.h) \ + $(wildcard include/config/zone/dma.h) \ + $(wildcard include/config/zone/dma32.h) \ + $(wildcard include/config/memory/hotplug.h) \ + $(wildcard include/config/arch/populates/node/map.h) \ + $(wildcard include/config/flat/node/mem/map.h) \ + $(wildcard include/config/no/bootmem.h) \ + $(wildcard include/config/have/memory/present.h) \ + $(wildcard include/config/need/node/memmap/size.h) \ + $(wildcard include/config/need/multiple/nodes.h) \ + $(wildcard include/config/have/arch/early/pfn/to/nid.h) \ + $(wildcard include/config/sparsemem/extreme.h) \ + $(wildcard include/config/have/arch/pfn/valid.h) \ + $(wildcard include/config/nodes/span/other/nodes.h) \ + $(wildcard include/config/holes/in/zone.h) \ + $(wildcard include/config/arch/has/holes/memorymodel.h) \ + include/linux/pageblock-flags.h \ + $(wildcard include/config/hugetlb/page.h) \ + $(wildcard include/config/hugetlb/page/size/variable.h) \ + include/generated/bounds.h \ + include/linux/memory_hotplug.h \ + $(wildcard include/config/memory/hotremove.h) \ + $(wildcard include/config/have/arch/nodedata/extension.h) \ + include/linux/notifier.h \ + include/linux/srcu.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmzone.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmzone_64.h \ + include/linux/mmdebug.h \ + $(wildcard include/config/debug/vm.h) \ + $(wildcard include/config/debug/virtual.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sparsemem.h \ + include/linux/proportions.h \ + include/linux/percpu_counter.h \ + include/linux/seccomp.h \ + $(wildcard include/config/seccomp.h) \ + $(wildcard include/config/seccomp/filter.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/seccomp.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/seccomp_64.h \ + include/linux/unistd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/unistd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/unistd_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/asm-offsets.h \ + include/generated/asm-offsets.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ia32_unistd.h \ + include/linux/rculist.h \ + include/linux/rtmutex.h \ + $(wildcard include/config/debug/rt/mutexes.h) \ + include/linux/plist.h \ + $(wildcard include/config/debug/pi/list.h) \ + include/linux/resource.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/resource.h \ + include/asm-generic/resource.h \ + include/linux/hrtimer.h \ + $(wildcard include/config/high/res/timers.h) \ + $(wildcard include/config/timerfd.h) \ + include/linux/timerqueue.h \ + include/linux/task_io_accounting.h \ + $(wildcard include/config/task/io/accounting.h) \ + include/linux/latencytop.h \ + include/linux/cred.h \ + $(wildcard include/config/debug/credentials.h) \ + $(wildcard include/config/security.h) \ + $(wildcard include/config/user/ns.h) \ + include/linux/key.h \ + $(wildcard include/config/sysctl.h) \ + include/linux/sysctl.h \ + include/linux/selinux.h \ + $(wildcard include/config/security/selinux.h) \ + include/linux/aio.h \ + include/linux/aio_abi.h \ + include/linux/uio.h \ + include/linux/net.h \ + include/linux/socket.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/socket.h \ + include/asm-generic/socket.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sockios.h \ + include/asm-generic/sockios.h \ + include/linux/sockios.h \ + include/linux/random.h \ + include/linux/irqnr.h \ + include/linux/fcntl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/fcntl.h \ + include/asm-generic/fcntl.h \ + include/linux/kmemcheck.h \ + /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_common.h \ + include/linux/device.h \ + $(wildcard include/config/debug/devres.h) \ + $(wildcard include/config/devtmpfs.h) \ + $(wildcard include/config/sysfs/deprecated.h) \ + include/linux/kobject.h \ + include/linux/sysfs.h \ + $(wildcard include/config/sysfs.h) \ + include/linux/kobject_ns.h \ + include/linux/kref.h \ + include/linux/klist.h \ + include/linux/module.h \ + $(wildcard include/config/symbol/prefix.h) \ + $(wildcard include/config/modversions.h) \ + $(wildcard include/config/unused/symbols.h) \ + $(wildcard include/config/kallsyms.h) \ + $(wildcard include/config/tracepoints.h) \ + $(wildcard include/config/event/tracing.h) \ + $(wildcard include/config/module/unload.h) \ + $(wildcard include/config/constructors.h) \ + $(wildcard include/config/debug/set/module/ronx.h) \ + include/linux/stat.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/stat.h \ + include/linux/kmod.h \ + include/linux/gfp.h \ + include/linux/elf.h \ + include/linux/elf-em.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/elf.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/user.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/user_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vdso.h \ + include/linux/moduleparam.h \ + $(wildcard include/config/alpha.h) \ + $(wildcard include/config/ia64.h) \ + $(wildcard include/config/ppc64.h) \ + include/linux/tracepoint.h \ + include/linux/jump_label.h \ + $(wildcard include/config/jump/label.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/jump_label.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/module.h \ + $(wildcard include/config/m586.h) \ + $(wildcard include/config/m586tsc.h) \ + $(wildcard include/config/m586mmx.h) \ + $(wildcard include/config/mcore2.h) \ + $(wildcard include/config/matom.h) \ + $(wildcard include/config/m686.h) \ + $(wildcard include/config/mpentiumii.h) \ + $(wildcard include/config/mpentiumiii.h) \ + $(wildcard include/config/mpentiumm.h) \ + $(wildcard include/config/mpentium4.h) \ + $(wildcard include/config/mk6.h) \ + $(wildcard include/config/mk8.h) \ + $(wildcard include/config/melan.h) \ + $(wildcard include/config/mcrusoe.h) \ + $(wildcard include/config/mefficeon.h) \ + $(wildcard include/config/mwinchipc6.h) \ + $(wildcard include/config/mwinchip3d.h) \ + $(wildcard include/config/mcyrixiii.h) \ + $(wildcard include/config/mviac3/2.h) \ + $(wildcard include/config/mviac7.h) \ + $(wildcard include/config/mgeodegx1.h) \ + $(wildcard include/config/mgeode/lx.h) \ + include/asm-generic/module.h \ + include/trace/events/module.h \ + include/trace/define_trace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/device.h \ + $(wildcard include/config/dmar.h) \ + $(wildcard include/config/amd/iommu.h) \ + include/linux/pm_wakeup.h \ + include/linux/interrupt.h \ + $(wildcard include/config/irq/forced/threading.h) \ + $(wildcard include/config/generic/irq/probe.h) \ + include/linux/irqreturn.h \ + include/linux/hardirq.h \ + include/linux/ftrace_irq.h \ + $(wildcard include/config/ftrace/nmi/enter.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/hardirq.h \ + $(wildcard include/config/x86/thermal/vector.h) \ + $(wildcard include/config/x86/mce/threshold.h) \ + include/linux/irq.h \ + $(wildcard include/config/s390.h) \ + $(wildcard include/config/irq/release/method.h) \ + $(wildcard include/config/generic/pending/irq.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq_regs.h \ + include/linux/irqdesc.h \ + $(wildcard include/config/irq/preflow/fasteoi.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/hw_irq.h \ + $(wildcard include/config/intr/remap.h) \ + include/linux/profile.h \ + $(wildcard include/config/profiling.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sections.h \ + $(wildcard include/config/debug/rodata.h) \ + include/asm-generic/sections.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/x86/wp/works/ok.h) \ + $(wildcard include/config/x86/intel/usercopy.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/uaccess_64.h \ + include/trace/events/irq.h \ + include/linux/usb.h \ + $(wildcard include/config/usb/devicefs.h) \ + $(wildcard include/config/usb/mon.h) \ + $(wildcard include/config/usb/device/class.h) \ + $(wildcard include/config/usb/suspend.h) \ + include/linux/mod_devicetable.h \ + include/linux/usb/ch9.h \ + $(wildcard include/config/size.h) \ + $(wildcard include/config/att/one.h) \ + $(wildcard include/config/att/selfpower.h) \ + $(wildcard include/config/att/wakeup.h) \ + $(wildcard include/config/att/battery.h) \ + include/linux/delay.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/delay.h \ + include/linux/fs.h \ + $(wildcard include/config/quota.h) \ + $(wildcard include/config/fsnotify.h) \ + $(wildcard include/config/ima.h) \ + $(wildcard include/config/fs/posix/acl.h) \ + $(wildcard include/config/debug/writecount.h) \ + $(wildcard include/config/file/locking.h) \ + $(wildcard include/config/fs/xip.h) \ + $(wildcard include/config/migration.h) \ + include/linux/limits.h \ + include/linux/blk_types.h \ + $(wildcard include/config/blk/dev/integrity.h) \ + include/linux/kdev_t.h \ + include/linux/dcache.h \ + include/linux/rculist_bl.h \ + include/linux/list_bl.h \ + include/linux/bit_spinlock.h \ + include/linux/path.h \ + include/linux/radix-tree.h \ + include/linux/semaphore.h \ + include/linux/fiemap.h \ + include/linux/quota.h \ + $(wildcard include/config/quota/netlink/interface.h) \ + include/linux/dqblk_xfs.h \ + include/linux/dqblk_v1.h \ + include/linux/dqblk_v2.h \ + include/linux/dqblk_qtree.h \ + include/linux/nfs_fs_i.h \ + include/linux/nfs.h \ + include/linux/sunrpc/msg_prot.h \ + include/linux/inet.h \ + include/linux/pm_runtime.h \ + $(wildcard include/config/pm/runtime/clk.h) \ + $(wildcard include/config/have/clk.h) \ + /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci.h \ + include/linux/usb/hcd.h \ + $(wildcard include/config/pci.h) \ + include/linux/usb/ch11.h \ + $(wildcard include/config/error.h) \ + $(wildcard include/config/err.h) \ + +/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_sysfs.o: $(deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_sysfs.o) + +$(deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_sysfs.o): diff --git a/modules/hp2101nw/usbip/.vhci_tx.o.cmd b/modules/hp2101nw/usbip/.vhci_tx.o.cmd new file mode 100644 index 0000000..0719e3e --- /dev/null +++ b/modules/hp2101nw/usbip/.vhci_tx.o.cmd @@ -0,0 +1,702 @@ +cmd_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_tx.o := gcc -Wp,-MD,/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/.vhci_tx.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include -I/usr/src/linux-headers-3.0.0-16-generic/arch/x86/include -Iarch/x86/include/generated -Iinclude -include include/generated/autoconf.h -Iubuntu/include -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m64 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=1024 -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -DHCD_HEADER=\"/usr/src/linux-headers-3.0.0-16-generic/include/linux/usb/hcd.h\" -DMODULE -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(vhci_tx)" -D"KBUILD_MODNAME=KBUILD_STR(hp2101nw)" -c -o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/.tmp_vhci_tx.o /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_tx.c + +source_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_tx.o := /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_tx.c + +deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_tx.o := \ + include/linux/kthread.h \ + $(wildcard include/config/lockdep.h) \ + include/linux/err.h \ + include/linux/compiler.h \ + $(wildcard include/config/sparse/rcu/pointer.h) \ + $(wildcard include/config/trace/branch/profiling.h) \ + $(wildcard include/config/profile/all/branches.h) \ + $(wildcard include/config/enable/must/check.h) \ + $(wildcard include/config/enable/warn/deprecated.h) \ + include/linux/compiler-gcc.h \ + $(wildcard include/config/arch/supports/optimized/inlining.h) \ + $(wildcard include/config/optimize/inlining.h) \ + include/linux/compiler-gcc4.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/errno.h \ + include/asm-generic/errno.h \ + include/asm-generic/errno-base.h \ + include/linux/sched.h \ + $(wildcard include/config/sched/debug.h) \ + $(wildcard include/config/prove/rcu.h) \ + $(wildcard include/config/smp.h) \ + $(wildcard include/config/no/hz.h) \ + $(wildcard include/config/lockup/detector.h) \ + $(wildcard include/config/detect/hung/task.h) \ + $(wildcard include/config/mmu.h) \ + $(wildcard include/config/core/dump/default/elf/headers.h) \ + $(wildcard include/config/sched/autogroup.h) \ + $(wildcard include/config/virt/cpu/accounting.h) \ + $(wildcard include/config/bsd/process/acct.h) \ + $(wildcard include/config/taskstats.h) \ + $(wildcard include/config/audit.h) \ + $(wildcard include/config/cgroups.h) \ + $(wildcard include/config/inotify/user.h) \ + $(wildcard include/config/fanotify.h) \ + $(wildcard include/config/epoll.h) \ + $(wildcard include/config/posix/mqueue.h) \ + $(wildcard include/config/keys.h) \ + $(wildcard include/config/perf/events.h) \ + $(wildcard include/config/schedstats.h) \ + $(wildcard include/config/task/delay/acct.h) \ + $(wildcard include/config/fair/group/sched.h) \ + $(wildcard include/config/rt/group/sched.h) \ + $(wildcard include/config/preempt/notifiers.h) \ + $(wildcard include/config/blk/dev/io/trace.h) \ + $(wildcard include/config/preempt/rcu.h) \ + $(wildcard include/config/rcu/boost.h) \ + $(wildcard include/config/tree/preempt/rcu.h) \ + $(wildcard include/config/compat/brk.h) \ + $(wildcard include/config/cc/stackprotector.h) \ + $(wildcard include/config/sysvipc.h) \ + $(wildcard include/config/auditsyscall.h) \ + $(wildcard include/config/generic/hardirqs.h) \ + $(wildcard include/config/rt/mutexes.h) \ + $(wildcard include/config/debug/mutexes.h) \ + $(wildcard include/config/trace/irqflags.h) \ + $(wildcard include/config/block.h) \ + $(wildcard include/config/task/xacct.h) \ + $(wildcard include/config/cpusets.h) \ + $(wildcard include/config/futex.h) \ + $(wildcard include/config/compat.h) \ + $(wildcard include/config/numa.h) \ + $(wildcard include/config/fault/injection.h) \ + $(wildcard include/config/latencytop.h) \ + $(wildcard include/config/function/graph/tracer.h) \ + $(wildcard include/config/tracing.h) \ + $(wildcard include/config/cgroup/mem/res/ctlr.h) \ + $(wildcard include/config/have/hw/breakpoint.h) \ + $(wildcard include/config/cpumask/offstack.h) \ + $(wildcard include/config/have/unstable/sched/clock.h) \ + $(wildcard include/config/irq/time/accounting.h) \ + $(wildcard include/config/hotplug/cpu.h) \ + $(wildcard include/config/proc/fs.h) \ + $(wildcard include/config/stack/growsup.h) \ + $(wildcard include/config/debug/stack/usage.h) \ + $(wildcard include/config/preempt.h) \ + $(wildcard include/config/cgroup/sched.h) \ + $(wildcard include/config/mm/owner.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/param.h \ + include/asm-generic/param.h \ + $(wildcard include/config/hz.h) \ + include/linux/capability.h \ + include/linux/types.h \ + $(wildcard include/config/uid16.h) \ + $(wildcard include/config/lbdaf.h) \ + $(wildcard include/config/arch/dma/addr/t/64bit.h) \ + $(wildcard include/config/phys/addr/t/64bit.h) \ + $(wildcard include/config/64bit.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/types.h \ + include/asm-generic/types.h \ + include/asm-generic/int-ll64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bitsperlong.h \ + include/asm-generic/bitsperlong.h \ + include/linux/posix_types.h \ + include/linux/stddef.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/x86/32.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/posix_types_64.h \ + include/linux/threads.h \ + $(wildcard include/config/nr/cpus.h) \ + $(wildcard include/config/base/small.h) \ + include/linux/kernel.h \ + $(wildcard include/config/preempt/voluntary.h) \ + $(wildcard include/config/debug/spinlock/sleep.h) \ + $(wildcard include/config/prove/locking.h) \ + $(wildcard include/config/ring/buffer.h) \ + $(wildcard include/config/compaction.h) \ + $(wildcard include/config/ftrace/mcount/record.h) \ + /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stdarg.h \ + include/linux/linkage.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/x86/64.h) \ + $(wildcard include/config/x86/alignment/16.h) \ + include/linux/stringify.h \ + include/linux/bitops.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bitops.h \ + $(wildcard include/config/x86/cmov.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/alternative.h \ + $(wildcard include/config/paravirt.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/asm.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cpufeature.h \ + $(wildcard include/config/x86/invlpg.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/required-features.h \ + $(wildcard include/config/x86/minimum/cpu/family.h) \ + $(wildcard include/config/math/emulation.h) \ + $(wildcard include/config/x86/pae.h) \ + $(wildcard include/config/x86/cmpxchg64.h) \ + $(wildcard include/config/x86/use/3dnow.h) \ + $(wildcard include/config/x86/p6/nop.h) \ + include/asm-generic/bitops/find.h \ + $(wildcard include/config/generic/find/first/bit.h) \ + include/asm-generic/bitops/sched.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/arch_hweight.h \ + include/asm-generic/bitops/const_hweight.h \ + include/asm-generic/bitops/fls64.h \ + include/asm-generic/bitops/le.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/byteorder.h \ + include/linux/byteorder/little_endian.h \ + include/linux/swab.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/swab.h \ + $(wildcard include/config/x86/bswap.h) \ + include/linux/byteorder/generic.h \ + include/linux/log2.h \ + $(wildcard include/config/arch/has/ilog2/u32.h) \ + $(wildcard include/config/arch/has/ilog2/u64.h) \ + include/linux/typecheck.h \ + include/linux/printk.h \ + $(wildcard include/config/printk.h) \ + $(wildcard include/config/dynamic/debug.h) \ + include/linux/init.h \ + $(wildcard include/config/modules.h) \ + $(wildcard include/config/hotplug.h) \ + include/linux/dynamic_debug.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bug.h \ + $(wildcard include/config/bug.h) \ + $(wildcard include/config/debug/bugverbose.h) \ + include/asm-generic/bug.h \ + $(wildcard include/config/generic/bug.h) \ + $(wildcard include/config/generic/bug/relative/pointers.h) \ + include/linux/timex.h \ + include/linux/time.h \ + $(wildcard include/config/arch/uses/gettimeoffset.h) \ + include/linux/cache.h \ + $(wildcard include/config/arch/has/cache/line/size.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cache.h \ + $(wildcard include/config/x86/l1/cache/shift.h) \ + $(wildcard include/config/x86/internode/cache/shift.h) \ + $(wildcard include/config/x86/vsmp.h) \ + include/linux/seqlock.h \ + include/linux/spinlock.h \ + $(wildcard include/config/debug/spinlock.h) \ + $(wildcard include/config/generic/lockbreak.h) \ + $(wildcard include/config/debug/lock/alloc.h) \ + include/linux/preempt.h \ + $(wildcard include/config/debug/preempt.h) \ + $(wildcard include/config/preempt/tracer.h) \ + include/linux/thread_info.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/thread_info.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_types.h \ + include/linux/const.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/physical/start.h) \ + $(wildcard include/config/physical/align.h) \ + $(wildcard include/config/flatmem.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/page_64.h \ + include/asm-generic/memory_model.h \ + $(wildcard include/config/discontigmem.h) \ + $(wildcard include/config/sparsemem/vmemmap.h) \ + $(wildcard include/config/sparsemem.h) \ + include/asm-generic/getorder.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/processor.h \ + $(wildcard include/config/m386.h) \ + $(wildcard include/config/m486.h) \ + $(wildcard include/config/x86/debugctlmsr.h) \ + $(wildcard include/config/cpu/sup/amd.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/vm86.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vm86.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ptrace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ptrace-abi.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/segment.h \ + include/asm-generic/ptrace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/math_emu.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sigcontext.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/current.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/percpu.h \ + $(wildcard include/config/x86/64/smp.h) \ + include/asm-generic/percpu.h \ + $(wildcard include/config/have/setup/per/cpu/area.h) \ + include/linux/percpu-defs.h \ + $(wildcard include/config/debug/force/weak/per/cpu.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/system.h \ + $(wildcard include/config/ia32/emulation.h) \ + $(wildcard include/config/x86/32/lazy/gs.h) \ + $(wildcard include/config/x86/ppro/fence.h) \ + $(wildcard include/config/x86/oostore.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cmpxchg.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cmpxchg_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/nops.h \ + $(wildcard include/config/mk7.h) \ + include/linux/irqflags.h \ + $(wildcard include/config/irqsoff/tracer.h) \ + $(wildcard include/config/trace/irqflags/support.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irqflags.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/paravirt.h \ + $(wildcard include/config/transparent/hugepage.h) \ + $(wildcard include/config/paravirt/spinlocks.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/kmemcheck.h) \ + $(wildcard include/config/compat/vdso.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pgtable_64_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/x86/local/apic.h) \ + $(wildcard include/config/paravirt/debug.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/desc_defs.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/kmap_types.h \ + $(wildcard include/config/debug/highmem.h) \ + include/asm-generic/kmap_types.h \ + include/linux/cpumask.h \ + $(wildcard include/config/debug/per/cpu/maps.h) \ + $(wildcard include/config/disable/obsolete/cpumask/functions.h) \ + include/linux/bitmap.h \ + include/linux/string.h \ + $(wildcard include/config/binary/printf.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/string.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/string_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/msr.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/msr-index.h \ + include/linux/ioctl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ioctl.h \ + include/asm-generic/ioctl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cpumask.h \ + include/linux/personality.h \ + include/linux/math64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/div64.h \ + include/asm-generic/div64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ftrace.h \ + $(wildcard include/config/function/tracer.h) \ + $(wildcard include/config/dynamic/ftrace.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/atomic.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/atomic64_64.h \ + include/asm-generic/atomic-long.h \ + include/linux/list.h \ + $(wildcard include/config/debug/list.h) \ + include/linux/poison.h \ + $(wildcard include/config/illegal/pointer/value.h) \ + include/linux/bottom_half.h \ + include/linux/spinlock_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/spinlock_types.h \ + include/linux/lockdep.h \ + $(wildcard include/config/lock/stat.h) \ + include/linux/rwlock_types.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/spinlock.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/rwlock.h \ + include/linux/rwlock.h \ + include/linux/spinlock_api_smp.h \ + $(wildcard include/config/inline/spin/lock.h) \ + $(wildcard include/config/inline/spin/lock/bh.h) \ + $(wildcard include/config/inline/spin/lock/irq.h) \ + $(wildcard include/config/inline/spin/lock/irqsave.h) \ + $(wildcard include/config/inline/spin/trylock.h) \ + $(wildcard include/config/inline/spin/trylock/bh.h) \ + $(wildcard include/config/inline/spin/unlock.h) \ + $(wildcard include/config/inline/spin/unlock/bh.h) \ + $(wildcard include/config/inline/spin/unlock/irq.h) \ + $(wildcard include/config/inline/spin/unlock/irqrestore.h) \ + include/linux/rwlock_api_smp.h \ + $(wildcard include/config/inline/read/lock.h) \ + $(wildcard include/config/inline/write/lock.h) \ + $(wildcard include/config/inline/read/lock/bh.h) \ + $(wildcard include/config/inline/write/lock/bh.h) \ + $(wildcard include/config/inline/read/lock/irq.h) \ + $(wildcard include/config/inline/write/lock/irq.h) \ + $(wildcard include/config/inline/read/lock/irqsave.h) \ + $(wildcard include/config/inline/write/lock/irqsave.h) \ + $(wildcard include/config/inline/read/trylock.h) \ + $(wildcard include/config/inline/write/trylock.h) \ + $(wildcard include/config/inline/read/unlock.h) \ + $(wildcard include/config/inline/write/unlock.h) \ + $(wildcard include/config/inline/read/unlock/bh.h) \ + $(wildcard include/config/inline/write/unlock/bh.h) \ + $(wildcard include/config/inline/read/unlock/irq.h) \ + $(wildcard include/config/inline/write/unlock/irq.h) \ + $(wildcard include/config/inline/read/unlock/irqrestore.h) \ + $(wildcard include/config/inline/write/unlock/irqrestore.h) \ + include/linux/param.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/timex.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/tsc.h \ + $(wildcard include/config/x86/tsc.h) \ + include/linux/jiffies.h \ + include/linux/rbtree.h \ + include/linux/errno.h \ + include/linux/nodemask.h \ + $(wildcard include/config/highmem.h) \ + include/linux/numa.h \ + $(wildcard include/config/nodes/shift.h) \ + include/linux/mm_types.h \ + $(wildcard include/config/split/ptlock/cpus.h) \ + $(wildcard include/config/want/page/debug/flags.h) \ + $(wildcard include/config/aio.h) \ + $(wildcard include/config/mmu/notifier.h) \ + include/linux/auxvec.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/auxvec.h \ + include/linux/prio_tree.h \ + include/linux/rwsem.h \ + $(wildcard include/config/rwsem/generic/spinlock.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/rwsem.h \ + include/linux/completion.h \ + include/linux/wait.h \ + include/linux/page-debug-flags.h \ + $(wildcard include/config/page/poisoning.h) \ + $(wildcard include/config/page/debug/something/else.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmu.h \ + include/linux/mutex.h \ + $(wildcard include/config/have/arch/mutex/cpu/relax.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/cputime.h \ + include/asm-generic/cputime.h \ + include/linux/smp.h \ + $(wildcard include/config/use/generic/smp/helpers.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/smp.h \ + $(wildcard include/config/x86/io/apic.h) \ + $(wildcard include/config/x86/32/smp.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/x86/numaq.h) \ + $(wildcard include/config/mca.h) \ + $(wildcard include/config/eisa.h) \ + $(wildcard include/config/x86/mpparse.h) \ + $(wildcard include/config/acpi.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mpspec_def.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/x86_init.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/bootparam.h \ + include/linux/screen_info.h \ + include/linux/apm_bios.h \ + include/linux/edd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/e820.h \ + $(wildcard include/config/efi.h) \ + $(wildcard include/config/intel/txt.h) \ + $(wildcard include/config/hibernation.h) \ + $(wildcard include/config/memtest.h) \ + include/linux/ioport.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ist.h \ + include/video/edid.h \ + $(wildcard include/config/x86.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/apicdef.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/apic.h \ + $(wildcard include/config/x86/x2apic.h) \ + include/linux/pm.h \ + $(wildcard include/config/pm.h) \ + $(wildcard include/config/pm/sleep.h) \ + $(wildcard include/config/pm/runtime.h) \ + include/linux/workqueue.h \ + $(wildcard include/config/debug/objects/work.h) \ + $(wildcard include/config/freezer.h) \ + include/linux/timer.h \ + $(wildcard include/config/timer/stats.h) \ + $(wildcard include/config/debug/objects/timers.h) \ + include/linux/ktime.h \ + $(wildcard include/config/ktime/scalar.h) \ + include/linux/debugobjects.h \ + $(wildcard include/config/debug/objects.h) \ + $(wildcard include/config/debug/objects/free.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/provide/ohci1394/dma/init.h) \ + $(wildcard include/config/x86/visws/apic.h) \ + $(wildcard include/config/x86/f00f/bug.h) \ + $(wildcard include/config/x86/cyclone/timer.h) \ + $(wildcard include/config/pci/mmconfig.h) \ + $(wildcard include/config/x86/mrst.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/acpi.h \ + $(wildcard include/config/acpi/numa.h) \ + include/acpi/pdc_intel.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/numa.h \ + $(wildcard include/config/numa/emu.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/topology.h \ + $(wildcard include/config/x86/ht.h) \ + include/asm-generic/topology.h \ + $(wildcard include/config/have/memoryless/nodes.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/numa_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/trampoline.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/io.h \ + $(wildcard include/config/xen.h) \ + include/xen/xen.h \ + $(wildcard include/config/xen/dom0.h) \ + include/xen/interface/xen.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/interface.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/interface_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/pvclock-abi.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/xen/hypervisor.h \ + include/asm-generic/iomap.h \ + include/linux/vmalloc.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vsyscall.h \ + $(wildcard include/config/generic/time.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vvar.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/io_apic.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/sparse/irq.h) \ + include/linux/sem.h \ + include/linux/ipc.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ipcbuf.h \ + include/asm-generic/ipcbuf.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sembuf.h \ + include/linux/rcupdate.h \ + $(wildcard include/config/rcu/torture/test.h) \ + $(wildcard include/config/tree/rcu.h) \ + $(wildcard include/config/tiny/rcu.h) \ + $(wildcard include/config/tiny/preempt/rcu.h) \ + $(wildcard include/config/debug/objects/rcu/head.h) \ + $(wildcard include/config/preempt/rt.h) \ + include/linux/rcutree.h \ + include/linux/signal.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/signal.h \ + include/asm-generic/signal-defs.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/siginfo.h \ + include/asm-generic/siginfo.h \ + include/linux/pid.h \ + include/linux/percpu.h \ + $(wildcard include/config/need/per/cpu/embed/first/chunk.h) \ + $(wildcard include/config/need/per/cpu/page/first/chunk.h) \ + include/linux/pfn.h \ + include/linux/topology.h \ + $(wildcard include/config/sched/smt.h) \ + $(wildcard include/config/sched/mc.h) \ + $(wildcard include/config/sched/book.h) \ + $(wildcard include/config/use/percpu/numa/node/id.h) \ + include/linux/mmzone.h \ + $(wildcard include/config/force/max/zoneorder.h) \ + $(wildcard include/config/zone/dma.h) \ + $(wildcard include/config/zone/dma32.h) \ + $(wildcard include/config/memory/hotplug.h) \ + $(wildcard include/config/arch/populates/node/map.h) \ + $(wildcard include/config/flat/node/mem/map.h) \ + $(wildcard include/config/no/bootmem.h) \ + $(wildcard include/config/have/memory/present.h) \ + $(wildcard include/config/need/node/memmap/size.h) \ + $(wildcard include/config/need/multiple/nodes.h) \ + $(wildcard include/config/have/arch/early/pfn/to/nid.h) \ + $(wildcard include/config/sparsemem/extreme.h) \ + $(wildcard include/config/have/arch/pfn/valid.h) \ + $(wildcard include/config/nodes/span/other/nodes.h) \ + $(wildcard include/config/holes/in/zone.h) \ + $(wildcard include/config/arch/has/holes/memorymodel.h) \ + include/linux/pageblock-flags.h \ + $(wildcard include/config/hugetlb/page.h) \ + $(wildcard include/config/hugetlb/page/size/variable.h) \ + include/generated/bounds.h \ + include/linux/memory_hotplug.h \ + $(wildcard include/config/memory/hotremove.h) \ + $(wildcard include/config/have/arch/nodedata/extension.h) \ + include/linux/notifier.h \ + include/linux/srcu.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmzone.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/mmzone_64.h \ + include/linux/mmdebug.h \ + $(wildcard include/config/debug/vm.h) \ + $(wildcard include/config/debug/virtual.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sparsemem.h \ + include/linux/proportions.h \ + include/linux/percpu_counter.h \ + include/linux/seccomp.h \ + $(wildcard include/config/seccomp.h) \ + $(wildcard include/config/seccomp/filter.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/seccomp.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/seccomp_64.h \ + include/linux/unistd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/unistd.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/unistd_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/asm-offsets.h \ + include/generated/asm-offsets.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/ia32_unistd.h \ + include/linux/rculist.h \ + include/linux/rtmutex.h \ + $(wildcard include/config/debug/rt/mutexes.h) \ + include/linux/plist.h \ + $(wildcard include/config/debug/pi/list.h) \ + include/linux/resource.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/resource.h \ + include/asm-generic/resource.h \ + include/linux/hrtimer.h \ + $(wildcard include/config/high/res/timers.h) \ + $(wildcard include/config/timerfd.h) \ + include/linux/timerqueue.h \ + include/linux/task_io_accounting.h \ + $(wildcard include/config/task/io/accounting.h) \ + include/linux/latencytop.h \ + include/linux/cred.h \ + $(wildcard include/config/debug/credentials.h) \ + $(wildcard include/config/security.h) \ + $(wildcard include/config/user/ns.h) \ + include/linux/key.h \ + $(wildcard include/config/sysctl.h) \ + include/linux/sysctl.h \ + include/linux/selinux.h \ + $(wildcard include/config/security/selinux.h) \ + include/linux/aio.h \ + include/linux/aio_abi.h \ + include/linux/uio.h \ + include/linux/slab.h \ + $(wildcard include/config/slab/debug.h) \ + $(wildcard include/config/failslab.h) \ + $(wildcard include/config/slub.h) \ + $(wildcard include/config/slob.h) \ + $(wildcard include/config/debug/slab.h) \ + $(wildcard include/config/slab.h) \ + include/linux/gfp.h \ + include/linux/slub_def.h \ + $(wildcard include/config/slub/stats.h) \ + $(wildcard include/config/slub/debug.h) \ + $(wildcard include/config/sysfs.h) \ + include/linux/kobject.h \ + include/linux/sysfs.h \ + include/linux/kobject_ns.h \ + include/linux/kref.h \ + include/linux/kmemleak.h \ + $(wildcard include/config/debug/kmemleak.h) \ + /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw_common.h \ + include/linux/device.h \ + $(wildcard include/config/debug/devres.h) \ + $(wildcard include/config/devtmpfs.h) \ + $(wildcard include/config/sysfs/deprecated.h) \ + include/linux/klist.h \ + include/linux/module.h \ + $(wildcard include/config/symbol/prefix.h) \ + $(wildcard include/config/modversions.h) \ + $(wildcard include/config/unused/symbols.h) \ + $(wildcard include/config/kallsyms.h) \ + $(wildcard include/config/tracepoints.h) \ + $(wildcard include/config/event/tracing.h) \ + $(wildcard include/config/module/unload.h) \ + $(wildcard include/config/constructors.h) \ + $(wildcard include/config/debug/set/module/ronx.h) \ + include/linux/stat.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/stat.h \ + include/linux/kmod.h \ + include/linux/elf.h \ + include/linux/elf-em.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/elf.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/user.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/user_64.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/vdso.h \ + include/linux/moduleparam.h \ + $(wildcard include/config/alpha.h) \ + $(wildcard include/config/ia64.h) \ + $(wildcard include/config/ppc64.h) \ + include/linux/tracepoint.h \ + include/linux/jump_label.h \ + $(wildcard include/config/jump/label.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/jump_label.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/module.h \ + $(wildcard include/config/m586.h) \ + $(wildcard include/config/m586tsc.h) \ + $(wildcard include/config/m586mmx.h) \ + $(wildcard include/config/mcore2.h) \ + $(wildcard include/config/matom.h) \ + $(wildcard include/config/m686.h) \ + $(wildcard include/config/mpentiumii.h) \ + $(wildcard include/config/mpentiumiii.h) \ + $(wildcard include/config/mpentiumm.h) \ + $(wildcard include/config/mpentium4.h) \ + $(wildcard include/config/mk6.h) \ + $(wildcard include/config/mk8.h) \ + $(wildcard include/config/melan.h) \ + $(wildcard include/config/mcrusoe.h) \ + $(wildcard include/config/mefficeon.h) \ + $(wildcard include/config/mwinchipc6.h) \ + $(wildcard include/config/mwinchip3d.h) \ + $(wildcard include/config/mcyrixiii.h) \ + $(wildcard include/config/mviac3/2.h) \ + $(wildcard include/config/mviac7.h) \ + $(wildcard include/config/mgeodegx1.h) \ + $(wildcard include/config/mgeode/lx.h) \ + include/asm-generic/module.h \ + include/trace/events/module.h \ + include/trace/define_trace.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/device.h \ + $(wildcard include/config/dmar.h) \ + $(wildcard include/config/amd/iommu.h) \ + include/linux/pm_wakeup.h \ + include/linux/interrupt.h \ + $(wildcard include/config/irq/forced/threading.h) \ + $(wildcard include/config/generic/irq/probe.h) \ + include/linux/irqreturn.h \ + include/linux/irqnr.h \ + include/linux/hardirq.h \ + include/linux/ftrace_irq.h \ + $(wildcard include/config/ftrace/nmi/enter.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/hardirq.h \ + $(wildcard include/config/x86/thermal/vector.h) \ + $(wildcard include/config/x86/mce/threshold.h) \ + include/linux/irq.h \ + $(wildcard include/config/s390.h) \ + $(wildcard include/config/irq/release/method.h) \ + $(wildcard include/config/generic/pending/irq.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/irq_regs.h \ + include/linux/irqdesc.h \ + $(wildcard include/config/irq/preflow/fasteoi.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/hw_irq.h \ + $(wildcard include/config/intr/remap.h) \ + include/linux/profile.h \ + $(wildcard include/config/profiling.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sections.h \ + $(wildcard include/config/debug/rodata.h) \ + include/asm-generic/sections.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/x86/wp/works/ok.h) \ + $(wildcard include/config/x86/intel/usercopy.h) \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/uaccess_64.h \ + include/trace/events/irq.h \ + include/linux/net.h \ + include/linux/socket.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/socket.h \ + include/asm-generic/socket.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/sockios.h \ + include/asm-generic/sockios.h \ + include/linux/sockios.h \ + include/linux/random.h \ + include/linux/fcntl.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/fcntl.h \ + include/asm-generic/fcntl.h \ + include/linux/kmemcheck.h \ + include/linux/usb.h \ + $(wildcard include/config/usb/devicefs.h) \ + $(wildcard include/config/usb/mon.h) \ + $(wildcard include/config/usb/device/class.h) \ + $(wildcard include/config/usb/suspend.h) \ + include/linux/mod_devicetable.h \ + include/linux/usb/ch9.h \ + $(wildcard include/config/size.h) \ + $(wildcard include/config/att/one.h) \ + $(wildcard include/config/att/selfpower.h) \ + $(wildcard include/config/att/wakeup.h) \ + $(wildcard include/config/att/battery.h) \ + include/linux/delay.h \ + /usr/src/linux-headers-3.0.0-16-generic/arch/x86/include/asm/delay.h \ + include/linux/fs.h \ + $(wildcard include/config/quota.h) \ + $(wildcard include/config/fsnotify.h) \ + $(wildcard include/config/ima.h) \ + $(wildcard include/config/fs/posix/acl.h) \ + $(wildcard include/config/debug/writecount.h) \ + $(wildcard include/config/file/locking.h) \ + $(wildcard include/config/fs/xip.h) \ + $(wildcard include/config/migration.h) \ + include/linux/limits.h \ + include/linux/blk_types.h \ + $(wildcard include/config/blk/dev/integrity.h) \ + include/linux/kdev_t.h \ + include/linux/dcache.h \ + include/linux/rculist_bl.h \ + include/linux/list_bl.h \ + include/linux/bit_spinlock.h \ + include/linux/path.h \ + include/linux/radix-tree.h \ + include/linux/semaphore.h \ + include/linux/fiemap.h \ + include/linux/quota.h \ + $(wildcard include/config/quota/netlink/interface.h) \ + include/linux/dqblk_xfs.h \ + include/linux/dqblk_v1.h \ + include/linux/dqblk_v2.h \ + include/linux/dqblk_qtree.h \ + include/linux/nfs_fs_i.h \ + include/linux/nfs.h \ + include/linux/sunrpc/msg_prot.h \ + include/linux/inet.h \ + include/linux/pm_runtime.h \ + $(wildcard include/config/pm/runtime/clk.h) \ + $(wildcard include/config/have/clk.h) \ + /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci.h \ + include/linux/usb/hcd.h \ + $(wildcard include/config/pci.h) \ + include/linux/usb/ch11.h \ + $(wildcard include/config/error.h) \ + $(wildcard include/config/err.h) \ + +/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_tx.o: $(deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_tx.o) + +$(deps_/home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/vhci_tx.o): diff --git a/modules/hp2101nw/usbip/Kconfig b/modules/hp2101nw/usbip/Kconfig new file mode 100644 index 0000000..b2f09e9 --- /dev/null +++ b/modules/hp2101nw/usbip/Kconfig @@ -0,0 +1,23 @@ +config HP2101NW + tristate "Support for HP2101nw (EXPERIMENTAL)" + depends on USB && NET && EXPERIMENTAL + default Y + ---help--- + This enables the virtual host controller driver for + pushing USB packets over IP to allow remote + printers connected to the HP2101nw wireless USB print server. + + For more details, and to get the userspace utility + programs, please see http://TODO/. + + To compile this as a module, choose M here: the module will + be called hp2101nw. + + If unsure, say N. + +config HP2101NW_DEBUG + bool "Debug messages for HP2101NW" + depends on HP2101NW + default N + ---help--- + This enables the debug messages from the HP2101nw drivers. diff --git a/modules/hp2101nw/usbip/Makefile b/modules/hp2101nw/usbip/Makefile new file mode 100644 index 0000000..bab034a --- /dev/null +++ b/modules/hp2101nw/usbip/Makefile @@ -0,0 +1,64 @@ +# Makefile for the USB/IP driver +# +# $Id: Makefile 14 2007-06-18 12:20:03Z hirofuchi $ +# +# Copyright (C) 2003-2007 Takahiro Hirofuchi +# +# +# This is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This 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 for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +# USA. +# + + +# Please modify here or set environments. +# KSOURCE should be pointed to the build directory of your kernel. +# +DEBUG ?= n +# KSOURCE ?= /usr/src/linux +KSOURCE ?= /usr/src/linux-headers-3.0.0-16-generic + +%.x:%.c + gcc -o $@ $< + +KBUILD_VERBOSE:=1 + +HCD_HEADER:=$(KSOURCE)/include/linux/usb/hcd.h + +hp2101nw-objs := vhci_sysfs.o vhci_tx.o vhci_rx.o vhci_hcd.o hp2101nw_common.o hp2101nw_event.o + +obj-m += hp2101nw.o + +EXTRA_CFLAGS += -DHCD_HEADER=\"$(HCD_HEADER)\" + +ifeq ($(DEBUG),y) + EXTRA_CFLAGS += -DCONFIG_USB_DEBUG +endif + + +default: + make -C $(KSOURCE) LANG=C KBUILD_VERBOSE=${KBUILD_VERBOSE} M=`pwd` modules + +check: + #make -C $(KSOURCE) LANG=C KBUILD_VERBOSE=${KBUILD_VERBOSE} C=1 M=`pwd` modules checkstack namespacecheck headers_check + make -C $(KSOURCE) LANG=C KBUILD_VERBOSE=${KBUILD_VERBOSE} C=1 M=`pwd` modules + +.PHONY: cscope +cscope: + cscope -b -k -R + +.PHONY: clean +clean: + make -C $(KSOURCE) LANG=C KBUILD_VERBOSE=${KBUILD_VERBOSE} M=`pwd` clean + rm -f *.x *~ diff --git a/modules/hp2101nw/usbip/Makefile.kerneltree b/modules/hp2101nw/usbip/Makefile.kerneltree new file mode 100644 index 0000000..d0d6309 --- /dev/null +++ b/modules/hp2101nw/usbip/Makefile.kerneltree @@ -0,0 +1,4 @@ +ccflags-$(CONFIG_HP2101NW_DEBUG) := -DDEBUG + +obj-$(CONFIG_HP2101NW) += hp2101nw.o +hp2101nw-y := vhci_sysfs.o vhci_tx.o vhci_rx.o vhci_hcd.o hp2101nw_common.o hp2101nw_event.o diff --git a/modules/hp2101nw/usbip/Module.symvers b/modules/hp2101nw/usbip/Module.symvers new file mode 100644 index 0000000..3f5da7e --- /dev/null +++ b/modules/hp2101nw/usbip/Module.symvers @@ -0,0 +1,16 @@ +0xd4e8f88f dev_attr_hp2101nw_debug /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw (unknown) +0x6f587cd1 sockfd_to_socket /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw (unknown) +0x5931f29b hp2101nw_start_eh /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw (unknown) +0xc12f5920 hp2101nw_debug_flag /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw (unknown) +0xc567c2ca hp2101nw_event_add /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw (unknown) +0x07f263c0 hp2101nw_alloc_iso_desc_pdu /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw (unknown) +0xba71d0cf hp2101nw_event_happened /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw (unknown) +0x67af447b hp2101nw_dump_urb /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw (unknown) +0x1b137c13 hp2101nw_recv_iso /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw (unknown) +0x759a24cb hp2101nw_xmit /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw (unknown) +0xd2415666 hp2101nw_pad_iso /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw (unknown) +0x3fc430bc hp2101nw_header_correct_endian /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw (unknown) +0xcdaf511a hp2101nw_stop_eh /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw (unknown) +0xa426814b hp2101nw_pack_pdu /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw (unknown) +0x638d1442 hp2101nw_dump_header /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw (unknown) +0x44a4f409 hp2101nw_recv_xbuff /home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw (unknown) diff --git a/modules/hp2101nw/usbip/README b/modules/hp2101nw/usbip/README new file mode 100644 index 0000000..c11be57 --- /dev/null +++ b/modules/hp2101nw/usbip/README @@ -0,0 +1,6 @@ +TODO: + - more discussion about the protocol + - testing + - review of the userspace interface + +Please send patches for this code to Greg Kroah-Hartman <greg@kroah.com> diff --git a/modules/hp2101nw/usbip/hp2101nw.ko b/modules/hp2101nw/usbip/hp2101nw.ko new file mode 100644 index 0000000000000000000000000000000000000000..4c612093684fd2c6553f71d422c382416057fca2 GIT binary patch literal 52210 zcmb<-^>JfjWMqH=Mg}_u1P><4!0;j#!FB*M9T-#?6d70;7#Ktt7#Nrt7#Q6BLK!5P zRdeUDGp&5S!{(K2+RaI4moN1JD~A%H9-U7e!yUsMLmfkcJ(}NWyZ}jf96tu43=ep8 z`tI=T{O{B2d&Z;lx=*j`36Eai10KDhM~=H504X`{dIUn9fKX>Z6xfVz*CXAfXPSSo z^S94nWMJrZ```S7nZG@Qk%6JR_5fIkN9zI4&LjLS`HTz<9^JNZtuEcUM|?V8cpiMp z;c@T*tEc8s&*q~BKFqox6~4Wt8lJte96p`j!G<(f%dqgb-eF*1aOw6v<I?SV!l(0p zx9@@O&?9hffE9vek~MrfzaMv&VP#-o=yc}jc0JSS%=2GF6=X8h2~eJA^HBxE10Kf@ zf~0o+|NsBLPv<+2<Htc<uz4P~3?Kgg_v}1U&f(E{94zG1nQTC+p6=2!-L*%2I+HEH zMtF3)?(k?nq7m&F;~480=NKP*m|xz3!Kd>()Lp2qMEKID^S>c9SdSlg_5c6>*E^uD zMH5~KGS365W=iKVtg2pC{Qv)-U!DP!K0KP=7<hEXKJe*Gec{uY`@yHP^at3jAg_WG zibv;fkIw5Jy`gtJJI@|>1w{q}ScOY>>K(`CKkVh@P-lZheL5d_9()3g+asRMM+|(J z!7<?38>6D((Rm-N%CWgdMTMm#%A@l>R<C>Z)~G1#14SfQxliW{kM7t9KHaG=e7bW# z_;i>4IC*%2OXnkKD)8vMj}{OY_JMK>n)h*71`Dq_X<(qoFW&-62;lHR&OaPrw?IAX z(R#_V^E!Xa2~hfO{m<XBpOFC)E*`rRbK;Xqi!)O^_7@bDC={0@DtPWFE=W;GDlJy< z+?kSErcj)pob9<QwL}37Ja>bsocv_Z&Ug*aPJ7?pbVJ`xcMji9e*weWzMbI`zMb(3 zX^zL;4Y(Ly7x2qBfE?(t!@$5m0faqvfk*=b0|SqpAQFT<_JK$R16>2pP8Jo<&JYz2 z&rTl|0ng476$!^<E-DHPp3O%<hO($|F?jaYDR?#?VT8p-^I=Ah=HDFrE!!Cw7(6;} zcy`_eXV-&IIWV#;hi7jsq-=5Q_LK4Hd~SH4^Ogssn1KY@3{S=*j?Hy4Z2Yb6|NsAY z?Dpeu><;7c>3j}V28}(>?l29H8Bj4##v_IYd^(>ajPUGs<?!g9a0BF|)=MSs82UXx z7QNI2CvOK>u><$g5e}cu2hhCdqxl1p{airB(}Woe3=FR~@N-W<2B7?bi2uenAcuf3 zgGcXlPy~2({_!~8%JBdHe^6|sdUUg>YJi;9>3YKOfJbk82beRJ<NyEv9=%gFK&4D? z?F^63)*t^sBCQD^iO#7KV5(K%|Ns9lr!X=wq`}gkM>n@ecQA)X=P{4&y<k&1135f8 zxjcJ&R6q{)?4F{sfPsO*vvUrZ_UPpH=me>k0=v?;^(}u(IU@su;enlO3=9lDo&SBh zizPmLtoG>M3$paME2!{h@ag=vksTrma>GWp&mOCNI{$liyK#7Q2S|8yGi+q+be+@f z#9?@;({+Jkw_C)D2L7ps4!+=Te!$-ux?~rq66<tb0k+k%yKMr<->nBq*gd)#JUU$u z>;uXBbpGFMzyQr6ATxYA_ksi9cx%T0|NlW!D;i3b9lNK2g01yZiG*jjUq<I;kIuQE z;>x4>uz^QsZ^8fn{|~;9b2WV1dZ1L_qqlT|Pv>`!<E|hpp}7xK?;PcCSr2kVr)z^p zx9bFtPS*|(#>1Z7H7Xh&y;H%~_HG45h-c@GouKLz>~xRh3m%rY_*=Wcf%P6D#yA%g z!O#c*3wd_WQ31Kp!+I_#B7J(ZfAF^kfT9!@OUJ<Ky1_}qqdW9Os)w-%IBAq7do&&a zNkUU0C<&&)%NtOkC$Wzc7Dzil_0sG8oyR;txd~i1L9>ZZC&Y0O4e(MDqM;9DJ_D#8 zKu^D*d;^wrHT;H=TBol71z7L)9bgI^Cmx-@eR|h}Qo2uX>I{$0sS4nfx)qdme0uj9 zfO)N;V0`(2fq`LyM|Ty6PdAfCH&}&dX9b5(C%Z@YZct;wqjNHZG6E&%&MFR%PH~^k z_a2>7L21sTvlo=U!H)Cj2D3f7Au_Ee`CHa9ASL4GkmPyXbp{gy0|Pj1!ICe?DbVEm z+@ss+2PoA#b9A~c@aT3D=yY8JHNP5^2tbL>aR(^b?Sv%He?FZ{L4qE~TS2J|Bm-98 z{KKF$*t7YV0W8!#x+jCf${G?Ly<R`~TN%M&aSW!!rSk)7yxVv*9svbEQoMH_+Xb=% zt%~ZcmOxZ{kO<uhb_TS*MwCa*Zz8}FsXpB{;0o5G*L8(YZ~6;Rv~||b@Mu0D;nC?j z0g=AI%3BZcx1I(k@aHe2fB*mAdVs%UH<W++FND7u#P7{6@UhM=C_U-ZyBU<de5}D# z=}xFIr5ilDLnnCjHg5o>nB%UXFk$fNtli*o+!d6FKv}=Tqcik?M`!4X*INAY3@{VS zU?%8#bcfFH=yu}p=yniT!BQ#<mhkAV?eOR=T>&muz#<@blpKVKgN0t|g9~|3;$-k> zJ`!Pg04Zppg*Z6<hXjMwdvv#hicG`X9*xIA3=hlWKHUl)y#YT;%sRh$HoxKUuq^md zD*D<05ni5_CMqRbo}E`byIoW`Kx#dEK@7{|rB4iRdvxB2c8rNV?Adt*S|59M$EYZD zdnYvi>@6{B{`rr8%7NyeGfFF34wP0v+nOHT)gIvN3~pK(9`I;94k}8(PW0>sRngrp zDgvN-t<#Caqf@|R2Lq!30|Ud_dmg(Om=wS)&rTOmRUV=u0M_Pl+?fMZ|G?aXaDU5z z5>BYSuiNn1{JMo--h~09y^{ekzc(D5q<ZT!JbL$o>KmWl+!^TQM`vh<M`vvV*c`An zP&!)zN*T}=ABaB%IUm3O?6KO_@POfepUzhv-NgbM4Z!-Ee=zX(Ok!YQ;BU!bVqj?g zVZh&N!NkB|_zjl1zJUrn1{VI-BcSd^>5S%o%=|5&0;u^P3x7*H$WBO09<8(l=POtP z6l_=P0sfYl|Ns9R9ze;h{H=UU44_n%ft05B<r$iP%;0Y^2RrI3e@hr61A{HYzyJSB zmZ7(^Urzyt1I)obo&Uksd2}~}g3rU!wZW%b!Kb(22Y>5IMsURpZKHIT&Ot2?UT*jY zYN|upqX=_qJGx8ffXxI|)SXA5+I?G}@V9_WG(5QrRIB-PK0~<S8O-aT93S}))a5}D za>Eod{`dbsJhYdA0v4$w2W<!YbUyQFd=F|!fZYQXg*phzbL<XLNkCKh^4j13|I<*y z>7_o{v!I3w*esv!#i0D{)A=7}TyHZ-z|-;wf6Mg0|No<fl{8p8s6Pd1Grsiw|NlSM zViqMSy!62^3RPa`?|(=Hf{F>xZZlBV2wWY5UFq2E%HnCsR+10Nzu*$0`4tB!mib#0 z|NZ~(+xg71^UCXE6VRNS^Y{OMj0pGW2B&VQ((VESXd*^+(X2oJ|9f_aad>vS33%*; z7ZLklMTAf1e-B6j;@RoP;n`Ux01ZLk)^GeR)Bb`YAL1oYq3YRPCIR*edSWUm?Jivd zb&BBu$IcR!1h6`2v?8<7Vi&3cYAck7Eg8Ui`Y(_F1|@V*^fF)s%Illp5*<{YgY5)$ zo1x_unD5bi98wm3Xz0*jWME)~_1O&%#2!YJhamm1u@FdK&hWNRZ@vI5k3gO2*$Hl< z!MYEI2Vm{-?htmC=0}XpzZjcu|MzG<z~a&TL!tB~)RV2ZOZA{V7oX1e&}jSM*sw$e z<fMNd%||$(l~n9uNV;$S&FFC))GA_tmeL;lt|vNgftp2-&J)xSkk%a^{{R0EE{;H+ zhm;2(|9CXN5%B1Y{ovD?3hB3d^u}|5IwsI!*YUWE3JW_Z>mqf2V?X$Gr~Wv37~I`O z4Ij`r5hQHjf$GtEz@zhUi8L%wVdaR&ad1)v*F6x=#ez+Qw`W1_gTxO?c?^maaJ~o0 zJHqPc=KVK7?Xc1;kM8gUkJd{ifgZi(0?@<<F$Lm|<c1CdMg|54kKP7QsbhG_@S8{H zeUDDCW55bq4>)!nDGiKv>3jgHppp7h;R>%;BK!;TAvDIIA?>&aJh*ZcYOUb`$30*E zLo@&D_2|VsmVkKOm4+}M<Ufz*Hwqq|u`hf&Q$P50=0f6V_Y`nna5>2Ro}GVTeO$+H zt)QgBSi<XgymbO79fRu2+diGop-Bu%b>8slPW|A~9Sa%^`El|vEPX=l3-IWSz2VcD z`oO0%_k~Yq=?9<AT8O>h+QH^K?w<s1uKsrH{Fc@kdd{))B!5dY0|P@^^G^=`_SMV` z3_iV!L5_3e-*(Wa)Ac~}3r3et-yJ@k&pTaDfWtV=vGE_XvS;T}pKjL!F5SL6_*;%L zGBA`ygCy7%@VB^wda{m<{}>jRl!L?=7Vx(;gT_i=X~A*-16a`dbiRXyflKEPkM3BI z2Os!!=f3diF8$!sT?_Uk1IQR=1&F?q(;yzBGJi`S0|SGr;eRk!p>)CPP4M`3>~;K~ z1|FpR#{^dMt$7b9RDF_5Pn3wjN?Ob21B?s|{2g_S3=B@)Et}^sGBB(V0LhDjleXn# zh<qQ|L!Asx{M%bL&jVN6AXle3b~-SDgXE<HxJl~3kk(v#j)T8NmkAW2wdX|mTONV* zHrJkG;%~VQYFj6lo^a}(0=9~OoA0?D|Nj5~?`rt}@&UyQPMr`ZynOx-RzG@zD;oyK z;|}14o=@kyG{@r(JPZtu#~k<=d^(>y9&=#SbUenu2@Z$j4$O=oDJBlbV-D>99gjJ1 zK+5`;^T8D)gCoQ|NT|CSLM5Bv_JK@+I5rt1)?9mz1r%ibEw@3<GLU;gIThsI2Tq(& z*II)5zsasATn+z!YiS0BAq#(t%D?~r8@j<^z8^Gj4Gt!cZb-N?UhwDy2mQ;xe?djR z13dJ385md?njidz1%=0PusTp|G%N<0_U~ozzyJRy_;h~s>HNgYz#zcjaquCl$H7M& z%@5vtXr98Nv3Za18%72OR{oYf42XDssSWZVEdRh`pQ(gb_3zLB|6%6rH-h!aF&+N~ z9H!uU3lvB`ou7O<KX@E`#OiVI0f&d?1z0?Hw=myf1hr=wOH4t7<*m%1z&XeA@;AI4 z<N*o4<B;$}_U`RJ|Nl3fV|sc1@BjbJCzxRFdI@Sm@NfSJFRpw#T@QdVDmb7)xe}B+ zU+Vw)|KAZ^86+El6@nE#`1AiimihoXK8(FQ@#zH@VW1J><Dd~H2G7oKu#Ehz8C=$Q zb{;KNcLg=_L74??9nLK7(F;yE;QqL);eT-d?>hqngFHitK<70_&;TpL<!2tr-#j_Z znh!F9YT)LdoTYaR54d#xgN6avhUVR%(vzix)A9R#$L8luuNz@S_3O8o<ul&;6EtS@ z0#u290mTQ1@d3o}X#HQp3bxDhxQhy$0qUwTcy!(esbc{RKtoGxk8Y$Y7o~ngZI8fe zquZXHe>}SFeS6oafQn&IMFqA4(ry5CAUkjD1GVts2@Nz}t9ik<H-$9-76ULEG>%(( z8q|ou(tbc5Pk_|>u7*!s4Zr#H?g!cI+4&bypZRn?^67j4w^H-ME>N$_v)6^)z@s;U z<J)0IkIwu2ty4j@^S9$n{H?_h77KrCAR_}q=S82+4+mc|e>=qT*<*DH*Kts@gu$cv zILo&~OeLIYAihWQai-=+j3vy+*cm)}o54Nx-rb=2Cuq<dca{K!|8Zv-Q1E(mLX>nu zI##{Spw9GhXHY+x;W)Uj08;GH2^RP0YzB>Ec=R@dhAKQdVH9}$qPH0|X5rBZqd?6v zaFBcSR!evscg_GCblkZBN>_krumYFPWC75~xo7hq4*u2~|Nj4XZ0H5GP&hohYZ;)< zc0AsC0#s-+FfceCZv}-cNWbIp)&PVkD9wU+@YrrW(0RBt5)^TrprHoXlo7ms0|giZ zL-Q*ZP#C_P3n|K67#P4I+5CzL6qqk-5arV`2Mz|0-U`l5_g}_<ifdR+4EDzB=@X#s z2lV_fALLw6f`m6ITU0=9g+u^s{sx-TL0xHBT8EmKfU`Z~(Oj3o;L}~^;n7)pz@zgs ze~T3hXgD4`Tj<$%3>2GS$8`rMcy=Cd{?%LJ3=L49&hOAR8?@E#)A<jq)TKK)!KL#7 z_C^FW|8zThxbSaVp~S+#;Mn|@5$ANIXRj*<Xl}!!({+bOXDy`V<Ix?uquWUa)UIf` z1s)7w;cvMJ8ZhXtJpl~`k8Y5E?tvWyX^ob3J4bvwQqSMIiGhLP;0rmAZt!SY^ADy{ z3y;=sCC2>Q!WbKVvGTXPV_;xt_{COI$iLl>iGSNAWDi5yr(k1WOH9BagKRlk;6S<E z!3iFn_mI2oFHimh^(bpO5Ct1(zzA%UXD4XZ#oNQ9^<;^PN4F^`<r-e{==|Ve?P0;+ zvW|g)q4^M_2P>#BX#T}f`T|-ML*oZgen4%9#nj7CaMA?L)41;7-yX&U9?Ay~jCFem zKy`a|V|9~9ckKy~yTA?v#Ry2?xRVU17J|k>b9F*5f9v~y|NkF%P5`<2<ztwAofklD z1<-t!hvp%V-ViYZkIsvrVM>qYgB<)VHlWrqWTe9bG_wbq1>Xgl+1aPi0GbT*-2k@M zr#ttAN2luw&&H#mgo@}zhOY1gP1*Qv@Myin-=YI*^g=>y2Pk`g;6LbQ(0qW=V}^(A z|NkKKnD|?6f_rFQ5+0pV3Ld>h9N>AJ-kl(GJ-Qpg#a8D=2vx=5(Yq5=A{w6b=yVeB z=rjOVl;G+B;x14n44EK!*$F8WApJ#%gMBxkId~VS)`GhDWe~Ux3sLXUUAqIC#taX1 zhYP^^>R|Ea;|kD#MntRQp0}_j{mY6!phg|IT?9%=aC1C5Lsxio`fflT`Sj@a-Qdw3 zy5i+eP_YCWB8ByTkyZI1`~`|_@I;A6^Kk{Rr(ezoHI4Rx0*rybWhZDbfg4)>;O-9@ z9`J-W96UR}bY2D<1@#Y@?b+=E8f!i30h)%$0aaqRz=LYvJvx0M6Y`)!+N0a|0Dr3* zs87&cDdE{%uff3IQo_i<;M=<#6apZ{@Y)!Xupr@m0F>Plc7f_EaM}Xf3GQzn0-0Ir z1<y*m;r&o>FhB;lpf2_4d<WL(*;|h^ee`lEsI?9n*9Au~G~?n<f(t=Ou$$2b9wHu{ zP7<J1BB49Lrh{^sXLmcOw)E`X4yr;ud-sFVp+~P5hi7L$NW!DDhy$DuAt{psoH7kh zg7xEeH@H6wEwPcid{FOsbRILj4L0KSRd{%KbcXH#1uIw_6jmVTy#(c4PsrpfND{Pe zp%dzSkiR-zPrwa8XoL@}dvq6acyv1ocyylk=yc=o=rlkYe(!YT@aPPL3^Re+eBiDa z$Wo8)(i0w?*TLrbbUs710Fqe1a!}vEA`8mJHYNs@0_*bZJo@r1wA=!vXV`d2=WnPg z$IdSv$&lcIc1{|7X0b3bFfuqc|6wd~c5ME`T*{9m1zJV~)$7p-nW=<vk;ZYsQyb8E z4P?zs3=FRiLd8MuL5vr{U4-TwkIrMwDYIDqA)CU$2pe4kdlHNNpjJ;bmhmKy<~O+W zGic_kxBP`icf9~8V{z>R%@9IusFnZ;3Al7mp8y&R0F}(3^-Lb!)e2CFeu%_L{+7d_ ztbo!w^60Jx8_5eX?YJ|j%w+KCP0m1%@8>?ft3d@dL}53$$?0i%)T3L#r?=t<f2#+$ zIsms<eR@}e<^vG2rQwLNp6+VMm<_7=*qb%b_yAk^QtLl#+yKHi2GwSu0qM?I@Kl^< zcew<rp&$`>*$y6L<8P4xI}_XxJMNGGFV<l(h1z<6ilWvBn2ik2?r;vzZg+ws*8Uux zo#l|6=F#nX!lOHY!=w2Chez`(4o}OYrR5&ou?JpW0#y|t5oGUxN(Hd5J-huOR_%uk zj(hHa4UT(&voeQgXFZ2+r@H`RRwZ<YN4FP;N3RoyNApXNRs1bMpk`6$b&t+duc!HR z*PZ}15?<~C2_jnyw(_Oy|NsBN<J2$$ls~{ypdnl6cr_xwAk~Q1J&qp&wNN}dPlMHi z5<h4<4@>%o$iu70&g;-@1s0F>m~j}be~a3`>~@QA>0Snzmiz3|y{-q+7;QaJ8tmHo zq{Pp)^=*l#i}gBCHCp1}*!+gkwe?AzIW&EFCLi(W_RjEVKEUH~@Bxbl<BjeBj&2J_ z&8r@a=RK3ZdN7^?I|HPz^itXckT>8%-q87Lu!3&(SpE~8?A`7x{3klyS-RbMKr~Oc zI|qp7I1IH96n=>QY2zD^tHAm_S}%3(t@#gHp!e0Ib1G=MzVoze=P~}4ji6);n&Vi( z$iM)qvllQjFhHiT7=4l-^0zvGDrv|>zhmP$1_$uCpiAdg&>9n;?yVrBUfV+L_vj5h z;L%&!;oJEDJSG8a;k6#%?*moqnuk4-FE}zD_hh`*dYiwm7d*1}*t6SJp?fOGbv~V? z2YfnHPk0=61v#Aox=iJG188IfRDg81f~;-5<N=*M_c-nfszn((U3Zi=!EATj30fqI z>4y3S$Ijy(jYmL6yLA2l_w8Y83L)(`sJ}~Yb+>|?(|Vxvf=4%aWrt5UcqNVF4p1L% zC&($gKt&}qNkU79<1Q+YO0JUyGQ#nCBBcM+-3u}fx?BPj$eTb@hol(k)2RY6@?|+F z8+SvZ@Frprrr`m{{h*<EaCE;E12;;+^V87rbj<aNu7=;5?HR${)Xycg-`pY^N@AcX z+|}@#YwO!OUyttK4A1To6#?+HvrFeou<0(AFC06MmFR<7shx+QL4Z0l@7Qdk!U&#$ z^XYtE3R%kuUgCkiBoPumAj?bdyL5xI(d$Nde;sU{<37-^_v-`5`Jwq2V~JGrFXj?o zXwXADKhSam6vUt^rQ0o~`N8i_caiQkP^5RdOLVt^Dv(ZhneH}FrtWlC=xzhG%sSmw zVh>MfJz1jD?Un%60Ltk&G^}A@U;u0Ab{C25bW7-Vm*{K*sqc1|=>%KQ?XJ)XwxHWx zrLzsB9=vW9qCN$z9^@b#>Ol?ys|V$0a2Ry6H@{$P{=r-(it1lzzJtw=!PSE`d9)rV zG4$wmknresFaU8B__qsq^m<${JP_OXh~WbRL*p-o0}Kov{4NI%gXfn(6HQPHz$SqB zX=vpmSfZP~^;?N!=OO-6o#Nf$Ec~ZB!&$n+IY2Z=cQ_A-=IIU>;6K&;gQ+uIpoFJP zrTGVQiFxx6mQwj{cM(vjB@%lWRHnV&kLd3<|6nW;hB^Q#Mj2o_y4@u}IwiW@Wk9q{ zx4Qy}R_JzD0nsXu;vZoiC_E75Ve=cvq;2<nP}F;N{_*Vmw(mj%1A|ZUYtMsESzx6V zxI5u`q9m&Ic3rS%=W)YJu<>q>UMC)(&i~*gRG<Rghw(u-hhryyw+D-3r$0-#2ajW? zKTo#<hhwKZ2WTaaCupA4?AQPQ9^Ih_Jem(NT3)W-<=d$TuBDrgNT8HK4zT=+yS>&O z7GZb*S|NFM{`KhmeDIZA>!ngw*VZSclDOJB46dEe!5(!y_?*Qv88Ut00b2HVjK4*R zk%7UpyA+nie|mHt0!Oin<&P43JXsvp{(<IlNcVXMD676K0hc~53=FQVPx$+Gf=c<$ zkDi@3T@4So8iLkQgC-!)gZdVoz8icxU3d6^`iA^J|Nr*^t@rNs-Qd|9z|(E$3F`D8 ze8l3xc&pQ>yO5=`h^4!br?ZF$)a__KD9~BN;R9OR?s~$N8Qj75Y(6O9YI&r7zH8?n zpU&^FskiQKaOQM9;bQrazvUXZ0Il|b7F;f!zfj9An1{gaLh#t`|JR##fO?ZJXM-kD zV2zat6R?l}`Shl9fZEltb-2yd8lWjB{;7xgx7~)e_`n@F(7fFT(3~>L_%^h>MxFnJ z&QW`Ieua(8`*P-}Xn>Y8S{R-LcN)RHNN~&{FA)dLc&2{v>COdBUW45WQPN#+0A7#; zZbVrghYrmX%0G~TJk_V$1iXIEr?+;6N9S+f&aa-$$02#E^+0JE%!#cBN=05*g4R{8 zU@0|O!I3th)MW)zX&6Gj<g`b(v&IU>l6xRG2M2(79?cK_tzhx!bk-<20~U>divC`~ z0T$f@7EOSPeqX@^7G34he8d9Uc7jyuV2`#QD4hUnEckSmZt&?%wty|S^XaTT;L}-q z;<XYif5WusLDo%!m)I$R1>wu<;G+`IvE9}KB_~0WF!7gi|3SkzkoE+){DIBaLz<wV zsh{3@NI-&?#W;h8$zaPFz#A(-1C5Zb6vSru#tLEBdIHGC3UG(hqtn>{wZQClHhBGn z0kSqNICwX_Bhq@H)B&mzY%XXRra})xL;xxREq-6~K>1)jj?tYrqGJz-Ld85fpMr&< zTrfKp)D;A!s!=@fA&^mEWN2U*UzU-a8K04yg5e;K0FZoMxk6ZGQAufHj)F&iafyO+ zeqKpYeojtm5rb-}0t_+O7~4V2%PY51D9A4=QBW=ALKQ78NKH*qP)*@tfXJsPB<2*Q zCZ<#>loqF^a4~=#Qd9w<ODY&tOBpir$`W%jQxFEK8W@)<fC&aLscK+Rp}?SOXjY)W zpjymOT#{H)TFj7=T9TNY!H`%2rWg_#Y|M~cSCN}pqL7xDnFDnViezqLg+g&^VP0u2 z*rh0PrA0})b`UEdlE{88&CAZqFV9mbNCAZk7Xw2vLvd+wL26!#0@!1q5QZ@nTznlB z^72a*ic1SXVFB_zicQHGiFxTz=cVQqmZp}bDx~EXDP-m)CYNNEr9uNFg$o`+MX80Q zsl_D<CHV>|sbwJN8*nk?Cg$YiCqwKnD9SA3Vt{%rH?e{XHBfL%l;jsElw^P+su)dA zQEE<VVsR>X_f2XE7lUd}1qgF7z*2&4a(+=NgN?ZzLs4pSnL<TUX_^l1kW0?b%}vZp zK}$8TBmmmtla_)oJ3b{fsWcsKReWj&ECCl~fWlNmwNw-Ava}Qp)f7!osAQ%<1VQN# z#NvYJKuNlwSV_*$%S%lzfrdYWenx(7s(w*wW?n{qPKthTep*R+Vo|ETM?gFzgXrhx zr<CTT7VE?OtzTN4lv$t;j_%^h;<RGDWCjMb%#fOwl3Sb(O^1p)3Pq_UwyG)MSXQk{ z0XeO-C`m!JK%qRbSfMm8Co?Y_<e=i>%Dm)^qWrwl{L<o_N<A(H2B^B+#7c#vRE5ku zg+ztaqN4mF9ne;(lG0*uh=c4$&IC|DX6EN96r~oYmMA1uDioxq7I874rVAu>C7HRY zDGK?eB?{%4B^e5!q@9_Uu25Q(R19)1PJPKa`NgRzX#OusO-{`$OHBdim*UK-RE12C zLv<92GxAGwQb0Zdl@y>DLW!T`#5_<GrDf)&C?taHR>)6-XV_9qcR)f;*AAM#RdXO} zz~-Wa2a>rZ8L0^0fkPfrm?5hNsR0GN2F&0TO>j)XinR31veZ0<q{QTGQ04|%#}J;X zkdauHs-T*p0L{gSz*Q~QQ*g<LmI>fe0~E7hZK&zSFTX^gGPOh@Gq)foH8(Y{1a3U4 zy5yqN#FA8njN}w(5<|;YrNv3{i76?df*+~?mP}C1fn`5XmQu(o%}q)zf+<9amz31B z#L}D+D}}s#h2qlW3<YR`1WHfH#U#{S;9Q}QmYI_ZNjo5)QkKs$l2gFBjDaCE$O%!i zfTJ%pMG-wSFfcF#r<ORTq!gtV7b^roOHXh~QId}+UP11H1p(AY$VIF|5=^IRsg6Q< zSYl3TDmblx^r3`LGB{O(l5Toxi9#8)MomdA%S=uMDMrtqDIgb>rb5%WY5^!5k<%YU zC#ZZVPEE}%201DzRUsv_7@DRK$pSTBg3@I%I9-A>56EB?cOq9Akh}xVQy?dz)KJ*% zFD}W<$x%Ra0*XF}nF`4{sfl@|1qvk<3aYRyiBDY-E_E3BFsBq(Mud3;#U4b6foq85 zRJ1w{-Uw2Mwu02rn?VX1VIIz&nhGvOnPsU(3T1|R26_e{yHLUvmWUFI(sjVq5-94D zO4HInG`ReO6?c%jGP5{8KCLJ*H#I&bwK%ybv!Dc2po7(v<d-DoDCDH(rI%!YO25qF ze1!r~K~n-MLBVB6Y9Xk-R+0}YXh1B4Vvv>4ENo+f)F=wgOH9g11tp{6lEk7CP#l7q zdC;04<Q-5F0OM5l|DcI?FdIaS@<|I1Lw1zlV;~fMq^c)m9x3w5pa_OyS<sj^ls!t( zKLpBBi;6Sz^K8Kd3`0(4a%x_2s;zr~4+E@-0LhYCU@;_?mSp4?*#<$|w+h~gpoVT* zY7s+mQ8LU<Q%7S{b0-%k14APhM-vl6GZ!Z_LrWKilvGeNu-KNNEVU>%F+DTc))-X$ z=^C2prl;nm7G)+Y1p5Xk<mRWum*(Z<C#HayP(zCq5UqDm{~#XJKS)D}6(pv_XBOup z1i*?=M8N$UkRos?8DEf6icp=AnwXMW6rY@5RFs-r5}%rvl9`x?kOq~QU=5ItMSMwq zJcyNAf=~kLC?a?%rMU(15JS-fON){iQc}y}6H7{p;$eLN^!^FByAq$4lZf1BDND^O ziO)zZC`ipqO+lEN3KmaHK@uu1$u9u)ap1;-i)oMu&V*R367C3+g!E40a}q1_OG`ik zL}Dg84ba>KLpG#M5TBfwoRL~gq-F*NhL|NLQ6Sav@lX>$91`%>jmsy3lxL?F<)!At z7ejhXAQ9s5gyav|AeBf>T@aUOyw5rww1}0Vpe#NoKRG)-zkmeKGcYhPd5U?1ECbnJ zl$x7gmI`WZgG7kK>NQ(I>w!QSG#{$JJTW^pKCLt_xg;|`kB})6k*cyFH6Z&T&2G}{ z@3p@s1=0`77V*%&K8Q~&wkpp9O{Fk^?9WI}i7&{{$%!w@h=+`z5H_W%-4nFS0j?j^ zbOm*&;z9Y1uy%&8Q93ptWyJ+WnRz8?ASOvzTv!aW`;`IQSBZzlKzdPrDR|K`VWV^- zAA%NvF=RtVPvW6*ke?Tym!AS_^y4um<B(u2NIEMsEiIFjj0e)hz`$@_svUfO5h(l% zN=rzKd<F)F<zC`^Afw{rGxIV_;>!~=OTZ&h;6e~2K>!;)cvS{c0<s?z|DYiZP~3rv z+EgOK(3yFa4oE+!XiY6D0x?O#Y*JG|)2IybMTzC{#RZvp;3_CNJ3h0huqd^-1T;2< z&p_ug4RG@(xwNPVR8E&97K6(Ze0q@OJQqAv2l2tlk0hNST?`B}oRpkEtm5M2#5~fI zFT+(EsW~A1u=H14l21gagLFXfE+Ib984J+#4^6!!r2kp`mRmq3<tFEs=8;nIfHW~M zFc^i&fi^5Kz{-D68C;xET9T4qPO$6)8S&DQ%@{-%<Rq4)<rn3~L;9@orFliE>6yhP zsRWYL(+x6zQT2m+c=5#PW?<0zZ1fPMAC~@;Gg6bYL1{2EFB_B(Kyvu-&i<>fK=R=9 z6Q7Y<5f5sDfJBJH|My!g2dM=4J3ccnEg!@o0sHxvfwyH8l!0;#$<-gjeEENzAnVY> zpV;u*f8$soNIxk2(o;)7-T-ll#;3pi1#d2j2h}*q+40F4+3}!Ze_{>zw(+7hNNsL$ zYH~5C&?2!Q7JK(M5u_jFeo*<Fk_s*kK|(~~Kt9k)B?gA#<cw6%_%czNkQDu1Wc(S# zMU;QwW=v)gI8;G0`0*6JMVcTL;6_JjL3}|`esXFt@ogZ+zsV~>`m=LWb0Lk#cu0G_ zq$m+S=mk=M1N&Zg22V<%x*vyPEW$SmY9c_wsQN)^xj3<mi28ShrUGcK4XpeD^*(Zo z(?KQ@hcoKuK+_*I1c}oISCt<>?GlIsFTcSf<MBin<GWZEOM>)+(qBquF=%`T9G)OC zV(>1WD$t%dhU~PWR3d^4!$_;NQgHjBpeVH<u_zUkgFtNv40X5!!WT`f2g#+Sr;<^7 zFfbUO;Q=rIOUum5EY1M8UqHqYji>Hgx)`K5H#Ha3cn2{_!p2W!!0l&5`3I>#h^>FR z{=A+HvJe!1p!O4F=oD0Q#HSVI=f)FiLk0AEg6m0`{-V_4(%jVeqWt`l_>9sdkkNSY z|EU|m^#`c^1ulP!%2E<bz(pEfee{-8K^;!RupYFw6hjb6fRH?r(m}}toohBI9X9Hy z(GWli0SoX3WrP4|n-+pM%EA=_O9+&2==xwogy`a<{Lv5~Dg@k}ovjo!LX%4KN=o&8 zGV>CP@)b<<%=8R(Ela_I#+nd51H-6Nz2eH;lEfqiz2cH02%Q0A<>i;8>ZRwE>LrzC z=A`ImrZDIgrRF5+m84dbK$)PCHDrEjMP>;SKR!MiVtjmhK@LPqe0+9tQF2LQ5>zN3 z+$Pg20@ENz80r}^pl~f98ubbiixM;Qic5-0!NbSJ5aIavq|)^G5>W2|CIA_*0S$UX zMD&Vt3qZW=Vg|k3{1os|0>Wj*B}JKe>BS83@vwOvs4l3(Kt2Wq0%-UzKQB2|uOuV0 zI36-7!JwB^T+E;cTKSclSHhqN4l#GXP~GB^#AGst%&;bJX$A%cP}PGzeF-@Wo`FFH zO&4er53&$w5D8QSgEqq>i^B%f&VY`yL6QLN|3Tt1=rMo};6WCFuwOvO^nQR8FfcGE zf#wVt7#P62gcukYz$bGsFfiCLFn|XF(CxPYIgEjUAsS*FoCLWQ&S79+u*6~igQ*Zz z;6Xm9{UE=i+wX_N{^?Nr<sinuNp$-?aoE3O8bk~DGy$mnAU~qp9|yG`7JsmI!vU!M z;J|?x1t!tMKN5%i64SxTAr}BZ?FZQn!XOz~_=AQ^Kz@ST58^N|FdQ%esbXM2??1rw zLu45ka&Xx{3!<U{Y91*5K?^Nl`eF8iI>8_%F#9387#JMDM@KL)fG7E2f(#4{u<(Hi zfhI9P`q7dpLnBl_XrC@jEr<rGMW#W~1QJ8nFJS>v#lR2>%3Kg8n1s0>qz5Fh3N8LX zVjx^#4<Z>DKnF=dSP&AXAHri`0ByVnrArteM$ecHVZDF`3@H5gvE(1ntpp&qK$Sr> zf#xTn0S60bm;^{Ij18heCtP8(zhNFomVp5|{R(2SA2f&qG85hY3aI@VAW4W(U=rQ` zXK|#T2T=PhppFCiUl@!1p!NPBE70wK0G?d{9rp#c7EVBogY)m>uwMc^I)dtd&{<?K z_rt>VJ&ySQ0JZ-z+$IPE<W>j^LjJ&^|FAPe-UUqq8kd0!bVwbvY=!86kP5C4x&b^& z1!03o^!y_Q)ejyF11W&w1;G$T0{Eyz2pdGA>lbCjUjA1=!%qTgFev^&14iiKr;5XV z22jDqz`ziJ7P08|E8wty0_X@@1_lNLkfWjHpA44tW6ubwlc3Ios%Bt_fL1){<t@zp zFomG_0mTW-9+)^xzb;4;CJ2pd5Emxw3-v!p3>mk^AoCDxm_C>YC{Loh9V7?SAB&~| zjSH?`(1IAGo#6m9{3Jk$o`Hb@G+9`OCHz2>AlU4`0Xip~fq_8^EdbH&7XsVHzyNXs zXh8E1Xu#+H|Nr2@T?PgQZX`QFO2a?|G`(+QU|@i$uS60D4Q#{2LEGOzQXup1BB=*2 zzJQtoYAV3ggH9;IrhXqt5Q}=yK}H}ckUK$P0b+yja}WVl4=Uqf=5s&;0Hhw&HUaN} z0v)~r6-Rfc7*rfxy)u$GC{6l9?K46WN8XQQ4iyKPe-tSkypY5}6Ou4@hC{_c_JYh0 zhnk;;Bt91^2BNZ|;^^jsPRazygT#@|??qA%N-8jW*FnWW_9BPRR;W109OQTe9q|Y< zA6@-1sCtk%$o-&pB1qi@s5r=+T}a{Z04fes4=S%f>Yqc!LFz%*o50-31`<F@pFAMN z3=9msP;n52tlknN08J0b>D&n_4zo8NYECp%97G|f^Bj->)Ewk+C`1xRPS0IP;>hZ! zBZ(ucUkMclxd%D?H$cTf6tX$nK?2ZlKvsVYDh{GR3$0+`_6#HdRS$|6*hu{cs5pp1 zju%#F;R13GD1X7qSsti3NIh~mi$TRf>XF?e3l#^cM|QsoR2*G>5L6tb9yz`uk;IYB zDMk`U4o`Dvg9F|CM5s8(d}MR-ki?PAX@H7@%mIZPY^JgmDh@ISbW|%WoR>qzVd_C; zHz;YXgNmc8-whRqsqX|SW?*1A0ToAA{~Rg~Q{N9&{|+jSuAUj%jsS@x`<DwU4l)Nh zzCxkmAoa-M{~Jjhw7nYU-$GF53YsrKZCaT4G$e7*f*F|jM<nr$NacVIw7n0q_ZE`4 z1CluC@D7+c!ARnuD+^%a)kxyV?%a(ej+`&fLB&Dg07~bevJw=eSE1q{_aLY9yGY{5 z?s<bGj%@x9ByrF=5HNR&f)W!n+>pb06OuTx`-MP`gQ`akPbVaC<Zuf{5=Rc7G9+<i z^H)H{(ZgXqR2)4V_9BTR`}ZW0II@2qA&DdV_cc@;WG{GOBq;D17#IXWomQxSL2U+D zxJBR)uZD_)%t3DZ&w`4B+>dO|W+d@BNa^h;l6W_g_zfiSRwQu_kcCipBKxZ!Dh{GR zQ3`4sfxI>sBmgakL0$(h#$;e%SPc~ixf8kF@(4*BIlZw%D?X4k$b9gmDgy(9IFdNX zeDGoc1_lOIs5rX$PDtX&?yp1=M-I16B=Pe|;jj@&d^3{xWh8OrbbAv?{0fr#KTvU) zzrYP;(0z)$pwNS~SCR80H<CE0%?V2<5=i36=~EU-9NAxaP;r>Opz#Hejipd=P`Dx6 z+kzyHY;O;eIC4F*4k`{ZAGy5Ufg}!!FAb1I3=9nWq2eGevb|T3#F5Q^fF$0A6rOLP z;^_8rK>Md4^O4JKVI=WWNam;^iG#*IVBu_uBn}#Sf{D8$i6h5vD3UmGeH4Wxj_j{Q zBynW*1xVtcu`-yw<w)Yl>g%B5=;6=`6$ga_vig}w;wO>9VGWWva=h<B5=VCbS*SR= zy-$$DLGcbc^9q#SUPHw}?m>?CKS<)B<7r|3<p&K;A(bbfbAUnSh(X2C%~3`YN6r`e zP;rnuLGG!5w!h7w;^^i$BZ(uM<BKGYT>i&G#bM@yJDv;-3`tONbn_=e#bN3tpzfIk z6-QUU5-JW;59@DifQqB5-;N}X9Pj&};vjQC<tnIc2MW&<P;qo~t|EyehXX&f{|zz+ zIln7F#X;sErxRTyape4K1r<j(#}i2$<j%(+M}p4afQp06M@~O6NaD!;O+*q$c25S9 zII{Y3Byr??SBE5ytiBa0j_&>*s5r=-$m$m$i6iH`6-eU9_253JILLfZx`mBf9fgX6 z%tsD~t4QL=_1#k(;_r~eL2Y?hzWawH4jM~^iOYcohOo2;bdbc6%`rw2M-B&TByr?; zaY7PDR-XkG2ZaN2dMiZ|2c;9xxE&~|)I-HV;e*`XSOygbnFCTU2hDeD(Zpq;;(L+A zLE#U+@Q;Ck;RsY5-TaS8;>h9803DD5sYmv&FjO4m9%O%6LB&Dpk<D>N5=Rc_U?g$S z^&YVJibfI#o$m+}PeKw0h4T;S_*g5FII_JxP;rnuLE&%#<S+&XhRINI5EnTeu0Rq; zHs=^r9ApkSsG$A2(@=4cITw-YqxVSSAa}yt{{=}LbZ|9HTpcu+53Mgi@oNZ;M?I)G z$b97VU<(xoxd-I0A0Pz`3=CdSaS#{TU!hQOn0nYabPQA+U406YICA)BBZ-6j1q=VF zNaD!hwgyQYG=&56?^&og$UVsE=L(WIXhRWfUV#_9I|$OwL^eMHNgTO9H3KRRG9MH^ z8PM^FrBHEn|877MNA7<qLdSbS>Op6j!`$zPLp&Qv9N8QmF;MP?xF1<u6NmUDB=Px3 z>1rmDII?^E#S!Kss}DmGM^^s^Dh>-D2Wa^GhKhsyi=2Lhp%H<uUIi+Su09q?967!! zk;IYXYci5Ja`=3Jii7M0<qOdK0LZ6bq2lQF@<Rv8LE@mfR9Ji&B8elr#{o$kxqM4R z5(iDa!OUrcii6yPoNm`a#X<HWo4*w*4pI*rGY7f<98?^n9&~I!%>3U-;>hh5X3%62 zwEhBJ=?YVCgd~n^?**th$X-yE0)-vOUPsUZ38*=sdpcm|_(H`&>OpS009_~%iYBfA zbzdx+_ycgE$iR>U6$hEI8Y$hjL&ZVnBZtEts5nSHXaf<<JxZX-DQI~J%D)q!=~ELb z4pNVtJ{^(7k;5SvNgTQS$%Kl7+=CpC1xVt^<<DHGILKaP^LHVMgUUmg`;Q@sBd7Bl zP;rpGAb){Q6bHr2Bd9pYeB|-omq_Bs=6^&IN6s&{;9a1Qat2v_5Ry1@IxmBYgWQ80 z4oy&TkbCwb#p6k+I7mIn{Q=N=@Fr9oq#oJ*kD=lq^`JD^0<G6RL&ee6|3?x>ZpX4g z7oLFBBm0XFNgO#GM3Kai)vF_kBe!F%ki?PmyEBqFXoDv#e#4Q(k<G7$ii7+M3ZD*W z_%uPqLGDLRx08{?k<FQnB#!K_ZBTKT`5I934?x91<|DTg&LN2-`|CQAII_Q<Ac-TV zlV4DAkiE$1#9khhdLiizv~~czi4(L=2}vBZrUVvlMM&bv`Jxv|96205BZ-4<wuPDV z4@n$3e3YRR;-GLqHs2j84st&z9m3}ALZIRx^~mWq87dA^kL=$ps5nSHvO6n~#F5?8 z4;2TQ1G0BBH2p7yii6BSj<3B?ahUprQ1z#w;vn_N?!1O1j%@D>Byr?=L{<?IU&!T{ zCR7|`FDTuDPq$`ZU@(S?gX~34w^m5v$l+j*B#s>ZiAdt0F;Q4NPDBz%RzCwt9F(r0 z)e*yHByr?)bqp#FbH4#}UgQ!~9NqnQk;IY1?Fo`NvcKLSi6g83g(Qv~&H~U0Q;@yL z=2%0;VeX88y3-3P4pNUC&Rt02$mxG7k~p$^<{*h9+q(ow99jKgBynW*XOYB_)n9{( zgWL~F&-<b2^C?su-Tj=Pg%Z&A26Ft0L&ZVnfYRFyXgMYa6-PHG6iFO;oFNZM9NC=} zP;r>~0?=@-hl-<{--RTOT<=Uo5=Rc7nMmTu_AWpYM^?WDNgTP}*^MNQto{I!IC8k% zKoUpJzYmebk<EF7B#vy(XC!fC^?cBb1_~c!aakPVsz~C<;h=*gj%<zvk~s4Cj5m@v zvid9}ab*7%BZ(ucuSOC__HPrCII{YQIK&s=5MPQUj_ltxNaD!m??4hq_U~IHab$n7 zgO5{&)Tf}eH?VTj0V)nk&!Bt<zVMfUfx#Ur4vH`2aw8N;`~p(@EdweJGv_lj|K>x* z(aott5=U+i?1YMg%t5Xn4?@L3=74UOg}MI(R2-xpl;0Jg^Udd>;vn_N?*E7+z7@&+ zjB1Gb3t3ziDh@M$2Q<H{K*iC`H$W0c9@lk75=V|le<X3_a0o*ZM^>MTB#vC3<RFP7 zt1pI%gWQiCo>fqBko%F<_aKQQmnZv?#F5L%H&Ahq`JnKh01cn-P;rp?$l<RAKFtD> z4w21ChKj??c>pyh3o4FoPAif)ayp-dLwq4r9ArKyoeO{rWME)eizE)3w}PYs28OLr zagZ|PbwO8=#F6d20~LpvF9OmCx}g>-4&s8$ho#%MNaCP52bee?bfFqZJ+k>FNaCQA zzhUa9B8elbzluYg3%na268<3f{DzKmh9HR}uPeBLBo5k046~O>3ldTwcOsi(0u_ga zgCs}+0|SFKnz%Yt+y^QS;)0e!!pv`nildv;hb9g)XFgOM-JI=EagaHn^w|L|AC5r9 zLF$py=Sw7U<nUC|M)((bzS|rs4l*B<uCzf0f^NTtii5bw?dnJ*apZR0L>%Hvk;IYR zvkfW^v)2k_5d#CmUZ^;Ti|ntd&<+$x9NC;@P;qo~)<VTW>XFSkiX@I~&M72u&|U#p zJhJOT!VP9VY`%sEDvoZxDv~&|`5jPkm^m>2_Cv+d&3S|*j%*GSbe{}J{XL}ee=d?Z zvicWD;>hYb^dbHNnS-1jq@dy;cY@N}0cd*DfQp0EBc}%gByr^O&=yG?Ih|Za5=U15 z0V)o&_W{&iM(9F5bbB3<#F70QfFzDwAEiRYLFOaZBU7Q`AoG#US&k%*Y|bGhapZo- z8K^kA`A?zZ=;nWdii6Z6uOs>c6$hzDuE&)O5%GoWPHm_-x;b`GagaI4>qfkg#F5v- zWZ@7$ha`?{&MT-m$X?|2ON`JBGU)b-A&DceUs6XBM_#|Ak0g%lPJ1MA<aJFENaD!h z6Au*!xf3+r3!MgK$cBo8+=)EiTLTpbsRxyZEg%I93=G{!;vgXbsQ)KG#X(}o>!lYX ziG$YY!OD}JP;rp?p!}r)U2k^)Dh@ISxx9idF9I(=0Ii*bnFF1U0Iz!o4KaiK07@ay z;ZLx7(7`h>_0Vb%u08?UzJ(SKVD*cT$`kORKS<-u4$%Av-L3*wkL*tHA%9Ty$nFUM zISSg(Z9+01+O5TK53+wjYnov02gM!8C{VZ|n-87t0J{g-d{7zysRwxzv@Qt524PrU z1BpYILV$!BKzCt*7$9-bx*!l6gh6o!qCw&y_0Z`s2GCj&m^f&C5r_@Kuyu1V_0Z-z z11#Nv#6jywL25x5=6;Yk$b55<AOiyfY+ofv9JCG%D$D>rj0(Cx1f(9i{RY1O4x}Em zJ_@EDrWYg*QV%=s3%1S<Bo1>kNDpYA5r_tfgVclCY9Kyr{{l!HR9}F^Kp1?Z36gt2 zWhF=)T8x30!-3Wvfy6)<x?K(|4l*CQ{Rebu9!MH24q7h+=76rugfc+(g4Dy}4=M~+ z54v*`#s}qD5F4f*7WdF$Kd^dGdk>@rgrUt$usF#4M<784#C|T2IiT_fD$D@8U;!i! zQvVGq0ZZo~aZr5+6=nb*zJwG$d>{o33=E*YCrAy53!1kAu|XJAH-Tu7ILLfO5CgQ& z5+n#U2Q+^K<ubt5V}g`{)Wi05AlrKfrWh?e_aliTyB}sINE$gj*MkJ07&#tcaR`!v z?I#Ag=Nd==ijmXpOsE)$LQd!BKmt&VoG)N$4<v;gkFd4pAaNK5+1m)?Fd+8zfy7~X z93+jLK2L)Lpcpwlfc7jxg;C=DHcSvLom@o{hcQ9+g35GO5ChFUAaP-+II_P$;;W(J z$nFG*gD;I_U_i+)An|1&f`NenIUYemTR;SwJ3&Ii(0N1T@CS)2Ld8LSbC4fE&H#y< zKnrYG7{bKaq5WLs@(`qcHFO;(aybkVe+3nX)mJccs-f!zk@E#e{VAw8EDgZa^FRw! z<Z=w8-W)0p&d|{O0upb6iVJ`YKoU;}RVJYQ!f4_G(Df(=XyT`!6%lOxBS;!#{za&G z07wAI{ATF9Fs!}>NrTj<K`ZJ4kN}eUT&Or~KQu@hq`nwB|2F|7fTaFAbp8o+Cn<7# zB|sC@1~m2CpcT>qH1PuHcn549B1jr!ZxS>C!uCDE#7{!SL3V;LNG%8(Lem2@xq$0s zkP~5i<oX??{vXtx(C7iH2W<(4sRx-2!Z3TG(FH#r048n$G7L-p3WTO-<njchGz98S zsP*9F0umR27I?_z07(2HsIi8$PZVY^JE%dzz`%f99)i?6LOqIH9)iTLKt1XK@)S}$ zK7op(=U-W<hmp&3kU1Zq;;?<!F!xwO(=Bp61ybJv6-UqS%c0`P<ugeA6li)zF9&#_ z4It!p1xS4iG=R~|2LovOM{Y-f)USn#qn8_o(DfOxHVMpM4$ypoUY^W>io@CkF!eIf z`6u*p<~nqIA6Cb~)MrA+ozcsmH&AipdKu*Y7U=jFdbu<cDvsPP0;#_O6-O_xc%cam zx!na)KLsidPMApP<O)<Awm%f+{uj`3AN2BV33NOKwjLR#ehPHF1Gc^rCVm7e4!TYl zltf|TD$wx=^z!f_RNMlj5Xqf$pdAbJa?$}>Zh)>VM>c;7R2;qhd;%4ZKr>$v+W$f? zSHq$GD3IA83<^sS{shfmuyO??2ExtId<4z*;PM9~J`FmL4$a1JaY^WW9@IE+^ni?j zl_M}3<Xn(AEPq0y4Xz%Rub|$8i^K8*a(RN>zJ-|wG9Tn-&=>^BpXm7-wr&k(4@^C* z?S-Bn6+oV5U_j~DfXs)v2R(m*>;z%-{IvjDo}lM11E@H9J`w;05(5JRdOmsp4PfMa z1nnw=tYtvXFU?>P2!Wg)kkwy+)&rn$0D1KS)O^@FBak?<dJbqpfr-Q7)c{ExWR3!~ zyz)R3UjQxNBGAMepy7~!E)FfnGSI{spyk*EG;s%Lc{>A5`~$SyUVtWU05yLFns@_L zy#us91o;;f@1-Emf!dQu;vk_5&~gkmKMzt55}yDSN6y!<qh&xb;{j3xEg!l-0z_bD zaIU~q$PCVn*u<fpLz7}=fDT?@h=Y8JCJ5TQ#Q@zrhbG0$04ohpC72nYjapP;24)6m z;}t_3)Kfzf1ltSE3}{l!4A4lz5Qi?R#Sn*$4xvgg!%tH}7l$TRRAB~Y2592O5Qiov z3~^9P4^0s4FKA(kCdG_#N)P0WCl-c}|Iw6!Ly`$8-eLFffR;&u#9`%^ASgjHFff41 zTaY-c9E8p1f{rU<WRQZ}3{nTO3v#}c6#N_;Sbm3``y>S)UxA53&SR2-mzOYc@L{tI zeDHo4$ZQY>9o~!0U!XPrV0S|E*&b*<0nJr`#9<BHvrvD5+C|vR0gahp69=tP1epUX z@1V_922fucBn~TQq0N5=&>R6s99AyF%5l*7H6U@=dR9;y9po<-M$lXw69cS#haN}6 zAOaPKm3N?c0;$)6io@y&SfAMve7=bk{E!$}I|Ednfb4~pQ?Pa|s67A@hn07Z(5#;c zH6K<!!pyIPio@3Fg5m?@o^Gf(th|P`gQr5pVdXnNG+sdcEJg-7ShRqQ0OK`K^|1B9 zi=pa|Ld9X_FRXok4JzIM%}TI+`=E0qK>mW2`)8o$`~a(mdJ?pb5Ns<00}~S{&q#qT zsRxU|>T5ozIIKQ|?Q;=l0>u}iJcQ*~6|j0lxdAJ=%%I{hKCA=;mFJ8M;_wo}7Hm5M zLmX5+>>LnS36c*Mhv`O)%Tz<fVfhDI-7&O-{msX)16prGjc4d(0wod5@?k#MUrY?J zdI)wb+A63xtlolle;GjIBA{@d04)Gu<Kx%C?%`m7^)q12gs)(6Xr;@*zyR$AF@VNV z7#X<W<9x6h#gG{kFC6f3WtcfWU~vh!eprd04i@KPfb|Pu<}`uDIpF0C%$#{(aR~;P zf1u3@hFxHBE_nF^Gv^vuoC7`%4KwEtSX_buHtq~fjtojHAop{@(>cr>P&<c_fdf81 z4Kt?@tX_fvHXaQt@n?a>x#0a{m^p{R;vDdD6=u$Tu($*RY@8bAuis#CF8H_?%p7r6 zkUKdTVErnXIYwY{2?p5sH7uNc!Qx!-adenD8DMb^csmqkP6Jq6f&n(J4a)~Jz~Wr+ zaDbV!0W8h|KTir~&Uvu71OsfW6jpP;1B-LPYi5`^ylfDE!Nw0@=4gV&B^Y4saaj1c zg2lPu^%~5aM6fuFhsbx$U~vfs*!VasWiJJbBicVOoyWoA9B}ht?s*CpmtcU6o5S)2 zGdsxrT=4V;Ge?mfd;T?I2bD`q46u1MSbx$LY>ph<99TIJ2o~pn*Vi!j6obVj7+~Y_ zFn>)2i*v!_1?HaZU~vw3eu0^D1uQPX02{A|wZJ}t#ks)k3y@o2=J0WV{L29!*N2&- z2^N=NfQ{qB(xD4joC`j#3^OMlEY1Nh&tc|NgT*BnVB`C+c%Kdy=Yod=%$&^}*u(h{ zSiLv{=sZV|`=P@j3|FDzptXS@ap-Ut!!xirqJ0QEC+;&?T$}-Rwv!o16R54niAZBm zAuuJ3LtGn&xEomf<Ny92FOa8e7*fFEU?Wk8dQJugK?Ydqg*Xqc7l-<(IK&rnGB5~% z+L_RXk~Xy6wF`&({ZRD^&~XsZ94g3R_rU5u{;zgfk8)eaH?Vrl`j?dpd$@^mLEJL| zIxYhp=3&snp&oSUD#-l_&~Yo!o!cPyIO9+s02crFUm;Q-c^Z=;3oH)OiHhrRh<D%+ zpN>O(9S-rmIK;1j!vVAX^8knX4`A_+|1Z`=pj`O_8m|R~4=e+N)}VlVD8Y?A{Izk2 zn{Y$o<pMOLXhPG8BM$YxIK<;{i09)Fuf`!h1uXvY{~m)Q&=W;LzG7h52^NR2k;x-C z#LwXnzl%fs8#EjaK+|Uk)DqBnFR-!;Dg>q!c(8}FH4h{_1EAw~uygu+q2dkDfih6P z3uI6NRQv%{96Bt=P>93)Hn8}|{|AykArJE~tN@FHOhm=&q2^zJ=4;rT?rEra19ZFt zT1+t9g^C}5wkKidyS>I?{y!Yzpz~p{g_{sB_HdKLA+Cl)+zE%c7cV6IFF-2<*xYIq zRD1z+9Qh42m~wEK)65GhhheRL#QDvW!0JE#PYZKIo>pa82^NPMibR3VlL6(^2Ix34 z?EL?WIMm;Ty3+vK#h48(DnRp%*uwJ@4s$s9u!pk@4sjK*_{aakHNvniF4z|~U~w=L zg$U$>hBLGv2d#YvDM$sY|M>s>g+kEsI*<?;H}gTl6E;2v>nF_ys|PDVAvS@<KmI?h zGOH9>;uzFk189DM9{b9053C+pC4>z+*9BX+{Q|51`2W<QbkK4qh++l?24Q~e;ikh6 zazCQK3~Qe_fYpEeKl_s*^aNLkQ4vsa??yGyHdBZoXgv&A9L|L^>T!s7;}D;YLwp%n z{NsPA!1b^w0o$<`D$e<3i3?Z&N?eEf3(AG}lb(Uq!$cAE2OQ%6!QvnPJBjqds%nU) zvW(=+c<`;8ddUpndm2Gk>n0{=KshO?C16fQemUrBx02Fg`1QL87P?G4R2S$rBk)DN zi6vlD^n9ER4H&>ymQ?5^Ls+1@X5*7{Q{szDlX5dl&;%hDF+l{2;CeEWQ}mJ<N-|R8 z3qW?jE=&cR47$Dva{UrS7l>b6S`4~786p6`ny|DOd=fvBF7Vw`U_R&)Cdi%ed8N5Y zsYMX2AhQaJ@{>|w-1rpmJyQ^FQfYBKip`}-@yYplpu6263NlKQU_k}81nQEa)Z$c_ zzd`p#g5|(>4l~5ZXQx)`8JQZI8bOSJUCIbDI4>1^xd220WI2jAON)}?Q}e*Lh(c6= z1X5Cw1V9%eK%}6)fCVT-FgYhRF|V|MAs%#r0PMm6LnC7|s0j2{Y(pbsQ>X~i-Pndk z#wJiv$fehYM#jbr5PRbD5_3~wY>*xXP{J@m+{p~OqaZ&Io*=;&ITwRcAeaTaa|L`C zbwOfwa%u_s&C`e*6X1$LSIR+ey#~pGFOWc7AdM;uz4QT>UhpLp2)(eov#}V9B!zA! zk`(mX2~_JqcW+}c5$sT?9J-Ona_DA4ZUf9L&PUwdjm32As?hDht_s~o$o1XWVg@bj zaVkW&7pFpWtKs*JWAP%g9J&R_a!@lt7c!@%fbP=+u~JJwITCW`2>1$fbSbEbAhqaH zPy^wy48HLkivwZeP@^!_qa{DkMWx_tf>Vo-90%8iCXH??nl!p2!P1~Rps_d<Sq`hQ zFntgQg9>VJWq@#6YEo%BlAH0UfSQj-1%}H(hC}Xv$L4kvS*Yo#4uj~0i-GTn*Gpyq z)A1RJc_}%mMe#ZL`Je(4Tu7T38X16n1Mx4aPQ=agSX=`$6M8p2;@TN}W?;1ibdNnw z3!swdzJ=Hhl|&E5;*$IV(9QQ)3`LScHxfw-)4;@{5}YO?<S>nd%E7_}bUlt<GPI5< zE=q>ph+_e*o=S64<5N;WwLa*&9Ha|#;MG}fVtQt>DY!WUs_j#tS1#hZ!VxA8X_25@ z4H+MwT$BvDGZ)l$Dnir@DWFuwfagxi_;}<CdSI7dB446ekeQraS^%~!F)t+^bUkQ% zK~ZKI1Nf#+SXe;wKW1SIau-|?Ji|h3c2K=unv=?aerYJG21uz3y_vKqBfcQNs3blm zvp6|F57YnwUl|X-@)Qyh2m?R?0Le($ZdQ$thuzi+y>}W^gMsdS#c_=+sxSkN%Wgr< z8kpCh=ELvPg}4u+c!oO|UMs`zF^Avd3%?o|+&n9(faHBps(@WMjB$A}#%;(T)!?+2 zT85M?Qp+-vQxR8PL)-{=5+wZ5qZa9+XmG*<UlfIQdo{>5P>U7gGHeY0qbE`Lwb2L( zh$E5iQ-wPa+)@SQXt)TXM1c#zN(5*`gIo{~Ys)gA`4~(40&-0jqJ@Y>3EV1pGKY(R zt5k3&Cm!W$b$FTtwYs5Kzk|atn*rq_dPKS_&4Z-}*sb=UDk-(7hyj)}VA%q0IlNH; ziw@A`T;L2{k`KC97GwapUW8otjusa11Q`!b)}Tv$!7X@jjz@$CDC2<I!{FQqN{<=I zDUeot5j3H~F4Ttk85$7zdGUGqDXGwl=ZjK7J)n4qONzlkk%k^SC{}@zS9)eyYEmNT zy7i(YG#6DQm8M}B07)GgiO|{(?tgfQL5fXSa24d|<ir<cz&cK7;RB9ZxK1>q!Kn<^ zIRu#p^)x7O(9D781XY5Gr6u{$Z~&JcX{C9PZWi1Yu=^mT8k#Batbittk_MoLgB(#% z2EOYJeBV3BeTgY4@gQ+nE=kQx0T+kh`UP%3EH9y10*)9+h=V$E(4J=wq*<5?&M^$x S5E^ntIH+R8tRNue4Fdp$a%w&R literal 0 HcmV?d00001 diff --git a/modules/hp2101nw/usbip/hp2101nw.mod.c b/modules/hp2101nw/usbip/hp2101nw.mod.c new file mode 100644 index 0000000..7cbab0c --- /dev/null +++ b/modules/hp2101nw/usbip/hp2101nw.mod.c @@ -0,0 +1,86 @@ +#include <linux/module.h> +#include <linux/vermagic.h> +#include <linux/compiler.h> + +MODULE_INFO(vermagic, VERMAGIC_STRING); + +struct module __this_module +__attribute__((section(".gnu.linkonce.this_module"))) = { + .name = KBUILD_MODNAME, + .init = init_module, +#ifdef CONFIG_MODULE_UNLOAD + .exit = cleanup_module, +#endif + .arch = MODULE_ARCH_INIT, +}; + +static const struct modversion_info ____versions[] +__used +__attribute__((section("__versions"))) = { + { 0x41572473, "module_layout" }, + { 0xac283e02, "kmalloc_caches" }, + { 0x5a34a45c, "__kmalloc" }, + { 0x91a7b1b5, "kernel_sendmsg" }, + { 0x6bf06390, "usb_add_hcd" }, + { 0xb85f3bbe, "pv_lock_ops" }, + { 0x4b164902, "usb_remove_hcd" }, + { 0xc8b57c27, "autoremove_wake_function" }, + { 0x1d255918, "usb_create_hcd" }, + { 0x1ad63f8d, "sock_release" }, + { 0xa46e773a, "usb_hcd_poll_rh_status" }, + { 0x1449877a, "usb_hcd_giveback_urb" }, + { 0x3c2c5af5, "sprintf" }, + { 0x87161317, "sysfs_remove_group" }, + { 0xa1e1592d, "kthread_create_on_node" }, + { 0x7d11c268, "jiffies" }, + { 0x4c871ad7, "usb_put_hcd" }, + { 0xe174aa7, "__init_waitqueue_head" }, + { 0x76eae032, "usb_hcd_link_urb_to_ep" }, + { 0x2caa0343, "dev_err" }, + { 0x88941a06, "_raw_spin_unlock_irqrestore" }, + { 0x23287643, "current_task" }, + { 0x27e1a049, "printk" }, + { 0x42224298, "sscanf" }, + { 0x9c1a3cd5, "kthread_stop" }, + { 0xd80e12ba, "sysfs_create_group" }, + { 0xb4390f9a, "mcount" }, + { 0x981e5632, "kernel_sock_shutdown" }, + { 0x330641e9, "platform_device_unregister" }, + { 0xfd1cb0e5, "platform_driver_register" }, + { 0xe132f32a, "usb_hcd_check_unlink_urb" }, + { 0xead58fb9, "print_hex_dump" }, + { 0xa738bfff, "_dev_info" }, + { 0x78764f4e, "pv_irq_ops" }, + { 0x9fe1f9f, "platform_device_register" }, + { 0x71c6d8bf, "usb_get_dev" }, + { 0xf0fdf6cb, "__stack_chk_fail" }, + { 0x3bd1b1f6, "msecs_to_jiffies" }, + { 0x61fdee16, "usb_put_dev" }, + { 0x1000e51, "schedule" }, + { 0xf333a2fb, "_raw_spin_lock_irq" }, + { 0x29a20e94, "wake_up_process" }, + { 0xa963fd01, "kmem_cache_alloc_trace" }, + { 0x6443d74d, "_raw_spin_lock" }, + { 0x587c70d8, "_raw_spin_lock_irqsave" }, + { 0xa82029a8, "kernel_recvmsg" }, + { 0xf09c7f68, "__wake_up" }, + { 0xd2965f6f, "kthread_should_stop" }, + { 0x19a304ba, "usb_disabled" }, + { 0x37a0cba, "kfree" }, + { 0xe75663a, "prepare_to_wait" }, + { 0x7f91a257, "fget" }, + { 0xb00ccc33, "finish_wait" }, + { 0xa3a5be95, "memmove" }, + { 0x1a1ce533, "platform_driver_unregister" }, + { 0x93ebfc8a, "usb_hcd_unlink_urb_from_ep" }, + { 0x6e498f50, "usb_hcd_resume_root_hub" }, + { 0xa7b095ff, "dev_get_drvdata" }, +}; + +static const char __module_depends[] +__used +__attribute__((section(".modinfo"))) = +"depends="; + + +MODULE_INFO(srcversion, "5A357BDB012DA4416DB619D"); diff --git a/modules/hp2101nw/usbip/hp2101nw.mod.o b/modules/hp2101nw/usbip/hp2101nw.mod.o new file mode 100644 index 0000000000000000000000000000000000000000..a3a60cbdaba569a3be5d1ead76ce9e11a338c7b8 GIT binary patch literal 6088 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 literal 0 HcmV?d00001 diff --git a/modules/hp2101nw/usbip/hp2101nw.o b/modules/hp2101nw/usbip/hp2101nw.o new file mode 100644 index 0000000000000000000000000000000000000000..ca3b4af72b36fbe190a49d4621fc4b94813770bf GIT binary patch literal 53026 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 literal 0 HcmV?d00001 diff --git a/modules/hp2101nw/usbip/hp2101nw_common.c b/modules/hp2101nw/usbip/hp2101nw_common.c new file mode 100644 index 0000000..0c35be0 --- /dev/null +++ b/modules/hp2101nw/usbip/hp2101nw_common.c @@ -0,0 +1,860 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include <asm/byteorder.h> +#include <linux/file.h> +#include <linux/fs.h> +#include <linux/kernel.h> +#include <linux/slab.h> +#include <net/sock.h> + +#include "hp2101nw_common.h" + +#define DRIVER_AUTHOR "Reinhold Kainhofer <reinhold@kainhofer.com>" +/* Based on USB/IP by Takahiro Hirofuchi <hirofuchi@users.sourceforge.net> */ +#define DRIVER_DESC "HP 2101nw wireless USB print server" + +#ifdef CONFIG_HP2101NW_DEBUG +unsigned long hp2101nw_debug_flag = 0xffffffff; +#else +unsigned long hp2101nw_debug_flag; +#endif +EXPORT_SYMBOL_GPL(hp2101nw_debug_flag); + +/* FIXME */ +struct device_attribute dev_attr_hp2101nw_debug; +EXPORT_SYMBOL_GPL(dev_attr_hp2101nw_debug); + +static ssize_t show_flag(struct device *dev, struct device_attribute *attr, + char *buf) +{ + return sprintf(buf, "%lx\n", hp2101nw_debug_flag); +} + +static ssize_t store_flag(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + sscanf(buf, "%lx", &hp2101nw_debug_flag); + return count; +} +DEVICE_ATTR(hp2101nw_debug, (S_IRUGO | S_IWUSR), show_flag, store_flag); + +static void hp2101nw_dump_buffer(char *buff, int bufflen) +{ + print_hex_dump(KERN_DEBUG, "hp2101nw-core", DUMP_PREFIX_OFFSET, 16, 4, + buff, bufflen, false); +} + +static void hp2101nw_dump_pipe(unsigned int p) +{ + unsigned char type = usb_pipetype(p); + unsigned char ep = usb_pipeendpoint(p); + unsigned char dev = usb_pipedevice(p); + unsigned char dir = usb_pipein(p); + + pr_debug("dev(%d) ep(%d) [%s] ", dev, ep, dir ? "IN" : "OUT"); + + switch (type) { + case PIPE_ISOCHRONOUS: + pr_debug("ISO\n"); + break; + case PIPE_INTERRUPT: + pr_debug("INT\n"); + break; + case PIPE_CONTROL: + pr_debug("CTRL\n"); + break; + case PIPE_BULK: + pr_debug("BULK\n"); + break; + default: + pr_debug("ERR\n"); + break; + } +} + +static void hp2101nw_dump_usb_device(struct usb_device *udev) +{ + struct device *dev = &udev->dev; + int i; + + dev_dbg(dev, " devnum(%d) devpath(%s) ", + udev->devnum, udev->devpath); + + switch (udev->speed) { + case USB_SPEED_HIGH: + pr_debug("SPD_HIGH "); + break; + case USB_SPEED_FULL: + pr_debug("SPD_FULL "); + break; + case USB_SPEED_LOW: + pr_debug("SPD_LOW "); + break; + case USB_SPEED_UNKNOWN: + pr_debug("SPD_UNKNOWN "); + break; + default: + pr_debug("SPD_ERROR "); + break; + } + + pr_debug("tt %p, ttport %d\n", udev->tt, udev->ttport); + + dev_dbg(dev, " "); + for (i = 0; i < 16; i++) + pr_debug(" %2u", i); + pr_debug("\n"); + + dev_dbg(dev, " toggle0(IN) :"); + for (i = 0; i < 16; i++) + pr_debug(" %2u", (udev->toggle[0] & (1 << i)) ? 1 : 0); + pr_debug("\n"); + + dev_dbg(dev, " toggle1(OUT):"); + for (i = 0; i < 16; i++) + pr_debug(" %2u", (udev->toggle[1] & (1 << i)) ? 1 : 0); + pr_debug("\n"); + + dev_dbg(dev, " epmaxp_in :"); + for (i = 0; i < 16; i++) { + if (udev->ep_in[i]) + pr_debug(" %2u", + le16_to_cpu(udev->ep_in[i]->desc.wMaxPacketSize)); + } + pr_debug("\n"); + + dev_dbg(dev, " epmaxp_out :"); + for (i = 0; i < 16; i++) { + if (udev->ep_out[i]) + pr_debug(" %2u", + le16_to_cpu(udev->ep_out[i]->desc.wMaxPacketSize)); + } + pr_debug("\n"); + + dev_dbg(dev, "parent %p, bus %p\n", udev->parent, udev->bus); + + dev_dbg(dev, "descriptor %p, config %p, actconfig %p, " + "rawdescriptors %p\n", &udev->descriptor, udev->config, + udev->actconfig, udev->rawdescriptors); + + dev_dbg(dev, "have_langid %d, string_langid %d\n", + udev->have_langid, udev->string_langid); + + dev_dbg(dev, "maxchild %d, children %p\n", + udev->maxchild, udev->children); +} + +static void hp2101nw_dump_request_type(__u8 rt) +{ + switch (rt & USB_RECIP_MASK) { + case USB_RECIP_DEVICE: + pr_debug("DEVICE"); + break; + case USB_RECIP_INTERFACE: + pr_debug("INTERF"); + break; + case USB_RECIP_ENDPOINT: + pr_debug("ENDPOI"); + break; + case USB_RECIP_OTHER: + pr_debug("OTHER "); + break; + default: + pr_debug("------"); + break; + } +} + +static void hp2101nw_dump_usb_ctrlrequest(struct usb_ctrlrequest *cmd) +{ + if (!cmd) { + pr_debug(" : null pointer\n"); + return; + } + + pr_debug(" "); + pr_debug("bRequestType(%02X) bRequest(%02X) wValue(%04X) wIndex(%04X) " + "wLength(%04X) ", cmd->bRequestType, cmd->bRequest, + cmd->wValue, cmd->wIndex, cmd->wLength); + pr_debug("\n "); + + if ((cmd->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) { + pr_debug("STANDARD "); + switch (cmd->bRequest) { + case USB_REQ_GET_STATUS: + pr_debug("GET_STATUS\n"); + break; + case USB_REQ_CLEAR_FEATURE: + pr_debug("CLEAR_FEAT\n"); + break; + case USB_REQ_SET_FEATURE: + pr_debug("SET_FEAT \n"); + break; + case USB_REQ_SET_ADDRESS: + pr_debug("SET_ADDRRS\n"); + break; + case USB_REQ_GET_DESCRIPTOR: + pr_debug("GET_DESCRI\n"); + break; + case USB_REQ_SET_DESCRIPTOR: + pr_debug("SET_DESCRI\n"); + break; + case USB_REQ_GET_CONFIGURATION: + pr_debug("GET_CONFIG\n"); + break; + case USB_REQ_SET_CONFIGURATION: + pr_debug("SET_CONFIG\n"); + break; + case USB_REQ_GET_INTERFACE: + pr_debug("GET_INTERF\n"); + break; + case USB_REQ_SET_INTERFACE: + pr_debug("SET_INTERF\n"); + break; + case USB_REQ_SYNCH_FRAME: + pr_debug("SYNC_FRAME\n"); + break; + default: + pr_debug("REQ(%02X) \n", cmd->bRequest); + break; + } + hp2101nw_dump_request_type(cmd->bRequestType); + } else if ((cmd->bRequestType & USB_TYPE_MASK) == USB_TYPE_CLASS) { + pr_debug("CLASS \n"); + } else if ((cmd->bRequestType & USB_TYPE_MASK) == USB_TYPE_VENDOR) { + pr_debug("VENDOR \n"); + } else if ((cmd->bRequestType & USB_TYPE_MASK) == USB_TYPE_RESERVED) { + pr_debug("RESERVED\n"); + } +} + +void hp2101nw_dump_urb(struct urb *urb) +{ + struct device *dev; + + if (!urb) { + pr_debug("urb: null pointer!!\n"); + return; + } + + if (!urb->dev) { + pr_debug("urb->dev: null pointer!!\n"); + return; + } + + dev = &urb->dev->dev; + + dev_dbg(dev, " urb :%p\n", urb); + dev_dbg(dev, " dev :%p\n", urb->dev); + + hp2101nw_dump_usb_device(urb->dev); + + dev_dbg(dev, " pipe :%08x ", urb->pipe); + + hp2101nw_dump_pipe(urb->pipe); + + dev_dbg(dev, " status :%d\n", urb->status); + dev_dbg(dev, " transfer_flags :%08X\n", urb->transfer_flags); + dev_dbg(dev, " transfer_buffer :%p\n", urb->transfer_buffer); + dev_dbg(dev, " transfer_buffer_length:%d\n", + urb->transfer_buffer_length); + dev_dbg(dev, " actual_length :%d\n", urb->actual_length); + dev_dbg(dev, " setup_packet :%p\n", urb->setup_packet); + + if (urb->setup_packet && usb_pipetype(urb->pipe) == PIPE_CONTROL) + hp2101nw_dump_usb_ctrlrequest( + (struct usb_ctrlrequest *)urb->setup_packet); + + dev_dbg(dev, " start_frame :%d\n", urb->start_frame); + dev_dbg(dev, " number_of_packets :%d\n", urb->number_of_packets); + dev_dbg(dev, " interval :%d\n", urb->interval); + dev_dbg(dev, " error_count :%d\n", urb->error_count); + dev_dbg(dev, " context :%p\n", urb->context); + dev_dbg(dev, " complete :%p\n", urb->complete); +} +EXPORT_SYMBOL_GPL(hp2101nw_dump_urb); + +void hp2101nw_dump_header(struct hp2101nw_header *pdu) +{ + pr_debug("BASE: cmd %u seq %u devid %u dir %u ep %u\n", + pdu->base.command, + pdu->base.seqnum, + pdu->base.devid, + pdu->base.direction, + pdu->base.ep); + + switch (pdu->base.command) { + case HP2101NW_CMD_SUBMIT: + pr_debug("HP2101NW_CMD_SUBMIT: " + "x_flags %u x_len %u sf %u #p %d iv %d\n", + pdu->u.cmd_submit.transfer_flags, + pdu->u.cmd_submit.transfer_buffer_length, + pdu->u.cmd_submit.start_frame, + pdu->u.cmd_submit.number_of_packets, + pdu->u.cmd_submit.interval); + break; + case HP2101NW_CMD_UNLINK: + pr_debug("HP2101NW_CMD_UNLINK: seq %u\n", + pdu->u.cmd_unlink.seqnum); + break; + case HP2101NW_RET_SUBMIT: + pr_debug("HP2101NW_RET_SUBMIT: st %d al %u sf %d #p %d ec %d\n", + pdu->u.ret_submit.status, + pdu->u.ret_submit.actual_length, + pdu->u.ret_submit.start_frame, + pdu->u.ret_submit.number_of_packets, + pdu->u.ret_submit.error_count); + break; + case HP2101NW_RET_UNLINK: + pr_debug("HP2101NW_RET_UNLINK: status %d\n", + pdu->u.ret_unlink.status); + break; + default: + /* NOT REACHED */ + pr_err("unknown command\n"); + break; + } +} +EXPORT_SYMBOL_GPL(hp2101nw_dump_header); + +/* Send/receive messages over TCP/IP. I refer drivers/block/nbd.c */ +int hp2101nw_xmit(int send, struct socket *sock, char *buf, + int size, int msg_flags) +{ + int result; + struct msghdr msg; + struct kvec iov; + int total = 0; + + /* for blocks of if (hp2101nw_dbg_flag_xmit) */ + char *bp = buf; + int osize = size; + + hp2101nw_dbg_xmit("enter\n"); + + if (!sock || !buf || !size) { + pr_err("invalid arg, sock %p buff %p size %d\n", sock, buf, + size); + return -EINVAL; + } + + if (hp2101nw_dbg_flag_xmit) { + if (send) { + if (!in_interrupt()) + pr_debug("%-10s:", current->comm); + else + pr_debug("interrupt :"); + + pr_debug("sending... , sock %p, buf %p, size %d, " + "msg_flags %d\n", sock, buf, size, msg_flags); + hp2101nw_dump_buffer(buf, size); + } + } + + do { + sock->sk->sk_allocation = GFP_NOIO; + iov.iov_base = buf; + iov.iov_len = size; + msg.msg_name = NULL; + msg.msg_namelen = 0; + msg.msg_control = NULL; + msg.msg_controllen = 0; + msg.msg_namelen = 0; + msg.msg_flags = msg_flags | MSG_NOSIGNAL; + + if (send) + result = kernel_sendmsg(sock, &msg, &iov, 1, size); + else + result = kernel_recvmsg(sock, &msg, &iov, 1, size, + MSG_WAITALL); + + if (result <= 0) { + pr_debug("%s sock %p buf %p size %u ret %d total %d\n", + send ? "send" : "receive", sock, buf, size, + result, total); + goto err; + } + + size -= result; + buf += result; + total += result; + + } while (size > 0); + + if (hp2101nw_dbg_flag_xmit) { + if (!send) { + if (!in_interrupt()) + pr_debug("%-10s:", current->comm); + else + pr_debug("interrupt :"); + + pr_debug("receiving....\n"); + hp2101nw_dump_buffer(bp, osize); + pr_debug("received, osize %d ret %d size %d total %d\n", + osize, result, size, total); + } + + if (send) + pr_debug("send, total %d\n", total); + } + + return total; + +err: + return result; +} +EXPORT_SYMBOL_GPL(hp2101nw_xmit); + +struct socket *sockfd_to_socket(unsigned int sockfd) +{ + struct socket *socket; + struct file *file; + struct inode *inode; + + file = fget(sockfd); + if (!file) { + pr_err("invalid sockfd\n"); + return NULL; + } + + inode = file->f_dentry->d_inode; + + if (!inode || !S_ISSOCK(inode->i_mode)) + return NULL; + + socket = SOCKET_I(inode); + + return socket; +} +EXPORT_SYMBOL_GPL(sockfd_to_socket); + +/* there may be more cases to tweak the flags. */ +static unsigned int tweak_transfer_flags(unsigned int flags) +{ + flags &= ~URB_NO_TRANSFER_DMA_MAP; + return flags; +} + +static void hp2101nw_pack_cmd_submit(struct hp2101nw_header *pdu, struct urb *urb, + int pack) +{ + struct hp2101nw_header_cmd_submit *spdu = &pdu->u.cmd_submit; + + /* + * Some members are not still implemented in hp2101nw. I hope this issue + * will be discussed when hp2101nw is ported to other operating systems. + */ + if (pack) { + /* vhci_tx.c */ + spdu->transfer_flags = + tweak_transfer_flags(urb->transfer_flags); + spdu->transfer_buffer_length = urb->transfer_buffer_length; + spdu->start_frame = urb->start_frame; + spdu->number_of_packets = urb->number_of_packets; + spdu->interval = urb->interval; + } else { + /* stub_rx.c */ + urb->transfer_flags = spdu->transfer_flags; + + urb->transfer_buffer_length = spdu->transfer_buffer_length; + urb->start_frame = spdu->start_frame; + urb->number_of_packets = spdu->number_of_packets; + urb->interval = spdu->interval; + } +} + +static void hp2101nw_pack_ret_submit(struct hp2101nw_header *pdu, struct urb *urb, + int pack) +{ + struct hp2101nw_header_ret_submit *rpdu = &pdu->u.ret_submit; + + if (pack) { + /* stub_tx.c */ + + rpdu->status = urb->status; + rpdu->actual_length = urb->actual_length; + rpdu->start_frame = urb->start_frame; + rpdu->number_of_packets = urb->number_of_packets; + rpdu->error_count = urb->error_count; + } else { + /* vhci_rx.c */ + + urb->status = rpdu->status; + urb->actual_length = rpdu->actual_length; + urb->start_frame = rpdu->start_frame; + urb->number_of_packets = rpdu->number_of_packets; + urb->error_count = rpdu->error_count; + } +} + +void hp2101nw_pack_pdu(struct hp2101nw_header *pdu, struct urb *urb, int cmd, + int pack) +{ + switch (cmd) { + case HP2101NW_CMD_SUBMIT: + hp2101nw_pack_cmd_submit(pdu, urb, pack); + break; + case HP2101NW_RET_SUBMIT: + hp2101nw_pack_ret_submit(pdu, urb, pack); + break; + default: + /* NOT REACHED */ + pr_err("unknown command\n"); + break; + } +} +EXPORT_SYMBOL_GPL(hp2101nw_pack_pdu); + +static void correct_endian_basic(struct hp2101nw_header_basic *base, int send) +{ + if (send) { + base->command = cpu_to_be32(base->command); + base->seqnum = cpu_to_be32(base->seqnum); + base->devid = cpu_to_be32(base->devid); + base->direction = cpu_to_be32(base->direction); + base->ep = cpu_to_be32(base->ep); + } else { + base->command = be32_to_cpu(base->command); + base->seqnum = be32_to_cpu(base->seqnum); + base->devid = be32_to_cpu(base->devid); + base->direction = be32_to_cpu(base->direction); + base->ep = be32_to_cpu(base->ep); + } +} + +static void correct_endian_cmd_submit(struct hp2101nw_header_cmd_submit *pdu, + int send) +{ + if (send) { + pdu->transfer_flags = cpu_to_be32(pdu->transfer_flags); + + cpu_to_be32s(&pdu->transfer_buffer_length); + cpu_to_be32s(&pdu->start_frame); + cpu_to_be32s(&pdu->number_of_packets); + cpu_to_be32s(&pdu->interval); + } else { + pdu->transfer_flags = be32_to_cpu(pdu->transfer_flags); + + be32_to_cpus(&pdu->transfer_buffer_length); + be32_to_cpus(&pdu->start_frame); + be32_to_cpus(&pdu->number_of_packets); + be32_to_cpus(&pdu->interval); + } +} + +static void correct_endian_ret_submit(struct hp2101nw_header_ret_submit *pdu, + int send) +{ + if (send) { + cpu_to_be32s(&pdu->status); + cpu_to_be32s(&pdu->actual_length); + cpu_to_be32s(&pdu->start_frame); + cpu_to_be32s(&pdu->number_of_packets); + cpu_to_be32s(&pdu->error_count); + } else { + be32_to_cpus(&pdu->status); + be32_to_cpus(&pdu->actual_length); + be32_to_cpus(&pdu->start_frame); + be32_to_cpus(&pdu->number_of_packets); + be32_to_cpus(&pdu->error_count); + } +} + +static void correct_endian_cmd_unlink(struct hp2101nw_header_cmd_unlink *pdu, + int send) +{ + if (send) + pdu->seqnum = cpu_to_be32(pdu->seqnum); + else + pdu->seqnum = be32_to_cpu(pdu->seqnum); +} + +static void correct_endian_ret_unlink(struct hp2101nw_header_ret_unlink *pdu, + int send) +{ + if (send) + cpu_to_be32s(&pdu->status); + else + be32_to_cpus(&pdu->status); +} + +void hp2101nw_header_correct_endian(struct hp2101nw_header *pdu, int send) +{ + __u32 cmd = 0; + + if (send) + cmd = pdu->base.command; + + correct_endian_basic(&pdu->base, send); + + if (!send) + cmd = pdu->base.command; + + switch (cmd) { + case HP2101NW_CMD_SUBMIT: + correct_endian_cmd_submit(&pdu->u.cmd_submit, send); + break; + case HP2101NW_RET_SUBMIT: + correct_endian_ret_submit(&pdu->u.ret_submit, send); + break; + case HP2101NW_CMD_UNLINK: + correct_endian_cmd_unlink(&pdu->u.cmd_unlink, send); + break; + case HP2101NW_RET_UNLINK: + correct_endian_ret_unlink(&pdu->u.ret_unlink, send); + break; + default: + /* NOT REACHED */ + pr_err("unknown command\n"); + break; + } +} +EXPORT_SYMBOL_GPL(hp2101nw_header_correct_endian); + +static void hp2101nw_iso_pakcet_correct_endian( + struct hp2101nw_iso_packet_descriptor *iso, + int send) +{ + /* does not need all members. but copy all simply. */ + if (send) { + iso->offset = cpu_to_be32(iso->offset); + iso->length = cpu_to_be32(iso->length); + iso->status = cpu_to_be32(iso->status); + iso->actual_length = cpu_to_be32(iso->actual_length); + } else { + iso->offset = be32_to_cpu(iso->offset); + iso->length = be32_to_cpu(iso->length); + iso->status = be32_to_cpu(iso->status); + iso->actual_length = be32_to_cpu(iso->actual_length); + } +} + +static void hp2101nw_pack_iso(struct hp2101nw_iso_packet_descriptor *iso, + struct usb_iso_packet_descriptor *uiso, int pack) +{ + if (pack) { + iso->offset = uiso->offset; + iso->length = uiso->length; + iso->status = uiso->status; + iso->actual_length = uiso->actual_length; + } else { + uiso->offset = iso->offset; + uiso->length = iso->length; + uiso->status = iso->status; + uiso->actual_length = iso->actual_length; + } +} + +/* must free buffer */ +void *hp2101nw_alloc_iso_desc_pdu(struct urb *urb, ssize_t *bufflen) +{ + void *buff; + struct hp2101nw_iso_packet_descriptor *iso; + int np = urb->number_of_packets; + ssize_t size = np * sizeof(*iso); + int i; + + buff = kzalloc(size, GFP_KERNEL); + if (!buff) + return NULL; + + for (i = 0; i < np; i++) { + iso = buff + (i * sizeof(*iso)); + + hp2101nw_pack_iso(iso, &urb->iso_frame_desc[i], 1); + hp2101nw_iso_pakcet_correct_endian(iso, 1); + } + + *bufflen = size; + + return buff; +} +EXPORT_SYMBOL_GPL(hp2101nw_alloc_iso_desc_pdu); + +/* some members of urb must be substituted before. */ +int hp2101nw_recv_iso(struct hp2101nw_device *ud, struct urb *urb) +{ + void *buff; + struct hp2101nw_iso_packet_descriptor *iso; + int np = urb->number_of_packets; + int size = np * sizeof(*iso); + int i; + int ret; + int total_length = 0; + + if (!usb_pipeisoc(urb->pipe)) + return 0; + + /* my Bluetooth dongle gets ISO URBs which are np = 0 */ + if (np == 0) { + /* pr_info("iso np == 0\n"); */ + /* hp2101nw_dump_urb(urb); */ + return 0; + } + + buff = kzalloc(size, GFP_KERNEL); + if (!buff) + return -ENOMEM; + + ret = hp2101nw_xmit(0, ud->tcp_socket, buff, size, 0); + if (ret != size) { + dev_err(&urb->dev->dev, "recv iso_frame_descriptor, %d\n", + ret); + kfree(buff); + + if (ud->side == HP2101NW_STUB) + hp2101nw_event_add(ud, SDEV_EVENT_ERROR_TCP); + else + hp2101nw_event_add(ud, VDEV_EVENT_ERROR_TCP); + + return -EPIPE; + } + + for (i = 0; i < np; i++) { + iso = buff + (i * sizeof(*iso)); + + hp2101nw_iso_pakcet_correct_endian(iso, 0); + hp2101nw_pack_iso(iso, &urb->iso_frame_desc[i], 0); + total_length += urb->iso_frame_desc[i].actual_length; + } + + kfree(buff); + + if (total_length != urb->actual_length) { + dev_err(&urb->dev->dev, + "total length of iso packets %d not equal to actual " + "length of buffer %d\n", + total_length, urb->actual_length); + + if (ud->side == HP2101NW_STUB) + hp2101nw_event_add(ud, SDEV_EVENT_ERROR_TCP); + else + hp2101nw_event_add(ud, VDEV_EVENT_ERROR_TCP); + + return -EPIPE; + } + + return ret; +} +EXPORT_SYMBOL_GPL(hp2101nw_recv_iso); + +/* + * This functions restores the padding which was removed for optimizing + * the bandwidth during transfer over tcp/ip + * + * buffer and iso packets need to be stored and be in propeper endian in urb + * before calling this function + */ +int hp2101nw_pad_iso(struct hp2101nw_device *ud, struct urb *urb) +{ + int np = urb->number_of_packets; + int i; + int ret; + int actualoffset = urb->actual_length; + + if (!usb_pipeisoc(urb->pipe)) + return 0; + + /* if no packets or length of data is 0, then nothing to unpack */ + if (np == 0 || urb->actual_length == 0) + return 0; + + /* + * if actual_length is transfer_buffer_length then no padding is + * present. + */ + if (urb->actual_length == urb->transfer_buffer_length) + return 0; + + /* + * loop over all packets from last to first (to prevent overwritting + * memory when padding) and move them into the proper place + */ + for (i = np-1; i > 0; i--) { + actualoffset -= urb->iso_frame_desc[i].actual_length; + memmove(urb->transfer_buffer + urb->iso_frame_desc[i].offset, + urb->transfer_buffer + actualoffset, + urb->iso_frame_desc[i].actual_length); + } + + return ret; +} +EXPORT_SYMBOL_GPL(hp2101nw_pad_iso); + +/* some members of urb must be substituted before. */ +int hp2101nw_recv_xbuff(struct hp2101nw_device *ud, struct urb *urb) +{ + int ret; + int size; + + if (ud->side == HP2101NW_STUB) { + /* stub_rx.c */ + /* the direction of urb must be OUT. */ + if (usb_pipein(urb->pipe)) + return 0; + + size = urb->transfer_buffer_length; + } else { + /* vhci_rx.c */ + /* the direction of urb must be IN. */ + if (usb_pipeout(urb->pipe)) + return 0; + + size = urb->actual_length; + } + + /* no need to recv xbuff */ + if (!(size > 0)) + return 0; + + ret = hp2101nw_xmit(0, ud->tcp_socket, (char *)urb->transfer_buffer, + size, 0); + if (ret != size) { + dev_err(&urb->dev->dev, "recv xbuf, %d\n", ret); + if (ud->side == HP2101NW_STUB) { + hp2101nw_event_add(ud, SDEV_EVENT_ERROR_TCP); + } else { + hp2101nw_event_add(ud, VDEV_EVENT_ERROR_TCP); + return -EPIPE; + } + } + + return ret; +} +EXPORT_SYMBOL_GPL(hp2101nw_recv_xbuff); +/* +static int __init hp2101nw_common_init(void) +{ + pr_info(DRIVER_DESC " v" HP2101NW_VERSION "\n"); + return 0; +} + +static void __exit hp2101nw_common_exit(void) +{ + return; +} + +module_init(hp2101nw_common_init); +module_exit(hp2101nw_common_exit); + +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_LICENSE("GPL"); +MODULE_VERSION(HP2101NW_VERSION);*/ diff --git a/modules/hp2101nw/usbip/hp2101nw_common.h b/modules/hp2101nw/usbip/hp2101nw_common.h new file mode 100644 index 0000000..cc4a1a5 --- /dev/null +++ b/modules/hp2101nw/usbip/hp2101nw_common.h @@ -0,0 +1,339 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#ifndef __HP2101NW_COMMON_H +#define __HP2101NW_COMMON_H + +#include <linux/compiler.h> +#include <linux/device.h> +#include <linux/interrupt.h> +#include <linux/net.h> +#include <linux/printk.h> +#include <linux/spinlock.h> +#include <linux/types.h> +#include <linux/usb.h> +#include <linux/wait.h> + +#define HP2101NW_VERSION "1.0.0" + +#undef pr_fmt + +#ifdef DEBUG +#define pr_fmt(fmt) KBUILD_MODNAME ": %s:%d: " fmt, __func__, __LINE__ +#else +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#endif + +enum { + hp2101nw_debug_xmit = (1 << 0), + hp2101nw_debug_sysfs = (1 << 1), + hp2101nw_debug_urb = (1 << 2), + hp2101nw_debug_eh = (1 << 3), + + hp2101nw_debug_stub_cmp = (1 << 8), + hp2101nw_debug_stub_dev = (1 << 9), + hp2101nw_debug_stub_rx = (1 << 10), + hp2101nw_debug_stub_tx = (1 << 11), + + hp2101nw_debug_vhci_rh = (1 << 8), + hp2101nw_debug_vhci_hc = (1 << 9), + hp2101nw_debug_vhci_rx = (1 << 10), + hp2101nw_debug_vhci_tx = (1 << 11), + hp2101nw_debug_vhci_sysfs = (1 << 12) +}; + +#define hp2101nw_dbg_flag_xmit (hp2101nw_debug_flag & hp2101nw_debug_xmit) +#define hp2101nw_dbg_flag_vhci_rh (hp2101nw_debug_flag & hp2101nw_debug_vhci_rh) +#define hp2101nw_dbg_flag_vhci_hc (hp2101nw_debug_flag & hp2101nw_debug_vhci_hc) +#define hp2101nw_dbg_flag_vhci_rx (hp2101nw_debug_flag & hp2101nw_debug_vhci_rx) +#define hp2101nw_dbg_flag_vhci_tx (hp2101nw_debug_flag & hp2101nw_debug_vhci_tx) +#define hp2101nw_dbg_flag_stub_rx (hp2101nw_debug_flag & hp2101nw_debug_stub_rx) +#define hp2101nw_dbg_flag_stub_tx (hp2101nw_debug_flag & hp2101nw_debug_stub_tx) +#define hp2101nw_dbg_flag_vhci_sysfs (hp2101nw_debug_flag & hp2101nw_debug_vhci_sysfs) + +extern unsigned long hp2101nw_debug_flag; +extern struct device_attribute dev_attr_hp2101nw_debug; + +#define hp2101nw_dbg_with_flag(flag, fmt, args...) \ + do { \ + if (flag & hp2101nw_debug_flag) \ + pr_debug(fmt, ##args); \ + } while (0) + +#define hp2101nw_dbg_sysfs(fmt, args...) \ + hp2101nw_dbg_with_flag(hp2101nw_debug_sysfs, fmt , ##args) +#define hp2101nw_dbg_xmit(fmt, args...) \ + hp2101nw_dbg_with_flag(hp2101nw_debug_xmit, fmt , ##args) +#define hp2101nw_dbg_urb(fmt, args...) \ + hp2101nw_dbg_with_flag(hp2101nw_debug_urb, fmt , ##args) +#define hp2101nw_dbg_eh(fmt, args...) \ + hp2101nw_dbg_with_flag(hp2101nw_debug_eh, fmt , ##args) + +#define hp2101nw_dbg_vhci_rh(fmt, args...) \ + hp2101nw_dbg_with_flag(hp2101nw_debug_vhci_rh, fmt , ##args) +#define hp2101nw_dbg_vhci_hc(fmt, args...) \ + hp2101nw_dbg_with_flag(hp2101nw_debug_vhci_hc, fmt , ##args) +#define hp2101nw_dbg_vhci_rx(fmt, args...) \ + hp2101nw_dbg_with_flag(hp2101nw_debug_vhci_rx, fmt , ##args) +#define hp2101nw_dbg_vhci_tx(fmt, args...) \ + hp2101nw_dbg_with_flag(hp2101nw_debug_vhci_tx, fmt , ##args) +#define hp2101nw_dbg_vhci_sysfs(fmt, args...) \ + hp2101nw_dbg_with_flag(hp2101nw_debug_vhci_sysfs, fmt , ##args) + +#define hp2101nw_dbg_stub_cmp(fmt, args...) \ + hp2101nw_dbg_with_flag(hp2101nw_debug_stub_cmp, fmt , ##args) +#define hp2101nw_dbg_stub_rx(fmt, args...) \ + hp2101nw_dbg_with_flag(hp2101nw_debug_stub_rx, fmt , ##args) +#define hp2101nw_dbg_stub_tx(fmt, args...) \ + hp2101nw_dbg_with_flag(hp2101nw_debug_stub_tx, fmt , ##args) + +/* + * USB/IP request headers. + * Currently, we define 4 request types: + * + * - CMD_SUBMIT transfers a USB request, corresponding to usb_submit_urb(). + * (client to server) + * - RET_RETURN transfers the result of CMD_SUBMIT. + * (server to client) + * - CMD_UNLINK transfers an unlink request of a pending USB request. + * (client to server) + * - RET_UNLINK transfers the result of CMD_UNLINK. + * (server to client) + * + * Note: The below request formats are based on the USB subsystem of Linux. Its + * details will be defined when other implementations come. + * + * + */ + +/* + * A basic header followed by other additional headers. + */ +struct hp2101nw_header_basic { +#define HP2101NW_CMD_SUBMIT 0x0001 +#define HP2101NW_CMD_UNLINK 0x0002 +#define HP2101NW_RET_SUBMIT 0x0003 +#define HP2101NW_RET_UNLINK 0x0004 + __u32 command; + + /* sequential number which identifies requests. + * incremented per connections */ + __u32 seqnum; + + /* devid is used to specify a remote USB device uniquely instead + * of busnum and devnum in Linux. In the case of Linux stub_driver, + * this value is ((busnum << 16) | devnum) */ + __u32 devid; + +#define HP2101NW_DIR_OUT 0 +#define HP2101NW_DIR_IN 1 + __u32 direction; + __u32 ep; /* endpoint number */ +} __packed; + +/* + * An additional header for a CMD_SUBMIT packet. + */ +struct hp2101nw_header_cmd_submit { + /* these values are basically the same as in a URB. */ + + /* the same in a URB. */ + __u32 transfer_flags; + + /* set the following data size (out), + * or expected reading data size (in) */ + __s32 transfer_buffer_length; + + /* it is difficult for hp2101nw to sync frames (reserved only?) */ + __s32 start_frame; + + /* the number of iso descriptors that follows this header */ + __s32 number_of_packets; + + /* the maximum time within which this request works in a host + * controller of a server side */ + __s32 interval; + + /* set setup packet data for a CTRL request */ + unsigned char setup[8]; +} __packed; + +/* + * An additional header for a RET_SUBMIT packet. + */ +struct hp2101nw_header_ret_submit { + __s32 status; + __s32 actual_length; /* returned data length */ + __s32 start_frame; /* ISO and INT */ + __s32 number_of_packets; /* ISO only */ + __s32 error_count; /* ISO only */ +} __packed; + +/* + * An additional header for a CMD_UNLINK packet. + */ +struct hp2101nw_header_cmd_unlink { + __u32 seqnum; /* URB's seqnum that will be unlinked */ +} __packed; + +/* + * An additional header for a RET_UNLINK packet. + */ +struct hp2101nw_header_ret_unlink { + __s32 status; +} __packed; + +/* the same as usb_iso_packet_descriptor but packed for pdu */ +struct hp2101nw_iso_packet_descriptor { + __u32 offset; + __u32 length; /* expected length */ + __u32 actual_length; + __u32 status; +} __packed; + +/* + * All hp2101nw packets use a common header to keep code simple. + */ +struct hp2101nw_header { + struct hp2101nw_header_basic base; + + union { + struct hp2101nw_header_cmd_submit cmd_submit; + struct hp2101nw_header_ret_submit ret_submit; + struct hp2101nw_header_cmd_unlink cmd_unlink; + struct hp2101nw_header_ret_unlink ret_unlink; + } u; +} __packed; + +int hp2101nw_xmit(int, struct socket *, char *, int, int); +int hp2101nw_sendmsg(struct socket *, struct msghdr *, int); + +static inline int interface_to_busnum(struct usb_interface *interface) +{ + struct usb_device *udev = interface_to_usbdev(interface); + return udev->bus->busnum; +} + +static inline int interface_to_devnum(struct usb_interface *interface) +{ + struct usb_device *udev = interface_to_usbdev(interface); + return udev->devnum; +} + +static inline int interface_to_infnum(struct usb_interface *interface) +{ + return interface->cur_altsetting->desc.bInterfaceNumber; +} + +#if 0 +int setnodelay(struct socket *); +int setquickack(struct socket *); +int setkeepalive(struct socket *socket); +void setreuse(struct socket *); +#endif + +struct socket *sockfd_to_socket(unsigned int); +int set_sockaddr(struct socket *socket, struct sockaddr_storage *ss); + +void hp2101nw_dump_urb(struct urb *purb); +void hp2101nw_dump_header(struct hp2101nw_header *pdu); + +struct hp2101nw_device; + +enum hp2101nw_side { + HP2101NW_VHCI, + HP2101NW_STUB, +}; + +enum hp2101nw_status { + /* sdev is available. */ + SDEV_ST_AVAILABLE = 0x01, + /* sdev is now used. */ + SDEV_ST_USED, + /* sdev is unusable because of a fatal error. */ + SDEV_ST_ERROR, + + /* vdev does not connect a remote device. */ + VDEV_ST_NULL, + /* vdev is used, but the USB address is not assigned yet */ + VDEV_ST_NOTASSIGNED, + VDEV_ST_USED, + VDEV_ST_ERROR +}; + +/* a common structure for stub_device and vhci_device */ +struct hp2101nw_device { + enum hp2101nw_side side; + enum hp2101nw_status status; + + /* lock for status */ + spinlock_t lock; + + struct socket *tcp_socket; + + struct task_struct *tcp_rx; + struct task_struct *tcp_tx; + + /* event handler */ +#define HP2101NW_EH_SHUTDOWN (1 << 0) +#define HP2101NW_EH_BYE (1 << 1) +#define HP2101NW_EH_RESET (1 << 2) +#define HP2101NW_EH_UNUSABLE (1 << 3) + +#define SDEV_EVENT_REMOVED (HP2101NW_EH_SHUTDOWN | HP2101NW_EH_RESET | HP2101NW_EH_BYE) +#define SDEV_EVENT_DOWN (HP2101NW_EH_SHUTDOWN | HP2101NW_EH_RESET) +#define SDEV_EVENT_ERROR_TCP (HP2101NW_EH_SHUTDOWN | HP2101NW_EH_RESET) +#define SDEV_EVENT_ERROR_SUBMIT (HP2101NW_EH_SHUTDOWN | HP2101NW_EH_RESET) +#define SDEV_EVENT_ERROR_MALLOC (HP2101NW_EH_SHUTDOWN | HP2101NW_EH_UNUSABLE) + +#define VDEV_EVENT_REMOVED (HP2101NW_EH_SHUTDOWN | HP2101NW_EH_BYE) +#define VDEV_EVENT_DOWN (HP2101NW_EH_SHUTDOWN | HP2101NW_EH_RESET) +#define VDEV_EVENT_ERROR_TCP (HP2101NW_EH_SHUTDOWN | HP2101NW_EH_RESET) +#define VDEV_EVENT_ERROR_MALLOC (HP2101NW_EH_SHUTDOWN | HP2101NW_EH_UNUSABLE) + + unsigned long event; + struct task_struct *eh; + wait_queue_head_t eh_waitq; + + struct eh_ops { + void (*shutdown)(struct hp2101nw_device *); + void (*reset)(struct hp2101nw_device *); + void (*unusable)(struct hp2101nw_device *); + } eh_ops; +}; + +void hp2101nw_pack_pdu(struct hp2101nw_header *pdu, struct urb *urb, int cmd, + int pack); + +void hp2101nw_header_correct_endian(struct hp2101nw_header *pdu, int send); +/* some members of urb must be substituted before. */ +int hp2101nw_recv_xbuff(struct hp2101nw_device *ud, struct urb *urb); +/* some members of urb must be substituted before. */ +int hp2101nw_recv_iso(struct hp2101nw_device *ud, struct urb *urb); +/* some members of urb must be substituted before. */ +int hp2101nw_pad_iso(struct hp2101nw_device *ud, struct urb *urb); +void *hp2101nw_alloc_iso_desc_pdu(struct urb *urb, ssize_t *bufflen); + +/* hp2101nw_event.c */ +int hp2101nw_start_eh(struct hp2101nw_device *ud); +void hp2101nw_stop_eh(struct hp2101nw_device *ud); +void hp2101nw_event_add(struct hp2101nw_device *ud, unsigned long event); +int hp2101nw_event_happened(struct hp2101nw_device *ud); + +#endif /* __HP2101NW_COMMON_H */ diff --git a/modules/hp2101nw/usbip/hp2101nw_common.o b/modules/hp2101nw/usbip/hp2101nw_common.o new file mode 100644 index 0000000000000000000000000000000000000000..c8837ba81dcb3841d88a9d1549900572dbc689e2 GIT binary patch literal 20760 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 DFhp`v literal 0 HcmV?d00001 diff --git a/modules/hp2101nw/usbip/hp2101nw_event.c b/modules/hp2101nw/usbip/hp2101nw_event.c new file mode 100644 index 0000000..cd947c9 --- /dev/null +++ b/modules/hp2101nw/usbip/hp2101nw_event.c @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include <linux/kthread.h> + +#include "hp2101nw_common.h" + +static int event_handler(struct hp2101nw_device *ud) +{ + hp2101nw_dbg_eh("enter\n"); + + /* + * Events are handled by only this thread. + */ + while (hp2101nw_event_happened(ud)) { + hp2101nw_dbg_eh("pending event %lx\n", ud->event); + + /* + * NOTE: shutdown must come first. + * Shutdown the device. + */ + if (ud->event & HP2101NW_EH_SHUTDOWN) { + ud->eh_ops.shutdown(ud); + ud->event &= ~HP2101NW_EH_SHUTDOWN; + } + + /* Reset the device. */ + if (ud->event & HP2101NW_EH_RESET) { + ud->eh_ops.reset(ud); + ud->event &= ~HP2101NW_EH_RESET; + } + + /* Mark the device as unusable. */ + if (ud->event & HP2101NW_EH_UNUSABLE) { + ud->eh_ops.unusable(ud); + ud->event &= ~HP2101NW_EH_UNUSABLE; + } + + /* Stop the error handler. */ + if (ud->event & HP2101NW_EH_BYE) + return -1; + } + + return 0; +} + +static int event_handler_loop(void *data) +{ + struct hp2101nw_device *ud = data; + + while (!kthread_should_stop()) { + wait_event_interruptible(ud->eh_waitq, + hp2101nw_event_happened(ud) || + kthread_should_stop()); + hp2101nw_dbg_eh("wakeup\n"); + + if (event_handler(ud) < 0) + break; + } + + return 0; +} + +int hp2101nw_start_eh(struct hp2101nw_device *ud) +{ + init_waitqueue_head(&ud->eh_waitq); + ud->event = 0; + + ud->eh = kthread_run(event_handler_loop, ud, "hp2101nw_eh"); + if (IS_ERR(ud->eh)) { + pr_warning("Unable to start control thread\n"); + return PTR_ERR(ud->eh); + } + + return 0; +} +EXPORT_SYMBOL_GPL(hp2101nw_start_eh); + +void hp2101nw_stop_eh(struct hp2101nw_device *ud) +{ + if (ud->eh == current) + return; /* do not wait for myself */ + + kthread_stop(ud->eh); + hp2101nw_dbg_eh("hp2101nw_eh has finished\n"); +} +EXPORT_SYMBOL_GPL(hp2101nw_stop_eh); + +void hp2101nw_event_add(struct hp2101nw_device *ud, unsigned long event) +{ + spin_lock(&ud->lock); + ud->event |= event; + wake_up(&ud->eh_waitq); + spin_unlock(&ud->lock); +} +EXPORT_SYMBOL_GPL(hp2101nw_event_add); + +int hp2101nw_event_happened(struct hp2101nw_device *ud) { + int happened = 0; + + spin_lock(&ud->lock); + if (ud->event != 0) + happened = 1; + spin_unlock(&ud->lock); + + return happened; +} +EXPORT_SYMBOL_GPL(hp2101nw_event_happened); diff --git a/modules/hp2101nw/usbip/hp2101nw_event.o b/modules/hp2101nw/usbip/hp2101nw_event.o new file mode 100644 index 0000000000000000000000000000000000000000..be6f0829b69c672d7b294c875da65a95b9693482 GIT binary patch literal 9504 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 We*_6KFff4HAs{A5420F8kpckhf$>)W literal 0 HcmV?d00001 diff --git a/modules/hp2101nw/usbip/modules.order b/modules/hp2101nw/usbip/modules.order new file mode 100644 index 0000000..bcef3d2 --- /dev/null +++ b/modules/hp2101nw/usbip/modules.order @@ -0,0 +1 @@ +kernel//home/reinhold/Software/HP_2101nw/modules/hp2101nw/usbip/hp2101nw.ko diff --git a/modules/hp2101nw/usbip/userspace/AUTHORS b/modules/hp2101nw/usbip/userspace/AUTHORS new file mode 100644 index 0000000..2f73e65 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/AUTHORS @@ -0,0 +1,2 @@ +Takahiro Hirofuchi +Robert Leibl diff --git a/modules/hp2101nw/usbip/userspace/COPYING b/modules/hp2101nw/usbip/userspace/COPYING new file mode 100644 index 0000000..c5611e4 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + 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 for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/modules/hp2101nw/usbip/userspace/INSTALL b/modules/hp2101nw/usbip/userspace/INSTALL new file mode 100644 index 0000000..d3c5b40 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/INSTALL @@ -0,0 +1,237 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006, 2007 Free Software Foundation, Inc. + +This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + +Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + + 6. Often, you can also type `make uninstall' to remove the installed + files again. + +Compilers and Options +===================== + +Some systems require unusual options for compilation or linking that the +`configure' script does not know about. Run `./configure --help' for +details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + +You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + +Installation Names +================== + +By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + +Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + +There may be some features `configure' cannot figure out automatically, +but needs to determine by the type of machine the package will run on. +Usually, assuming the package is built to be run on the _same_ +architectures, `configure' can figure that out, but if it prints a +message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + +If you want to set default values for `configure' scripts to share, you +can create a site shell script called `config.site' that gives default +values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + +Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf bug. Until the bug is fixed you can use this workaround: + + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + +`configure' recognizes the following options to control how it operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/modules/hp2101nw/usbip/userspace/Makefile.am b/modules/hp2101nw/usbip/userspace/Makefile.am new file mode 100644 index 0000000..83f51b8 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/Makefile.am @@ -0,0 +1,11 @@ +SUBDIRS := libsrc src +includedir := @includedir@/usbip +include_HEADERS := $(addprefix libsrc/, \ + usbip.h usbip_common.h vhci_driver.h stub_driver.h) + +dist_man_MANS := $(addprefix doc/, usbip.8 usbipd.8 usbip_bind_driver.8) + +if INSTALL_USBIDS +pkgdata_DATA := usb.ids +EXTRA_DIST := $(pkgdata_DATA) +endif diff --git a/modules/hp2101nw/usbip/userspace/README b/modules/hp2101nw/usbip/userspace/README new file mode 100644 index 0000000..2ee84b9 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/README @@ -0,0 +1,215 @@ +# vim:tw=78:ts=4:expandtab:ai:sw=4 +# +# README for usbip-utils +# +# Copyright (C) 2005-2008 Takahiro Hirofuchi + + +[Requirements] + - USB/IP device drivers + Its source code is included under $(top)/drivers/. + + - sysfsutils >= 2.0.0 + sysfsutils library + + - libwrap0-dev + tcp wrapper library + + - gcc >= 4.0 + + - libglib2.0-dev >= 2.6.0 + + - libtool, automake >= 1.9, autoconf >= 2.5.0, pkg-config + +[Install] + 0. Skip here if you see a configure script. + $ ./autogen.sh + + 1. Compile & install. + $ ./configure + $ make install + + 2. Compile & install USB/IP drivers if not yet. + +[Usage] + server:# (Attach your USB device physically.) + + server:# insmod usbip-core.ko + server:# insmod usbip-host.ko + - It was formerly named as stub.ko. + + server:# usbipd -D + - Start usbip daemon. + + server:# usbip_bind_driver --list + - List driver assignments for usb devices. + + server:# usbip_bind_driver --usbip 1-2 + - Bind usbip-host.ko to the device of busid 1-2. + - A usb device 1-2 is now exportable to other hosts! + - Use 'usbip_bind_driver --other 1-2' when you want to shutdown exporting + and use the device locally. + + + client:# insmod usbip-core.ko + client:# insmod vhci-hcd.ko + - It was formerly named as vhci.ko. + + client:# usbip --list server + - List exportable usb devices on the server. + + client:# usbip --attach server 1-2 + - Connect the remote USB device. + + client:# usbip --port + - Show virtual port status. + + client:# usbip --detach 0 + - Detach the usb device. + + +[Output Example] +-------------------------------------------------------------------------------------------------------- +- SERVER SIDE (physically attach your USB devices to this host) ---------------------------------------- +-------------------------------------------------------------------------------------------------------- +trois:# insmod (somewhere)/usbip-core.ko +trois:# insmod (somewhere)/usbip-host.ko +trois:# usbipd -D + +-------------------------------------------------------------------------------------------------------- +In another terminal, let's look up what usb devices are physically attached to +this host. We can see a usb storage device of busid 3-3.2 is now bound to +usb-storage driver. To export this device, we first mark the device as +"exportable"; the device is bound to usbip driver. Please remember you can not +export a usb hub. + + trois:# usbip_bind_driver --list + List USB devices + - busid 3-3.2 (04bb:0206) + 3-3.2:1.0 -> usb-storage + + - busid 3-3.1 (08bb:2702) + 3-3.1:1.0 -> snd-usb-audio + 3-3.1:1.1 -> snd-usb-audio + + - busid 3-3 (0409:0058) + 3-3:1.0 -> hub + + - busid 3-2 (0711:0902) + 3-2:1.0 -> none + + - busid 1-1 (05a9:a511) + 1-1:1.0 -> ov511 + + - busid 4-1 (046d:08b2) + 4-1:1.0 -> none + 4-1:1.1 -> none + 4-1:1.2 -> none + + - busid 5-2 (058f:9254) + 5-2:1.0 -> hub + +-------------------------------------------------------------------------------------------------------- +Mark the device of busid 3-3.2 as exportable. + + trois:# usbip_bind_driver --usbip 3-3.2 + ** (process:24621): DEBUG: 3-3.2:1.0 -> none + ** (process:24621): DEBUG: write "add 3-3.2" to /sys/bus/usb/drivers/usbip/match_busid + ** Message: bind 3-3.2 to usbip, complete! + + trois:# usbip_bind_driver --list + List USB devices + - busid 3-3.2 (04bb:0206) + 3-3.2:1.0 -> usbip + (snip) + +Iterate the above operation for other devices if you like. + + +-------------------------------------------------------------------------------------------------------- +- CLIENT SIDE ------------------------------------------------------------------------------------------ +-------------------------------------------------------------------------------------------------------- +First, let's list available remote devices which are marked as exportable in +the server host. + + deux:# insmod (somewhere)/usbip-core.ko + deux:# insmod (somewhere)/vhci_hcd.ko + + deux:# usbip --list 10.0.0.3 + - 10.0.0.3 + 1-1: Prolific Technology, Inc. : unknown product (067b:3507) + : /sys/devices/pci0000:00/0000:00:1f.2/usb1/1-1 + : (Defined at Interface level) / unknown subclass / unknown protocol (00/00/00) + : 0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50) + + 1-2.2.1: Apple Computer, Inc. : unknown product (05ac:0203) + : /sys/devices/pci0000:00/0000:00:1f.2/usb1/1-2/1-2.2/1-2.2.1 + : (Defined at Interface level) / unknown subclass / unknown protocol (00/00/00) + : 0 - Human Interface Devices / Boot Interface Subclass / Keyboard (03/01/01) + + 1-2.2.3: OmniVision Technologies, Inc. : OV511+ WebCam (05a9:a511) + : /sys/devices/pci0000:00/0000:00:1f.2/usb1/1-2/1-2.2/1-2.2.3 + : (Defined at Interface level) / unknown subclass / unknown protocol (00/00/00) + : 0 - Vendor Specific Class / unknown subclass / unknown protocol (ff/00/00) + + 3-1: Logitech, Inc. : QuickCam Pro 4000 (046d:08b2) + : /sys/devices/pci0000:00/0000:00:1e.0/0000:02:0a.0/usb3/3-1 + : (Defined at Interface level) / unknown subclass / unknown protocol (00/00/00) + : 0 - Data / unknown subclass / unknown protocol (0a/ff/00) + : 1 - Audio / Control Device / unknown protocol (01/01/00) + : 2 - Audio / Streaming / unknown protocol (01/02/00) + + 4-1: Logitech, Inc. : QuickCam Express (046d:0870) + : /sys/devices/pci0000:00/0000:00:1e.0/0000:02:0a.1/usb4/4-1 + : Vendor Specific Class / Vendor Specific Subclass / Vendor Specific Protocol (ff/ff/ff) + : 0 - Vendor Specific Class / Vendor Specific Subclass / Vendor Specific Protocol (ff/ff/ff) + + 4-2: Texas Instruments Japan : unknown product (08bb:2702) + : /sys/devices/pci0000:00/0000:00:1e.0/0000:02:0a.1/usb4/4-2 + : (Defined at Interface level) / unknown subclass / unknown protocol (00/00/00) + : 0 - Audio / Control Device / unknown protocol (01/01/00) + : 1 - Audio / Streaming / unknown protocol (01/02/00) + +-------------------------------------------------------------------------------------------------------- +Attach a remote usb device! + + deux:# usbip --attach 10.0.0.3 1-1 + port 0 attached + +-------------------------------------------------------------------------------------------------------- +Show what devices are attached to this client. + + deux:# usbip --port + Port 00: <Port in Use> at Full Speed(12Mbps) + Prolific Technology, Inc. : unknown product (067b:3507) + 6-1 -> usbip://10.0.0.3:3240/1-1 (remote bus/dev 001/004) + 6-1:1.0 used by usb-storage + /sys/class/scsi_device/0:0:0:0/device + /sys/class/scsi_host/host0/device + /sys/block/sda/device + +-------------------------------------------------------------------------------------------------------- +Detach the imported device. + + deux:# usbip --detach 0 + port 0 detached + +-------------------------------------------------------------------------------------------------------- + + +[Check List] + - See Debug Tips in the project wiki. + - http://usbip.wiki.sourceforge.net/how-to-debug-usbip + - usbip-host.ko must be bound to the target device. + - See /proc/bus/usb/devices and find "Driver=..." lines of the device. + - Shutdown firewall. + - usbip now uses TCP port 3240. + - Disable SELinux. + - If possible, compile your kernel with CONFIG_USB_DEBUG flag and try + again. + - Check your kernel and daemon messages. + ex. /var/log/{messages, kern.log, daemon.log, syslog} + + +[Contact] + Mailing List: usbip-devel _at_ lists.sourceforge.net diff --git a/modules/hp2101nw/usbip/userspace/autogen.sh b/modules/hp2101nw/usbip/userspace/autogen.sh new file mode 100755 index 0000000..e1112d3 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/autogen.sh @@ -0,0 +1,9 @@ +#!/bin/sh -x + +#aclocal +#autoheader +#libtoolize --copy --force +#automake-1.9 -acf +#autoconf + +autoreconf -i -f -v diff --git a/modules/hp2101nw/usbip/userspace/cleanup.sh b/modules/hp2101nw/usbip/userspace/cleanup.sh new file mode 100755 index 0000000..da2f89b --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/cleanup.sh @@ -0,0 +1,10 @@ +#!/bin/sh -x + + +if [ -r Makefile ]; then + make distclean +fi + +FILES="configure cscope.out Makefile.in depcomp compile config.guess config.sub config.h.in~ config.log config.status ltmain.sh libtool config.h.in autom4te.cache missing aclocal.m4 install-sh cmd/Makefile.in lib/Makefile.in Makefile lib/Makefile cmd/Makefile" + +rm -Rf $FILES diff --git a/modules/hp2101nw/usbip/userspace/configure.ac b/modules/hp2101nw/usbip/userspace/configure.ac new file mode 100644 index 0000000..e3afa15 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/configure.ac @@ -0,0 +1,114 @@ +dnl Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.59) +AC_INIT([usbip], [0.1.8], [usbip-devel@lists.sourceforge.net]) +AC_DEFINE([USBIP_VERSION], [0x000106], [numeric version number]) + +CURRENT=0 +REVISION=1 +AGE=0 +AC_SUBST([LIBUSBIP_VERSION], [$CURRENT:$REVISION:$AGE], [library version]) + +AC_CONFIG_SRCDIR([src/usbipd.c]) +AC_CONFIG_HEADERS([config.h]) + +AM_INIT_AUTOMAKE([foreign]) +LT_INIT + +# Silent build for automake >= 1.11 +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) + +AC_SUBST([EXTRA_CFLAGS], ["-Wall -Werror -Wextra -std=gnu99"]) + +# Checks for programs. +AC_PROG_CC +AC_PROG_INSTALL +AC_PROG_MAKE_SET + +# Checks for header files. +AC_HEADER_DIRENT +AC_HEADER_STDC +AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h stdint.h stdlib.h dnl + string.h strings.h sys/socket.h syslog.h unistd.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_TYPE_INT32_T +AC_TYPE_SIZE_T +AC_TYPE_SSIZE_T +AC_TYPE_UINT16_T +AC_TYPE_UINT32_T +AC_TYPE_UINT8_T + +# Checks for library functions. +AC_FUNC_REALLOC +AC_CHECK_FUNCS([bzero memset mkdir regcomp socket strchr strerror strstr dnl + strtoul]) + +AC_CHECK_HEADER([sysfs/libsysfs.h], + [AC_CHECK_LIB([sysfs], [sysfs_open_directory_list], + [LIBS="$LIBS -lsysfs"], + [AC_MSG_ERROR([Missing sysfs2 library!])])], + [AC_MSG_ERROR([Missing /usr/include/sysfs/libsysfs.h])]) + +# Checks for libwrap library. +AC_MSG_CHECKING([whether to use the libwrap (TCP wrappers) library]) +AC_ARG_WITH([tcp-wrappers], + [AS_HELP_STRING([--with-tcp-wrappers], + [use the libwrap (TCP wrappers) library])], + dnl [ACTION-IF-GIVEN] + [saved_LIBS="$LIBS" + if test "$withval" = "yes"; then + AC_MSG_RESULT([yes]) + AC_MSG_CHECKING([for hosts_access in -lwrap]) + LIBS="-lwrap $LIBS" + AC_TRY_LINK( + [int hosts_access(); int allow_severity, deny_severity;], + [hosts_access()], + [AC_MSG_RESULT([yes]); + AC_DEFINE([HAVE_LIBWRAP], [1], + [use tcp wrapper]) wrap_LIB="-lwrap"], + [AC_MSG_RESULT([not found]); exit 1]) + else + AC_MSG_RESULT([no]) + fi + LIBS="$saved_LIBS"], + dnl [ACTION-IF-NOT-GIVEN] + [AC_MSG_RESULT([(default)]) + AC_MSG_CHECKING([for hosts_access in -lwrap]) + saved_LIBS="$LIBS" + LIBS="-lwrap $saved_LIBS" + AC_TRY_LINK( + [int hosts_access(); int allow_severity, deny_severity;], + [hosts_access()], + [AC_MSG_RESULT([yes]); + AC_DEFINE([HAVE_LIBWRAP], [1], [use tcp wrapper])], + [AC_MSG_RESULT([no]); LIBS="$saved_LIBS"])]) + +# Sets directory containing usb.ids. +USBIDS_DIR='${datadir}/usbip' +AC_ARG_WITH([usbids-dir], + [AS_HELP_STRING([--with-usbids-dir=DIR], + [where usb.ids is found (default ${datadir}/usbip)])], + [USBIDS_DIR=$withval]) +AC_SUBST([USBIDS_DIR]) + +dnl FIXME: when disabled, empty directry is created +usbids=install +AC_ARG_ENABLE([usbids-install], + [AS_HELP_STRING([--enable-usbids-install], + [install usb.ids (default)])], + [AS_CASE([$enableval], + [yes], [usbids=install], + [no], [usbids=notinstall], + [AC_MSG_ERROR( + [bad value ${enableval} for --enable-usbids-install])] + )]) +AM_CONDITIONAL([INSTALL_USBIDS], [test x$usbids = xinstall]) + +GLIB2_REQUIRED=2.6.0 +PKG_CHECK_MODULES([PACKAGE], [glib-2.0 >= $GLIB2_REQUIRED]) +AC_SUBST([PACKAGE_CFLAGS]) +AC_SUBST([PACKAGE_LIBS]) + +AC_CONFIG_FILES([Makefile libsrc/Makefile src/Makefile]) +AC_OUTPUT diff --git a/modules/hp2101nw/usbip/userspace/doc/usbip.8 b/modules/hp2101nw/usbip/userspace/doc/usbip.8 new file mode 100644 index 0000000..1653bb2 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/doc/usbip.8 @@ -0,0 +1,71 @@ +.TH USBIP "8" "February 2009" "usbip" "System Administration Utilities" +.SH NAME +usbip \- manage USB/IP devices +.SH SYNOPSIS +.B usbip +[\fIoptions\fR] + +.SH DESCRIPTION +Devices exported by USB/IP servers can be listed, attached and +detached using this program. + +.SH OPTIONS +.HP +\fB\-a\fR, \fB\-\-attach\fR <host> <bus_id> +.IP +Attach a remote USB device. +.PP + +.HP +\fB\-x\fR, \fB\-\-attachall\fR <host> +.IP +Attach all remote USB devices on the specific host. +.PP + +.HP +\fB\-d\fR, \fB\-\-detach\fR <ports> +.IP +Detach an imported USB device. +.PP + +.HP +\fB\-l\fR, \fB\-\-list\fR <hosts> +.IP +List exported USB devices. +.PP + +.HP +\fB\-p\fR, \fB\-\-port\fR +.IP +List virtual USB port status. +.PP + +.HP +\fB\-D\fR, \fB\-\-debug\fR +.IP +Print debugging information. +.PP + +.HP +\fB\-v\fR, \fB\-\-version\fR +.IP +Show version. +.PP + +.SH EXAMPLES + + client:# usbip --list server + - List exportable usb devices on the server. + + client:# usbip --attach server 1-2 + - Connect the remote USB device. + + client:# usbip --port + - Show virtual port status. + + client:# usbip --detach 0 + - Detach the usb device. + +.SH "SEE ALSO" +\fBusbipd\fP\fB(8)\fB\fP, +\fBusbip_attach_driver\fP\fB(8)\fB\fP diff --git a/modules/hp2101nw/usbip/userspace/doc/usbip_bind_driver.8 b/modules/hp2101nw/usbip/userspace/doc/usbip_bind_driver.8 new file mode 100644 index 0000000..d43bbd6 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/doc/usbip_bind_driver.8 @@ -0,0 +1,42 @@ +.TH USBIP_BIND_DRIVER "8" "February 2009" "usbip" "System Administration Utilities" +.SH NAME +usbip_bind_driver \- change driver binding for USB/IP + +.SH SYNOPSIS +.B usbip_bind_driver +[\fIoptions\fR] + +.SH DESCRIPTION +Driver bindings for USB devices can be changed using +this program. It is used to export and unexport USB +devices over USB/IP. + +.SH OPTIONS +.TP +\fB\-u\fR, \fB\-\-usbip\fR <busid> +Make a device exportable +.TP +\fB\-o\fR, \fB\-\-other\fR <busid> +Use a device by a local driver +.TP +\fB\-l\fR, \fB\-\-list\fR +Print usb devices and their drivers +.TP +\fB\-L\fR, \fB\-\-list2\fR +Print usb devices and their drivers in parseable mode + +.SH EXAMPLES + + server:# usbip_bind_driver --list + - List driver assignments for usb devices. + + server:# usbip_bind_driver --usbip 1-2 + - Bind usbip-host.ko to the device of busid 1-2. + - A usb device 1-2 is now exportable to other hosts! + + server:# usbip_bind_driver --other 1-2 + - Shutdown exporting and use the device locally. + +.SH "SEE ALSO" +\fBusbip\fP\fB(8)\fB\fP, +\fBusbipd\fP\fB(8)\fB\fP diff --git a/modules/hp2101nw/usbip/userspace/doc/usbipd.8 b/modules/hp2101nw/usbip/userspace/doc/usbipd.8 new file mode 100644 index 0000000..006559f --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/doc/usbipd.8 @@ -0,0 +1,62 @@ +.TH USBIP "8" "February 2009" "usbip" "System Administration Utilities" +.SH NAME +usbipd \- USB/IP server daemon +.SH SYNOPSIS +.B usbipd +[\fIoptions\fR] + +.SH DESCRIPTION +.B usbipd +provides USB/IP clients access to exported USB devices. + +Devices have to explicitly be exported using +.B usbip_bind_driver +before usbipd makes them available to other hosts. + +The daemon accepts connections from USB/IP clients +on TCP port 3240. + +.SH OPTIONS +.HP +\fB\-D\fR, \fB\-\-daemon\fR +.IP +Run as a daemon process. +.PP + +.HP +\fB\-d\fR, \fB\-\-debug\fR +.IP +Print debugging information. +.PP + +.HP +\fB\-v\fR, \fB\-\-version\fR +.IP +Show version. +.PP + +.SH LIMITATIONS + +.B usbipd +offers no authentication or authorization for USB/IP. Any +USB/IP client can connect and use exported devices. + +.SH EXAMPLES + + server:# modprobe usbip + + server:# usbipd -D + - Start usbip daemon. + + server:# usbip_bind_driver --list + - List driver assignments for usb devices. + + server:# usbip_bind_driver --usbip 1-2 + - Bind usbip-host.ko to the device of busid 1-2. + - A usb device 1-2 is now exportable to other hosts! + - Use 'usbip_bind_driver --other 1-2' when you want to shutdown exporting and use the device locally. + +.SH "SEE ALSO" +\fBusbip\fP\fB(8)\fB\fP, +\fBusbip_attach_driver\fP\fB(8)\fB\fP + diff --git a/modules/hp2101nw/usbip/userspace/libsrc/Makefile.am b/modules/hp2101nw/usbip/userspace/libsrc/Makefile.am new file mode 100644 index 0000000..77ecf6b --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/libsrc/Makefile.am @@ -0,0 +1,7 @@ +libusbip_la_CPPFLAGS := -DUSBIDS_FILE='"@USBIDS_DIR@/usb.ids"' +libusbip_la_CFLAGS := @EXTRA_CFLAGS@ +libusbip_la_LDFLAGS := -version-info @LIBUSBIP_VERSION@ + +lib_LTLIBRARIES := libusbip.la +libusbip_la_SOURCES := names.c names.h stub_driver.c stub_driver.h usbip.h \ + usbip_common.c usbip_common.h vhci_driver.c vhci_driver.h diff --git a/modules/hp2101nw/usbip/userspace/libsrc/names.c b/modules/hp2101nw/usbip/userspace/libsrc/names.c new file mode 100644 index 0000000..b4de18b --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/libsrc/names.c @@ -0,0 +1,793 @@ +/*****************************************************************************/ +/* + * names.c -- USB name database manipulation routines + * + * Copyright (C) 1999, 2000 Thomas Sailer (sailer@ife.ee.ethz.ch) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * + */ + +/* + * Copyright (C) 2005 Takahiro Hirofuchi + * - names_deinit() is added. + */ + +/*****************************************************************************/ + +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <dirent.h> +#include <string.h> +#include <errno.h> +#include <stdlib.h> +#include <unistd.h> +#include <stdio.h> +#include <ctype.h> + + +#include "names.h" + + +/* ---------------------------------------------------------------------- */ + +struct vendor { + struct vendor *next; + u_int16_t vendorid; + char name[1]; +}; + +struct product { + struct product *next; + u_int16_t vendorid, productid; + char name[1]; +}; + +struct class { + struct class *next; + u_int8_t classid; + char name[1]; +}; + +struct subclass { + struct subclass *next; + u_int8_t classid, subclassid; + char name[1]; +}; + +struct protocol { + struct protocol *next; + u_int8_t classid, subclassid, protocolid; + char name[1]; +}; + +struct audioterminal { + struct audioterminal *next; + u_int16_t termt; + char name[1]; +}; + +struct genericstrtable { + struct genericstrtable *next; + unsigned int num; + char name[1]; +}; + +/* ---------------------------------------------------------------------- */ + +#define HASH1 0x10 +#define HASH2 0x02 +#define HASHSZ 16 + +static unsigned int hashnum(unsigned int num) +{ + unsigned int mask1 = HASH1 << 27, mask2 = HASH2 << 27; + + for (; mask1 >= HASH1; mask1 >>= 1, mask2 >>= 1) + if (num & mask1) + num ^= mask2; + return num & (HASHSZ-1); +} + +/* ---------------------------------------------------------------------- */ + +static struct vendor *vendors[HASHSZ] = { NULL, }; +static struct product *products[HASHSZ] = { NULL, }; +static struct class *classes[HASHSZ] = { NULL, }; +static struct subclass *subclasses[HASHSZ] = { NULL, }; +static struct protocol *protocols[HASHSZ] = { NULL, }; +static struct audioterminal *audioterminals[HASHSZ] = { NULL, }; +static struct genericstrtable *hiddescriptors[HASHSZ] = { NULL, }; +static struct genericstrtable *reports[HASHSZ] = { NULL, }; +static struct genericstrtable *huts[HASHSZ] = { NULL, }; +static struct genericstrtable *biass[HASHSZ] = { NULL, }; +static struct genericstrtable *physdess[HASHSZ] = { NULL, }; +static struct genericstrtable *hutus[HASHSZ] = { NULL, }; +static struct genericstrtable *langids[HASHSZ] = { NULL, }; +static struct genericstrtable *countrycodes[HASHSZ] = { NULL, }; + +/* ---------------------------------------------------------------------- */ + +static const char *names_genericstrtable(struct genericstrtable *t[HASHSZ], unsigned int index) +{ + struct genericstrtable *h; + + for (h = t[hashnum(index)]; h; h = h->next) + if (h->num == index) + return h->name; + return NULL; +} + +const char *names_hid(u_int8_t hidd) +{ + return names_genericstrtable(hiddescriptors, hidd); +} + +const char *names_reporttag(u_int8_t rt) +{ + return names_genericstrtable(reports, rt); +} + +const char *names_huts(unsigned int data) +{ + return names_genericstrtable(huts, data); +} + +const char *names_hutus(unsigned int data) +{ + return names_genericstrtable(hutus, data); +} + +const char *names_langid(u_int16_t langid) +{ + return names_genericstrtable(langids, langid); +} + +const char *names_physdes(u_int8_t ph) +{ + return names_genericstrtable(physdess, ph); +} + +const char *names_bias(u_int8_t b) +{ + return names_genericstrtable(biass, b); +} + +const char *names_countrycode(unsigned int countrycode) +{ + return names_genericstrtable(countrycodes, countrycode); +} + +const char *names_vendor(u_int16_t vendorid) +{ + struct vendor *v; + + v = vendors[hashnum(vendorid)]; + for (; v; v = v->next) + if (v->vendorid == vendorid) + return v->name; + return NULL; +} + +const char *names_product(u_int16_t vendorid, u_int16_t productid) +{ + struct product *p; + + p = products[hashnum((vendorid << 16) | productid)]; + for (; p; p = p->next) + if (p->vendorid == vendorid && p->productid == productid) + return p->name; + return NULL; +} + +const char *names_class(u_int8_t classid) +{ + struct class *c; + + c = classes[hashnum(classid)]; + for (; c; c = c->next) + if (c->classid == classid) + return c->name; + return NULL; +} + +const char *names_subclass(u_int8_t classid, u_int8_t subclassid) +{ + struct subclass *s; + + s = subclasses[hashnum((classid << 8) | subclassid)]; + for (; s; s = s->next) + if (s->classid == classid && s->subclassid == subclassid) + return s->name; + return NULL; +} + +const char *names_protocol(u_int8_t classid, u_int8_t subclassid, u_int8_t protocolid) +{ + struct protocol *p; + + p = protocols[hashnum((classid << 16) | (subclassid << 8) | protocolid)]; + for (; p; p = p->next) + if (p->classid == classid && p->subclassid == subclassid && p->protocolid == protocolid) + return p->name; + return NULL; +} + +const char *names_audioterminal(u_int16_t termt) +{ + struct audioterminal *at; + + at = audioterminals[hashnum(termt)]; + for (; at; at = at->next) + if (at->termt == termt) + return at->name; + return NULL; +} + +/* ---------------------------------------------------------------------- */ +/* add a cleanup function by takahiro */ + +struct pool { + struct pool *next; + void *mem; +}; + +static struct pool *pool_head = NULL; + +static void *my_malloc(size_t size) +{ + struct pool *p; + + p = calloc(1, sizeof(struct pool)); + if (!p) { + free(p); + return NULL; + } + + p->mem = calloc(1, size); + if (!p->mem) + return NULL; + + p->next = pool_head; + pool_head = p; + + return p->mem; +} + +void names_free(void) +{ + struct pool *pool; + + if (!pool_head) + return; + + for (pool = pool_head; pool != NULL; ) { + struct pool *tmp; + + if (pool->mem) + free(pool->mem); + + tmp = pool; + pool = pool->next; + free(tmp); + } +} + +/* ---------------------------------------------------------------------- */ + +static int new_vendor(const char *name, u_int16_t vendorid) +{ + struct vendor *v; + unsigned int h = hashnum(vendorid); + + v = vendors[h]; + for (; v; v = v->next) + if (v->vendorid == vendorid) + return -1; + v = my_malloc(sizeof(struct vendor) + strlen(name)); + if (!v) + return -1; + strcpy(v->name, name); + v->vendorid = vendorid; + v->next = vendors[h]; + vendors[h] = v; + return 0; +} + +static int new_product(const char *name, u_int16_t vendorid, u_int16_t productid) +{ + struct product *p; + unsigned int h = hashnum((vendorid << 16) | productid); + + p = products[h]; + for (; p; p = p->next) + if (p->vendorid == vendorid && p->productid == productid) + return -1; + p = my_malloc(sizeof(struct product) + strlen(name)); + if (!p) + return -1; + strcpy(p->name, name); + p->vendorid = vendorid; + p->productid = productid; + p->next = products[h]; + products[h] = p; + return 0; +} + +static int new_class(const char *name, u_int8_t classid) +{ + struct class *c; + unsigned int h = hashnum(classid); + + c = classes[h]; + for (; c; c = c->next) + if (c->classid == classid) + return -1; + c = my_malloc(sizeof(struct class) + strlen(name)); + if (!c) + return -1; + strcpy(c->name, name); + c->classid = classid; + c->next = classes[h]; + classes[h] = c; + return 0; +} + +static int new_subclass(const char *name, u_int8_t classid, u_int8_t subclassid) +{ + struct subclass *s; + unsigned int h = hashnum((classid << 8) | subclassid); + + s = subclasses[h]; + for (; s; s = s->next) + if (s->classid == classid && s->subclassid == subclassid) + return -1; + s = my_malloc(sizeof(struct subclass) + strlen(name)); + if (!s) + return -1; + strcpy(s->name, name); + s->classid = classid; + s->subclassid = subclassid; + s->next = subclasses[h]; + subclasses[h] = s; + return 0; +} + +static int new_protocol(const char *name, u_int8_t classid, u_int8_t subclassid, u_int8_t protocolid) +{ + struct protocol *p; + unsigned int h = hashnum((classid << 16) | (subclassid << 8) | protocolid); + + p = protocols[h]; + for (; p; p = p->next) + if (p->classid == classid && p->subclassid == subclassid && p->protocolid == protocolid) + return -1; + p = my_malloc(sizeof(struct protocol) + strlen(name)); + if (!p) + return -1; + strcpy(p->name, name); + p->classid = classid; + p->subclassid = subclassid; + p->protocolid = protocolid; + p->next = protocols[h]; + protocols[h] = p; + return 0; +} + +static int new_audioterminal(const char *name, u_int16_t termt) +{ + struct audioterminal *at; + unsigned int h = hashnum(termt); + + at = audioterminals[h]; + for (; at; at = at->next) + if (at->termt == termt) + return -1; + at = my_malloc(sizeof(struct audioterminal) + strlen(name)); + if (!at) + return -1; + strcpy(at->name, name); + at->termt = termt; + at->next = audioterminals[h]; + audioterminals[h] = at; + return 0; +} + +static int new_genericstrtable(struct genericstrtable *t[HASHSZ], const char *name, unsigned int index) +{ + struct genericstrtable *g; + unsigned int h = hashnum(index); + + for (g = t[h]; g; g = g->next) + if (g->num == index) + return -1; + g = my_malloc(sizeof(struct genericstrtable) + strlen(name)); + if (!g) + return -1; + strcpy(g->name, name); + g->num = index; + g->next = t[h]; + t[h] = g; + return 0; +} + +static int new_hid(const char *name, u_int8_t hidd) +{ + return new_genericstrtable(hiddescriptors, name, hidd); +} + +static int new_reporttag(const char *name, u_int8_t rt) +{ + return new_genericstrtable(reports, name, rt); +} + +static int new_huts(const char *name, unsigned int data) +{ + return new_genericstrtable(huts, name, data); +} + +static int new_hutus(const char *name, unsigned int data) +{ + return new_genericstrtable(hutus, name, data); +} + +static int new_langid(const char *name, u_int16_t langid) +{ + return new_genericstrtable(langids, name, langid); +} + +static int new_physdes(const char *name, u_int8_t ph) +{ + return new_genericstrtable(physdess, name, ph); +} +static int new_bias(const char *name, u_int8_t b) +{ + return new_genericstrtable(biass, name, b); +} + +static int new_countrycode(const char *name, unsigned int countrycode) +{ + return new_genericstrtable(countrycodes, name, countrycode); +} + +/* ---------------------------------------------------------------------- */ + +#define DBG(x) + +static void parse(FILE *f) +{ + char buf[512], *cp; + unsigned int linectr = 0; + int lastvendor = -1, lastclass = -1, lastsubclass = -1, lasthut=-1, lastlang=-1; + unsigned int u; + + while (fgets(buf, sizeof(buf), f)) { + linectr++; + /* remove line ends */ + if ((cp = strchr(buf, 13))) + *cp = 0; + if ((cp = strchr(buf, 10))) + *cp = 0; + if (buf[0] == '#' || !buf[0]) + continue; + cp = buf; + if (buf[0] == 'P' && buf[1] == 'H' && buf[2] == 'Y' && buf[3] == 'S' && buf[4] == 'D' && + buf[5] == 'E' && buf[6] == 'S' && /*isspace(buf[7])*/ buf[7] == ' ') { + cp = buf + 8; + while (isspace(*cp)) + cp++; + if (!isxdigit(*cp)) { + fprintf(stderr, "Invalid Physdes type at line %u\n", linectr); + continue; + } + u = strtoul(cp, &cp, 16); + while (isspace(*cp)) + cp++; + if (!*cp) { + fprintf(stderr, "Invalid Physdes type at line %u\n", linectr); + continue; + } + if (new_physdes(cp, u)) + fprintf(stderr, "Duplicate Physdes type spec at line %u terminal type %04x %s\n", linectr, u, cp); + DBG(printf("line %5u physdes type %02x %s\n", linectr, u, cp)); + continue; + + } + if (buf[0] == 'P' && buf[1] == 'H' && buf[2] == 'Y' && /*isspace(buf[3])*/ buf[3] == ' ') { + cp = buf + 4; + while (isspace(*cp)) + cp++; + if (!isxdigit(*cp)) { + fprintf(stderr, "Invalid PHY type at line %u\n", linectr); + continue; + } + u = strtoul(cp, &cp, 16); + while (isspace(*cp)) + cp++; + if (!*cp) { + fprintf(stderr, "Invalid PHY type at line %u\n", linectr); + continue; + } + if (new_physdes(cp, u)) + fprintf(stderr, "Duplicate PHY type spec at line %u terminal type %04x %s\n", linectr, u, cp); + DBG(printf("line %5u PHY type %02x %s\n", linectr, u, cp)); + continue; + + } + if (buf[0] == 'B' && buf[1] == 'I' && buf[2] == 'A' && buf[3] == 'S' && /*isspace(buf[4])*/ buf[4] == ' ') { + cp = buf + 5; + while (isspace(*cp)) + cp++; + if (!isxdigit(*cp)) { + fprintf(stderr, "Invalid BIAS type at line %u\n", linectr); + continue; + } + u = strtoul(cp, &cp, 16); + while (isspace(*cp)) + cp++; + if (!*cp) { + fprintf(stderr, "Invalid BIAS type at line %u\n", linectr); + continue; + } + if (new_bias(cp, u)) + fprintf(stderr, "Duplicate BIAS type spec at line %u terminal type %04x %s\n", linectr, u, cp); + DBG(printf("line %5u BIAS type %02x %s\n", linectr, u, cp)); + continue; + + } + if (buf[0] == 'L' && /*isspace(buf[1])*/ buf[1] == ' ') { + cp = buf+2; + while (isspace(*cp)) + cp++; + if (!isxdigit(*cp)) { + fprintf(stderr, "Invalid LANGID spec at line %u\n", linectr); + continue; + } + u = strtoul(cp, &cp, 16); + while (isspace(*cp)) + cp++; + if (!*cp) { + fprintf(stderr, "Invalid LANGID spec at line %u\n", linectr); + continue; + } + if (new_langid(cp, u)) + fprintf(stderr, "Duplicate LANGID spec at line %u language-id %04x %s\n", linectr, u, cp); + DBG(printf("line %5u LANGID %02x %s\n", linectr, u, cp)); + lasthut = lastclass = lastvendor = lastsubclass = -1; + lastlang = u; + continue; + } + if (buf[0] == 'C' && /*isspace(buf[1])*/ buf[1] == ' ') { + /* class spec */ + cp = buf+2; + while (isspace(*cp)) + cp++; + if (!isxdigit(*cp)) { + fprintf(stderr, "Invalid class spec at line %u\n", linectr); + continue; + } + u = strtoul(cp, &cp, 16); + while (isspace(*cp)) + cp++; + if (!*cp) { + fprintf(stderr, "Invalid class spec at line %u\n", linectr); + continue; + } + if (new_class(cp, u)) + fprintf(stderr, "Duplicate class spec at line %u class %04x %s\n", linectr, u, cp); + DBG(printf("line %5u class %02x %s\n", linectr, u, cp)); + lasthut = lastlang = lastvendor = lastsubclass = -1; + lastclass = u; + continue; + } + if (buf[0] == 'A' && buf[1] == 'T' && isspace(buf[2])) { + /* audio terminal type spec */ + cp = buf+3; + while (isspace(*cp)) + cp++; + if (!isxdigit(*cp)) { + fprintf(stderr, "Invalid audio terminal type at line %u\n", linectr); + continue; + } + u = strtoul(cp, &cp, 16); + while (isspace(*cp)) + cp++; + if (!*cp) { + fprintf(stderr, "Invalid audio terminal type at line %u\n", linectr); + continue; + } + if (new_audioterminal(cp, u)) + fprintf(stderr, "Duplicate audio terminal type spec at line %u terminal type %04x %s\n", linectr, u, cp); + DBG(printf("line %5u audio terminal type %02x %s\n", linectr, u, cp)); + continue; + } + if (buf[0] == 'H' && buf[1] == 'C' && buf[2] == 'C' && isspace(buf[3])) { + /* HID Descriptor bCountryCode */ + cp = buf+3; + while (isspace(*cp)) + cp++; + if (!isxdigit(*cp)) { + fprintf(stderr, "Invalid HID country code at line %u\n", linectr); + continue; + } + u = strtoul(cp, &cp, 10); + while (isspace(*cp)) + cp++; + if (!*cp) { + fprintf(stderr, "Invalid HID country code at line %u\n", linectr); + continue; + } + if (new_countrycode(cp, u)) + fprintf(stderr, "Duplicate HID country code at line %u country %02u %s\n", linectr, u, cp); + DBG(printf("line %5u keyboard country code %02u %s\n", linectr, u, cp)); + continue; + } + if (isxdigit(*cp)) { + /* vendor */ + u = strtoul(cp, &cp, 16); + while (isspace(*cp)) + cp++; + if (!*cp) { + fprintf(stderr, "Invalid vendor spec at line %u\n", linectr); + continue; + } + if (new_vendor(cp, u)) + fprintf(stderr, "Duplicate vendor spec at line %u vendor %04x %s\n", linectr, u, cp); + DBG(printf("line %5u vendor %04x %s\n", linectr, u, cp)); + lastvendor = u; + lasthut = lastlang = lastclass = lastsubclass = -1; + continue; + } + if (buf[0] == '\t' && isxdigit(buf[1])) { + /* product or subclass spec */ + u = strtoul(buf+1, &cp, 16); + while (isspace(*cp)) + cp++; + if (!*cp) { + fprintf(stderr, "Invalid product/subclass spec at line %u\n", linectr); + continue; + } + if (lastvendor != -1) { + if (new_product(cp, lastvendor, u)) + fprintf(stderr, "Duplicate product spec at line %u product %04x:%04x %s\n", linectr, lastvendor, u, cp); + DBG(printf("line %5u product %04x:%04x %s\n", linectr, lastvendor, u, cp)); + continue; + } + if (lastclass != -1) { + if (new_subclass(cp, lastclass, u)) + fprintf(stderr, "Duplicate subclass spec at line %u class %02x:%02x %s\n", linectr, lastclass, u, cp); + DBG(printf("line %5u subclass %02x:%02x %s\n", linectr, lastclass, u, cp)); + lastsubclass = u; + continue; + } + if (lasthut != -1) { + if (new_hutus(cp, (lasthut << 16)+u)) + fprintf(stderr, "Duplicate HUT Usage Spec at line %u\n", linectr); + continue; + } + if (lastlang != -1) { + if (new_langid(cp, lastlang+(u<<10))) + fprintf(stderr, "Duplicate LANGID Usage Spec at line %u\n", linectr); + continue; + } + fprintf(stderr, "Product/Subclass spec without prior Vendor/Class spec at line %u\n", linectr); + continue; + } + if (buf[0] == '\t' && buf[1] == '\t' && isxdigit(buf[2])) { + /* protocol spec */ + u = strtoul(buf+2, &cp, 16); + while (isspace(*cp)) + cp++; + if (!*cp) { + fprintf(stderr, "Invalid protocol spec at line %u\n", linectr); + continue; + } + if (lastclass != -1 && lastsubclass != -1) { + if (new_protocol(cp, lastclass, lastsubclass, u)) + fprintf(stderr, "Duplicate protocol spec at line %u class %02x:%02x:%02x %s\n", linectr, lastclass, lastsubclass, u, cp); + DBG(printf("line %5u protocol %02x:%02x:%02x %s\n", linectr, lastclass, lastsubclass, u, cp)); + continue; + } + fprintf(stderr, "Protocol spec without prior Class and Subclass spec at line %u\n", linectr); + continue; + } + if (buf[0] == 'H' && buf[1] == 'I' && buf[2] == 'D' && /*isspace(buf[3])*/ buf[3] == ' ') { + cp = buf + 4; + while (isspace(*cp)) + cp++; + if (!isxdigit(*cp)) { + fprintf(stderr, "Invalid HID type at line %u\n", linectr); + continue; + } + u = strtoul(cp, &cp, 16); + while (isspace(*cp)) + cp++; + if (!*cp) { + fprintf(stderr, "Invalid HID type at line %u\n", linectr); + continue; + } + if (new_hid(cp, u)) + fprintf(stderr, "Duplicate HID type spec at line %u terminal type %04x %s\n", linectr, u, cp); + DBG(printf("line %5u HID type %02x %s\n", linectr, u, cp)); + continue; + + } + if (buf[0] == 'H' && buf[1] == 'U' && buf[2] == 'T' && /*isspace(buf[3])*/ buf[3] == ' ') { + cp = buf + 4; + while (isspace(*cp)) + cp++; + if (!isxdigit(*cp)) { + fprintf(stderr, "Invalid HUT type at line %u\n", linectr); + continue; + } + u = strtoul(cp, &cp, 16); + while (isspace(*cp)) + cp++; + if (!*cp) { + fprintf(stderr, "Invalid HUT type at line %u\n", linectr); + continue; + } + if (new_huts(cp, u)) + fprintf(stderr, "Duplicate HUT type spec at line %u terminal type %04x %s\n", linectr, u, cp); + lastlang = lastclass = lastvendor = lastsubclass = -1; + lasthut = u; + DBG(printf("line %5u HUT type %02x %s\n", linectr, u, cp)); + continue; + + } + if (buf[0] == 'R' && buf[1] == ' ') { + cp = buf + 2; + while (isspace(*cp)) + cp++; + if (!isxdigit(*cp)) { + fprintf(stderr, "Invalid Report type at line %u\n", linectr); + continue; + } + u = strtoul(cp, &cp, 16); + while (isspace(*cp)) + cp++; + if (!*cp) { + fprintf(stderr, "Invalid Report type at line %u\n", linectr); + continue; + } + if (new_reporttag(cp, u)) + fprintf(stderr, "Duplicate Report type spec at line %u terminal type %04x %s\n", linectr, u, cp); + DBG(printf("line %5u Report type %02x %s\n", linectr, u, cp)); + continue; + + } + if (buf[0] == 'V' && buf[1] == 'T') { + /* add here */ + continue; + } + fprintf(stderr, "Unknown line at line %u\n", linectr); + } +} + +/* ---------------------------------------------------------------------- */ + +int names_init(char *n) +{ + FILE *f; + + if (!(f = fopen(n, "r"))) { + return errno; + } + parse(f); + fclose(f); + return 0; +} diff --git a/modules/hp2101nw/usbip/userspace/libsrc/names.h b/modules/hp2101nw/usbip/userspace/libsrc/names.h new file mode 100644 index 0000000..3a269fe --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/libsrc/names.h @@ -0,0 +1,57 @@ +/*****************************************************************************/ + +/* + * names.h -- USB name database manipulation routines + * + * Copyright (C) 1999, 2000 Thomas Sailer (sailer@ife.ee.ethz.ch) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * + */ + +/* + * Copyright (C) 2005 Takahiro Hirofuchi + * - names_free() is added. + */ + +/*****************************************************************************/ + +#ifndef _NAMES_H +#define _NAMES_H + +#include <sys/types.h> + +/* ---------------------------------------------------------------------- */ + +extern const char *names_vendor(u_int16_t vendorid); +extern const char *names_product(u_int16_t vendorid, u_int16_t productid); +extern const char *names_class(u_int8_t classid); +extern const char *names_subclass(u_int8_t classid, u_int8_t subclassid); +extern const char *names_protocol(u_int8_t classid, u_int8_t subclassid, u_int8_t protocolid); +extern const char *names_audioterminal(u_int16_t termt); +extern const char *names_hid(u_int8_t hidd); +extern const char *names_reporttag(u_int8_t rt); +extern const char *names_huts(unsigned int data); +extern const char *names_hutus(unsigned int data); +extern const char *names_langid(u_int16_t langid); +extern const char *names_physdes(u_int8_t ph); +extern const char *names_bias(u_int8_t b); +extern const char *names_countrycode(unsigned int countrycode); +extern int names_init(char *n); +extern void names_free(void); + +/* ---------------------------------------------------------------------- */ +#endif /* _NAMES_H */ diff --git a/modules/hp2101nw/usbip/userspace/libsrc/stub_driver.c b/modules/hp2101nw/usbip/userspace/libsrc/stub_driver.c new file mode 100644 index 0000000..cc33643 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/libsrc/stub_driver.c @@ -0,0 +1,391 @@ +/* + * Copyright (C) 2005-2007 Takahiro Hirofuchi + */ + +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> + +#include "usbip.h" + +/* kernel module name */ +static const char *usbip_stub_driver_name = "usbip-host"; + + +struct usbip_stub_driver *stub_driver; + +static struct sysfs_driver *open_sysfs_stub_driver(void) +{ + int ret; + + char sysfs_mntpath[SYSFS_PATH_MAX]; + char stub_driver_path[SYSFS_PATH_MAX]; + struct sysfs_driver *stub_driver; + + + ret = sysfs_get_mnt_path(sysfs_mntpath, SYSFS_PATH_MAX); + if (ret < 0) { + err("sysfs must be mounted"); + return NULL; + } + + snprintf(stub_driver_path, SYSFS_PATH_MAX, "%s/%s/usb/%s/%s", + sysfs_mntpath, SYSFS_BUS_NAME, SYSFS_DRIVERS_NAME, + usbip_stub_driver_name); + + stub_driver = sysfs_open_driver_path(stub_driver_path); + if (!stub_driver) { + err("usbip-core.ko and usbip-host.ko must be loaded"); + return NULL; + } + + return stub_driver; +} + + +#define SYSFS_OPEN_RETRIES 100 + +/* only the first interface value is true! */ +static int32_t read_attr_usbip_status(struct usb_device *udev) +{ + char attrpath[SYSFS_PATH_MAX]; + struct sysfs_attribute *attr; + int value = 0; + int ret; + struct stat s; + int retries = SYSFS_OPEN_RETRIES; + + /* This access is racy! + * + * Just after detach, our driver removes the sysfs + * files and recreates them. + * + * We may try and fail to open the usbip_status of + * an exported device in the (short) window where + * it has been removed and not yet recreated. + * + * This is a bug in the interface. Nothing we can do + * except work around it here by polling for the sysfs + * usbip_status to reappear. + */ + + snprintf(attrpath, SYSFS_PATH_MAX, "%s/%s:%d.%d/usbip_status", + udev->path, udev->busid, + udev->bConfigurationValue, + 0); + + while (retries > 0) { + if (stat(attrpath, &s) == 0) + break; + + if (errno != ENOENT) { + err("error stat'ing %s", attrpath); + return -1; + } + + usleep(10000); /* 10ms */ + retries--; + } + + if (retries == 0) + err("usbip_status not ready after %d retries", + SYSFS_OPEN_RETRIES); + else if (retries < SYSFS_OPEN_RETRIES) + info("warning: usbip_status ready after %d retries", + SYSFS_OPEN_RETRIES - retries); + + attr = sysfs_open_attribute(attrpath); + if (!attr) { + err("open %s", attrpath); + return -1; + } + + ret = sysfs_read_attribute(attr); + if (ret) { + err("read %s", attrpath); + sysfs_close_attribute(attr); + return -1; + } + + value = atoi(attr->value); + + sysfs_close_attribute(attr); + + return value; +} + + +static void usbip_exported_device_delete(void *dev) +{ + struct usbip_exported_device *edev = + (struct usbip_exported_device *) dev; + + sysfs_close_device(edev->sudev); + free(dev); +} + + +static struct usbip_exported_device *usbip_exported_device_new(char *sdevpath) +{ + struct usbip_exported_device *edev = NULL; + + edev = (struct usbip_exported_device *) calloc(1, sizeof(*edev)); + if (!edev) { + err("alloc device"); + return NULL; + } + + edev->sudev = sysfs_open_device_path(sdevpath); + if (!edev->sudev) { + err("open %s", sdevpath); + goto err; + } + + read_usb_device(edev->sudev, &edev->udev); + + edev->status = read_attr_usbip_status(&edev->udev); + if (edev->status < 0) + goto err; + + /* reallocate buffer to include usb interface data */ + size_t size = sizeof(*edev) + edev->udev.bNumInterfaces * sizeof(struct usb_interface); + edev = (struct usbip_exported_device *) realloc(edev, size); + if (!edev) { + err("alloc device"); + goto err; + } + + for (int i=0; i < edev->udev.bNumInterfaces; i++) + read_usb_interface(&edev->udev, i, &edev->uinf[i]); + + return edev; + +err: + if (edev && edev->sudev) + sysfs_close_device(edev->sudev); + if (edev) + free(edev); + return NULL; +} + + +static int check_new(struct dlist *dlist, struct sysfs_device *target) +{ + struct sysfs_device *dev; + + dlist_for_each_data(dlist, dev, struct sysfs_device) { + if (!strncmp(dev->bus_id, target->bus_id, SYSFS_BUS_ID_SIZE)) + /* found. not new */ + return 0; + } + + return 1; +} + +static void delete_nothing(void *dev __attribute__((unused))) +{ + /* do not delete anything. but, its container will be deleted. */ +} + +static int refresh_exported_devices(void) +{ + struct sysfs_device *suinf; /* sysfs_device of usb_interface */ + struct dlist *suinf_list; + + struct sysfs_device *sudev; /* sysfs_device of usb_device */ + struct dlist *sudev_list; + + + sudev_list = dlist_new_with_delete(sizeof(struct sysfs_device), delete_nothing); + + suinf_list = sysfs_get_driver_devices(stub_driver->sysfs_driver); + if (!suinf_list) { + printf("Bind usbip-host.ko to a usb device to be exportable!\n"); + goto bye; + } + + /* collect unique USB devices (not interfaces) */ + dlist_for_each_data(suinf_list, suinf, struct sysfs_device) { + + /* get usb device of this usb interface */ + sudev = sysfs_get_device_parent(suinf); + if (!sudev) { + err("get parent dev of %s", suinf->name); + continue; + } + + if (check_new(sudev_list, sudev)) { + dlist_unshift(sudev_list, sudev); + } + } + + dlist_for_each_data(sudev_list, sudev, struct sysfs_device) { + struct usbip_exported_device *edev; + + edev = usbip_exported_device_new(sudev->path); + if (!edev) { + err("usbip_exported_device new"); + continue; + } + + dlist_unshift(stub_driver->edev_list, (void *) edev); + stub_driver->ndevs++; + } + + + dlist_destroy(sudev_list); + +bye: + + return 0; +} + +int usbip_stub_refresh_device_list(void) +{ + int ret; + + if (stub_driver->edev_list) + dlist_destroy(stub_driver->edev_list); + + stub_driver->ndevs = 0; + + stub_driver->edev_list = dlist_new_with_delete(sizeof(struct usbip_exported_device), + usbip_exported_device_delete); + if (!stub_driver->edev_list) { + err("alloc dlist"); + return -1; + } + + ret = refresh_exported_devices(); + if (ret < 0) + return ret; + + return 0; +} + +int usbip_stub_driver_open(void) +{ + int ret; + + + stub_driver = (struct usbip_stub_driver *) calloc(1, sizeof(*stub_driver)); + if (!stub_driver) { + err("alloc stub_driver"); + return -1; + } + + stub_driver->ndevs = 0; + + stub_driver->edev_list = dlist_new_with_delete(sizeof(struct usbip_exported_device), + usbip_exported_device_delete); + if (!stub_driver->edev_list) { + err("alloc dlist"); + goto err; + } + + stub_driver->sysfs_driver = open_sysfs_stub_driver(); + if (!stub_driver->sysfs_driver) + goto err; + + ret = refresh_exported_devices(); + if (ret < 0) + goto err; + + return 0; + + +err: + if (stub_driver->sysfs_driver) + sysfs_close_driver(stub_driver->sysfs_driver); + if (stub_driver->edev_list) + dlist_destroy(stub_driver->edev_list); + free(stub_driver); + + stub_driver = NULL; + return -1; +} + + +void usbip_stub_driver_close(void) +{ + if (!stub_driver) + return; + + if (stub_driver->edev_list) + dlist_destroy(stub_driver->edev_list); + if (stub_driver->sysfs_driver) + sysfs_close_driver(stub_driver->sysfs_driver); + free(stub_driver); + + stub_driver = NULL; +} + +int usbip_stub_export_device(struct usbip_exported_device *edev, int sockfd) +{ + char attrpath[SYSFS_PATH_MAX]; + struct sysfs_attribute *attr; + char sockfd_buff[30]; + int ret; + + + if (edev->status != SDEV_ST_AVAILABLE) { + info("device not available, %s", edev->udev.busid); + switch( edev->status ) { + case SDEV_ST_ERROR: + info(" status SDEV_ST_ERROR"); + break; + case SDEV_ST_USED: + info(" status SDEV_ST_USED"); + break; + default: + info(" status unknown: 0x%x", edev->status); + } + return -1; + } + + /* only the first interface is true */ + snprintf(attrpath, sizeof(attrpath), "%s/%s:%d.%d/%s", + edev->udev.path, + edev->udev.busid, + edev->udev.bConfigurationValue, 0, + "usbip_sockfd"); + + attr = sysfs_open_attribute(attrpath); + if (!attr) { + err("open %s", attrpath); + return -1; + } + + snprintf(sockfd_buff, sizeof(sockfd_buff), "%d\n", sockfd); + + dbg("write: %s", sockfd_buff); + + ret = sysfs_write_attribute(attr, sockfd_buff, strlen(sockfd_buff)); + if (ret < 0) { + err("write sockfd %s to %s", sockfd_buff, attrpath); + goto err_write_sockfd; + } + + info("connect %s", edev->udev.busid); + +err_write_sockfd: + sysfs_close_attribute(attr); + + return ret; +} + +struct usbip_exported_device *usbip_stub_get_device(int num) +{ + struct usbip_exported_device *edev; + struct dlist *dlist = stub_driver->edev_list; + int count = 0; + + dlist_for_each_data(dlist, edev, struct usbip_exported_device) { + if (num == count) + return edev; + else + count++ ; + } + + return NULL; +} diff --git a/modules/hp2101nw/usbip/userspace/libsrc/stub_driver.h b/modules/hp2101nw/usbip/userspace/libsrc/stub_driver.h new file mode 100644 index 0000000..3107d18 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/libsrc/stub_driver.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2005-2007 Takahiro Hirofuchi + */ + +#ifndef _USBIP_STUB_DRIVER_H +#define _USBIP_STUB_DRIVER_H + +#include "usbip.h" + + +struct usbip_stub_driver { + int ndevs; + struct sysfs_driver *sysfs_driver; + + struct dlist *edev_list; /* list of exported device */ +}; + +struct usbip_exported_device { + struct sysfs_device *sudev; + + int32_t status; + struct usb_device udev; + struct usb_interface uinf[]; +}; + + +extern struct usbip_stub_driver *stub_driver; + +int usbip_stub_driver_open(void); +void usbip_stub_driver_close(void); + +int usbip_stub_refresh_device_list(void); +int usbip_stub_export_device(struct usbip_exported_device *edev, int sockfd); + +struct usbip_exported_device *usbip_stub_get_device(int num); +#endif diff --git a/modules/hp2101nw/usbip/userspace/libsrc/usbip.h b/modules/hp2101nw/usbip/userspace/libsrc/usbip.h new file mode 100644 index 0000000..7cb8e6f --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/libsrc/usbip.h @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2005-2007 Takahiro Hirofuchi + */ + +#ifndef _USBIP_H +#define _USBIP_H + +#ifdef HAVE_CONFIG_H +#include "../config.h" +#endif + +#include "usbip_common.h" +#include "stub_driver.h" +#include "vhci_driver.h" +#ifdef DMALLOC +#include <dmalloc.h> +#endif + +#endif diff --git a/modules/hp2101nw/usbip/userspace/libsrc/usbip_common.c b/modules/hp2101nw/usbip/userspace/libsrc/usbip_common.c new file mode 100644 index 0000000..a128a92 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/libsrc/usbip_common.c @@ -0,0 +1,282 @@ +/* + * Copyright (C) 2005-2007 Takahiro Hirofuchi + */ + +#include "usbip.h" +#include "names.h" + +int usbip_use_syslog = 0; +int usbip_use_stderr = 0; +int usbip_use_debug = 0; + +struct speed_string { + int num; + char *speed; + char *desc; +}; + +static const struct speed_string speed_strings[] = { + { USB_SPEED_UNKNOWN, "unknown", "Unknown Speed"}, + { USB_SPEED_LOW, "1.5", "Low Speed(1.5Mbps)" }, + { USB_SPEED_FULL, "12", "Full Speed(12Mbps)" }, + { USB_SPEED_HIGH, "480", "High Speed(480Mbps)" }, + { 0, NULL, NULL } +}; + +struct portst_string { + int num; + char *desc; +}; + +static struct portst_string portst_strings[] = { + { SDEV_ST_AVAILABLE, "Device Available" }, + { SDEV_ST_USED, "Device in Use" }, + { SDEV_ST_ERROR, "Device Error"}, + { VDEV_ST_NULL, "Port Available"}, + { VDEV_ST_NOTASSIGNED, "Port Initializing"}, + { VDEV_ST_USED, "Port in Use"}, + { VDEV_ST_ERROR, "Port Error"}, + { 0, NULL} +}; + +const char *usbip_status_string(int32_t status) +{ + for (int i=0; portst_strings[i].desc != NULL; i++) + if (portst_strings[i].num == status) + return portst_strings[i].desc; + + return "Unknown Status"; +} + +const char *usbip_speed_string(int num) +{ + for (int i=0; speed_strings[i].speed != NULL; i++) + if (speed_strings[i].num == num) + return speed_strings[i].desc; + + return "Unknown Speed"; +} + + +#define DBG_UDEV_INTEGER(name)\ + dbg("%-20s = %x", to_string(name), (int) udev->name) + +#define DBG_UINF_INTEGER(name)\ + dbg("%-20s = %x", to_string(name), (int) uinf->name) + +void dump_usb_interface(struct usb_interface *uinf) +{ + char buff[100]; + usbip_names_get_class(buff, sizeof(buff), + uinf->bInterfaceClass, + uinf->bInterfaceSubClass, + uinf->bInterfaceProtocol); + dbg("%-20s = %s", "Interface(C/SC/P)", buff); +} + +void dump_usb_device(struct usb_device *udev) +{ + char buff[100]; + + + dbg("%-20s = %s", "path", udev->path); + dbg("%-20s = %s", "busid", udev->busid); + + usbip_names_get_class(buff, sizeof(buff), + udev->bDeviceClass, + udev->bDeviceSubClass, + udev->bDeviceProtocol); + dbg("%-20s = %s", "Device(C/SC/P)", buff); + + DBG_UDEV_INTEGER(bcdDevice); + + usbip_names_get_product(buff, sizeof(buff), + udev->idVendor, + udev->idProduct); + dbg("%-20s = %s", "Vendor/Product", buff); + + DBG_UDEV_INTEGER(bNumConfigurations); + DBG_UDEV_INTEGER(bNumInterfaces); + + dbg("%-20s = %s", "speed", + usbip_speed_string(udev->speed)); + + DBG_UDEV_INTEGER(busnum); + DBG_UDEV_INTEGER(devnum); +} + + +int read_attr_value(struct sysfs_device *dev, const char *name, const char *format) +{ + char attrpath[SYSFS_PATH_MAX]; + struct sysfs_attribute *attr; + int num = 0; + int ret; + + snprintf(attrpath, sizeof(attrpath), "%s/%s", dev->path, name); + + attr = sysfs_open_attribute(attrpath); + if (!attr) { + err("open attr %s", attrpath); + return 0; + } + + ret = sysfs_read_attribute(attr); + if (ret < 0) { + err("read attr"); + goto err; + } + + ret = sscanf(attr->value, format, &num); + if (ret < 1) { + err("sscanf"); + goto err; + } + +err: + sysfs_close_attribute(attr); + + return num; +} + + +int read_attr_speed(struct sysfs_device *dev) +{ + char attrpath[SYSFS_PATH_MAX]; + struct sysfs_attribute *attr; + char speed[100]; + int ret; + + snprintf(attrpath, sizeof(attrpath), "%s/%s", dev->path, "speed"); + + attr = sysfs_open_attribute(attrpath); + if (!attr) { + err("open attr"); + return 0; + } + + ret = sysfs_read_attribute(attr); + if (ret < 0) { + err("read attr"); + goto err; + } + + ret = sscanf(attr->value, "%s\n", speed); + if (ret < 1) { + err("sscanf"); + goto err; + } +err: + sysfs_close_attribute(attr); + + for (int i=0; speed_strings[i].speed != NULL; i++) { + if (!strcmp(speed, speed_strings[i].speed)) + return speed_strings[i].num; + } + + return USB_SPEED_UNKNOWN; +} + +#define READ_ATTR(object, type, dev, name, format)\ + do { (object)->name = (type) read_attr_value(dev, to_string(name), format); } while (0) + + +int read_usb_device(struct sysfs_device *sdev, struct usb_device *udev) +{ + uint32_t busnum, devnum; + + READ_ATTR(udev, uint8_t, sdev, bDeviceClass, "%02x\n"); + READ_ATTR(udev, uint8_t, sdev, bDeviceSubClass, "%02x\n"); + READ_ATTR(udev, uint8_t, sdev, bDeviceProtocol, "%02x\n"); + + READ_ATTR(udev, uint16_t, sdev, idVendor, "%04x\n"); + READ_ATTR(udev, uint16_t, sdev, idProduct, "%04x\n"); + READ_ATTR(udev, uint16_t, sdev, bcdDevice, "%04x\n"); + + READ_ATTR(udev, uint8_t, sdev, bConfigurationValue, "%02x\n"); + READ_ATTR(udev, uint8_t, sdev, bNumConfigurations, "%02x\n"); + READ_ATTR(udev, uint8_t, sdev, bNumInterfaces, "%02x\n"); + + READ_ATTR(udev, uint8_t, sdev, devnum, "%d\n"); + udev->speed = read_attr_speed(sdev); + + strncpy(udev->path, sdev->path, SYSFS_PATH_MAX); + strncpy(udev->busid, sdev->name, SYSFS_BUS_ID_SIZE); + + sscanf(sdev->name, "%u-%u", &busnum, &devnum); + udev->busnum = busnum; + + return 0; +} + +int read_usb_interface(struct usb_device *udev, int i, struct usb_interface *uinf) +{ + char busid[SYSFS_BUS_ID_SIZE]; + struct sysfs_device *sif; + + sprintf(busid, "%s:%d.%d", udev->busid, udev->bConfigurationValue, i); + + sif = sysfs_open_device("usb", busid); + if (!sif) { + err("open sif of %s", busid); + return -1; + } + + READ_ATTR(uinf, uint8_t, sif, bInterfaceClass, "%02x\n"); + READ_ATTR(uinf, uint8_t, sif, bInterfaceSubClass, "%02x\n"); + READ_ATTR(uinf, uint8_t, sif, bInterfaceProtocol, "%02x\n"); + + sysfs_close_device(sif); + + return 0; +} + +int usbip_names_init(char *f) +{ + return names_init(f); +} + +void usbip_names_free() +{ + names_free(); +} + +void usbip_names_get_product(char *buff, size_t size, uint16_t vendor, uint16_t product) +{ + const char *prod, *vend; + + prod = names_product(vendor, product); + if (!prod) + prod = "unknown product"; + + + vend = names_vendor(vendor); + if (!vend) + vend = "unknown vendor"; + + snprintf(buff, size, "%s : %s (%04x:%04x)", vend, prod, vendor, product); +} + +void usbip_names_get_class(char *buff, size_t size, uint8_t class, uint8_t subclass, uint8_t protocol) +{ + const char *c, *s, *p; + + if (class == 0 && subclass == 0 && protocol == 0) { + snprintf(buff, size, "(Defined at Interface level) (%02x/%02x/%02x)", class, subclass, protocol); + return; + } + + p = names_protocol(class, subclass, protocol); + if (!p) + p = "unknown protocol"; + + s = names_subclass(class, subclass); + if (!s) + s = "unknown subclass"; + + c = names_class(class); + if (!c) + c = "unknown class"; + + snprintf(buff, size, "%s / %s / %s (%02x/%02x/%02x)", c, s, p, class, subclass, protocol); +} diff --git a/modules/hp2101nw/usbip/userspace/libsrc/usbip_common.h b/modules/hp2101nw/usbip/userspace/libsrc/usbip_common.h new file mode 100644 index 0000000..c254b54 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/libsrc/usbip_common.h @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2005-2007 Takahiro Hirofuchi + */ + +#ifndef _USBIP_COMMON_H +#define _USBIP_COMMON_H + +#include <unistd.h> +#include <stdint.h> +#include <syslog.h> +#include <errno.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <strings.h> + +#include <sysfs/libsysfs.h> +#include <netdb.h> +#include <sys/socket.h> + +#ifndef USBIDS_FILE +#define USBIDS_FILE "/usr/share/hwdata/usb.ids" +#endif + +#ifndef VHCI_STATE_PATH +#define VHCI_STATE_PATH "/var/run/vhci_hcd" +#endif + +//#include <linux/usb_ch9.h> +enum usb_device_speed { + USB_SPEED_UNKNOWN = 0, /* enumerating */ + USB_SPEED_LOW, USB_SPEED_FULL, /* usb 1.1 */ + USB_SPEED_HIGH, /* usb 2.0 */ + USB_SPEED_VARIABLE /* wireless (usb 2.5) */ +}; + +/* FIXME: how to sync with drivers/usbip_common.h ? */ +enum usbip_device_status{ + /* sdev is available. */ + SDEV_ST_AVAILABLE = 0x01, + /* sdev is now used. */ + SDEV_ST_USED, + /* sdev is unusable because of a fatal error. */ + SDEV_ST_ERROR, + + /* vdev does not connect a remote device. */ + VDEV_ST_NULL, + /* vdev is used, but the USB address is not assigned yet */ + VDEV_ST_NOTASSIGNED, + VDEV_ST_USED, + VDEV_ST_ERROR +}; + +extern int usbip_use_syslog; +extern int usbip_use_stderr; +extern int usbip_use_debug ; + +#define err(fmt, args...) do { \ + if (usbip_use_syslog) { \ + syslog(LOG_ERR, "usbip err: %13s:%4d (%-12s) " fmt "\n", \ + __FILE__, __LINE__, __FUNCTION__, ##args); \ + } \ + if (usbip_use_stderr) { \ + fprintf(stderr, "usbip err: %13s:%4d (%-12s) " fmt "\n", \ + __FILE__, __LINE__, __FUNCTION__, ##args); \ + } \ +} while (0) + +#define notice(fmt, args...) do { \ + if (usbip_use_syslog) { \ + syslog(LOG_DEBUG, "usbip: " fmt, ##args); \ + } \ + if (usbip_use_stderr) { \ + fprintf(stderr, "usbip: " fmt "\n", ##args); \ + } \ +} while (0) + +#define info(fmt, args...) do { \ + if (usbip_use_syslog) { \ + syslog(LOG_DEBUG, fmt, ##args); \ + } \ + if (usbip_use_stderr) { \ + fprintf(stderr, fmt "\n", ##args); \ + } \ +} while (0) + +#define dbg(fmt, args...) do { \ + if (usbip_use_debug) { \ + if (usbip_use_syslog) { \ + syslog(LOG_DEBUG, "usbip dbg: %13s:%4d (%-12s) " fmt, \ + __FILE__, __LINE__, __FUNCTION__, ##args); \ + } \ + if (usbip_use_stderr) { \ + fprintf(stderr, "usbip dbg: %13s:%4d (%-12s) " fmt "\n", \ + __FILE__, __LINE__, __FUNCTION__, ##args); \ + } \ + } \ +} while (0) + + +#define BUG() do { err("sorry, it's a bug"); abort(); } while (0) + + +struct usb_interface { + uint8_t bInterfaceClass; + uint8_t bInterfaceSubClass; + uint8_t bInterfaceProtocol; + uint8_t padding; /* alignment */ +} __attribute__((packed)); + + + +struct usb_device { + char path[SYSFS_PATH_MAX]; + char busid[SYSFS_BUS_ID_SIZE]; + + uint32_t busnum; + uint32_t devnum; + uint32_t speed; + + uint16_t idVendor; + uint16_t idProduct; + uint16_t bcdDevice; + + uint8_t bDeviceClass; + uint8_t bDeviceSubClass; + uint8_t bDeviceProtocol; + uint8_t bConfigurationValue; + uint8_t bNumConfigurations; + uint8_t bNumInterfaces; +} __attribute__((packed)); + +#define to_string(s) #s + +void dump_usb_interface(struct usb_interface *); +void dump_usb_device(struct usb_device *); +int read_usb_device(struct sysfs_device *sdev, struct usb_device *udev); +int read_attr_value(struct sysfs_device *dev, const char *name, const char *format); +int read_usb_interface(struct usb_device *udev, int i, struct usb_interface *uinf); + +const char *usbip_speed_string(int num); +const char *usbip_status_string(int32_t status); + +int usbip_names_init(char *); +void usbip_names_free(void); +void usbip_names_get_product(char *buff, size_t size, uint16_t vendor, uint16_t product); +void usbip_names_get_class(char *buff, size_t size, uint8_t class, uint8_t subclass, uint8_t protocol); + +#endif diff --git a/modules/hp2101nw/usbip/userspace/libsrc/vhci_driver.c b/modules/hp2101nw/usbip/userspace/libsrc/vhci_driver.c new file mode 100644 index 0000000..db43f8d --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/libsrc/vhci_driver.c @@ -0,0 +1,506 @@ +/* + * Copyright (C) 2005-2007 Takahiro Hirofuchi + */ + + +#include "usbip.h" + + +static const char vhci_driver_name[] = "vhci_hcd"; + +struct usbip_vhci_driver *vhci_driver; + +static struct usbip_imported_device *imported_device_init(struct usbip_imported_device *idev, char *busid) +{ + struct sysfs_device *sudev; + + sudev = sysfs_open_device("usb", busid); + if (!sudev) { + err("sysfs_open_device %s", busid); + goto err; + } + read_usb_device(sudev, &idev->udev); + sysfs_close_device(sudev); + + /* add class devices of this imported device */ + struct class_device *cdev; + dlist_for_each_data(vhci_driver->cdev_list, cdev, struct class_device) { + if (!strncmp(cdev->devpath, idev->udev.path, strlen(idev->udev.path))) { + struct class_device *new_cdev; + + /* alloc and copy because dlist is linked from only one list */ + new_cdev = calloc(1, sizeof(*new_cdev)); + if (!new_cdev) + goto err; + + memcpy(new_cdev, cdev, sizeof(*new_cdev)); + dlist_unshift(idev->cdev_list, (void*) new_cdev); + } + } + + return idev; + +err: + return NULL; +} + + + +static int parse_status(char *value) +{ + int ret = 0; + char *c; + + + for (int i = 0; i < vhci_driver->nports; i++) + bzero(&vhci_driver->idev[i], sizeof(struct usbip_imported_device)); + + + /* skip a header line */ + c = strchr(value, '\n') + 1; + + while (*c != '\0') { + int port, status, speed, devid; + unsigned long socket; + char lbusid[SYSFS_BUS_ID_SIZE]; + + ret = sscanf(c, "%d %d %d %x %lx %s\n", + &port, &status, &speed, + &devid, &socket, lbusid); + + if (ret < 5) { + err("scanf %d", ret); + BUG(); + } + + dbg("port %d status %d speed %d devid %x", + port, status, speed, devid); + dbg("socket %lx lbusid %s", socket, lbusid); + + + /* if a device is connected, look at it */ + { + struct usbip_imported_device *idev = &vhci_driver->idev[port]; + + idev->port = port; + idev->status = status; + + idev->devid = devid; + + idev->busnum = (devid >> 16); + idev->devnum = (devid & 0x0000ffff); + + idev->cdev_list = dlist_new(sizeof(struct class_device)); + if (!idev->cdev_list) { + err("init new device"); + return -1; + } + + if (idev->status != VDEV_ST_NULL && idev->status != VDEV_ST_NOTASSIGNED) { + idev = imported_device_init(idev, lbusid); + if (!idev) { + err("init new device"); + return -1; + } + } + } + + + /* go to the next line */ + c = strchr(c, '\n') + 1; + } + + dbg("exit"); + + return 0; +} + + +static int check_usbip_device(struct sysfs_class_device *cdev) +{ + char clspath[SYSFS_PATH_MAX]; /* /sys/class/video4linux/video0/device */ + char devpath[SYSFS_PATH_MAX]; /* /sys/devices/platform/vhci_hcd/usb6/6-1:1.1 */ + + int ret; + + snprintf(clspath, sizeof(clspath), "%s/device", cdev->path); + + ret = sysfs_get_link(clspath, devpath, SYSFS_PATH_MAX); + if (!ret) { + if (!strncmp(devpath, vhci_driver->hc_device->path, + strlen(vhci_driver->hc_device->path))) { + /* found usbip device */ + struct class_device *cdev; + + cdev = calloc(1, sizeof(*cdev)); + if (!cdev) { + err("calloc cdev"); + return -1; + } + dlist_unshift(vhci_driver->cdev_list, (void*) cdev); + strncpy(cdev->clspath, clspath, sizeof(cdev->clspath)); + strncpy(cdev->devpath, devpath, sizeof(cdev->clspath)); + dbg(" found %s %s", clspath, devpath); + } + } + + return 0; +} + + +static int search_class_for_usbip_device(char *cname) +{ + struct sysfs_class *class; + struct dlist *cdev_list; + struct sysfs_class_device *cdev; + int ret = 0; + + class = sysfs_open_class(cname); + if (!class) { + err("open class"); + return -1; + } + + dbg("class %s", class->name); + + cdev_list = sysfs_get_class_devices(class); + if (!cdev_list) + /* nothing */ + goto out; + + dlist_for_each_data(cdev_list, cdev, struct sysfs_class_device) { + dbg(" cdev %s", cdev->name); + ret = check_usbip_device(cdev); + if (ret < 0) + goto out; + } + +out: + sysfs_close_class(class); + + return ret; +} + + +static int refresh_class_device_list(void) +{ + int ret; + struct dlist *cname_list; + char *cname; + + /* search under /sys/class */ + cname_list = sysfs_open_directory_list("/sys/class"); + if (!cname_list) { + err("open class directory"); + return -1; + } + + dlist_for_each_data(cname_list, cname, char) { + ret = search_class_for_usbip_device(cname); + if (ret < 0) { + sysfs_close_list(cname_list); + return -1; + } + } + + sysfs_close_list(cname_list); + + /* seach under /sys/block */ + ret = search_class_for_usbip_device(SYSFS_BLOCK_NAME); + if (ret < 0) + return -1; + + return 0; +} + + +static int refresh_imported_device_list(void) +{ + struct sysfs_attribute *attr_status; + + + attr_status = sysfs_get_device_attr(vhci_driver->hc_device, "status"); + if (!attr_status) { + err("get attr %s of %s", "status", vhci_driver->hc_device->name); + return -1; + } + + dbg("name %s, path %s, len %d, method %d\n", attr_status->name, + attr_status->path, attr_status->len, attr_status->method); + + dbg("%s", attr_status->value); + + return parse_status(attr_status->value); +} + +static int get_nports(void) +{ + int nports = 0; + struct sysfs_attribute *attr_status; + + attr_status = sysfs_get_device_attr(vhci_driver->hc_device, "status"); + if (!attr_status) { + err("get attr %s of %s", "status", vhci_driver->hc_device->name); + return -1; + } + + dbg("name %s, path %s, len %d, method %d\n", attr_status->name, + attr_status->path, attr_status->len, attr_status->method); + + dbg("%s", attr_status->value); + + { + char *c; + + /* skip a header line */ + c = strchr(attr_status->value, '\n') + 1; + + while (*c != '\0') { + /* go to the next line */ + c = strchr(c, '\n') + 1; + nports += 1; + } + } + + return nports; +} + +static int get_hc_busid(char *sysfs_mntpath, char *hc_busid) +{ + struct sysfs_driver *sdriver; + char sdriver_path[SYSFS_PATH_MAX]; + + struct sysfs_device *hc_dev; + struct dlist *hc_devs; + + int found = 0; + + snprintf(sdriver_path, SYSFS_PATH_MAX, "%s/%s/platform/%s/%s", + sysfs_mntpath, SYSFS_BUS_NAME, SYSFS_DRIVERS_NAME, + vhci_driver_name); + + sdriver = sysfs_open_driver_path(sdriver_path); + if (!sdriver) { + info("%s is not found", sdriver_path); + info("load usbip-core.ko and vhci-hcd.ko !"); + return -1; + } + + hc_devs = sysfs_get_driver_devices(sdriver); + if (!hc_devs) { + err("get hc list"); + goto err; + } + + /* assume only one vhci_hcd */ + dlist_for_each_data(hc_devs, hc_dev, struct sysfs_device) { + strncpy(hc_busid, hc_dev->bus_id, SYSFS_BUS_ID_SIZE); + found = 1; + } + +err: + sysfs_close_driver(sdriver); + + if (found) + return 0; + + err("not found usbip hc"); + return -1; +} + + +/* ---------------------------------------------------------------------- */ + +int usbip_vhci_driver_open(void) +{ + int ret; + char hc_busid[SYSFS_BUS_ID_SIZE]; + + vhci_driver = (struct usbip_vhci_driver *) calloc(1, sizeof(*vhci_driver)); + if (!vhci_driver) { + err("alloc vhci_driver"); + return -1; + } + + ret = sysfs_get_mnt_path(vhci_driver->sysfs_mntpath, SYSFS_PATH_MAX); + if (ret < 0) { + err("sysfs must be mounted"); + goto err; + } + + ret = get_hc_busid(vhci_driver->sysfs_mntpath, hc_busid); + if (ret < 0) + goto err; + + /* will be freed in usbip_driver_close() */ + vhci_driver->hc_device = sysfs_open_device("platform", hc_busid); + if (!vhci_driver->hc_device) { + err("get sysfs vhci_driver"); + goto err; + } + + vhci_driver->nports = get_nports(); + + info("%d ports available\n", vhci_driver->nports); + + vhci_driver->cdev_list = dlist_new(sizeof(struct class_device)); + if (!vhci_driver->cdev_list) + goto err; + + if (refresh_class_device_list()) + goto err; + + if (refresh_imported_device_list()) + goto err; + + + return 0; + + +err: + if (vhci_driver->cdev_list) + dlist_destroy(vhci_driver->cdev_list); + if (vhci_driver->hc_device) + sysfs_close_device(vhci_driver->hc_device); + if (vhci_driver) + free(vhci_driver); + + vhci_driver = NULL; + return -1; +} + + +void usbip_vhci_driver_close() +{ + if (!vhci_driver) + return; + + if (vhci_driver->cdev_list) + dlist_destroy(vhci_driver->cdev_list); + + for (int i = 0; i < vhci_driver->nports; i++) { + if (vhci_driver->idev[i].cdev_list) + dlist_destroy(vhci_driver->idev[i].cdev_list); + } + + if (vhci_driver->hc_device) + sysfs_close_device(vhci_driver->hc_device); + free(vhci_driver); + + vhci_driver = NULL; +} + + +int usbip_vhci_refresh_device_list(void) +{ + if (vhci_driver->cdev_list) + dlist_destroy(vhci_driver->cdev_list); + + + for (int i = 0; i < vhci_driver->nports; i++) { + if (vhci_driver->idev[i].cdev_list) + dlist_destroy(vhci_driver->idev[i].cdev_list); + } + + vhci_driver->cdev_list = dlist_new(sizeof(struct class_device)); + if (!vhci_driver->cdev_list) + goto err; + + if (refresh_class_device_list()) + goto err; + + if (refresh_imported_device_list()) + goto err; + + return 0; +err: + if (vhci_driver->cdev_list) + dlist_destroy(vhci_driver->cdev_list); + + for (int i = 0; i < vhci_driver->nports; i++) { + if (vhci_driver->idev[i].cdev_list) + dlist_destroy(vhci_driver->idev[i].cdev_list); + } + + err("refresh device list"); + return -1; +} + + +int usbip_vhci_get_free_port(void) +{ + for (int i = 0; i < vhci_driver->nports; i++) { + if (vhci_driver->idev[i].status == VDEV_ST_NULL) + return i; + } + + return -1; +} + +int usbip_vhci_attach_device2(uint8_t port, int sockfd, uint32_t devid, + uint32_t speed) { + struct sysfs_attribute *attr_attach; + char buff[200]; /* what size should be ? */ + int ret; + + attr_attach = sysfs_get_device_attr(vhci_driver->hc_device, "attach"); + if (!attr_attach) { + err("get attach"); + return -1; + } + + snprintf(buff, sizeof(buff), "%u %u %u %u", + port, sockfd, devid, speed); + dbg("writing: %s", buff); + + ret = sysfs_write_attribute(attr_attach, buff, strlen(buff)); + if (ret < 0) { + err("write to attach failed"); + return -1; + } + + info("port %d attached", port); + + return 0; +} + +static unsigned long get_devid(uint8_t busnum, uint8_t devnum) +{ + return (busnum << 16) | devnum; +} + +/* will be removed */ +int usbip_vhci_attach_device(uint8_t port, int sockfd, uint8_t busnum, + uint8_t devnum, uint32_t speed) +{ + int devid = get_devid(busnum, devnum); + + return usbip_vhci_attach_device2(port, sockfd, devid, speed); +} + +int usbip_vhci_detach_device(uint8_t port) +{ + struct sysfs_attribute *attr_detach; + char buff[200]; /* what size should be ? */ + int ret; + + attr_detach = sysfs_get_device_attr(vhci_driver->hc_device, "detach"); + if (!attr_detach) { + err("get detach"); + return -1; + } + + snprintf(buff, sizeof(buff), "%u", port); + dbg("writing to detach"); + dbg("writing: %s", buff); + + ret = sysfs_write_attribute(attr_detach, buff, strlen(buff)); + if (ret < 0) { + err("write to detach failed"); + return -1; + } + + info("port %d detached", port); + + return 0; +} diff --git a/modules/hp2101nw/usbip/userspace/libsrc/vhci_driver.h b/modules/hp2101nw/usbip/userspace/libsrc/vhci_driver.h new file mode 100644 index 0000000..cad8ad7 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/libsrc/vhci_driver.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2005-2007 Takahiro Hirofuchi + */ + +#ifndef _VHCI_DRIVER_H +#define _VHCI_DRIVER_H + +#include "usbip.h" + + + +#define MAXNPORT 128 + +struct class_device { + char clspath[SYSFS_PATH_MAX]; + char devpath[SYSFS_PATH_MAX]; +}; + +struct usbip_imported_device { + uint8_t port; + uint32_t status; + + uint32_t devid; + + uint8_t busnum; + uint8_t devnum; + + + struct dlist *cdev_list; /* list of class device */ + struct usb_device udev; +}; + +struct usbip_vhci_driver { + char sysfs_mntpath[SYSFS_PATH_MAX]; + struct sysfs_device *hc_device; /* /sys/devices/platform/vhci_hcd */ + + struct dlist *cdev_list; /* list of class device */ + + int nports; + struct usbip_imported_device idev[MAXNPORT]; +}; + + +extern struct usbip_vhci_driver *vhci_driver; + +int usbip_vhci_driver_open(void); +void usbip_vhci_driver_close(void); + +int usbip_vhci_refresh_device_list(void); + + +int usbip_vhci_get_free_port(void); +int usbip_vhci_attach_device2(uint8_t port, int sockfd, uint32_t devid, + uint32_t speed); + +/* will be removed */ +int usbip_vhci_attach_device(uint8_t port, int sockfd, uint8_t busnum, + uint8_t devnum, uint32_t speed); + +int usbip_vhci_detach_device(uint8_t port); +#endif diff --git a/modules/hp2101nw/usbip/userspace/src/Makefile.am b/modules/hp2101nw/usbip/userspace/src/Makefile.am new file mode 100644 index 0000000..05a7aa5 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/src/Makefile.am @@ -0,0 +1,10 @@ +AM_CPPFLAGS := -I$(top_srcdir)/libsrc -DUSBIDS_FILE='"@USBIDS_DIR@/usb.ids"' +AM_CFLAGS := @EXTRA_CFLAGS@ @PACKAGE_CFLAGS@ +LDADD := $(top_srcdir)/libsrc/libusbip.la @PACKAGE_LIBS@ + +sbin_PROGRAMS := usbip usbipd usbip_bind_driver + +usbip_SOURCES := usbip.c usbip_network.c usbip_network.h +usbipd_SOURCES := usbipd.c usbip_network.c usbip_network.h +usbip_bind_driver_SOURCES := bind-driver.c utils.c utils.h \ + usbip_network.h usbip_network.c diff --git a/modules/hp2101nw/usbip/userspace/src/bind-driver.c b/modules/hp2101nw/usbip/userspace/src/bind-driver.c new file mode 100644 index 0000000..201ffbb --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/src/bind-driver.c @@ -0,0 +1,643 @@ +/* + * + * Copyright (C) 2005-2007 Takahiro Hirofuchi + */ + +#include "utils.h" + +#define _GNU_SOURCE +#include <getopt.h> +#include <glib.h> + + + +static const struct option longopts[] = { + {"usbip", required_argument, NULL, 'u'}, + {"other", required_argument, NULL, 'o'}, + {"list", no_argument, NULL, 'l'}, + {"list2", no_argument, NULL, 'L'}, + {"help", no_argument, NULL, 'h'}, +#if 0 + {"allusbip", no_argument, NULL, 'a'}, + {"export-to", required_argument, NULL, 'e'}, + {"unexport", required_argument, NULL, 'x'}, + {"busid", required_argument, NULL, 'b'}, +#endif + + {NULL, 0, NULL, 0} +}; + +static const char match_busid_path[] = "/sys/bus/usb/drivers/usbip/match_busid"; + + +static void show_help(void) +{ + printf("Usage: usbip_bind_driver [OPTION]\n"); + printf("Change driver binding for USB/IP.\n"); + printf(" --usbip busid make a device exportable\n"); + printf(" --other busid use a device by a local driver\n"); + printf(" --list print usb devices and their drivers\n"); + printf(" --list2 print usb devices and their drivers in parseable mode\n"); +#if 0 + printf(" --allusbip make all devices exportable\n"); + printf(" --export-to host export the device to 'host'\n"); + printf(" --unexport host unexport a device previously exported to 'host'\n"); + printf(" --busid busid the busid used for --export-to\n"); +#endif +} + +static int modify_match_busid(char *busid, int add) +{ + int fd; + int ret; + char buff[BUS_ID_SIZE + 4]; + + /* BUS_IS_SIZE includes NULL termination? */ + if (strnlen(busid, BUS_ID_SIZE) > BUS_ID_SIZE - 1) { + g_warning("too long busid"); + return -1; + } + + fd = open(match_busid_path, O_WRONLY); + if (fd < 0) + return -1; + + if (add) + snprintf(buff, BUS_ID_SIZE + 4, "add %s", busid); + else + snprintf(buff, BUS_ID_SIZE + 4, "del %s", busid); + + g_debug("write \"%s\" to %s", buff, match_busid_path); + + ret = write(fd, buff, sizeof(buff)); + if (ret < 0) { + close(fd); + return -1; + } + + close(fd); + + return 0; +} + +static const char unbind_path_format[] = "/sys/bus/usb/devices/%s/driver/unbind"; + +/* buggy driver may cause dead lock */ +static int unbind_interface_busid(char *busid) +{ + char unbind_path[PATH_MAX]; + int fd; + int ret; + + snprintf(unbind_path, sizeof(unbind_path), unbind_path_format, busid); + + fd = open(unbind_path, O_WRONLY); + if (fd < 0) { + g_warning("opening unbind_path failed: %d", fd); + return -1; + } + + ret = write(fd, busid, strnlen(busid, BUS_ID_SIZE)); + if (ret < 0) { + g_warning("write to unbind_path failed: %d", ret); + close(fd); + return -1; + } + + close(fd); + + return 0; +} + +static int unbind_interface(char *busid, int configvalue, int interface) +{ + char inf_busid[BUS_ID_SIZE]; + g_debug("unbinding interface"); + + snprintf(inf_busid, BUS_ID_SIZE, "%s:%d.%d", busid, configvalue, interface); + + return unbind_interface_busid(inf_busid); +} + + +static const char bind_path_format[] = "/sys/bus/usb/drivers/%s/bind"; + +static int bind_interface_busid(char *busid, char *driver) +{ + char bind_path[PATH_MAX]; + int fd; + int ret; + + snprintf(bind_path, sizeof(bind_path), bind_path_format, driver); + + fd = open(bind_path, O_WRONLY); + if (fd < 0) + return -1; + + ret = write(fd, busid, strnlen(busid, BUS_ID_SIZE)); + if (ret < 0) { + close(fd); + return -1; + } + + close(fd); + + return 0; +} + +static int bind_interface(char *busid, int configvalue, int interface, char *driver) +{ + char inf_busid[BUS_ID_SIZE]; + + snprintf(inf_busid, BUS_ID_SIZE, "%s:%d.%d", busid, configvalue, interface); + + return bind_interface_busid(inf_busid, driver); +} + +static int unbind(char *busid) +{ + int configvalue = 0; + int ninterface = 0; + int devclass = 0; + int i; + int failed = 0; + + configvalue = read_bConfigurationValue(busid); + ninterface = read_bNumInterfaces(busid); + devclass = read_bDeviceClass(busid); + + if (configvalue < 0 || ninterface < 0 || devclass < 0) { + g_warning("read config and ninf value, removed?"); + return -1; + } + + if (devclass == 0x09) { + g_message("skip unbinding of hub"); + return -1; + } + + for (i = 0; i < ninterface; i++) { + char driver[PATH_MAX]; + int ret; + + bzero(&driver, sizeof(driver)); + + getdriver(busid, configvalue, i, driver, PATH_MAX-1); + + g_debug(" %s:%d.%d -> %s ", busid, configvalue, i, driver); + + if (!strncmp("none", driver, PATH_MAX)) + continue; /* unbound interface */ + +#if 0 + if (!strncmp("usbip", driver, PATH_MAX)) + continue; /* already bound to usbip */ +#endif + + /* unbinding */ + ret = unbind_interface(busid, configvalue, i); + if (ret < 0) { + g_warning("unbind driver at %s:%d.%d failed", + busid, configvalue, i); + failed = 1; + } + } + + if (failed) + return -1; + else + return 0; +} + +/* call at unbound state */ +static int bind_to_usbip(char *busid) +{ + int configvalue = 0; + int ninterface = 0; + int i; + int failed = 0; + + configvalue = read_bConfigurationValue(busid); + ninterface = read_bNumInterfaces(busid); + + if (configvalue < 0 || ninterface < 0) { + g_warning("read config and ninf value, removed?"); + return -1; + } + + for (i = 0; i < ninterface; i++) { + int ret; + + ret = bind_interface(busid, configvalue, i, "usbip"); + if (ret < 0) { + g_warning("bind usbip at %s:%d.%d, failed", + busid, configvalue, i); + failed = 1; + /* need to contine binding at other interfaces */ + } + } + + if (failed) + return -1; + else + return 0; +} + + +static int use_device_by_usbip(char *busid) +{ + int ret; + + ret = unbind(busid); + if (ret < 0) { + g_warning("unbind drivers of %s, failed", busid); + return -1; + } + + ret = modify_match_busid(busid, 1); + if (ret < 0) { + g_warning("add %s to match_busid, failed", busid); + return -1; + } + + ret = bind_to_usbip(busid); + if (ret < 0) { + g_warning("bind usbip to %s, failed", busid); + modify_match_busid(busid, 0); + return -1; + } + + g_message("bind %s to usbip, complete!", busid); + + return 0; +} + + + +static int use_device_by_other(char *busid) +{ + int ret; + int config; + + /* read and write the same config value to kick probing */ + config = read_bConfigurationValue(busid); + if (config < 0) { + g_warning("read bConfigurationValue of %s, failed", busid); + return -1; + } + + ret = modify_match_busid(busid, 0); + if (ret < 0) { + g_warning("del %s to match_busid, failed", busid); + return -1; + } + + ret = write_bConfigurationValue(busid, config); + if (ret < 0) { + g_warning("read bConfigurationValue of %s, failed", busid); + return -1; + } + + g_message("bind %s to other drivers than usbip, complete!", busid); + + return 0; +} + + +#include <sys/types.h> +#include <regex.h> + +#include <errno.h> +#include <string.h> +#include <stdio.h> + + + +static int is_usb_device(char *busid) +{ + int ret; + + regex_t regex; + regmatch_t pmatch[1]; + + ret = regcomp(®ex, "^[0-9]+-[0-9]+(\\.[0-9]+)*$", REG_NOSUB|REG_EXTENDED); + if (ret < 0) + g_error("regcomp: %s\n", strerror(errno)); + + ret = regexec(®ex, busid, 0, pmatch, 0); + if (ret) + return 0; /* not matched */ + + return 1; +} + + +#include <dirent.h> +static int show_devices(void) +{ + DIR *dir; + + dir = opendir("/sys/bus/usb/devices/"); + if (!dir) + g_error("opendir: %s", strerror(errno)); + + printf("List USB devices\n"); + for (;;) { + struct dirent *dirent; + char *busid; + + dirent = readdir(dir); + if (!dirent) + break; + + busid = dirent->d_name; + + if (is_usb_device(busid)) { + char name[100] = {'\0'}; + char driver[100] = {'\0'}; + int conf, ninf = 0; + int i; + + conf = read_bConfigurationValue(busid); + ninf = read_bNumInterfaces(busid); + + getdevicename(busid, name, sizeof(name)); + + printf(" - busid %s (%s)\n", busid, name); + + for (i = 0; i < ninf; i++) { + getdriver(busid, conf, i, driver, sizeof(driver)); + printf(" %s:%d.%d -> %s\n", busid, conf, i, driver); + } + printf("\n"); + } + } + + closedir(dir); + + return 0; +} + +static int show_devices2(void) +{ + DIR *dir; + + dir = opendir("/sys/bus/usb/devices/"); + if (!dir) + g_error("opendir: %s", strerror(errno)); + + for (;;) { + struct dirent *dirent; + char *busid; + + dirent = readdir(dir); + if (!dirent) + break; + + busid = dirent->d_name; + + if (is_usb_device(busid)) { + char name[100] = {'\0'}; + char driver[100] = {'\0'}; + int conf, ninf = 0; + int i; + + conf = read_bConfigurationValue(busid); + ninf = read_bNumInterfaces(busid); + + getdevicename(busid, name, sizeof(name)); + + printf("busid=%s#usbid=%s#", busid, name); + + for (i = 0; i < ninf; i++) { + getdriver(busid, conf, i, driver, sizeof(driver)); + printf("%s:%d.%d=%s#", busid, conf, i, driver); + } + printf("\n"); + } + } + + closedir(dir); + + return 0; +} + + +#if 0 +static int export_to(char *host, char *busid) { + + int ret; + + if( host == NULL ) { + printf( "no host given\n\n"); + show_help(); + return -1; + } + if( busid == NULL ) { + /* XXX print device list and ask for busnumber, if none is + * given */ + printf( "no busid given, use --busid switch\n\n"); + show_help(); + return -1; + } + + + ret = use_device_by_usbip(busid); + if( ret != 0 ) { + printf( "could not bind driver to usbip\n"); + return -1; + } + + printf( "DEBUG: exporting device '%s' to '%s'\n", busid, host ); + ret = export_busid_to_host(host, busid); /* usbip_export.[ch] */ + if( ret != 0 ) { + printf( "could not export device to host\n" ); + printf( " host: %s, device: %s\n", host, busid ); + use_device_by_other(busid); + return -1; + } + + return 0; +} + +static int unexport_from(char *host, char *busid) { + + int ret; + + if (!host || !busid) + g_error("no host or no busid\n"); + + g_message("unexport_from: host: '%s', busid: '%s'", host, busid); + + ret = unexport_busid_from_host(host, busid); /* usbip_export.[ch] */ + if( ret != 0 ) { + err( "could not unexport device from host\n" ); + err( " host: %s, device: %s\n", host, busid ); + } + + ret = use_device_by_other(busid); + if (ret < 0) + g_error("could not unbind device from usbip\n"); + + return 0; +} + + +static int allusbip(void) +{ + DIR *dir; + + dir = opendir("/sys/bus/usb/devices/"); + if (!dir) + g_error("opendir: %s", strerror(errno)); + + for (;;) { + struct dirent *dirent; + char *busid; + + dirent = readdir(dir); + if (!dirent) + break; + + busid = dirent->d_name; + + if (!is_usb_device(busid)) + continue; + + { + char name[PATH_MAX]; + int conf, ninf = 0; + int i; + int be_local = 0; + + conf = read_bConfigurationValue(busid); + ninf = read_bNumInterfaces(busid); + + getdevicename(busid, name, sizeof(name)); + + for (i = 0; i < ninf; i++) { + char driver[PATH_MAX]; + + getdriver(busid, conf, i, driver, sizeof(driver)); +#if 0 + if (strncmp(driver, "usbhid", 6) == 0 || strncmp(driver, "usb-storage", 11) == 0) { + be_local = 1; + break; + } +#endif + } + + if (be_local == 0) + use_device_by_usbip(busid); + } + } + + closedir(dir); + + return 0; +} +#endif + +int main(int argc, char **argv) +{ + char *busid = NULL; + char *remote_host __attribute__((unused)) = NULL; + + enum { + cmd_unknown = 0, + cmd_use_by_usbip, + cmd_use_by_other, + cmd_list, + cmd_list2, + cmd_allusbip, + cmd_export_to, + cmd_unexport, + cmd_help, + } cmd = cmd_unknown; + + if (geteuid() != 0) + g_warning("running non-root?"); + + for (;;) { + int c; + int index = 0; + + c = getopt_long(argc, argv, "u:o:hlLae:x:b:", longopts, &index); + if (c == -1) + break; + + switch (c) { + case 'u': + cmd = cmd_use_by_usbip; + busid = optarg; + break; + case 'o' : + cmd = cmd_use_by_other; + busid = optarg; + break; + case 'l' : + cmd = cmd_list; + break; + case 'L' : + cmd = cmd_list2; + break; + case 'a' : + cmd = cmd_allusbip; + break; + case 'b': + busid = optarg; + break; + case 'e': + cmd = cmd_export_to; + remote_host = optarg; + break; + case 'x': + cmd = cmd_unexport; + remote_host = optarg; + break; + case 'h': /* fallthrough */ + case '?': + cmd = cmd_help; + break; + default: + g_error("getopt"); + } + + //if (cmd) + // break; + } + + switch (cmd) { + case cmd_use_by_usbip: + use_device_by_usbip(busid); + break; + case cmd_use_by_other: + use_device_by_other(busid); + break; + case cmd_list: + show_devices(); + break; + case cmd_list2: + show_devices2(); + break; +#if 0 + case cmd_allusbip: + allusbip(); + break; + case cmd_export_to: + export_to(remote_host, busid); + break; + case cmd_unexport: + unexport_from(remote_host, busid); + break; +#endif + case cmd_help: /* fallthrough */ + case cmd_unknown: + show_help(); + break; + default: + g_error("NOT REACHED"); + } + + return 0; +} diff --git a/modules/hp2101nw/usbip/userspace/src/usbip.c b/modules/hp2101nw/usbip/userspace/src/usbip.c new file mode 100644 index 0000000..01a5628 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/src/usbip.c @@ -0,0 +1,723 @@ +/* + * + * Copyright (C) 2005-2007 Takahiro Hirofuchi + */ + +#ifdef HAVE_CONFIG_H +#include "../config.h" +#endif + +#include "usbip.h" +#include "usbip_network.h" +#include <ctype.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <stdlib.h> +#include <fcntl.h> +#include <glib.h> + +static const char version[] = PACKAGE_STRING; + + +/* /sys/devices/platform/vhci_hcd/usb6/6-1/6-1:1.1 -> 1 */ +static int get_interface_number(char *path) +{ + char *c; + + c = strstr(path, vhci_driver->hc_device->bus_id); + if (!c) + return -1; /* hc exist? */ + c++; + /* -> usb6/6-1/6-1:1.1 */ + + c = strchr(c, '/'); + if (!c) + return -1; /* hc exist? */ + c++; + /* -> 6-1/6-1:1.1 */ + + c = strchr(c, '/'); + if (!c) + return -1; /* no interface path */ + c++; + /* -> 6-1:1.1 */ + + c = strchr(c, ':'); + if (!c) + return -1; /* no configuration? */ + c++; + /* -> 1.1 */ + + c = strchr(c, '.'); + if (!c) + return -1; /* no interface? */ + c++; + /* -> 1 */ + + + return atoi(c); +} + + +static struct sysfs_device *open_usb_interface(struct usb_device *udev, int i) +{ + struct sysfs_device *suinf; + char busid[SYSFS_BUS_ID_SIZE]; + + snprintf(busid, SYSFS_BUS_ID_SIZE, "%s:%d.%d", + udev->busid, udev->bConfigurationValue, i); + + suinf = sysfs_open_device("usb", busid); + if (!suinf) + err("sysfs_open_device %s", busid); + + return suinf; +} + + +#define MAX_BUFF 100 +static int record_connection(char *host, char *port, char *busid, int rhport) +{ + int fd; + char path[PATH_MAX+1]; + char buff[MAX_BUFF+1]; + int ret; + + mkdir(VHCI_STATE_PATH, 0700); + + snprintf(path, PATH_MAX, VHCI_STATE_PATH"/port%d", rhport); + + fd = open(path, O_WRONLY|O_CREAT|O_TRUNC, S_IRWXU); + if (fd < 0) + return -1; + + snprintf(buff, MAX_BUFF, "%s %s %s\n", + host, port, busid); + + ret = write(fd, buff, strlen(buff)); + if (ret != (ssize_t) strlen(buff)) { + close(fd); + return -1; + } + + close(fd); + + return 0; +} + +static int read_record(int rhport, char *host, char *port, char *busid) +{ + FILE *file; + char path[PATH_MAX+1]; + + snprintf(path, PATH_MAX, VHCI_STATE_PATH"/port%d", rhport); + + file = fopen(path, "r"); + if (!file) { + err("fopen"); + return -1; + } + + if (fscanf(file, "%s %s %s\n", host, port, busid) != 3) { + err("fscanf"); + fclose(file); + return -1; + } + + fclose(file); + + return 0; +} + + +int usbip_vhci_imported_device_dump(struct usbip_imported_device *idev) +{ + char product_name[100]; + char host[NI_MAXHOST] = "unknown host"; + char serv[NI_MAXSERV] = "unknown port"; + char remote_busid[SYSFS_BUS_ID_SIZE]; + int ret; + + if (idev->status == VDEV_ST_NULL || idev->status == VDEV_ST_NOTASSIGNED) { + info("Port %02d: <%s>", idev->port, usbip_status_string(idev->status)); + return 0; + } + + ret = read_record(idev->port, host, serv, remote_busid); + if (ret) { + err("read_record"); + return -1; + } + + info("Port %02d: <%s> at %s", idev->port, + usbip_status_string(idev->status), usbip_speed_string(idev->udev.speed)); + + usbip_names_get_product(product_name, sizeof(product_name), + idev->udev.idVendor, idev->udev.idProduct); + + info(" %s", product_name); + + info("%10s -> usbip://%s:%s/%s (remote devid %08x (bus/dev %03d/%03d))", + idev->udev.busid, host, serv, remote_busid, + idev->devid, + idev->busnum, idev->devnum); + + for (int i=0; i < idev->udev.bNumInterfaces; i++) { + /* show interface information */ + struct sysfs_device *suinf; + + suinf = open_usb_interface(&idev->udev, i); + if (!suinf) + continue; + + info(" %6s used by %-17s", suinf->bus_id, suinf->driver_name); + sysfs_close_device(suinf); + + /* show class device information */ + struct class_device *cdev; + + dlist_for_each_data(idev->cdev_list, cdev, struct class_device) { + int ifnum = get_interface_number(cdev->devpath); + if (ifnum == i) { + info(" %s", cdev->clspath); + } + } + } + + return 0; +} + + + + +static int query_exported_devices(int sockfd) +{ + int ret; + struct op_devlist_reply rep; + uint16_t code = OP_REP_DEVLIST; + + bzero(&rep, sizeof(rep)); + + ret = usbip_send_op_common(sockfd, OP_REQ_DEVLIST, 0); + if (ret < 0) { + err("send op_common"); + return -1; + } + + ret = usbip_recv_op_common(sockfd, &code); + if (ret < 0) { + err("recv op_common"); + return -1; + } + + ret = usbip_recv(sockfd, (void *) &rep, sizeof(rep)); + if (ret < 0) { + err("recv op_devlist"); + return -1; + } + + PACK_OP_DEVLIST_REPLY(0, &rep); + dbg("exportable %d devices", rep.ndev); + + for (unsigned int i=0; i < rep.ndev; i++) { + char product_name[100]; + char class_name[100]; + struct usb_device udev; + + bzero(&udev, sizeof(udev)); + + ret = usbip_recv(sockfd, (void *) &udev, sizeof(udev)); + if (ret < 0) { + err("recv usb_device[%d]", i); + return -1; + } + pack_usb_device(0, &udev); + + usbip_names_get_product(product_name, sizeof(product_name), + udev.idVendor, udev.idProduct); + usbip_names_get_class(class_name, sizeof(class_name), udev.bDeviceClass, + udev.bDeviceSubClass, udev.bDeviceProtocol); + + info("%8s: %s", udev.busid, product_name); + info("%8s: %s", " ", udev.path); + info("%8s: %s", " ", class_name); + + for (int j=0; j < udev.bNumInterfaces; j++) { + struct usb_interface uinf; + + ret = usbip_recv(sockfd, (void *) &uinf, sizeof(uinf)); + if (ret < 0) { + err("recv usb_interface[%d]", j); + return -1; + } + + pack_usb_interface(0, &uinf); + usbip_names_get_class(class_name, sizeof(class_name), uinf.bInterfaceClass, + uinf.bInterfaceSubClass, uinf.bInterfaceProtocol); + + info("%8s: %2d - %s", " ", j, class_name); + } + + info(" "); + } + + return rep.ndev; +} + +static int import_device(int sockfd, struct usb_device *udev) +{ + int ret; + int port; + + ret = usbip_vhci_driver_open(); + if (ret < 0) { + err("open vhci_driver"); + return -1; + } + + port = usbip_vhci_get_free_port(); + if (port < 0) { + err("no free port"); + usbip_vhci_driver_close(); + return -1; + } + + ret = usbip_vhci_attach_device(port, sockfd, udev->busnum, + udev->devnum, udev->speed); + if (ret < 0) { + err("import device"); + usbip_vhci_driver_close(); + return -1; + } + + usbip_vhci_driver_close(); + + return port; +} + + +static int query_import_device(int sockfd, char *busid) +{ + int ret; + struct op_import_request request; + struct op_import_reply reply; + uint16_t code = OP_REP_IMPORT; + + bzero(&request, sizeof(request)); + bzero(&reply, sizeof(reply)); + + + /* send a request */ + ret = usbip_send_op_common(sockfd, OP_REQ_IMPORT, 0); + if (ret < 0) { + err("send op_common"); + return -1; + } + + strncpy(request.busid, busid, SYSFS_BUS_ID_SIZE-1); + + PACK_OP_IMPORT_REQUEST(0, &request); + + ret = usbip_send(sockfd, (void *) &request, sizeof(request)); + if (ret < 0) { + err("send op_import_request"); + return -1; + } + + + /* recieve a reply */ + ret = usbip_recv_op_common(sockfd, &code); + if (ret < 0) { + err("recv op_common"); + return -1; + } + + ret = usbip_recv(sockfd, (void *) &reply, sizeof(reply)); + if (ret < 0) { + err("recv op_import_reply"); + return -1; + } + + PACK_OP_IMPORT_REPLY(0, &reply); + + + /* check the reply */ + if (strncmp(reply.udev.busid, busid, SYSFS_BUS_ID_SIZE)) { + err("recv different busid %s", reply.udev.busid); + return -1; + } + + + /* import a device */ + return import_device(sockfd, &reply.udev); +} + +static int attach_device(char *host, char *busid) +{ + int sockfd; + int ret; + int rhport; + + sockfd = tcp_connect(host, USBIP_PORT_STRING); + if (sockfd < 0) { + err("tcp connect"); + return -1; + } + + rhport = query_import_device(sockfd, busid); + if (rhport < 0) { + err("query"); + return -1; + } + + close(sockfd); + + ret = record_connection(host, USBIP_PORT_STRING, + busid, rhport); + if (ret < 0) { + err("record connection"); + return -1; + } + + return 0; +} + +static int detach_port(char *port) +{ + int ret; + uint8_t portnum; + + for (unsigned int i=0; i < strlen(port); i++) + if (!isdigit(port[i])) { + err("invalid port %s", port); + return -1; + } + + /* check max port */ + + portnum = atoi(port); + + ret = usbip_vhci_driver_open(); + if (ret < 0) { + err("open vhci_driver"); + return -1; + } + + ret = usbip_vhci_detach_device(portnum); + if (ret < 0) + return -1; + + usbip_vhci_driver_close(); + + return ret; +} + +static int show_exported_devices(char *host) +{ + int ret; + int sockfd; + + sockfd = tcp_connect(host, USBIP_PORT_STRING); + if (sockfd < 0) { + err("- %s failed", host); + return -1; + } + + info("- %s", host); + + ret = query_exported_devices(sockfd); + if (ret < 0) { + err("query"); + return -1; + } + + close(sockfd); + return 0; +} + +static int attach_exported_devices(char *host, int sockfd) +{ + int ret; + struct op_devlist_reply rep; + uint16_t code = OP_REP_DEVLIST; + + bzero(&rep, sizeof(rep)); + + ret = usbip_send_op_common(sockfd, OP_REQ_DEVLIST, 0); + if(ret < 0) { + err("send op_common"); + return -1; + } + + ret = usbip_recv_op_common(sockfd, &code); + if(ret < 0) { + err("recv op_common"); + return -1; + } + + ret = usbip_recv(sockfd, (void *) &rep, sizeof(rep)); + if(ret < 0) { + err("recv op_devlist"); + return -1; + } + + PACK_OP_DEVLIST_REPLY(0, &rep); + dbg("exportable %d devices", rep.ndev); + + for(unsigned int i=0; i < rep.ndev; i++) { + char product_name[100]; + char class_name[100]; + struct usb_device udev; + + bzero(&udev, sizeof(udev)); + + ret = usbip_recv(sockfd, (void *) &udev, sizeof(udev)); + if(ret < 0) { + err("recv usb_device[%d]", i); + return -1; + } + pack_usb_device(0, &udev); + + usbip_names_get_product(product_name, sizeof(product_name), + udev.idVendor, udev.idProduct); + usbip_names_get_class(class_name, sizeof(class_name), udev.bDeviceClass, + udev.bDeviceSubClass, udev.bDeviceProtocol); + + dbg("Attaching usb port %s from host %s on usbip, with deviceid: %s", udev.busid, host, product_name); + + for (int j=0; j < udev.bNumInterfaces; j++) { + struct usb_interface uinf; + + ret = usbip_recv(sockfd, (void *) &uinf, sizeof(uinf)); + if (ret < 0) { + err("recv usb_interface[%d]", j); + return -1; + } + + pack_usb_interface(0, &uinf); + usbip_names_get_class(class_name, sizeof(class_name), uinf.bInterfaceClass, + uinf.bInterfaceSubClass, uinf.bInterfaceProtocol); + + dbg("interface %2d - %s", j, class_name); + } + + attach_device(host, udev.busid); + } + + return rep.ndev; +} + +static int attach_devices_all(char *host) +{ + int ret; + int sockfd; + + sockfd = tcp_connect(host, USBIP_PORT_STRING); + if(sockfd < 0) { + err("- %s failed", host); + return -1; + } + + info("- %s", host); + + ret = attach_exported_devices(host, sockfd); + if(ret < 0) { + err("query"); + return -1; + } + + close(sockfd); + return 0; +} + + +const char help_message[] = "\ +Usage: usbip [options] \n\ + -a, --attach [host] [bus_id] \n\ + Attach a remote USB device. \n\ + \n\ + -x, --attachall [host] \n\ + Attach all remote USB devices on the specific host. \n\ + \n\ + -d, --detach [ports] \n\ + Detach an imported USB device. \n\ + \n\ + -l, --list [hosts] \n\ + List exported USB devices. \n\ + \n\ + -p, --port \n\ + List virtual USB port status. \n\ + \n\ + -D, --debug \n\ + Print debugging information. \n\ + \n\ + -v, --version \n\ + Show version. \n\ + \n\ + -h, --help \n\ + Print this help. \n"; + +static void show_help(void) +{ + printf("%s", help_message); +} + +static int show_port_status(void) +{ + int ret; + struct usbip_imported_device *idev; + + ret = usbip_vhci_driver_open(); + if (ret < 0) + return ret; + + for (int i = 0; i < vhci_driver->nports; i++) { + idev = &vhci_driver->idev[i]; + + if (usbip_vhci_imported_device_dump(idev) < 0) + ret = -1; + } + + usbip_vhci_driver_close(); + + return ret; +} + +#define _GNU_SOURCE +#include <getopt.h> +static const struct option longopts[] = { + {"attach", no_argument, NULL, 'a'}, + {"attachall", no_argument, NULL, 'x'}, + {"detach", no_argument, NULL, 'd'}, + {"port", no_argument, NULL, 'p'}, + {"list", no_argument, NULL, 'l'}, + {"version", no_argument, NULL, 'v'}, + {"help", no_argument, NULL, 'h'}, + {"debug", no_argument, NULL, 'D'}, + {"syslog", no_argument, NULL, 'S'}, + {NULL, 0, NULL, 0} +}; + +int main(int argc, char *argv[]) +{ + int ret; + + enum { + cmd_attach = 1, + cmd_attachall, + cmd_detach, + cmd_port, + cmd_list, + cmd_help, + cmd_version + } cmd = 0; + + usbip_use_stderr = 1; + + if (geteuid() != 0) + g_warning("running non-root?"); + + ret = usbip_names_init(USBIDS_FILE); + if (ret) + notice("failed to open %s", USBIDS_FILE); + + for (;;) { + int c; + int index = 0; + + c = getopt_long(argc, argv, "adplvhDSx", longopts, &index); + + if (c == -1) + break; + + switch(c) { + case 'a': + if (!cmd) + cmd = cmd_attach; + else + cmd = cmd_help; + break; + case 'd': + if (!cmd) + cmd = cmd_detach; + else + cmd = cmd_help; + break; + case 'p': + if (!cmd) + cmd = cmd_port; + else cmd = cmd_help; + break; + case 'l': + if (!cmd) + cmd = cmd_list; + else + cmd = cmd_help; + break; + case 'v': + if (!cmd) + cmd = cmd_version; + else + cmd = cmd_help; + break; + case 'x': + if(!cmd) + cmd = cmd_attachall; + else + cmd = cmd_help; + break; + case 'h': + cmd = cmd_help; + break; + case 'D': + usbip_use_debug = 1; + break; + case 'S': + usbip_use_syslog = 1; + break; + case '?': + break; + + default: + err("getopt"); + } + } + + ret = 0; + switch(cmd) { + case cmd_attach: + if (optind == argc - 2) + ret = attach_device(argv[optind], argv[optind+1]); + else + show_help(); + break; + case cmd_detach: + while (optind < argc) + ret = detach_port(argv[optind++]); + break; + case cmd_port: + ret = show_port_status(); + break; + case cmd_list: + while (optind < argc) + ret = show_exported_devices(argv[optind++]); + break; + case cmd_attachall: + while(optind < argc) + ret = attach_devices_all(argv[optind++]); + break; + case cmd_version: + printf("%s\n", version); + break; + case cmd_help: + show_help(); + break; + default: + show_help(); + } + + + usbip_names_free(); + + exit((ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE); +} diff --git a/modules/hp2101nw/usbip/userspace/src/usbip_network.c b/modules/hp2101nw/usbip/userspace/src/usbip_network.c new file mode 100644 index 0000000..01be3c7 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/src/usbip_network.c @@ -0,0 +1,251 @@ +/* + * + * Copyright (C) 2005-2007 Takahiro Hirofuchi + */ + +#include "usbip_network.h" + +void pack_uint32_t(int pack, uint32_t *num) +{ + uint32_t i; + + if (pack) + i = htonl(*num); + else + i = ntohl(*num); + + *num = i; +} + +void pack_uint16_t(int pack, uint16_t *num) +{ + uint16_t i; + + if (pack) + i = htons(*num); + else + i = ntohs(*num); + + *num = i; +} + +void pack_usb_device(int pack, struct usb_device *udev) +{ + pack_uint32_t(pack, &udev->busnum); + pack_uint32_t(pack, &udev->devnum); + pack_uint32_t(pack, &udev->speed ); + + pack_uint16_t(pack, &udev->idVendor ); + pack_uint16_t(pack, &udev->idProduct); + pack_uint16_t(pack, &udev->bcdDevice); +} + +void pack_usb_interface(int pack __attribute__((unused)), + struct usb_interface *udev __attribute__((unused))) +{ + /* uint8_t members need nothing */ +} + + +static ssize_t usbip_xmit(int sockfd, void *buff, size_t bufflen, int sending) +{ + ssize_t total = 0; + + if (!bufflen) + return 0; + + do { + ssize_t nbytes; + + if (sending) + nbytes = send(sockfd, buff, bufflen, 0); + else + nbytes = recv(sockfd, buff, bufflen, MSG_WAITALL); + + if (nbytes <= 0) + return -1; + + buff = (void *) ((intptr_t) buff + nbytes); + bufflen -= nbytes; + total += nbytes; + + } while (bufflen > 0); + + + return total; +} + +ssize_t usbip_recv(int sockfd, void *buff, size_t bufflen) +{ + return usbip_xmit(sockfd, buff, bufflen, 0); +} + +ssize_t usbip_send(int sockfd, void *buff, size_t bufflen) +{ + return usbip_xmit(sockfd, buff, bufflen, 1); +} + +int usbip_send_op_common(int sockfd, uint32_t code, uint32_t status) +{ + int ret; + struct op_common op_common; + + bzero(&op_common, sizeof(op_common)); + + op_common.version = USBIP_VERSION; + op_common.code = code; + op_common.status = status; + + PACK_OP_COMMON(1, &op_common); + + ret = usbip_send(sockfd, (void *) &op_common, sizeof(op_common)); + if (ret < 0) { + err("send op_common"); + return -1; + } + + return 0; +} + +int usbip_recv_op_common(int sockfd, uint16_t *code) +{ + int ret; + struct op_common op_common; + + bzero(&op_common, sizeof(op_common)); + + ret = usbip_recv(sockfd, (void *) &op_common, sizeof(op_common)); + if (ret < 0) { + err("recv op_common, %d", ret); + goto err; + } + + PACK_OP_COMMON(0, &op_common); + + if (op_common.version != USBIP_VERSION) { + err("version mismatch, %d %d", op_common.version, USBIP_VERSION); + goto err; + } + + switch(*code) { + case OP_UNSPEC: + break; + default: + if (op_common.code != *code) { + info("unexpected pdu %d for %d", op_common.code, *code); + goto err; + } + } + + if (op_common.status != ST_OK) { + info("request failed at peer, %d", op_common.status); + goto err; + } + + *code = op_common.code; + + return 0; +err: + return -1; +} + + +int usbip_set_reuseaddr(int sockfd) +{ + const int val = 1; + int ret; + + ret = setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)); + if (ret < 0) + err("setsockopt SO_REUSEADDR"); + + return ret; +} + +int usbip_set_nodelay(int sockfd) +{ + const int val = 1; + int ret; + + ret = setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val)); + if (ret < 0) + err("setsockopt TCP_NODELAY"); + + return ret; +} + +int usbip_set_keepalive(int sockfd) +{ + const int val = 1; + int ret; + + ret = setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &val, sizeof(val)); + if (ret < 0) + err("setsockopt SO_KEEPALIVE"); + + return ret; +} + +/* IPv6 Ready */ +/* + * moved here from vhci_attach.c + */ +int tcp_connect(char *hostname, char *service) +{ + struct addrinfo hints, *res, *res0; + int sockfd; + int err; + + + memset(&hints, 0, sizeof(hints)); + hints.ai_socktype = SOCK_STREAM; + + /* get all possible addresses */ + err = getaddrinfo(hostname, service, &hints, &res0); + if (err) { + err("%s %s: %s", hostname, service, gai_strerror(err)); + return -1; + } + + /* try all the addresses */ + for (res = res0; res; res = res->ai_next) { + char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV]; + + err = getnameinfo(res->ai_addr, res->ai_addrlen, + hbuf, sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV); + if (err) { + err("%s %s: %s", hostname, service, gai_strerror(err)); + continue; + } + + dbg("trying %s port %s\n", hbuf, sbuf); + + sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol); + if (sockfd < 0) { + err("socket"); + continue; + } + + /* should set TCP_NODELAY for usbip */ + usbip_set_nodelay(sockfd); + /* TODO: write code for heatbeat */ + usbip_set_keepalive(sockfd); + + err = connect(sockfd, res->ai_addr, res->ai_addrlen); + if (err < 0) { + close(sockfd); + continue; + } + + /* connected */ + dbg("connected to %s:%s", hbuf, sbuf); + freeaddrinfo(res0); + return sockfd; + } + + + dbg("%s:%s, %s", hostname, service, "no destination to connect to"); + freeaddrinfo(res0); + + return -1; +} diff --git a/modules/hp2101nw/usbip/userspace/src/usbip_network.h b/modules/hp2101nw/usbip/userspace/src/usbip_network.h new file mode 100644 index 0000000..1225466 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/src/usbip_network.h @@ -0,0 +1,198 @@ +/* + * Copyright (C) 2005-2007 Takahiro Hirofuchi + */ + +#ifndef _USBIP_NETWORK_H +#define _USBIP_NETWORK_H + +#include "usbip.h" +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/tcp.h> + + +/* -------------------------------------------------- */ +/* Define Protocol Format */ +/* -------------------------------------------------- */ + + +/* ---------------------------------------------------------------------- */ +/* Common header for all the kinds of PDUs. */ +struct op_common { + uint16_t version; + +#define OP_REQUEST (0x80 << 8) +#define OP_REPLY (0x00 << 8) + uint16_t code; + + /* add more error code */ +#define ST_OK 0x00 +#define ST_NA 0x01 + uint32_t status; /* op_code status (for reply) */ + +} __attribute__((packed)); + +#define PACK_OP_COMMON(pack, op_common) do {\ + pack_uint16_t(pack, &(op_common)->version);\ + pack_uint16_t(pack, &(op_common)->code );\ + pack_uint32_t(pack, &(op_common)->status );\ +} while (0) + + +/* ---------------------------------------------------------------------- */ +/* Dummy Code */ +#define OP_UNSPEC 0x00 +#define OP_REQ_UNSPEC OP_UNSPEC +#define OP_REP_UNSPEC OP_UNSPEC + +/* ---------------------------------------------------------------------- */ +/* Retrieve USB device information. (still not used) */ +#define OP_DEVINFO 0x02 +#define OP_REQ_DEVINFO (OP_REQUEST | OP_DEVINFO) +#define OP_REP_DEVINFO (OP_REPLY | OP_DEVINFO) + +struct op_devinfo_request { + char busid[SYSFS_BUS_ID_SIZE]; +} __attribute__((packed)); + +struct op_devinfo_reply { + struct usb_device udev; + struct usb_interface uinf[]; +} __attribute__((packed)); + + +/* ---------------------------------------------------------------------- */ +/* Import a remote USB device. */ +#define OP_IMPORT 0x03 +#define OP_REQ_IMPORT (OP_REQUEST | OP_IMPORT) +#define OP_REP_IMPORT (OP_REPLY | OP_IMPORT) + +struct op_import_request { + char busid[SYSFS_BUS_ID_SIZE]; +} __attribute__((packed)); + +struct op_import_reply { + struct usb_device udev; +// struct usb_interface uinf[]; +} __attribute__((packed)); + +#define PACK_OP_IMPORT_REQUEST(pack, request) do {\ +} while (0) + +#define PACK_OP_IMPORT_REPLY(pack, reply) do {\ + pack_usb_device(pack, &(reply)->udev);\ +} while (0) + + + +/* ---------------------------------------------------------------------- */ +/* Export a USB device to a remote host. */ +#define OP_EXPORT 0x06 +#define OP_REQ_EXPORT (OP_REQUEST | OP_EXPORT) +#define OP_REP_EXPORT (OP_REPLY | OP_EXPORT) + +struct op_export_request { + struct usb_device udev; +} __attribute__((packed)); + +struct op_export_reply { + int returncode; +} __attribute__((packed)); + + +#define PACK_OP_EXPORT_REQUEST(pack, request) do {\ + pack_usb_device(pack, &(request)->udev);\ +} while (0) + +#define PACK_OP_EXPORT_REPLY(pack, reply) do {\ +} while (0) + +/* ---------------------------------------------------------------------- */ +/* un-Export a USB device from a remote host. */ +#define OP_UNEXPORT 0x07 +#define OP_REQ_UNEXPORT (OP_REQUEST | OP_UNEXPORT) +#define OP_REP_UNEXPORT (OP_REPLY | OP_UNEXPORT) + +struct op_unexport_request { + struct usb_device udev; +} __attribute__((packed)); + +struct op_unexport_reply { + int returncode; +} __attribute__((packed)); + +#define PACK_OP_UNEXPORT_REQUEST(pack, request) do {\ + pack_usb_device(pack, &(request)->udev);\ +} while (0) + +#define PACK_OP_UNEXPORT_REPLY(pack, reply) do {\ +} while (0) + + + +/* ---------------------------------------------------------------------- */ +/* Negotiate IPSec encryption key. (still not used) */ +#define OP_CRYPKEY 0x04 +#define OP_REQ_CRYPKEY (OP_REQUEST | OP_CRYPKEY) +#define OP_REP_CRYPKEY (OP_REPLY | OP_CRYPKEY) + +struct op_crypkey_request { + /* 128bit key */ + uint32_t key[4]; +} __attribute__((packed)); + +struct op_crypkey_reply { + uint32_t __reserved; +} __attribute__((packed)); + + +/* ---------------------------------------------------------------------- */ +/* Retrieve the list of exported USB devices. */ +#define OP_DEVLIST 0x05 +#define OP_REQ_DEVLIST (OP_REQUEST | OP_DEVLIST) +#define OP_REP_DEVLIST (OP_REPLY | OP_DEVLIST) + +struct op_devlist_request { +} __attribute__((packed)); + +struct op_devlist_reply { + uint32_t ndev; + /* followed by reply_extra[] */ +} __attribute__((packed)); + +struct op_devlist_reply_extra { + struct usb_device udev; + struct usb_interface uinf[]; +} __attribute__((packed)); + +#define PACK_OP_DEVLIST_REQUEST(pack, request) do {\ +} while (0) + +#define PACK_OP_DEVLIST_REPLY(pack, reply) do {\ + pack_uint32_t(pack, &(reply)->ndev);\ +} while (0) + + +/* -------------------------------------------------- */ +/* Declare Prototype Function */ +/* -------------------------------------------------- */ + +void pack_uint32_t(int pack, uint32_t *num); +void pack_uint16_t(int pack, uint16_t *num); +void pack_usb_device(int pack, struct usb_device *udev); +void pack_usb_interface(int pack, struct usb_interface *uinf); + +ssize_t usbip_recv(int sockfd, void *buff, size_t bufflen); +ssize_t usbip_send(int sockfd, void *buff, size_t bufflen); +int usbip_send_op_common(int sockfd, uint32_t code, uint32_t status); +int usbip_recv_op_common(int sockfd, uint16_t *code); +int usbip_set_reuseaddr(int sockfd); +int usbip_set_nodelay(int sockfd); +int usbip_set_keepalive(int sockfd); + +int tcp_connect(char *hostname, char *service); + +#define USBIP_PORT 3240 +#define USBIP_PORT_STRING "3240" + +#endif diff --git a/modules/hp2101nw/usbip/userspace/src/usbipd.c b/modules/hp2101nw/usbip/userspace/src/usbipd.c new file mode 100644 index 0000000..ec9faac --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/src/usbipd.c @@ -0,0 +1,570 @@ +/* + * + * Copyright (C) 2005-2007 Takahiro Hirofuchi + */ + +#ifdef HAVE_CONFIG_H +#include "../config.h" +#endif + +#include <unistd.h> +#include <netdb.h> +#include <strings.h> +#include <stdlib.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <arpa/inet.h> +#include <sys/socket.h> +#include <netinet/in.h> + +#ifdef HAVE_LIBWRAP +#include <tcpd.h> +#endif + +#define _GNU_SOURCE +#include <getopt.h> +#include <signal.h> + +#include "usbip.h" +#include "usbip_network.h" + +#include <glib.h> + +static const char version[] = PACKAGE_STRING; + + +static int send_reply_devlist(int sockfd) +{ + int ret; + struct usbip_exported_device *edev; + struct op_devlist_reply reply; + + + reply.ndev = 0; + + /* how many devices are exported ? */ + dlist_for_each_data(stub_driver->edev_list, edev, struct usbip_exported_device) { + reply.ndev += 1; + } + + dbg("%d devices are exported", reply.ndev); + + ret = usbip_send_op_common(sockfd, OP_REP_DEVLIST, ST_OK); + if (ret < 0) { + err("send op_common"); + return ret; + } + + PACK_OP_DEVLIST_REPLY(1, &reply); + + ret = usbip_send(sockfd, (void *) &reply, sizeof(reply)); + if (ret < 0) { + err("send op_devlist_reply"); + return ret; + } + + dlist_for_each_data(stub_driver->edev_list, edev, struct usbip_exported_device) { + struct usb_device pdu_udev; + + dump_usb_device(&edev->udev); + memcpy(&pdu_udev, &edev->udev, sizeof(pdu_udev)); + pack_usb_device(1, &pdu_udev); + + ret = usbip_send(sockfd, (void *) &pdu_udev, sizeof(pdu_udev)); + if (ret < 0) { + err("send pdu_udev"); + return ret; + } + + for (int i=0; i < edev->udev.bNumInterfaces; i++) { + struct usb_interface pdu_uinf; + + dump_usb_interface(&edev->uinf[i]); + memcpy(&pdu_uinf, &edev->uinf[i], sizeof(pdu_uinf)); + pack_usb_interface(1, &pdu_uinf); + + ret = usbip_send(sockfd, (void *) &pdu_uinf, sizeof(pdu_uinf)); + if (ret < 0) { + err("send pdu_uinf"); + return ret; + } + } + } + + return 0; +} + + +static int recv_request_devlist(int sockfd) +{ + int ret; + struct op_devlist_request req; + + bzero(&req, sizeof(req)); + + ret = usbip_recv(sockfd, (void *) &req, sizeof(req)); + if (ret < 0) { + err("recv devlist request"); + return -1; + } + + ret = send_reply_devlist(sockfd); + if (ret < 0) { + err("send devlist reply"); + return -1; + } + + return 0; +} + + +static int recv_request_import(int sockfd) +{ + int ret; + struct op_import_request req; + struct op_common reply; + struct usbip_exported_device *edev; + int found = 0; + int error = 0; + + bzero(&req, sizeof(req)); + bzero(&reply, sizeof(reply)); + + ret = usbip_recv(sockfd, (void *) &req, sizeof(req)); + if (ret < 0) { + err("recv import request"); + return -1; + } + + PACK_OP_IMPORT_REQUEST(0, &req); + + dlist_for_each_data(stub_driver->edev_list, edev, struct usbip_exported_device) { + if (!strncmp(req.busid, edev->udev.busid, SYSFS_BUS_ID_SIZE)) { + dbg("found requested device %s", req.busid); + found = 1; + break; + } + } + + if (found) { + /* should set TCP_NODELAY for usbip */ + usbip_set_nodelay(sockfd); + + /* export_device needs a TCP/IP socket descriptor */ + ret = usbip_stub_export_device(edev, sockfd); + if (ret < 0) + error = 1; + } else { + info("not found requested device %s", req.busid); + error = 1; + } + + + ret = usbip_send_op_common(sockfd, OP_REP_IMPORT, (!error ? ST_OK : ST_NA)); + if (ret < 0) { + err("send import reply"); + return -1; + } + + if (!error) { + struct usb_device pdu_udev; + + memcpy(&pdu_udev, &edev->udev, sizeof(pdu_udev)); + pack_usb_device(1, &pdu_udev); + + ret = usbip_send(sockfd, (void *) &pdu_udev, sizeof(pdu_udev)); + if (ret < 0) { + err("send devinfo"); + return -1; + } + } + + return 0; +} + + + +static int recv_pdu(int sockfd) +{ + int ret; + uint16_t code = OP_UNSPEC; + + + ret = usbip_recv_op_common(sockfd, &code); + if (ret < 0) { + err("recv op_common, %d", ret); + return ret; + } + + + ret = usbip_stub_refresh_device_list(); + if (ret < 0) + return -1; + + switch(code) { + case OP_REQ_DEVLIST: + ret = recv_request_devlist(sockfd); + break; + + case OP_REQ_IMPORT: + ret = recv_request_import(sockfd); + break; + + case OP_REQ_DEVINFO: + case OP_REQ_CRYPKEY: + + default: + err("unknown op_code, %d", code); + ret = -1; + } + + + return ret; +} + + + + +static void log_addrinfo(struct addrinfo *ai) +{ + int ret; + char hbuf[NI_MAXHOST]; + char sbuf[NI_MAXSERV]; + + ret = getnameinfo(ai->ai_addr, ai->ai_addrlen, hbuf, sizeof(hbuf), + sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV); + if (ret) + err("getnameinfo, %s", gai_strerror(ret)); + + info("listen at [%s]:%s", hbuf, sbuf); +} + +static struct addrinfo *my_getaddrinfo(char *host, int ai_family) +{ + int ret; + struct addrinfo hints, *ai_head; + + bzero(&hints, sizeof(hints)); + + hints.ai_family = ai_family; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_PASSIVE; + + ret = getaddrinfo(host, USBIP_PORT_STRING, &hints, &ai_head); + if (ret) { + err("%s: %s", USBIP_PORT_STRING, gai_strerror(ret)); + return NULL; + } + + return ai_head; +} + +#define MAXSOCK 20 +static int listen_all_addrinfo(struct addrinfo *ai_head, int lsock[]) +{ + struct addrinfo *ai; + int n = 0; /* number of sockets */ + + for (ai = ai_head; ai && n < MAXSOCK; ai = ai->ai_next) { + int ret; + + lsock[n] = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); + if (lsock[n] < 0) + continue; + + usbip_set_reuseaddr(lsock[n]); + usbip_set_nodelay(lsock[n]); + + if (lsock[n] >= FD_SETSIZE) { + close(lsock[n]); + lsock[n] = -1; + continue; + } + + ret = bind(lsock[n], ai->ai_addr, ai->ai_addrlen); + if (ret < 0) { + close(lsock[n]); + lsock[n] = -1; + continue; + } + + ret = listen(lsock[n], SOMAXCONN); + if (ret < 0) { + close(lsock[n]); + lsock[n] = -1; + continue; + } + + log_addrinfo(ai); + + /* next if succeed */ + n++; + } + + if (n == 0) { + err("no socket to listen to"); + return -1; + } + + dbg("listen %d address%s", n, (n==1)?"":"es"); + + return n; +} + +#ifdef HAVE_LIBWRAP +static int tcpd_auth(int csock) +{ + int ret; + struct request_info request; + + request_init(&request, RQ_DAEMON, "usbipd", RQ_FILE, csock, 0); + + fromhost(&request); + + ret = hosts_access(&request); + if (!ret) + return -1; + + return 0; +} +#endif + +static int my_accept(int lsock) +{ + int csock; + struct sockaddr_storage ss; + socklen_t len = sizeof(ss); + char host[NI_MAXHOST], port[NI_MAXSERV]; + int ret; + + bzero(&ss, sizeof(ss)); + + csock = accept(lsock, (struct sockaddr *) &ss, &len); + if (csock < 0) { + err("accept"); + return -1; + } + + ret = getnameinfo((struct sockaddr *) &ss, len, + host, sizeof(host), port, sizeof(port), + (NI_NUMERICHOST | NI_NUMERICSERV)); + if (ret) + err("getnameinfo, %s", gai_strerror(ret)); + +#ifdef HAVE_LIBWRAP + ret = tcpd_auth(csock); + if (ret < 0) { + info("deny access from %s", host); + close(csock); + return -1; + } +#endif + + info("connected from %s:%s", host, port); + + return csock; +} + + +GMainLoop *main_loop; + +static void signal_handler(int i) +{ + dbg("signal catched, code %d", i); + + if (main_loop) + g_main_loop_quit(main_loop); +} + +static void set_signal(void) +{ + struct sigaction act; + + bzero(&act, sizeof(act)); + act.sa_handler = signal_handler; + sigemptyset(&act.sa_mask); + sigaction(SIGTERM, &act, NULL); + sigaction(SIGINT, &act, NULL); +} + + +gboolean process_comming_request(GIOChannel *gio, GIOCondition condition, + gpointer data __attribute__((unused))) +{ + int ret; + + if (condition & (G_IO_ERR | G_IO_HUP | G_IO_NVAL)) + g_error("unknown condition"); + + + if (condition & G_IO_IN) { + int lsock; + int csock; + + lsock = g_io_channel_unix_get_fd(gio); + + csock = my_accept(lsock); + if (csock < 0) + return TRUE; + + ret = recv_pdu(csock); + if (ret < 0) + err("process recieved pdu"); + + close(csock); + } + + return TRUE; +} + + +static void do_standalone_mode(gboolean daemonize) +{ + int ret; + int lsock[MAXSOCK]; + struct addrinfo *ai_head; + int n; + + + + ret = usbip_names_init(USBIDS_FILE); + if (ret) + err("open usb.ids"); + + ret = usbip_stub_driver_open(); + if (ret < 0) + g_error("driver open failed"); + + if (daemonize) { + if (daemon(0,0) < 0) + g_error("daemonizing failed: %s", g_strerror(errno)); + + usbip_use_syslog = 1; + } + + set_signal(); + + ai_head = my_getaddrinfo(NULL, PF_UNSPEC); + if (!ai_head) + return; + + n = listen_all_addrinfo(ai_head, lsock); + if (n <= 0) + g_error("no socket to listen to"); + + for (int i = 0; i < n; i++) { + GIOChannel *gio; + + gio = g_io_channel_unix_new(lsock[i]); + g_io_add_watch(gio, (G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL), + process_comming_request, NULL); + } + + + info("usbipd start (%s)", version); + + + main_loop = g_main_loop_new(FALSE, FALSE); + g_main_loop_run(main_loop); + + info("shutdown"); + + freeaddrinfo(ai_head); + usbip_names_free(); + usbip_stub_driver_close(); + + return; +} + + +static const char help_message[] = "\ +Usage: usbipd [options] \n\ + -D, --daemon \n\ + Run as a daemon process. \n\ + \n\ + -d, --debug \n\ + Print debugging information. \n\ + \n\ + -v, --version \n\ + Show version. \n\ + \n\ + -h, --help \n\ + Print this help. \n"; + +static void show_help(void) +{ + printf("%s", help_message); +} + +static const struct option longopts[] = { + {"daemon", no_argument, NULL, 'D'}, + {"debug", no_argument, NULL, 'd'}, + {"version", no_argument, NULL, 'v'}, + {"help", no_argument, NULL, 'h'}, + {NULL, 0, NULL, 0} +}; + +int main(int argc, char *argv[]) +{ + gboolean daemonize = FALSE; + + enum { + cmd_standalone_mode = 1, + cmd_help, + cmd_version + } cmd = cmd_standalone_mode; + + + usbip_use_stderr = 1; + usbip_use_syslog = 0; + + if (geteuid() != 0) + g_warning("running non-root?"); + + for (;;) { + int c; + int index = 0; + + c = getopt_long(argc, argv, "vhdD", longopts, &index); + + if (c == -1) + break; + + switch (c) { + case 'd': + usbip_use_debug = 1; + continue; + case 'v': + cmd = cmd_version; + break; + case 'h': + cmd = cmd_help; + break; + case 'D': + daemonize = TRUE; + break; + case '?': + show_help(); + exit(EXIT_FAILURE); + default: + err("getopt"); + } + } + + switch (cmd) { + case cmd_standalone_mode: + do_standalone_mode(daemonize); + break; + case cmd_version: + printf("%s\n", version); + break; + case cmd_help: + show_help(); + break; + default: + info("unknown cmd"); + show_help(); + } + + return 0; +} diff --git a/modules/hp2101nw/usbip/userspace/src/utils.c b/modules/hp2101nw/usbip/userspace/src/utils.c new file mode 100644 index 0000000..8f44108 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/src/utils.c @@ -0,0 +1,255 @@ +/* + * + * Copyright (C) 2005-2007 Takahiro Hirofuchi + */ + +#include "utils.h" + +int read_integer(char *path) +{ + char buff[100]; + int fd; + int ret = 0; + + bzero(buff, sizeof(buff)); + + fd = open(path, O_RDONLY); + if (fd < 0) + return -1; + + ret = read(fd, buff, sizeof(buff)); + if (ret < 0) { + close(fd); + return -1; + } + + sscanf(buff, "%d", &ret); + + close(fd); + + return ret; +} + +int read_string(char *path, char *string, size_t len) +{ + int fd; + int ret = 0; + char *p; + + bzero(string, len); + + fd = open(path, O_RDONLY); + if (fd < 0) { + string = NULL; + return -1; + } + + ret = read(fd, string, len-1); + if (ret < 0) { + string = NULL; + close(fd); + return -1; + } + + p = strchr(string, '\n'); + *p = '\0'; + + close(fd); + + return 0; +} + +int write_integer(char *path, int value) +{ + int fd; + int ret; + char buff[100]; + + snprintf(buff, sizeof(buff), "%d", value); + + fd = open(path, O_WRONLY); + if (fd < 0) + return -1; + + ret = write(fd, buff, strlen(buff)); + if (ret < 0) { + close(fd); + return -1; + } + + close(fd); + + return 0; +} + +int read_bConfigurationValue(char *busid) +{ + char path[PATH_MAX]; + + snprintf(path, PATH_MAX, "/sys/bus/usb/devices/%s/bConfigurationValue", busid); + + return read_integer(path); +} + +int write_bConfigurationValue(char *busid, int config) +{ + char path[PATH_MAX]; + + snprintf(path, PATH_MAX, "/sys/bus/usb/devices/%s/bConfigurationValue", busid); + + return write_integer(path, config); +} + +int read_bNumInterfaces(char *busid) +{ + char path[PATH_MAX]; + + snprintf(path, PATH_MAX, "/sys/bus/usb/devices/%s/bNumInterfaces", busid); + + return read_integer(path); +} + +int read_bDeviceClass(char *busid) +{ + char path[PATH_MAX]; + + snprintf(path, PATH_MAX, "/sys/bus/usb/devices/%s/bDeviceClass", busid); + + return read_integer(path); +} + +int getdriver(char *busid, int conf, int infnum, char *driver, size_t len) +{ + char path[PATH_MAX]; + char linkto[PATH_MAX]; + int ret; + + snprintf(path, PATH_MAX, "/sys/bus/usb/devices/%s:%d.%d/driver", busid, conf, infnum); + + /* readlink does not add NULL */ + bzero(linkto, sizeof(linkto)); + ret = readlink(path, linkto, sizeof(linkto)-1); + if (ret < 0) { + strncpy(driver, "none", len); + return -1; + } else { + strncpy(driver, basename(linkto), len); + return 0; + } +} + +int getdevicename(char *busid, char *name, size_t len) +{ + char path[PATH_MAX]; + char idProduct[10], idVendor[10]; + + snprintf(path, PATH_MAX, "/sys/bus/usb/devices/%s/idVendor", busid); + read_string(path, idVendor, sizeof(idVendor)); + + snprintf(path, PATH_MAX, "/sys/bus/usb/devices/%s/idProduct", busid); + read_string(path, idProduct, sizeof(idProduct)); + + if (!idVendor[0] || !idProduct[0]) + return -1; + + snprintf(name, len, "%s:%s", idVendor, idProduct); + + return 0; +} + +#define MAXLINE 100 + +/* if this cannot read a whole line, return -1 */ +int readline(int sockfd, char *buff, int bufflen) +{ + int ret; + char c; + int index = 0; + + + while (index < bufflen) { + ret = read(sockfd, &c, sizeof(c)); + if (ret < 0 && errno == EINTR) + continue; + if (ret <= 0) { + return -1; + } + + buff[index] = c; + + if ( index > 0 && buff[index-1] == '\r' && buff[index] == '\n') { + /* end of line */ + buff[index-1] = '\0'; /* get rid of delimitor */ + return index; + } else + index++; + } + + return -1; +} + +#if 0 +int writeline(int sockfd, char *str, int strlen) +{ + int ret; + int index = 0; + int len; + char buff[MAXLINE]; + + if (strlen + 3 > MAXLINE) + return -1; + + strncpy(buff, str, strlen); + buff[strlen+1] = '\r'; + buff[strlen+2] = '\n'; + buff[strlen+3] = '\0'; + + len = strlen + 3; + + while (len > 0) { + ret = write(sockfd, buff+index, len); + if (ret <= 0) { + return -1; + } + + len -= ret; + index += ret; + } + + return index; +} +#endif + +int writeline(int sockfd, char *str, int strlen) +{ + int ret; + int index = 0; + int len; + char buff[MAXLINE]; + + len = strnlen(str, strlen); + + if (strlen + 2 > MAXLINE) + return -1; + + memcpy(buff, str, strlen); + buff[strlen] = '\r'; + buff[strlen+1] = '\n'; /* strlen+1 <= MAXLINE-1 */ + + len = strlen + 2; + + while (len > 0) { + ret = write(sockfd, buff+index, len); + if (ret < 0 && errno == EINTR) + continue; + if (ret <= 0) { + return -1; + } + + len -= ret; + index += ret; + } + + return index; +} + diff --git a/modules/hp2101nw/usbip/userspace/src/utils.h b/modules/hp2101nw/usbip/userspace/src/utils.h new file mode 100644 index 0000000..6c29ae9 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/src/utils.h @@ -0,0 +1,38 @@ + +#ifdef HAVE_CONFIG_H +#include "../config.h" +#endif + +#define _GNU_SOURCE +#include <string.h> +#include <sys/un.h> +#include <sys/types.h> +#include <sys/socket.h> + +#include <sysfs/libsysfs.h> +#include <glib.h> +#include <unistd.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <stdlib.h> +#include <time.h> +#include <errno.h> + + + +/* Be sync to kernel header */ +#define BUS_ID_SIZE 20 + +int read_string(char *path, char *, size_t len); +int read_integer(char *path); +int getdevicename(char *busid, char *name, size_t len); +int getdriver(char *busid, int conf, int infnum, char *driver, size_t len); +int read_bNumInterfaces(char *busid); +int read_bConfigurationValue(char *busid); +int write_integer(char *path, int value); +int write_bConfigurationValue(char *busid, int config); +int read_bDeviceClass(char *busid); +int readline(int sockfd, char *str, int strlen); +int writeline(int sockfd, char *buff, int bufflen); diff --git a/modules/hp2101nw/usbip/userspace/usb.ids b/modules/hp2101nw/usbip/userspace/usb.ids new file mode 100644 index 0000000..b1f8744 --- /dev/null +++ b/modules/hp2101nw/usbip/userspace/usb.ids @@ -0,0 +1,13209 @@ +# +# List of USB ID's +# +# Maintained by Stephen J. Gowdy <gowdy@slac.stanford.edu> +# If you have any new entries, send them to the maintainer. +# Send entries as patches (diff -u old new). +# The latest version can be obtained from +# http://www.linux-usb.org/usb.ids +# +# $Id: usb.ids,v 1.346 2008/04/23 13:51:46 gowdy Exp $ +# + +# Vendors, devices and interfaces. Please keep sorted. + +# Syntax: +# vendor vendor_name +# device device_name <-- single tab +# interface interface_name <-- two tabs + +0001 Fry's Electronics +0002 Ingram +0003 Club Mac +0004 Nebraska Furniture Mart +0145 Unknown + 0112 Card Reader +0204 Chipsbank Microelectronics Co., Ltd + 6025 CBM2080 Flash drive controller + 6026 CBM1180 Flash drive controller +02ad HUMAX Co., Ltd. + 138c PVR Mass Storage +0386 LTS + 0001 PSX for USB Converter +03e8 EndPoints, Inc. + 0004 SE401 WebCam + 0008 101 Ethernet [klsi] + 0015 USB ATAPI Enclosure + 2123 SiPix StyleCam Deluxe + 8004 Aox 99001 +03e9 Thesys Microelectronics +03ea Data Broadcasting Corp. +03eb Atmel Corp. + 2002 Mass Storage Device + 2015 at90usbkey sample firmware (HID keyboard) + 2018 at90usbkey sample firmware (CDC ACM) + 2019 stk525 sample firmware (microphone) + 201c at90usbkey sample firmware (HID mouse) + 201d at90usbkey sample firmware (HID generic) + 2022 at90usbkey sample firmware (composite device) + 2103 JTAG ICE mkII + 2104 AVR ISP mkII + 2107 AVR Dragon + 2ffb at90usb AVR DFU bootloader + 2ffd at89c5130/c5131 DFU bootloader + 2fff at89c5132/c51snd1c DFU bootloader + 3301 at43301 4-port Hub + 3312 4-port Hub + 5601 at76c510 Prism-II 802.11b Access Point + 5603 Cisco 7920 WiFi IP Phone + 6124 at91sam SAMBA bootloader + 7603 at76c503a D-Link DWL-120 802.11b Adapter + 7604 FastVNET + 7605 at76c503a 802.11b Adapter + 7606 at76c505 802.11b Adapter + 7611 at76c510 rfmd2948 802.11b Access Point + 7613 WL-1130 USB + 7614 AT76c505a Wireless Adapter +03ec Iwatsu America, Inc. +03ed Mitel Corp. +03ee Mitsumi + 0000 CD-R/RW Drive + 2501 eHome Infrared Receiver + 2502 eHome Infrared Receiver + 5609 Japanese Keyboard + 641f WIF-0402C Bluetooth Adapter + 6438 Bluetooth Device + 6440 WML-C52APR Bluetooth Adapter + 6901 SmartDisk FDD + 6902 Floppy Disk Drive + 7500 CD-R/RW + ffff Dongle with BlueCore in DFU mode +03f0 Hewlett-Packard + 0004 DeskJet 895c + 0011 OfficeJet G55 + 0012 DeskJet 1125C Printer Port + 0024 KU-0316 Keyboard + 0101 ScanJet 4100c + 0102 PhotoSmart S20 + 0104 DeskJet 880c/970c + 0105 ScanJet 4200c + 0107 CD-Writer Plus + 010c Multimedia Keyboard Hub + 0111 G55xi Printer/Scanner/Copier + 0117 LaserJet 3200 + 011c hn210w 802.11b Adapter + 011d Integrated Bluetooth Module + 0121 HP49g+ Calculator + 0122 HID Internet Keyboard + 0201 ScanJet 6200c + 0202 PhotoSmart S20 + 0204 DeskJet 815c + 0205 ScanJet 3300c + 0207 CD-Writer Plus 8200e + 020c Multimedia Keyboard + 0211 OfficeJet G85 + 0212 DeskJet 1220C + 0217 LaserJet 2200 + 0218 APOLLO P2500/2600 + 2624 Pole Display (HP522 2 x 20 Line Display) + 0304 DeskJet 810c/812c + 0305 ScanJet 4300c + 0307 CD-Writer+ CD-4e + 0311 OfficeJet G85xi + 0312 Color Inkjet CP1700 + 0314 designjet 30/130 series + 0317 LaserJet 1200 + 0401 ScanJet 5200c + 0404 DeskJet 830c/832c + 0405 ScanJet 3400cse + 0411 OfficeJet G95 + 0412 Printing Support + 0417 LaserJet 1200 series + 0504 DeskJet 885c + 0505 ScanJet 2100c + 0507 DVD+RW + 050c 5219 Wireless Keyboard + 0511 OfficeJet K60 + 0512 DeckJet 450 + 0517 LaserJet 1000 + 051d integrated module with Bluetooth wireless technology. + 0601 ScanJet 6300c + 0604 DeskJet 840c + 0605 ScanJet 2200c + 0611 OfficeJet K60xi + 0612 business inkjet 3000 + 0624 Bluetooth Dongle + 0701 ScanJet 5300c/5370c + 0704 DeskJet 825c + 0705 ScanJet 4400c + 0711 OfficeJet K80 + 0712 DeskJet 1180c + 0714 Printing Support + 0801 ScanJet 7400c + 0804 DeskJet 816c + 0805 HP4470C + 0811 OfficeJet K80xi + 0817 LaserJet 3300 + 0901 ScanJet 2300c + 0904 DeskJet 845c + 0912 Printing Support + 0917 LaserJet 3330 + 0924 Modular Smartcard Keyboard + 0a01 ScanJet 2400c + 0a17 color LaserJet 3700 + 0b01 Scanjet 82x0C + 0b17 Laserjet 2300d + 0c17 LaserJet 1010 + 0c24 Bluetooth Dongle + 0d12 Officejet 9100 series + 0d17 LaserJet 1012 + 0e17 LaserJet 1015 + 0f11 OfficeJet V40 + 0f12 Printing Support + 0f17 LaserJet 1150 + 1001 Photo Scanner 1000 + 1002 photosmart 140 series + 1004 DeskJet 970c/970cse + 1005 ScanJet 5400c + 1011 OfficeJet V40xi + 1016 Jornada 548 / iPAQ HW6515 Pocket PC + 1017 LaserJet 1300 + 1024 Smart Card Keyboard + 1102 photosmart 240 series + 1104 DeskJet 959c + 1105 ScanJet 5470c + 1111 officejet v60 + 1116 Jornada 568 Pocket PC + 1117 LaserJet 1300n + 1151 PSC-750xi Printer/Scanner/Copier + 1202 Photosmart 320 Series + 1204 DeskJet 930c + 1205 ScanJet 4500C/5550C + 1211 officejet v60xi + 1217 LaserJet 2300L + 1302 Photosmart 370 Series + 1305 ScanJet 4570c + 1311 OfficeJet V30 + 1312 Deskjet 460 + 1317 LaserJet 1005 + 1405 Scanjet 3670 + 1411 PSC 750 + 1424 f2105 Monitor Hub + 1502 Photosmart 420 Series + 1504 DeskJet 920c + 1511 PSC 750xi + 1512 Printing Support + 1517 color LaserJet 3500 + 1524 Smart Card Keyboard - KR + 1602 Photosmart 330 Series + 1604 DeskJet 940c + 1605 ScanJet 5530C Photosmart + 1611 psc 780 + 1617 LaserJet 3015 + 161d Wireless Rechargeable Optical Mouse (HID) + 1624 Smart Card Keyboard - JP + 1702 Photosmart 380 Series + 1704 deskjet 948C + 1705 ScanJet 5590 + 1711 psc 780xi + 1712 Printing Support + 1717 LaserJet 3020 + 171d Wireless (Bluetooth + WLAN) Interface [Integrated Module] + 1801 Inkjet P-2000U + 1802 Photosmart 470 Series + 1804 deskjet 916C + 1805 ScanJet 7650 + 1811 PSC 720 + 1817 LaserJet 3030 + 181d integrated module with Bluetooth 2.0 wireless technology. + 1902 Photosmart A430 series + 1904 DeskJet 3820 + 1911 OfficeJet V45 + 1917 LaserJet 3380 + 1a02 Photosmart A510 series + 1a11 officejet 5100 series + 1a17 color LaserJet 4650 + 1b02 Photosmart A610 series + 1b04 deskjet 3810 + 1b05 ScanJet 4850C/4890C + 1c02 Photosmart A710 series + 1c17 Color LaserJet 2550l + 1d02 Photosmart A310 series + 1d17 LaserJet 1320 + 1e02 Photosmart A320 Printer series + 1e11 PSC-950 + 1e17 LaserJet 1160 series + 1f02 Photosmart A440 Printer series + 1f11 PSC 920 + 1f12 Officejet Pro K5300 + 1f17 color LaserJet 5550 + 2001 Floppy + 2002 Hub + 2004 DeskJet 640c + 2005 ScanJet 3570c + 2012 Officejet Pro K5400 + 2102 photosmart 7345 + 2104 DeskJet 630c + 2112 Officejet Pro L7500 + 2202 photosmart 7600 series + 2205 ScanJet 3500c + 2212 Officejet Pro L7600 + 2217 color LaserJet 9500 MFP + 2302 photosmart 7600 series + 2304 DeskJet 656c + 2305 ScanJet 3970c + 2311 officejet d series + 2312 Officejet Pro L7700 + 2317 LaserJet 4350 + 2402 photosmart 7700 series + 2405 ScanJet 4070 Photosmart + 2417 LaserJet 4250 + 2424 LP1965 19" Monitor Hub + 2502 photosmart 7700 series + 2505 ScanJet 3770 + 2512 Officejet Pro L7300 + 2517 LaserJet 2410 + 2524 LP3065 30" Monitor Hub + 2602 Photosmart A520 series + 2605 ScanJet 3800c + 2611 officejet 7100 series + 2617 Color LaserJet 2820 Series + 2702 Photosmart A620 series + 2704 Deskjet 915 + 2717 Color LaserJet 2830 + 2811 PSC-2100 + 2817 Color LaserJet 2840 + 2902 Photosmart A820 series + 2911 PSC 2200 + 2917 LaserJet 2420 + 2a11 PSC 2150 series + 2a17 LaserJet 2430 + 2b11 PSC 2170 series + 2b17 LaserJet 1020 + 2c17 Printing Support + 2d11 OfficeJet 6110 + 2d17 Printing Support + 2e11 PSC 1000 + 2e17 Printing Support + 2f11 PSC 1200 + 2f17 EWS 2605dn + 3002 photosmart P1000 + 3004 deskjet 980c + 3005 ScanJet 4670v + 3011 PSC 1100 series + 3017 Printing Support + 3102 PhotoSmart P1100 Printer w/ Card Reader + 3104 DeskJet 960c + 3111 officejet 4100 series + 3117 EWS 2605dtn + 3202 photosmart 1215 + 3211 officejet 4105 series + 3217 LaserJet 3050 + 3302 photosmart 1218 + 3304 DeskJet 990c + 3317 LaserJet 3052 + 3402 photosmart 1115 + 3404 DeskJet 6122 + 3417 LaserJet 3055 + 3502 photosmart 230 + 3504 DeskJet 6127c + 3511 PSC 2300 + 3517 LaserJet 3390 + 3602 photosmart 1315 + 3611 PSC 2410 Photosmart + 3617 EWS 2605 + 3711 PSC 2500 + 3717 EWS UPD + 3802 photosmart 100 + 3817 LaserJet P2015 Series + 3902 photosmart 130 + 3a02 photosmart 7150 + 3a11 OfficeJet 5500 series + 3a17 Printing Support + 3b02 photosmart 7150~ + 3b11 PSC 1300 series + 3b17 LaserJet M1005 MFP + 3c02 PhotoSmart 7350 + 3c11 PSC 1358 + 3c17 EWS UPD + 3d02 photosmart 7350~ + 3d11 OfficeJet 4215 + 3e02 photosmart 7550 + 3f02 photosmart 7550~ + 3f11 PSC-1315/PSC-1317 + 4002 PhotoSmart 720 / PhotoSmart 935 (storage) + 4004 cp1160 + 4102 PhotoSmart 618 + 4105 ScanJet 4370 + 4111 Officejet 7200 series + 4117 Printing Support + 4202 PhotoSmart 812 + 4205 Scanjet G3010 + 4211 Officejet 7300 series + 4217 EWS CM1015 + 4302 PhotoSmart 850 (ptp) + 4311 Officejet 7400 series + 4317 Color LaserJet CM1017 + 4402 PhotoSmart 935 (ptp) + 4417 EWS UPD + 4502 PhotoSmart 945 (PTP mode) + 4505 ScanJet G4010 + 4511 Photosmart 2600 + 4517 EWS UPD + 4605 ScanJet G4050 + 4611 Photosmart 2700 + 4811 PSC 1600 + 4911 PSC 2350 + 4b11 Officejet 6200 + 4c11 PSC 1500 series + 4c17 EWS UPD + 4d11 PSC 1400 + 4d17 EWS UPD + 4e11 Photosmart 2570 series + 4f11 Officejet 5600 (USBHUB) + 5004 DeskJet 995c + 5011 Photosmart 3100 Series + 5017 EWS UPD + 5111 Photosmart 3200 Series + 5211 Photosmart 3300 Series + 5311 Officejet 6300 + 5411 Officejet 4300 + 5511 Deskjet F300 series + 5611 PhotoSmart C3180 + 5617 LaserJet M1120 MFP + 5711 Photosmart C4100 series + 5717 LaserJet M1120n MFP + 5811 Photosmart C5100 series + 5817 LaserJet M1319f MFP + 5911 PhotoSmart C6180 + 5a11 Photosmart C7100 series + 5b11 Officejet J2100 Series + 5c11 Photosmart C4200 Printer series + 5d11 Photosmart C5200 series + 5e11 Photosmart D7400 series + 6004 DeskJet 5550 + 6102 Hewlett Packard Digital Camera + 6104 DeskJet 5650c + 6117 color LaserJet 3550 + 6202 PhotoSmart 215 + 6204 DeskJet 5150c + 6217 Color LaserJet 4700 + 6302 PhotoSmart 318/612 + 6317 Color LaserJet 4730mfp + 6402 PhotoSmart 715 (ptp) + 6411 Photosmart C8100 series + 6417 LaserJet 5200 + 6502 PhotoSmart 120 (ptp) + 6511 Photosmart C7200 series + 6602 PhotoSmart 320 + 6611 Photosmart C4380 series + 6617 LaserJet 5200L + 6702 PhotoSmart 720 (ptp) + 6717 Color LaserJet 3000 + 6802 PhotoSmart 620 (ptp) + 6811 Photosmart D5300 series + 6817 Color LaserJet 3800 + 6911 Photosmart D7200 series + 6917 Color LaserJet 3600 + 6a02 PhotoSmart 735 (ptp) + 6a11 Photosmart C6200 series + 6a17 LaserJet 4240 + 6b02 PhotoSmart R707 (PTP mode) + 6c17 Color LaserJet 4610 + 6f17 Color LaserJet CP6015 series + 7004 DeskJet 3320c + 7102 PhotoSmart 635 (PTP mode) + 7104 DeskJet 3420c + 7117 CM8060 Color MFP with Edgeline Technology + 7202 PhotoSmart 43x (ptp) + 7204 DeskJet 36xx + 7217 LaserJet M5035 MFP + 7302 PhotoSmart M307 (PTP mode) + 7304 DeskJet 35xx + 7317 LaserJet P3005 + 7404 Printing Support + 7417 LaserJet M4345 MFP + 7504 Printing Support + 7517 LaserJet M3035 MFP + 7604 Deskjet 3940 + 7617 LaserJet P3004 + 7702 PhotoSmart R817 (PTP mode) + 7704 Deskjet D4100 + 7717 CM8050 Color MFP with Edgeline Technology + 7804 Deskjet D1360 + 7817 Color LaserJet CP3505 + 7917 LaserJet M5025 MFP + 7a02 PhotoSmart M415 (PTP mode) + 7a17 LaserJet M3027 MFP + 7b02 PhotoSmart M23 (PTP mode) + 7b17 Color LaserJet CP4005 + 7c17 Color LaserJet CM6040 Series + 7d04 Deskjet F2100 Printer series + 7d17 Color LaserJet CM4730 MFP + 7e04 Deskjet F4100 Printer series + 8017 LaserJet P4515 + 8104 Printing Support + 8117 LaserJet P4015 + 811c Ethernet HN210E + 8204 Printing Support + 8217 LaserJet P4014 + 8317 LaserJet M9050 MFP + 8404 Deskjet 6800 Series + 8417 LaserJet M9040 MFP + 8504 Deskjet 6600 Series + 8604 Deskjet 5440 + 8704 deskjet 5900 series + 8804 Deskjet 6980 Series + 8904 Deskjet 6940 Series + 9002 Photosmart M437 + 9102 Photosmart M537 + 9302 Photosmart R930 series + 9402 Photosmart R837 + 9502 Photosmart R840 series + 9602 Photosmart M730 series + 9702 Photosmart R740 series + 9802 Photosmart Mz60 series + 9902 Photosmart M630 series + 9a02 Photosmart E330 series + 9b02 Photosmart M540 series + 9c02 Photosmart M440 series + a004 DeskJet 5850c + b002 photosmart 7200 series + b102 photosmart 7200 series + b202 photosmart 7600 series + b302 photosmart 7600 series + b402 photosmart 7700 series + b502 photosmart 7700 series + b602 photosmart 7900 series + b702 photosmart 7900 series + b802 Photosmart 7400 Series + b902 Photosmart 7800 Series + ba02 Photosmart 8100 Series + bb02 Photosmart 8400 Series + bc02 Photosmart 8700 Series + bd02 Photosmart Pro B9100 series + bef4 NEC Picty760 + c002 Photosmart 7800 Series + c102 Photosmart 8000 Series + c202 Photosmart 8200 Series + c302 Deskjet D2300 + c402 Photosmart D5100 series + c502 Photosmart D6100 series + c602 Photosmart D7100 series + c702 Photosmart D7300 series + c802 Photosmart D5060 Printer + d104 Bluetooth Dongle + efbe NEC Picty900 + f0be NEC Picty920 + f1be NEC Picty800 +03f1 Genoa Technology +03f2 Oak Technology, Inc. +03f3 Adaptec, Inc. + 0020 AWN-8020 WLAN + 0080 AVC-1100 Audio Capture + 0083 AVC-2200 Device + 0087 AVC-2210 Loader + 0088 AVC-2210 Device + 008b AVC-2310 Loader + 008c AVC-2310 Device + 0094 eHome Infrared Receiver + 009b AVC-1410 GameBridge TV NTSC + 2000 USBXchange + 2001 USBXchange Adapter + 2002 USB2-Xchange + 2003 USB2-Xchange Adapter + adcc Composite Device Support +03f4 Diebold, Inc. +03f5 Siemens Electromechanical +03f8 Epson Imaging Technology Center +03f9 KeyTronic Corp. + 0100 Keyboard + 0101 Keyboard + 0102 Keyboard Mouse +03fb OPTi, Inc. +03fc Elitegroup Computer Systems +03fd Xilinx, Inc. +03fe Farallon Comunications +0400 National Semiconductor Corp. + 0807 Bluetooth Dongle + 080a Bluetooth Device + 1000 Mustek BearPaw 1200 Scanner + 1001 Mustek BearPaw 2400 Scanner + 1237 Hub + a000 Smart Display Reference Device + c35b Printing Support +0401 National Registry, Inc. +0402 ALi Corp. + 5462 M5462 IDE Controller + 5602 Video Camera Controller + 5603 USB 2.0 Q-tec Webcam 300 + 5621 USB 2.0 Storage Device + 5623 VistaScan Astra 3600 + 5627 Welland ME-740PS USB2 3.5" Power Saving Enclosure + 5632 USB 2.0 Host-to-Host Link + 5635 USB 2.0 Flash Card Reader + 5636 USB 2.0 Storage Device + 5637 M5637 IDE Controller +0403 Future Technology Devices International, Ltd + 0000 H4SMK 7 Port Hub + 0232 Serial Converter + 6001 FT232 USB-Serial (UART) IC + 6007 Serial Converter + 6008 Serial Converter + 6009 Serial Converter + 6010 FT2232C Dual USB-UART/FIFO IC + 8040 4 Port Hub + 8070 7 Port Hub + 8370 7 Port Hub + 8371 PS/2 Keyboard And Mouse + 8372 FT8U100AX Serial Port + c630 lcd2usb interface + c7d0 RR-CirKits LocoBuffer-USB + cc48 product FTDI TACTRIX_OPENPORT_13M 0xcc48 OpenPort 1.3 Mitsubishi + cc49 product FTDI TACTRIX_OPENPORT_13S 0xcc49 OpenPort 1.3 Subaru + cc4a product FTDI TACTRIX_OPENPORT_13U 0xcc4a OpenPort 1.3 Universal + d010 SCS PTC-IIusb + d011 SCS Position-Tracker/TNC + d012 SCS DRAGON 1 + d013 SCS DRAGON 1 + d6f8 UNI Black BOX + e700 Elster Unicom III Optical Probe + e888 Expert ISDN Control USB + e889 USB-RS232 OptoBridge + e88a Expert mouseCLOCK USB II + e88b Precision Clock MSF USB + e88c Expert mouseCLOCK USB II HBG + ea90 Eclo 1-Wire Adapter + f208 Papenmeier Braille-Display + f680 Suunto Sports Instrument + f918 Ant8 Logic Probe + fa00 Matrix Orbital USB Serial + fa01 Matrix Orbital MX2 or MX3 + fa02 Matrix Orbital MX4 or MX5 + fa03 Matrix Orbital VK/LK202 Family + fa04 Matrix Orbital VK/LK204 Family + fc08 Crystalfontz CFA-632 USB LCD + fc09 Crystalfontz CFA-634 USB LCD + fc0b Crystalfontz CFA-633 USB LCD + fc0c Crystalfontz CFA-631 USB LCD + fc0d Crystalfontz CFA-635 USB LCD + fc82 SEMC DSS-20 SyncStation + fd48 ShipModul MiniPlex-4xUSB NMEA Multiplexer + ff08 ToolHouse LoopBack Adapter + ff18 Logbook Bus + ff19 Logbook Bus + ff1a Logbook Bus + ff1b Logbook Bus + ff1c Logbook Bus + ff1d Logbook Bus + ff1e Logbook Bus + ff1f Logbook Bus +0404 NCR Corp. + 0202 78XX Scanner + 0203 78XX Scanner - Embedded System + 0310 K590 Printer, Self-Service + 0311 7167 Printer, Receipt/Slip + 0312 7197 Printer Receipt + 0320 5932-USB Keyboard + 0321 5953-USB Dynakey + 0322 5932-USB Enhanced Keyboard + 0323 5932-USB Enhanced Keyboard, Flash-Recovery/Download + 0324 5953-USB Enhanced Dynakey + 0325 5953-USB Enhanced Dynakey Flash-Recovery/Download + 0328 K016: USB-MSR ISO 3-track MSR: POS Standard (See HID pages) + 0329 K018: USB-MSR JIS 2-Track MSR: POS Standard + 032a K016: USB-MSR ISO 3-Track MSR: HID Keyboard Mode + 032b K016/K018: USB-MSR Flash-Recovery/Download +0405 Synopsys, Inc. +0406 Fujitsu-ICL Computers +0407 Fujitsu Personal Systems, Inc. +0408 Quanta Computer, Inc. +0409 NEC Corp. + 0011 PC98 Series Layout Keyboard Mouse + 0012 ATerm IT75DSU ISDN TA + 0014 Japanese Keyboard + 0019 109 Japanese Keyboard with Bus-Powered Hub + 001a PC98 Series Layout Keyboard with Bus-Powered Hub + 0025 Mini Keyboard with Bus-Powered Hub + 0027 MultiSync Monitor + 002c Clik!-USB Drive + 0034 109 Japanese Keyboard with One-touch start buttons + 003f Wireless Keyboard with One-touch start buttons + 0040 Floppy + 004e SuperScript 1400 Series + 004f Wireless Keyboard with One-touch start buttons + 0058 HighSpeed Hub + 0059 HighSpeed Hub + 005a HighSpeed Hub + 006a Conceptronic USB Harddisk Box + 0081 SuperScript 1400 Series + 0082 SuperScript 1400 Series + 0094 Japanese Keyboard with One-touch start buttons + 0095 Japanese Keyboard + 00a9 AtermIT21L 128K Support Standard + 00aa AtermITX72 128K Support Standard + 00ab AtermITX62 128K Support Standard + 00ac AtermIT42 128K Support Standard + 00ae INSMATEV70G-MAX Standard + 00af AtermITX70 128K Support Standard + 00b0 AtermITX80 128K Support Standard + 00b2 AtermITX80D 128K Support Standard + 00c0 Wireless Remocon + 00f7 Smart Display PK-SD10 + 011d e228 Mobile Phone + 0203 HID Audio Controls + 55aa Hub + 55ab Hub [iMac/iTouch kbd] + 8010 Intellibase Hub + 8011 Intellibase Hub + efbe P!cty 900 [HP DJ] + f0be P!cty 920 [HP DJ 812c] +040a Kodak Co. + 0001 DVC-323 + 0002 DVC-325 + 0100 DC-220 + 0110 DC-260 + 0111 DC-265 + 0112 DC-290 + 0120 DC-240 + 0121 DC-240 (PTP firmware) + 0130 DC-280 + 0131 DC-5000 + 0132 DC-3400 + 0140 DC-4800 + 0160 DC4800 + 0170 DX3900 + 0200 Digital Camera + 0300 EZ-200 + 0400 MC3 + 0402 Digital Camera + 0403 Z7590 + 0500 DX3500 + 0510 DX3600 + 0525 DX3215 + 0530 DX3700 + 0535 EasyShare CX4230 Camera + 0540 LS420 + 0550 DX4900 + 0555 DX4330 + 0560 CX4200 + 0565 CX4210 + 0566 CX4300 + 0567 LS753 + 0568 LS443 + 0569 LS663 + 0570 DX6340 + 0571 CX6330 + 0572 DX6440 + 0573 CX6230 + 0574 CX6200 + 0575 DX6490 + 0576 DX4530 + 0577 DX7630 + 0578 CX7300/CX7310 + 0579 CX7220 + 057a CX7330 + 057b CX7430 + 057c CX7530 + 057d DX7440 + 057e C300 + 057f DX7590 + 0580 Z730 + 0581 Digital Camera + 0582 Digital Camera + 0583 Digital Camera + 0584 CX6445 + 0585 Digital Camera + 0586 CX7525 + 0587 Digital Camera + 0588 Digital Camera + 0589 EasyShare C360 + 058a C310 + 058b Digital Camera + 058c C330 + 058d C340 + 058e V530 + 058f V550 + 0590 Digital Camera + 0591 Digital Camera + 0592 Digital Camera + 0593 Digital Camera + 0594 Digital Camera + 0595 Digital Camera + 0596 Digital Camera + 0597 Digital Camera + 0598 Digital Camera + 0599 Digital Camera + 059a Digital Camera + 059b Digital Camera + 059c Digital Camera + 059d Digital Camera + 059e Digital Camera + 059f Digital Camera + 05a0 Digital Camera + 05a1 Digital Camera + 05a2 Digital Camera + 05a3 Digital Camera + 05a4 Digital Camera + 05a5 Digital Camera + 05a6 Digital Camera + 05a7 Digital Camera + 05a8 Digital Camera + 05a9 Digital Camera + 05aa Digital Camera + 05ab Digital Camera + 05ac Digital Camera + 05ad Digital Camera + 05ae Digital Camera + 05af Digital Camera + 05b0 Digital Camera + 05b1 Digital Camera + 05b2 Digital Camera + 05b3 EasyShare Z710 Camera + 05b4 Digital Camera + 05b5 Digital Camera + 05b6 Digital Camera + 05b7 Digital Camera + 05b8 Digital Camera + 05b9 Digital Camera + 05ba Digital Camera + 05bb Digital Camera + 05bc Digital Camera + 05bd Digital Camera + 05be Digital Camera + 05bf Digital Camera + 05c0 Digital Camera + 05c1 Digital Camera + 05c2 Digital Camera + 05c3 Digital Camera + 05c4 Digital Camera + 05c5 Digital Camera + 4000 InkJet Color Printer + 410d EasyShare G600 Printer Dock + 5010 Wireless Adapter + 5012 DBT-220 Bluetooth Adapter + 6001 i30 + 6002 i40 + 6003 i50 + 6004 i60 + 6005 i80 +040b Weltrend Semiconductor + 6510 Weltrend Bar Code Reader + 6520 XBOX Xploder +040c VTech Computers, Ltd +040d VIA Technologies, Inc. + 3184 VNT VT6656 USB-802.11 Wireless LAN Adapter + 6205 USB 2.0 Card Reader +040e MCCI +040f Echo Speech Corp. +0411 MelCo., Inc. + 0001 LUA-TX Ethernet [pegasus] + 0005 LUA-TX Ethernet + 0006 WLI-USB-L11 Wireless LAN Adapter + 0009 LUA2-TX Ethernet + 000b WLI-USB-L11G-WR Wireless LAN Adapter + 000d WLI-USB-L11G Wireless LAN Adapter + 0012 LUA-KTX Ethernet + 0013 USB2-IDE Adapter + 0016 WLI-USB-S11 802.11b Adapter + 0018 USB2-IDE Adapter + 001c USB-IDE Bridge: DUB-PxxG + 0027 WLI-USB-KS11G 802.11b Adapter + 003d LUA-U2-KTX Ethernet + 0044 WLI-USB-KB11 Wireless LAN Adapter + 004d WLI-USB-B11 Wireless LAN Adapter + 0050 WLI2-USB2-G54 Wireless LAN Adapter + 005e WLI-U2-KG54-YB WLAN + 0065 Python2 WDM Encoder + 0066 WLI-U2-KG54 WLAN + 0067 WLI-U2-KG54-AI WLAN + 008b Nintendo Wi-Fi + 0091 WLI-U2-KAMG54 Wireless LAN Adapter + 0092 WLI-U2-KAMG54 Bootloader + 0097 WLI-U2-KG54-BB + 00a9 WLI-U2-AMG54HP Wireless LAN Adapter + 00aa WLI-U2-AMG54HP Bootloader + 00b3 PC-OP-RS1 RemoteStation + 00ca 802.11n Network Adapter + 00cb WLI-U2-G300N 802.11n Adapter + 00d8 WLI-U2-SG54HP + 00d9 WLI-U2-G54HP + 00da WLI-U2-KG54L +0412 Award Software International +0413 Leadtek Research, Inc. + 1310 WinFast TV - NTSC + FM + 1311 WinFast TV - NTSC + MTS + FM + 1312 WinFast TV - PAL BG + FM + 1313 WinFast TV - PAL BG+TXT + FM + 1314 WinFast TV Audio - PHP PAL I + 1315 WinFast TV Audio - PHP PAL I+TXT + 1316 WinFast TV Audio - PHP PAL DK + 1317 WinFast TV Audio - PHP PAL DK+TXT + 1318 WinFast TV - PAL I/DK + FM + 1319 WinFast TV - PAL N + FM + 131a WinFast TV Audio - PHP SECAM LL + 131b WinFast TV Audio - PHP SECAM LL+TXT + 131c WinFast TV Audio - PHP SECAM DK + 131d WinFast TV - SECAM DK + TXT + FM + 131e WinFast TV - NTSC Japan + FM + 1320 WinFast TV - NTSC + 1321 WinFast TV - NTSC + MTS + 1322 WinFast TV - PAL BG + 1323 WinFast TV - PAL BG+TXT + 1324 WinFast TV Audio - PHP PAL I + 1325 WinFast TV Audio - PHP PAL I+TXT + 1326 WinFast TV Audio - PHP PAL DK + 1327 WinFast TV Audio - PHP PAL DK+TXT + 1328 WinFast TV - PAL I/DK + 1329 WinFast TV - PAL N + 132a WinFast TV Audio - PHP SECAM LL + 132b WinFast TV Audio - PHP SECAM LL+TXT + 132c WinFast TV Audio - PHP SECAM DK + 132d WinFast TV - SECAM DK + TXT + 132e WinFast TV - NTSC Japan + 6023 EMP Audio Device + 6024 WinFast PalmTop/Novo TV Video + 6025 WinFast DTV Dongle (cold state) + 6026 WinFast DTV Dongle (warm state) + 6125 WinFast DTV Dongle + 6126 WinFast DTV Dongle BDA Driver + 6f00 WinFast DTV Dongle (STK7700P based) +0414 Giga-Byte Technology Co., Ltd +0416 Winbond Electronics Corp. + 0035 W89C35 802.11bg WLAN Adapter + 0101 Hub + 0961 AVL Flash Card Reader + 3810 Smart Card Controller + 3811 Generic Controller - Single interface + 3812 Smart Card Controller_2Interface + 3813 Panel Display + 5518 4-Port Hub + 551a PC Sync Keypad + 551b PC Async Keypad + 551c Sync Tenkey + 551d Async Tenkey + 551e Keyboard + 551f Keyboard w/ Sys and Media + 5521 Keyboard + 6481 16-bit Scanner + 7721 Memory Stick Reader/Writer + 7722 Memory Stick Reader/Writer + 7723 SD Card Reader +0417 Symbios Logic +0418 AST Research +0419 Samsung Info. Systems America, Inc. + 0001 IrDA Remote Controller + 3001 Xerox P1202 Laser Printer + 3003 Olivetti PG L12L + 3201 Docuprint P8ex + 3404 SCX-5x12 Series + 3406 MFP 830 Series + 3407 ML-912 + 3601 InkJet Color Printer + 3602 InkJet Color Printer + 4602 Remote NDIS Network Device + 8001 Hub + 8002 SyncMaster 757DFX HID Device +041a Phoenix Technologies, Ltd +041b d'TV +041d S3, Inc. +041e Creative Technology, Ltd + 1002 Nomad II + 1003 Blaster GamePad Cobra + 1050 GamePad Cobra + 3000 SoundBlaster Extigy + 3002 SB External Composite Device + 3010 SoundBlaster MP3+ + 3014 SB External Composite Device + 3015 Sound Blaster Digital Music LX + 3020 SoundBlaster Audigy 2 NX + 3030 SB External Composite Device + 3040 SoundBlaster Live! 24-bit External SB0490 + 3060 Sound Blaster Audigy 2 ZS External + 3061 SoundBlaster Audigy 2 ZS Video Editor + 3090 Sound Blaster Digital Music SX + 3f02 E-Mu 0202 + 3f04 E-Mu 0404 + 4003 VideoBlaster WebCam Go Plus [W9967CF] + 4004 Nomad II MG + 4005 WebCam Blaster Go ES + 4007 Go Mini + 400a PC-Cam 300 + 400b PC-Cam 600 + 400c WebCam 5 [pwc] + 400d WebCam PD1001 + 400f PC-CAM 550 (Composite) + 4011 WebCam PRO eX + 4012 PC-CAM350 + 4013 PC-Cam 750 + 4015 CardCam Value + 4016 CardCam + 4017 WebCam Mobile + 4018 WebCam Vista + 4019 Audio Device + 401c WebCam NX [PD1110] + 401d WebCam NX Ultra + 401e WebCam NX Pro + 401f Webcam Notebook + 4020 WebCam NX + 4021 WebCam NX Ultra + 4022 WebCam NX Pro + 4028 Vista Plus cam [VF0090] + 402f DC-CAM 3000Z + 4034 WebCam Instant + 4035 WebCam Instant + 4036 Webcam Live!/Live! Pro + 4037 WebCam Live! + 4038 ORITE CCD Webcam(PC370R) + 4039 WebCam Live! Effects + 403a WebCam NX Pro 2 + 403c WebCam Live! Ultra + 403d WebCam Notebook Ultra + 403e WebCam Vista Plus + 4041 WebCam Live! Motion + 4045 Live! Cam Voice + 4049 Live! Cam Voice + 4051 Live! Cam Notebook Pro + 4052 Live! Cam Vista IM + 4053 Live! Cam Video IM + 4054 Live! Cam Video IM + 4055 Live! Cam Video IM Pro + 4056 Live! Cam Video IM Pro + 4057 Live! Cam Optia + 4058 Live! Cam Optia AF + 4068 WebCam Live! Notebook + 4100 Nomad Jukebox 2 + 4101 Nomad Jukebox 3 + 4102 NOMAD MuVo^2 + 4106 Nomad MuVo + 4107 NOMAD MuVo + 4108 Nomad Jukebox Zen + 4109 Nomad Jukebox Zen NX + 410b Nomad Jukebox Zen USB 2.0 + 410c Nomad MuVo NX + 410f NOMAD MuVo^2 (Flash) + 4110 Nomad Jukebox Zen Xtra + 4111 Dell Digital Jukebox + 4116 MuVo^2 + 4117 Nomad MuVo TX + 411b Zen Touch + 411c Nomad MuVo USB 2.0 + 411d Zen + 411e Zen Micro + 4123 Zen Portable Media Center + 4124 MuVo^2 FM (uHDD) + 4126 Dell DJ (2nd gen) + 4127 Dell DJ + 4128 NOMAD Jukebox Zen Xtra (mtp) + 412b MuVo N200 with FM radio + 4130 Zen Micro (mtp) + 4131 Zen Touch (mtp) + 4133 Mass Storage Device + 4134 Zen Neeon + 4136 Zen Sleek + 4137 Zen Sleek (mtp) + 4139 Zen Nano Plus + 413c Zen MicroPhoto + 4151 Zen Vision:M (mtp) + 4155 Zen Stone plus + 500f Broadband Blaster 8012U-V + 5015 TECOM Bluetooth Device + ffff WebCam Live! Ultra +041f LCS Telegraphics +0420 Chips and Technologies + 1307 Celly SIM Card Reader +0421 Nokia Mobile Phones + 0018 6288 GSM Smartphone + 0019 6288 GSM Smartphone (imaging mode) + 001a 6288 GSM Smartphone (file transfer mode) + 0024 5610 XpressMusic (Storage mode) + 0025 5610 XpressMusic (PC-Suite mode) + 0028 5610 XpressMusic (Imaging mode) + 0096 N810 Internet Tablet + 0103 ADL Flashing Engine AVALON Parent + 0104 ADL Re-Flashing Engine Parent + 0105 E-61 (Firmware update mode) + 0106 ROM Parent + 0400 7600 Phone Parent + 0401 6650 GSM Phone + 0402 6255 Phone Parent + 0404 5510 + 0405 9500 GSM Communicator + 0407 Music Player HDR-1(tm) + 040b N-Gage GSM Phone + 040d 6620 Phone Parent + 040e 6651 Phone Parent + 040f 6230 GSM Phone + 0410 6630 Imaging Smartphone + 0411 7610 Phone Parent + 0413 6260 Phone Parent + 0414 7370 + 0415 9300 GSM Smartphone + 0416 6170 Phone Parent + 0417 7270 Phone Parent + 0418 E-70 (PC-Suite mode) + 0419 E-60 (PC-Suite mode) + 041a 9500 GSM Communicator (RNDIS) + 041b 9300 GSM Smartphone (RNDIS) + 041c 7710 Phone Parent + 041d 6670 Phone Parent + 041e 6680 + 041f 6235 Phone Parent + 0421 3230 Phone Parent + 0422 6681 Phone Parent + 0423 6682 Phone Parent + 0428 6230i Modem + 0429 6230i MultiMedia Card + 0431 770 Internet Tablet + 0432 N90 Phone Parent + 0435 E-70 (IP Passthrough/RNDIS mode) + 0436 E-60 (IP Passthrough/RNDIS mode) + 0437 6265 Phone Parent + 043a N70 USB Phone Parent + 043b 3155 Phone Parent + 043c 6155 Phone Parent + 043d 6270 Phone Parent + 0443 N70 Phone Parent + 044c NM850iG Phone Parent + 044d E-61 (PC Suite mode) + 044e E-61 (Data Exchange mode) + 044f E-61 (IP Passthrough/RNDIS mode) + 0453 9300 Phone Parent + 0456 6111 Phone Parent + 045a 6280 Phone Parent + 045d 6282 Phone Parent + 046e 6110 Navigator + 0485 MTP Device + 04c3 N800 Internet Tablet + 04ce E90 Communicator (PC-Suite mode) + 04cf E90 Communicator (Storage mode) + 04f9 6300 (PC-Suite mode) + 0600 Digital Pen SU-1B + 0800 Connectivity Cable DKU-5 + 0801 Data Cable DKU-6 + 0802 CA-42 Phone Parent +0422 ADI Systems, Inc. +0423 Computer Access Technology Corp. + 000a NetMate Ethernet + 000c NetMate2 Ethernet + 000d USB Chief Analyzer + 0100 Generic Universal Protocol Analyzer + 0101 UPA USBTracer + 0200 Generic 10K Universal Protocol Analyzer + 020a PETracer ML + 0300 Generic Universal Protocol Analyzer + 0301 2500H Tracer Trainer + 030a PETracer x1 + 1237 Andromeda Hub +0424 Standard Microsystems Corp. + 0001 Integrated Hub + 0acd Sitecom Internal Multi Memory reader/writer MD-005 + 0fdc Floppy + 10cd Sitecom Internal Multi Memory reader/writer MD-005 + 2020 USB Hub + 20cd Sitecom Internal Multi Memory reader/writer MD-005 + 20fc 6-in-1 Card Reader + 2228 9-in-2 Card Reader + 223a 8-in-1 Card Reader + 2503 USB 2.0 Hub + 2504 USB 2.0 Hub + 2524 USB MultiSwitch Hub +0425 Motorola Semiconductors HK, Ltd + 0101 G-Tech Wireless Mouse & Keyboard +0426 Integrated Device Technology, Inc. + 0426 WDM Driver +0427 Motorola Electronics Taiwan, Ltd +0428 Advanced Gravis Computer Tech, Ltd + 4001 GamePad Pro +0429 Cirrus Logic +042a Ericsson Austrian, AG +042b Intel Corp. + 9316 8x931Hx Customer Hub +042c Innovative Semiconductors, Inc. +042d Micronics +042e Acer, Inc. + 0380 MP3 Player +042f Molex, Inc. +0430 Sun Microsystems, Inc. + 0002 109 Keyboard + 0005 Type 6 Keyboard + 000a 109 Japanese Keyboard + 000b 109 Japanese Keyboard + 0082 109 Japanese Keyboard + 0083 109 Japanese Keyboard + 0100 3-button Mouse + 36ba Bus Powered Hub +0431 Itac Systems, Inc. + 0100 Mouse-Trak 3-button Track Ball +0432 Unisys Corp. +0433 Alps Electric, Inc. + 1101 IBM Game Controller + abab Keyboard +0434 Samsung Info. Systems America, Inc. +0435 Hyundai Electronics America +0436 Taugagreining HF + 0005 CameraMate (DPCM_USB) +0437 Framatome Connectors USA +0438 Advanced Micro Devices, Inc. +0439 Voice Technologies Group +043d Lexmark International, Inc. + 0001 Laser Printer + 0002 Optra E310 Printer + 0003 Laser Printer + 0004 Laser Printer + 0005 Laser Printer + 0006 Laser Printer + 0007 Laser Printer + 0008 Inkjet Color Printer + 0009 Optra S2450 Printer + 000a Laser Printer + 000b Inkjet Color Printer + 000c Optra E312 Printer + 000d Laser Printer + 000e Laser Printer + 000f Laser Printer + 0010 Laser Printer + 0011 Laser Printer + 0012 Inkjet Color Printer + 0013 Inkjet Color Printer + 0014 InkJet Color Printer + 0015 InkJet Color Printer + 0016 Z12 Color Jetprinter + 0017 Z32 printer + 0018 Z52 Printer + 0019 Forms Printer + 001a Z65 Printer + 001b InkJet Photo Printer + 001c Kodak Personal Picture Maker 200 Printer + 001d InkJet Color Printer + 001e InkJet Photo Printer + 001f Kodak Personal Picture Maker 200 Card Reader + 0020 Z51 Printer + 0021 Z33 Printer + 0022 InkJet Color Printer + 0023 Laser Printer + 0024 Laser Printer + 0025 InkJet Color Printer + 0026 InkJet Color Printer + 0027 InkJet Color Printer + 0028 InkJet Color Printer + 0029 Scan Print Copy + 002a Scan Print Copy + 002b Scan Print Copy + 002c Scan Print Copy + 002d X70/X73 Scan/Print/Copy + 002e Scan Print Copy + 002f Scan Print Copy + 0030 Scan Print Copy + 0031 Scan Print Copy + 0032 Scan Print Copy + 0033 Scan Print Copy + 0034 Scan Print Copy + 0035 Scan Print Copy + 0036 Scan Print Copy + 0037 Scan Print Copy + 0038 Scan Print Copy + 0039 Scan Print Copy + 003a Scan Print Copy + 003b Scan Print Copy + 003c Scan Print Copy + 003d X83 Scan/Print/Copy + 003e Scan Print Copy + 003f Scan Print Copy + 0040 Scan Print Copy + 0041 Scan Print Copy + 0042 Scan Print Copy + 0043 Scan Print Copy + 0044 Scan Print Copy + 0045 Scan Print Copy + 0046 Scan Print Copy + 0047 Scan Print Copy + 0048 Scan Print Copy + 0049 Scan Print Copy + 004a Scan Print Copy + 004b Scan Print Copy + 004c Scan Print Copy + 004d Laser Printer + 004e Laser Printer + 004f InkJet Color Printer + 0050 InkJet Color Printer + 0051 Laser Printer + 0052 Laser Printer + 0053 InkJet Color Printer + 0054 InkJet Color Printer + 0057 Z35 Printer + 0058 Laser Printer + 005a X63 + 005c InkJet Color Printer + 0060 X74/X75 Scanner + 0061 X74 Hub + 0065 X5130 + 0069 X74/X75 Printer + 006d X125 + 0072 X6170 Printer + 0073 InkJet Color Printer + 0078 InkJet Color Printer + 0079 InkJet Color Printer + 007a Generic Hub + 007b InkJet Color Printer + 007c Lexmark X1110/X1130/X1140/X1150/X1170/X1180/X1185 + 007d Photo 3150 + 008a 4200 Series + 008b InkJet Color Printer + 008c to CF/SM/SD/MS Card Reader + 008e InkJet Color Printer + 008f X422 + 0093 X5250 + 0095 E220 Printer + 0096 2200 Series + 0097 P6250 + 0098 7100 Series + 009e P910 Series Human Interface Device + 009f InkJet Color Printer + 00a9 IBM Infoprint 1410 MFP + 00ab InkJet Color Printer + 00b2 3300 Series + 00b8 7300 Series + 00b9 8300 Series + 00ba InkJet Color Printer + 00bb 2300 Series + 00bd Printing Support + 00be Printing Support + 00bf Printing Support + 00c0 6300 Series + 00c1 4300 Series + 00c7 Printing Support + 00c8 Printing Support + 00c9 Printing Support + 00cb Printing Support + 00d0 9300 Series + 00d3 X340 Scanner + 00d4 X342n Scanner + 00d5 Printing Support + 00d6 X340 Scanner + 00e8 X642e + 00e9 2400 Series + 00f6 3400 Series + 00f7 InkJet Color Printer + 00ff InkJet Color Printer + 010b 2500 Series + 010d 3500-4500 Series + 010f 6500 Series + 4303 Xerox WorkCentre Pro 412 +043e LG Electronics USA, Inc. + 42bd Flatron 795FT Plus Monitor + 4a4d Flatron 915FT Plus Monitor + 7001 MF-PD100 Soul Digital MP3 Player + 7013 MP3 Player + 8484 LPC-U30 Webcam II + 8585 LPC-UC35 Webcam + 8888 Electronics VCS Camera II(LPC-U20) + 9800 Remote Control Receiver_iMON + 9803 eHome Infrared Receiver + 9804 DMB Receiver Control + 9c01 LGE Sync +043f RadiSys Corp. +0440 Eizo Nanao Corp. +0441 Winbond Systems Lab. + 1456 Hub +0442 Ericsson, Inc. + abba Bluetooth Device +0443 Gateway, Inc. + 000e Multimedia Keyboard + 002e Millennium Keyboard +0445 Lucent Technologies, Inc. +0446 NMB Technologies Corp. + 6781 Keyboard with PS/2 Mouse Port + 6782 Keyboard +0447 Momentum Microsystems +044a Shamrock Tech. Co., Ltd +044b WSI +044c CCL/ITRI +044d Siemens Nixdorf AG +044e Alps Electric Co., Ltd + 1104 Japanese Keyboard + 2002 MD-5500 Printer + 2014 Bluetooth Device + 3001 UGTZ4 Bluetooth + 3002 Bluetooth Device + 3003 Bluetooth Device + 3004 Bluetooth Adapter + 3005 Integrated Bluetooth Device + 3006 Bluetooth Adapter + 3007 GlidePoint PS/2 TouchPad + 300c Bluetooth Controller (ALPS/UGPZ6) + 300d Bluetooth Controller (ALPS/UGPZ6) + ffff Compaq Bluetooth Multiport Module +044f ThrustMaster, Inc. + 0400 HOTAS Cougar + a003 Rage 3D Game Pad + a01b PK-GP301 Driving Wheel + a0a0 Top Gun Joystick + a0a1 Top Gun Joystick (rev2) + a0a3 Fusion Digital GamePad + a201 PK-GP201 PlayStick + b203 360 Modena Pro Wheel + b300 Firestorm Dual Power + b304 Firestorm Dual Power + b307 vibrating Upad + b603 force feedback Wheel + b605 force feedback Racing Wheel + b700 Tacticalboard +0450 DFI, Inc. +0451 Texas Instruments, Inc. + 1234 Bluetooth Device + 1428 Hub + 1446 TUSB2040/2070 Hub + 2036 TUSB2036 Hub + 2046 TUSB2046 Hub + 2077 TUSB2077 Hub + 3410 TUSB3410 Microcontroller + 3f02 SMC WSKP100 Wi-Fi Phone + 5409 Frontier Labs NEX IA+ Digital Audio Player + 6000 AU5 ADSL Modem (pre-reenum) + 6001 AU5 ADSL Modem + 6060 RNDIS/BeWAN ADSL2+ + 6070 RNDIS/BeWAN ADSL2+ + 625f Trekstor USB-Stick 12 CS-D 12 GB + dbc0 Device Bay Controller + e001 GraphLink + e004 TI-89 Titanium Calculator + e008 TI-84 Plus Silver Calculator + f430 MSP-FET430UIF JTAG Tool + ffff Bluetooth Device +0452 Mitsubishi Electronics America, Inc. + 0021 HID Monitor Controls + 0050 Diamond Pro 900u CRT Monitor + 0051 Integrated Hub +0453 CMD Technology + 6781 NMB Keyboard + 6783 Chicony Composite Keyboard +0454 Vobis Microcomputer AG +0455 Telematics International, Inc. +0456 Analog Devices, Inc. +0457 Silicon Integrated Systems Corp. + 0150 Super Talent 1GB Flash Drive + 0151 Super Flash 1GB / GXT 64MB Flash Drive + 0162 SiS162 usb Wireless LAN Adapter + 0163 802.11 Wireless LAN Adapter + 5401 Wireless Adapter RO80211GS-USB +0458 KYE Systems Corp. (Mouse Systems) + 0001 Mouse + 0002 Genius NetMouse Pro + 0003 Genius NetScroll+ + 0006 Easy Mouse+ USB(USB\Vid_0458&Pid;_0006) Mouse + 000b NetMouse Wheel(P+U) + 000c TACOMA Fingerprint V1.06.01 + 000e VideoCAM Web + 0013 TACOMA Fingerprint Mouse V1.06.01 + 001a Genius WebScroll+ + 0036 Pocket Mouse LE + 004c Slimstar Pro Keyboard + 0056 Ergo 300 Mouse + 0057 Enhanced Gaming Device + 0059 Enhanced Laser Device + 005a Enhanced Device + 005b Enhanced Device + 005c Enhanced Laser Gaming Device + 005d Enhanced Device + 0061 Bluetooth Dongle + 0083 Bluetooth Dongle + 0100 EasyPen Tablet + 0101 CueCat + 1001 Joystick + 1002 Game Pad + 1003 Genius VideoCam + 1004 Flight2000 F-23 Joystick + 100a Aashima Technology Trust Sight Fighter Vibration Feedback Joystick + 2001 ColorPage-Vivid Pro Scanner + 2004 ColorPage-HR6 V1 Scanner + 2005 ColorPage-HR6/Vivid3 + 2007 ColorPage-HR6 V2 Scanner + 2008 ColorPage-HR6 V2 Scanner + 2009 ColorPage-HR6A Scanner + 2011 ColorPage-Vivid3x Scanner + 2012 Plustek Scanner + 2013 ColorPage-HR7 Scanner + 2014 ColorPage-Vivid4 + 2015 ColorPage-HR7LE Scanner + 2016 ColorPage-HR6X Scanner + 2017 ColorPage-Vivid3xe + 2018 ColorPage-HR7X + 2019 ColorPage-HR6X Slim + 201a ColorPage-Vivid4xe + 201b ColorPage-Vivid4x + 201c ColorPage-HR8 + 201d ColorPage-Vivid 1200 X + 201e ColorPage-Slim 1200 + 201f ColorPage-Vivid 1200 XE + 2020 ColorPage-Slim 1200 USB2 + 2021 ColorPage-SF600 + 301d Genius MaxFire MiniPad + 6001 GF3000F Ethernet Adapter + 7004 VideoCAM Express + 7007 VideoCAM Web + 7009 G-Shot G312 Still Camera Device + 700c VideoCAM Web V3 + 700d G-Shot G511 Composite Device + 700f VideoCAM Web V4 + 7012 WebCAM USB2.0 + 7014 VideoCAM Live V3 + 701c G-Shot G512 Still Camera + 7020 Sim 321C +0459 Adobe Systems, Inc. +045a SONICblue, Inc. + 07da Supra Express 56K modem + 0b4a SupraMax 2890 56K Modem [Lucent Atlas] + 0b68 SupraMax 56K Modem + 5001 Rio 600 MP3 Player + 5002 Rio 800 MP3 Player + 5003 Nike Psa/Play MP3 Player + 5005 Rio S10 MP3 Player + 5006 Rio S50 MP3 Player + 5007 Rio S35 MP3 Player + 5008 Rio 900 MP3 Player + 5009 Rio S30 MP3 Player + 500d Fuse MP3 Player + 500e Chiba MP3 Player + 500f Cali MP3 Player + 5010 Rio S11 MP3 Player + 501c Virgin MPF-1000 + 501d Rio Fuse + 501e Rio Chiba + 501f Rio Cali + 503f Cali256 MP3 Player + 5202 Rio Riot MP3 Player + 5210 Rio Karma Music Player + 5220 Rio Nitrus MP3 Player + 5221 Rio Eigen +045b Hitachi, Ltd +045d Nortel Networks, Ltd +045e Microsoft Corp. + 0007 SideWinder Game Pad + 0008 SideWinder Precision Pro + 0009 IntelliMouse + 000b Natural Keyboard Elite + 000e SideWinder® Freestyle Pro + 0014 Digital Sound System 80 + 001a SideWinder Precision Racing Wheel + 001b SideWinder Force Feedback 2 Joystick + 001c Internet Keyboard Pro + 001d Natural Keyboard Pro + 001e IntelliMouse Explorer + 0023 Trackball Optical + 0024 Trackball Explorer + 0025 IntelliEye Mouse + 0026 SideWinder GamePad Pro + 0027 SideWinder PnP GamePad + 0028 SideWinder Dual Strike + 0029 IntelliMouse Optical + 002b Internet Keyboard Pro + 002d Internet Keyboard + 002f Integrated Hub + 0033 Sidewinder Strategic Commander + 0034 SideWinder Force Feedback Wheel + 0038 SideWinder Precision 2 + 0039 IntelliMouse Optical + 003b SideWinder Game Voice + 003c SideWinder Joystick + 0040 Wheel Mouse Optical + 0047 IntelliMouse Explorer 3.0 + 0048 Office Keyboard 1.0A + 0053 Optical Mouse + 0059 Wireless IntelliMouse Explorer + 005c Office Keyboard (106/109) + 005f Wireless MultiMedia Keyboard + 0061 Wireless MultiMedia Keyboard (106/109) + 0063 Wireless Natural MultiMedia Keyboard + 0065 Wireless Natural MultiMedia Keyboard (106/109) + 006a Wireless Optical Mouse (IntelliPoint) + 006d eHome Remote Control Keyboard keys + 006e MN510 802.11b Adapter + 006f Smart Display Reference Device + 0070 Wireless MultiMedia Keyboard + 0071 Wireless MultiMedia Keyboard (106/109) + 0072 Wireless Natural MultiMedia Keyboard + 0073 Wireless Natural MultiMedia Keyboard (106/109) + 007a 10/100 USB NIC + 007d Notebook Optical Mouse + 007e Wireless Transceiver for Bluetooth + 0080 Digital Media Pro Keyboard + 0083 Basic Optical Mouse + 0084 Basic Optical Mouse + 008a Wireless Keyboard and Mouse + 008b Dual Receiver Wireless Mouse (IntelliPoint) + 008c Wireless Intellimouse Explorer 2.0 + 0095 IntelliMouse Explorer 4.0 (IntelliPoint) + 009c Wireless Transceiver for Bluetooth 2.0 + 00a0 eHome Infrared Receiver + 00b0 Digital Media Pro Keyboard + 00b9 Wireless Optical Mouse 3.0 + 00bb Fingerprint Reader + 00bc Fingerprint Reader + 00bd Fingerprint Reader + 00c2 Wireless Adapter MN-710 + 00c9 MTP Device + 00ce Generic PPC Flash device + 00d1 Optical Mouse with Tilt Wheel + 00da eHome Infrared Receiver + 00db Natural Ergonomic Keyboard 4000 V1.0 + 00e1 Wireless Laser Mouse 6000 Reciever + 00f4 LifeCam VX-6000. + 00f5 LifeCam VX-3000. + 00f7 LifeCam VX-1000. + 00f8 LifeCam NX-6000. + 0202 Xbox Controller + 0280 XBox Device + 0284 Xbox DVD Playback Kit + 0285 Xbox Controller S + 0288 Xbox Controller S Hub + 0289 Xbox Controller S + 028b Xbox360 DVD Emulator + 028d Xbox360 Memory Unit 64MB + 028e Xbox360 Controller + 028f Xbox360 Wireless Controller + 0290 Xbox360 Performance Pipe (PIX) + 0292 Xbox360 Wireless Networking Adapter + 029c Xbox360 HD-DVD Drive + 029d Xbox360 HD-DVD Drive + 029e Xbox360 HD-DVD Memory Unit + 0400 Windows Powered Pocket PC 2002 + 0401 Windows Powered Pocket PC 2002 + 0402 Windows Powered Pocket PC 2002 + 0403 Windows Powered Pocket PC 2002 + 0404 Windows Powered Pocket PC 2002 + 0405 Windows Powered Pocket PC 2002 + 0406 Windows Powered Pocket PC 2002 + 0407 Windows Powered Pocket PC 2002 + 0408 Windows Powered Pocket PC 2002 + 0409 Windows Powered Pocket PC 2002 + 040a Windows Powered Pocket PC 2002 + 040b Windows Powered Pocket PC 2002 + 040c Windows Powered Pocket PC 2002 + 040d Windows Powered Pocket PC 2002 + 040e Windows Powered Pocket PC 2002 + 040f Windows Powered Pocket PC 2002 + 0410 Windows Powered Pocket PC 2002 + 0411 Windows Powered Pocket PC 2002 + 0412 Windows Powered Pocket PC 2002 + 0413 Windows Powered Pocket PC 2002 + 0414 Windows Powered Pocket PC 2002 + 0415 Windows Powered Pocket PC 2002 + 0416 Windows Powered Pocket PC 2002 + 0417 Windows Powered Pocket PC 2002 + 0432 Windows Powered Pocket PC 2003 + 0433 Windows Powered Pocket PC 2003 + 0434 Windows Powered Pocket PC 2003 + 0435 Windows Powered Pocket PC 2003 + 0436 Windows Powered Pocket PC 2003 + 0437 Windows Powered Pocket PC 2003 + 0438 Windows Powered Pocket PC 2003 + 0439 Windows Powered Pocket PC 2003 + 043a Windows Powered Pocket PC 2003 + 043b Windows Powered Pocket PC 2003 + 043c Windows Powered Pocket PC 2003 + 043d Becker Traffic Assist Highspeed 7934 + 043e Windows Powered Pocket PC 2003 + 043f Windows Powered Pocket PC 2003 + 0440 Windows Powered Pocket PC 2003 + 0441 Windows Powered Pocket PC 2003 + 0442 Windows Powered Pocket PC 2003 + 0443 Windows Powered Pocket PC 2003 + 0444 Windows Powered Pocket PC 2003 + 0445 Windows Powered Pocket PC 2003 + 0446 Windows Powered Pocket PC 2003 + 0447 Windows Powered Pocket PC 2003 + 0448 Windows Powered Pocket PC 2003 + 0449 Windows Powered Pocket PC 2003 + 044a Windows Powered Pocket PC 2003 + 044b Windows Powered Pocket PC 2003 + 044c Windows Powered Pocket PC 2003 + 044d Windows Powered Pocket PC 2003 + 044e Windows Powered Pocket PC 2003 + 044f Windows Powered Pocket PC 2003 + 0450 Windows Powered Pocket PC 2003 + 0451 Windows Powered Pocket PC 2003 + 0452 Windows Powered Pocket PC 2003 + 0453 Windows Powered Pocket PC 2003 + 0454 Windows Powered Pocket PC 2003 + 0455 Windows Powered Pocket PC 2003 + 0456 Windows Powered Pocket PC 2003 + 0457 Windows Powered Pocket PC 2003 + 0458 Windows Powered Pocket PC 2003 + 0459 Windows Powered Pocket PC 2003 + 045a Windows Powered Pocket PC 2003 + 045b Windows Powered Pocket PC 2003 + 045c Windows Powered Pocket PC 2003 + 045d Windows Powered Pocket PC 2003 + 045e Windows Powered Pocket PC 2003 + 045f Windows Powered Pocket PC 2003 + 0460 Windows Powered Pocket PC 2003 + 0461 Windows Powered Pocket PC 2003 + 0462 Windows Powered Pocket PC 2003 + 0463 Windows Powered Pocket PC 2003 + 0464 Windows Powered Pocket PC 2003 + 0465 Windows Powered Pocket PC 2003 + 0466 Windows Powered Pocket PC 2003 + 0467 Windows Powered Pocket PC 2003 + 0468 Windows Powered Pocket PC 2003 + 0469 Windows Powered Pocket PC 2003 + 046a Windows Powered Pocket PC 2003 + 046b Windows Powered Pocket PC 2003 + 046c Windows Powered Pocket PC 2003 + 046d Windows Powered Pocket PC 2003 + 046e Windows Powered Pocket PC 2003 + 046f Windows Powered Pocket PC 2003 + 0470 Windows Powered Pocket PC 2003 + 0471 Windows Powered Pocket PC 2003 + 0472 Windows Powered Pocket PC 2003 + 0473 Windows Powered Pocket PC 2003 + 0474 Windows Powered Pocket PC 2003 + 0475 Windows Powered Pocket PC 2003 + 0476 Windows Powered Pocket PC 2003 + 0477 Windows Powered Pocket PC 2003 + 0478 Windows Powered Pocket PC 2003 + 0479 Windows Powered Pocket PC 2003 + 047a Windows Powered Pocket PC 2003 + 047b Windows Powered Pocket PC 2003 + 04c8 Windows Powered Smartphone 2002 + 04c9 Windows Powered Smartphone 2002 + 04ca Windows Powered Smartphone 2002 + 04cb Windows Powered Smartphone 2002 + 04cc Windows Powered Smartphone 2002 + 04cd Windows Powered Smartphone 2002 + 04ce Windows Powered Smartphone 2002 + 04d7 Windows Powered Smartphone 2003 + 04d8 Windows Powered Smartphone 2003 + 04d9 Windows Powered Smartphone 2003 + 04da Windows Powered Smartphone 2003 + 04db Windows Powered Smartphone 2003 + 04dc Windows Powered Smartphone 2003 + 04dd Windows Powered Smartphone 2003 + 04de Windows Powered Smartphone 2003 + 04df Windows Powered Smartphone 2003 + 04e0 Windows Powered Smartphone 2003 + 04e1 Windows Powered Smartphone 2003 + 04e2 Windows Powered Smartphone 2003 + 04e3 Windows Powered Smartphone 2003 + 04e4 Windows Powered Smartphone 2003 + 04e5 Windows Powered Smartphone 2003 + 04e6 Windows Powered Smartphone 2003 + 04e7 Windows Powered Smartphone 2003 + 04e8 Windows Powered Smartphone 2003 + 04e9 Windows Powered Smartphone 2003 + 04ea Windows Powered Smartphone 2003 + 0708 Transceiver v 3.0 for Bluetooth + 070a Charon Bluetooth Dongle (DFU) + 930a ISOUSB.SYS Intel 82930 Isochronous IO Test Board + fff8 Keyboard +0460 Ace Cad Enterprise Co., Ltd +0461 Primax Electronics, Ltd + 0300 G2-300 Scanner + 0301 G2E-300 Scanner + 0302 G2-300 #2 Scanner + 0303 G2E-300 #2 Scanner + 0340 Colorado 9600 Scanner + 0341 Colorado 600u Scanner + 0345 Visioneer 6200 Scanner + 0346 Memorex Maxx 6136u Scanner + 0347 Primascan Colorado 2600u/Visioneer 4400 Scanner + 0360 Colorado 19200 Scanner + 0361 Colorado 1200u Scanner + 0363 VistaScan Astra 3600(ENG) + 0364 LG Electronics Scanworks 600U Scanner + 0365 VistaScan Astra 3600(ENG) + 0366 6400 + 0367 VistaScan Astra 3600(ENG) + 0371 Visioneer Onetouch 8920 Scanner + 0374 UMAX Astra 2500 + 0375 VistaScan Astra 3600(ENG) + 0377 Medion MD 5345 Scanner + 0378 VistaScan Astra 3600(ENG) + 037b Medion MD 6190 Scanner + 037c VistaScan Astra 3600(ENG) + 0380 G2-600 Scanner + 0381 ReadyScan 636i Scanner + 0382 G2-600 #2 Scanner + 0383 G2E-600 Scanner + 038a UMAX Astra 3000/3600 + 038b Xerox 2400 Onetouch + 038c UMAX Astra 4100 + 0392 Medion/Lifetec/Tevion/Cytron MD 6190 + 03a8 9420M + 0813 IBM UltraPort Camera + 0815 Micro Innovations WebCam + 0819 Fujifilm IX-30 Camera [webcam mode] + 081a Fujifilm IX-30 Camera [storage mode] + 081c Elitegroup ECS-C11 Camera + 081d Elitegroup ECS-C11 Storage + 0a00 Web Cam 320 + 4d01 Comfort Keyboard + 4d02 Mouse-in-a-Box + 4d03 Kensington Mouse-in-a-box + 4d04 Mouse + 4d06 Balless Mouse (HID) + 4d2a PoPo Elixir Mouse (HID) + 4d2b Wireless Laser Mini Mouse (HID) + 4d2c PoPo Mini Pointer Mouse (HID) + 4d2e Optical Mobile Mouse (HID) +0463 MGE UPS Systems + 0001 UPS + ffff UPS +0464 AMP/Tycoelectronics Corp. +0467 AT&T Paradyne +0468 Wieson Technologies Co., Ltd +046a Cherry GmbH + 0001 My3000 Keyboard + 0003 My3000 Hub + 0004 CyBoard Keyboard + 0005 XX33 SmartCard Reader Keyboard + 0010 SmartBoard XX44 + 0023 Cymotion Master Linux Keyboard + 002d SmartTerminal XX44 + 003e SmartTerminal ST-2xxx +046b American Megatrends, Inc. + 0001 Keyboard + 0101 PS/2 Keyboard, Mouse & Joystick Ports + 0301 USB 1.0 Hub + 0500 Serial & Parallel Ports +046c Toshiba Corp., Digital Media Equipment +046d Logitech, Inc. + 0082 Acer Aspire 5672 Webcam + 0200 WingMan Extreme Joystick + 0203 M2452 Keyboard + 0301 M4848 Mouse + 0401 HP PageScan + 0402 NEC PageScan + 040f Logitech/Storm PageScan + 0430 Mic (Cordless) + 0801 QuickCam Home + 0810 QuickCam Pro + 0820 QuickCam VC + 0830 QuickClip + 0840 QuickCam Express + 0850 QuickCam Web + 0870 QuickCam Express + 0890 QuickCam Traveler + 0892 OrbiCam + 0894 CrystalCam + 0895 QuickCam for Dell Notebooks + 0896 OrbiCam + 0897 QuickCam for Dell Notebooks + 0899 QuickCam for Dell Notebooks + 08a0 QuickCam IM + 08a1 QuickCam IM with sound + 08a2 Labtec WebCam Pro + 08a3 QuickCam QuickCam Chat + 08a6 QuickCam IM + 08a7 QuickCam Image + 08a9 Notebook Deluxe + 08aa Labtec Notebooks + 08ac QuickCam Cool + 08ad QuickCam Communicate STX + 08ae Quickcam for Notebooks + 08af QuickCam Easy/Cool + 08b0 QuickCam 3000 Pro [pwc] + 08b1 QuickCam Notebook Pro + 08b2 QuickCam Pro 4000 + 08b3 QuickCam Zoom + 08b4 QuickCam Zoom + 08b5 QuickCam Sphere + 08b9 QuickCam IM + 08bd Microphone (Pro 4000) + 08c0 QuickCam Pro 3000 + 08c1 QuickCam Fusion + 08c2 QuickCam PTZ + 08c3 Camera (Notebooks Pro) + 08c5 QuickCam Pro 5000 + 08c6 QuickCam for DELL Notebooks + 08c9 QuickCam Ultra Vision + 08ca Mic (Fusion) + 08cb Mic (Notebooks Pro) + 08cc Mic (PTZ) + 08ce QuickCam Pro 5000 + 08cf QuickCam UpdateMe + 08d0 QuickCam Express + 08d7 QuickCam Communicate STX + 08d8 QuickCam for Notebook Deluxe + 08d9 QuickCam IM/Connect + 08da QuickCam Messanger + 08dd QuickCam for Notebooks + 08e0 QuickCam Express + 08e1 Labtec WebCam + 08f0 QuickCam Messenger + 08f1 QuickCam Express + 08f2 Microphone (Messenger) + 08f3 QuickCam Express + 08f4 Labtec WebCam + 08f5 QuickCam Messenger Communicate + 08f6 Quickcam Messenger Plus + 0900 ClickSmart 310 + 0901 ClickSmart 510 + 0903 ClickSmart 820 + 0905 ClickSmart 820 + 0910 QuickCam Cordless + 0920 QuickCam Express + 0921 Labtec WebCam + 0922 QuickCam Live + 0928 Quickcam Express + 0929 Labtec WebCam Pro + 092a QuickCam for Notebooks + 092b Labtec WebCam Plus + 092c QuickCam Chat + 092d QuickCam Express / Go + 092e QuickCam Chat + 092f QuickCam Express Plus + 0950 Pocket Camera + 0960 ClickSmart 420 + 0970 Pocket750 + 0990 QuickCam Pro 9000 + 0991 QuickCam Pro for Notebooks + 0992 QuickCam Communicate Deluxe + 0994 QuickCam Orbit/Sphere AF + 09b0 OrbiCam + 09c0 QuickCam for Dell Notebooks Mic + 09c1 QuickCam Deluxe for Notebooks + 0a01 USB Headset + 0a02 Premium Stereo USB Headset 350 + 0a03 Logitech USB Microphone + 0a04 V20 portable speakers (USB powered) + 0b02 BT Mini-Receiver (HID proxy mode) + 8801 Video Camera + b305 BT Mini-Receiver + bfe4 Premium Optical Wheel Mouse + c000 N43 [Pilot Mouse] + c001 N48/M-BB48 [FirstMouse Plus] + c002 M-BA47 [MouseMan Plus] + c003 MouseMan + c004 WingMan Gaming Mouse + c005 WingMan Gaming Wheel Mouse + c00b MouseMan Wheel + c00c Optical Wheel Mouse + c00d MouseMan Wheel+ + c00e M-BJ58/M-BJ69 Optical Wheel Mouse + c00f MouseMan Traveler/Mobile + c011 Optical MouseMan + c012 Mouseman Dual Optical + c014 Corded Workstation Mouse + c015 Corded Workstation Mouse + c016 M-UV69a/HP M-UV96 Optical Wheel Mouse + c018 Optical Wheel Mouse + c019 Optical Tilt Wheel Mouse + c01a M-BQ85 Optical Wheel Mouse + c01b MX310 Optical Mouse + c01c Optical Mouse + c01d MX510 Optical Mouse + c01e MX518 Optical Mouse + c024 MX300 Optical Mouse + c025 MX500 Optical Mouse + c030 iFeel Mouse + c031 iFeel Mouse+ + c032 MouseMan iFeel + c033 iFeel MouseMan+ + c034 MouseMan Optical + c035 Mouse + c036 Mouse + c037 Mouse + c038 Mouse + c03d M-BT69a Pilot Optical Mouse + c03e Premium Optical Wheel Mouse + c03f UltraX Optical Mouse + c040 Corded Tilt-Wheel Mouse + c043 MX320 Laser Mouse + c044 LX3 Optical Mouse + c045 Optical Mouse + c046 RX1000 Laser Mouse + c047 Laser Mouse + c049 G5 Laser Mouse + c050 RX 250 Optical Mouse + c051 G3 (MX518) Optical Mouse + c053 Laser Mouse + c101 UltraX Media Remote + c201 WingMan Extreme Joystick with Throttle + c202 WingMan Formula + c207 WingMan Extreme Digital 3D + c208 WingMan Gamepad Extreme + c209 WingMan Gamepad + c20a WingMan RumblePad + c20b WingMan Action Pad + c20c WingMan Precision + c20d WingMan Attack 2 + c20e WingMan Formula GP + c211 iTouch Cordless Reciever + c212 WingMan Extreme Digital 3D + c213 J-UH16 (Freedom 2.4 Cordless Joystick) + c214 ATK3 (Attack III Joystick) + c215 Extreme 3D Pro + c216 Dual Action Gamepad + c218 Logitech RumblePad 2 USB + c219 Cordless RumblePad 2 + c21a Precision Gamepad + c221 G15 Keyboard / Keyboard + c222 G15 Keyboard / LCD + c223 G15 Keyboard / USB Hub + c281 WingMan Force + c283 WingMan Force 3D + c285 WingMan Strike Force 3D + c286 Force 3D Pro + c291 WingMan Formula Force + c293 WingMan Formula Force GP + c294 Driving Force + c295 Momo Force Steering Wheel + c298 Driving Force Pro + c2a0 Wingman Force Feedback Mouse + c2a1 WingMan Force Feedback Mouse + c301 iTouch Keyboard + c302 iTouch Pro Keyboard + c303 iTouch Keyboard + c305 Internet Keyboard + c307 Internet Keyboard + c308 Internet Navigator Keyboard + c309 Internet Keyboard + c30a iTouch Composite + c30c Internet Keys (X) + c30d Internet Keys + c30e UltraX Keys (X) + c30f Logicool HID-Compliant Keyboard (106 key) + c315 Classic New Touch Keyboard + c316 HID-Compliant Keyboard + c401 TrackMan Marble Wheel + c402 Marble Mouse (2-button) + c403 Turbo TrackMan Marble FX + c404 TrackMan Wheel + c408 Marble Mouse (4-button) + c501 Cordless Mouse Receiver + c502 Cordless Mouse & iTouch Keys + c503 Cordless Mouse+Keyboard Receiver + c504 Cordless Mouse+Keyboard Receiver + c505 Cordless Mouse+Keyboard Receiver + c506 MX-700 Cordless Mouse Receiver + c508 Cordless Trackball + c509 Cordless Keyboard + c50a Cordless Mouse + c50b Cordless Desktop Optical + c50d Cordless Mouse + c50e MX-1000 Cordless Mouse Receiver + c510 Cordless Mouse + c512 LX-700 Cordless Desktop Receiver + c513 MX3000 Cordless Desktop Receiver + c514 Cordless Mouse + c517 LX710 Cordless Desktop Laser + c518 MX610 Laser Cordless Mouse + c51a MX Revolution/G7 Cordless Mouse + c521 MX620 Laser Cordless Mouse + c625 3Dconnexion Space Pilot 3D Mouse + c626 3DConnexion Space Navigator 3D Mouse + c627 3DConnexion Space Explorer 3D Mouse + c702 Cordless Presenter + c703 Elite Keyboard Y-RP20 + Mouse MX900 (Bluetooth) + c707 Bluetooth wireless hub + c708 Bluetooth wireless hub + c709 BT Mini-Receiver (HCI mode) + c70a MX5000 Cordless Desktop + c70b BT Mini-Receiver (HID proxy mode) + c70c BT Mini-Receiver (HID proxy mode) + c70d Bluetooth wireless hub + c70e MX1000 Bluetooth Laser Mouse + c70f Bluetooth wireless hub + c712 Bluetooth wireless hub + c715 Bluetooth wireless hub + c71a Bluetooth wireless hub + c71d Bluetooth wireless hub + c720 Bluetooth wireless hub + ca03 MOMO Racing + ca04 Formula Vibration Feedback Wheel + d001 QuickCam Pro +046e Behavior Tech. Computer Corp. + 0100 Keyboard + 3001 Mass Storage Device + 3002 Mass Storage Device + 3003 Mass Storage Device + 3005 Mass Storage Device + 3008 Mass Storage Device + 5250 KeyMaestro Multimedia Keyboard + 5273 KeyMaestro Multimedia Keyboard + 5308 KeyMaestro Keyboard + 5408 KeyMaestro Multimedia Keyboard/Hub + 5720 Smart Card Reader + 6782 BTC 7932 mouse+keyboard +046f Crystal Semiconductor +0471 Philips + 0101 DSS350 Digital Speaker System + 0104 DSS330 Digital Speaker System [uda1321] + 0105 UDA1321 + 0160 MP3 Player + 0161 MP3 Player + 0201 Hub + 0222 Creative Nomad Jukebox + 0302 PCA645VC WebCam [pwc] + 0303 PCA646VC WebCam [pwc] + 0304 Askey VC010 WebCam [pwc] + 0307 PCVC675K WebCam [pwc] + 0308 PCVC680K WebCam [pwc] + 030b PC VGA Camera (Vesta Fun) + 030c PCVC690K WebCam [pwc] + 0310 PCVC730K WebCam [pwc] + 0311 PCVC740K ToUcam Pro [pwc] + 0312 PCVC750K WebCam [pwc] + 0314 DMVC 1000K + 0316 DMVC 2000K Video Capture + 0321 FunCam + 0325 SPC 200NC PC Camera + 0326 SPC 300NC PC Camera + 0327 WebCam SPC 6000 NC (WebCam w/ mic) + 0329 ORITE CCD Webcam(PC370R) + 0401 Semiconductors CICT Keyboard + 0402 PS/2 Mouse on Semiconductors CICT Keyboard + 0406 15 inch Detachable Monitor + 0407 10 inch Mobile Monitor + 0471 Digital Speaker System + 0601 OVU1020 IR Dongle (Kbd+Mouse) + 0602 ATI Remote Wonder II Input Device + 0603 ATI Remote Wonder II Controller + 0608 eHome Infrared Receiver + 060a TSU9600 Remote Control + 060e RF Dongle + 0619 TSU9400 Remote Control + 0700 Semiconductors CICT Hub + 0701 150P1 TFT Display + 0809 AVNET Bluetooth Device + 0811 JR24 CDRW + 0815 eHome Infrared Receiver + 1120 Creative Rhomba MP3 player + 1125 Nike psa[128max Player + 1137 HDD065 MP3 player + 1201 Arima Bluetooth Device + 1230 Wireless Adapter 11g + 1232 SNU6500 Wireless Adapter + 1233 Wireless Adapter Bootloader Download + 1236 SNU5600 + 1237 TalkTalk SNU5630NS/05 Wireless Adapter + 1552 ISP 1581 Hi-Speed USB MPEG2 Encoder Reference Kit + 1801 Diva MP3 player + 200a Wireless Network Adapter + 200f 802.11n Wireless Adapter + 485d Senselock SenseIV v2.x +0472 Chicony Electronics Co., Ltd + 0065 PFU-65 Keyboard +0473 Sanyo Information Business Co., Ltd +0474 Sanyo Electric Co., Ltd + 0110 Digital Voice Recorder R200 + 0217 Xacti J2 + 022f C5 Digital Media Camera (mass storage mode) + 0230 C5 Digital Media Camera (PictBridge mode) + 0231 C5 Digital Media Camera (PC control mode) + 0401 Optical Drive + 0701 SCP-4900 Cellphone + 071f Usb Com Port Enumerator +0475 Relisys/Teco Information System + 0100 NEC Petiscan + 0103 Eclipse 1200U/Episode + 0210 Scorpio Ultra 3 +0476 AESP +0477 Seagate Technology, Inc. +0478 Connectix Corp. + 0001 QuickCam + 0002 QuickClip + 0003 QuickCam Pro +0479 Advanced Peripheral Laboratories +047a Semtech Corp. + 0004 ScreenCoder UR7HCTS2-USB +047b Silitek Corp. + 0001 Keyboard + 0002 Keyboard and Mouse + 00f9 SK-1789u Keyboard + 0101 BlueTooth Keyboard and Mouse + 020b SK-3105 SmartCard Reader + 050e Internet Compact Keyboard + 1000 Trust Office Scan USB 19200 + 1002 HP ScanJet 4300c Parallel Port +047c Dell Computer Corp. +047d Kensington + 1001 Mouse*in*a*Box + 1002 Expert Mouse Pro + 1003 Orbit TrackBall + 1004 MouseWorks + 1005 TurboBall + 1006 TurboRing + 1009 Orbit TrackBall for Mac + 1012 PocketMouse + 1013 Mouse*in*a*Box Optical Pro + 1014 Expert Mouse Pro Wireless + 1015 Expert Mouse + 1016 ADB/USB Orbit + 1018 Studio Mouse + 101d Mouse*in*a*Box Optical Pro + 101e Studio Mouse Wireless + 101f PocketMouse Pro + 1020 Expert Mouse Trackball + 1021 Expert Mouse Wireless + 1022 Orbit Optical + 1023 Pocket Mouse Pro Wireless + 1024 PocketMouse + 1025 Mouse*in*a*Box Optical Elite Wireless + 1026 Pocket Mouse Pro + 1027 StudioMouse + 1028 StudioMouse Wireless + 1029 Mouse*in*a*Box Optical Elite + 102a Mouse*in*a*Box Optical + 102b PocketMouse + 102c Iridio + 102d Pilot Optical + 102e Pilot Optical Pro + 102f Pilot Optical Pro Wireless + 104a PilotMouse Mini Retractable + 105d PocketMouse Bluetooth + 105e Bluetooth EDR Dongle + 1061 PocketMouse Grip + 1062 PocketMouse Max + 1063 PocketMouse Max Wireless + 1064 PocketMouse 2.0 Wireless + 1065 PocketMouse 2.0 + 1066 PocketMouse Max Glow + 1067 ValueMouse + 1068 ValueOpt White + 1069 ValueOpt Black + 106a PilotMouse Laser Wireless Mini + 106b PilotMouse Laser - 3 Button + 106c PilotMouse Laser - Gaming + 106d PilotMouse Laser - Wired + 106e PilotMouse Micro Laser + 1070 ValueOpt Travel + 1071 ValueOpt RF TX + 1072 PocketMouse Colour + 1073 PilotMouse Laser - 6 Button + 1074 PilotMouse Laser Wireless Mini + 1075 SlimBlade Presenter Media Mouse + 1076 SlimBlade Media Mouse + 1077 SlimBlade Presenter Mouse + 1152 Bluetooth EDR Dongle + 2002 Optical Elite Wireless + 2010 Wireless Presentation Remote + 2021 PilotBoard Wireless + 2030 PilotBoard Wireless + 2034 SlimBlade Media Notebook Set + 4003 Gravis Xterminator Digital Gamepad + 4005 Gravis Eliminator GamePad Pro + 4006 Gravis Eliminator AfterShock + 4007 Gravis Xterminator Force + 4008 Gravis Destroyer TiltPad + 5001 Cabo I Camera + 5002 VideoCam CABO II + 5003 VideoCam +047e Agere Systems, Inc. (Lucent) + 0300 ORiNOCO Card + 1001 USS720 Parallel Port + 2892 Systems Soft Modem + bad1 Lucent 56k Modem + f101 Atlas Modem +047f Plantronics, Inc. + 0101 Bulk Driver + 0301 Bulk Driver + 0ca1 USB DSP v4 Audio Interface +0480 Toshiba America Info. Systems, Inc. + 0001 InTouch Module + 0004 InTouch Module + 0011 InTouch Module + 0014 InTouch Module +0481 Zenith Data Systems +0482 Kyocera Corp. + 000e FS-1020D Printer + 0100 Finecam S3x + 0101 Finecam S4 + 0103 Finecam S5 + 0105 Finecam L3 + 0106 Finecam + 0107 Digital Camera Device + 0108 Digital Camera Device + 0203 AH-K3001V + 0204 iBurst Terminal +0483 SGS Thomson Microelectronics + 0137 BeWAN ADSL USB ST (blue or green) + 1307 Cytronix 6in1 card reader + 163d Cool Icam Digi-MP3 + 2015 TouchChip® Fingerprint Reader + 2016 Fingerprint Reader + 2017 Biometric Smart Card Reader + 2018 BioSimKey + 2302 Portable Flash Device (PFD) + 4810 ISDN adapter + 481d BT Digital Access adapter + 5000 ST Micro Bluetooth Device + 5001 ST Micro Bluetooth Device + 7270 ST Micro Serial Bridge + 7554 56k SoftModem + ff10 Swann ST56 Modem +0484 Specialix +0485 Nokia Monitors +0486 ASUS Computers, Inc. +0487 Stewart Connector +0488 Cirque Corp. +0489 Foxconn / Hon Hai + 0502 SmartMedia Card Reader Firmware Loader + 0503 SmartMedia Card Reader +048a S-MOS Systems, Inc. +048c Alps Electric Ireland, Ltd +048d Integrated Technology Express, Inc. +048f Eicon Tech. +0490 United Microelectronics Corp. +0491 Capetronic + 0003 Taxan Monitor Control +0492 Samsung SemiConductor, Inc. +0493 MAG Technology Co., Ltd +0495 ESS Technology, Inc. +0496 Micron Electronics +0497 Smile International +0498 Capetronic (Kaohsiung) Corp. +0499 Yamaha Corp. + 1000 UX256 MIDI I/F + 1001 MU1000 + 1002 MU2000 + 1003 MU500 + 1004 UW500 + 1005 MOTIF6 + 1006 MOTIF7 + 1007 MOTIF8 + 1008 UX96 MIDI I/F + 1009 UX16 MIDI I/F + 100a EOS BX + 100c UC-MX + 100d UC-KX + 100e S08 + 100f CLP-150 + 1010 CLP-170 + 1011 P-250 + 1012 TYROS + 1013 PF-500 + 1014 S90 + 1015 MOTIF-R + 1016 MDP-5 + 1017 CVP-204 + 1018 CVP-206 + 1019 CVP-208 + 101a CVP-210 + 101b PSR-1100 + 101c PSR-2100 + 101d CLP-175 + 101e PSR-K1 + 101f EZ-J24 + 1020 EZ-250i + 1021 MOTIF ES 6 + 1022 MOTIF ES 7 + 1023 MOTIF ES 8 + 1024 CVP-301 + 1025 CVP-303 + 1026 CVP-305 + 1027 CVP-307 + 1028 CVP-309 + 1029 CVP-309GP + 102a PSR-1500 + 102b PSR-3000 + 102e ELS-01/01C + 1030 PSR-295/293 + 1031 DGX-205/203 + 1032 DGX-305 + 1033 DGX-505 + 2000 DGP-7 + 2001 DGP-5 + 3001 YST-MS55D USB Speaker + 4000 NetVolante RTA54i Broadband&ISDN Router + 4001 NetVolante RTW65b Broadband Wireless Router + 4002 NetVolante RTW65i Broadband&ISDN Wireless Router + 4004 NetVolante RTA55i Broadband VoIP Router + 5000 CS1D + 5001 DSP1D + 5002 DME32 + 5003 DM2000 + 5004 02R96 + 5005 ACU16-C + 5006 NHB32-C + 5007 DM1000 + 5008 01V96 + 5009 SPX2000 + 500a PM5D + 500b DME64N + 500c DME24N + 6001 CRW2200UX Lightspeed 2 External CD-RW Drive + 7000 DTX + 7010 UB99 +049a Gandalf Technologies, Ltd +049b Curtis Computer Products +049c Acer Advanced Labs, Inc. + 0002 Keyboard (???) +049d VLSI Technology +049f Compaq Computer Corp. + 0002 InkJet Color Printer + 0003 iPAQ PocketPC + 000e Internet Keyboard + 0012 InkJet Color Printer + 0018 PA-1/PA-2 MP3 Player + 0019 InkJet Color Printer + 001a S4 100 Scanner + 001e IJ650 Inkjet Printer + 001f WL215 Adapter + 0021 S200 Scanner + 0027 Bluetooth Multiport Module by Compaq + 002a 1400P Inkjet Printer + 002b A3000 + 002c Lexmark X125 + 0032 802.11b Adapter [ipaq h5400] + 0033 802.11b Adapter [orinoco] + 0036 Bluetooth Multiport Module + 0051 KU-0133 Easy Access Interner Keyboard + 0076 Wireless LAN MultiPort W200 + 0080 GPRS Multiport + 0086 Bluetooth Device + 504a Personal Jukebox PJB100 + 505a Linux-USB "CDC Subset" Device, or Itsy (experimental) + 8511 iPAQ Networking 10/100 Ethernet [pegasus2] +04a0 Digital Equipment Corp. +04a1 SystemSoft Corp. + fff0 Telex Composite Device +04a2 FirePower Systems +04a3 Trident Microsystems, Inc. +04a4 Hitachi, Ltd + 0004 DVD-CAM DZ-MV100A Camcorder + 001e DVDCAM USB HS Interface +04a5 Acer Peripherals Inc. (now BenQ Corp.) + 0001 Keyboard + 0002 API Ergo K/B + 0003 API Generic K/B Mouse + 12a6 AcerScan C310U + 1a20 Prisa 310U + 1a2a Prisa 620U + 2022 Prisa 320U/340U + 2040 Prisa 620UT + 205e ScanPrisa 640BU + 2060 Prisa 620U+/640U + 207e Prisa 640BU + 209e ScanPrisa 640BT + 20ae S2W 3000U + 20b0 S2W 3300U/4300U + 20be Prisa 640BT + 20c0 Prisa 1240UT + 20de S2W 4300U+ + 20f8 Benq 5000 + 20fc Benq 5000 + 20fe SW2 5300U + 2137 Benq 5150/5250 + 2202 Benq 7400UT + 3003 Benq WebCam + 3008 Benq 1500 + 300a Benq 3410 + 300c Benq 1016 + 3019 Benq DC C40 + 4000 P30 Composite Device + 6001 Mass Storage Device + 6002 Mass Storage Device + 6003 ATA/ATAPI Adapter + 6004 Mass Storage Device + 6005 Mass Storage Device + 6006 Mass Storage Device + 6007 Mass Storage Device + 6008 Mass Storage Device + 6009 Mass Storage Device + 600a Mass Storage Device + 600b Mass Storage Device + 600c Mass Storage Device + 600d Mass Storage Device + 600e Mass Storage Device + 600f Mass Storage Device + 6010 Mass Storage Device + 6011 Mass Storage Device + 6012 Mass Storage Device + 6013 Mass Storage Device + 6014 Mass Storage Device + 6015 Mass Storage Device + 6125 MP3 Player + 6180 MP3 Player + 6200 MP3 Player + 7500 Hi-Speed Mass Storage Device + 9000 AWL300 Wireless Adapter + 9001 AWL400 Wireless Adapter + 9213 Kbd Hub +04a6 Nokia Display Products + 00b9 Audio + 0180 Hub Type P + 0181 HID Monitor Controls +04a7 Visioneer + 0100 StrobePro + 0101 Strobe Pro Scanner (1.01) + 0102 StrobePro Scanner + 0211 OneTouch 7600 Scanner + 0221 OneTouch 5300 Scanner + 0223 OneTouch 8200 + 0224 OneTouch 4800 USB/Microtek Scanport 3000 + 0225 VistaScan Astra 3600(ENG) + 0226 OneTouch 5300 USB + 0229 OneTouch 7100 + 022a OneTouch 6600 + 022c OneTouch 9000/9020 + 0231 6100 Scanner + 0311 6200 EPP/USB Scanner + 0321 OneTouch 8100 EPP/USB Scanner + 0331 OneTouch 8600 EPP/USB Scanner + 0341 6400 + 0361 VistaScan Astra 3600(ENG) + 0362 OneTouch 9320 + 0371 OneTouch 8700/8920 + 0380 OneTouch 7700 + 0382 Photo Port 7700 + 0390 9650 + 03a0 Xerox 4800 One Touch + 0410 OneTouch Pro 8800/8820 + 0421 9450 USB + 0423 9750 Scanner + 0424 Strobe XP 450 + 0425 Strobe XP 100 + 0426 Strobe XP 200 + 0427 Strobe XP 100 + 0444 OneTouch 7300 + 0445 CardReader 100 + 0446 Xerox DocuMate 510 + 0447 XEROX DocuMate 520 + 0448 XEROX DocuMate 250 + 0449 Xerox DocuMate 252 + 044a Xerox 6400 + 044c Xerox DocuMate 262 + 0474 Strobe XP 300 + 0475 Xerox DocuMate 272 + 0478 Strobe XP 220 + 0479 Strobe XP 470 + 047a 9450 + 047b 9650 + 047d 9420 + 0480 9520 + 048f Strobe XP 470 + 0491 Strobe XP 450 + 0493 9750 + 0494 Strobe XP 120 + 0497 Patriot 430 + 0498 Patriot 680 + 0499 Patriot 780 + 049b Strobe XP 100 + 04a0 7400 +04a8 Multivideo Labs, Inc. + 0101 Hub + 0303 Peripheral Switch + 0404 Peripheral Switch +04a9 Canon, Inc. + 1005 BJ Printer Hub + 1035 PD Printer Storage + 1050 BJC-8200 + 1051 BJC-3000 Color Printer + 1052 BJC-6100 + 1053 BJC-6200 + 1054 BJC-6500 + 1055 BJC-85 + 1056 BJC-2110 Color Printer + 1057 LR1 + 105a BJC-55 + 105b S600 Printer + 105c S400 + 105d S450 Printer + 105e S800 + 1062 S500 Printer + 1063 S4500 + 1064 S300 Printer + 1065 S100 + 1066 S630 + 1067 S900 + 1068 S9000 + 1069 S820 + 106a S200 Printer + 106b S520 Printer + 106d S750 Printer + 106e S820D + 1070 S530D + 1072 I850 Printer + 1073 I550 Printer + 1074 S330 Printer + 1076 i70 + 1077 i950 + 107a S830D + 107b i320 + 107c i470D + 107d i9100 + 107e i450 + 107f i860 + 1082 i350 + 1084 i250 + 1085 i255 + 1086 i560 + 1088 i965 + 108a i455 + 108b i900D + 108c i475D + 108d PIXMA iP2000 + 108f i80 + 1090 i9900 Photo Printer + 1091 PIXMA iP1500 + 1093 PIXMA iP4000 + 1094 PIXMA iP3000x Printer + 1095 PIXMA iP6000D + 1097 PIXMA iP5000 + 1098 PIXMA iP1000 + 1099 PIXMA iP8500 + 109c PIXMA iP4000R + 109d iP90 + 10a0 PIXMA iP1600 Printer + 10a2 iP4200 + 10a4 iP5200R + 10a5 iP5200 + 10a7 iP6210D + 10a8 iP6220D + 10a9 iP6600D + 10b6 PIXMA iP4300 Printer + 1404 W6400PG + 1405 W8400PG + 150f BIJ2350 PCL + 1510 BIJ1350 PCL + 1512 BIJ1350D PCL + 1601 DR-2080C Scanner + 1607 DR-6080 Scanner + 1700 PIXMA MP110 Scanner + 1701 PIXMA MP130 Scanner + 1702 MP410 Composite + 1703 MP430 Composite + 1704 MP330 Composite + 1706 PIXMA MP750 Scanner + 1707 PIXMA MP780 Scanner + 1708 PIXMA MP760 Scanner + 1709 PIXMA MP150 Scanner + 170a PIXMA MP170 Scanner + 170b PIXMA MP450 Scanner + 170c PIXMA MP500 Scanner + 170d PIXMA MP800 Scanner + 170e MP800R + 1710 MP950 + 1712 MP530 + 1713 PIXMA MP830 Scanner + 1714 MP160 + 1715 MP180 Storage + 1716 MP460 Composite + 1717 MP510 + 1718 MP600 Storage + 171a MP810 Storage + 171b MP960 + 1721 MP210 ser + 1723 MP470 ser + 1725 MP610 ser + 1726 MP970 ser + 1727 MX300 ser + 1728 MX310 ser + 1729 MX700 ser + 172b MP140 ser + 2200 CanoScan LiDE 25 + 2201 CanoScan FB320U + 2202 CanoScan FB620U + 2204 CanoScan FB630U + 2205 CanoScan FB1210U + 2206 CanoScan N650U/N656U + 2207 CanoScan 1220U + 2208 CanoScan D660U + 220a CanoScan D2400UF + 220b CanoScan D646U + 220c CanoScan D1250U2 + 220d CanoScan N670U/N676U/LiDE 20 + 220e CanoScan N1240U/LiDE 30 + 220f CanoScan 8000F + 2210 CanoScan 9900F + 2212 CanoScan 5000F + 2213 CanoScan LiDE 50/LiDE 35/LiDE 40 + 2214 CanoScan LiDE 80 + 2215 CanoScan 3000/3000F/3000ex + 2216 CanoScan 3200F + 2217 CanoScan 5200F + 2219 CanoScan 9950F + 221b CanoScan 4200F + 221c CanoScan LiDE 60 + 221e CanoScan 8400F + 221f CanoScan LiDE 500F + 2220 CanoScan LIDE 25 + 2225 CanoScan LiDE 70 + 2228 CanoScan 4400F + 2602 MultiPASS C555 + 2603 MultiPASS C755 + 260a CAPT Printer + 260e LBP-2000 + 2610 MPC600F + 2611 SmartBase MPC400 + 2612 MultiPASS C855 + 2617 CAPT Printer + 261a iR1600 + 261b iR1610 + 261c iC2300 + 261f MPC200 Printer + 2621 iR2000 + 2622 iR2010 + 2623 FAX-B180C + 2629 FAXPHONE L75 + 262b LaserShot LBP-1120 Printer + 262d iR C3200 + 262f MultiPASS MP730 + 2630 MultiPASS MP700 + 2631 LASER CLASS 700 + 2632 FAX-L2000 + 2635 MPC190 + 2637 iR C6800 + 2638 iR C3100 + 263c Smartbase MP360 + 263d MP370 + 263e MP390 FAX + 263f MP375 + 2646 MF5530 Scanner Device V1.9.1 + 2647 MF5550 Composite + 264e MF5630 + 264f MF5650 (FAX) + 2650 iR 6800C EUR + 2651 iR 3100C EUR + 2655 FP-L170/MF350/L380/L398 + 2659 MF8100 + 265b CAPT Printer + 265c iR C3220 + 265d MF5730 + 265e MF5750 + 265f MF5770 + 2660 MF3110 + 2663 iR3570/iR4570 + 2664 iR2270/iR2870 + 2665 iR C2620 + 2666 iR C5800 + 2667 iR85PLUS + 2669 iR105PLUS + 266a CAPT Device + 266b iR8070 + 266c iR9070 + 266d iR 5800C EUR + 266e CAPT Device + 266f iR2230 + 2670 iR3530 + 2671 iR5570/iR6570 + 2672 iR C3170 + 2673 iR 3170C EUR + 2674 L120 + 2675 iR2830 + 2676 CAPT Device + 2677 iR C2570 + 2678 iR 2570C EUR + 2679 CAPT Device + 267a iR2016 + 267b iR2020 + 267d MF7100 Series + 2684 MF3200 Series + 2687 iR4530 + 2688 LBP3460 + 268c iR C6870 + 268d iR 6870C EUR + 268e iR C5870 + 268f iR 5870C EUR + 2691 iR7105 + 26a3 MF4100 Series + 26b5 MF4200 Series + 3041 PowerShot S10 + 3042 CanoScan FS4000US Film Scanner + 3043 PowerShot S20 + 3044 EOS D30 + 3045 PowerShot S100 + 3046 IXY Digital + 3047 Digital IXUS + 3048 PowerShot G1 + 3049 PowerShot Pro90 IS + 304a CP-10 + 304b IXY Digital 300 + 304c PowerShot S300 + 304d Digital IXUS 300 + 304e PowerShot A20 + 304f PowerShot A10 + 3050 PowerShot unknown 1 + 3051 PowerShot S110 + 3052 Digital IXUS V + 3055 PowerShot G2 + 3056 PowerShot S40 + 3057 PowerShot S30 + 3058 PowerShot A40 + 3059 PowerShot A30 + 305b ZR45MC Digital Camcorder + 305c PowerShot unknown 2 + 3060 EOS D60 + 3061 PowerShot A100 + 3062 PowerShot A200 + 3063 CP-100 + 3065 PowerShot S200 + 3066 Digital IXUS 330 + 3067 MV550i Digital Video Camera + 3069 PowerShot G3 + 306a Digital unknown 3 + 306b MVX2i Digital Video Camera + 306c PowerShot S45 + 306d PowerShot S45 PtP Mode + 306e PowerShot G3 (normal mode) + 306f PowerShot G3 (ptp) + 3070 PowerShot S230 + 3071 PowerShot S230 (ptp) + 3072 PowerShot SD100 / Digital IXUS II (ptp) + 3073 PowerShot A70 (ptp) + 3074 PowerShot A60 (ptp) + 3075 IXUS 400 Camera + 3076 PowerShot A300 + 3077 PowerShot S50 + 3078 ZR70MC Digital Camcorder + 307a MV650i (normal mode) + 307b MV630i Digital Video Camera + 307c MV630i (normal mode) + 307d CP-300 + 307f Optura 20 + 3080 MVX150i (normal mode) / Optura 20 (normal mode) + 3081 Optura 10 + 3082 MVX100i / Optura 10 + 3083 EOS 10D + 3084 EOS 300D / EOS Digital Rebel + 3085 PowerShot G5 + 3087 Elura 50 (PTP mode) + 3088 Elura 50 (normal mode) + 308d MVX3i + 308e FV M1 (normal mode) / MVX 3i (normal mode) / Optura Xi (normal mode) + 3093 Optura 300 + 3096 IXY DV M2 (normal mode) / MVX 10i (normal mode) + 3099 EOS 300D (ptp) + 309a PowerShot A80 + 309b Digital IXUS (ptp) + 309c PowerShot S1 IS + 309d Camera + 309f Camera + 30a0 Camera + 30a1 Camera + 30a2 Camera + 30a8 Elura 60E/Optura 40 (ptp) + 30a9 MVX25i (normal mode) / Optura 40 (normal mode) + 30b1 PowerShot S70 (normal mode) / PowerShot S70 (PTP mode) + 30b2 PowerShot S60 (normal mode) / PowerShot S60 (PTP mode) + 30b3 PowerShot G6 (normal mode) / PowerShot G6 (PTP mode) + 30b4 PowerShot S500 + 30b5 PowerShot A75 + 30b6 Digital IXUS II2 / Digital IXUS II2 (PTP mode) / PowerShot SD110 (PTP mode) / PowerShot SD110 Digital ELPH + 30b7 PowerShot A400 / PowerShot A400 (PTP mode) + 30b8 PowerShot A310 / PowerShot A310 (PTP mode) + 30b9 Powershot A85 + 30ba PowerShot S410 Digital Elph + 30bb PowerShot A95 + 30bd CP-220 + 30be CP-330 + 30bf Digital IXUS 40 + 30c0 Digital IXUS 30 (PTP mode) / PowerShot SD200 (PTP mode) + 30c1 Digital IXUS 50 (normal mode) / IXY Digital 55 (normal mode) / PowerShot A520 (PTP mode) / PowerShot SD400 (normal mode) + 30c2 PowerShot A510 (normal mode) / PowerShot A510 (PTP mode) + 30c4 Digital IXUS i5 (normal mode) / IXY Digital L2 (normal mode) / PowerShot SD20 (normal mode) + 30ea EOS 1D Mark II (PTP mode) + 30eb EOS 20D + 30ec EOS 20D (ptp) + 30ee EOS 350D + 30ef EOS 350D (ptp) + 30f0 PowerShot S2 IS (PTP mode) + 30f2 Digital IXUS 700 (normal mode) / Digital IXUS 700 (PTP mode) / IXY Digital 600 (normal mode) / PowerShot SD500 (normal mode) / PowerShot SD500 (PTP mode) + 30f6 SELPHY CP400 + 30f8 Powershot A430 + 30f9 PowerShot A410 (PTP mode) + 30fc PowerShot A620 (PTP mode) + 30fd PowerShot A610 (normal mode)/PowerShot A610 (PTP mode) + 30ff Digital IXUS 55 (PTP mode)/PowerShot SD450 (PTP mode) + 310b SELPHY CP600 + 310e Digital IXUS 50 (PTP mode) + 3116 Digital IXUS 750 (PTP mode) + 3117 PowerShot A700 + 3138 PowerShot A710 IS + 315a PowerShot G9 + 3176 PowerShot A590 + 31ff Digital IXUS 55 +04aa DaeWoo Telecom, Ltd +04ab Chromatic Research +04ac Micro Audiometrics Corp. +04ad Dooin Electronics + 2501 Bluetooth Device +04af Winnov L.P. +04b0 Nikon Corp. + 0102 Coolpix 990 + 0103 Coolpix 880 + 0104 Coolpix 995 + 0106 Coolpix 775 + 0107 Coolpix 5000 + 0108 Coolpix 2500 + 0109 Coolpix 2500 (ptp) + 010a Coolpix 4500 + 010b Coolpix 4500 (ptp) + 010d Coolpix 5700 (ptp) + 010e Coolpix 4300 (storage) + 010f Coolpix 4300 (ptp) + 0110 Coolpix 3500 (Sierra Mode) + 0111 Coolpix 3500 (ptp) + 0112 Coolpix 885 (ptp) + 0113 Coolpix 5000 (ptp) + 0114 Coolpix 3100 (storage) + 0115 Coolpix 3100 (ptp) + 0117 Coolpix 2100 (ptp) + 0119 Coolpix 5400 (ptp) + 011d Coolpix 3700 (ptp) + 0121 Coolpix 3200 (ptp) + 0122 Coolpix 2200 (ptp) + 0126 Coolpix 8800 + 0129 Coolpix 4800 (ptp) + 012c Coolpix 4100 (storage) + 012d Coolpix 4100 (ptp) + 012e Coolpix 5600 (ptp) + 0130 Coolpix 4600 (ptp) + 0135 Coolpix 5900 (ptp) + 0136 Coolpix 7900 (storage) + 0137 Coolpix 7900 (ptp) + 0141 Coolpix P2 (storage) + 0142 Coolpix P2 (ptp) + 0163 Coolpix P5100 (ptp) + 0169 Coolpix P50 (ptp) + 0202 Coolpix SQ (ptp) + 0203 Coolpix 4200 (mass storage mode) + 0204 Coolpix 4200 (ptp) + 0205 Coolpix 5200 (storage) + 0206 Coolpix 5200 (ptp) + 0301 Coolpix 2000 (storage) + 0302 Coolpix 2000 (ptp) + 0402 DSC D100 (ptp) + 0403 D2H (mass storage mode) + 0404 D2H SLR (ptp) + 0405 D70 (mass storage mode) + 0406 DSC D70 (ptp) + 0408 D2X SLR (ptp) + 0409 D50 digital camera + 040a D50 (ptp) + 040c D2Hs + 040e DSC D70s (ptp) + 0413 D40 (mass storage mode) + 4000 Coolscan LS 40 ED + 4001 LS 50 ED/Coolscan V ED + 4002 Super Coolscan LS-5000 ED +04b1 Pan International +04b3 IBM Corp. + 3003 Rapid Access III Keyboard + 3004 Media Access Pro Keyboard + 300a Rapid Access IIIe Keyboard + 3016 UltraNav Keyboard Hub + 3018 UltraNav Keyboard + 301b SK-8815 Keyboard + 301c Enhanced Performance Keyboard + 3020 Enhanced Performance Keyboard + 3100 NetVista Mouse + 3103 ScrollPoint Pro Mouse + 3104 ScrollPoint Wireless Mouse + 3105 ScrollPoint Optical (HID) + 3107 ThinkPad 800dpi Optical Travel Mouse + 3108 800dpi Optical Mouse w/ Scroll Point + 3109 Optical ScrollPoint Pro Mouse + 310b Red Wheel Mouse + 4427 Portable CD ROM + 4482 Serial Converter + 4525 Double sided CRT + 4550 NVRAM (128 KB) + 4554 Cash Drawer + 4580 Hub w/ NVRAM + 4581 4800-2xx Hub w/ Cash Drawer + 4604 Keyboard w/ Card Reader + 4671 4820 LCD w/ MSR/KB +04b4 Cypress Semiconductor Corp. + 0000 Dacal DC-101 CD Library + 0001 Mouse + 0002 CY7C63x0x Thermometer + 0101 Keyboard/Hub + 0102 Keyboard with APM + 0130 MyIRC Remote Receiver + 0bad MetaGeek Wi-Spy + 1002 CY7C63001 R100 FM Radio + 1006 Human Interface Device + 4381 SCAPS USC-1 Scanner Controller + 4611 Storage Adapter FX2 (CY) + 4616 Flash Disk (TPP) + 5500 HID->COM RS232 Adapter + 6370 ViewMate Desktop Mouse CC2201 + 6560 CY7C65640 USB-2.0 "TetraHub" + 6830 CY7C68300A EZ-USB AT2 USB 2.0 to ATA/ATAPI + 6831 Storage Adapter ISD-300LP (CY) + 7417 Wireless PC Lock + 8613 CY7C68013 EZ-USB FX2 USB 2.0 Development Kit + 8614 DTV-DVB UDST7020BDA DVB-S Box(DVBS for MCE2005) + cc04 Centor USB RACIA-ALVAR USB PORT + cc06 Centor-P RACIA-ALVAR USB PORT + d5d5 CY7C63x0x Zoltrix Z-Boxer GamePad + f000 CY30700 Licorice evaluation board +04b5 ROHM LSI Systems USA, LLC +04b6 Hint Corp. +04b7 Compal Electronics, Inc. +04b8 Seiko Epson Corp. + 0001 Stylus Color 740 / Photo 750 + 0002 ISD Smart Cable for Mac + 0003 ISD Smart Cable + 0004 Printer + 0005 Stylus D88+ + 0006 Printer + 0007 Printer + 0101 Perfection 636 + 0102 GT-2200 + 0103 Perfection 610 + 0104 Perfection 1200 + 0105 StylusScan 2000 + 0106 Stylus Scan 2500 + 0107 Expression 1600U + 0109 Expression 1640 XL + 010a Perfection 1640SU + 010b Perfection 1240 + 010c Perfection 640 + 010e Perfection 1680 + 010f Perfection 1250 + 0110 Perfection 1650 + 0112 Perfection 2450 + 0114 Perfection 660 + 0116 Perfection 3170 (GT-9400) + 0118 Perfection 4180 (GF-F600) + 0119 Perfection 4490 Photo + 011a 1000 ICS + 011b Perfection 2400 Photo + 011c Perfection 3200 + 011d Perfection 1260 Photo + 011e Perfection 1660 Photo + 011f Perfection 1670 + 0120 Perfection 1270 scanner + 0121 Perfection 2480 Photo + 0122 Perfection 3590 scanner + 0126 GT-15000 (ES-7000) + 0128 Perfection 4870 (GT-X700) + 0129 Expression 10000XL (ES-10000G) + 012a Perfection 4990 Photo scanner + 012b GT-2500 (ES-H300) + 012c Perfection V350 (GT-F700) + 012d Perfection V10/V100 (GT-S600/F650) + 012f Perfection V350 (GT-F700) + 0202 Receipt Printer M129C + 0401 CP 800 Digital Camera + 0402 PhotoPC 850z + 0403 PhotoPC 3000z + 0509 JVC PIX-MC10 + 0601 Stylus Photo 875DC Card Reader + 0602 Stylus Photo 895 Card Reader + 0801 Stylus CX5200/CX5400/CX6600 + 0802 Stylus CX3200 + 0803 Printer (Composite Device) + 0804 Storage Device + 0805 Stylus CX6400 + 0806 Stylus Photo RX600/610 + 0807 Stylus Photo RX500/510 + 0808 Stylus CX5200 + 0809 Storage Device + 080a Storage Device + 080c ME100 + 080d Stylus CX4500/4600 + 080e CX-3500/3600/3650 MFP + 080f Stylus Photo RX425 scanner + 0810 Stylus Photo RX700 (PM-A900) + 0811 Stylus Photo RX620 all-in-one + 0812 MFP Composite Device + 0813 Stylus CX6500/6600 + 0814 (PM-A700) + 0815 AcuLaser CX11 (LP-A500) + 0816 Printer (Composite Device) + 0817 (LP-M5500) + 0818 Stylus CX3700/CX3800/DX3800 + 0819 Stylus CX4700/CX4800/DX4800 (PX-A750) + 081a Stylus Photo RX520/RX530 (PM-A750) + 081b MFP Composite Device + 081c Stylus Photo RX640/RX650 (PM-A890) + 081d (PM-A950) + 081e MFP Composite Device + 081f Stylus CX7700/7800 + 0820 CX4200 MP scanner + 0821 MFP Composite Device + 0822 Storage Device + 0823 MFP Composite Device + 0824 Storage Device + 0825 MFP Composite Device + 0826 Storage Device + 0827 Stylus Photo RX560/580/590 (PM-A820) + 0828 (PM-A970) + 0829 (PM-T990) + 082a (PM-A920) + 082b Stylus DX5050 + 082c Storage Device + 082d Storage Device + 082e 0x082e DX-60x0 MFP scanner + 082f Stylus DX4050 + 0830 Stylus CX2800/CX2900/ME200 + 0831 MFP Composite Device + 0832 MFP Composite Device + 0833 (LP-M5600) + 0834 MFP Composite Device + 0835 AcuLaser CX21 + 0836 MFP Composite Device + 0837 MFP Composite Device + 0838 CX7300/CX7400/DX7400 + 0839 CX8300/CX8400/DX8400 + 083a CX9300F/CX9400Fax/DX9400F + 083b MFP Composite Device + 083c MFP Composite Device + 083d MFP Composite Device + 083e MFP Composite Device + 083f Stylus DX4450 +04b9 Rainbow Technologies, Inc. + 0300 SafeNet USB SuperPro/UltraPro + 1000 iKey 1000 Token + 1001 iKey 1200 Token + 1002 iKey Token + 1003 iKey Token + 1004 iKey Token + 1005 iKey Token + 1006 iKey Token + 1200 iKey 2000 Token + 1201 iKey Token + 1202 iKey 2032 Token + 1203 iKey Token + 1204 iKey Token + 1205 iKey Token + 1206 iKey Token + 1300 iKey 3000 Token + 1301 iKey 3000 + 1302 iKey Token + 1303 iKey Token + 1304 iKey Token + 1305 iKey Token + 1306 iKey Token +04ba Toucan Systems, Ltd +04bb I-O Data Device, Inc. + 0101 USB2-IDE/ATAPI Bridge Adapter + 0201 USB2-IDE/ATAPI Bridge Adapter + 0204 DVD Multi-plus unit iU-CD2 + 0206 DVD Multi-plus unit DVR-UEH8 + 0301 Storage Device + 0314 USB-SSMRW SD-card + 0319 USB2-IDE/ATAPI Bridge Adapter + 031a USB2-IDE/ATAPI Bridge Adapter + 031b USB2-IDE/ATAPI Bridge Adapter + 031e USB-SDRW SD-card + 0502 Nogatech Live! (BT) + 0901 USB ETT + 0904 ET/TX Ethernet [pegasus] + 0913 ET/TX-S Ethernet [pegasus2] + 0919 USB WN-B11 + 0922 IOData AirPort WN-B11/USBS 802.11b + 0930 ETG-US2 + 0937 WN-WAG/USL Wireless LAN Adapter + 0938 WN-G54/USL Wireless LAN Adapter + 0a03 Serial USB-RSAQ1 + 0a07 USB2-iCN Adapter + 0a08 USB2-iCN Adapter + 0c01 FM-10 Pro Disk +04bd Toshiba Electronics Taiwan Corp. +04be Telia Research AB +04bf TDK Corp. + 0100 MediaReader CF + 0115 USB-PDC Adapter UPA9664 + 0116 USB-cdmaOne Adapter UCA1464 + 0117 USB-PHS Adapter UHA6400 + 0118 USB-PHS Adapter UPA6400 + 0135 MediaReader Dual + 0202 73S1121F Smart Card Reader- + 0309 Bluetooth USB dongle + 030a IBM Bluetooth Ultraport Module + 030b Bluetooth Device + 030c Ultraport Bluetooth Device + 0310 Integrated Bluetooth + 0311 Integrated Bluetooth Device + 0317 Bluetooth UltraPort Module from IBM + 0318 IBM Integrated Bluetooth + 0319 Bluetooth Adapter + 0320 Bluetooth Adapter + 0321 Bluetooth Device + 0a28 INDI AV-IN Device +04c1 U.S. Robotics (3Com) + 0020 56K Voice Pro + 0022 56K Voice Pro + 007e ISDN TA + 0082 OfficeConnect Analog Modem + 008f Pro ISDN TA + 0097 OfficeConnect Analog + 009d HomeConnect WebCam [vicam] + 00a9 ISDN Pro TA-U + 00b9 HomeConnect IDSL Modem + 3021 56k Voice FaxModem Pro +04c2 Methode Electronics Far East PTE, Ltd +04c3 Maxi Switch, Inc. + 1102 Mouse + 2102 Mouse +04c4 Lockheed Martin Energy Research +04c5 Fujitsu, Ltd + 1029 fi-4010c Scanner + 1033 fi-4110CU + 1041 fi-4120c Scanner + 1042 fi-4220c Scanner + 105b AH-F401U Air H device + 1096 fi-5110EOX + 1097 fi-5110C + 10ae fi-4120C2 + 10af fi-4220C2 + 10e0 fi-5120c Scanner + 10e1 fi-5220C + 10e7 fi-5900C + 10fe S500 +04c6 Toshiba America Electronic Components +04c7 Micro Macro Technologies +04c8 Konica Corp. + 0720 Digital Color Camera + 0721 e-miniD Camera + 0722 e-mini + 0723 KD-200Z Camera + 0726 KD-310Z Camera + 0728 Revio C2 Mass Storage Device + 0729 Revio C2 Digital Camera + 072c Revio KD20M + 072d Revio KD410Z +04ca Lite-On Technology Corp. + 1766 HID Monitor Controls + 9304 Hub +04cb Fuji Photo Film Co., Ltd + 0100 FinePix 30i/40i/50i, A101/201, 1300/2200, 1400/2400/2600/2800/4500/4700/4800/4900/6800/6900 Zoom + 0103 FinePix NX-500/NX-700 printer + 0104 FinePix A101, 2600/2800/4800/6800 Zoom (PC CAM) + 0108 FinePix F601 Zoom (DSC) + 0109 FinePix F601 Zoom (PC CAM) + 010a FinePix S602 (Pro) Zoom (DSC) + 010b FinePix S602 (Pro) Zoom (PC CAM) + 010d FinePix Digital Camera 020531 + 010e FinePix F402 Zoom (DSC) + 010f FinePix F402 Zoom (PC CAM) + 0110 FinePix M603 Zoom (DSC) + 0111 FinePix M603 Zoom (PC CAM) + 0112 FinePix A202, A200 Zoom (DSC) + 0113 FinePix A202, A200 Zoom (PC CAM) + 0114 FinePix F401 Zoom (DSC) + 0115 FinePix F401 Zoom (PC CAM) + 0116 FinePix A203 Zoom (DSC) + 0117 FinePix A203 Zoom (PC CAM) + 0118 FinePix A303 Zoom (DSC) + 0119 FinePix A303 Zoom (PC CAM) + 011a FinePix S304/3800 Zoom (DSC) + 011b FinePix S304/3800 Zoom (PC CAM) + 011c FinePix A204/2650 Zoom (DSC) + 011d FinePix A204/2650 Zoom (PC CAM) + 0120 FinePix F700 Zoom (DSC) + 0121 FinePix F700 Zoom (PC CAM) + 0122 FinePix F410 Zoom (DSC) + 0123 FinePix F410 Zoom (PC CAM) + 0124 FinePix A310 Zoom (DSC) + 0125 FinePix A310 Zoom (PC CAM) + 0126 FinePix A210 Zoom (DSC) + 0127 FinePix A210 Zoom (PC CAM) + 0128 FinePix A205(S) Zoom (DSC) + 0129 FinePix A205(S) Zoom (PC CAM) + 012a FinePix F610 Zoom (DSC) + 012b FinePix Digital Camera 030513 + 012c FinePix S7000 Zoom (DSC) + 012d FinePix S7000 Zoom (PC CAM) + 012f FinePix Digital Camera 030731 + 0130 FinePix S5000 Zoom (DSC) + 0131 FinePix S5000 Zoom (PC CAM) + 013b FinePix Digital Camera 030722 + 013c FinePix S3000 Zoom (DSC) + 013d FinePix S3000 Zoom (PC CAM) + 013e FinePix F420 Zoom (DSC) + 013f FinePix F420 Zoom (PC CAM) + 0142 FinePix S7000 Zoom (PTP) + 0148 FinePix A330 Zoom (DSC) + 0149 FinePix A330 Zoom (UVC) + 014a FinePix A330 Zoom (PTP) + 014b FinePix A340 Zoom (DSC) + 0159 FinePix F710 Zoom (DSC) + 0165 FinePix S3500 Zoom (DSC) + 0168 FinePix E500 Zoom (DSC) + 0169 FinePix E500 Zoom (UVC) + 016b FinePix E510 Zoom (DSC) + 016c FinePix E510 Zoom (PC CAM) + 016e FinePix S5500 Zoom (DSC) + 016f FinePix S5500 Zoom (UVC) + 0171 FinePix E550 Zoom (DSC) + 0172 FinePix E550 Zoom (PTP) + 0177 FinePix F10 (DSC) + 0179 Finepix F10 (PTP) + 0186 FinePix S5200/S5600 Zoom (DSC) + 0188 FinePix S5200/S5600 Zoom (PTP) + 018e FinePix S9500 Zoom (DSC) + 018f FinePix S9500 Zoom (PTP) + 0192 FinePix E900 Zoom (DSC) + 0193 FinePix E900 Zoom (PTP) + 019b FinePix F30 (PTP) + 01bf FinePix F6000fd/S6500fd Zoom (PTP) + 01c0 FinePix F20 (PTP) + 01c1 FinePix F31fd (PTP) + 01c4 FinePix S5700 Zoom (PTP) + 01c5 FinePix F40fd (PTP) + 01c6 FinePix A820 Zoom (PTP) + 01d2 FinePix A800 Zoom (PTP) + 01d5 FinePix F47 (PTP) +04cc Philips Semiconductors + 1122 Hub + 1521 USB 2.0 Hub + 8116 Camera +04cd Tatung Co. Of America +04ce ScanLogic Corp. + 0002 SL11R-IDE IDE Bridge + 0100 USB2PRN Printer Class + 0300 Phantom 336CX - C3 scanner + 04ce SL11DEMO, VID: 0x4ce, PID: 0x4ce + 07d1 SL11R, VID: 0x4ce, PID: 0x07D1 +04cf Myson Century, Inc. + 0800 MTP800 Mass Storage Device + 8810 CS8810 Mass Storage Device + 8811 CS8811 Mass Storage Device + 8813 CS8813 Mass Storage Device + 8818 USB2.0 to ATAPI Bridge Controller +04d0 Digi International +04d1 ITT Canon +04d2 Altec Lansing Technologies + 0070 ADA70 Speakers + 0305 Non-Compliant Audio Device + 0311 ADA-310 Speakers + 2060 Claritel-i750 - vp + ff05 ADA-305 Speakers + ff47 Lansing HID Audio Controls + ff49 Lansing HID Audio Controls +04d3 VidUS, Inc. +04d4 LSI Logic, Inc. +04d5 Forte Technologies, Inc. +04d6 Mentor Graphics +04d7 Oki Semiconductor + 1be4 Bluetooth Device +04d8 Microchip Technology, Inc. + 0002 USB-LCD 2x20 + 8000 In-Circuit Debugger + 8001 ICD2 in-circuit debugger +04d9 Holtek Semiconductor, Inc. + 1203 MC Industries Keyboard +04da Panasonic (Matsushita) + 0901 LS-120 Camera + 0b01 CD-R/RW Drive + 0b03 SuperDisk 240MB + 0d01 CD-R Drive KXL-840AN + 0d09 CD-R Drive KXL-RW32AN + 0d0a CD-R Drive KXL-CB20AN + 0d0d CDRCB03 + 0d0e DVD-ROM & CD-R/RW + 0f40 Printer + 1500 MFSUSB Driver + 1b00 MultiMediaCard + 2121 EB-VS6 + 2317 DVC USB-SERIAL Driver for WinXP + 2319 NV-GS15 (webcam mode) + 231d DVC Web Camera Device + 231e DVC DV Stream Device + 2372 Lumix DMC-FZ10 Camera + 2374 DMC-FZ20 +04db Hypertec Pty, Ltd +04dc Huan Hsin Holdings, Ltd +04dd Sharp Corp. + 13a6 MFC2000 + 6006 AL-1216 + 6007 AL-1045 + 6008 AL-1255 + 6009 AL-1530CS + 600a AL-1540CS + 600b AL-1456 + 600c AL-1555 + 600d AL-1225 + 600e AL-1551CS + 600f AR-122E + 6010 AR-152E + 6011 AR-157E + 6012 SN-1045 + 6013 SN-1255 + 6014 SN-1456 + 6015 SN-1555 + 6016 AR-153E + 6017 AR-122E N + 6018 AR-153E N + 6019 AR-152E N + 601a AR-157E N + 601b AL-1217 + 601c AL-1226 + 601d AR-123E + 7002 DVC Ver.1.0 + 7004 VE-CG40U Digital Still Camera + 7005 VE-CG30 Digital Still Camera + 7007 VL-Z7S Digital Camcorder + 8004 Zaurus SL-5000D/SL-5500 PDA + 8005 Zaurus A-300 + 8006 Zaurus SL-B500/SL-5600 PDA + 8007 Zaurus C-700 PDA + 9014 IM-DR80 Portable NetMD Player + 9031 Zaurus C-750/C-760/C-860/SL-C3000 PDA + 9032 Zaurus SL-6000 + 903a GSM GPRS + 9050 Zaurus C-860 PDA + 9056 Viewcam Z + 9073 AM-900 + 9074 GSM GPRS + 90a9 Sharp Composite + 90d0 USB-to-Serial Comm. Port + 90f2 Sharp 3G GSM USB Control + 9120 WS004SH + 9122 WS007SH + 9123 W-ZERO3 ES Smartphone + 91a3 922SH Internet Machine +04de MindShare, Inc. +04df Interlink Electronics +04e1 Iiyama North America, Inc. + 0201 Monitor Hub +04e2 Exar Corp. +04e3 Zilog, Inc. +04e4 ACC Microelectronics +04e5 Promise Technology +04e6 SCM Microsystems, Inc. + 0001 E-USB ATA Bridge + 0002 eUSCSI SCSI Bridge + 0003 eUSB SmartMedia Card Reader + 0005 eUSB SmartMedia/CompactFlash Card Reader + 0006 eUSB SmartMedia Card Reader + 0007 Hifd + 0009 eUSB ATA/ATAPI Adapter + 000a eUSB CompactFlash Adapter + 000b eUSCSI Bridge + 000c eUSCSI Bridge + 000d Dazzle MS + 0012 Dazzle SD/MMC + 0101 eUSB ATA Bridge + 0311 Dazzle DM-CF + 0312 Dazzle DM-SD/MMC + 0313 Dazzle SM + 0314 Dazzle MS + 0322 e-Film Reader-5 + 0325 eUSB ORCA Quad Reader + 0327 Digital Media Reader + 03fe DMHS2 DFU Adapter + 0406 eUSB SmartDM Reader + 04e6 eUSB DFU Adapter + 04e7 STCII DFU Adapter + 04e8 eUSBDM DFU Adapter + 04e9 DM-E DFU Adapter + 0500 Veridicom 5thSense Fingerprint Sensor and eUSB SmartCard + 0701 DCS200 Loader Device + 0702 DVD Creation Station 200 + 0703 DVC100 Loader Device + 0704 Digital Video Creator 100 + 1001 SCR300 Smart Card Reader + 1010 USBAT-2 CompactFlash Card Reader + 1014 e-Film Reader-3 + 1020 USBAT ATA/ATAPI Adapter + 2007 RSA SecurID ComboReader + 2009 Citibank Smart Card Reader + 200a Reflex v.2 Smart Card Reader + 200d STR391 Reader + 5111 SCR331-DI SmartCard Reader + 5113 SCR333 SmartCard Reader + 5114 SCR331-DI SmartCard Reader + 5115 SCR335 SmartCard Reader + 5116 SCR331-LC1 SmartCard Reader + 5117 SCR3320 - Smart Card Reader + 5118 Expresscard SIM Card Reader + 5119 SCR3340 - ExpressCard54 Smart Card Reader + 511b SmartCard Reader + 511d SCR3311 Smart Card Reader + 5120 SCR331-DI SmartCard Reader + 5121 SDI010 Smart Card Reader + 5151 SCR338 Keyboard Smart Card Reader + 5410 SCR35xx Smart Card Reader + e000 SCRx31 Reader + e001 SCR331 SmartCard Reader + e003 SPR532 PinPad SmartCard Reader +04e7 Elo TouchSystems + 0001 TouchScreen + 0002 Touchmonitor Interface 2600 Rev 2 + 0004 4000U CarrollTouch® Touchmonitor Interface + 0007 2500U IntelliTouch® Touchmonitor Interface + 0008 3000U AccuTouch® Touchmonitor Interface + 0009 4000U CarrollTouch® Touchmonitor Interface + 0020 Touchscreen Interface (2700) + 0021 Touchmonitor Interface + 0030 4500U CarrollTouch® Touchmonitor Interface + 0032 Touchmonitor Interface + 0033 Touchmonitor Interface + 0041 5010 Surface Capacitive Touchmonitor Interface + 0042 Touchmonitor Interface + 0050 2216 AccuTouch® Touchmonitor Interface + 0071 Touchmonitor Interface + 0072 Touchmonitor Interface + 0081 Touchmonitor Interface + 0082 Touchmonitor Interface + 00ff Touchmonitor Interface +04e8 Samsung Electronics Co., Ltd + 0110 Connect3D Flash Drive + 0111 Connect3D Flash Drive + 1003 MP3 Player and Recorder + 1006 SDC-200Z + 3004 ML-4600 + 3005 Docuprint P1210 + 3008 ML-6060 laser printer + 300c ML-1210 Printer + 300e Laser Printer + 3104 ML-3550N + 3226 Laser Printer + 3228 Laser Printer + 322a Laser Printer + 322c Laser Printer + 3230 ML-1440 + 3232 Laser Printer + 3236 ML-1450 + 3238 ML-1430 + 323a ML-1710 Printer + 323b Phaser 3130 + 323c Laser Printer + 323d Phaser 3120 + 323e Laser Printer + 3240 Laser Printer + 3242 Laser Printer + 3248 Color Laser Printer + 324a Laser Printer + 324c ML-1740 Printer + 324d Phaser 3121 + 325f Phaser 3425 Laser Printer + 3260 CLP-510 Color Laser Printer + 3268 ML-1610 Mono Laser Printer + 326c ML-2010P Mono Laser Printer + 3409 SCX-4216F Scanner + 340c SCX-5x15 Series + 340d SCX-6x20 Series + 340e MFP 560 Series + 340f Printing Support + 3412 SCX-4x20 Series + 3413 SCX-4100 Scanner + 3415 Composite Device + 3419 Composite Device + 341a Printing Support + 341b SCX-4200 Series + 341c Composite Device + 341d Composite Device + 341f Composite Device + 3420 Composite Device + 3605 InkJet Color Printer + 3606 InkJet Color Printer + 3609 InkJet Color Printer + 3902 InkJet Color Printer + 3903 Xerox WorkCentre XK50cx + 390f InkJet Color Printer + 3911 SCX-1020 Series + 5000 YP-MF Series + 5001 YP-100 + 5002 YP-30 + 5003 YP-700 + 5004 YP-30 + 5005 YP-300 + 5006 YP-750 + 500d MP3 Player + 5010 MP3 Player + 5011 YP-780 + 5013 YP-60 + 5015 yepp upgrade + 501b MP3 Player + 503b YP-U1 MP3 Player + 5050 YP-U2 MP3 Player + 507d YP-U3 MP3 Player + 508b YP-S5 MP3 Player + 5a00 YP-NEU + 5a01 YP-NDU + 5a03 Yepp MP3 Player + 5a04 YP-800 + 5a08 YP-90 + 5a0f MTP Device + 5b01 Memory Stick Reader/Writer + 5b02 Memory Stick Reader/Writer + 5b03 Memory Stick Reader/Writer + 5b04 Memory Stick Reader/Writer + 5b05 Memory Stick Reader/Writer + 5b11 SEW-2001u Card + 5f00 NEXiO Sync + 5f01 NEXiO Sync + 5f02 NEXiO Sync + 5f03 NEXiO Sync + 5f04 NEXiO Sync + 6601 Z100 Mobile Phone + 6611 MITs Sync + 6613 MITs Sync + 6615 MITs Sync + 6617 MITs Sync + 6619 MITs Sync + 661b MITs Sync + 661e Handheld + 6620 Handheld + 6622 Handheld + 6624 Handheld + 662e MITs Sync + 6630 MITs Sync + 6632 MITs Sync + 663f SGH-E720/SGH-E840 + 6640 Usb Modem Enumerator + 7011 SEW-2003U Card + 7021 Bluetooth Device + 7061 eHome Infrared Receiver + 7081 Human Interface Device + 8001 Handheld + e020 SERI E02 SCOM 6200 UMTS Phone + e021 SERI E02 SCOM 6200 Virtual UARTs + e022 SERI E02 SCOM 6200 Flash Load Disk + ff30 SG_iMON +04e9 PC-Tel, Inc. +04ea Brooktree Corp. +04eb Northstar Systems, Inc. +04ec Tokyo Electron Device, Ltd +04ed Annabooks +04ef Pacific Electronic International, Inc. +04f0 Daewoo Electronics Co., Ltd +04f1 Victor Company of Japan, Ltd + 0001 GC-QX3 Digital Still Camera + 0004 GR-DVL815U Digital Video Camera + 0006 DV Camera Storage + 0008 GZ-MG30AA/MC500E Digital Video Camera + 0009 GR-DX25EK Digital Video Camera + 000a GR-D72 Digital Video Camera + 3008 MP-PRX1 Ethernet +04f2 Chicony Electronics Co., Ltd + 0001 KU-8933 Keyboard + 0002 NT68P81 Keyboard + 0110 KU-2971 Keyboard + 0111 KU-9908 Keyboard + 0112 KU-8933 Keyboard with PS/2 Mouse port + 0116 KU-2971 German Keyboard + 0403 KU-0420 keyboard + a001 E-Video DC-100 Camera + a120 ORITE CCD Webcam(PC370R) + a121 ORITE CCD Webcam(PC370R) + a122 ORITE CCD Webcam(PC370R) + a123 ORITE CCD Webcam(PC370R) + a124 ORITE CCD Webcam(PC370R) + a133 Gateway Webcam + a204 DSC WIA Device (1300) + a208 DSC WIA Device (2320) + a209 Labtec DC-2320 + a20a DSC WIA Device (3310) + a20c DSC WIA Device (3320) + a210 Audio Device + b009 Integrated Camera + b010 Integrated Camera + b012 1.3 MPixel UVC webcam + b018 Video Device + b022 Camera + b025 Camera + b027 Gateway Webcam + b028 VGA UVC WebCam +04f3 Elan Microelectronics Corp. + 0210 AM-400 Hama Optical Mouse +04f4 Harting Elektronik, Inc. +04f5 Fujitsu-ICL Systems, Inc. +04f6 Norand Corp. +04f7 Newnex Technology Corp. +04f8 FuturePlus Systems +04f9 Brother Industries, Ltd + 0002 HL-1050 Laser Printer + 0005 Printer + 0006 HL-1240 Laser Printer + 0007 HL-1250 Laser Printer + 0008 HL-1270 Laser Printer + 0009 Printer + 000a P2500 Series + 000b Printer + 000c Printer + 000d HL-1440 Laser Printer + 000e HL-1450 series + 000f HL-1470N series + 0010 Printer + 0011 Printer + 0012 Printer + 0013 Printer + 0014 Printer + 0015 Printer + 0016 Printer + 0017 Printer + 0018 Printer + 001c Printer + 001e Printer + 0020 HL-5130 series + 0021 HL-5140 series + 0022 HL-5150D series + 0023 HL-5170DN series + 0024 Printer + 0025 Printer + 0027 HL-2030 Laser Printer + 0028 Printer + 0029 Printer + 002a Printer + 002b Printer + 002c Printer + 002d Printer + 0100 MFC8600/9650 Series + 0101 MFC9600/9870 Series + 0102 MFC9750/1200 Series + 0104 MFC-8300J + 0105 MFC-9600J + 0106 MFC-7300C + 0107 MFC-7400C + 0108 MFC-9200C + 0109 MFC-830 + 010a MFC-840 + 010b MFC-860 + 010c MFC-7400J + 010d MFC-9200J + 010e MFC3100C Scanner + 010f MFC 5100C + 0110 MFC4800 Scanner + 0111 MFC 6800 + 0112 DCP1000 Port(FaxModem) + 0113 MFC-8500 + 0114 MFC9700 Port(FaxModem) + 0115 MFC9800 Scanner + 0116 DCP1400 Scanner + 0119 MFC-9660 + 011b MFC-9880 + 011c MFC-9760 + 011d MFC-9070 + 011e MFC-9180 + 011f MFC-9160 + 0120 MFC580 Port(FaxModem) + 0121 MFC-590 + 0122 MFC-5100J + 0129 Imagistics 2500 (MFC-8640D clone) + 012f FAX-4750e + 0132 MFC-5200C RemovableDisk + 0135 MFC-100 Scanner + 0136 MFC-150CL Scanner + 013c MFC-890 Port + 013d MFC-5200J Printer + 013e MFC-4420C RemovableDisk + 013f MFC-4820C RemovableDisk + 0140 DCP-8020 + 0141 DCP-8025D + 0142 MFC-8420 + 0143 MFC-8820D + 0144 DCP-4020C RemovableDisk + 0146 MFC-3220C + 0147 FAX-1820C Printer + 0148 MFC-3320CN Printer + 0149 FAX-1920CN Printer + 014a MFC-3420C + 014b MFC-3820CN + 014d FAX-1815C Printer + 014e MFC-8820J + 0150 MFC-8220 Port(FaxModem) + 0151 MFC-8210J + 0157 MFC-3420J Printer + 0158 MFC-3820JN Port(FaxModem) + 015d MFC Composite Device + 015e DCP-8045D + 015f MFC-8440 + 0160 MFC-8840D + 0161 MFC-210C + 0162 MFC-420CN Remote Setup Port + 0163 MFC-410CN RemovableDisk + 0165 MFC-620CN + 0166 MFC-610CLN RemovableDisk + 0168 MFC-620CLN + 0169 DCP-110C RemovableDisk + 016b DCP-310CN RemovableDisk + 016c FAX-2440C Printer + 016d MFC-5440CN + 016e MFC-5840CN Remote Setup Port + 0170 FAX-1840C Printer + 0171 FAX-1835C Printer + 0172 FAX-1940CN Printer + 0173 MFC-3240C Remote Setup Port + 0174 MFC-3340CN RemovableDisk + 017b Imagistics sx2100 + 0180 MFC-7420 + 0181 MFC-7820N Port(FaxModem) + 0182 Composite Device + 0183 DCP-7020 + 0184 DCP-7025 Printer + 0185 MFC-7220 Printer + 0186 Composite Device + 0187 FAX-2820 Printer + 0188 FAX-2920 Printer + 018a MFC-9420CN + 018c DCP-115C + 018d DCP-116C + 018e DCP-117C + 018f DCP-118C + 0190 DCP-120C + 0191 DCP-315CN + 0192 DCP-340CW + 0193 MFC-215C + 0194 MFC-425CN + 0195 MFC-820CW Remote Setup Port + 0196 MFC-820CN Remote Setup Port + 0197 MFC-640CW + 019a MFC-840CLN Remote Setup Port + 01a2 MFC-8640D + 01a3 Composite Device + 01a4 DCP-8065DN Printer + 01a5 MFC-8460N Port(FaxModem) + 01a6 MFC-8860DN Port(FaxModem) + 01a7 MFC-8870DW Printer + 01a8 DCP-130C + 01a9 DCP-330C + 01aa DCP-540CN + 01ab MFC-240C + 01ae DCP-750CW RemovableDisk + 01af MFC-440CN + 01b0 MFC-660CN + 01b1 MFC-665CW Remote Setup Port + 01b2 MFC-845CW Remote Setup Port + 01b4 MFC-460CN Remote Setup Port + 01b5 MFC-630CD + 01b6 MFC-850CDN + 01b7 MFC-5460CN Remote Setup Port + 01b8 MFC-5860CN + 01ba MFC-3360C + 01bd MFC-8660DN + 01be DCP-750CN RemovableDisk + 01bf MFC-860CDN Remote Setup Port + 01c0 DCP-128C + 01c1 DCP-129C + 01c2 DCP-131C + 01c3 DCP-329C + 01c4 DCP-331C + 01c5 MFC-239C + 01ca MFC-9440CN Remote Setup Port + 01ce DCP-135C + 01cf DCP-150C + 01d0 DCP-350C + 01d1 DCP-560CN + 01d4 MFC-230C + 01d5 MFC-235C + 01d6 MFC-260C + 01df DCP-155C + 01e0 MFC-265C + 01e1 DCP-153C + 01e2 DCP-157C + 01e3 DCP-353C + 01e4 DCP-357C + 1000 Printer + 1002 Printer + 2002 PTUSB Printing + 2004 PT-2300/2310 p-Touch Laber Printer + 2015 QL-500 P-touch label printer + 2100 Card Reader Writer +04fa Dallas Semiconductor + 2490 DS1490F 2-in-1 Fob, 1-Wire adapter + 4201 DS4201 Audio DAC +04fb Biostar Microtech International Corp. +04fc Sunplus Technology Co., Ltd + 0003 CM1092 Optical Scroller Mouse + 0013 ViewMate Desktop Mouse CC2201 + 0015 ViewMate Desktop Mouse CC2201 + 0232 Fingerprint + 0561 Flexcam 100 + 1533 Mass Storage + 504a SPCA504a Digital Camera + 504b Aiptek, 1.3 mega PockerCam + 5330 Digitrex 2110 + 5331 Vivitar Vivicam 10 + 5720 Card Reader Driver + 7333 Finet Technology Palmpix DC-85 + 757a Aiptek, MP315 MP3 Player + ffff PureDigital Ritz Disposable +04fd Soliton Systems, K.K. + 0003 Smart Card Reader II +04fe PFU, Ltd +04ff E-CMOS Corp. +0500 Siam United Hi-Tech + 0001 DART Keyboard Mouse + 0002 DART-2 Keyboard +0501 Fujikura DDK, Ltd +0502 Acer, Inc. + 0001 Handheld + 0736 Handheld + 15b1 PDA n311 + 1631 c10 Series + 1632 c20 Series + 16e1 n10 Handheld Sync + 16e2 n20 Pocket PC Sync + 16e3 n30 Handheld Sync + d001 Divio NW801/DVC-V6+ Digital Camera +0503 Hitachi America, Ltd +0504 Hayes Microcomputer Products +0506 3Com Corp. + 009d HomeConnect Camera + 00a0 3CREB96 Bluetooth Adapter + 00a1 Bluetooth Device + 00a2 Bluetooth Device + 00df 3Com Home Connect lite + 0100 HomeConnect ADSL Modem Driver + 03e8 3C19250 Ethernet [klsi] + 0a01 3CRSHEW696 Wireless Adapter + 0a11 3CRWE254G72 802.11g Adapter + 11f8 HomeConnect 3C460 + 2922 HomeConnect Cable Modem External with + 3021 U.S.Robotics 56000 Voice FaxModem Pro + 4601 3C460B 10/100 Ethernet Adapter + f002 3CP4218 ADSL Modem (pre-init) + f003 3CP4218 ADSL Modem + f100 3CP4218 ADSL Modem (pre-init) +0507 Hosiden Corp. + 0011 Konami ParaParaParadise Controller +0508 Clarion Co., Ltd +0509 Aztech Systems, Ltd + 0801 ADSL Modem + 0802 ADSL Modem (RFC1483) + 0806 DSL Modem + 080f Binatone ADSL500 Modem Network Interface + 0812 Pirelli ADSL Modem Network Interface +050a Cinch Connectors +050b Cable System International +050c InnoMedia, Inc. +050d Belkin Components + 0004 Direct Connect + 0012 F8T012 Bluetooth Adapter + 0013 F8T013 Bluetooth Adapter + 0050 F5D6050 802.11b Wireless Adapter + 0081 F8T001v2 Bluetooth + 0083 Bluetooth Device + 0084 F8T003v2 Bluetooth + 0102 Flip KVM + 0103 F5U103 Serial Adapter [etek] + 0106 VideoBus II Adapter, Video + 0108 F1DE108B KVM + 0109 F5U109/F5U409 PDA Adapter + 0115 SCSI Adapter + 0119 F5U120-PC Dual PS/2 Ports + 0121 F5D5050 100Mbps Ethernet + 0122 Ethernet Adapter + 0131 Bluetooth Device with trace filter + 0201 Peripheral Switch + 0208 USBView II Video Adapter [nt1004] + 0210 F5U228 Hi-Speed USB 2.0 DVD Creator + 0211 F5U211 USB 2.0 15-in-1 Media Reader & Writer + 0224 F5U224 USB 2.0 4-Port Hub + 0234 F5U234 USB 2.0 4-Port Hub + 0237 F5U237 USB 2.0 7-Port Hub + 0240 F5U240 USB 2.0 CF Card Reader + 0257 F5U257 Serial + 0409 F5U409 Serial + 0551 F6C550-AVR UPS + 0802 Nostromo n40 Gamepad + 0803 Nostromo 1745 GamePad + 0805 Nostromo N50 GamePad + 0815 Nostromo n52 HID SpeedPad Mouse Wheel + 0826 ErgoFit Wireless Optical Mouse (HID) + 0980 HID UPS Battery + 1202 F5U120-PC Parallel Printer Port + 1203 F5U120-PC Serial Port + 258a F5U258 Host to Host cable + 3101 F1DF102U/F1DG102U Flip Hub + 3201 F1DF102U/F1DG102U Flip KVM + 4050 ZD1211B + 5055 F5D5055 + 6051 11Mbps Wireless Network Adapter + 7050 F5D7050 ver 1000 WiFi + 7051 F5D7051 54g USB Network Adapter + 705a F5D7050A Wireless Adapter + 705b Wireless G Adapter + 705c F5D7050 v4000 Wireless Adapter + 905b F5D9050 ver 3 Wireless Adapter + 905c Wireless G Plus MIMO Network Adapter +050e Neon Technology, Inc. +050f KC Technology, Inc. + 0001 Hub + 0003 KC82C160S Hub + 0180 KC-180 IrDA Dongle + 0190 KC2190 USB Host-to-Host cable +0510 Sejin Electron, Inc. + 0001 Keyboard + 1000 Keyboard with PS/2 Mouse Port + e001 Mouse +0511 N'Able (DataBook) Technologies, Inc. +0512 Hualon Microelectronics Corp. +0513 digital-X, Inc. +0514 FCI Electronics +0515 ACTC +0516 Longwell Electronics +0517 Butterfly Communications +0518 EzKEY Corp. + 0001 USB to PS2 Adaptor v1.09 + 0002 EZ-9900C Keyboard +0519 Star Micronics Co., Ltd + c002 Xlive Bluetooth XBM-100S MP3 Player +051a WYSE Technology + a005 Smart Display Version 9973 +051b Silicon Graphics +051c Shuttle, Inc. + c001 eHome Infrared Receiver + c002 eHome Infrared Receiver +051d American Power Conversion + 0001 UPS + 0002 Uninterruptible Power Supply + 0003 UPS +051e Scientific Atlanta, Inc. +051f IO Systems (Elite Electronics), Inc. +0520 Taiwan Semiconductor Manufacturing Co. +0521 Airborn Connectors +0522 Advanced Connectek, Inc. +0523 ATEN GmbH +0524 Sola Electronics +0525 Netchip Technology, Inc. + 100d RFMD Bluetooth Device + 1080 NET1080 USB-USB Bridge + a140 USB Clik! 40 + a141 (OME) PocketZip 40 MP3 Player Driver + a220 GVC Bluetooth Wireless Adapter + a4a0 Linux-USB "Gadget Zero" + a4a1 Linux-USB Ethernet Gadget + a4a2 Linux-USB Ethernet/RNDIS Gadget + a4a3 Linux-USB user-mode isochronous source/sink + a4a4 Linux-USB user-mode bulk source/sink + a4a5 Linux-USB File Storage Gadget + a4a6 Linux-USB Serial Gadget + a4a7 Linux-USB Serial Gadget (CDC ACM mode) + a4a8 Linux-USB Printer Gadget +0526 Temic MHS S.A. +0527 ALTRA +0528 ATI Technologies, Inc. + 7561 TV Wonder + 7562 TV Wonder, Edition (FN5) + 7563 TV Wonder, Edition (FI) + 7564 TV Wonder, Edition (FQ) + 7565 TV Wonder, Edition (NTSC+) + 7566 TV Wonder, Edition (FN5) + 7567 TV Wonder, Edition (FI) + 7568 TV Wonder, Edition (FQ) + 7569 Live! Pro (A) + 756a Live! Pro Audio (O) +0529 Aladdin Knowledge Systems + 0001 HASP v0.06 + 030b eToken R1 v3.1.3.x + 0313 eToken R1 v3.2.3.x + 031b eToken R1 v3.3.3.x + 0323 eToken R1 v3.4.3.x + 0412 eToken R2 v2.2.4.x + 041a eToken R2 v2.2.4.x + 0422 eToken R2 v2.4.4.x + 042a eToken R2 v2.5.4.x + 050c eToken Pro v4.1.5.x + 0514 eToken Pro v4.2.5.4 + 0600 eToken Pro 64k (4.2) +052a Crescent Heart Software +052b Tekom Technologies, Inc. + 0102 Ca508A HP1020 Camera v.1.3.1.6 + 0801 Yakumo MegaImage 37 + 1512 Yakumo MegaImage IV + 1513 Aosta CX100 WebCam + 1514 Aosta CX100 WebCam Storage + 1905 Yakumo MegaImage 47 + 1911 Yakumo MegaImage 47 SL + 2202 WDM Still Image Capture + 2203 Sound Vision Stream Driver + 3a06 DigiLife DDV-5120A + d001 P35U Camera Capture +052c Canon Information Systems, Inc. +052d Avid Electronics Corp. +052e Standard Microsystems Corp. +052f Unicore Software, Inc. +0530 American Microsystems, Inc. +0531 Wacom Technology Corp. +0532 Systech Corp. +0533 Alcatel Mobile Phones +0534 Motorola, Inc. +0535 LIH TZU Electric Co., Ltd +0536 Hand Held Products (Welch Allyn, Inc.) + 01a0 PDT +0537 Inventec Corp. +0538 Caldera International, Inc. (SCO) +0539 Shyh Shiun Terminals Co., Ltd +053a Preh Werke GmbH & Co. KG +053b Global Village Communication +053c Institut of Microelectronic & Mechatronic Systems +053d Silicon Architect +053e Mobility Electronics +053f Synopsys, Inc. +0540 UniAccess AB + 0101 Panache Surf ISDN TA +0541 Sirf Technology, Inc. +0543 ViewSonic Corp. + 00fe G773 Monitor Hub + 00ff P815 Monitor Hub + 0bf2 airpanel V150 Wireless Smart Display + 0bf3 airpanel V110 Wireless Smart Display + 0ed9 Color Pocket PC V35 + 0f01 airsync Wi-Fi Wireless Adapter + 1527 Color Pocket PC V36 + 1529 Color Pocket PC V37 + 152b Color Pocket PC V38 + 152e Pocket PC + 1921 Communicator Pocket PC + 1922 Smartphone + 1923 Pocket PC V30 + 1a11 Wireless 802.11g Adapter + 1e60 TA310 - ATSC/NTSC/PAL Driver(PCM4) + 4153 ViewSonic G773 Control (?) +0544 Cristie Electronics, Ltd +0545 Xirlink, Inc. + 7333 Trution Web Camera + 8002 IBM NetCamera + 8009 Veo PC Camera + 800c Veo StingRay + 800d Veo PC Camera + 8080 IBM C-It WebCam + 808a Veo PC Camera + 808b Veo PC Camera + 808d Veo PC Camera + 810a Veo Advanced Connect WebCam + 810b Veo PC Camera + 810c Veo PC Camera + 8135 Veo Mobile/Advanced Web Camera + 813a Veo PC Camera + 813b Veo PC Camera + 813c Veo Mobile/Advanced Web Camera + 8333 Veo Stingray/Connect Web Camera + 888c eVision 123 digital camera + 888d eVision 123 digital camera +0546 Polaroid Corp. + 0daf PDC 2300Z + 1bed PDC 1320 Camera + 3097 PDC 310 + 3187 Digital Cam + dccf Sound Vision Stream Driver +0547 Anchor Chips, Inc. + 0001 ICSI Bluetooth Device + 1002 Python2 WDM Encoder + 2131 AN2131 EZUSB Microcontroller + 2235 AN2235 EZUSB-FX Microcontroller + 2710 EZ-Link Loader (EZLNKLDR.SYS) + 2720 AN2720 USB-USB Bridge + 2727 Xircom PGUNET USB-USB Bridge + 2750 EZ-Link (EZLNKUSB.SYS) + 2810 Cypress USB ATAPI Bridge + 7777 Bluetooth Device + 9999 AN2131 uninitialized (?) +0548 Tyan Computer Corp. + 1005 EZ Cart II GameBoy Flash Programmer +0549 Pixera Corp. +054a Fujitsu Microelectronics, Inc. +054b New Media Corp. +054c Sony Corp. + 0001 HUB + 0002 Standard HUB + 0010 DSC-S30/S70/S75/F505V/F505/FD92/W1 Cybershot/Mavica Digital Camera + 0014 Nogatech USBVision (SY) + 0022 Storage Adapter V2 (TPP) + 0023 CD Writer + 0024 Mavica CD-1000 Camera + 0025 NW-MS7 Walkman MemoryStick Reader + 002b Portable USB Harddrive V2 + 002c USB Floppy Disk Drive + 002d MSAC-US1 MemoryStick Reader + 002e Sony HandyCam MemoryStick Reader + 0030 Storage Adapter V2 (TPP) + 0032 MemoryStick MSC-U01 Reader + 0035 Network Walkman (E) + 0036 Net MD + 0037 MG Memory Stick Reader/Writer + 0038 Clie PEG-S300/D PalmOS PDA + 0039 Network Walkman (MS) + 003c VAIO-MX LCD Control + 0045 Digital Imaging Video + 0046 Network Walkman + 004a Memory Stick Hi-Fi System + 004b Memory Stick Reader/Writer + 004e DSC-xxx (ptp) + 0056 MG Memory Stick Reader/Writer + 0058 Clie PEG-N7x0C PalmOS PDA Mass Storage + 0066 Clie PEG-N7x0C/PEG-T425 PalmOS PDA Serial + 0069 Memorystick MSC-U03 Reader + 006d Clie PEG-T425 PDA Mass Storage + 006f Network Walkman (EV) + 0073 Storage CRX1750U + 0075 Net MD + 0076 Storage Adapter ACR-U20 + 007c Net MD + 007f IC Recorder (MS) + 0080 Net MD + 0081 Net MD + 0084 Net MD + 0085 Net MD + 0086 Net MD + 008b Micro Vault 64M Mass Storage + 0095 Sony Clie s360 + 0099 Clie NR70 PDA Mass Storage + 009a Clie NR70 PDA Serial + 00ab Visual Communication Camera (PCGA-UVC10) + 00af DPP-EX Series Digital Photo Printer + 00bf IC Recorder (S) + 00c0 Handycam DCR-30 + 00c6 Net MD + 00c7 Net MD + 00c8 MZ-N710 Minidisc Walkman + 00c9 Net MD + 00ca MZ-DN430 Minidisc Walkman + 00cb MSAC-US20 Memory Stick Reader + 00da Sony Clie nx60 + 00e8 Network Walkman (MS) + 00e9 Handheld + 00eb Net MD + 0101 Net MD + 0103 IC Recorder (ST) + 0105 Micro Vault Hub + 0107 VCC-U01 Visual Communication Camera + 0110 Digital Imaging Video + 0113 Net MD + 0116 IC Recorder (P) + 0144 Clie PEG-TH55 PDA + 0147 Visual Communication Camera (PCGA-UVC11) + 014c Aiwa AM-NX9 Net MD Music Recorder MDLP + 014d Memory Stick Reader/Writer + 0154 Eyetoy Audio Device + 015f IC Recorder (BM) + 0169 Clie PEG-TJ35 PDA Serial + 016a Clie PEG-TJ35 PDA Mass Storage + 016b Mobile HDD + 016d IC Recorder (SX) + 016e DPP-EX50 Digital Photo Printer + 0171 Fingerprint Sensor 3500 + 017e Net MD + 017f Hi-MD WALKMAN + 0180 Net MD + 0181 Hi-MD WALKMAN + 0182 Net MD + 0183 Hi-MD WALKMAN + 0184 Net MD + 0185 Hi-MD WALKMAN + 0186 Net MD + 0187 Hi-MD WALKMAN + 0188 Net MD + 018a Net MD + 018b Hi-MD SOUND GATE + 019e Micro Vault 1.0G Mass Storage + 01ad ATRAC HDD PA + 01bd MRW62E Multi-Card Reader/Writer + 01c3 NW-E55 Network Walkman + 01c6 MEMORY P-AUDIO + 01c7 Printing Support + 01d0 DVD+RW External Drive DRU-700A + 01d5 IC RECORDER + 01de VRD-VC10 [Video Capture] + 01e9 Net MD + 01ea Hi-MD WALKMAN + 01ee IC RECORDER + 01fa Sony IC Recorder (P) + 01fb NW-E405 Network Walkman + 020f Device + 0210 ATRAC HDD PA + 0219 Net MD + 021a Hi-MD WALKMAN + 021b Net MD + 021c Hi-MD WALKMAN + 021d Net MD + 0227 Printing Support + 022c Net MD + 022d Hi-MD AUDIO + 0233 ATRAC HDD PA + 0236 Mobile HDD + 023b DVD+RW External Drive DRU-800UL + 023c Net MD + 023d Hi-MD WALKMAN + 0243 MicroVault Flash Drive + 0257 IFU-WLM2 USB Wireless LAN Module (Wireless Mode) + 0258 IFU-WLM2 USB Wireless LAN Module (Memory Mode) + 0259 IC RECORDER + 0267 Tachikoma Device + 0268 Batoh Device + 0269 HDD WALKMAN + 026a HDD WALKMAN + 0271 IC Recorder (P) + 027c NETWORK WALKMAN + 027e SONY Communicator + 027f IC RECORDER + 0286 Net MD + 0287 Hi-MD WALKMAN + 029b PRS-500 eBook reader + 02ae PlayStation 3 Memory Card Adaptor + 02af Handycam DCR-DVD306E + 02c4 Device + 02d2 PSP +054d Try Corp. +054e Proside Corp. +054f WYSE Technology Taiwan +0550 Fuji Xerox Co., Ltd + 0002 InkJet Color Printer + 0004 InkJet Color Printer + 0005 InkJet Color Printer +0551 CompuTrend Systems, Inc. +0552 Philips Monitors +0553 STMicroelectronics Imaging Division (VLSI Vision) + 0001 TerraCAM + 0002 CPiA WebCam + 0100 STV0672 Camera + 0140 Video Camera + 0150 CDE CAM 100 + 0151 Digital Blue QX5 Microscope + 0200 Dual-mode Camera0 + 0201 Dual-mode Camera1 + 0202 Aiptek PenCam 1 + 0674 Multi-mode Camera + 0679 NMS Video Camera (Webcam) + 1002 Che-ez! Splash +0554 Dictaphone Corp. +0555 ANAM S&T Co., Ltd +0556 Asahi Kasei Microsystems Co., Ltd + 0001 AK5370 I/F A/D Converter +0557 ATEN International Co., Ltd + 2001 UC-1284 Printer Port + 2002 10Mbps Ethernet [klsi] + 2004 UC-100KM PS/2 Mouse and Keyboard adapter + 2006 UC-1284B Printer Port + 2007 UC-110T 100Mbps Ethernet [pegasus] + 2008 UC-232A Serial Port [pl2303] + 2009 UC-210T Ethernet + 2202 CS124U Miniview II KVM Switch + 2600 IDE Bridge + 4000 DSB-650 10Mbps Ethernet [klsi] + 7000 Hub +0558 Truevision, Inc. +0559 Cadence Design Systems, Inc. +055a Kenwood USA +055b KnowledgeTek, Inc. +055c Proton Electronic Ind. +055d Samsung Electro-Mechanics Co. + 0001 Keyboard + 0bb1 Bluetooth Device + 1030 Optical Wheel Mouse (OMS3CB/OMGB30) + 1031 Optical Wheel Mouse (OMA3CB/OMGI30) + 1040 Mouse HID Device + 1050 E-Mail Optical Wheel Mouse (OMS3CE) + 1080 Optical Wheel Mouse (OMS3CH) + 2020 Floppy Disk Drive + 6780 Keyboard V1 + 6781 Keyboard Mouse + 8001 E.M. Hub + 9000 AnyCam [pwc] + 9001 MPC-C30 AnyCam Premium for Notebooks [pwc] + a010 WLAN Adapter(SWL-2300) + a011 Boot Device + a012 WLAN Adapter(SWL-2300) + a013 WLAN Adapter(SWL-2350) + a230 Boot Device + b000 11Mbps WLAN Mini Adapter + b230 Netopia 802.11b WLAN Adapter + b231 LG Wireless LAN 11b Adapter +055e CTX Opto-Electronics Corp. +055f Mustek Systems, Inc. + 0001 ScanExpress 1200 CU + 0002 ScanExpress 600 CU + 0003 ScanExpress 1200 USB + 0006 ScanExpress 1200 UB + 0007 ScanExpress 1200 USB Plus + 0008 ScanExpress 1200 CU Plus + 0010 BearPaw 1200F + 0210 ScanExpress A3 USB + 0218 BearPaw 2400 TA + 0219 BearPaw 2400 TA Plus + 021a BearPaw 2448 TA Plus + 021c BearPaw 1200 CU Plus + 021d BearPaw 2400 CU Plus + 021e BearPaw 1200 TA/CS + 021f SNAPSCAN e22 + 0400 BearPaw 2400 TA Pro + 0401 P 3600 A3 Pro + 0408 BearPaw 2448 CU Pro + 0873 ScanExpress 600 USB + 1000 BearPaw 4800 TA Pro + a350 gSmart 350 + a800 MDC 800 Camera + b500 MDC 3000 Camera + c005 PC CAM 300A + c200 gSmart 300 + c220 gSmart mini + c360 Mustek DV 4000 + c420 gSmart mini 2 + c440 Mustek DV 3000 + c520 gSmart mini 3 + c530 Mustek Gsmart LCD 2 + c631 MDC-4000 + c650 Mustek MDC5500Z + d001 WCam 300 + d003 PC CAM 300A + d004 PC CAM 300A +0560 Interface Corp. +0561 Oasis Design, Inc. +0562 Telex Communications, Inc. + 0001 Enhanced Microphone + 0002 Telex Microphone +0563 Immersion Corp. +0564 Chinon Industries, Inc. +0565 Peracom Networks, Inc. + 0001 Serial Port [etek] + 0002 Enet Ethernet [klsi] + 0003 @Home Networks Ethernet [klsi] + 0005 Enet2 Ethernet [klsi] + 0041 Peracom Remote NDIS Ethernet Adapter +0566 Monterey International Corp. + 0110 ViewMate Desktop Mouse CC2201 + 1001 ViewMate Desktop Mouse CC2201 + 1002 ViewMate Desktop Mouse CC2201 + 1003 ViewMate Desktop Mouse CC2201 + 1004 ViewMate Desktop Mouse CC2201 + 1005 ViewMate Desktop Mouse CC2201 + 1006 ViewMate Desktop Mouse CC2201 + 1007 ViewMate Desktop Mouse CC2201 + 2800 MIC K/B + 2801 MIC K/B Mouse + 2802 Kbd Hub +0567 Xyratex International, Ltd +0568 Quartz Ingenierie +0569 SegaSoft +056a Wacom Co., Ltd + 0000 PenPartner + 0001 PenPartner 4x5 + 0002 PenPartner 6x8 + 0010 Graphire + 0011 Graphire 2 + 0013 Graphire 3 4x5 + 0020 Intuos 4x5 + 0021 Intuos 6x8 + 0022 Intuos 9x12 + 0023 Intuos 12x12 + 0024 Intuos 12x18 + 0030 PL400 + 0031 PL500 + 0032 PL600 + 0034 PL550 + 0035 PL800 + 0041 Intuos2 4x5 + 0042 Intuos 2 6x8 + 0043 Intuos 2 + 0044 Intuos2 12x12 + 0045 Intuos2 12x18 + 0400 PenPartner 4x5 + 4850 PenPartner 6x8 +056b Decicon, Inc. +056c eTEK Labs + 0006 KwikLink Host-Host Connector + 8007 Kwik232 Serial Port + 8100 KwikLink Host-Host Connector + 8101 KwikLink USB-USB Bridge +056d EIZO Corp. + 0000 Hub + 0001 Monitor + 0002 HID Monitor Controls + 0003 Device Bay Controller +056e Elecom Co., Ltd + 0002 29UO Mouse + 200c LD-USB/TX + 4002 Laneed 100Mbps Ethernet LD-USB/TX [pegasus] + 4005 LD-USBL/TX + 400b LD-USB/TX + 4010 LD-USB20 + 5003 UC-SGT + 5004 UC-SGT + abc1 LD-USB/TX +056f Korea Data Systems Co., Ltd + cd00 CDM-751 CD organizer +0570 Epson America +0571 Interex, Inc. + 0002 echoFX InterView Lite +0572 Conexant Systems (Rockwell), Inc. + 0001 Ezcam II WebCam + 0002 Ezcam II WebCam + 0040 Wondereye CP-115 WebCam + 0041 WebCam Notebook + 0042 WebCam Notebook + 1232 V.90 modem + 1234 Typhoon Redfun Modem V90 56k + 1252 HCF V90 Data Fax Voice Modem + 1253 Zoom V.92 Faxmodem + 1300 SoftK56 Data Fax Voice CARP + 1301 Modem Enumerator + 2000 SoftGate 802.11 Adapter + 2002 SoftGate 802.11 Adapter + 8390 WinFast PalmTop/Novo TV Video + 8392 WinFast PalmTop/Novo TV Video + cafe AccessRunner ADSL Modem + cb00 E-Tech ADSL Modem v2 + cb01 GeekADSL Promax Q31 ADSL Modem + cb06 StarModem Network Interface +0573 Zoran Co. Personal Media Division (Nogatech) + 0003 USBGear USBG-V1 + 0400 D-Link V100 + 0600 Dazzle USBVision (1006) + 1300 leadtek USBVision (1006) + 2000 X10 va10a Wireless Camera + 2001 Dazzle EmMe (2001) + 2101 Zoran Co. PMD (Nogatech) AV-grabber Manhattan + 2d00 Osprey 50 + 2d01 Hauppauge USB-Live Model 600 + 3000 Dazzle MicroCam (NTSC) + 3001 Dazzle MicroCam (PAL) + 4000 Nogatech TV! (NTSC) + 4001 Nogatech TV! (PAL) + 4002 Nogatech TV! (PAL-I-) + 4003 Nogatech TV! (MF-) + 4008 Nogatech TV! (NTSC) (T) + 4009 Nogatech TV! (PAL) (T) + 4010 Nogatech TV! (NTSC) (A) + 4100 USB-TV FM (NTSC) + 4110 PNY USB-TV (NTSC) FM + 4400 Nogatech TV! Pro (NTSC) + 4401 Nogatech TV! Pro (PAL) + 4450 PixelView PlayTv-USB PRO (PAL) FM + 4451 Nogatech TV! Pro (PAL+) + 4452 Nogatech TV! Pro (PAL-I+) + 4500 Nogatech TV! Pro (NTSC) + 4501 Nogatech TV! Pro (PAL) + 4550 ZTV ZT-721 2.4GHz USB A/V Receiver + 4551 Dazzle TV! Pro Audio (P+) + 4d00 Hauppauge WinTV-USB USA + 4d01 Hauppauge WinTV-USB + 4d02 Hauppauge WinTV-USB UK + 4d03 Hauppauge WinTV-USB France + 4d04 Hauppauge WinTV (PAL D/K) + 4d10 Hauppauge WinTV-USB with FM USA radio + 4d11 Hauppauge WinTV-USB (PAL) with FM radio + 4d12 Hauppauge WinTV-USB UK with FM Radio + 4d14 Hauppauge WinTV (PAL D/K FM) + 4d20 Hauppauge WinTV-USB II (PAL) with FM radio + 4d21 Hauppauge WinTV-USB II (PAL) + 4d22 Hauppauge WinTV-USB II (PAL) Model 566 + 4d23 Hauppauge WinTV-USB France 4D23 + 4d24 Hauppauge WinTV Pro (PAL D/K) + 4d25 Hauppauge WinTV-USB Model 40209 rev B234 + 4d26 Hauppauge WinTV-USB Model 40209 rev B243 + 4d27 Hauppauge WinTV-USB Model 40204 Rev B281 + 4d28 Hauppauge WinTV-USB Model 40204 rev B283 + 4d29 Hauppauge WinTV-USB Model 40205 rev B298 + 4d2a Hauppague WinTV-USB Model 602 Rev B285 + 4d2b Hauppague WinTV-USB Model 602 Rev B282 + 4d2c Hauppauge WinTV Pro (PAL/SECAM) + 4d30 Hauppauge WinTV-USB FM Model 40211 Rev B123 + 4d31 Hauppauge WinTV-USB III (PAL) with FM radio Model 568 + 4d32 Hauppauge WinTV-USB III (PAL) FM Model 573 + 4d34 Hauppauge WinTV Pro (PAL D/K FM) + 4d35 Hauppauge WinTV-USB III (PAL) FM Model 597 + 4d36 Hauppauge WinTV Pro (PAL B/G FM) + 4d37 Hauppauge WinTV-USB Model 40219 rev E189 + 4d38 Hauppauge WinTV Pro (NTSC FM) +0574 City University of Hong Kong +0575 Philips Creative Display Solutions +0576 BAFO/Quality Computer Accessories +0577 ELSA +0578 Intrinsix Corp. +0579 GVC Corp. +057a Samsung Electronics America +057b Y-E Data, Inc. + 0000 FlashBuster-U Floppy + 0001 Tri-Media Reader Floppy + 0006 Tri-Media Reader Card Reader + 0010 Memory Stick Reader Writer + 0020 HEXA Media Drive 6-in-1 Card Reader Writer + 0030 Memory Card Viewer (TV) +057c AVM GmbH + 0b00 ISDN-Controller B1 Family + 0c00 ISDN-Controller FRITZ!Card + 1000 ISDN-Controller FRITZ!Card v2.0 + 1900 ISDN-Controller FRITZ!Card v2.1 + 2000 ISDN-Connector FRITZ!X + 2200 BlueFRITZ! + 2300 Teledat X130 DSL + 2800 ISDN-Connector TA + 3200 Teledat X130 DSL + 3500 FRITZ!Card DSL SL + 3701 FRITZ!Box SL + 3702 FRITZ!Box + 3800 BlueFRITZ! Bluetooth Stick + 3a00 FRITZ!Box Fon + 3c00 FRITZ!Box WLAN + 3d00 Fritz!Box + 3e01 FRITZ!Box (Annex A) + 4001 FRITZ!Box Fon (Annex A) + 4101 FRITZ!Box WLAN (Annex A) + 4201 FRITZ!Box Fon WLAN (Annex A) + 4601 Eumex 5520PC (WinXP/2000) + 4602 Eumex 400 (WinXP/2000) + 4701 AVM FRITZ!Box Fon ata + 5401 Eumex 300 IP + 5601 AVM FRITZ!WLAN Stick + 6201 WLAN USB v1.1 + 62ff WLAN USB v1.1 [no firmware] +057d Shark Multimedia, Inc. +057e Nintendo Co., Ltd + 0306 Wii Remote Controller RVL-003 +057f QuickShot, Ltd + 6238 USB StrikePad +0580 Denron, Inc. +0581 Racal Data Group +0582 Roland Corp. + 0000 UA-100 + 0002 UM-4/MPU-64 MIDI Interface + 0003 SoundCanvas SC-8850 + 0004 U-8 + 0005 Edirol UM-2 MIDI Adapter + 0007 SoundCanvas SC-8820 + 0008 PC-300 + 0009 Edirol UM-1SX MIDI Adapter + 000b SK-500 + 000c SC-D70 + 0010 EDIROL UA-5 + 0011 Edirol UA-5 Sound Capture + 0012 XV-5050 + 0013 XV-5050 + 0014 EDIROL UM-880 MIDI I/F (native) + 0015 EDIROL UM-880 MIDI I/F (generic) + 0016 EDIROL SD-90 + 0017 EDIROL SD-90 + 001b MMP-2 + 001c MMP-2 + 001d V-SYNTH + 001e V-SYNTH + 0023 EDIROL UM-550 + 0024 EDIROL UM-550 + 0025 EDIROL UA-20 + 0026 EDIROL UA-20 + 0027 EDIROL SD-20 + 0028 EDIROL SD-20 + 0029 EDIROL SD-80 + 002a EDIROL SD-80 + 002b EDIROL UA-700 + 002c EDIROL UA-700 + 002d XV-2020 Synthesizer + 002e XV-2020 Synthesizer + 002f VariOS + 0030 VariOS + 0033 EDIROL PCR + 0034 EDIROL PCR + 0037 Digital Piano + 0038 Digital Piano + 003b BOSS GS-10 + 003c BOSS GS-10 + 0040 GI-20 + 0041 GI-20 + 0042 RS-70 + 0043 RS-70 + 0044 EDIROL UA-1000 + 0047 EDIROL UR-80 WAVE + 0048 EDIROL UR-80 MIDI + 0049 EDIROL UR-80 WAVE + 004a EDIROL UR-80 MIDI + 004b EDIROL M-100FX + 004c EDIROL PCR-A WAVE + 004d EDIROL PCR-A MIDI + 004e EDIROL PCR-A WAVE + 004f EDIROL PCR-A MIDI + 0050 EDIROL UA-3FX + 0052 EDIROL UM-1SX + 0054 Digital Piano + 0060 EXR Series + 0064 EDIROL PCR-1 WAVE + 0065 EDIROL PCR-1 MIDI + 0066 EDIROL PCR-1 WAVE + 0067 EDIROL PCR-1 MIDI + 006a SP-606 + 006b SP-606 + 006d FANTOM-X + 006e FANTOM-X + 0073 EDIROL UA-25 + 0074 EDIROL UA-25 + 0075 BOSS DR-880 + 0076 BOSS DR-880 + 007a RD + 007b RD + 007d EDIROL UA-101 + 0080 G-70 + 0081 G-70 + 008b EDIROL PC-50 + 008c EDIROL PC-50 + 008d EDIROL UA-101 USB1 + 0092 EDIROL PC-80 WAVE + 0093 EDIROL PC-80 MIDI + 0096 EDIROL UA-1EX + 009a EDIROL UM-3EX + 009d EDIROL UM-1 + 00a2 Digital Piano + 00a3 EDIROL UA-4FX + 00a6 Juno-G + 00ad SH-201 + 00c4 EDIROL M-16DX +0583 Padix Co., Ltd (Rockfire) + 2030 RM-203 USB Nest [mode 1] + 2031 RM-203 USB Nest [mode 2] + 2032 RM-203 USB Nest [mode 3] + 2033 RM-203 USB Nest [mode 4] + 2050 PX-205 PSX Bridge + 3050 QF-305u Gamepad + 688f QF-688uv Windstorm Pro Joystick + 7070 QF-707u Bazooka Joystick +0584 RATOC System, Inc. + 0008 Fujifilm MemoryCard ReaderWriter + b000 REX-USB60 +0585 FlashPoint Technology, Inc. + 0001 Digital Camera + 0002 Digital Camera + 0003 Digital Camera + 0004 Digital Camera + 0005 Digital Camera + 0006 Digital Camera + 0007 Digital Camera + 0008 Digital Camera + 0009 Digital Camera + 000a Digital Camera + 000b Digital Camera + 000c Digital Camera + 000d Digital Camera + 000e Digital Camera + 000f Digital Camera +0586 ZyXEL Communications Corp. + 1000 Omni NET Modem / ISDN TA + 1500 Omni 56K Plus + 2011 Scorpion-980N keyboard + 3304 LAN Modem + 330a ADSL Modem Interface + 330e USB Broadband ADSL Modem Rev 1.10 + 3400 ZyAIR B-220 IEEE 802.11b Adapter + 3401 ZyAIR G-220 + 3402 (ZD1211)IEEE 802.11b+g Adapter + 3407 G-200 v2 + 3409 AG-225H + 340a M-202 + 340f G-220 v2 + 3410 Wi-Fi Wireless LAN Adapter + 3412 Wi-Fi Wireless LAN Adapter + 3413 AG-225H v2 802.11a/g Wi-Fi Finder & Adapter + 3415 G-210H 802.11g Wireless Adapter +0587 America Kotobuki Electronics Industries, Inc. +0588 Sapien Design +0589 Victron +058a Nohau Corp. +058b Infineon Technologies +058c In Focus Systems + 0007 Flash + 0008 LP130 + 000a LP530 + 0010 Projector + 0011 Projector + 0012 Projector + 0013 Projector + 0014 Projector + 0015 Projector + 0016 Projector + 0017 Projector + 0018 Projector + 0019 Projector + 001a Projector + 001b Projector + 001c Projector + 001d Projector + 001e Projector + 001f Projector +058d Micrel Semiconductor +058e Tripath Technology, Inc. +058f Alcor Micro Corp. + 2412 SCard R/W CSR-145 + 2802 Monterey Keyboard + 5492 Hub + 6232 Hi-Speed 16-in-1 Flash Card Reader/Writer + 6360 Multimedia Card Reader + 6361 Multimedia Card Reader + 6362 Hi-Speed 21-in-1 Flash Card Reader/Writer (Internal/External) + 6377 Multimedia Card Reader + 6386 Memory Card + 6387 Transcend JetFlash Flash Drive + 6390 USB 2.0-IDE bridge + 9213 MacAlly Kbd Hub + 9215 AU9814 Hub + 9254 Hub + 9310 Mass Storage (UID4/5A & UID7A) + 9320 Micro Storage Driver for Win98 + 9321 Micro Storage Driver for Win98 + 9330 SD Reader + 9331 Micro Storage Driver for Win98 + 9340 Delkin eFilm Reader-32 + 9350 Delkin eFilm Reader-32 + 9360 8-in-1 Media Card Reader + 9361 Multimedia Card Reader + 9368 Multimedia Card Reader + 9380 Flash drive + 9382 Acer/Sweex Flash drive + 9410 Keyboard + 9472 Keyboard Hub + 9510 ChunghwaTL USB02 Smartcard Reader + 9520 EMV Certified Smart Card Reader + 9720 USB-Serial Adapter +0590 Omron Corp. + 0004 Cable Modem + 000b MR56SVS + 0028 HJ-720IT Pedometer +0591 Questra Consulting +0592 Powerware Corp. + 0002 UPS (X-Slot) +0593 Incite +0594 Princeton Graphic Systems +0595 Zoran Microelectronics, Ltd + 1001 Digitrex DSC-1300/DSC-2100 (mass storage mode) + 4343 Digital Camera EX-20 DSC +0596 MicroTouch Systems, Inc. + 0001 Touchscreen + 0002 Touch Screen Controller +0597 Trisignal Communications +0598 Niigata Canotec Co., Inc. +0599 Brilliance Semiconductor, Inc. +059a Spectrum Signal Processing, Inc. +059b Iomega Corp. + 0001 Zip 100 (Type 1) + 000b Zip 100 (Type 2) + 0021 Win98 Disk Controller + 0030 Zip 250 (Ver 1) + 0031 Zip 100 (Type 3) + 0032 Zip 250 (Ver 2) + 0034 Zip 100 Driver + 0037 Zip 750 MB + 0040 SCSI Bridge + 0042 Rev 70 GB + 0050 Zip CD 650 Writer + 0053 CDRW55292EXT CD-RW External Drive + 0057 Mass Storage Device + 005d Mass Storage Device + 005f Mass Storage Device + 0060 PCMCIA PocketZip Dock + 0061 Varo PocketZip 40 MP3 Player + 006d HipZip MP3 Player + 007c Ultra Max USB/1394 + 00db FotoShow Zip 250 Driver + 0150 Mass Storage Device + 015d Super DVD Writer + 0173 Hi-Speed USB-to-IDE Bridge Controller + 0174 Hi-Speed USB-to-IDE Bridge Controller + 0176 Hi-Speed USB-to-IDE Bridge Controller + 0177 Hi-Speed USB-to-IDE Bridge Controller + 0178 Hi-Speed USB-to-IDE Bridge Controller + 0179 Hi-Speed USB-to-IDE Bridge Controller + 017a HDD + 017b HDD/1394A + 017c HDD/1394B + 0251 Optical + 0252 Optical + 1052 DVD+RW External Drive +059c A-Trend Technology Co., Ltd +059d Advanced Input Devices +059e Intelligent Instrumentation +059f LaCie, Ltd + 0201 StudioDrive USB2 + 0202 StudioDrive USB2 + 0203 StudioDrive USB2 + 0211 PocketDrive + 0212 PocketDrive + 0213 PocketDrive USB2 + 0323 LaCie d2 Drive USB2 + 0641 Mobile Hard Drive + 1010 Desktop Hard Drive + a601 HardDrive + a602 CD R/W +05a0 Vetronix Corp. +05a1 USC Corp. +05a2 Fuji Film Microdevices Co., Ltd +05a3 ARC International +05a4 Ortek Technology, Inc. + 9720 Keyboard Mouse + 9722 Keyboard + 9731 MCK-600W/MCK-800USB Keyboard +05a5 Sampo Technology Corp. +05a6 Cisco Systems, Inc. + 0001 CVA124 Cable Voice Adapter (WDM) + 0002 CVA122 Cable Voice Adapter (WDM) + 0003 CVA124E Cable Voice Adapter (WDM) + 0004 CVA122E Cable Voice Adapter (WDM) +05a7 Bose Corp. +05a8 Spacetec IMC Corp. +05a9 OmniVision Technologies, Inc. + 0511 OV511 WebCam + 0518 OV518 WebCam + 0519 OV519 Microphone + 1550 VEHO Filmscanner + 2800 SuperCAM + 4519 Webcam Classic + 8519 OV519 WebCam + a511 OV511+ WebCam + a518 D-Link DSB-C310 WebCam +05aa Utilux South China, Ltd +05ab In-System Design + 0002 Parallel Port + 0030 Storage Adapter V2 (TPP) + 0031 ATA Bridge + 0060 USB 2.0 ATA Bridge + 0061 Storage Adapter V3 (TPP-I) + 0101 Storage Adapter (TPP) + 0130 Compact Flash and Microdrive Reader (TPP) + 0200 USS725 ATA Bridge + 0201 Storage Adapter (TPP) + 0202 ATA Bridge + 0300 Portable Hard Drive (TPP) + 0301 Portable Hard Drive V2 + 0350 Portable Hard Drive (TPP) + 0351 Portable Hard Drive V2 + 081a ATA Bridge + 0cda ATA Bridge for CD-R/RW + 1001 BAYI Printer Class Support + 5700 Storage Adapter V2 (TPP) + 5701 USB Storage Adapter V2 + 5901 Smart Board (TPP) + 5a01 ATI Storage Adapter (TPP) + 5d01 DataBook Adapter (TPP) +05ac Apple, Inc. + 0201 USB Keyboard [Alps or Logitech, M2452] + 0202 Keyboard [ALPS] + 0205 Extended Keyboard [Mitsumi] + 0206 Extended Keyboard [Mitsumi] + 020b Pro Keyboard [Mitsumi, A1048/US layout] + 020c Extended Keyboard [Mitsumi] + 020d Pro Keyboard [Mitsumi, A1048/JIS layout] + 020e Internal Keyboard/Trackpad + 020f Internal Keyboard/Trackpad + 021b Internal Keyboard/Trackpad + 0220 Aluminum Keyboard + 0221 Keyboard (Aluminium) (ISO) + 0229 Internal Keyboard/Trackpad (MacBook Pro) (ANSI) + 022a Internal Keyboard/Trackpad (MacBook Pro) (ISO) + 022b Internal Keyboard/Trackpad (MacBook Pro) (JIS) + 0301 USB Mouse [Mitsumi, M4848] + 0302 Optical Mouse [Fujitsu] + 0304 Optical USB Mouse [Mitsumi] + 0306 Optical USB Mouse [Fujitsu] + 1000 Bluetooth HCI MacBookPro (HID mode) + 1001 Keyboard Hub [ALPS] + 1002 Extended Keyboard Hub [Mitsumi] + 1003 Hub in Pro Keyboard [Mitsumi, A1048] + 1006 Hub in Aluminum Keyboard + 1101 Speakers + 1201 3G iPod + 1202 iPod 2G + 1203 iPod 4.Gen Grayscale 40G + 1204 iPod [Photo] + 1205 iPod Mini 1.Gen/2.Gen + 1206 iPod '06' + 1207 iPod '07' + 1208 iPod '08' + 1209 iPod Video + 120a iPod Nano + 1260 iPod Nano 2.Gen + 1261 iPod Classic + 1300 iPod Shuffle + 1301 iPod Shuffle 2.Gen + 8202 HCF V.90 Data/Fax Modem + 8203 Bluetooth HCI + 8204 Bluetooth HCI [Bluetooth 2.0 + EDR, build-in] + 8205 Bluetooth HCI MacBookPro + 8206 Bluetooth USB Host Controller + 8240 IR Receiver [build-in] + 8300 Built-in iSight (no firmware loaded) + 8501 Built-in iSight [Micron] + 912f Hub in 30" Cinema Display + 9221 30" Cinema Display + ffff Bluetooth in DFU mode - Driver +05ad Y.C. Cable U.S.A., Inc. +05ae Synopsys, Inc. +05af Jing-Mold Enterprise Co., Ltd + 0821 IDE to + 9167 KB 9151B - 678 + 9267 KB 9251B - 678 Mouse +05b0 Fountain Technologies, Inc. +05b1 First International Computer, Inc. + 1389 Bluetooth Wireless Adapter +05b4 LG Semicon Co., Ltd + 4857 M-Any DAH-210 + 6001 Digisette DUO-MP3 AR-100 +05b5 Dialogic Corp. +05b6 Proxima Corp. +05b7 Medianix Semiconductor, Inc. +05b8 Agiler, Inc. + 3002 Scroll Mouse +05b9 Philips Research Laboratories +05ba DigitalPersona, Inc. +05bb Grey Cell Systems +05bc 3G Green Green Globe Co., Ltd + 0004 Trackball +05bd RAFI GmbH & Co. KG +05be Tyco Electronics (Raychem) +05bf S & S Research +05c0 Keil Software +05c1 Kawasaki Microelectronics, Inc. +05c2 Media Phonics (Suisse) S.A. +05c5 Digi International, Inc. + 0002 AccelePort USB 2 + 0004 AccelePort USB 4 + 0008 AccelePort USB 8 +05c6 Qualcomm, Inc. + 3100 CDMA Wireless Modem/Phone + 3196 CDMA Wireless Modem + 3197 CDMA Wireless Modem/Phone +05c7 Qtronix Corp. + 0113 PC Line Mouse + 1001 Lynx Mouse + 2001 Keyboard + 2011 SCorpius Keyboard + 6001 Ten-Keypad +05c8 Cheng Uei Precision Industry Co., Ltd (Foxlink) +05c9 Semtech Corp. +05ca Ricoh Co., Ltd + 0101 RDC-5300 Camera + 0325 Caplio GX (ptp) + 032d Caplio GX 8 (ptp) + 032f Caplio R3 (ptp) + 03a1 IS200e + 0403 Printing Support + 0405 Type 101 + 0406 Type 102 + 1830 Visual Communication Camera VGP-VCC2 + 1835 Visual Communication Camera VGP-VCC5 + 1870 Webcam 1000 + 2201 RDC-7 Camera + 2202 Caplio RR30 + 2203 Caplio 300G + 2204 Caplio G3 + 2205 Caplio RR30 / Medion MD 6126 Camera + 2206 Konica DG-3Z + 2207 Caplio Pro G3 + 2208 Caplio G4 + 2209 Caplio 400G wide + 220a KONICA MINOLTA DG-4Wide + 220b Caplio RX + 220c Caplio GX + 220d Caplio R1/RZ1 + 220e Sea & Sea 5000G + 220f Rollei dr5 / Rollei dr5 (PTP mode) + 2211 Caplio R1S + 2212 Caplio R1v Camera + 2213 Caplio R2 + 2214 Caplio GX 8 + 2215 DSC 725 + 2216 Caplio R3 + 2222 RDC-i500 +05cb PowerVision Technologies, Inc. + 1483 PV8630 interface (scanners, webcams) +05cc ELSA AG + 2100 MicroLink ISDN Office + 2219 MicroLink ISDN + 2265 MicroLink 56k + 2267 MicroLink 56k (V.250) + 2280 MicroLink 56k Fun + 3000 Micolink USB2Ethernet [pegasus] + 3100 AirLancer USB-11 + 3363 MicroLink ADSL Fun +05cd Silicom, Ltd +05ce sci-worx GmbH +05cf Sung Forn Co., Ltd +05d0 GE Medical Systems Lunar +05d1 Brainboxes, Ltd + 0003 Bluetooth Adapter BL-554 +05d2 Wave Systems Corp. +05d3 Tohoku Ricoh Co., Ltd +05d5 Super Gate Technology Co., Ltd +05d6 Philips Semiconductors, CICT +05d7 Thomas & Betts Corp. + 0099 10Mbps Ethernet [klsi] +05d8 Ultima Electronics Corp. + 4001 Artec Ultima 2000 + 4002 Artec Ultima 2000 (GT6801 based)/Lifetec LT9385/ScanMagic 1200 UB Plus Scanner + 4003 Artec E+ 48U + 4004 Artec E+ Pro + 4005 MEM48U + 4006 TRUST EASY WEBSCAN 19200 + 4007 TRUST 240H EASY WEBSCAN GOLD + 4008 Trust Easy Webscan 19200 + 4009 Umax Astraslim + 4013 IT Scan 1200 + 8105 Artec T1 USB TVBOX (cold) + 8106 Artec T1 USB TVBOX (warm) + 8107 Artec T1 USB TVBOX with AN2235 (cold) + 8108 Artec T1 USB TVBOX with AN2235 (warm) + 8109 Artec T1 USB2.0 TVBOX (cold +05d9 Axiohm Transaction Solutions + a225 A225 Printer + a758 A758 Printer + a794 A794 Printer +05da Microtek International, Inc. + 0091 ScanMaker X6u + 0093 ScanMaker V6USL + 0094 Phantom 336CX/C3 + 0099 ScanMaker X6/X6U + 009a Phantom C6 + 00a0 Phantom 336CX/C3 (#2) + 00a3 ScanMaker V6USL + 00ac ScanMaker V6UL + 00b6 ScanMaker V6UPL + 00ef ScanMaker V6UPL + 1006 Jenoptik JD350 entrance + 1011 NHJ Che-ez! Kiss Digital Camera + 1018 Digital Dream Enigma 1.3 + 1020 Digital Dream l'espion xtra + 1025 Take-it Still Camera Device + 1026 Take-it + 1043 Take-It 1300 DSC Bulk Driver + 1045 Take-it D1 + 1047 Take-it Camera Composite Device + 1048 Take-it Q3 + 1049 3M Still Camera Device + 1051 Camcorder Series + 1052 Mass Storage Device + 1053 Take-it DV Composite Device + 1054 Mass Storage Device + 1055 Digital Camera Series(536) + 1056 Mass Storage Device + 1057 Take-it DSC Camera Device(536) + 1058 Mass Storage Device + 1059 Camcorder DSC Series + 1060 Microtek Take-it MV500 + 2007 ArtixScan DI 1210 + 200c 1394_USB2 Scanner + 200e ArtixScan DI 810 + 2017 UF ICE Scanner + 201c 4800 Scanner + 201d ArtixScan DI 1610 + 201f 4800 Scanner-ICE + 202e ArtixScan DI 2020 + 208b ScanMaker 6800 + 208f ArtixScan DI 2010 + 209e ScanMaker 4700LP + 20a7 ScanMaker 5600 + 20b0 ScanMaker X12USL + 20b1 ScanMaker 8700 + 20b4 ScanMaker 4700 + 20bd ScanMaker 5700 + 20c9 ScanMaker 6700 + 20d2 Microtek ArtixScan 1800f + 20d6 PS4000 + 20de ScanMaker 9800XL + 20e0 ScanMaker 9700XL + 20ed ScanMaker 4700 + 20ee Micortek ScanMaker X12USL + 3008 Scanner + 300a 4800 ICE Scanner + 300b 4800 Scanner + 300f MiniScan C5 + 3020 4800dpi Scanner + 3021 1200dpi Scanner + 3022 Scanner 4800dpi + 3023 USB1200II Scanner + 30c1 USB600 Scanner + 30ce ScanMaker 3800 + 30cf ScanMaker 4800 + 30d4 USB1200 Scanner + 30d8 Scanner + 30d9 USB2400 Scanner + 30e4 ScanMaker 4100 + 30e5 USB3200 Scanner + 30e6 ScanMaker i320 + 40b3 ScanMaker 3600 + 40b8 ScanMaker 3700 + 40c7 ScanMaker 4600 + 40ca ScanMaker 3600 + 40cb ScanMaker 3700 + 40dd ScanMaker 3750i + 40ff ScanMaker 3600 + 5003 Goya + 5013 3200 Scanner + 80a3 ScanMaker V6USL (#2) + 80ac ScanMaker V6UL/SpicyU +05db Sun Corp. (Suntac?) + 0003 SUNTAC U-Cable type D2 + 0005 SUNTAC U-Cable type P1 + 0009 SUNTAC Slipper U + 000a SUNTAC Ir-Trinity + 000b SUNTAC U-Cable type A3 + 0011 SUNTAC U-Cable type A4 +05dc Lexar Media, Inc. + 0001 jumpSHOT CompactFlash Reader + 0002 JumpShot + 0003 JumpShot + 0080 Jumpdrive Secure 64MB + 0081 RBC Compact Flash Drive + 00a7 JumpDrive Impact + 0100 JumpDrive PRO + 0200 JumpDrive 2.0 Pro + 0300 Jumpdrive Geysr + 0301 JumpDrive Classic + 0302 JD Micro + 0303 JD Micro Pro + 0304 JD Secure II + 0310 JumpDrive + 0311 JumpDrive Classic + 0312 JD Micro + 0313 JD Micro Pro + 0320 JumpDrive + 0321 JD Micro + 0322 JD Micro Pro + 0323 UFC + 0330 JumpDrive Expression + 0340 JumpDrive TAD + 0350 Express Card + 0400 UFDC + 0401 UFDC + 0403 Locked B Device + 0405 Locked C Device + 0407 Locked D Device + 0409 Locked E Device + 040b Locked F Device + 040d Locked G Device + 040f Locked H Device + 0410 JumpDrive + 0411 JumpDrive + 0413 Locked J Device + 0415 Locked K Device + 0417 Locked L Device + 0419 Locked M Device + 041b Locked N Device + 041d Locked O Device + 041f Locked P Device + 0420 JumpDrive + 0421 JumpDrive + 0423 Locked R Device + 0425 Locked S Device + 0427 Locked T Device + 0429 Locked U Device + 042b Locked V Device + 042d Locked W Device + 042f Locked X Device + 0431 Locked Y Device + 0433 Locked Z Device + 4d02 MP3 Player + 4d12 MP3 Player + a300 JumpDrive2 + a400 JumpDrive trade; Pro 40-501 + a410 JumpDrive 128MB/256MB + a411 JumpDrive Traveler + a420 JumpDrive Pro + a421 JumpDrive Pro II + a422 JumpDrive Micro Pro + a430 JumpDrive Secure + a431 JumpDrive Secure II + a432 JumpDrive Classic + a440 JumpDrive Lightning + a450 JumpDrive TouchGuard + a460 JD Mercury + a501 JumpDrive Classic + a510 JumpDrive Sport + a530 JumpDrive Expression + a531 JumpDrive Secure II + a560 JumpDrive FireFly + a701 JumpDrive FireFly + b002 USB CF Reader + b018 Multi-Card Reader +05dd Delta Electronics, Inc. + ff31 AWU-120 + ff32 FriendlyNET AeroLAN AL2011 + ff35 PCW 100 - Wireless 802.11b Adapter + ff91 2Wire PC Port Phoneline 10Mbps Adapter +05df Silicon Vision, Inc. +05e0 Symbol Technologies + 0700 Bar Code Scanner (CS1504) + 0800 Spectrum24 Wireless LAN Adapter + 1200 DS6608 Bar Code Scanner + 1900 SNAPI Imaging Device + 2000 MC3090 Rugged Mobile Computer + 200d MC70 Rugged Mobile Computer +05e1 Syntek Semiconductor Co., Ltd + 0500 DC-112X + 0501 WebCam, Chipset DC-1125 similar to 174f:a311 - Asus F2F, F2J, F3J, F3T, G1, Z53JA + 0890 STK011 Camera + 0892 STK013 Camera + 0895 STK016 Camera + 0896 STK017 Camera +05e2 ElecVision, Inc. +05e3 Genesys Logic, Inc. + 000a Keyboard with PS/2 Port + 000b Mouse + 0100 Nintendo Game Boy Advance SP + 0120 Pacific Image Electronics PrimeFilm 1800u slide/negative scanner + 0131 CF/SM Reader/Writer + 0142 Multiple Slides Scanner-3600 + 0143 Multiple Frames Film Scanner-36series + 0180 Plustek Scanner + 0182 Wize Media 1000 + 0189 ScanJet 4600 series + 018a Xerox 6400 + 0300 GLUSB98PT Parallel Port + 0301 USB2LPT Cable Release2 + 0406 Hub + 0501 GL620USB Host-Host interface + 0502 GL620USB GeneLink USB-USB Bridge + 0504 HID Keyboard Filter + 0604 USB 1.1 Hub + 0605 USB 2.0 Hub [ednet] + 0606 USB 2.0 Hub / D-Link DUB-H4 USB 2.0 Hub + 0608 USB-2.0 4-Port HUB + 0660 USB 2.0 Hub + 0700 SIIG US2256 CompactFlash Card Reader + 0701 USB 2.0 IDE Adapter + 0702 USB 2.0 IDE Adapter + 0703 Card Reader + 0704 Card Reader + 0705 Card Reader + 0706 Card Reader + 0707 Card Reader + 0708 Card Reader + 0709 Card Reader + 070a Pen Flash + 070b DMHS1B Rev 3 DFU Adapter + 070e X-PRO CR20xA USB 2.0 Internal Card Reader + 070f Pen Flash + 0710 USB 2.0 33-in-1 Card Reader + 0711 Card Reader + 0712 Delkin Mass Storage Device + 0715 USB 2.0 microSD Reader + 0760 USB 2.0 Card Reader/Writer + 0761 Genesys Mass Storage Device + 0780 USBFS DFU Adapter + 07a0 Pen Flash + 0927 Card Reader + 1205 Afilias Optical Mouse H3003 + a700 Pen Flash + f102 VX7012 TV Box + f103 VX7012 TV Box + f104 VX7012 TV Box + fd21 3M TL20 Temperature Logger + fe00 Razer Mouse +05e4 Red Wing Corp. +05e5 Fuji Electric Co., Ltd +05e6 Keithley Instruments +05e8 ICC, Inc. +05e9 Kawasaki LSI + 0008 KL5KUSB101B Ethernet [klsi] + 0009 Sony 10Mbps Ethernet [pegasus] + 000c USB-to-RS-232 + 000d USB-to-RS-232 + 0014 RS-232 J104 + 0040 Ethernet Adapter + 2008 Ethernet Adapter +05eb FFC, Ltd +05ec COM21, Inc. +05ee Cytechinfo Inc. +05ef AVB, Inc. [anko?] + 020a Top Shot Pegasus Joystick + 8884 Mag Turbo Force Wheel + 8888 Top Shot Force Feedback Racing Wheel +05f0 Canopus Co., Ltd + 0101 DA-Port DAC +05f1 Compass Communications +05f2 Dexin Corp., Ltd + 0010 AQ Mouse +05f3 PI Engineering, Inc. + 0007 Kinesis Advantage PRO MPC/USB Keyboard + 0081 Kinesis Integrated Hub + 020b PS2 Adapter + 0232 X-Keys Switch Interface, Programming Mode + 0261 X-Keys Switch Interface, SPLAT Mode + 0264 X-Keys Switch Interface, Composite Mode +05f5 Unixtar Technology, Inc. +05f6 AOC International +05f7 RFC Distribution(s) PTE, Ltd +05f9 PSC Scanning, Inc. +05fa Siemens Telecommunications Systems, Ltd + 3301 Keyboard with PS/2 Mouse Port + 3302 Keyboard + 3303 Keyboard with PS/2 Mouse Port +05fc Harman Multimedia + 7849 Harman/Kardon SoundSticks +05fd InterAct, Inc. + 0239 SV-239 HammerHead Digital + 0251 Raider Pro + 0253 ProPad 8 Digital + 0286 SV-286 Cyclone Digital + 262a 3dfx HammerHead FX + 262f HammerHead Fx + daae Game Shark +05fe Chic Technology Corp. + 0001 Mouse + 0003 Cypress USB Mouse + 0005 Viewmaster 4D Browser Mouse + 0007 Twinhead Mouse + 0009 Inland Pro 4500/5000 Mouse + 0011 Browser Mouse + 1010 Optical Wireless +05ff LeCroy Corp. +0600 Barco Display Systems +0601 Jazz Hipster Corp. + 0003 Internet Security Co., Ltd. SecureKey +0602 Vista Imaging, Inc. + 1001 ViCam WebCam +0603 Novatek Microelectronics Corp. + 00f1 Keyboard + 6871 Mouse +0604 Jean Co., Ltd +0605 Anchor C&C Co., Ltd +0606 Royal Information Electronics Co., Ltd +0607 Bridge Information Co., Ltd +0608 Genrad Ads +0609 SMK Manufacturing, Inc. + 031d eHome Infrared Receiver + 0322 eHome Infrared Receiver + ff12 SMK Bluetooth Device +060a Worthington Data Solutions, Inc. +060b Solid Year + 0001 MacAlly Keyboard + 1006 Japanese Keyboard - 260U + 2101 Keyboard + 5811 ACK-571U Wireless Keyboard + 5903 Japanese Keyboard - 595U + 6001 SolidTek USB 2p HUB + 6002 SolidTek USB Keyboard + 6003 Japanese Keyboard - 600HM + a001 Maxwell Compact Pc PM3 +060c EEH Datalink GmbH +060d Auctor Corp. +060e Transmonde Technologies, Inc. +060f Joinsoon Electronics Mfg. Co., Ltd +0610 Costar Electronics, Inc. +0611 Totoku Electric Co., Ltd +0613 TransAct Technologies, Inc. +0614 Bio-Rad Laboratories +0615 Quabbin Wire & Cable Co., Inc. +0616 Future Techno Designs PVT, Ltd +0617 Swiss Federal Insitute of Technology +0618 MacAlly + 0101 Mouse +0619 Seiko Instruments, Inc. + 0101 SLP-100 Driver + 0102 SLP-200 Driver + 0103 SLP-100N Driver + 0104 SLP-200N Driver + 0105 SLP-240 Driver +061a Veridicom International, Inc. + 0110 5thSense Fingerprint Sensor + 0200 FPS200 Fingerprint Sensor + 8200 VKI-A Fingerprint Sensor/Flash Storage (dumb) + 9200 VKI-B Fingerprint Sensor/Flash Storage (smart) +061b Promptus Communications, Inc. +061c Act Labs, Ltd +061d Quatech, Inc. +061e Nissei Electric Co. + 0001 nissei 128DE-USB - + 0010 nissei 128DE-PNA - +0620 Alaris, Inc. + 0004 QuickVideo weeCam + 0007 QuickVideo weeCam + 000a QuickVideo weeCam + 000b QuickVideo weeCam +0621 ODU-Steckverbindungssysteme GmbH & Co. KG +0622 Iotech, Inc. +0623 Littelfuse, Inc. +0624 Avocent Corp. +0625 TiMedia Technology Co., Ltd +0626 Nippon Systems Development Co., Ltd +0627 Adomax Technology Co., Ltd +0628 Tasking Software, Inc. +0629 Zida Technologies, Ltd +062a Creative Labs + 0000 Optical mouse + 0001 Notebook Optical Mouse + 0201 Defender Office Keyboard (K7310) S Zodiak KM-9010 + 9003 VoIP Conference Hub (A16GH) + 9004 USR9602 USB Internet Mini Phone +062b Greatlink Electronics Taiwan, Ltd +062c Institute for Information Industry +062d Taiwan Tai-Hao Enterprises Co., Ltd +062e Mainsuper Enterprises Co., Ltd +062f Sin Sheng Terminal & Machine, Inc. +0631 JUJO Electronics Corp. +0633 Cyrix Corp. +0634 Micron Technology, Inc. +0635 Methode Electronics, Inc. +0636 Sierra Imaging, Inc. + 0003 Vivicam 35Xx +0638 Avision, Inc. + 0268 iVina 1200U Scanner + 026a Minolta Dimage Scan Dual II + 0a10 iVina FB1600/UMAX Astra 4500 + 0a13 AV600U + 0a16 SC-215 + 0a30 UMAX Astra 6700 Scanner + 0a41 Avision AM3000/MF3000 Series + 0f01 fi-4010CU + 4004 Minolta Dimage Scan Elite II +0639 Chrontel, Inc. +063a Techwin Corp. +063b Taugagreining HF +063c Yamaichi Electronics Co., Ltd (Sakura) +063d Fong Kai Industrial Co., Ltd +063e RealMedia Technology, Inc. +063f New Technology Cable, Ltd +0640 Hitex Development Tools +0641 Woods Industries, Inc. +0642 VIA Medical Corp. +0644 TEAC Corp. + 0000 Floppy + 1000 CD-ROM Drive + 800d TASCAM Portastudio DP-01FX + d001 CD-R/RW Unit + d002 CD-R/RW Unit + d010 CD-RW/DVD Unit +0645 Who? Vision Systems, Inc. +0646 UMAX +0647 Acton Research Corp. + 0100 ARC SpectraPro UV/VIS/IR Monochromator/Spectrograph + 0101 ARC AM-VM Mono Airpath/Vacuum Monochromator/Spectrograph + 0102 ARC Inspectrum Mono + 0103 ARC Filterwheel + 03e9 Inspectrum 128x1024 F VIS Spectrograph + 03ea Inspectrum 256x1024 F VIS Spectrograph + 03eb Inspectrum 128x1024 B VIS Spectrograph + 03ec Inspectrum 256x1024 B VIS Spectrograph +0648 Inside Out Networks +0649 Weli Science Co., Ltd +064b White Mountain DSP, Inc. +064c Ji-Haw Industrial Co., Ltd +064d TriTech Microelectronics, Ltd +064e Suyin Corp. +064f WIBU-Systems AG + 0bd7 BOX/U + 0bd8 BOX/RU +0650 Dynapro Systems +0651 Likom Technology Sdn. Bhd. +0652 Stargate Solutions, Inc. +0653 CNF, Inc. +0654 Granite Microsystems, Inc. + 0005 Device Bay Controller + 0006 Hub + 0007 Device Bay Controller + 0016 Hub +0655 Space Shuttle Hi-Tech Co., Ltd +0656 Glory Mark Electronic, Ltd +0657 Tekcon Electronics Corp. +0658 Sigma Designs, Inc. +0659 Aethra +065a Optoelectronics Co., Ltd + 0001 Barcode scanner +065b Tracewell Systems +065e Silicon Graphics +065f Good Way Technology Co., Ltd & GWC technology Inc. +0660 TSAY-E (BVI) International, Inc. +0661 Hamamatsu Photonics K.K. +0662 Kansai Electric Co., Ltd +0663 Topmax Electronic Co., Ltd + 0103 CobraPad +0667 Aiwa Co., Ltd + 0fa1 TD-U8000 Tape Drive +0668 WordWand +0669 Oce' Printing Systems GmbH +066a Total Technologies, Ltd +066b Linksys, Inc. + 0105 SCM eUSB SmartMedia Card Reader + 010a Melco MCR-U2 SmartMedia / CompactFlash Reader + 200c USB10TX + 2202 USB10TX Ethernet [pegasus] + 2203 USB100TX Ethernet [pegasus] + 2204 USB100TX HomePNA Ethernet [pegasus] + 2206 USB Ethernet [pegasus] + 2207 HomeLink Phoneline 10M Network Adapter + 2211 WUSB11 802.11b Adapter + 2212 WUSB11v2.5 802.11b Adapter + 2213 WUSB12v1.1 802.11b Adapter + 2219 Instant Wireless Network Adapter + 400b USB10TX +066d Entrega, Inc. +066e Acer Semiconductor America, Inc. +066f SigmaTel, Inc. + 003b MP3 Player + 003e MP3 Player + 003f MP3 Player + 0040 MP3 Player + 0041 MP3 Player + 0042 MP3 Player + 0043 MP3 Player + 004b A-Max PA11 MP3 Player + 3400 STMP3400 D-Major MP3 Player + 3410 STMP3410 D-Major MP3 Player + 3500 Player Recovery Device + 4200 STIr4200 IrDA Bridge + 4210 STIr4210 IrDA Bridge + 8000 MSCN MP3 Player + 8001 SigmaTel MSCN Audio Player + 8004 MSCNMMC MP3 Player + 8008 i-Bead 100 MP3 Player + 8020 MP3 Player + 8034 MP3 Player + 8036 MP3 Player + 8038 MP3 Player + 8056 MP3 Player + 8060 MP3 Player + 8066 MP3 Player + 807e MP3 Player + 8092 MP3 Player + 8096 MP3 Player + 809a MP3 Player + 80aa MP3 Player + 80ac MP3 Player + 80b8 MP3 Player + 80ba MP3 Player + 80bc MP3 Player + 80bf MP3 Player + 80c5 MP3 Player + 80c8 MP3 Player + 80ca MP3 Player + 80cc MP3 Player + 8104 MP3 Player + 8106 MP3 Player + 8108 MP3 Player + 810a MP3 Player + 810c MP3 Player + 8122 MP3 Player + 8124 MP3 Player + 8126 MP3 Player + 8128 MP3 Player + 8134 MP3 Player + 8136 MP3 Player + 8138 MP3 Player + 813a MP3 Player + 813e MP3 Player + 8140 MP3 Player + 8142 MP3 Player + 8144 MP3 Player + 8146 MP3 Player + 8148 MP3 Player + 814c MP3 Player + 8201 MP3 Player + 8202 Jens of Sweden / I-BEAD 150M/150H MP3 player + 8203 MP3 Player + 8204 MP3 Player + 8205 MP3 Player + 8206 Digital MP3 Music Player + 8207 MP3 Player + 8208 MP3 Player + 8209 MP3 Player + 820a MP3 Player + 820b MP3 Player + 820c MP3 Player + 820d MP3 Player + 820e MP3 Player + 820f MP3 Player + 8210 MP3 Player + 8211 MP3 Player + 8212 MP3 Player + 8213 MP3 Player + 8214 MP3 Player + 8215 MP3 Player + 8216 MP3 Player + 8217 MP3 Player + 8218 MP3 Player + 8219 MP3 Player + 821a MP3 Player + 821b MP3 Player + 821c MP3 Player + 821d MP3 Player + 821e MP3 Player + 821f MP3 Player + 8220 MP3 Player + 8221 MP3 Player + 8222 MP3 Player + 8223 MP3 Player + 8224 MP3 Player + 8225 MP3 Player + 8226 MP3 Player + 8227 MP3 Player + 8228 MP3 Player + 8229 MP3 Player + 8230 MP3 Player + 9000 MP3 Player + 9001 MP3 Player + 9002 MP3 Player +0672 Labtec, Inc. + 1041 LCS1040 Speaker System + 5000 SpaceBall 4000 FLX +0673 HCL + 5000 Keyboard +0674 Key Mouse Electronic Enterprise Co., Ltd +0675 Draytech + 0110 Vigor 128 ISDN TA + 0550 Vigor550 +0676 Teles AG +0677 Aiwa Co., Ltd + 07d5 TM-ED1285(USB) + 0fa1 TD-U8000 Tape Drive +0678 ACard Technology Corp. +067b Prolific Technology, Inc. + 0000 PL2301 USB-USB Bridge + 0001 PL2302 USB-USB Bridge + 04bb PL2303 Serial (IODATA USB-RSAQ2) + 0610 Onext EG210U MODEM + 0611 AlDiga AL-11U Quad-band GSM/GPRS/EDGE modem + 2303 PL2303 Serial Port + 2305 PL2305 Parallel Port + 2307 PL2307 USB-ATAPI4 Bridge + 2313 FITEL PHS U Cable Adaptor + 2315 Flash Disk Embedded Hub + 2316 Flash Disk Security Device + 2317 Mass Storage Device + 2501 PL2501 USB-USB Bridge (USB 2.0) + 2507 PL2507 Hi-speed USB to IDE bridge controller + 2515 Flash Disk Embedded Hub + 2517 Flash Disk Mass Storage Device + 25a1 PL25A1 Host-Host Bridge + 3400 Hi-Speed Flash Disk with TruePrint AES3400 + 3500 Hi-Speed Flash Disk with TruePrint AES3500 + 3507 PL3507 ATAPI6 Bridge + aaa0 Prolific Pharos + aaa2 PL2303 Serial Adapter (IODATA USB-RSAQ3) +067c Efficient Networks, Inc. + 1001 Siemens SpeedStream 100MBps Ethernet + 1022 Siemens SpeedStream 1022 802.11b Adapter + 1023 SpeedStream Wireless + 4020 SpeedStream 4020 ATM/ADSL Installer + 4031 Efficient ADSL Modem + 4032 SpeedStream 4031 ATM/ADSL Installer + 4033 SpeedStream 4031 ATM/ADSL Installer + 4060 Alcatel Speedstream 4060 ADSL Modem + 4062 Efficient Networks 4060 Loader + 5667 Efficient Networks Virtual Bus for ADSL Modem + c031 SpeedStream 4031 ATM/ADSL Installer + c032 SpeedStream 4031 ATM/ADSL Installer + c033 SpeedStream 4031 ATM/ADSL Installer + c060 SpeedStream 4060 Miniport ATM/ADSL Adapter + d667 Efficient Networks Virtual Bus for ADSL Modem + e240 Speedstream Ethernet Adapter E240 + e540 Speedstream Ethernet Adapter E240 +067d Hohner Corp. +067e Intermec + 1001 Mobile Computer +067f Virata, Ltd + 4552 DSL-200 ADSL Modem + 6542 DSL Modem + 6549 DSL Modem + 7541 DSL Modem +0680 Realtek Semiconductor Corp., CPP Div. (Avance Logic) + 0002 Arowana Optical Wheel Mouse MSOP-01 +0681 Siemens Information and Communication Products + 0001 Dect Base + 0002 Gigaset 3075 Passive ISDN + 0005 ID-Mouse with Fingerprint Reader + 0012 I-Gate 802.11b Adapter + 001b WLL013 + 0022 Gigaset SX353 ISDN + 002b A-100-I ADSL Modem + 002e ADSL Router_S-141 + 0034 GSM module MC35/ES75 USB Modem + 3c06 54g USB Network Adapter +0682 Victor Company of Japan, Ltd +0684 Actiontec Electronics, Inc. +0686 Minolta Co., Ltd + 2001 PagePro 4110W + 3001 PagePro 4100 + 3006 PagePro 1250W + 302e Develop D 1650iD PCL + 3034 Develop D 2050iD PCL + 4001 Dimage 2300 + 4003 Dimage 2330 Zoom Camera + 4004 Scan Elite II + 4005 Minolta DiMAGE E201 Mass Storage Device + 4006 Dimage 7 Camera + 4007 Dimage S304 Camera + 4008 Dimage 5 Camera + 4009 Dimage X Camera + 400a Dimage S404 Camera + 400b Dimage 7i Camera + 400c Dimage F100 Camera + 400d Scan Dual III + 400e Dimage 5400 + 400f Dimage 7Hi Camera + 4010 Dimage Xi Camera + 4011 Dimage F300 Camera + 4012 Dimage F200 Camera + 4014 Dimage S414 Camera + 4015 Dimage XT Camera [storage] + 4016 Dimage XT Camera [remote mode] + 4017 Dimage E223 + 4018 Dimage Z1 Camera + 401a Dimage A1 Camera + 401c Dimage X20 Camera + 401e Dimage E323 Camera +068a Pertech, Inc. +068b Potrans International, Inc. +068e CH Products, Inc. + 00e2 HFX OEM Joystick + 00f1 Pro Throttle + 00f2 Flight Sim Pedals + 00f3 Fighterstick + 00ff Flight Sim Yoke + 0500 GameStick 3D + 0501 CH Pro Pedals + 0504 F-16 Combat Stick +0690 Golden Bridge Electech, Inc. +0693 Hagiwara Sys-Com Co., Ltd + 0002 FlashGate SmartMedia Card Reader + 0003 FlashGate CompactFlash Card Reader + 0005 FlashGate + 0006 SM PCCard R/W and SPD + 0007 FlashGate ME (Authenticated) + 000a SDCard/MMC Reader/Writer +0694 Lego Group + 0001 Mindstorms Tower +0698 Chuntex (CTX) + 1786 1300ex Monitor + 9999 VLxxxx Monitor+Hub +0699 Tektronix, Inc. +069a Askey Computer Corp. + 0001 VC010 WebCam [pwc] + 0303 Cable Modem + 0311 ADSL Router Remote NDIS Device + 0318 Remote NDIS Device + 0319 220V Remote NDIS Device + 0320 IEEE 802.11b Wireless LAN Card + 0321 Dynalink WLL013 / Compex WLU11A 802.11b Adapter + 0402 Scientific Atlanta WebSTAR 100 & 200 series Cable Modem + 0811 BT Virtual Bus for Helium + 0821 BT Voyager 1010 802.11b Adapter + 4402 Scientific Atlanta WebSTAR 2000 series Cable Modem + 4403 Scientific Atlanta WebSTAR 300 series Cable Modem + 4501 Scientific-Atlanta WebSTAR 2000 series Cable Modem +069b Thomson, Inc. + 0704 DCM245 Cable Modem + 070c MP3 Player + 070d MP3 Player + 070e MP3 Player + 070f RCA Lyra RD1071 MP3 Player + 2220 RCA Kazoo RD1000 MP3 Player + 300a RCA Lyra MP3 Player + 3012 MP3 Player + 3013 MP3 Player + 5557 RCA CDS6300 +069d Hughes Network Systems (HNS) + 0001 Satellite Receiver Device + 0002 Satellite Device +069e Marx + 0005 CryptoBox v1.2 +069f Allied Data Technologies BV + 0010 Tornado Speakerphone FaxModem 56.0 + 0011 Tornado Speakerphone FaxModem 56.0 + 1000 ADT VvBus for CopperJet +06a2 Topro Technology, Inc. +06a3 Saitek PLC + 0006 Cyborg Gold Joystick + 0109 P880 Pad + 0160 ST290 Pro + 0200 Xbox Adrenalin Hub + 0241 Xbox Adrenalin Gamepad + 0255 X52 Flight Controller + 040b P990 Dual Analog Pad + 040c P2900 Wireless Pad + 0422 ST90 Joystick + 0460 ST290 Pro Flight Stick + 0463 ST290 + 0464 Cyborg Evo + 0471 Cyborg Graphite Stick + 0501 R100 Sports Wheel + 0502 ST200 Stick + 0506 R220 Digital Wheel + 051e Cyborg Digital II Stick + 052d P750 Gamepad + 053c X45 Flight Controller + 053f X36F Flightstick + 056c P2000 Tilt Pad + 056f P2000 Tilt Pad + 05d2 PC Dash 2 + 075c X52 Flight Controller + 0805 R440 Force Wheel + 1003 GM2 Action Pad + 1009 Action Pad + 100a SP550 Pad and Joystick Combo + 100b SP550 Pad + 1509 P3000 Wireless Pad + 1589 P3000 Wireless Pad + 2541 X45 Flight Controller + 3509 P3000 RF GamePad + 353e Cyborg Evo Wireless + 3589 P3000 Wireless Pad + 35be Cyborg Evo + 5509 P3000 Wireless Pad + 8000 Gamers' Keyboard + 801e Cyborg 3D Digital Stick II + 8021 Eclipse II Keyboard + 802d P750 Pad + 803f X36 Flight Controller + 806f P2000 Tilt Pad + 80c0 Pro Gamer Command Unit + a502 Gaming Mouse + ff04 R440 Force Wheel + ff0c Cyborg Force Rumble Pad + ff0d P2600 Rumble Force Pad + ff12 Cyborg 3D Force Stick + ff17 ST 330 Rumble Force Stick + ff52 Cyborg 3D Rumble Force Joystick + ffb5 Cyborg Evo Force Joystick +06a4 Xiamen Doowell Electron Co., Ltd +06a5 Divio + 0000 Typhoon Webcam 100k [nw8000] + d001 ProLink DS3303u WebCam + d800 Chicony TwinkleCam + d820 Wize Media 1000 +06a7 MicroStore, Inc. +06a8 Topaz Systems, Inc. + 0042 SignatureGem 1X5 Pad + 0043 SignatureGem 1X5-HID Pad +06a9 Westell + 0005 WireSpeed Dual Connect Modem + 0006 WireSpeed Dual Connect Modem + 000a WireSpeed Dual Connect Modem + 000b WireSpeed Dual Connect Modem + 000e 802.11g Adapter +06aa Sysgration, Ltd +06ac Fujitsu Laboratories of America, Inc. +06ad Greatland Electronics Taiwan, Ltd +06ae Professional Multimedia Testing Centre +06af Harting, Inc. of North America +06b8 Pixela Corp. +06b9 Alcatel Telecom + 0121 SpeedTouch 121g Wireless Dongle + 2001 SPEED TOUCH Card + 4061 SpeedTouch ISDN or ADSL Modem + a5a5 DynaMiTe Modem +06ba Smooth Cord & Connector Co., Ltd +06bb EDA, Inc. +06bc Oki Data Corp. +06bd AGFA-Gevaert NV + 0001 SnapScan 1212U + 0002 SnapScan 1236U + 0100 SnapScan Touch + 0101 SNAPSCAN ELITE + 0200 ScanMaker 8700 + 02bf DUOSCAN f40 + 0400 CL30 + 0401 Mass Storage + 0403 ePhoto CL18 Camera + 0404 ePhoto CL20 Camera + 2061 SnapScan 1212U (?) + 208d Snapscan e40 + 208f SnapScan e50 + 2091 SnapScan e20 + 2093 SnapScan e10 + 2095 SnapScan e25 + 2097 SnapScan e26 + 20fd SnapScan e52 + 20ff SnapScan e42 +06be AME Optimedia Technology Co., Ltd + 1005 Dazzle DPVM! (1005) + d001 P35U Camera Capture +06bf Leoco Corp. +06c2 Phidgets Inc. (formerly GLAB) + 0030 PhidgetRFID + 0038 4-Motor PhidgetServo v3.0 + 0039 1-Motor PhidgetServo v3.0 + 003a 8-Motor PhidgetAvancedServo + 0040 PhidgetInterface Kit 0-0-4 + 0044 PhidgetInterface Kit 0-16-16 + 0045 PhidgetInterface Kit 8-8-8 + 0048 PhidgetStepper (Under Development) + 0049 PhidgetTextLED Ver 1.0 + 004a PhidgetLED Ver 1.0 + 004b PhidgetEncoder Ver 1.0 + 0051 PhidgetInterface Kit 0-5-7 (Custom) + 0052 PhidgetTextLCD + 0053 PhidgetInterfaceKit 0-8-8 + 0058 PhidgetMotorControl Ver 1.0 + 0070 PhidgetTemperatureSensor Ver 1.0 + 0071 PhidgetAccelerometer Ver 1.0 + 0072 PhidgetWeightSensor Ver 1.0 + 0073 PhidgetHumiditySensor + 0074 PhidgetPHSensor + 0075 PhidgetGyroscope +06c4 Bizlink International Corp. +06c5 Hagenuk, GmbH +06c6 Infowave Software, Inc. +06c8 SIIG, Inc. +06c9 Taxan (Europe), Ltd + 0005 Monitor Control + 0007 Monitor Control + 0009 Monitor Control +06ca Newer Technology, Inc. +06cb Synaptics, Inc. + 0001 HID Device + 0002 HID Device + 0003 HID Device + 0005 Touchpad/FPS + 0006 HID Device + 0007 HID Device + 0008 HID Device + 0009 Composite TouchPad and TrackPoint + 000e HID Device + 0010 Composite Human Interface Device + 0013 Human Interface Device +06cc Terayon Communication Systems + 0101 Cable Modem + 0102 Cable Modem + 0103 Cable Modem + 0104 Cable Modem + 0304 Cable Modem +06cd Keyspan + 0101 USA-28 PDA [no firmware] + 0102 USA-28X PDA [no firmware] + 0103 USA-19 PDA [no firmware] + 0104 PDA [prerenum] + 0105 USA-18X PDA [no firmware] + 0106 USA-19W PDA [no firmware] + 0107 USA-19 PDA + 0108 USA-19W PDA + 0109 USA-49W serial adapter [no firmware] + 010a USA-49W serial adapter + 010b USA-19Qi serial adapter [no firmware] + 010c USA-19Qi serial adapter + 010d USA-19Q serial Adapter (no firmware) + 010e USA-19Q serial Adapter + 010f USA-28 PDA + 0110 USA-28Xb PDA + 0111 USA-18 serial Adapter + 0112 USA-18X PDA + 0113 USA-28Xb PDA [no firmware] + 0114 USA-28Xa PDA [no firmware] + 0115 USA-28Xa PDA + 0116 USA-18XA serial Adapter (no firmware) + 0117 USA-18XA serial Adapter + 0118 USA-19QW PDA [no firmware] + 0119 USA-19QW PDA + 011a USA-49Wlc serial adapter [no firmware] + 011b MPR Serial Preloader (MPRQI) + 011c MPR Serial (MPRQI) + 011d MPR Serial Preloader (MPRQ) + 011e MPR Serial (MPRQ) + 0121 USA-19hs serial adapter + 012a USA-49Wlc serial adapter + 0201 Digital Media Remote + 0202 UIA-11 remote control +06cf SpheronVR AG + 1010 PanoCam 10 + 1012 PanoCam 12/12X +06d0 LapLink, Inc. + 0622 LapLink Gold USB-USB Bridge [net1080] +06d1 Daewoo Electronics Co., Ltd +06d3 Mitsubishi Electric Corp. + 0380 CP8000D Port + 0381 CP770D Port + 0385 CP900D Port + 0387 CP980D Port + 038b CP3020D Port + 038c CP900DW(ID) Port + 0393 CP9500D/DW Port + 0394 CP9000D/DW Port + 03a1 CP9550D/DW Port +06d4 Cisco Systems +06d5 Toshiba + 4000 Japanese Keyboard +06d6 Aashima Technology B.V. + 002d Trust PowerC@m 350FT + 002e Trust PowerC@m 350FS + 0030 Trust 710 LCD POWERC@M ZOOM - MSD + 0031 Trust 710 LCD POWERC@M ZOOM + 003a Trust PowerC@m 770Z + 003c Trust 910z PowerC@m + 003f Trust 735S POWERC@M ZOOM, WDM DSC Bulk Driver + 0050 Trust 738AV LCD PV Digital Camera + 0062 TRUST 782AV LCD P. V. Video Capture + 0066 TRUST Digital PCTV and Movie Editor + 006b TRUST AUDIO VIDEO EDITOR +06d7 Network Computing Devices (NCD) +06d8 Technical Marketing Research, Inc. +06da Phoenixtec Power Co., Ltd + 0002 UPS +06db Paradyne +06dc Foxlink Image Technology Co., Ltd + 0012 Scan 1200c Scanner + 0014 Prolink Winscan Pro 2448U +06de Heisei Electronics Co., Ltd +06e0 Multi-Tech Systems, Inc. + f101 MT5634ZBA-USB MultiModemUSB (old firmware) + f103 MT5634MU MultiMobileUSB + f104 MT5634ZBA-USB MultiModemUSB (new firmware) + f107 MT5634ZBA-USB-V92 MultiModemUSB +06e1 ADS Technologies, Inc. + 0008 UBS-10BT Ethernet [klsi] + 0009 UBS-10BT Ethernet + 0833 Mass Storage Device + a160 Instant Video-To-Go RDX-160 (no firmware) + a161 Instant Video-To-Go RDX-160 + a190 Instand VCD Capture + a191 Instant VideoXpress + a337 Mini DigitalTV + a701 DVD Xpress + b337 Mini DigitalTV + b701 DVD Xpress B +06e4 Alcatel Microelectronics +06e6 Tiger Jet Network, Inc. + 0200 Internet Phone + 0201 Internet Phone + 0202 Composite Device + 0203 Internet Phone + 0210 Composite Device + 0211 Internet Phone + 0212 Internet Phone + 031c Internet Phone + 031d Internet Phone + 031e Internet Phone + 3200 Composite Device + 3201 Internet Phone + 3202 Composite Device + 3203 Composite Device + 7200 Composite Device + 7210 Composite Device + 7250 Composite Device + 825c Internet Phone + 831c Internet Phone + 831d Composite Device + 831e Composite Device + b200 Composite Device + b201 Composite Device + b202 Internet Phone + b210 Internet Phone + b211 Composite Device + b212 Composite Device + b250 Composite Device + b251 Internet Phone + b252 Internet Phone + c200 Internet Phone + c201 Internet Phone + c202 Composite Device + c203 Internet Phone + c210 Personal PhoneGateway + c211 Personal PhoneGateway + c212 Personal PhoneGateway + c213 PPG Device + c25c Composite Device + c290 PPG Device + c291 PPG Device + c292 PPG Device + c293 Personal PhoneGateway + c31c Composite Device + c39c Personal PhoneGateway + c39d PPG Device + c39e PPG Device + c39f PPG Device + c700 Internet Phone + c701 Internet Phone + c702 Composite Device + c703 Internet Phone + c710 VoIP Combo Device + c711 VoIP Combo + c712 VoIP Combo Device + c713 VoIP Combo Device + cf00 Composite Device + cf01 Internet Phone + cf02 Internet Phone + cf03 Composite Device + d210 Personal PhoneGateway + d211 PPG Device + d212 PPG Device + d213 Personal PhoneGateway + d700 Composite Device + d701 Composite Device + d702 Internet Phone + d703 Composite Device + d710 VoIP Combo + d711 VoIP Combo Device + d712 VoIP Combo + d713 VoIP Combo + df00 Composite Device + df01 Composite Device + df02 Internet Phone + df03 Internet Phone + f200 Internet Phone + f201 Internet Phone + f202 Composite Device + f203 Composite Device + f210 Internet Phone + f250 Composite Device + f252 Internet Phone + f310 Internet Phone + f350 Composite Device +06ea Sirius Technologies + 0001 NetCom Roadster II 56k + 0002 Roadster II 56k +06eb PC Expert Tech. Co., Ltd +06ef I.A.C. Geometrische Ingenieurs B.V. +06f0 T.N.C Industrial Co., Ltd + de01 DualCam Video Camera + de02 DualCam Still Camera +06f1 Opcode Systems, Inc. + a011 SonicPort + a021 SonicPort Optical +06f2 Emine Technology Co. + 0011 KVM Switch Keyboard +06f6 Wintrend Technology Co., Ltd +06f7 Wailly Technology Ltd + 0003 USB->Din 4 Adaptor +06f8 Guillemot Corp. + a300 Dual Analog Leader GamePad + b000 Hercules DJ Console + c000 Hercules Muse Pocket + d002 Hercules DJ Console + e000 HWGUSB2-54 WLAN + e010 HWGUSB2-54-LB + e020 HWGUSB2-54V2-AP +06fa HSD S.r.L +06fc Motorola Semiconductor Products Sector +06fd Boston Acoustics + 0101 Audio Device + 0102 Audio Device + 0201 2-piece Audio Device +06fe Gallant Computer, Inc. +0701 Supercomal Wire & Cable SDN. BHD. +0703 Bvtech Industry, Inc. +0705 NKK Corp. +0706 Ariel Corp. +0707 Standard Microsystems Corp. + 0100 2202 Ethernet [klsi] + 0200 2202 Ethernet [pegasus] + 0201 EZ Connect USB Ethernet + ee04 SMCWUSB32 802.11b Wireless LAN Card + ee06 EZ-Connect 802.11g Adapter + ee13 EZ-Connect 802.11g Adapter +0708 Putercom Co., Ltd + 047e USB-1284 BRIDGE +0709 Silicon Systems, Ltd (SSL) +070a Oki Electric Industry Co., Ltd + 4002 Bluetooth Device + 4003 Bluetooth Device +070d Comoss Electronic Co., Ltd +070e Excel Cell Electronic Co., Ltd +0710 Connect Tech, Inc. + 0001 WhiteHeat (fake ID) + 8001 WhiteHeat +0711 Magic Control Technology Corp. + 0100 Hub + 0180 IRXpress Infrared Device + 0181 IRXpress Infrared Device + 0200 BAY-3U1S1P Serial Port + 0210 MCT1S Serial Port + 0230 MCT-232 Serial Port + 0231 PS/2 Mouse Port + 0232 Serial On Port + 0240 PS/2 to USB Converter + 0300 BAY-3U1S1P Parallel Port + 0302 Parallel Port + 0900 SVGA Adapter +0713 Interval Research Corp. +0714 NewMotion, Inc. + 0003 ADB to USB convertor +0717 ZNK Corp. +0718 Imation Corp. + 0002 SuperDisk 120MB + 0003 SuperDisk 120MB (Authenticated) + 0060 Flash Drive + 0061 Flash Drive + 0062 Flash Drive + 0063 Swivel Flash Drive + 0064 Flash Drive + 0065 Flash Drive + 0066 Flash Drive + 0067 Flash Drive + 0068 Flash Drive + 0084 USB Flash Drive Mini +0719 Tremon Enterprises Co., Ltd +071b Domain Technologies, Inc. + 0002 DTI-56362-USB Digital Interface Unit + 0101 Audio4-USB DSP Data Acquisition Unit + 0201 Audio4-5410 DSP Data Acquisition Unit + 0301 SB-USB JTAG Emulator +071c Xionics Document Technologies, Inc. +071d Eicon Networks Corp. + 1000 Diva ISDN TA + 1003 Diva + 2000 Teledat Surf +071e Ariston Technologies +0723 Centillium Communications Corp. + 0002 Palladia 300/400 Adsl Modem +0726 Vanguard International Semiconductor-America +0729 Amitm + 1000 USC-1000 Serial Port +072e Sunix Co., Ltd +072f Advanced Card Systems, Ltd + 0001 AC1030-based SmartCard Reader + 0008 ACR 80 Smart Card Reader + 1000 PLDT Drive + 1001 PLDT Drive + 8002 AET63 BioTRUSTKey + 8003 ACR120 + 8103 ACR120 + 9000 ACR38 AC1038-based Smart Card Reader + 90cc ACR38 SmartCard Reader + 90cf ACR38 SAM Smart Card Reader + 90d0 PertoSmart EMV - Card Reader +0731 Susteen, Inc. + 0528 SonyEricsson DCU-11 Cable +0732 Goldfull Electronics & Telecommunications Corp. +0733 ViewQuest Technologies, Inc. + 0101 Digital Video Camera + 0110 VQ110 + 0401 CS330 WebCam + 0402 M-318B WebCam + 0430 Intel Pro Share WebCam + 0630 VQ630 Dual Mode Digital Camera(Bulk) + 0631 Hercules Dualpix + 0780 Smart Cam Deluxe(composite) + 1310 Epsilon 1.3/Jenoptik JD C1.3/UMAX AstraPix 470 + 1311 Digital Dream Epsilon 1.3 + 2211 Jenoptik +0734 Lasat Communications A/S + 0001 560V Modem + 0002 Lasat 560V Modem + 043a DVS Audio +0735 Asuscom Network + 2100 ISDN Adapter + 2101 ISDN Adapter + 6694 ISDN Adapter + c541 ISDN TA 280 +0736 Lorom Industrial Co., Ltd +0738 Mad Catz, Inc. + 4507 XBox Device + 4516 XBox Device + 4520 XBox Device + 4526 XBox Device + 4536 XBox Device + 4540 XBox Device + 4556 XBox Device + 4566 XBox Device + 4576 XBox Device + 4586 XBox Device + 4588 XBox Device +073a Chaplet Systems, Inc. +073b Suncom Technologies +073d Eutron S.p.a. + 0005 Crypto Token + 0007 CryptoIdentity CCID + 0025 SmartKey 3 + 0c00 Pocket Reader + 0d00 StarSign Bio Token 3.0 EU +073c Industrial Electronic Engineers, Inc. + 0305 Pole Display (PC305-3415 2 x 20 Line Display) + 0322 Pole Display (PC322-3415 2 x 20 Line Display) + 0324 Pole Display (LB324-USB 4 x 20 Line Display) + 0330 Pole Display (P330-3415 2 x 20 Line Display) + 0450 Pole Display (L450-USB Graphic Line Display) + 0505 Pole Display (SPC505-3415 2 x 20 Line Display) + 0522 Pole Display (SPC522-3415 2 x 20 Line Display) + 0624 Pole Display (SP324-3415 2 x 20 Line Display) +073e NEC, Inc. + 0301 Game Pad +0745 Syntech Information Co., Ltd +0746 Onkyo Corp. + 5500 SE-U55 Audio Device +0747 Labway Corp. +0748 Strong Man Enterprise Co., Ltd +0749 EVer Electronics Corp. +074a Ming Fortune Industry Co., Ltd +074b Polestar Tech. Corp. +074c C-C-C Group PLC +074d Micronas GmbH + 3553 Composite USB-Device + 3554 Composite USB-Device + 3556 Composite USB-Device +074e Digital Stream Corp. + 0001 PS/2 Adapter + 0002 PS/2 Adapter +0755 Aureal Semiconductor +0757 Network Technologies, Inc. +075b Sophisticated Circuits, Inc. + 0001 Kick-off! Watchdog +0763 Midiman + 0115 KeyRig 25 + 0117 Trigger Finger + 0119 MidAir + 0150 M-Audio Uno + 0160 M-Audio 1x1 + 0192 M-Audio Keystation 88es + 0193 ProKeys 88 + 0194 ProKeys 88sx + 0195 Oxygen 8 v2 + 0196 Oxygen 49 + 0197 Oxygen 61 + 0198 Axiom 25 + 0199 Axiom 49 + 019a Axiom 61 + 019b KeyRig 49 + 019c KeyStudio + 1001 MidiSport 2x2 + 1002 MidiSport 2x2 + 1003 MidiSport 2x2 + 1010 MidiSport 1x1 + 1011 MidiSport 1x1 + 1014 M-Audio Keystation Loader + 1015 M-Audio Keystation + 1020 Midisport 4x4 + 1021 MidiSport 4x4 + 1030 Midisport 8x8 + 1031 MidiSport 8x8/s Loader + 1033 MidiSport 8x8/s + 1040 M-Audio MidiSport 2x4 Loader + 1041 M-Audio MidiSport 2x4 + 2001 M Audio Quattro + 2002 M Audio Duo + 2003 M Audio AudioPhile + 2004 M-Audio MobilePre + 2006 M-Audio Transit + 2007 M-Audio Sonica Theater + 2008 M-Audio Ozone + 200d M-Audio OmniStudio + 200f M-Audio MobilePre + 2010 M-Audio Fast Track + 2013 M-Audio JamLab + 2015 M-Audio RunTime DFU + 2016 M-Audio RunTime DFU + 2019 M-Audio Ozone Academic + 201a M-Audio Micro + 201b M-Audio RunTime DFU + 201d M-Audio Producer + 2080 M-Audio RunTime DFU + 2081 M-Audio RunTime DFU + 2803 M-Audio Audiophile DFU + 2804 M-Audio MobilePre DFU + 2806 M-Audio Transit DFU + 2815 M-Audio DFU + 2816 M-Audio DFU + 281b M-Audio DFU + 2880 M-Audio DFU + 2881 M-Audio DFU +0764 Cyber Power System, Inc. + 0005 Cyber Power UPS + 0501 CP1500 AVR UPS +0765 X-Rite, Inc. +0766 Jess-Link Products Co., Ltd +0767 Tokheim Corp. +0768 Camtel Technology Corp. + 0006 Camtel Technology USB TV Genie Pro FM Model TVB330 + 0023 eHome Infrared Receiver +0769 Surecom Technology Corp. + 11f2 EP-9001-g 802.11g 54M WLAN Adapter + 11f3 RT2570 + 11f7 802.11g 54M WLAN Adapter + 31f3 RT2573 +076a Smart Technology Enablers, Inc. +076b OmniKey AG + 0596 CardMan 2020 + 1021 CardMan 1021 + 1221 CardMan 1221 + 1784 CardMan 6020 + 3021 CardMan 3121 + 3610 CardMan 3620 + 3621 CardMan 3621 + 3821 CardMan 3821 + 4321 CardMan 4321 + 5121 CardMan 5121 + 5125 CardMan 5125 + 6622 CardMan 6121 + a011 CCID Smart Card Reader Keyboard + a021 CCID Smart Card Reader + a022 CardMan Smart@Link + c000 CardMan 3x21 CS + c001 CardMan 5121 CS +076c Partner Tech +076d Denso Corp. +076e Kuan Tech Enterprise Co., Ltd +076f Jhen Vei Electronic Co., Ltd +0770 Welch Allyn, Inc - Medical Division +0774 AmTRAN Technology Co., Ltd +0775 Longshine Electronics Corp. +0776 Inalways Corp. +0777 Comda Enterprise Corp. +0778 Volex, Inc. +0779 Fairchild Semiconductor +077a Sankyo Seiki Mfg. Co., Ltd +077b Linksys + 08be BEFCMU10 v4 Cable Modem + 2219 WUSB11 V2.6 802.11b Adapter + 2226 USB200M 100baseTX Adapter +077c Forward Electronics Co., Ltd + 0005 NEC Keyboard +077d Griffin Technology + 0223 IMic Audio In/Out + 0405 iMate, ADB Adapter + 0410 PowerMate + 041a PowerWave + 07af iMic + 627a Radio SHARK +077f Well Excellent & Most Corp. +0781 SanDisk Corp. + 0001 SDDR-05a ImageMate CompactFlash Reader + 0002 SDDR-31 ImageMate II CompactFlash Reader + 0005 SDDR-05b (CF II) ImageMate CompactFlash Reader + 0100 ImageMate SDDR-12 + 0200 SDDR-09 (SSFDC) ImageMate SmartMedia Reader [eusb] + 0400 SecureMate SD/MMC Reader + 0621 SDDR-86 Imagemate 6-in-1 Reader + 0720 Sansa C200 series in recovery mode + 0729 Sansa E200 series in recovery mode + 0810 SDDR-75 ImageMate CF-SM Reader + 0830 ImageMate CF/MMC/SD Reader + 1234 Cruzer Mini Flash Drive + 5150 SDCZ2 Cruzer Mini Flash Drive (thin) + 5151 Cruzer Micro 256/512MB Flash Drive + 5153 Cruzer USB-Flash-Drive + 5406 Cruzer Micro 1/4GB Flash Drive + 5408 Cruzer Titanium U3 + 6100 Ultra II SD Plus 2GB + 7100 Cruzer Mini + 7101 Pen Flash + 7102 Cruzer Mini + 7103 Cruzer Mini + 7104 Cruzer Micro Mini 256MB Flash Drive + 7105 Cruzer Mini + 7106 Cruzer Mini + 7112 Cruzer Micro 128MB Flash Drive + 7113 Cruzer Micro 256MB Flash Drive + 7114 Cruzer Mini + 7115 Cruzer Mini + 7420 Sansa E200 series (mtp) + 7421 Sansa E200 series + 7432 Sansa Clip (mtp) + 7433 Sansa Clip (msc) + 7450 Sansa C250 + 7451 Sansa C240 + 7480 Sansa Connect + 7481 Sansa Connect (in recovery mode) + 8181 Pen Flash + 8183 Hi-Speed Mass Storage Device + 8185 SDCZ2 Cruzer Mini Flash Drive (older, thick) + 8888 Card Reader + 8889 SDDR-88 Imagemate 8-in-1 Reader + 8919 Card Reader + 8989 ImageMate 12-in-1 Reader + 9191 ImageMate CF + 9219 Card Reader + 9292 ImageMate CF Reader/Writer + 9393 ImageMate SD-MMC + 9595 ImageMate xD-SM + 9797 ImageMate MS-PRO + 9919 Card Reader + 9999 SDDR-99 5-in-1 Reader + a7e8 SDDR-113 MicroMate SDHC Reader + b2b3 SDDR-103 MobileMate SD+ Reader +0782 Trackerball +0783 C3PO + 0003 LTC31 SmartCard Reader +0784 Vivitar, Inc. + 0100 Vivicam 2655 + 1310 Vivicam 3305 + 1688 Vivicam 3665 + 1689 Gateway DC-M42/Labtec DC-505/Vivitar Vivicam 3705 + 2620 AOL Photocam Plus + 2888 Polaroid DC700 + 3330 Nytec ND-3200 Camera + 4300 Traveler D1 + 5260 Werlisa Sport PX 100 / JVC GC-A33 Camera + 5300 Pretec dc530 +0785 NTT-ME + 0001 MN128mini-V ISDN TA + 0003 MN128mini-J ISDN TA +0789 Logitec Corp. + 0026 LHD Device + 0033 DVD Multi-plus unit LDR-H443SU2 + 0063 LDR Device + 0064 LDR-R Device + 00b3 DVD Multi-plus unit LDR-H443U2 + 010c Realtek RTL8187 Wireless 802.11g 54Mbps Network Adapter +078b Happ Controls, Inc. + 0010 Driving UGCI + 0020 Flying UGCI + 0030 Fighting UGCI +078c GTCO/CalComp + 0400 Digitizer (Whiteboard) +078e Brincom, Inc. +0790 Pro-Image Manufacturing Co., Ltd +0791 Copartner Wire and Cable Mfg. Corp. +0792 Axis Communications AB +0793 Wha Yu Industrial Co., Ltd +0794 ABL Electronics Corp. +0795 RealChip, Inc. +0796 Certicom Corp. +0797 Grandtech Semiconductor Corp. + 6801 Flatbed Scanner + 6802 InkJet Color Printer + 8001 SmartCam + 801a Typhoon StyloCam + 801c Meade Binoculars/Camera + 8901 ScanHex SX-35a + 8909 ScanHex SX-35b + 8911 ScanHex SX-35c +0798 Optelec + 0001 Braille Voyager +079b Sagem + 0027 USB-Serial Controller + 004a XG-760A + 004b Wi-Fi 11g adapter + 0056 Agfa AP1100 Photo Printer + 0062 XG-76NA +079d Alfadata Computer Corp. + 0201 GamePort Adapter +07a1 Digicom S.p.A. + d952 Palladio USB V.92 Modem +07a2 National Technical Systems +07a3 Onnto Corp. +07a4 Be, Inc. +07a6 ADMtek, Inc. + 07c2 AN986A Ethernet + 0986 AN986 Pegasus Ethernet + 8266 Infineon WildCard-USB Wireless LAN Adapter + 8511 ADM8511 Pegasus II Ethernet + 8513 AN8513 Ethernet + 8515 AN8515 Ethernet +07aa Corega K.K. + 0001 Ether USB-T Ethernet [klsi] + 0004 FEther USB-TX Ethernet [pegasus] + 000c WirelessLAN USB-11 + 000d FEther USB-TXS + 0012 Stick-11 802.11b Adapter + 0017 FEther USB2-TX + 001a ULUSB-11 Key + 002f CG-WLUSB2GNL + 7613 Stick-11 V2 802.11b Adapter + 9601 FEther USB-TXC +07ab Freecom Technologies + fc01 IDE bridge + fc02 Cable II USB-2 + fc03 USB2-IDE IDE bridge + fcf8 Freecom Classic SL Network Drive +07af Microtech + 0004 SCSI-DB25 SCSI Bridge [shuttle] + 0005 SCSI-HD50 SCSI Bridge [shuttle] + 0006 CameraMate SmartMedia and CompactFlash Card Reader [eusb/shuttle] + fc01 Freecom USB-IDE +07b0 Trust Technologies + 0001 ISDN TA + 0002 ISDN TA128 Plus + 0003 ISDN TA128 Deluxe + 0005 ISDN TA128 SE + 0006 ISDN TA128 CE + 0007 ISDN TA + 0008 ISDN TA +07b1 IMP, Inc. +07b2 Motorola BCS, Inc. + 0100 SURFboard Voice over IP Cable Modem + 0900 SURFboard Gateway + 0950 SURFboard SBG950 Gateway + 1000 SURFboard SBG1000 Gateway + 4100 SurfBoard SB4100 Cable Modem + 4200 SurfBoard SB4200 Cable Modem + 4210 SurfBoard 4210 Cable Modem + 4220 SURFboard SB4220 Cable Modem + 4500 CG4500 Communications Gateway + 450b CG4501 Communications Gateway + 450e CG4500E Communications Gateway + 5100 SurfBoard SB5100 Cable Modem + 5101 SurfBoard SB5101 Cable Modem + 5120 SurfBoard SB5120 Cable Modem (RNDIS) + 7030 Wireless Adapter WU830G +07b3 Plustek, Inc. + 0001 OpticPro 1212U Scanner + 0003 Scanner + 0010 OpticPro U12 Scanner + 0011 OpticPro U24 Scanner + 0013 OpticPro UT12 Scanner + 0014 Scanner + 0015 OpticPro U24 Scanner + 0017 OpticPro UT12/16/24 Scanner + 0204 Scanner + 0400 OpticPro 1248U Scanner + 0401 OpticPro 1248U Scanner #2 + 0403 OpticPro U16B Scanner + 0404 Scanner + 0405 A8 Namecard-s Controller + 0406 A8 Namecard-D Controller + 0410 Scanner + 0412 Scanner + 0800 OpticPro ST48 Scanner + 0c03 OpticPro ST64+ Scanner +07b4 Olympus Optical Co., Ltd + 0100 Camedia C-2100/C-3000 Ultra Zoom Camera + 0102 Camedia E-10/C-220/C-50 Camera + 0105 Camedia C-310Z/C-700/C-750UZ/C-755/C-765UZ/C-3040/C-4000/C-5050Z/D-560/C-3020Z Zoom Camera + 0109 C-370Z/D-535Z/X-450 + 0112 MAUSB-100 xD Card Reader + 0113 Mju 500 + 0114 C-350Z Camera + 0118 Mju Mini Digital/Mju Digital 500 Camera + 0184 P-S100 port + 0203 Digital Voice Recorder DW-90 + 0206 Digital Voice Recorder DS-330 + 0207 Digital Voice Recorder & Camera W-10 + 0209 Digital Voice Recorder DM-20 + 020d Digital Voice Recorder VN-240PC +07b5 Mega World International, Ltd + 0017 Joystick + 0213 Thrustmaster Firestorm Digital 3 Gamepad + 9902 GamePad +07b6 Marubun Corp. +07b7 TIME Interconnect, Ltd +07b8 D-Link Corp. + 110c XX1 + 1201 IEEE 802.11b Adapter + 200c XX2 + 2573 Wireless LAN Card + 4000 DU-E10 Ethernet [klsi] + 4002 DU-E100 Ethernet [pegasus] + 4003 1/10/100 Ethernet Adapter + 4004 XX4 + 4007 XX5 + 400b XX6 + 400c XX7 + 401a RTL8151 + 4102 USB 1.1 10/100M Fast Ethernet Adapter + 4104 XX9 + 420a UF200 Ethernet + 6001 WL54 + a001 Wireless Network Adapter + abc1 DU-E10 Ethernet [pegasus] + b000 BWU613 + b02a AboCom Bluetooth Device + b02b Bluetooth dongle + b02c BCM92045DG-Flash with trace filter + b02d BCM92045DG-Flash with trace filter + b02e BCM92045DG-Flash with trace filter + b030 BCM92045DG-Flash with trace filter + b031 BCM92045DG-Flash with trace filter + b032 BCM92045DG-Flash with trace filter + b033 BCM92045DG-Flash with trace filter + b21a 802.11g Wireless Adapter + b21b HWU54DM + b21c RT2573 + b21d RT2573 + b21e RT2573 + b21f WUG2700 + d011 MP3 Player + e001 Mass Storage Device + e002 Mass Storage Device + e003 Mass Storage Device + e004 Mass Storage Device + e005 Mass Storage Device + e006 Mass Storage Device + e007 Mass Storage Device + e008 Mass Storage Device + e009 Mass Storage Device + e00a Mass Storage Device + e4f0 Card Reader Driver + f101 DSB-560 Modem [atlas] +07bc Canon Computer Systems, Inc. +07bd Webgear, Inc. +07be Veridicom +07c0 Code Mercenaries Hard- und Software GmbH + 1121 The Claw + 1500 IO-Warrior 40 + 1501 IO-Warrior 24 + 1502 IO-Warrior 48 + 1503 IO-Warrior 28 +07c1 Keisokugiken + 0068 HKS-0200 USBDAQ +07c4 Datafab Systems, Inc. + 0102 USB to LS120 + 0103 USB to IDE + 1234 USB to ATAPI + a000 CompactFlash Card Reader + a001 CompactFlash & SmartMedia Card Reader [eusb] + a002 Disk Drive + a003 Datafab-based Reader + a004 USB to MMC Class Drive + a005 CompactFlash & SmartMedia Card Reader + a006 SmartMedia Card Reader + a007 Memory Stick Class Drive + a103 MDSM-B reader + a107 USB to Memory Stick (LC1) Drive + a109 LC1 CompactFlash & SmartMedia Card Reader + a10b USB to CF+MS(LC1) + a200 DF-UT-06 Hama MMC/SD Reader + a400 CompactFlash & Microdrive Reader + a600 Card Reader + ad01 Mass Storage Device + ae01 Mass Storage Device + af01 Mass Storage Device + b000 USB to CF(LC1) + b001 USB to CF+PCMCIA + b004 MMC/SD Reader + b006 USB to PCMCIA + b00a USB to CF+SD Drive(LC1) + b00b USB to Memory Stick(LC1) +07c5 APG Cash Drawer +07c6 ShareWave, Inc. +07c7 Powertech Industrial Co., Ltd +07c8 B.U.G., Inc. + 0202 MN128-SOHO PAL +07c9 Allied Telesyn International + b100 AT-USB100 +07ca AVerMedia Technologies, Inc. + 0002 AVerTV PVR USB/EZMaker Pro Device + 0026 AVerTV + 1228 MPEG-2 Capture Device (M038) + e880 MPEG-2 Capture Device (E880) + e882 MPEG-2 Capture Device (E882) +07cb Kingmax Technology, Inc. +07cc Carry Computer Eng., Co., Ltd + 0000 CF Card Reader + 0001 Reader (UICSE) + 0002 Reader (UIS) + 0003 SM Card Reader + 0004 SM/CF/PCMCIA Card Reader + 0005 Reader (UISA2SE) + 0006 SM/CF/PCMCIA Card Reader + 0007 Reader (UISA6SE) + 000c SM/CF Card Reader + 000d SM/CF Card Reader + 000e Reader (UISDA) + 000f Reader (UICLIK) + 0010 Reader (UISMA) + 0012 Reader (UISC6SE-FLASH) + 0014 Litronic Fortezza Reader + 0030 Mass Storage (UISDMC12S) + 0040 Mass Storage (UISDMC13S) + 0100 Reader (UID) + 0101 Reader (UIM) + 0102 Reader (UISDMA) + 0103 Reader (UISDMC) + 0104 Reader (UISDM) + 0200 6-in-1 Card Reader + 0201 Mass Storage (UISDMC1S & UISDMC3S) + 0202 Mass Storage (UISDMC5S) + 0203 Mass Storage (UISMC5S) + 0204 Mass Storage (UIM4/5S & UIM7S) + 0205 Mass Storage (UIS4/5S & UIS7S) + 0206 Mass Storage (UISDMC10S & UISDMC11S) + 0207 Mass Storage (UPIDMA) + 0208 Mass Storage (UCFC II) + 0210 Mass Storage (UPIXXA) + 0213 Mass Storage (UPIDA) + 0214 Mass Storage (UPIMA) + 0215 Mass Storage (UPISA) + 0217 Mass Storage (UPISDMA) + 0223 Mass Storage (UCIDA) + 0224 Mass Storage (UCIMA) + 0225 Mass Storage (UIS7S) + 0227 Mass Storage (UCIDMA) + 0234 Mass Storage (UIM7S) + 0235 Mass Storage (UIS4S-S) + 0237 Velper (UISDMC4S) + 0300 6-in-1 Card Reader + 0301 6-in-1 Card Reader + 0303 Mass Storage (UID10W) + 0304 Mass Storage (UIM10W) + 0305 Mass Storage (UIS10W) + 0308 Mass Storage (UIC10W) + 0309 Mass Storage (UISC3W) + 0310 Mass Storage (UISDMA2W) + 0311 Mass Storage (UISDMC14W) + 0320 Mass Storage (UISDMC4W) + 0321 Mass Storage (UISDMC37W) + 0330 WINTERREADER Reader + 0350 9-in-1 Card Reader + 0500 Mass Storage + 0501 Mass Storage +07cd Elektor + 0001 USBuart Serial Port +07cf Casio Computer Co., Ltd + 1001 QV-8000SX/5700/3000EX Digicam; Exilim EX-M20 + 1003 Exilim EX-S500 + 1004 Exilim EX-Z120 + 1011 USB-CASIO PC CAMERA + 2002 E-125 Cassiopeia Pocket PC + 3801 WMP-1 MP3-Watch + 4001 Label Printer KL-P1000 + 4007 CW50 Device + 4104 Cw75 Device + 4107 CW-L300 Device + 4500 LV-20 Digital Camera + 6801 PL-40R + 6802 MIDI Keyboard +07d0 Dazzle + 0001 Digital Video Creator I + 0002 Global Village VideoFX Grabber + 0003 Fusion Model DVC-50 Rev 1 (NTSC) + 0004 DVC-800 (PAL) Grabber + 0005 Fusion Video and Audio Ports + 0006 DVC 150 Loader Device + 0007 DVC 150 + 0327 Fusion Digital Media Reader + 1001 DM-FLEX DFU Adapter + 1002 DMHS2 DFU Adapter + 1102 CF Reader/Writer + 1103 SD Reader/Writer + 1104 SM Reader/Writer + 1105 MS Reader/Writer + 1106 xD/SM Reader/Writer + 1202 MultiSlot Reader/Writer + 2000 FX2 DFU Adapter + 2001 eUSB CompactFlash Reader + 4100 Kingsun SF-620 Infrared Adapter + 4959 Kingsun KS-959 Infrared Adapter +07d1 D-Link System + 13ec VvBus for Helium 2xx + 13ed VvBus for Helium 2xx + 13f1 DSL-302G Modem + 13f2 DSL-502G Router + 3a07 WUA-2340 Adapter + 3a08 predator Bootloader Download + 3a0d DWA-120 Wireless 108G Adapter + 3b01 AirPlus G DWL-G122 Wireless Adapter + 3b10 RangeBooster N Adapter + 3b11 Wireless N Adapter DWA-130 + 3c03 DWL-G122 802.11g Adapter [ralink rt73] + 3c04 WUA-1340 + 3c05 EH103 Wireless G Adapter + 3c07 Wireless G DWA-110 Adapter + 3c09 DWA-140 802.11n Adapter [ralink rt2870] + 5100 Remote NDIS Device + f101 DBT-122 Bluetooth + fc01 DBT-120 Bluetooth Adapter +07d2 Aptio Products, Inc. +07d3 Cyberdata Corp. +07d7 GCC Technologies, Inc. +07da Arasan Chip Systems +07de Diamond Multimedia + 2820 VC500 Video Capture Dongle +07df David Electronics Co., Ltd +07e1 Ambient Technologies, Inc. + 5201 V.90 Modem +07e2 Elmeg GmbH & Co., Ltd +07e3 Planex Communications, Inc. +07e4 Movado Enterprise Co., Ltd + 0967 SCard R/W CSR-145 + 0968 SCard R/W CSR-145 +07e5 QPS, Inc. + 05c2 IDE-to-USB2.0 PCA + 5c01 Que! CDRW +07e6 Allied Cable Corp. +07e7 Mirvo Toys, Inc. +07e8 Labsystems +07ea Iwatsu Electric Co., Ltd +07eb Double-H Technology Co., Ltd +07ec Taiyo Electric Wire & Cable Co., Ltd +07ee Torex Retail (formerly Logware) + 0002 Cash Drawer I/F +07ef STSN + 0001 Internet Access Device +07f6 Circuit Assembly Corp. +07f7 Century Corp. + 0005 ScanLogic/Century Corporation uATA + 011e Century USB Disk Enclosure +07f9 Dotop Technology, Inc. +07fa Draytek + 0778 miniVigor 128 ISDN TA + 1012 BeWAN ADSL USB ST (grey) + a904 BeWAN ADSL + a905 BeWAN ADSL ST +07fd Mark of the Unicorn + 0000 FastLane MIDI Interface + 0001 FastLane Quad MIDI Interface + 0002 MOTU Audio for 64 bit +0801 Mag-Tek + 0002 Mini Swipe Reader +0802 Mako Technologies, LLC +0803 Zoom Telephonics, Inc. + 1300 V92 Faxmodem + 4310 Wireless-G + 5241 Cable Modem + 5551 DSL Modem + 9700 2986L FaxModem + 9800 Cable Modem + a312 Wireless-G +0809 Genicom Technology, Inc. +080a Evermuch Technology Co., Ltd +080c Datalogic S.p.A. + 0300 Gryphon D120 Barcode Scanner + 0400 Gryphon D120 Barcode Scanner + 0500 Gryphon D120 Barcode Scanner + 0600 Gryphon M100 Barcode Scanner +080d Teco Image Systems Co., Ltd + 0102 Hercules Scan@home 48 + 0104 3.2Slim + 0110 UMAX AstraSlim 1200 Scanner +0810 Personal Communication Systems, Inc. +0813 Mattel, Inc. + 0001 Intel Play QX3 Microscope + 0002 Dual Mode Camera Plus +081a MG Logic + 1000 Duo Pen Tablet +081b Indigita Corp. + 0600 Storage Adapter + 0601 Storage Adapter +081c Mipsys +081e AlphaSmart, Inc. + df00 Handheld +0822 Reudo Corp. + 2001 IRXpress Infrared Device +0825 GC Protronics +0826 Data Transit +0827 BroadLogic, Inc. +0828 Sato Corp. +0829 DirecTV Broadband, Inc. (Telocity) +082d Handspring + 0100 Visor + 0200 Treo + 0300 Treo 600 + 0400 Handheld + 0500 Handheld + 0600 Handheld +0830 Palm, Inc. + 0001 m500 + 0002 m505 + 0003 m515 + 0004 Handheld + 0005 Handheld + 0006 Handheld + 0010 Handheld + 0011 Handheld + 0012 Handheld + 0013 Handheld + 0014 Handheld + 0020 i705 + 0021 Handheld + 0022 Handheld + 0023 Handheld + 0024 Handheld + 0030 Handheld + 0031 Tungsten W + 0032 Handheld + 0033 Handheld + 0034 Handheld + 0040 m125 + 0041 Handheld + 0042 Handheld + 0043 Handheld + 0044 Handheld + 0050 m130 + 0051 Handheld + 0052 Handheld + 0053 Handheld + 0054 Handheld + 0060 Tungsten C/E/T/T2/T3 / Zire 71 + 0061 Lifedrive / Treo 650/680 / Tunsten E2/T5/TX / Zire 21/31/72 / Z22 + 0062 Handheld + 0063 Handheld + 0064 Handheld + 0070 Zire + 0071 Handheld + 0072 Handheld + 0080 Serial Adapter [for Palm III] + 0081 Handheld + 0082 Handheld +0832 Kouwell Electronics Corp. + 5850 Cable +0833 Sourcenext Corp. + 012e KeikaiDenwa 8 with charger + 039f KeikaiDenwa 8 +0835 Action Star Enterprise Co., Ltd +0839 Samsung Techwin Co., Ltd + 0005 Digimax Camera + 0008 Digimax 230 Camera + 0009 Digimax 340 + 000a Digimax 410 + 000e Digimax 360 + 0010 Digimax 300 + 1003 Digimax 210SE + 1005 Digimax 220 + 1009 Digimax V4 + 1012 6500 Document Camera + 1058 S730 Camera + 1542 Digimax 50 Duo + 3000 Digimax 35 MP3 +083a Accton Technology Corp. + 1046 10/100 Ethernet [pegasus] + 1060 HomeLine Adapter + 1f4d SMC8013WG Broadband Remote NDIS Device + 3046 10/100 Series Adapter + 3060 1/10/100 Adapter + 3501 2664W + 3502 WN3501D Wireless Adapter + 3503 T-Sinus 111 Wireless Adapter + 4501 T-Sinus 154data + 4505 SMCWUSB-G + 5046 SpeedStream 10/100 Ethernet [pegasus] + 5501 Wireless Adapter 11g + 6500 Cable Modem + 6618 802.11n Wireless Adapter + 7522 802.11N Wireless Adapter + a618 SMC EZ Connect N Draft 11n Wireless Adapter + b004 CPWUE001 USB/Ethernet Adapter + b522 EZ Connect N Draft 11n Wireless USB2.0 Adapter + bb01 BlueExpert Bluetooth Device + c003 802.11b Wireless Adapter + c501 Zoom Wireless-G + c561 802.11a/g Wireless Adapter + e501 ZD1211B + f501 802.11g Wireless Adapter + f502 802.11g Wireless Adapter +083f Global Village + b100 TelePort V.90 Fax/Modem +0840 Argosy Research, Inc. + 0060 Storage Adapter Bridge Module +0841 Rioport.com, Inc. + 0001 Rio 500 +0844 Welland Industrial Co., Ltd +0846 NetGear, Inc. + 1001 EA101 Ethernet [klsi] + 1002 Ethernet + 1020 Ethernet 10/100, USB1.1 + 1040 USB 2.0 Ethernet + 4110 MA111 WiFi (v1) + 4200 WG121 WiFi (v1) + 4210 WG121 WiFi (v2) + 4220 WG111 WiFi (v1) + 4230 MA111 WiFi (v2) + 4240 WG111 WiFi (v2) + 4260 WG111v3 802.11g Adapter [realtek RTL8187B] + 4300 WG111U + 4301 WG111U (no firmware) + 6a00 WG111 WiFi (v2) + 7100 WN121T Wireless Adapter + 9000 RangeMax NEXT Wireless-N Adapter WN111 + a001 PA101 Phoneline10X Adapter +084d Minton Optic Industry Co., Inc. + 0001 Jenoptik JD800i + 0003 S-Cam F5 Digital Camera + 0011 Argus DC3500 Digital Camera + 0014 Praktica DC 32 + 0019 Praktica DPix3000 + 0025 Praktica DC 60 + 1001 ScanHex SX-35d +084e KB Gear + 0001 KBGear JamCam + 1002 Pablo Tablet +084f Empeg + 0001 Empeg-Car Mark I/II Player +0850 Fast Point Technologies, Inc. +0851 Macronix International Co., Ltd + 1542 SiPix Blink + 1543 Maxell WS30 Slim Digital Camera + a168 MXIC +0852 CSEM +0853 Topre Corporation + 0100 HHKB Professional +0854 ActiveWire, Inc. + 0100 I/O Board + 0101 I/O Board, rev1 +0856 B&B Electronics + ac01 uLinks USOTL4 RS422/485 Adapter +0858 Hitachi Maxell, Ltd + 3102 Bluetooth Device + ffff Maxell module with BlueCore in DFU mode +0859 Minolta Systems Laboratory, Inc. +085a Xircom + 0001 Portstation Dual Serial Port + 0003 Portstation Paraller Port + 0008 Ethernet + 0009 Ethernet + 000b Portstation Dual PS/2 Port + 0021 1 port to Serial Converter + 0022 Parallel Port + 0023 2 port to Serial Converter + 0024 Parallel Port + 0027 1 port to Serial Converter + 0028 PortGear to SCSI Converter + 0032 PortStation SCSI Module + 003c Bluetooth Adapter + 0299 Colorvision, Inc. Monitor Spyder + 8021 1 port to Serial + 8023 2 port to Serial + 8027 PGSDB9 Serial Port +085c ColorVision, Inc. + 0200 Monitor Spyder +0862 Teletrol Systems, Inc. +0863 Filanet Corp. +0864 NetGear, Inc. + 4100 MA101 802.11b Adapter + 4102 MA101 802.11b Adapter +0867 Data Translation, Inc. + 9812 ECON Data acquisition unit + 9816 DT9816 ECON data acquisition module + 9836 DT9836 data acquisition card +086a Emagic Soft- und Hardware GmbH + 0001 Unitor8 + 0002 AMT8 + 0003 MT4 +086c DeTeWe - Deutsche Telephonwerke AG & Co. + 1001 Eumex 504PC ISDN TA + 1002 Eumex 504PC (FlashLoad) + 1003 TA33 ISDN TA + 1004 TA33 (FlashLoad) + 1005 Eumex 604PC HomeNet + 1006 Eumex 604PC HomeNet (FlashLoad) + 1007 Eumex 704PC DSL + 1008 Eumex 704PC DSL (FlashLoad) + 1009 Eumex 724PC DSL + 100a Eumex 724PC DSL (FlashLoad) + 100b OpenCom 30 + 100c OpenCom 30 (FlashLoad) + 100d BeeTel Home 100 + 100e BeeTel Home 100 (FlashLoad) + 1011 USB2DECT + 1012 USB2DECT (FlashLoad) + 1013 Eumex 704PC LAN + 1014 Eumex 704PC LAN (FlashLoad) + 1021 OpenCom 40 + 1022 OpenCom 40 (FlashLoad) + 1023 OpenCom 45 + 1024 OpenCom 45 (FlashLoad) + 1025 Sinus 61 data + 1029 dect BOX + 102c Eumex 604PC HomeNet [FlashLoad] + 1030 Eumex 704PC DSL [FlashLoad] + 1032 OpenCom 40 [FlashLoad] + 1033 OpenCom 30 plus + 1034 OpenCom 30 plus (FlashLoad) + 1055 Eumex 220 ISDN TA + 2000 OpenCom 1000 +086e System TALKS, Inc. + 1920 SGC-X2UL +086f MEC IMEX, Inc. +0870 Metricom + 0001 Ricochet GS +0871 SanDisk, Inc. + 0001 SDDR-01 Compact Flash Reader + 0002 SDDR-31 Compact Flash Reader + 0005 SDDR-05 Compact Flash Reader +0873 Xpeed, Inc. +0874 A-Tec Subsystem, Inc. +0879 Comtrol Corp. +087c Adesso/Kbtek America, Inc. +087d Jaton Corp. + 5704 Ethernet +087e Fujitsu Computer Products of America +087f Virtual IP Group, Inc. +0880 APT Technologies, Inc. +0883 Recording Industry Association of America (RIAA) +0885 Boca Research, Inc. +0886 XAC Automation Corp. + 0630 Intel PC Camera CS630 +0887 Hannstar Electronics Corp. +088b MassWorks, Inc. + 4944 MassWorks ID-75 TouchScreen +0892 DioGraphy, Inc. + 0101 Smartdio Reader/Writer +089c United Technologies Research Cntr. +089d Icron Technologies Corp. +089e NST Co., Ltd +089f Primex Aerospace Co. +08a5 e9, Inc. +08a8 Andrea Electronics +08ae Macally (Mace Group, Inc.) +08b4 Sorenson Vision, Inc. +08b8 J. Gordon Electronic Design, Inc. + 01f4 USBSIMM1 +08b9 RadioShack Corp. (Tandy) +08bb Texas Instruments Japan + 2702 Speakers + 2900 PCM2900 Audio Codec + 2904 PCM2904 Audio Codec +08bd Citizen Watch Co., Ltd + 1100 X1-USB Floppy +08c3 Precise Biometrics + 0001 100 SC + 0002 100 A + 0003 100 SC BioKeyboard + 0006 100 A BioKeyboard + 0100 100 MC ISP + 0101 100 MC FingerPrint and SmartCard Reader + 0300 100 AX + 0400 100 SC + 0401 150 MC + 0402 200 MC FingerPrint and SmartCard Reader + 0404 100 SC Upgrade + 0405 150 MC Upgrade + 0406 100 MC Upgrade +08c4 Proxim, Inc. + 02f2 Farallon Home Phoneline Adapter +08c7 Key Nice Enterprise Co., Ltd +08c8 2Wire, Inc. +08c9 Nippon Telegraph and Telephone Corp. +08ca Aiptek International, Inc. + 0010 Tablet + 0020 APT-6000U Tablet + 0021 APT-2 Tablet + 0022 Tablet + 0023 Tablet + 0024 Tablet + 0100 Pen Drive + 0102 DualCam + 0103 Pocket DV Digital Camera + 0104 Pocket DVII + 0105 Mega DV(Disk) + 0106 Pocket DV3100+ + 0107 Pocket DV 3100 + 0109 Nisis DV4 Digital Camera + 010a Trust 738AV LCD PV Mass Storage + 0111 PenCam VGA Plus + 2008 Mini PenCam 2 + 2010 Pocket CAM 3 Mega (webcam) + 2011 Pocket CAM 3 Mega (storage) + 2018 Pencam SD 2 + 2024 Pocket DV3500 + 2042 DV 5100M Composite Device + 2043 DV 5100M(Disk) +08cd Jue Hsun Ind. Corp. +08ce Long Well Electronics Corp. +08cf Productivity Enhancement Products +08d1 smartBridges, Inc. + 0001 smartNIC Ethernet [catc] + 0003 smartNIC 2 PnP Ethernet +08d3 Virtual Ink +08d4 Fujitsu Siemens Computers + 0009 SCR SmartCard Reader +08d9 Increment P Corp. +08dd Billionton Systems, Inc. + 0112 Wireless LAN Adapter + 0113 Wireless LAN Adapter + 0986 USB-100N Ethernet [pegasus] + 0987 USBLP-100 HomePNA Ethernet [pegasus] + 0988 USBEL-100 Ethernet [pegasus] + 1986 10/100 LAN Adapter + 2103 DVB-T TV-Tuner Card-R + 8511 USBE-100 Ethernet [pegasus2] + 90ff USB2AR Ethernet +08de ??? + 7a01 802.11b Adapter +08df Spyrus, Inc. + 0001 Rosetta Token V1 + 0002 Rosetta Token V2 + 0003 Rosetta Token V3 + 0a00 Lynks Interface +08e3 Olitec, Inc. + 0002 USB-RS232 Bridge + 0100 Interface ADSL + 0101 Interface ADSL + 0102 ADSL + 0301 RNIS +08e4 Pioneer Corp. +08e5 Litronic +08e6 Gemplus + 0001 GemPC-Touch 430 + 0430 GemPC430 SmartCard Reader + 0432 GemPC432 SmartCard Reader + 0435 GemPC435 SmartCard Reader + 0437 GemPC433 SL SmartCard Reader + 1359 UA SECURE STORAGE TOKEN + 2202 Gem e-Seal Pro Token + 3437 GemPC Twin SmartCard Reader + 3438 GemPC Key SmartCard Reader + 3478 PinPad Smart Card Reader + 4433 GemPC433-Swap + 5501 GemProx-PU Contactless Smart Card Reader + ace0 UA HYBRID TOKEN +08e7 Pan-International Wire & Cable +08e8 Integrated Memory Logic +08e9 Extended Systems, Inc. + 0100 XTNDAccess IrDA Dongle +08ea Ericsson, Inc., Blue Ridge Labs + 00c9 ADSL Modem HM120dp Loader + 00ca ADSL WAN Modem HM120dp + 00ce HM230d Virtual Bus for Helium + abba USB Driver for Bluetooth Wireless Technology + abbb Bluetooth Device in DFU State +08ec M-Systems Flash Disk Pioneers + 0001 TravelDrive 2C + 0002 TravelDrive 2C + 0005 TravelDrive 2C + 0008 TravelDrive 2C + 0010 DiskOnKey + 0011 DiskOnKey + 0012 TravelDrive 2C + 0014 TravelDrive 2C + 0015 Kingston DataTraveler ELITE + 0016 Kingston DataTraveler U3 + 0020 TravelDrive + 0021 TravelDrive + 0022 TravelDrive + 0023 TravelDrive + 0024 TravelDrive + 0025 TravelDrive + 0026 TravelDrive + 0027 TravelDrive + 0028 TravelDrive + 0029 TravelDrive + 0030 TravelDrive + 0822 TravelDrive 2C + 0832 Hi-Speed Mass Storage Device + 0998 Kingston Data Traveler2.0 Disk Driver + 0999 Kingston Data Traveler2.0 Disk Driver + 1000 TravelDrive 2C + 2000 TravelDrive 2C + 2038 TravelDrive + 2039 TravelDrive + 204a TravelDrive + 204b TravelDrive +08ee CCSI/Hesso +08f0 Corex Technologies +08f1 CTI Electronics Corp. +08f5 SysTec Co., Ltd +08f6 Logic 3 International, Ltd +08f7 Vernier + 0001 LabPro + 0002 EasyTemp +08f8 Keen Top International Enterprise Co., Ltd +08f9 Wipro Technologies +08fa Caere +08fb Socket Communications +08fc Sicon Cable Technology Co., Ltd +08fd Digianswer A/S + 0001 Bluetooth Device +08ff AuthenTec, Inc. + 1600 AES1600 + 1610 AES1600 + 2500 AES2501 + 2501 AES2501 + 2502 AES2501 + 2503 AES2501 + 2504 AES2501 + 2505 AES2501 + 2506 AES2501 + 2507 AES2501 + 2508 AES2501 + 2509 AES2501 + 250a AES2501 + 250b AES2501 + 250c AES2501 + 250d AES2501 + 250e AES2501 + 250f AES2501 + 2510 AES2510 + 2580 AES2501 Fingerprint Sensor + 2588 AES2501 + 2589 AES2501 + 258a AES2501 + 258b AES2501 + 258c AES2501 + 258d AES2501 + 258e AES2501 + 258f AES2501 + 3400 AES3400 TruePrint Sensor + 3401 AES3400 Sensor + 3402 AES3400 Sensor + 3403 AES3400 Sensor + 3404 AES3400 TruePrint Sensor + 3405 AES3400 TruePrint Sensor + 3406 AES3400 TruePrint Sensor + 3407 AES3400 TruePrint Sensor + 4902 BioMV with TruePrint AES3500 + 4903 BioMV with TruePrint AES3400 + 5500 AES4000 + 5501 AES4000 TruePrint Sensor + 5503 AES4000 TruePrint Sensor + 5505 AES4000 TruePrint Sensor + 5507 AES4000 TruePrint Sensor + 55ff AES4000 TruePrint Sensor. + 5700 AES3500 Fingerprint Reader + 5701 AES3500 TruePrint Sensor + 5702 AES3500 TruePrint Sensor + 5703 AES3500 TruePrint Sensor + 5704 AES3500-BZ TruePrint Sensor + 5705 AES3500-BZ TruePrint Sensor + 5706 AES3500-BZ TruePrint Sensor + 5707 AES3500-BZ TruePrint Sensor + 5710 AES3500 TruePrint Sensor + 5711 AES3500 TruePrint Sensor + 5712 AES3500 TruePrint Sensor + 5713 AES3500 TruePrint Sensor + 5714 AES3500-BZ TruePrint Sensor + 5715 AES3500-BZ TruePrint Sensor + 5716 AES3500-BZ TruePrint Sensor + 5717 AES3500-BZ TruePrint Sensor + 5730 AES3500 TruePrint Sensor + 5731 AES3500 TruePrint Sensor + 5732 AES3500 TruePrint Sensor + 5733 AES3500 TruePrint Sensor + 5734 AES3500-BZ TruePrint Sensor + 5735 AES3500-BZ TruePrint Sensor + 5736 AES3500-BZ TruePrint Sensor + 5737 AES3500-BZ TruePrint Sensor + afe3 FingerLoc Sensor Module (Anchor) + afe4 FingerLoc Sensor Module (Anchor) + afe5 FingerLoc Sensor Module (Anchor) + afe6 FingerLoc Sensor Module (Anchor) + fffd AES2510 Sensor (USB Emulator) + ffff Sensor (Emulator) +0900 Pinnacle Systems, Inc. +0901 VST Technologies + 0001 Hard Drive Adapter (TPP) + 0002 SigmaDrive Adapter (TPP) +0906 Faraday Technology Corp. +0909 Audio-Technica Corp. +090a Trumpion Microelectronics, Inc. + 1001 T33520 USB Flash Card Controller + 1100 Comotron C3310 MP3 player + 1200 MP3 player + 1540 Digitex Container Flash Disk +090b Neurosmith +090c Feiya Technology Corp. + 1000 Memory Bar + 1132 5-in-1 Card Reader +090d Multiport Computer Vertriebs GmbH +090e Shining Technology, Inc. +090f Fujitsu Devices, Inc. +0910 Alation Systems, Inc. +0911 Philips Speech Processing + 2512 SpeechMike Pro +0912 Voquette, Inc. +0915 GlobeSpan, Inc. + 0001 DSL Modem + 0002 ADSL ATM Modem + 0005 LAN Modem + 2000 802.11 Adapter + 2002 802.11 Adapter + 8000 ADSL LAN Modem + 8005 DSL-302G Modem + 8101 ADSL WAN Modem + 8102 DSL-200 ADSL Modem + 8103 DSL-200 ADSL Modem + 8104 DSL-200 Modem + 8400 DSL Modem + 8401 DSL Modem + 8402 DSL Modem + 8500 DSL Modem + 8501 DSL Modem +0917 SmartDisk Corp. + 0001 eFilm Reader-11 SM/CF + 0002 eFilm Reader-11 SM + 0003 eFilm Reader-11 CF + 0200 FireFly + 0201 FireLite + 0202 STORAGE ADAPTER (FirePower) + 0204 FlashTrax Storage + 0205 STORAGE ADAPTER (CrossFire) + 0206 FireFly 20G HDD + 0207 FireLite + 020f STORAGE ADAPTER (FireLite) + da01 eFilm Reader-11 Test + ffff eFilm Reader-11 (Class/PDR) +0919 Tiger Electronics + 0100 Fast Flicks Digital Camera +091e Garmin International + 0003 GPSmap (various models) + 0004 Garmin iQue 3600 + 0200 Data Card Programmer (install) + 1200 Data Card Programmer +0920 Echelon Co. + 7500 Network Interface +0921 GoHubs, Inc. + 1001 GoCOM232 Serial +0922 Dymo-CoStar Corp. + 0007 LabelWriter 330 + 0009 LabelWriter 310 +0923 IC Media Corp. + 010f SIIG MobileCam +0924 Xerox + 23dd DocuPrint M760 (X760_USB) + 3d5b Phaser 6115MFP TWAIN Scanner + 420f WorkCentre PE220 Series + 421f M20 Scanner + 423b Printing Support + ffef WorkCenter M15 + fffb DocuPrint M750 (X750_USB) +0925 Lakeview Research + 8101 Phidgets, Inc., 1-Motor PhidgetServo v2.0 + 8104 Phidgets, Inc., 4-Motor PhidgetServo v2.0 + 8800 WiseGroup Ltd, MP-8800 Quad Joypad + 8866 WiseGroup Ltd, MP-8866 Dual Joypad +0927 Summus, Ltd +0928 Oxford Semiconductor, Ltd +0929 American Biometric Co. +092a Toshiba Information & Industrial Sys. And Services +092b Sena Technologies, Inc. +092f Northern Embedded Science/CAVNEX + 0004 JTAG-4 + 0005 JTAG-5 +0930 Toshiba Corp. + 0009 Gigabeat F/X (HDD audio player) + 000c Gigabeat F (mtp) + 0010 Gigabeat S (mtp) + 0301 PCX1100U Cable Modem (WDM) + 0302 PCX2000 Cable Modem (WDM) + 0305 Cable Modem PCX3000 + 0307 Cable Modem PCX2500 + 0308 PCX2200 Cable Modem (WDM) + 0309 PCX5000 Cable Modem (WDM) + 030b Cable Modem PCX2600 + 0501 Bluetooth Controller + 0502 Integrated Bluetooth + 0503 Bluetooth Controller + 0505 Integrated Bluetooth + 0506 Integrated Bluetooth + 0507 Bluetooth Adapter + 0508 Integrated Bluetooth HCI + 0509 BT EDR Dongle + 0706 PocketPC e740 + 0707 Pocket PC e330 Series + 0708 Pocket PC e350 Series + 0709 Pocket PC e750 Series + 070a Pocket PC e400 Series + 070b Pocket PC e800 Series + 1300 Wireless Broadband (CDMA EV-DO) SM-Bus Minicard Status Port + 1301 Wireless Broadband (CDMA EV-DO) Minicard Status Port + 1302 Wireless Broadband (3G HSDPA) SM-Bus Minicard Status Port + 1303 Wireless Broadband (3G HSDPA) Minicard Status Port + 1308 Broadband (3G HSDPA) SM-Bus Minicard Diagnostics Port + 642f TravelDrive + 6506 TravelDrive 2C + 6507 TravelDrive 2C + 6508 TravelDrive 2C + 6509 TravelDrive 2C + 6510 TravelDrive 2C + 6517 TravelDrive 2C + 6518 TravelDrive 2C + 6519 Kingston DataTraveler 2.0 USB Stick + 651a TravelDrive 2C + 651b TravelDrive 2C + 651c TravelDrive 2C + 651d TravelDrive 2C + 651e TravelDrive 2C + 651f TravelDrive 2C + 6520 TravelDrive 2C + 6521 TravelDrive 2C + 6522 TravelDrive 2C + 6523 TravelDrive + 6524 TravelDrive + 6525 TravelDrive + 6526 TravelDrive + 6527 TravelDrive + 6528 TravelDrive + 6529 TravelDrive + 652a TravelDrive + 652b TravelDrive + 652c TravelDrive + 652d TravelDrive + 652f TravelDrive + 6530 TravelDrive + 6531 TravelDrive + 6532 256M USB Stick + 6533 512M USB Stick + 6534 TravelDrive + 653c Kingston DataTraveler 2.0 USB Stick (512M) + 653d Kingston DataTraveler 2.0 USB Stick (1GB) + 653e USB Flash Memory + 6540 TransMemory USB Flash Memory +0931 Harmonic Data Systems, Ltd +0932 Crescentec Corp. + 0300 VideoAdvantage + 0302 Syntek DC-112X + 0320 VideoAdvantage + 1100 Video Enhamcement Device + 1112 Veo Web Camera + a311 Video Enhancement Device +0933 Quantum Corp. +0934 Netcom Systems +0939 Lumberg, Inc. +093a Pixart Imaging, Inc. + 0007 CMOS 100K-R Rev. 1.90 + 010e Digital camera, CD302N/Elta Medi@ digi-cam/HE-501A + 010f Argus DC-1610/DC-1620/Emprex PCD3600/Philips P44417B keychain camera/Precision Mini,Model HA513A/Vivitar Vivicam 55 + 2460 Q-TEC WEBCAM 100 + 2468 Cammaestro 2.5DU/X-EYE/Orite SC-120/ICGear TravelCam/Easy Snap Snake Eye WebCam + 2470 SoC PC-Camera + 2471 SoC PC-Camera + 2500 USB Optical Mouse + 2600 Typhoon Easycam USB 330K (newer)/Typhoon Easycam USB 2.0 VGA 1.3M/Sansun SN-508 + 2601 SPC 610NC Laptop Camera +093b Plextor Corp. + 0010 Storage Adapter + 0011 PlexWriter 40/12/40U + 0042 PX-712UF DVD RW + a002 ConvertX M402U XLOADER + a003 ConvertX AV100U A/V Capture Audio + a004 ConvertX TV402U XLOADER + a005 KWorld EMP Audio Device + a102 ConvertX M402U A/V Capture + a104 ConvertX PX-TV402U/NA +093c Intrepid Control Systems, Inc. + 0601 ValueCAN + 0701 NeoVI Blue vehicle bus interface +093d InnoSync, Inc. +093e J.S.T. Mfg. Co., Ltd +093f Olympia Telecom Vertriebs GmbH +0940 Japan Storage Battery Co., Ltd +0941 Photobit Corp. +0942 i2Go.com, LLC +0943 HCL Technologies India Private, Ltd +0944 KORG, Inc. +0945 Pasco Scientific +0948 Kronauer music in digital + 0301 USB Pro (24/48) + 0302 USB Pro (24/96 playback) + 0303 USB Pro (24/96 record) + 0304 USB Pro (16/48) + 1105 USB One +094b Linkup Systems Corp. +094d Cable Television Laboratories +094f Yano + 0101 U640MO-03 + 05fc METALWEAR-HDD +0951 Kingston Technology + 0008 Ethernet + 000a KNU101TX 100baseTX Ethernet + 1600 Data Traveler II Pen Drive + 1601 Data Traveler II+ Pen Drive + 1602 Data Traveler Mini + 1603 Data Traveler 1GB/2GB Pen Drive +0954 RPM Systems Corp. +0955 NVidia Corp. +0956 BSquare Corp. +0957 Agilent Technologies, Inc. + 0200 E-Video DC-350 Camera + 0202 E-Video DC-350 Camera +0958 CompuLink Research, Inc. +0959 Cologne Chip AG + 2bd0 Intelligent ISDN (Ver. 3.60.04) +095a Portsmith + 3003 Express Ethernet +095b Medialogic Corp. +095c K-Tec Electronics +095d Polycom, Inc. + 0001 Polycom ViaVideo +0967 Acer (??) + 0204 WarpLink 802.11b Adapter +0968 Catalyst Enterprises, Inc. +096e Feitian Technologies, Inc. + 0802 ePass2000 (G&D STARCOS SPK 2.4) +0971 Gretag-Macbeth AG +0973 Schlumberger + 0001 e-gate Smart Card +0974 Datagraphix, a business unit of Anacomp +0975 OL'E Communications, Inc. +0976 Adirondack Wire & Cable +0977 Lightsurf Technologies +0978 Beckhoff GmbH +0979 Jeilin Technology Corp., Ltd + 0224 JL2005A Toy Camera + 0226 JL2005A Toy Camera +097a Minds At Work LLC + 0001 Digital Wallet +097b Knudsen Engineering, Ltd +097c Marunix Co., Ltd +097d Rosun Technologies, Inc. +097f Barun Electronics Co., Ltd +0981 Oak Technology, Ltd +0984 Apricorn + 0200 Hard Drive Storage (TPP) +0985 cab Produkttechnik GmbH & Co KG + 00a3 A3/200 or A3/300 Label Printer +0986 Matsushita Electric Works, Ltd. +098c Vitana Corp. +098d INDesign +098e Integrated Intellectual Property, Inc. +098f Kenwood TMI Corp. +0993 Gemstar eBook Group, Ltd + 0001 REB1100 eBook Reader + 0002 eBook +0996 Integrated Telecom Express, Inc. +099a Zippy Technology Corp. + 610c EL-610 Super Mini Electron luminescent Keyboard +09a3 PairGain Technologies +09a4 Contech Research, Inc. +09a5 VCON Telecommunications +09a6 Poinchips + 8001 Mass Storage Device +09a7 Data Transmission Network Corp. +09a8 Lin Shiung Enterprise Co., Ltd +09a9 Smart Card Technologies Co., Ltd +09aa Intersil Corp. + 1000 Prism GT 802.11b/g Adapter + 3642 Prism 2.x 802.11b Adapter +09ab Japan Cash Machine Co., Ltd. +09ae Tripp Lite +09b2 Franklin Electronic Publishers, Inc. + 0001 eBookman Palm Computer +09b3 Altius Solutions, Inc. +09b4 MDS Telephone Systems +09b5 Celltrix Technology Co., Ltd +09bc Grundig + 0002 MPaxx MP150 MP3 Player +09be MySmart.Com + 0001 MySmartPad +09bf Auerswald GmbH & Co. KG + 00c0 COMpact 2104 ISDN PBX + 00db COMpact 4410/2206 ISDN ISDN + 00f1 COMfort System Telephones +09c1 Arris Interactive LLC + 1337 TOUCHSTONE DEVICE +09c2 Nisca Corp. +09c3 ActivCard, Inc. + 0007 Reader V2 + 0008 SmartCard Reader +09c4 ACTiSYS Corp. + 0011 ACT-IR2000U IrDA Dongle +09c5 Memory Corp. +09cc Workbit Corp. + 0404 BAFO USB-ATA/ATAPI Bridge Controller +09cd Psion Dacom Home Networks, Ltd +09ce City Electronics, Ltd +09cf Electronics Testing Center, Taiwan +09d1 NeoMagic, Inc. +09d2 Vreelin Engineering, Inc. +09d3 Com One + 0001 ISDN TA +09d7 Novatel Wireless + 0100 NovAtel FlexPack GPS receiver +09d9 KRF Tech, Ltd +09da A4 Tech Co., Ltd + 0006 Optical Mouse WOP-35 / Trust 450L Optical Mouse + 000a Port Mouse + 0018 Trust Human Interface Device + 001a Wireless Mouse & RXM-15 Receiver + 002a Wireless Optical Mouse NB-30 +09db Measurement Computing Corp. + 0075 MiniLab 1008 + 0076 PMD-1024 + 007a PMD-1208LS + 0081 USB-1616FS + 0088 USB-1616FS internal hub +09dc Aimex Corp. +09dd Fellowes, Inc. +09df Addonics Technologies Corp. +09e1 Intellon Corp. + 5121 MicroLink dLAN +09e5 Jo-Dan International, Inc. +09e6 Silutia, Inc. +09e7 Real 3D, Inc. +09e8 AKAI Professional M.I. Corp. +09e9 Chen-Source, Inc. +09eb IM Networks, Inc. + 4331 iRhythm Tuner Remote +09ef Xitel + 0101 MD-Port DG2 MiniDisc Interface +09f5 AresCom + 0168 Network Adapter + 0188 LAN Adapter + 0850 Adapter +09f6 RocketChips, Inc. +09f7 Edu-Science (H.K.), Ltd +09f8 SoftConnex Technologies, Inc. +09f9 Bay Associates +09fa Mtek Vision +09fb Altera +09ff Gain Technology Corp. +0a00 Liquid Audio +0a01 ViA, Inc. +0a07 Ontrak Control Systems Inc. + 0064 ADU100 Data Acquisition Interface + 00c8 ADU200 Relay I/O Interface + 00d0 ADU208 Data Acquisition Interface +0a0b Cybex Computer Products Co. +0a11 Xentec, Inc. +0a12 Cambridge Silicon Radio, Ltd + 0001 Bluetooth Dongle (HCI mode) + 0002 Frontline Test Equipment Bluetooth Device + 0003 Nanosira + 0004 Nanosira WHQL Reference Radio + 0005 Nanosira-Multimedia + 0006 Nanosira-Multimedia WHQL Reference Radio + 0007 Nanosira3-ROM + 0008 Nanosira3-ROM + 0009 Nanosira4-EDR WHQL Reference Radio + 000a Nanosira4-EDR-ROM + 000b Nanosira5-ROM + 0043 Bluetooth Device + 0100 Casira with BlueCore2-External Module + 0101 Casira with BlueCore2-Flash Module + 0102 Casira with BlueCore3-Multimedia Module + 0103 Casira with BlueCore3-Flash Module + 0104 Casira with BlueCore4-External Module + 0105 Casira with BlueCore4-Multimedia Module + 1000 Bluetooth Dongle (HID proxy mode) + 1010 Bluetooth Device + 1011 Bluetooth Device + 1012 Bluetooth Device + ffff USB Bluetooth Device in DFU State +0a13 Telebyte, Inc. +0a14 Spacelabs Medical, Inc. +0a15 Scalar Corp. +0a16 Trek Technology (S) PTE, Ltd + 1111 ThumbDrive + 8888 IBM USB Memory Key + 9988 Trek2000 TD-G2 +0a17 Pentax Corp. + 0004 Pentax Optio 330 + 0006 Pentax Optio S + 0007 Pentax Optio 550 + 0009 Pentax Optio 33WR + 000a Pentax Optio 555 + 000c Pentax Optio 43WR (mass storage mode) + 000d Pentax Optio 43WR + 0015 Pentax Optio S40/S5i + 003b Pentax Optio 50 (mass storage mode) + 003d Pentax Optio S55 + 0043 Pentax *ist DL + 0047 Pentax Optio S60 + 0052 Optio 60 Digital Camera + 006e Pentax K10D + 0070 Pentax K100D + 1001 EI2000 Camera powered by Digita! +0a18 Heidelberger Druckmaschinen AG +0a19 Hua Geng Technologies, Inc. +0a21 Medtronic Physio Control Corp. +0a22 Century Semiconductor USA, Inc. +0a2c AK-Modul-Bus Computer GmbH + 0008 GPIO Ports +0a34 TG3 Electronics, Inc. + 0110 Deck 82-key backlit keyboard +0a39 Gilat Satellite Networks, Ltd +0a3a PentaMedia Co., Ltd + 0163 KN-W510U 1.0 Wireless LAN Adapter +0a3c NTT DoCoMo, Inc. +0a3d Varo Vision +0a3f Swissonic AG +0a43 Boca Systems, Inc. +0a46 Davicom Semiconductor, Inc. + 0268 ST268 + 9601 DM9601 To Fast Ethernet Adapter +0a47 Hirose Electric +0a48 I/O Interconnect + 3233 Multimedia Card Reader + 3239 Multimedia Card Reader + 3258 Dane Elec zMate SD Reader + 3259 Dane Elec zMate CF Reader + 5000 MediaGear xD-SM + 500a Mass Storage Device + 500f Mass Storage Device + 5010 Mass Storage Device + 5011 Mass Storage Device + 5014 Mass Storage Device + 5020 Mass Storage Device + 5021 Mass Storage Device + 5022 Mass Storage Device + 5023 Mass Storage Device + 5024 Mass Storage Device + 5025 Mass Storage Device +0a4b Fujitsu Media Devices, Ltd +0a4c Computex Co., Ltd +0a4d Evolution Electronics, Ltd + 0064 MK-225 Driver + 0065 MK-225C Driver + 0066 MK-225C Driver + 0067 MK-425C Driver + 0078 MK-37 Driver + 0079 MK-37C Driver + 007a MK-37C Driver + 008c TerraTec MIDI MASTER + 008d MK-249C Driver + 008e MK-249C MIDI Keyboard + 008f MK-449C Driver + 0090 Keystation 49e Driver + 0091 Keystation 61es Driver + 00a0 MK-361 Driver + 00a1 MK-361C Driver + 00a2 MK-361C Driver + 00a3 MK-461C MIDI Keyboard + 00b5 Keystation Pro 88 Driver + 00d2 E-Keys Driver + 00f0 UC-16 Driver + 00f1 X-Session Driver + 00f5 UC-33e MIDI Controller +0a4e Steinberg Soft-und Hardware GmbH +0a4f Litton Systems, Inc. +0a50 Mimaki Engineering Co., Ltd +0a51 Sony Electronics, Inc. +0a52 Jebsee Electronics Co., Ltd +0a53 Portable Peripheral Co., Ltd + 1000 Scanner + 2000 Q-Scan A6 Scanner + 2001 Q-Scan A6 Scanner + 2013 Media Drive A6 Scanner + 2014 Media Drive A6 Scanner + 2015 BizCardReader 600C + 2016 BizCardReader 600C + 202a Scanshell-CSSN + 3000 Q-Scan A8 Scanner + 3002 Q-Scan A8 Reader + 3015 BizCardReader 300G + 5001 BizCardReader 900C +0a5a Electronics For Imaging, Inc. +0a5b EAsics NV +0a5c Broadcom Corp. + 0201 iLine10(tm) Network Adapter + 2000 Bluetooth Device + 2009 Bluetooth Controller + 200a Bluetooth dongle + 200f Bluetooth Controller + 201d Bluetooth Device + 201e IBM Integrated Bluetooth IV + 2020 Bluetooth Dongle + 2033 BCM2033 Bluetooth + 2035 BCM2035 Bluetooth + 2038 Blutonium Device + 2039 Bluetooth Device + 2045 Bluetooth Controller + 2046 Bluetooth Device + 2047 Bluetooth Device + 205e Bluetooth Device + 2100 Bluetooth 2.0+eDR dongle + 2101 A-Link BlueUsbA2 Bluetooth + 2102 ANYCOM Blue USB-200/250 + 2110 Bluetooth Controller + 2111 ANYCOM Blue USB-UHE 200/250 + 2120 2045 Bluetooth 2.0 USB-UHE Device with trace filter + 2121 BCM2210 Bluetooth + 2122 Bluetooth 2.0+EDR dongle + 2130 2045 Bluetooth 2.0 USB-UHE Device with trace filter + 2131 2045 Bluetooth 2.0 Device with trace filter + 6300 Pirelli Remote NDIS Device +0a5d Diatrend Corp. +0a5f Zebra + 0009 LP2844 Printer + 930a Printer +0a62 MPMan + 0010 MPMan MP-F40 MP3 Player +0a66 ClearCube Technology +0a67 Medeli Electronics Co., Ltd +0a68 Comaide Corp. +0a69 Chroma ate, Inc. +0a6b Green House Co., Ltd + 0001 Compact Flash R/W with MP3 player +0a6c Integrated Circuit Systems, Inc. +0a6d UPS Manufacturing +0a6e Benwin +0a6f Core Technology, Inc. + 0400 Xanboo +0a70 International Game Technology +0a72 Sanwa Denshi +0a7d NSTL, Inc. +0a7e Octagon Systems Corp. +0a80 Rexon Technology Corp., Ltd +0a81 Chesen Electronics Corp. + 0101 Keyboard + 0103 Keyboard + 0203 Mouse + 0205 PS/2 Keyboard+Mouse Adapter +0a82 Syscan + 4600 TravelScan 460/464 +0a83 NextComm, Inc. +0a84 Maui Innovative Peripherals +0a85 Idexx Labs +0a86 NITGen Co., Ltd +0a8d Picturetel +0a8e Japan Aviation Electronics Industry, Ltd + 2011 Filter Driver For JAE XMC R/W +0a90 Candy Technology Co., Ltd +0a91 Globlink Technology, Inc. + 3801 Targus PAKP003 Mouse +0a92 EGO SYStems, Inc. + 0011 SYS WaveTerminal U2A + 0021 GIGAPort + 0031 GIGAPortAG + 0053 AudioTrak Optoplay + 0061 Waveterminal U24 + 0071 MAYA EX7 + 0091 Maya 44 + 00b1 MAYA EX5 + 1000 MIDI Mate + 1010 RoMI/O + 1020 M4U + 1030 M8U + 1090 KeyControl49 + 10a0 KeyControl25 +0a93 C Technologies AB + 0002 C-Pen 10 + 0005 MyPen Light + 000d Input Pen + 0010 C-Pen 20 +0a94 Intersense +0aa3 Lava Computer Mfg., Inc. +0aa4 Develco Elektronik +0aa5 First International Digital + 0002 irock! 500 Series + 0801 MP3 Player +0aa6 Perception Digital, Ltd + 0101 Hercules Jukebox + 1501 Store 'n' Go HD Drive +0aa7 Wincor Nixdorf International GmbH + 0100 POS Keyboard, TA58P-USB + 0101 POS Keyboard, TA85P-USB + 0102 POS Keyboard, TA59-USB + 0103 POS Keyboard, TA60-USB + 0104 SNIkey Keyboard, SNIKey-KB-USB + 0200 Operator Display, BA63-USB + 0201 Operator Display, BA66-USB + 0202 Operator Display & Scanner, XiCheck-BA63 + 0203 Operator Display & Scanner, XiCheck-BA66 + 0204 Graphics Operator Display, BA63GV + 0300 POS Printer (printer class mode), TH210 + 0301 POS Printer (native mode), TH210 + 0302 POS Printer (printer class mode), TH220 + 0303 POS Printer (native mode), TH220 + 0304 POS Printer, TH230 + 0305 Lottery Printer, XiPrintPlus + 0306 POS Printer (printer class mode), TH320 + 0307 POS Printer (native mode), TH320 + 0308 POS Printer (printer class mode), TH420 + 0309 POS Printer (native mode), TH420 + 030a POS Printer, TH200B + 0400 Lottery Scanner, Xiscan S + 0401 Lottery Scanner, Xiscan 3 + 4304 Banking Printer TP07 +0aa8 TriGem Computer, Inc. + 0060 TG 11Mbps WLAN Mini Adapter + 1001 DreamComboM4100 + 3002 InkJet Color Printer + 8001 TG_iMON + 8002 TG_KLOSS + a001 TG_X2 + a002 TGVFD_KLOSS + ffda iMON_VFD +0aa9 Baromtec Co. + f01b Medion MD 6242 MP3 Player +0aaa Japan CBM Corp. +0aab Vision Shape Europe SA +0aac iCompression, Inc. +0aad Rohde & Schwarz GmbH & Co. KG +0aae NEC infrontia Corp. (Nitsuko) +0aaf Digitalway Co., Ltd +0ab0 Arrow Strong Electronics Co., Ltd +0aba Ellisys + 8001 USB Tracker 110 Protocol Analyzer +0abe Stereo-Link + 0101 SL1200 DAC +0ac3 Sanyo Semiconductor Company Micro +0ac4 Leco Corp. +0ac5 I & C Corp. +0ac6 Singing Electrons, Inc. +0ac7 Panwest Corp. +0ac8 Z-Star Microelectronics Corp. + 0301 Web Camera + 0302 ZC0302 WebCam + 0321 USB 2.0 Webcam + 0323 Luxya WC-1200 USB 2.0 Webcam + 301b ZC0301 WebCam + 303b ZC0303 WebCam + 305b ZC0305 WebCam + 307b USB 1.1 WebCam + c002 Visual Communication Camera VGP-VCC1 +0ac9 Micro Solutions, Inc. + 0000 Backpack CD-ReWriter + 0001 BACKPACK 2 Cable + 0010 BACKPACK + 0011 Backpack 40GB Hard Drive + 0110 BACKPACK + 0111 BackPack + 1234 BACKPACK +0aca OPEN Networks Ltd + 1060 OPEN NT1 Plus II +0acc Koga Electronics Co. +0acd ID Tech + 0401 ID TECH Spectrum III Hybrid Smartcard Reader +0ace ZyDAS + 1201 802.11b WiFi + 1211 802.11b/g USB2 WiFi + 1215 WLA-54L WiFi + 1608 ONMI FAXMODEM 56K UNO (ZyXEL) +0acf Intoto, Inc. +0ad0 Intellix Corp. +0ad1 Remotec Technology, Ltd +0ad2 Service & Quality Technology Co., Ltd +0ae3 Allion Computer, Inc. +0ae4 Taito Corp. +0ae7 Neodym Systems, Inc. +0ae8 System Support Co., Ltd +0ae9 North Shore Circuit Design L.L.P. +0aea SciEssence, LLC +0aeb TTP Communications, Ltd +0aec Neodio Technologies Corp. + 2101 SmartMedia Card Reader + 2102 CompactFlash Card Reader + 2103 MMC/SD Card Reader + 2104 MemoryStick Card Reader + 2201 SmartMedia+CompactFlash Card Reader + 2202 SmartMedia+MMC/SD Card Reader + 2203 SmartMedia+MemoryStick Card Reader + 2204 CompactFlash+MMC/SD Card Reader + 2205 CompactFlash+MemoryStick Card Reader + 2206 MMC/SD+MemoryStick Card Reader + 2301 SmartMedia+CompactFlash+MMC/SD Card Reader + 2302 SmartMedia+CompactFlash+MemoryStick Card Reader + 2303 SmartMedia+MMC/SD+MemoryStick Card Reader + 2304 CompactFlash+MMC/SD+MemoryStick Card Reader + 3016 MMC/SD+Memory Stick Card Reader + 3050 ND3050 8-in-1 Card Reader + 3060 1.1 FS Card Reader + 3101 MMC/SD Card Reader + 3102 MemoryStick Card Reader + 3201 MMC/SD+MemoryStick Card Reader + 3216 HS Card Reader + 3260 7-in-1 Card Reader + 5010 ND5010 Card Reader +0af0 Option + 5000 UMTS Card + 6000 GlobeTrotter 3G datacard + 6300 GT 3G Quad UMTS/GPRS Card + 6600 GlobeTrotter 3G+ datacard +0af6 Silver I Co., Ltd +0af7 B2C2, Inc. + 0101 Digital TV USB Receiver (DVB-S/T/C / ATSC) +0af9 Hama, Inc. + 0010 USB SightCam 100 + 0011 Micro Innovations IC50C WebCam +0afc Zaptronix Ltd +0afd Tateno Dennou, Inc. +0afe Cummins Engine Co. +0aff Jump Zone Network Products, Inc. +0b00 INGENICO +0b05 ASUSTek Computer, Inc. + 1101 Mass Storage (UISDMC4S) + 1706 WL-167G 802.11g Adapter [ralink] + 1707 WL-167g Wireless Adapter + 1708 Mass Storage Device + 170b Mass Storage Device + 170c WL-159g + 170d 802.11b/g Wireless Network Adapter + 1712 BT-183 Bluetooth 2.0+EDR adapter + 1715 2045 Bluetooth 2.0 Device with trace filter + 1716 Bluetooth Device + 171b A9T wireless + 171c 802.11b/g Wireless Network Adapter + 1723 WL-167G v2 802.11g Adapter [ralink] + 1724 RT2573 + 1726 Laptop OLED Display + 172a ASUS 802.11n Network Adapter + 172b 802.11n Network Adapter + 1731 ASUS 802.11n Network Adapter + 1732 802.11n Network Adapter + 173c BT-183 Bluetooth 2.0 + 1742 802.11n Network Adapter + 6101 Cable Modem + 620a Remote NDIS Device +0b0c Todos Data System AB + 0009 Todos Argos Mini II Smart Card Reader +0b0e GN Netcom +0b0f AVID Technology +0b10 Pcally +0b11 I Tech Solutions Co., Ltd +0b1e Electronic Warfare Assoc., Inc. (EWA) +0b1f Insyde Software Corp. +0b20 TransDimension, Inc. +0b21 Yokogawa Electric Corp. +0b22 Japan System Development Co., Ltd +0b23 Pan-Asia Electronics Co., Ltd +0b24 Link Evolution Corp. +0b27 Ritek Corp. +0b28 Kenwood Corp. +0b2c Village Center, Inc. +0b30 PNY Technologies, Inc. + 0006 SM Media-Shuttle Card Reader +0b33 Contour Design, Inc. + 0020 ShuttleXpress +0b37 Hitachi ULSI Systems Co., Ltd +0b39 Omnidirectional Control Technology, Inc. + 0109 USB TO Ethernet + 0421 Serial + 0801 USB-Parallel Bridge + 0901 OCT To Fast Ethernet Converter + 0c03 LAN DOCK Serial Converter +0b3a IPaxess +0b3b Tekram Technology Co., Ltd + 0163 TL-WN320G 1.0 WLAN Adapter + 1601 Allnet 0193 802.11b Adapter + 1602 ZyXEL ZyAIR B200 802.11b Adapter + 1612 AIR.Mate 2@net 802.11b Adapter + 1613 802.11b Wireless LAN Adapter + 1620 Allnet USB 2.0 Wireless Network Adapter + 1630 QuickWLAN + 5630 ZD1211 + 6630 ZD1211 +0b3c Olivetti Techcenter + a010 Simple_Way Printer/Scanner/Copier +0b3e Kikusui Electronics Corp. +0b41 Hal Corp. + 0011 Crossam2+USB IR commander +0b43 Play.com, Inc. + 0003 PS2 Controller Converter +0b47 Sportbug.com, Inc. +0b48 TechnoTrend AG + 1003 Technotrend/Hauppauge USB-Nova + 1004 TT-PCline + 1005 Technotrend/Hauppauge USB-Nova + 1006 Technotrend/Hauppauge DEC3000-s + 1007 TT-micro plus Device + 1008 Technotrend/Hauppauge DEC2000-t + 1009 Technotrend/Hauppauge DEC2540-t +0b49 ASCII Corp. + 064f Trance Vibrator +0b4b Pine Corp. Ltd. + 0100 D'music MP3 Player +0b4d Graphtec America, Inc. + 110a Graphtec CC200-20 +0b4e Musical Electronics, Ltd + 6500 MP3 Player + 8028 MP3 Player + 8920 MP3 Player +0b50 Dumpries Co., Ltd +0b51 Comfort Keyboard Co. + 0020 Comfort Keyboard +0b52 Colorado MicroDisplay, Inc. +0b54 Sinbon Electronics Co., Ltd +0b56 TYI Systems, Ltd +0b57 Beijing HanwangTechnology Co., Ltd +0b59 Lake Communications, Ltd +0b5a Corel Corp. +0b5f Green Electronics Co., Ltd +0b60 Nsine, Ltd +0b61 NEC Viewtechnology, Ltd +0b62 Orange Micro, Inc. + 000b Bluetooth Device + 0059 iBOT2 WebCam +0b63 ADLink Technology, Inc. +0b64 Wonderful Wire Cable Co., Ltd +0b65 Expert Magnetics Corp. +0b69 CacheVision +0b6a Maxim Integrated Products +0b6f Nagano Japan Radio Co., Ltd +0b70 PortalPlayer, Inc. + 00ba iRiver H10 20GB +0b71 SHIN-EI Sangyo Co., Ltd +0b72 Embedded Wireless Technology Co., Ltd +0b73 Computone Corp. +0b75 Roland DG Corp. +0b79 Sunrise Telecom, Inc. +0b7a Zeevo, Inc. + 07d0 Bluetooth Dongle +0b7b Taiko Denki Co., Ltd +0b7c ITRAN Communications, Ltd +0b7d Astrodesign, Inc. +0b84 Rextron Technology, Inc. +0b85 Elkat Electronics, Sdn., Bhd. +0b86 Exputer Systems, Inc. + 5100 XMC5100 Zippy Drive + 5110 XMC5110 Flash Drive + 5200 XMC5200 Zippy Drive + 5201 XMC5200 Zippy Drive + 5202 XMC5200 Zippy Drive + 5280 XMC5280 Storage Drive + fff0 ISP5200 Debugger +0b87 Plus-One I & T, Inc. +0b88 Sigma Koki Co., Ltd, Technology Center +0b89 Advanced Digital Broadcast, Ltd +0b95 ASIX Electronics Corp. + 1720 10/100 Ethernet + 1780 AX88178 + 7720 AX88772 +0b96 Sewon Telecom +0b97 O2 Micro, Inc. + 7732 Smart Card Reader + 7761 Oz776 1.1 Hub + 7762 Oz776 SmartCard Reader + 7772 OZ776 CCID Smartcard Reader +0b98 Playmates Toys, Inc. +0b99 Audio International, Inc. +0b9b Dipl.-Ing. Stefan Kunde + 4012 Reflex RC-controller Interface +0b9d Softprotec Co. +0b9f Chippo Technologies +0baf U.S. Robotics + 00e5 USR6000 + 00eb USR1120 802.11b Adapter + 00ec 56K Faxmodem + 00f1 SureConnect ADSL ATM Adapter + 00f2 SureConnect ADSL Loader + 00f5 SureConnect ADSL ATM Adapter + 00f6 SureConnect ADSL Loader + 00f7 SureConnect ADSL ATM Adapter + 00f8 SureConnect ADSL Loader + 00f9 SureConnect ADSL ATM Adapter + 00fa SureConnect ADSL Loader + 00fb SureConnect ADSL Ethernet/USB Router + 0118 U5 802.11g Adapter + 011b Wireless MAXg Adapter + 0121 USR5423 WLAN + 6112 FaxModem Model 5633 +0bb0 Concord Camera Corp. + 0100 Sound Vision Stream + 5007 3340z/Rollei DC3100 +0bb1 Infinilink Corp. +0bb2 Ambit Microsystems Corp. + 0302 WLAN + 6098 USB Cable Modem +0bb3 Ofuji Technology +0bb4 High Tech Computer Corp. + 00ce mmO2 XDA GSM/GPRS Pocket PC + 00cf SPV C500 Smart Phone + 0a01 PocketPC Sync + 0a02 Himalaya GSM/GPRS Pocket PC + 0a03 PocketPC Sync + 0a04 PocketPC Sync + 0a05 PocketPC Sync + 0a06 PocketPC Sync + 0a07 Magician PocketPC SmartPhone / O2 XDA + 0a08 PocketPC Sync + 0a09 PocketPC Sync + 0a0a PocketPC Sync + 0a0b PocketPC Sync + 0a0c PocketPC Sync + 0a0d PocketPC Sync + 0a0e PocketPC Sync + 0a0f PocketPC Sync + 0a10 PocketPC Sync + 0a11 PocketPC Sync + 0a12 PocketPC Sync + 0a13 PocketPC Sync + 0a14 PocketPC Sync + 0a15 PocketPC Sync + 0a16 PocketPC Sync + 0a17 PocketPC Sync + 0a18 PocketPC Sync + 0a19 PocketPC Sync + 0a1a PocketPC Sync + 0a1b PocketPC Sync + 0a1c PocketPC Sync + 0a1d PocketPC Sync + 0a1e PocketPC Sync + 0a1f PocketPC Sync + 0a20 PocketPC Sync + 0a21 PocketPC Sync + 0a22 PocketPC Sync + 0a23 PocketPC Sync + 0a24 PocketPC Sync + 0a25 PocketPC Sync + 0a26 PocketPC Sync + 0a27 PocketPC Sync + 0a28 PocketPC Sync + 0a29 PocketPC Sync + 0a2a PocketPC Sync + 0a2b PocketPC Sync + 0a2c PocketPC Sync + 0a2d PocketPC Sync + 0a2e PocketPC Sync + 0a2f PocketPC Sync + 0a30 PocketPC Sync + 0a31 PocketPC Sync + 0a32 PocketPC Sync + 0a33 PocketPC Sync + 0a34 PocketPC Sync + 0a35 PocketPC Sync + 0a36 PocketPC Sync + 0a37 PocketPC Sync + 0a38 PocketPC Sync + 0a39 PocketPC Sync + 0a3a PocketPC Sync + 0a3b PocketPC Sync + 0a3c PocketPC Sync + 0a3d PocketPC Sync + 0a3e PocketPC Sync + 0a3f PocketPC Sync + 0a40 PocketPC Sync + 0a41 PocketPC Sync + 0a42 PocketPC Sync + 0a43 PocketPC Sync + 0a44 PocketPC Sync + 0a45 PocketPC Sync + 0a46 PocketPC Sync + 0a47 PocketPC Sync + 0a48 PocketPC Sync + 0a49 PocketPC Sync + 0a4a PocketPC Sync + 0a4b PocketPC Sync + 0a4c PocketPC Sync + 0a4d PocketPC Sync + 0a4e PocketPC Sync + 0a4f PocketPC Sync + 0a50 HTC SmartPhone Sync + 0a51 SPV C400 / T-Mobile SDA GSM/GPRS Pocket PC + 0a52 SmartPhone Sync + 0a53 SmartPhone Sync + 0a54 SmartPhone Sync + 0a55 SmartPhone Sync + 0a56 SmartPhone Sync + 0a57 SmartPhone Sync + 0a58 SmartPhone Sync + 0a59 SmartPhone Sync + 0a5a SmartPhone Sync + 0a5b SmartPhone Sync + 0a5c SmartPhone Sync + 0a5d SmartPhone Sync + 0a5e SmartPhone Sync + 0a5f SmartPhone Sync + 0a60 SmartPhone Sync + 0a61 SmartPhone Sync + 0a62 SmartPhone Sync + 0a63 SmartPhone Sync + 0a64 SmartPhone Sync + 0a65 SmartPhone Sync + 0a66 SmartPhone Sync + 0a67 SmartPhone Sync + 0a68 SmartPhone Sync + 0a69 SmartPhone Sync + 0a6a SmartPhone Sync + 0a6b SmartPhone Sync + 0a6c SmartPhone Sync + 0a6d SmartPhone Sync + 0a6e SmartPhone Sync + 0a6f SmartPhone Sync + 0a70 SmartPhone Sync + 0a71 SmartPhone Sync + 0a72 SmartPhone Sync + 0a73 SmartPhone Sync + 0a74 SmartPhone Sync + 0a75 SmartPhone Sync + 0a76 SmartPhone Sync + 0a77 SmartPhone Sync + 0a78 SmartPhone Sync + 0a79 SmartPhone Sync + 0a7a SmartPhone Sync + 0a7b SmartPhone Sync + 0a7c SmartPhone Sync + 0a7d SmartPhone Sync + 0a7e SmartPhone Sync + 0a7f SmartPhone Sync + 0a80 SmartPhone Sync + 0a81 SmartPhone Sync + 0a82 SmartPhone Sync + 0a83 SmartPhone Sync + 0a84 SmartPhone Sync + 0a85 SmartPhone Sync + 0a86 SmartPhone Sync + 0a87 SmartPhone Sync + 0a88 SmartPhone Sync + 0a89 SmartPhone Sync + 0a8a SmartPhone Sync + 0a8b SmartPhone Sync + 0a8c SmartPhone Sync + 0a8d SmartPhone Sync + 0a8e SmartPhone Sync + 0a8f SmartPhone Sync + 0a90 SmartPhone Sync + 0a91 SmartPhone Sync + 0a92 SmartPhone Sync + 0a93 SmartPhone Sync + 0a94 SmartPhone Sync + 0a95 SmartPhone Sync + 0a96 SmartPhone Sync + 0a97 SmartPhone Sync + 0a98 SmartPhone Sync + 0a99 SmartPhone Sync + 0a9a SmartPhone Sync + 0a9b SmartPhone Sync + 0a9c SmartPhone Sync + 0a9d SmartPhone Sync + 0a9e SmartPhone Sync + 0a9f SmartPhone Sync + 0b04 Hermes / TyTN / T-Mobile MDA Vario II / O2 Xda Trion + 0b06 Athena / Advantage x7500 / Dopod U1000 / T-Mobile AMEO + 0b0c Elf / Touch / P3450 / T-Mobile MDA Touch / O2 Xda Nova / Dopod S1 + 0bce Vario MDA +0bb5 Murata Manufacturing Co., Ltd +0bb6 Network Alchemy +0bb7 Joytech Computer Co., Ltd +0bb8 Hitachi Semiconductor and Devices Sales Co., Ltd +0bb9 Eiger M&C Co., Ltd +0bba ZAccess Systems +0bbb General Meters Corp. +0bbc Assistive Technology, Inc. +0bbd System Connection, Inc. +0bc0 Knilink Technology, Inc. +0bc1 Fuw Yng Electronics Co., Ltd +0bc2 Seagate RSS LLC + 2000 Storage Adapter V3 (TPP) +0bc3 IPWireless, Inc. +0bc4 Microcube Corp. +0bc5 JCN Co., Ltd +0bc6 ExWAY, Inc. +0bc7 X10 Wireless Technology, Inc. + 0001 ActiveHome (ACPI-compliant) + 0002 Firecracker Interface (ACPI-compliant) + 0003 VGA Video Sender (ACPI-compliant) + 0004 X10 Receiver + 0005 Wireless Transceiver (ACPI-compliant) + 0006 Wireless Transceiver (ACPI-compliant) + 0007 Wireless Transceiver (ACPI-compliant) + 0008 Wireless Transceiver (ACPI-compliant) + 0009 Wireless Transceiver (ACPI-compliant) + 000a Wireless Transceiver (ACPI-compliant) + 000b Transceiver (ACPI-compliant) + 000c Transceiver (ACPI-compliant) + 000d Transceiver (ACPI-compliant) + 000e Transceiver (ACPI-compliant) + 000f Transceiver (ACPI-compliant) +0bc8 Telmax Communications +0bc9 ECI Telecom, Ltd +0bca Startek Engineering, Inc. +0bcb Perfect Technic Enterprise Co., Ltd +0bd7 Andrew Pargeter & Associates + a021 Amptek DP4 multichannel signal analyzer +0bda Realtek Semiconductor Corp. + 0103 USB 2.0 Card Reader + 0104 Mass Storage Device + 0106 Mass Storage Device + 0107 Mass Storage Device + 0108 Mass Storage Device + 0111 Card Reader + 0113 Mass Storage Device + 0115 Mass Storage Device + 0116 Mass Storage Device + 0117 Mass Storage Device + 0118 Mass Storage Device + 0151 Mass Stroage Device + 0152 Mass Stroage Device + 0153 Mass Stroage Device + 0156 Mass Stroage Device + 0157 Mass Stroage Device + 0158 Mass Stroage Device + 0161 Mass Stroage Device + 0168 Mass Stroage Device + 0169 Mass Stroage Device + 0171 Mass Stroage Device + 0176 Mass Stroage Device + 0178 Mass Stroage Device + 2831 2831U Device + 8150 RTL8150 Fast Ethernet Adapter + 8151 RTL8151 Adapteon Business Mobile Networks BV + 8187 RTL8187 Wireless Adapter + 8189 RTL8187B Wireless 802.11g 54Mbps Network Adapter + 8197 RTL8187B Wireless Adapter +0bdb Ericsson Business Mobile Networks BV + 1000 BV Bluetooth Device + 1002 Bluetooth Device 1.2 +0bdc Y Media Corp. +0bdd Orange PCS +0be2 Kanda Tsushin Kogyo Co., Ltd +0be3 TOYO Corp. +0be4 Elka International, Ltd +0be5 DOME imaging systems, Inc. +0be6 Dong Guan Humen Wonderful Wire Cable Factory +0bee LTK Industries, Ltd +0bef Way2Call Communications +0bf0 Pace Micro Technology PLC +0bf1 Intracom S.A. + 0001 netMod Driver Ver 2.4.17 (CAPI) + 0002 netMod Driver Ver 2.4 (CAPI) + 0003 netMod Driver Ver 2.4 (CAPI) +0bf2 Konexx +0bf6 Addonics Technologies, Inc. + 0103 Storage Device + 1234 Storage Device + a000 Cable 205 (TPP) + a001 Cable 205 + a002 IDE Bridge +0bf7 Sunny Giken, Inc. +0bf8 Fujitsu Siemens Computers + 1001 Fujitsu Pocket Loox 600 PDA +0c04 MOTO Development Group, Inc. +0c05 Appian Graphics +0c06 Hasbro Games, Inc. +0c07 Infinite Data Storage, Ltd +0c08 Agate + 0378 Q 16MB Storage Device +0c09 Comjet Information System + a5a5 Litto Version USB2.0 +0c0a Highpoint Technologies, Inc. +0c0b Dura Micro, Inc. (Acomdata) + 27cb 6-in-1 Flash Reader and Writer + 27d7 Multi Memory reader/writer MD-005 + 27da Multi Memory reader/writer MD-005 + 27dc Multi Memory reader/writer MD-005 + 27e7 3,5'' HDD case MD-231 + 27ee 3,5'' HDD case MD-231 + 2814 3,5'' HDD case MD-231 + 2815 3,5'' HDD case MD-231 + 281d 3,5'' HDD case MD-231 + a109 CF/SM Reader and Writer + a10c SD/MS Reader and Writer + b001 USB 2.0 Mass Storage IDE adapter + b004 MMC/SD Reader and Writer +0c12 Zeroplus + 0005 PSX Vibration Feedback Converter + 8809 Red Octane Ignition Xbox DDR Pad +0c15 Iris Graphics +0c16 Gyration, Inc. + 0080 eHome Infrared Receiver + 0081 eHome Infrared Receiver +0c17 Cyberboard A/S +0c18 SynerTek Korea, Inc. +0c19 cyberPIXIE, Inc. +0c1a Silicon Motion, Inc. +0c1b MIPS Technologies +0c1c Hang Zhou Silan Electronics Co., Ltd +0c22 Tally Printer Corp. +0c23 Lernout + Hauspie +0c24 Taiyo Yuden + 0001 Bluetooth Adaptor + 0002 Bluetooth Device2 + 0005 Bluetooth Device(BC04-External) + 000b Bluetooth Device(BC04-External) + 000c Bluetooth Adaptor + 000e Bluetooth Device(BC04-External) + 000f Bluetooth Driver (V2.0+EDR) + 0010 Bluetooth Device(BC04-External) + 0012 Bluetooth Device(BC04-External) + 0018 Bluetooth Device(BC04-External) + 0019 Bluetooth Device + 0c24 Bluetooth Device(SAMPLE) + ffff Bluetooth module with BlueCore in DFU mode +0c25 Sampo Corp. + 0310 Scream Cam +0c27 RFIDeas, Inc + 3bfa pcProx Card Reader +0c2e Metro + 0200 Metrologic Scanner +0c35 Eagletron, Inc. +0c36 E Ink Corp. +0c37 e.Digital +0c38 Der An Electric Wire & Cable Co., Ltd +0c39 IFR +0c3a Furui Precise Component (Kunshan) Co., Ltd +0c3b Komatsu, Ltd +0c3c Radius Co., Ltd +0c3d Innocom, Inc. +0c3e Nextcell, Inc. +0c44 Motorola iDEN + 0021 iDEN P2k0 Device + 0022 iDEN P2k1 Device + 03a2 iDEN Smartphone +0c45 Microdia + 1020 Mass Storage Reader + 1028 Mass Storage Reader + 1030 Mass Storage Reader + 1031 Sonix Mass Storage Device + 1032 Mass Storage Reader + 1033 Sonix Mass Storage Device + 1034 Mass Storage Reader + 1035 Mass Storage Reader + 1036 Mass Storage Reader + 1037 Sonix Mass Storage Device + 1050 CF Card Reader + 1058 HDD Reader + 1060 iFlash SM-Direct Card Reader + 1061 Mass Storage Reader + 1062 Mass Storage Reader + 1063 Sonix Mass Storage Device + 1064 Mass Storage Reader + 1065 Mass Storage Reader + 1066 Mass Storage Reader + 1067 Mass Storage Reader + 1158 A56AK + 184c VoIP Phone + 6001 Genius VideoCAM NB + 6005 Sweex Mini WebCam + 6007 VideoCAM Eye + 6009 VideoCAM ExpressII + 600d TwinkleCam USB camera + 6011 PC Camera (SN9C102) + 6019 PC Camera (SN9C102) + 6024 VideoCAM ExpressII + 6025 VideoCAM ExpressII + 6028 Typhoon Easycam USB 330K (older) + 6029 Triplex i-mini PC Camera + 602a Meade ETX-105EC Camera + 602b VideoCAM NB 300 + 602c Clas Ohlson TWC-30XOP WebCam + 602d VideoCAM ExpressII + 602e VideoCAM Messenger + 6030 VideoCAM ExpressII + 603f VideoCAM ExpressII + 6040 CCD PC Camera (PC390A) + 606a CCD PC Camera (PC390A) + 607a CCD PC Camera (PC390A) + 607b Win2 PC Camera + 607c CCD PC Camera (PC390A) + 607e CCD PC Camera (PC390A) + 6080 Audio (Microphone) + 6082 VideoCAM Look + 6083 VideoCAM Look + 608c VideoCAM Look + 608e VideoCAM Look + 608f VideoCAM Look + 60a8 VideoCAM Look + 60aa VideoCAM Look + 60ab PC Camera + 60af VideoCAM Look + 60b0 Genius VideoCam Look + 60c0 PC Camera with Mic (SN9C105) + 60c8 Win2 PC Camera + 60cc Composite Device + 60ec Composite Device + 60ef Win2 PC Camera + 60fa PC Camera with Mic (SN9C105) + 60fb Composite Device + 60fc PC Camera with Mic (SN9C105) + 60fe Audio (Microphone) + 6108 Win2 PC Camera + 6122 PC Camera (SN9C110) + 6123 PC Camera (SN9C110) + 612a PC Camera (SN9C110) + 612c PC Camera (SN9C110) + 612e PC Camera (SN9C110) + 612f PC Camera (SN9C110) + 6130 PC Camera (SN9C120) + 6138 Win2 PC Camera + 613a PC Camera (SN9C120) + 613b Win2 PC Camera + 613c PC Camera (SN9C120) + 613e PC Camera (SN9C120) + 6240 PC Camera (SN9C201) + 6242 PC Camera (SN9C201) + 6243 PC Camera (SN9C201) + 6248 PC Camera (SN9C201) + 624b PC Camera (SN9C201) + 624c PC Camera (SN9C201) + 624e PC Camera (SN9C201) + 624f PC Camera (SN9C201) + 6260 PC Camera (SN9C201) + 6270 U-CAM PC Camera NE878 + 627a PC Camera (SN9C201) + 627b PC Camera (SN9C201) + 627c PC Camera (SN9C201) + 627f PC Camera (SN9C201) + 6280 Composite Device + 6282 Audio (Microphone) + 6283 Audio (Microphone) + 6288 Audio (Microphone) + 628a Composite Device + 628b PC Camera (SN9C202) + 628c PC Camera (SN9C202) + 628e Composite Device + 628f Composite Device + 62a0 Audio (Microphone) + 62b0 Audio (Microphone) + 62ba PC Camera (SN9C202) + 62bb PC Camera (SN9C202) + 62bc Composite Device + 62c0 Pavilion Webcam + 8000 DC31VC + 8006 Dual Mode Camera (8006 VGA) + 800a Vivitar Vivicam3350B +0c46 WaveRider Communications, Inc. +0c4b Reiner SCT Kartensysteme GmbH + 0100 cyberJack e-com/pinpad + 0300 cyberJack pinpad(a) +0c52 Sealevel Systems, Inc. + 2101 Serial Converter +0c53 ViewPLUS, Inc. +0c54 Glory, Ltd +0c55 Spectrum Digital, Inc. + 0510 Spectrum Digital XDS510 JTAG Debugger + 0540 SPI540 + 5416 TMS320C5416 DSK + 6416 TMS320C6416 DDB +0c56 Billion Bright, Ltd +0c57 Imaginative Design Operation Co., Ltd +0c58 Vidar Systems Corp. +0c59 Dong Guan Shinko Wire Co., Ltd +0c5a TRS International Mfg., Inc. +0c5e Xytronix Research & Design +0c62 Chant Sincere Co., Ltd +0c63 Toko, Inc. +0c64 Signality System Engineering Co., Ltd +0c65 Eminence Enterprise Co., Ltd +0c66 Rexon Electronics Corp. +0c67 Concept Telecom, Ltd +0c70 MCT Elektronikladen + 0000 USB08 Development board +0c74 Optronic Laboratories Inc. + 0002 OL 700-30 Goniometer +0c76 JMTek, LLC. + 0001 Mass Storage Controller + 0002 Mass Storage Controller + 0003 USBdisk + 0004 Mass Storage Controller + 0005 Transcend USB Flash disk + 0006 Transcend JetFlash + 0007 Mass Storage Device +0c77 Sipix Group, Ltd + 1001 SiPix Web2 + 1002 SiPix SC2100 + 1010 SiPix Snap + 1011 SiPix Blink 2 + 1015 SiPix CAMeleon +0c78 Detto Corp. +0c79 NuConnex Technologies Pte., Ltd +0c7a Wing-Span Enterprise Co., Ltd +0c86 NDA Technologies, Inc. +0c88 Kyocera Wireless Corp. + 0021 Handheld + 17da Qualcomm Kyocera CDMA Technologies MSM +0c89 Honda Tsushin Kogyo Co., Ltd +0c8a Pathway Connectivity, Inc. +0c8b Wavefly Corp. +0c8c Coactive Networks +0c8d Tempo +0c8e Cesscom Co., Ltd + 6000 Luxian Series +0c8f Applied Microsystems +0c98 Berkshire Products, Inc. + 1140 USB PC Watchdog +0c99 Innochips Co., Ltd +0c9a Hanwool Robotics Corp. +0c9b Jobin Yvon, Inc. +0c9d SemTek + 0170 3873 Manual Insert card reader +0ca2 Zyfer +0ca3 Sega Corp. +0ca4 ST&T Instrument Corp. +0ca5 BAE Systems Canada, Inc. +0ca6 Castles Technology Co., Ltd + 0010 EZUSB PC/SC Smart Card Reader + 0050 EZ220PU Reader Controller + 1077 Bludrive Family Smart Card Reader + 107e Reader Controller + 2010 myPad110 PC/SC Smart Card Reader +0ca7 Information Systems Laboratories +0cad Motorola CGISS + 9001 PowerPad Pocket PC Device +0cae Ascom Business Systems, Ltd +0caf Buslink + 2507 Hi-Speed USB-to-IDE Bridge Controller + 2515 Flash Disk Embedded Hub + 2516 Flash Disk Security Device + 2517 Flash Disk Mass Storage Device + 25c7 Hi-Speed USB-to-IDE Bridge Controller + 3a00 Hard Drive + 3a20 Mass Storage Device + 3acd Mass Storage Device +0cb0 Flying Pig Systems +0cb1 Innovonics, Inc. +0cb6 Celestix Networks, Pte., Ltd +0cb7 Singatron Enterprise Co., Ltd +0cb8 Opticis Co., Ltd +0cba Trust Electronic (Shanghai) Co., Ltd +0cbb Shanghai Darong Electronics Co., Ltd +0cbc Palmax Technology Co., Ltd + 0101 Pocket PC P6C + 0201 Personal Digital Assistant + 0301 Personal Digital Assistant P6M+ + 0401 Pocket PC +0cbd Pentel Co., Ltd (Electronics Equipment Div.) +0cbe Keryx Technologies, Inc. +0cbf Union Genius Computer Co., Ltd +0cc0 Kuon Yi Industrial Corp. +0cc1 Given Imaging, Ltd +0cc2 Timex Corp. +0cc3 Rimage Corp. +0cc4 emsys GmbH +0cc5 Sendo +0cc6 Intermagic Corp. +0cc7 Kontron Medical AG +0cc8 Technotools Corp. +0cc9 BroadMAX Technologies, Inc. +0cca Amphenol +0ccb SKNet Co., Ltd +0ccc Domex Technology Corp. +0ccd TerraTec Electronic GmbH + 0012 PHASE 26 + 0013 PHASE 26 + 0014 PHASE 26 + 0015 Flash Update for TerraTec PHASE 26 + 0021 Cameo Grabster 200 + 0023 Mystify Claw + 0028 Aureon 5.1 MkII + 0032 MIDI HUBBLE + 0035 Miditech Play'n Roll + 0036 Cinergy 250 Audio + 0037 Cinergy 250 Audio + 0038 Cinergy T^2 DVB-T Receiver + 0039 Grabster AV 400 + 003b Cinergy 400 + 003c Grabster AV 250 + 0042 Cinergy Hybrid T XS + 0043 Cinergy T XS + 004e Cinergy T XS + 004f Cinergy Analog XS + 005c Cinergy T² + 0069 Cinergy T XE DVB-T Receiver +0cd4 Bang Olufsen + 0101 BeolinkPC2 +0cd7 NewChip S.r.l. +0cd8 JS Digitech, Inc. + 2007 Smart Card Reader/JSTU-9700 +0cd9 Hitachi Shin Din Cable, Ltd +0cde Z-Com + 0001 M4Y-750 + 0002 XI-725/726 Prism2.5 802.11b Adapter + 0003 Sagem 802.11b Dongle + 0004 Sagem 802.11b Dongle + 0005 XI-735 Prism3 802.11b Adapter + 0006 Medion 40900 802.11b Adapter + 0008 Sitecom Wireless Network Adapter 100G+ WL-125 + 0009 (ZD1211)IEEE 802.11b+g Adapter + 0011 ZD1211 + 0012 AR5523 + 0013 AR5523 driver (no firmware) + 0014 NB 802.11g Wireless LAN Adapter(3887A) + 0015 Zoom Wireless-G + 0016 NB 802.11g Wireless LAN Adapter(3887A) + 0018 NB 802.11a/b/g Wireless LAN Adapter(3887A) + 001a ZD1211B + 001c 802.11b/g Wireless Network Adapter + 0020 Wi-Fi Wireless LAN Adapter + 0022 802.11b/g/n Wireless Network Adapter +0ce9 pico Technology + 1001 PicoScope3204 +0cf1 e-Conn Electronic Co., Ltd +0cf2 ENE Technology, Inc. +0cf3 Atheros Communications, Inc. + 0001 AR5523 + 0002 AR5523 (no firmware) + 0003 AR5523 + 0004 AR5523 (no firmware) + 0005 AR5523 + 0006 AR5523 (no firmware) +0cf4 Fomtex Corp. +0cf5 Cellink Co., Ltd +0cf6 Compucable Corp. +0cf7 ishoni Networks +0cf8 Clarisys, Inc. + 0750 Claritel-i750 - vp +0cf9 Central System Research Co., Ltd +0cfa Inviso, Inc. +0cfc Minolta-QMS, Inc. +0cff SAFA MEDIA Co., Ltd. + 0320 SR-380N +0d06 telos EDV Systementwicklung GmbH +0d08 UTStarcom + 0602 DV007 [serial] + 0603 DV007 [storage] +0d0b Contemporary Controls +0d0c Astron Electronics Co., Ltd +0d0d MKNet Corp. +0d0e Hybrid Networks, Inc. +0d0f Feng Shin Cable Co., Ltd +0d10 Elastic Networks + 0001 StormPort (WDM) +0d11 Maspro Denkoh Corp. +0d12 Hansol Electronics, Inc. +0d13 BMF Corp. +0d14 Array Comm, Inc. +0d15 OnStream b.v. +0d16 Hi-Touch Imaging Technologies Co., Ltd + 0001 PhotoShuttle + 0002 Photo Printer 730 series + 0004 Photo Printer 63xPL/PS + 0100 Photo Printer 63xPL/PS + 0102 Photo Printer 64xPS + 0103 Photo Printer 730 series + 0104 Photo Printer 63xPL/PS + 0105 Photo Printer 64xPS + 0200 Photo Printer 64xDL +0d17 NALTEC, Inc. +0d18 coaXmedia +0d19 Hank Connection Industrial Co., Ltd +0d32 Leo Hui Electric Wire & Cable Co., Ltd +0d33 AirSpeak, Inc. +0d34 Rearden Steel Technologies +0d35 Dah Kun Co., Ltd +0d3a Posiflex Technologies, Inc. +0d3c Sri Cable Technology, Ltd +0d3d Tangtop Technology Co., Ltd + 0001 HID Keyboard +0d3e Fitcom, inc. +0d3f MTS Systems Corp. +0d40 Ascor, Inc. +0d41 Ta Yun Terminals Industrial Co., Ltd +0d42 Full Der Co., Ltd +0d46 Kobil Systems GmbH + 2012 KAAN Standard Plus (Smartcard reader) + 3003 mIDentity Light / KAAN SIM III + 4000 mIDentity (mass storage) + 4001 mIDentity Basic/Classic (composite device) + 4081 mIDentity Basic/Classic (installationless) +0d49 Maxtor + 3000 Drive + 3010 3000LE Drive + 3100 Hi-Speed USB-IDE Bridge Controller + 5000 5000XT Drive + 5010 5000LE Drive + 5020 Mobile Hard Disk Drive + 7000 OneTouch + 7010 OneTouch +0d4a NF Corp. +0d4b Grape Systems, Inc. +0d4c Tedas AG +0d4d Coherent, Inc. +0d4e Agere Systems Netherland BV + 047a WLAN Card + 1000 Wireless Card Model 0801 + 1001 Wireless Card Model 0802 +0d4f EADS Airbus France +0d50 Cleware GmbH + 0011 USB-Temp2 Thermometer +0d51 Volex (Asia) Pte., Ltd +0d53 HMI Co., Ltd +0d54 Holon Corp. +0d55 ASKA Technologies, Inc. +0d56 AVLAB Technology, Inc. +0d57 Solomon Microtech, Ltd +0d5c Belkin + a002 F5D6050 802.11b Adapter +0d5e Myacom, Ltd + 2346 BT Digital Access adapter +0d5f CSI, Inc. +0d60 IVL Technologies, Ltd +0d61 Meilu Electronics (Shenzhen) Co., Ltd +0d62 Darfon Electronics Corp. + 0003 Smartcard Reader + 0004 Filter Driver + 0306 M530 Mouse + 0800 Magic Wheel + 2021 AM805 Keyboard + 2026 TECOM Bluetooth Device + a100 Benq Mouse +0d63 Fritz Gegauf AG +0d64 DXG Technology Corp. + 0105 Dual Mode Digital Camera 1.3M + 0107 Horus MT-409 Camera + 0108 Dual Mode Digital Camera + 0202 Dual Mode Video Camera Device + 0303 DXG-305V Camera + 1001 SiPix Stylecam/UMAX AstraPix 320s + 1002 Fashion Cam 01 Dual-Mode DSC (Video Camera) + 1003 Fashion Cam Dual-Mode DSC (Controller) + 1021 D-Link DSC 350F + 1208 Dual Mode Still Camera Device + 2208 Mass Storage + 3105 Dual Mode Digital Camera Disk + 3108 Digicam Mass Storage Device +0d65 KMJP Co., Ltd +0d66 TMT +0d67 Advanet, Inc. +0d68 Super Link Electronics Co., Ltd +0d69 NSI +0d6a Megapower International Corp. +0d6b And-Or Logic +0d70 Try Computer Co., Ltd +0d71 Hirakawa Hewtech Corp. +0d72 Winmate Communication, Inc. +0d73 Hit's Communications, Inc. +0d76 MFP Korea, Inc. +0d77 Power Sentry/Newpoint +0d78 Japan Distributor Corp. +0d7a MARX Datentechnik GmbH +0d7b Wellco Technology Co., Ltd +0d7c Taiwan Line Tek Electronic Co., Ltd +0d7d Phison Electronics Corp. + 0100 PS1001/1011/1006/1026 Flash Disk + 0110 Gigabyte FlexDrive + 0120 Disk Pro 64MB + 0124 GIGABYTE Disk + 0240 I/O-Magic/Transcend 6-in-1 Card Reader + 110e NEC uPD720121/130 USB-ATA/ATAPI Bridge + 1240 Apacer 6-in-1 Card Reader 2.0 + 1270 Wolverine SixPac 6000 + 1300 Flash Disk + 1320 PS2031 Flash Disk + 1400 Attache 256MB USB 2.0 Flash Drive + 1420 PS2044 Pen Drive + 1470 Vosonic X's-Drive II+ VP2160 + 1900 USB Thumb Drive +0d7e American Computer & Digital Components + 2507 Hi-Speed USB-to-IDE Bridge Controller + 2517 Hi-Speed Mass Storage Device + 25c7 Hi-Speed USB-to-IDE Bridge Controller +0d7f Essential Reality LLC +0d80 H.R. Silvine Electronics, Inc. +0d81 TechnoVision +0d83 Think Outside, Inc. +0d89 Oz Software +0d8a King Jim Co., Ltd + 0101 TEPRA PRO +0d8b Ascom Telecommunications, Ltd +0d8c C-Media Electronics, Inc. + 0001 Audio Device + 0002 Composite Device + 0003 Sound Device + 0006 Storm HP-USB500 5.1 Headset + 000c Audio Adapter + 000d Composite Device + 000e Audio Adapter (Planet UP-100, Genius G-Talk) + 0102 CM106 Like Sound Device + 0103 Turtle Beach Audio Advantage Micro + 0201 CM6501 + 5000 Mass Storage Controller + 5200 Mass Storage Controller(0D8C,5200) + b213 USB Phone CM109 (aka CT2000,VPT1000) +0d8d Promotion & Display Technology, Ltd + 0234 V-234 Composite Device + 0550 V-550 Composite Device + 0551 V-551 Composite Device + 0552 V-552 Composite Device + 0651 V-651 Composite Device + 0652 V-652 Composite Device + 0653 V-653 Composite Device + 0654 V-654 Composite Device + 0655 V-655 Composite Device + 0656 V-656 Composite Device + 0657 V-657 Composite Device + 0658 V-658 Composite Device + 0659 V-659 Composite Device + 0660 V-660 Composite Device + 0661 V-661 Composite Device + 0662 V-662 Composite Device + 0850 V-850 Composite Device + 0851 V-851 Composite Device + 0852 V-852 Composite Device + 0901 V-901 Composite Device + 0902 V-902 Composite Device + 0903 V-903 Composite Device + 4754 Voyager DMP Composite Device + bb00 Bloomberg Composite Device + bb01 Bloomberg Composite Device + bb02 Bloomberg Composite Device + bb03 Bloomberg Composite Device + bb04 Bloomberg Composite Device + bb05 Bloomberg Composite Device + fffe Global Tuner Composite Device + ffff Voyager DMP Composite Device +0d8e Global Sun Technology, Inc. + 0163 802.11g 54 Mbps Wireless Dongle + 1621 802.11b Wireless Adapter + 3762 802.11g Wireless Mini adapter + 3763 802.11g Wireless dongle + 7100 802.11b Adapter + 7110 WL-210 + 7801 AR5523 + 7802 AR5523 (no firmware) + 7811 AR5523 + 7812 AR5523 (no firmware) + 7a01 PRISM25 802.11b Adapter +0d8f Pitney Bowes +0d90 Sure-Fire Electrical Corp. +0d96 Skanhex Technology, Inc. + 0000 Jenoptik JD350 video + 3300 SX330z Camera + 4100 SX410z Camera + 4102 MD 9700 Camera + 4104 Jenoptik JD-4100z3s + 410a Medion 9801/Novatech SX-410z + 5200 SX-520z Camera +0d97 Santa Barbara Instrument Group + 0001 SBIG Astronomy Camera (without firmware) + 0101 SBIG Astronomy Camera (with firmware) +0d98 Mars Semiconductor Corp. + 0300 Avaya Wireless Card +0d99 Trazer Technologies, Inc. +0d9a RTX Telecom AS + 0001 Bluetooth Device +0d9b Tat Shing Electrical Co. +0d9c Chee Chen Hi-Technology Co., Ltd +0d9d Sanwa Supply, Inc. +0d9e Avaya + 0300 Wireless Card +0d9f Powercom Co., Ltd +0da0 Danger Research +0da1 Suzhou Peter's Precise Industrial Co., Ltd +0da2 Land Instruments International, Ltd +0da3 Nippon Electro-Sensory Devices Corp. +0da4 Polar Electro OY + 0001 Interface +0da7 IOGear, Inc. +0da8 softDSP Co., Ltd + 0001 SDS 200A Oscilloscope +0dab Cubig Group + 0100 DVR/CVR-M140 MP3 Player +0dad Westover Scientific +0db0 Micro Star International + 1020 PC2PC WLAN Card + 1967 Bluetooth Dongle + 4011 Medion Flash XL V2.0 Card Reader + 4600 802.11b/g Turbo Wireless Adapter + 5501 Mass Storage Device + 5502 Mass Storage Device + 5513 MP3 Player + 5515 MP3 Player + 5516 MP3 Player + 6823 UB11B/MS-6823 802.11b Wi-Fi adapter + 6826 IEEE 802.11g Wireless Network Adapter + 6855 Bluetooth Device + 6861 MSI-6861 802.11g WiFi adapter + 6865 RT2570 + 6869 RT2570 + 6874 RT2573 + 6877 RT2573 + 6881 Bluetooth Class I EDR Device + 688a Bluetooth Class I EDR Device + 6970 Bluetooth adapter + 697a Bluetooth Dongle + 6982 Medion Flash XL Card Reader + a861 RT2573 + a874 RT2573 + a970 Bluetooth dongle + a97a Bluetooth EDR Device + b970 Bluetooth EDR Device + b97a Bluetooth EDR Device +0db1 Wen Te Electronics Co., Ltd +0db2 Shian Hwi Plug Parts, Plastic Factory +0db3 Tekram Technology Co., Ltd +0db4 Chung Fu Chen Yeh Enterprise Corp. +0db7 ELCON Systemtechnik + 0002 Goldpfeil P-LAN +0dbe Jiuh Shiuh Precision Industry Co., Ltd +0dbf Quik Tech Solutions + 0002 SmartDongle Security Key + 0200 HDD Storage Solution + 021b USB-2.0 IDE Adapter + 0300 Storage Adapter + 0333 Storage Adapter + 0707 ZIV Drive +0dc0 Great Notions +0dc1 Tamagawa Seiki Co., Ltd +0dc3 Athena Smartcard Solutions, Inc. + 0801 ASEDrive III + 0802 ASEDrive IIIe + 1104 ASEDrive IIIe KB + 1701 ASEKey + 1702 ASEKey +0dc4 Macpower Peripherals, Ltd + 0040 Mass Storage Device + 0041 Mass Storage Device + 0042 Mass Storage Device + 0101 Hi-Speed Mass Storage Device +0dc5 SDK Co., Ltd +0dc6 Precision Squared Technology Corp. +0dc7 First Cable Line, Inc. +0dcd NetworkFab Corp. + 0001 Remote Interface Adapter + 0002 High Bandwidth Codec +0dd0 Access Solutions + 1002 Triple Talk Speech Synthesizer +0dd1 Contek Electronics Co., Ltd +0dd2 Power Quotient International Co., Ltd + 0003 Mass Storage (P) +0dd3 MediaQ +0dd4 Custom Engineering SPA +0dd5 California Micro Devices +0dd7 Kocom Co., Ltd +0dd8 Netac Technology Co., Ltd + 1060 USB-CF-Card + e007 OnlyDisk U222 Pendrive +0dd9 HighSpeed Surfing +0dda Integrated Circuit Solution, Inc. + 0001 Multi-Card Reader 6in1 + 0002 Multi-Card Reader 7in1 + 0003 Flash Disk + 0005 Internal Multi-Card Reader 6in1 + 0008 SD single card reader + 0009 MS single card reader + 000a MS+SD Dual Card Reader + 000b SM single card reader + 0101 All-In-One Card Reader + 0102 All-In-One Card Reader + 0301 MP3 Player + 0302 Multi-Card MP3 Player + 1001 Multi-Flash Disk + 2001 Multi-Card Reader + 2002 Q018 default PID + 2003 Multi-Card Reader + 2005 Datalux DLX-1611 16in1 Card Reader + 2006 All-In-One Card Reader + 2007 USB to ATAPI bridge + 2008 All-In-One Card Reader + 2013 SD/MS Combo Card Reader + 2014 SD/MS Single Card Reader + 2023 card reader SD/MS DEMO board with ICSI brand name (MaskROM version) + 2024 card reader SD/MS DEMO board with Generic brand name (MaskROM version) + 2026 USB2.0 Card Reader + 2027 USB 2.0 Card Reader + 2315 UFD MP3 player (model 2) + 2318 UFD MP3 player (model 1) + 2321 UFD MP3 player +0ddb Tamarack, Inc. +0ddd Datelink Technology Co., Ltd +0dde Ubicom, Inc. +0de0 BD Consumer Healthcare +0dea UTECH Electronic (D.G.) Co., Ltd. +0ded Novasonics +0dee Lifetime Memory Products + 4010 Storage Adapter +0def Full Rise Electronic Co., Ltd +0df6 Sitecom Europe B.V. + 0001 C-Media VOIP Device + 0004 Bluetooth 2.0 Adapter 100m + 0007 Bluetooth 2.0 Adapter 10m + 000b Bluetooth 2.0.USB Adapter DFU + 000d WL-168 Wireless Network Adapter 54g + 0017 WL-182 + 0019 Bluetooth 2.0 adapter 10m CN-512v2 001 + 001a Bluetooth 2.0 adapter 100m CN-521v2 001 + 061c LN-028 + 21f4 44 St Bluetooth Device + 2200 Sitecom bluetooth2.0 class 2 dongle CN-512 + 2208 Sitecom bluetooth2.0 class 2 dongle CN-520 + 2209 Sitecom bluetooth2.0 class 1 dongle CN-521 + 9071 zd1211 802.11g Adapter + 9075 ZD1211B + 90ac WL-172 + 9712 WL-113 rev 2 +0df7 Mobile Action Technology, Inc. + 0620 MA-620 Infrared Adapter + 0700 MA-700 Bluetooth Adapter + 0720 MA-720 Bluetooth Adapter + 0722 Bluetooth Dongle + 0800 Data Cable + 0820 Data Cable + 1800 Generic Card Reader + 1802 Card Reader +0dfa Toyo Communication Equipment Co., Ltd +0dfc GeneralTouch Technology Co., Ltd + 0001 Touchscreen +0e03 Nippon Systemware Co., Ltd +0e08 Winbest Technology Co., Ltd +0e0c Gesytec + 0101 LonUSB LonTalk Network Adapter +0e16 JMTek, LLC +0e17 Walex Electronic, Ltd +0e1b Crewave +0e21 Cowon Systems, Inc. + 0300 iAudio CW200 + 0400 MP3 Player + 0510 iAudio X5 + 0513 iAudio X5, side USB port + 0520 iAudio M5 + 0700 iAudio U3 +0e22 Symbian Ltd. +0e23 Liou Yuane Enterprise Co., Ltd +0e25 VinChip Systems, Inc. +0e26 J-Phone East Co., Ltd +0e30 HeartMath LLC +0e34 Micro Computer Control Corp. +0e35 3Pea Technologies, Inc. +0e36 TiePie engineering + 0008 Handyscope HS3 + 0009 Handyscope HS3 (br) + 000a Handyscope HS4 + 000b Handyscope HS4 (br) + 000e Handyscope HS4 Diff + 000f Handyscope HS4 Diff (br) + 0010 Handyscope HS2 + 0018 Handyprobe HP2 + 0042 TiePieSCOPE HS801 + 00fd USB To Parallel adapter + 00fe USB To Parallel adapter +0e38 Stratitec, Inc. +0e39 Smart Modular Technologies, Inc. + 0137 Bluetooth Device +0e3a Neostar Technology Co., Ltd + 1100 CW-1100 Wireless Network Adapter +0e3b Mansella, Ltd +0e41 Line6, Inc. + 4250 BassPODxt + 4252 BassPODxt Pro + 4642 BassPODxt Live + 4650 PODxt Live + 4750 GuitarPort + 5044 PODxt + 5050 PODxt Pro + 534d SeaMonkey +0e44 Sun-Riseful Technology Co., Ltd. +0e48 Julia Corp., Ltd + 0100 CardPro SmartCard Reader +0e4a Shenzhen Bao Hing Electric Wire & Cable Mfr. Co. +0e4c Radica Games, Ltd +0e55 Speed Dragon Multimedia, Ltd + 110b MS3303H USB-to-Serial Bridge +0e56 Kingston Technology Company, Inc. + 6021 K-PEX 100 +0e5a Active Co., Ltd +0e5b Union Power Information Industrial Co., Ltd +0e5c Bitland Information Technology Co., Ltd + 6118 LCD Device + 6119 remote receive and control device + 6441 C-Media Sound Device +0e5d Neltron Industrial Co., Ltd +0e66 Hawking + 400b UF100 10/100 Network Adapter + 400c UF100 Ethernet [pegasus2] +0e67 Fossil, Inc. + 0002 Wrist PDA +0e6a Megawin Technology Co., Ltd +0e70 Tokyo Electronic Industry Co., Ltd +0e72 Hsi-Chin Electronics Co., Ltd +0e75 TVS Electronics, Ltd +0e79 Archos, Inc. + 1106 Pocket Medai Assistant - PMA400 +0e7b On-Tech Industry Co., Ltd +0e7e Gmate, Inc. + 0001 Yopy 3000 PDA + 1001 YP3X00 PDA +0e82 Ching Tai Electric Wire & Cable Co., Ltd +0e83 Shin An Wire & Cable Co. +0e8c Well Force Electronic Co., Ltd +0e8d MediaTek Inc. +0e8f GreenAsia Inc. + 0012 Joystick +0e90 WiebeTech, LLC + 0100 Storage Adapter V1 +0e91 VTech Engineering Canada, Ltd +0e92 C's Glory Enterprise Co., Ltd +0e93 eM Technics Co., Ltd +0e95 Future Technology Co., Ltd +0e96 Aplux Communications, Ltd + c001 TRUST 380 USB2 SPACEC@M +0e97 Fingerworks, Inc. +0e98 Advanced Analogic Technologies, Inc. +0e99 Parallel Dice Co., Ltd +0e9a TA HSING Industries, Ltd +0e9b ADTEC Corp. +0e9c Streamzap, Inc. + 0000 Streamzap Remote Control +0e9f Tamura Corp. +0ea0 Ours Technology, Inc. + 2126 7-in-1 Card Reader + 2168 Transcend JetFlash 2.0 / Astone USB Drive + 6803 OTI-6803 Flash Disk + 6808 OTI-6808 Flash Disk + 6828 OTI-6828 Flash Disk +0ea6 Nihon Computer Co., Ltd +0ea7 MSL Enterprises Corp. +0ea8 CenDyne, Inc. +0ead Humax Co., Ltd +0eb0 NovaTech + 9020 NovaTech NV-902W + 9021 RT2573 +0eb1 WIS Technologies, Inc. + 6666 WinFast WalkieTV TV Loader + 6668 WinFast WalkieTV TV Loader + 7007 WinFast WalkieTV WDM Capture +0eb2 Y-S Electronic Co., Ltd +0eb3 Saint Technology Corp. +0eb7 Endor AG +0ebe VWeb Corp. +0ebf Omega Technology of Taiwan, Inc. +0ec0 LHI Technology (China) Co., Ltd +0ec1 Abit Computer Corp. +0ec2 Sweetray Industrial, Ltd +0ec3 Axell Co., Ltd +0ec4 Ballracing Developments, Ltd +0ec5 GT Information System Co., Ltd +0ec6 InnoVISION Multimedia, Ltd +0ec7 Theta Link Corp. + 1008 So., Show 301 Digital Camera +0ecd Lite-On IT Corp. + 1400 CD\RW 40X +0ece TaiSol Electronics Co., Ltd +0ecf Phogenix Imaging, LLC +0ed1 WinMaxGroup + 6660 USB Flash Disk 64M-C + 6680 USB Flash Disk 64M-B + 7634 MP3 Player +0ed2 Kyoto Micro Computer Co., Ltd +0ed3 Wing-Tech Enterprise Co., Ltd +0ed5 Fiberbyte + e000 USB-inSync Device + f000 Fiberbyte USB-inSync Device + f201 Fiberbyte USB-inSync DAQ-2500X +0eda Noriake Itron Corp. +0edf e-MDT Co., Ltd + 2060 FID irock! 100 Series +0ee0 Shima Seiki Mfg., Ltd +0ee1 Sarotech Co., Ltd +0ee2 AMI Semiconductor, Inc. +0ee3 ComTrue Technology Corp. + 1000 Image Tank 1.5 +0ee4 Sunrich Technology, Ltd +0eee Digital Stream Technology, Inc. + 8810 Mass Storage Drive +0eef D-WAV Scientific Co., Ltd + 0001 eGalax TouchScreen + 0002 Touchscreen Controller(Professional) +0ef0 Hitachi Cable, Ltd +0ef1 Aichi Micro Intelligent Corp. +0ef2 I/O Magic Corp. +0ef3 Lynn Products, Inc. +0ef4 DSI Datotech +0ef5 PointChips + 2202 Flash Disk + 2366 Flash Disk +0ef6 Yield Microelectronics Corp. +0ef7 SM Tech Co., Ltd (Tulip) +0efd Oasis Semiconductor +0efe Wem Technology, Inc. +0f06 Visual Frontier Enterprise Co., Ltd +0f08 CSL Wire & Plug (Shen Zhen) Co. +0f0c CAS Corp. +0f0d Hori Co., Ltd +0f0e Energy Full Corp. +0f12 Mars Engineering Corp. +0f13 Acetek Technology Co., Ltd +0f19 Oracom Co., Ltd +0f1b Onset Computer Corp. +0f1c Funai Electric Co., Ltd +0f1d Iwill Corp. +0f21 IOI Technology Corp. +0f22 Senior Industries, Inc. +0f23 Leader Tech Manufacturer Co., Ltd +0f24 Flex-P Industries, Snd., Bhd. +0f2d ViPower, Inc. +0f2e Geniality Maple Technology Co., Ltd +0f2f Priva Design Services +0f30 Jess Technology Co., Ltd + 001c PS3 Guitar Controller Dongle + 0110 10-Button Joypad +0f31 Chrysalis Development +0f32 YFC-BonEagle Electric Co., Ltd +0f37 Kokuyo Co., Ltd +0f38 Nien-Yi Industrial Corp. +0f3d Airprime, Incorporated + 0112 CDMA 1xEVDO PC Card, PC 5220 +0f41 RDC Semiconductor Co., Ltd +0f42 Nital Consulting Services, Inc. +0f44 Polhemus + ef11 Patriot (firmware not loaded) + ef12 Patriot + ff11 Liberty (firmware not loaded) + ff12 Liberty +0f4b St. John Technology Co., Ltd +0f4c WorldWide Cable Opto Corp. +0f4d Microtune, Inc. + 1000 Bluetooth Dongle +0f4e Freedom Scientific +0f52 Wing Key Electrical Co., Ltd +0f53 Dongguan White Horse Cable Factory, Ltd +0f54 Kawai Musical Instruments Mfg. Co., Ltd +0f55 AmbiCom, Inc. +0f5c Prairiecomm, Inc. +0f5d NewAge International, LLC + 9455 Compact Drive +0f5f Key Technology Corp. +0f60 NTK, Ltd +0f61 Varian, Inc. +0f62 Acrox Technologies Co., Ltd + 1001 Targus Mini Trackball Optical Mouse +0f68 Kobe Steel, Ltd +0f69 Dionex Corp. +0f6a Vibren Technologies, Inc. +0f6e INTELLIGENT SYSTEMS + 0100 GameBoy Color Emulator + 0201 GameBoy Advance Flash Gang Writer + 0202 GameBoy Advance Capture + 0300 Gamecube DOL Viewer + 0400 NDS Emulator + 0401 NDS UIC + 0402 NDS Writer + 0403 NDS Capture + 0404 NDS Emulator (Lite) +0f73 DFI +0f7c DQ Technology, Inc. +0f7d NetBotz, Inc. +0f7e Fluke Corp. +0f88 VTech Holdings, Ltd + 3012 RT2570 + 3014 ZD1211B +0f8b Yazaki Corp. +0f8c Young Generation International Corp. +0f8d Uniwill Computer Corp. +0f8e Kingnet Technology Co., Ltd +0f8f Soma Networks +0f97 CviLux Corp. +0f98 CyberBank Corp. +0f9c Hyun Won, Inc. + 0301 M-Any Premium DAH-610 MP3/WMA Player + 0332 mobiBLU DAH-1200 MP3/Ogg Player +0f9e Lucent Technologies +0fa3 Starconn Electronic Co., Ltd +0fa4 ATL Technology +0fa5 Sotec Co., Ltd +0fa7 Epox Computer Co., Ltd +0fa8 Logic Controls, Inc. +0faf Winpoint Electronic Corp. +0fb0 Haurtian Wire & Cable Co., Ltd +0fb1 Inclose Design, Inc. +0fb2 Juan-Chern Industrial Co., Ltd +0fb8 Wistron Corp. + 0002 eHome Infrared Receiver +0fb9 AACom Corp. +0fba San Shing Electronics Co., Ltd +0fbb Bitwise Systems, Inc. +0fc1 Mitac Internatinal Corp. +0fc2 Plug and Jack Industrial, Inc. +0fc5 Delcom Engineering + 1222 I/O Development Board +0fc6 Dataplus Supplies, Inc. +0fca Research In Motion, Ltd. + 0001 Blackberry Handheld +0fce Sony Ericsson Mobile Communications AB + 1010 WMC Modem + d008 V800-Vodafone 802SE WMC Modem + d016 K750i Phone + d017 K608i Phone + d019 VDC EGPRS Modem + d025 520 WMC Data Modem + d038 W850i Phone + d041 K510i Phone + d042 W810i Phone + d046 K610i Phone +0fcf Dynastream Innovations, Inc. +0fd0 Tulip Computers B.V. +0fd1 Giant Electronics Ltd. +0fd4 Tenovis GmbH & Co., KG +0fd5 Direct Access Technology, Inc. +0fdc Micro Plus +0fe4 IN-Tech Electronics, Ltd +0fe5 Greenconn (U.S.A.), Inc. +0fe9 DVICO + db00 FusionHDTV DVB-T (MT352+LgZ201) (uninitialized) + db01 FusionHDTV DVB-T (MT352+LgZ201) (initialized) + db10 FusionHDTV DVB-T (MT352+Thomson7579) (uninitialized) + db11 FusionHDTV DVB-T (MT352+Thomson7579) (initialized) +0fea United Computer Accessories +0feb CRS Electronic Co., Ltd +0fec UMC Electronics Co., Ltd +0fed Access Co., Ltd +0fee Xsido Corp. +0fef MJ Research, Inc. +0ff6 Core Valley Co., Ltd +0ff7 CHI SHING Computer Accessories Co., Ltd +0fff Aopen, Inc. +1000 Speed Tech Corp. +1001 Ritronics Components (S) Pte., Ltd +1003 Sigma Corp. + 0100 Sigma SD10 +1004 LG Electronics, Inc. + 1fae U8120 3G Cellphone + 6000 VX4400/VX6000 Cellphone + 6005 T5100 + 6800 CDMA Modem + 7000 LG LDP-7024D(LD)USB +1005 Apacer Technology, Inc. + 1001 MP3 Player + 1004 MP3 Player + 1006 MP3 Player + b113 Handy Steno 2.0/HT203 + b223 CD-RW + 6 in 1 Card Reader Digital Storage / Converter +1006 iRiver, Ltd. + 3001 iHP-100 + 3002 iHP-120/140 MP3 Player + 3003 H320/H340 + 3004 H340 (mtp) +1009 Emuzed, Inc. + 000e eHome Infrared Receiver + 0013 Angel MPEG Device + 0015 Lumanate Wave PAL SECAM DVBT Device + 0016 Lumanate Wave NTSC/ATSC Combo Device +100a AV Chaseway, Ltd + 2402 MP3 Player + 2404 MP3 Player + 2405 MP3 Player + 2406 MP3 Player + a0c0 MP3 Player +100b Chou Chin Industrial Co., Ltd +100d Netopia, Inc. + 3342 Cayman 3352 DSL Modem + 3382 3380 Series Network Interface + cb01 Cayman 3341 Ethernet DSL Router +1010 Fukuda Denshi Co., Ltd +1011 Mobile Media Tech. + 0001 AccFast Mp3 +1012 SDKM Fibres, Wires & Cables Berhad +1013 TST-Touchless Sensor Technology AG +1014 Densitron Technologies PLC +1015 Softronics Pty., Ltd +1016 Xiamen Hung's Enterprise Co., Ltd +1017 Speedy Industrial Supplies, Pte., Ltd +1019 Elitegroup Computer Systems (ECS) + 0c55 USB Flash Reader, Desknote UCR-61S2B +1020 Labtec + 000a Wireless Optical Mouse +1022 Shinko Shoji Co., Ltd +1025 Hyper-Paltek + 005e USB DVB-T device + 005f USB DVB-T device + 0300 MP3 Player + 0350 MP3 Player +1026 Newly Corp. +1027 Time Domain +1028 Inovys Corp. +1029 Atlantic Coast Telesys +102a Ramos Technology Co., Ltd +102b Infotronic America, Inc. +102c Etoms Electronics Corp. + 6251 Q-Cam +102d Winic Corp. +1031 Comax Technology, Inc. +1032 C-One Technology Corp. +1033 Nucam Corp. + 0068 3,5'' HDD case MD-231 +1038 Ideazon, Inc. + 0100 Zboard +1039 devolo AG + 2140 dsl+ 1100 duo +103d Stanton + 0100 ScratchAmp + 0101 ScratchAmp +1043 iCreate Technologies Corp. + 160f Wireless Network Adapter + 4901 AV-836 Video Capture Device + 8006 Flash Disk 32-256 MB +1044 Chu Yuen Enterprise Co., Ltd + 7001 U7000 TV tuner device + 8001 GN-54G + 8002 GN-BR402W + 8003 GN-WLBM101 + 8004 GN-WLBZ101 802.11b Adapter + 8005 GN-WLBZ201 802.11b Adapter + 8006 GN-WBZB-M 802.11b Adapter + 8007 GN-WBKG + 8008 GN-WB01GS + 800a GN-WI05GS + 800b GN-WB30N 802.11n WLAN Card +1046 Winbond Electronics Corp. [hex] + 8901 Bluetooth Device + 9967 W9967CF/W9968CF WebCam IC +1048 Targus Group International +104c AMCO TEC International, Inc. +1053 Immanuel Electronics Co., Ltd +1054 BMS International Beheer N.V. + 5004 DSL 7420 Loader + 5005 DSL 7420 LAN Modem +1055 Complex Micro Interconnection Co., Ltd +1056 Hsin Chen Ent Co., Ltd +1057 ON Semiconductor +1058 Western Digital Technologies, Inc. + 0200 Firewire USB Combo + 0400 External HDD + 0500 hub + 0702 Passport External HDD + 0901 MyBook External HDD + 1001 External Hard Disk +1059 Giesecke & Devrient GmbH + 000b StarSign Bio Token 3.0 +105c Hong Ji Electric Wire & Cable (Dongguan) Co., Ltd +105d Delkin Devices, Inc. +105e Valence Semiconductor Design, Ltd +105f Chin Shong Enterprise Co., Ltd +1060 Easthome Industrial Co., Ltd +1063 Motorola Electronics Taiwan, Ltd [hex] + 1555 MC141555 Hub + 4100 SB4100 USB Cable Modem +1065 CCYU Technology + 0020 USB-DVR2 Dev Board + 2136 EasyDisk ED1064 +106a Loyal Legend, Ltd +106c Curitel Communications, Inc. + 1101 CDMA 2000 1xRTT USB modem (HX-550C) + 1102 Packet Service + 1103 Packet Service Diagnostic Serial Port (WDM) + 1104 Packet Service Diagnostic Serial Port (WDM) + 1105 Composite Device + 1106 Packet Service Diagnostic Serial Port (WDM) + 1301 Composite Device + 1302 Packet Service Diagnostic Serial Port (WDM) + 1303 Packet Service + 1304 Packet Service + 1401 Composite Device + 1402 Packet Service + 1403 Packet Service Diagnostic Serial Port (WDM) + 1501 Packet Service + 1502 Packet Service Diagnostic Serial Port (WDM) + 1503 Packet Service + 1601 Packet Service + 1602 Packet Service Diagnostic Serial Port (WDM) + 1603 Packet Service + 2101 AudioVox 8900 Cell Phone + 2102 Packet Service + 2103 Packet Service Diagnostic Serial Port (WDM) + 2301 Packet Service + 2302 Packet Service Diagnostic Serial Port (WDM) + 2303 Packet Service + 2401 Packet Service Diagnostic Serial Port (WDM) + 2402 Packet Service + 2403 Packet Service Diagnostic Serial Port (WDM) + 2501 Packet Service + 2502 Packet Service Diagnostic Serial Port (WDM) + 2503 Packet Service + 2601 Packet Service + 2602 Packet Service Diagnostic Serial Port (WDM) + 2603 Packet Service + 3701 Broadband Wireless modem + 3702 Pantech PX-500 + 3eb4 Packet Service Diagnostic Serial Port (WDM) + 4101 Packet Service Diagnostic Serial Port (WDM) + 4102 Packet Service + 4301 Composite Device + 4302 Packet Service Diagnostic Serial Port (WDM) + 4401 Composite Device + 4402 Packet Service + 4501 Packet Service + 4502 Packet Service Diagnostic Serial Port (WDM) + 4601 Composite Device + 4602 Packet Service Diagnostic Serial Port (WDM) + 5101 Packet Service + 5102 Packet Service Diagnostic Serial Port (WDM) + 5301 Packet Service Diagnostic Serial Port (WDM) + 5302 Packet Service + 5401 Packet Service + 5402 Packet Service Diagnostic Serial Port (WDM) + 5501 Packet Service Diagnostic Serial Port (WDM) + 5502 Packet Service + 5601 Packet Service Diagnostic Serial Port (WDM) + 5602 Packet Service + 7101 Composite Device + 7102 Packet Service + a000 Packet Service + a001 Packet Service Diagnostic Serial Port (WDM) + c100 Packet Service + c200 Packet Service + c500 Packet Service Diagnostic Serial Port (WDM) + e200 Packet Service +106d San Chieh Manufacturing, Ltd +106e ConectL +106f Money Controls +1076 GCT Semiconductor, Inc. + 0031 Bluetooth Device + 0032 Bluetooth Device +107d Arlec Australia, Ltd +107e Midoriya Electric Co., Ltd +107f KidzMouse, Inc. +1082 Shin-Etsukaken Co., Ltd +1083 Canon Electronics, Inc. +1084 Pantech Co., Ltd +108a Chloride Power Protection +108b Grand-tek Technology Co., Ltd +108c Robert Bosch GmbH +108e Lotes Co., Ltd. +1099 Surface Optics Corp. +109a DATASOFT Systems GmbH +109f eSOL Co., Ltd + 3163 Trigem Mobile SmartDisplay84 + 3164 Trigem Mobile SmartDisplay121 +10a0 Hirotech, Inc. +10a3 Mitsubishi Materials Corp. +10a9 SK Teletech Co., Ltd +10aa Cables To Go +10ab USI Co., Ltd + 1002 Bluetooth Device + 1003 BC02-EXT in DFU + 1005 Bluetooth Adptr + 1006 BC04-EXT in DFU + 10c5 Sony-Ericsson / Samsung DataCable +10ac Honeywell, Inc. +10ae Princeton Technology Corp. +10af Liebert Corp. + 0000 UPS + 0001 PowerSure PSA UPS + 0002 PowerSure PST UPS + 0003 PowerSure PSP UPS + 0004 PowerSure PSI UPS + 0005 UPStation GXT 2U UPS + 0006 UPStation GXT UPS + 0007 Nfinity Power Systems UPS + 0008 PowerSure Interactive UPS +10b5 Comodo (PLX?) + 9060 Test Board +10b8 DiBcom + 0bb8 DiBcom USB DVB-T reference design (MOD300) (cold) + 0bb9 DiBcom USB DVB-T reference design (MOD300) (warm) + 0bc6 DiBcom USB2.0 DVB-T reference design (MOD3000P) (cold) + 0bc7 DiBcom USB2.0 DVB-T reference design (MOD3000P) (warm) +10bb TM Technology, Inc. +10bc Dinging Technology Co., Ltd +10bd TMT Technology, Inc. + 1427 Ethernet +10bf SmartHome + 0001 SmartHome PowerLinc +10c4 Cygnal Integrated Products, Inc. + 0002 F32x USBXpress Device + 80a9 CP210x to UART Bridge Controller + 80ca ATM2400 Sensor Device + ea60 CP210x Composite Device +10c5 Sanei Electric, Inc. +10c6 Intec, Inc. +10cb Eratech +10cc GBM Connector Co., Ltd + 1101 MP3 Player +10cd Kycon, Inc. +10ce Silicon Labs + ea6a MobiData EDGE USB Modem +10cf Velleman Components, Inc. + 5500 8055 Experiment Interface Board (address=0) + 5501 8055 Experiment Interface Board (address=1) + 5502 8055 Experiment Interface Board (address=2) + 5503 8055 Experiment Interface Board (address=3) +10d1 Hottinger Baldwin Measurement + 0101 USB-Module for Spider8, CP32 + 0202 CP22 - Communication Processor + 0301 CP42 - Communication Processor +10d4 Man Boon Manufactory, Ltd +10d5 Uni Class Technology Co., Ltd +10d6 Actions Semiconductor Co., Ltd + 1000 MP3 Player + 1100 MPMan MP-Ki 128 MP3 Player/Recorder + 1101 D-Wave 2GB MP4 Player + 8888 ADFU Device + ff51 ADFU Device +10de Authenex, Inc. +10df In-Win Development, Inc. +10e0 Post-Op Video, Inc. +10e1 CablePlus, Ltd +10e2 Nada Electronics, Ltd +10ec Vast Technologies, Inc. +10f5 Turtle Beach + 0200 Audio Advantage Roadie +10fb Pictos Technologies, Inc. +10fd Anubis Electronics, Ltd + 804d Typhoon Webshot II Webcam [zc0301] + 8050 FlyCAM-USB 300 XP2 + de00 WinFast WalkieTV WDM Capture Driver. +1100 VirTouch, Ltd + 0001 VTPlayer VTP-1 Braille Mouse +1101 EasyPass Industrial Co., Ltd + 0001 FSK Electronics Super GSM Reader +1108 Brightcom Technologies, Ltd +1110 Analog Devices Canada, Ltd (Allied Telesyn) + 5c01 Huawei MT-882 Remote NDIS Network Device + 6489 ADSL ETH/USB RTR + 9000 ADSL LAN Adapter + 9001 ADSL Loader + 900f AT-AR215 DSL Modem + 9010 AT-AR215 DSL Modem + 9021 ADSL WAN Adapter + 9022 ADSL Loader + 9023 ADSL WAN Adapter + 9024 ADSL Loader + 9031 ADSL LAN Adapter + 9032 ADSL Loader +1111 Pandora International Ltd. + 8888 Evolution Device +1112 YM ELECTRIC CO., Ltd +1113 Medion AG +111e VSO Electric Co., Ltd +112e Master Hill Electric Wire and Cable Co., Ltd +112f Cellon International, Inc. +1130 Tenx Technology, Inc. + f211 USB audio headset +1131 Integrated System Solution Corp. + 1001 KY-BT100 Bluetooth Adapter + 1002 Bluetooth Device + 1003 Bluetooth Device + 1004 Bluetooth Device +1132 Toshiba Corp., Digital Media Equipment [hex] + 4331 PDR-M4/M5/M70 Digital Camera + 4332 PDR-M60 Digital Camera + 4333 PDR-M2300/PDR-M700 + 4334 PDR-M65 + 4335 PDR-M61 + 4337 PDR-M11 + 4338 PDR-M25 +113c Arin Tech Co., Ltd +113d Mapower Electronics Co., Ltd +1141 V One Multimedia, Pte., Ltd +1142 CyberScan Technologies, Inc. +1145 Japan Radio Company + 0001 AirH PHONE AH-J3001V/J3002V +1146 Shimane SANYO Electric Co., Ltd. +1147 Ever Great Electric Wire and Cable Co., Ltd +114b Sphairon Access Systems GmbH + 0110 Turbolink UB801R WLAN USB Adapter +114c Tinius Olsen Testing Machine Co., Inc. +114d Alpha Imaging Technology Corp. +115b Salix Technology Co., Ltd. +1162 Secugen Corp. +1163 DeLorme Publishing, Inc. + 0100 Earthmate GPS +1164 YUAN High-Tech Development Co., Ltd + 0300 ELSAVISION 460D + 0601 Analog TV Tuner + 0900 TigerBird BMP837 USB2.0 WDM Encoder + 0bc7 Digital TV Tuner +1165 Telson Electronics Co., Ltd +1166 Bantam Interactive Technologies +1167 Salient Systems Corp. +1168 BizConn International Corp. +116e Gigastorage Corp. +116f Silicon 10 Technology Corp. +1175 Shengyih Steel Mold Co., Ltd +117d Santa Electronic, Inc. +117e JNC, Inc. +1182 Venture Corp., Ltd +1183 Compaq Computer Corp. [hex] (Digital Dream ??) + 0001 DigitalDream l'espion XS + 19c7 ISDN TA + 4008 56k FaxModem + 504a PJB-100 Personal Jukebox +1184 Kyocera Elco Corp. +1188 Bloomberg L.P. +1189 Acer Communications & Multimedia + 0893 EP-1427X-2 Ethernet Adapter +118f You Yang Technology Co., Ltd +1190 Tripace +1191 Loyalty Founder Enterprise Co., Ltd +1196 Yankee Robotics, LLC + 0010 Trifid Camera without code + 0011 Trifid Camera +1197 Technoimagia Co., Ltd +1198 StarShine Technology Corp. +1199 Sierra Wireless, Inc. + 0019 AC595U + 0021 AC597E + 0110 Composite Device + 0112 CDMA 1xEVDO PC Card, AirCard 580 + 0120 AC595U + 0218 MC5720 Wireless Modem + 6467 MP Series Network Adapter + 6468 MP Series Network Adapter + 6469 MP Series Network Adapter + 6802 MC8755 Device + 6803 MC8765 Device + 6804 MC8755 Device + 6805 MC8765 Device + 6812 MC8775 Device + 6820 AC875 Device + 6832 MC8780 Device + 6833 MC8781 Device + 683a MC8785 Device + 6850 AirCard 880 Device + 6851 AirCard 881 Device + 6852 AirCard 880E Device + 6853 AirCard 881E Device + 6854 AirCard 885 Device + 6870 MC8780 Device + 6871 MC8781 Device +119a ZHAN QI Technology Co., Ltd +119b ruwido austria GmbH + 0400 Infrared Keyboard V2.01 +11a0 Chipcon AS + eb11 CC2400EB 2.0 ZigBee Sniffer +11a3 Technovas Co., Ltd + 8031 MP3 Player + 8032 MP3 Player +11aa GlobalMedia Group, LLC + 1518 iREZ K2 +11ab Exito Electronics Co., Ltd +11b0 ATECH FLASH TECHNOLOGY +11db Topfield Co., Ltd. + 1000 PVR + 1100 PVR +11e6 K.I. Technology Co. Ltd. +11f5 Siemens AG (?) + 0001 SX1 + 0003 Mobile phone USB cable + 0004 X75 +11f6 Prolific + 2001 Willcom WSIM +11f7 Alcatel (?) + 02df TD10 Mobile phone USB cable +1209 InterBiometrics + 1001 USB Hub + 1002 USB Relais + 1003 IBSecureCam-P + 1004 IBSecureCam-O + 1005 IBSecureCam-N +120e Hudson Soft Co., Ltd +121e Jungsoft Co., Ltd + 3403 Muzio JM250 Audio Player +1223 SKYCABLE ENTERPRISE. CO., LTD. +1230 Chipidea-Microelectronica, S.A. +1235 Novation EMS + 0001 ReMOTE Audio/XStation + 0002 Speedio + 4661 ReMOTE25 +1241 Belkin + 1111 Mouse + 1122 Typhoon Stream Optical Mouse USB+PS/2 + 1155 PS2/USB Browser Combo Mouse + 1166 MI-2150 Trust Mouse + 1177 F8E842-DL Mouse + 1503 Keyboard +124a AirVast + 4017 PC-Chips 802.11b Adapter +124b Nyko (Honey Bee) + 4d01 Airflo EX Joystick +125f A-DATA Technology Co., Ltd. +1264 Covidien Energy-based Devices +1267 Logic3 / SpectraVideo plc + 0103 G-720 Keyboard + 0201 A4Tech SWOP-3 Mouse + a001 JP260 PC Game Pad + c002 Wireless Optical Mouse +126c Aristocrat Technologies +126d Bel Stewart +126e Strobe Data, Inc. +126f TwinMOS + 1325 Mobile Disk + 2168 Mobile Disk III + a006 G240 +1275 Xaxero Marine Software Engineering, Ltd. + 0002 WeatherFax 2000 Demodulator + 0080 SkyEye Weather Satellite Receiver +1286 Marvell Semiconductor, Inc. + 8001 BLOB boot loader firmware +1292 Innomedia + 0258 Creative Labs VoIP Blaster +1293 Belkin Components [hex] + 0002 F5U002 Parallel Port [uss720] + 2101 104-key keyboard +1294 RISO KAGAKU CORP. +129b CyberTAN Technology + 1666 TG54USB +12a7 Trendchip Technologies Corp. +12ab Honey Bee Electronic International Ltd. +12ba Licensed by Sony Computer Entertainment America + 0200 Harmonix Guitar for PlayStation(R)3 + 0210 Harmonix Drum Kit for PlayStation(R)3 +12d1 Huawei Technologies Co., Ltd. + 1001 E620 USB Modem + 1003 E220 HSDPA Modem / E270 HSDPA/HSUPA Modem +12d2 LINE TECH INDUSTRIAL CO., LTD. +12d7 BETTER WIRE FACTORY CO., LTD. +12ef Tapwave, Inc. + 0100 Tapwave Handheld [Tapwave Zodiac] +12f5 Dynamic System Electronics Corp. +12f7 Memorex Products, Inc. + 1a00 TD Classic 003B + 1e23 TravelDrive 2007 Flash Drive +12fd AIN Comm. Technology Co., Ltd + 1001 AWU2000b 802.11b Stick +1307 Transcend Information, Inc. + 0163 512MB USB Flash Drive + 1169 TS2GJF210 JetFlash 210 2GB +1310 Roper + 0001 Class 1 Bluetooth Dongle +1312 ICS Electronics +131d Natural Point + 0155 TrackIR 3 Pro Head Tracker +132b Konica Minolta + 0000 Dimage A2 Camera + 0001 Minolta DiMAGE A2 (ptp) + 0003 Dimage Xg Camera + 0006 Dimage Z2 Camera + 0007 Minolta DiMAGE Z2 (PictBridge mode) + 0008 Dimage X21 Camera + 000a Dimage Scan Dual IV + 000b Dimage Z10 Camera + 000d Dimage X50 Camera [storage?] + 000f Dimage X50 Camera [p2p?] + 0010 Dimage G600 Camera + 0012 Dimage Scan Elite5400 2 + 0013 Dimage X31 Camera + 0015 Dimage G530 Camera + 0017 Dimage Z3 Camera + 0018 Minolta DiMAGE Z3 (PictBridge mode) + 0019 Dimage A200 Camera + 0021 Dimage Z5 Camera + 0022 Minolta DiMAGE Z5 (PictBridge mode) +1342 Mobility + 0200 EasiDock 200 Hub + 0201 EasiDock 200 Keyboard and Mouse Port + 0202 EasiDock 200 Serial Port + 0203 EasiDock 200 Printer Port + 0204 Ethernet + 0304 EasiDock Ethernet +1348 Katsuragawa Electric Co., Ltd. +134e Digby's Bitpile, Inc. DBA D Bit +136b STEC +1370 Swissbit + 6828 Victorinox Flash Drive +1371 Dick Smith Electronics + 9022 RT2573 + 9032 C-Net CWD-854 rev F +1376 Vimtron Electronics Co., Ltd. +1385 Netgear, Inc + 4250 WG111T + 4251 WG111T (no firmware) + 5f00 WPN111 RangeMax(TM) Wireless USB 2.0 Adapter + 5f01 WPN111 (no firmware) +138e Jungo LTD + 9000 Raisonance S.A. STM32 ARM evaluation board +1390 TOMTOM B.V. +1395 Sennheiser Communications + 3556 USB Headset +1398 Q-tec + 2103 USB 2.0 Storage Device +13ad Baltech + 9999 Card reader +13b0 PerkinElmer Optoelectronics + 000a Alesis Photon X25 MIDI Controller +13b1 Linksys + 000b WUSB11 v4.0 802.11b Adapter + 000d WUSB54G Wireless Adapter + 0011 WUSB54GP v4.0 802.11g Adapter + 0018 USB200M 10/100 Ethernet Adapter + 001a HU200TS Wireless Adapter + 0020 WUSB54GC 802.11g Adapter [ralink rt73] + 0023 WUSB54GR + 0024 WUSBF54G v1.1 802.11g Adapter w/ Wi-Fi Finder +13b3 Nippon Dics Co., Ltd. +13be Ricoh Printing Systems, Ltd. +13ca JyeTai Precision Industrial Co., Ltd. +13cf Wisair Ltd. +13d1 A-Max Technology Macao Commercial Offshore Co. Ltd. +13d2 Shark Multimedia + 0400 Pocket Ethernet [klsi] +13d3 IMC Networks + 3201 VisionDTV USB-Ter/HAMA USB DVB-T device cold + 3202 VisionDTV USB-Ter/HAMA USB DVB-T device warm + 3203 DTV-DVB UDST7020BDA DVB-S Box(DVBS for MCE2005) + 3204 DTV-DVB UDST7020BDA DVB-S Box(DVBS for MCE2005) + 3205 DNTV Live! Tiny USB2 BDA (No Remote) + 3206 DNTV Live! Tiny USB2 BDA (No Remote) + 3207 DTV-DVB UDST7020BDA DVB-S Box(DVBS for MCE2005) + 3208 DTV-DVB UDST7020BDA DVB-S Box(DVBS for MCE2005) + 3209 DTV-DVB UDST7022BDA DVB-S Box(Without HID) + 3211 DTV-DVB Hybrid Analog/Capture / Pinnacle PCTV 310e + 3212 DTV-DVB UDTT704C - DVBT/NTSC/PAL Driver(PCM4) + 3213 DTV-DVB UDTT704D - DVBT/NTSC/PAL Driver (PCM4) + 3214 DTV-DVB UDTT704F -(MiniCard) DVBT/NTSC/PAL Driver(Without HID) + 3215 DTV-DVB UDAT7240 - ATSC/NTSC/PAL Driver(PCM4) + 3216 DTV-DVB UDTT 7047-USB 2.0 DVB-T Driver + 3217 Digital-TV Receiver. + 3219 DTV-DVB UDTT7049 - DVB-T Driver(Without HID) + 3220 DTV-DVB UDTT 7047M-USB 2.0 DVB-T Driver + 3223 DNTV Live! Tiny USB2 BDA (No Remote) + 3224 DNTV Live! Tiny USB2 BDA (No Remote) + 3226 DigitalNow TinyTwin DVB-T Receiver + 3236 DTV-DVB UDTT 7047A-USB 2.0 DVB-T Driver + 3237 DTV-DVB UDTT 704J - dual DVB-T Driver + 3239 DTV-DVB UDTT704D - DVBT/NTSC/PAL Driver(Without HID) + 3240 DTV-DVB UDXTTM6010 - A/D Driver(Without HID) + 3241 DTV-DVB UDXTTM6010 - A/D Driver(Without HID) + 3242 DTV-DVB UDAT7240LP - ATSC/NTSC/PAL Driver(Without HID) + 3243 DTV-DVB UDXTTM6010 - A/D Driver(Without HID) + 3244 DTV-DVB UDTT 7047Z-USB 2.0 DVB-T Driver + 3247 802.11 n/g/b Wireless LAN Adapter + 7020 DTV-DVB UDST7020BDA DVB-S Box(DVBS for MCE2005) + 7022 DTV-DVB UDST7022BDA DVB-S Box(Without HID) +13dc ALEREON, INC. +13dd i.Tech Dynamic Limited +13e1 Kaibo Wire & Cable (Shenzhen) Co., Ltd. +13e5 Rane + 0001 SL-1 +13e6 TechnoScope Co., Ltd. +13fd Initio Corporation +13fe Kingston Technology Company Inc. + 1a00 512MB/1GB Flash Drive + 1a23 512MB Flash Drive + 1d00 DataTraveler 2.0 1GB/4GB Flash Drive / Patriot Xporter 4GB Flash Drive + 1f00 DataTraveler 2.0 4GB Flash Drive +1400 Axxion Group Corp. +1402 Bowe Bell & Howell +1403 Sitronix + 0001 Digital Photo Frame +140e Telechips, Inc. +1410 Novatel Wireless + 1110 Merlin S620 + 1120 Merlin EX720 + 1130 Merlin S720 + 1400 Merlin U740 + 2110 Ovation U720/MCD3000 + 4100 U727 +1415 Nam Tai E&E Products Ltd. or OmniVision Technologies, Inc. + 0000 Sony SingStar USBMIC + 2000 Sony Playstation Eye +1419 ABILITY ENTERPRISE CO., LTD. +1429 Vega Technologies Industrial (Austria) Co. +1430 RedOctane +1431 Pertech Resources, Inc. +1435 Wistron NeWeb + 0711 UR055G + 0826 AR5523 + 0827 AR5523 (no firmware) + 0828 AR5523 + 0829 AR5523 (no firmware) +1436 Denali Software, Inc. +143c Altek Corporation +1453 Radio Shack + 4026 26-183 Serial Cable +1456 Extending Wire & Cable Co., Ltd. +1457 First International Computer, Inc. + 5117 OpenMoko Neo1973 kernel usbnet (g_ether, CDC Ethernet) mode + 5118 OpenMoko Neo1973 Debug board (V2+) + 5119 OpenMoko Neo1973 u-boot cdc_acm serial port + 5120 OpenMoko Neo1973 u-boot usbtty generic serial + 5121 OpenMoko Neo1973 kernel mass storage (g_storage) mode + 5122 OpenMoko Neo1973 kernel cdc_ether USB network + 5123 OpenMoko Neo1973 internal USB CSR4 module + 5124 OpenMoko Neo1973 Bluetooth Device ID service +1461 Staccato Communications +1462 Micro Star International + 5512 MegaStick-1 Flash Stick +1472 Huawei-3Com + 0009 Aolynk WUB320g +147a Formosa Industrial Computing, Inc. + e015 eHome Infrared Receiver + e016 eHome Infrared Receiver +147f Hama GmbH & Co., KG +1484 Elsa AG [hex] + 1746 Ecomo 19H99 Monitor + 7616 Elsa Hub +1485 Silicom + 0001 U2E + 0002 Psion Gold Port Ethernet +1487 DSP Group, Ltd. +148e EVATRONIX SA +148f Ralink Technology, Corp. + 1706 RT2500USB Wireless Adapter + 2570 802.11g WiFi + 2573 RT2501USB Wireless Adapter + 2671 RT2601USB Wireless Adapter + 9020 RT2500USB Wireless Adapter + 9021 RT2501USB Wireless Adapter +1497 Panstrong Company Ltd. +149a Imagination Technologies + 2107 DBX1 DSP core +14aa AVerMedia (again) or C&E + 0001 Avermedia AverTV DVBT USB1.1 (cold) + 0002 Avermedia AverTV DVBT USB1.1 (warm) + 0201 AVermedia/Yakumo/Hama/Typhoon DVB-T USB2.0 (cold) + 0221 AVermedia DVBT Tuner Dongle + 0301 AVermedia/Yakumo/Hama/Typhoon DVB-T USB2.0 (warm) +14ad CTK Corporation +14ae Printronix Inc. +14af ATP Electronics Inc. +14b0 StarTech.com Ltd. +14b2 Atheros Communications Inc + 3a93 USB WLAN Device + 3c02 C54RU WLAN + 3c22 C54RU +14c0 Rockwell Automation, Inc. +14c2 Gemlight Computer, Ltd + 0250 Storage Adapter V2 + 0350 Storage Adapter V2 +14cd Super Top + 6600 USB 2.0 IDE DEVICE +14d8 JAMER INDUSTRIES CO., LTD. +14dd Raritan Computer, Inc. +14e5 SAIN Information & Communications Co., Ltd. +14ea Planex Communications + ab10 GW-US54GZ + ab11 GU-1000T + ab13 GW-US54Mini +14ed Shure Inc. +1500 Ellisys +1501 Pine-Tum Enterprise Co., Ltd. +1513 Hypercom +1516 CompUSA + 8628 128M Pen Drive +1518 Cheshire Engineering Corp. + 0001 HDReye High Dynamic Range Camera + 0002 HDReye (before firmware loads) +1520 Bitwire Corp. +1524 ENE Technology Inc + 6680 UTS 6680 +1527 Silicon Portals + 0200 YAP Phone (no firmware) + 0201 YAP Phone +1529 UBIQUAM Co., Ltd. + 3100 CDMA 1xRTT USB Modem (U-100/105/200/300/520) +152d JMicron Technology Corp. / JMicron USA Technology Corp. + 2338 JM20337 Hi-Speed USB to SATA & PATA Combo Bridge +152e LG (HLDS) + e001 GSA-5120D DVD-RW +1532 Razer USA, Ltd + 0001 RZ01-020300 Optical Mouse [Diamondback] + 0003 Krait Mouse + 0007 DeathAdder Mouse + 0102 Tarantula Keyboard +1546 U-Blox AG +154b PNY + 0010 USB 2.0 Flash Drive +154d ConnectCounty Holdings Berhad +154e D&M Holdings, Inc. (Denon/Marantz) + 3000 Marantz RC9001 Remote Control +1554 Prolink Microsystems Corp. +1557 OQO + 0002 model 01 WiFi interface + 0003 model 01 Bluetooth interface + 7720 model 01+ Ethernet + 8150 model 01 Ethernet interface +1568 Sunf Pu Technology Co., Ltd +156f Quantum Corporation +1570 ALLTOP TECHNOLOGY CO., LTD. +157b Ketron SRL +157e TRENDnet + 3006 TEW-444UB EU + 3007 TEW-444UB EU (no firmware) + 300a TEW-429UB 802.11g Adapter with HotSpot Detector + 300b TEW-429UB + 300d TEW-429UB C1 + 3204 ALL0298 v2 + 3205 AR5523 + 3206 AR5523 (no firmware) +1582 Fiberline + 6003 WL-430U +1587 SMA Technologie AG +158d Oakley Inc. +1598 Kunshan Guoji Electronics Co., Ltd. +15a2 Freescale Semiconductor, Inc. +15a8 Teams Power Limited +15aa Gearway Electronics (Dong Guan) Co., Ltd. +15ba Olimex Ltd. + 0003 OpenOCD JTAG + 0004 OpenOCD JTAG TINY +15c2 SoundGraph Inc. + ffdc iMON PAD Remote Controller +15c6 Laboratoires MXM + 1000 DigistimSP (cold) + 1001 DigistimSP (warm) + 1002 DigimapSP USB (cold) + 1003 DigimapSP USB (warm) +15c9 D-Box Technologies +15ca Textech International Ltd. + 00c3 Mini Optical Mouse +15d5 Coulomb Electronics Ltd. +15dc Hynix Semiconductor Inc. +15e0 Seong Ji Industrial Co., Ltd. +15e1 RSA + 2007 RSA SecurID (R) Authenticator +15e8 SohoWare + 9100 NUB100 Ethernet [pegasus] + 9110 10/100 USB Ethernet +15e9 Pacific Digital Corp. + 04ce MemoryFrame MF-570 + 1968 MemoryFrame MF-570 + 1969 Digital Frame +15ec Belcarra Technologies Corp. +15f4 HanfTek + 0001 HanfTek UMT-010 USB2.0 DVB-T (cold) + 0025 HanfTek UMT-010 USB2.0 DVB-T (warm) +1604 Tascam + 8000 US-428 Audio/Midi Controller (without fw) + 8001 US-428 Audio/Midi Controller + 8004 US-224 Audio/Midi Controller (without fw) + 8005 US-224 Audio/Midi Controller + 8006 US-122 Audio/Midi Interface (without fw) + 8007 US-122 Audio/Midi Interface +1606 Umax [hex] + 0002 Astra 1236U Scanner + 0010 Astra 1220U + 0030 Astra 2000U + 0050 Scanner + 0060 Astra 3400U + 0130 Astra 2100U + 0160 Astra 5400U + 0230 Astra 2200/2200SU + 0350 Astra 4800/4850 Scanner + 1030 Astra 4000U + 1220 Genesys Logic Scanner Controller NT5.0 + 2010 AstraCam Digital Camera + 2020 AstraCam 1000 + 2030 AstraCam 1800 Digital Camera +1608 Inside Out Networks [hex] + 0001 EdgePort/4 Serial Port + 0002 Edgeport/8 + 0003 Rapidport/4 + 0004 Edgeport/4 + 0005 Edgeport/2 + 0006 Edgeport/4i + 0007 Edgeport/2i + 0008 Edgeport/8 + 000c Edgeport/421 + 000d Edgeport/21 + 000e Edgeport/4 + 000f Edgeport/8 + 0010 Edgeport/2 + 0011 Edgeport/4 + 0012 Edgeport/416 + 0014 Edgeport/8i + 0018 Edgeport/412 + 0019 Edgeport/412 + 001a Edgeport/2+2i + 0101 Edgeport/4 + 0105 Edgeport/2 + 0106 Edgeport/4i + 0107 Edgeport/2i + 010c Edgeport/421 + 010d Edgeport/21 + 0110 Edgeport/2 + 0111 Edgeport/4 + 0112 Edgeport/416 + 0114 Edgeport/8i + 0201 Edgeport/4 + 0203 Rapidport/4 + 0204 Edgeport/4 + 0205 Edgeport/2 + 0206 Edgeport/4i + 0207 Edgeport/2i + 020c Edgeport/421 + 020d Edgeport/21 + 020e Edgeport/4 + 020f Edgeport/8 + 0210 Edgeport/2 + 0211 Edgeport/4 + 0212 Edgeport/416 + 0214 Edgeport/8i + 0215 Edgeport/1 + 0216 EPOS/44 + 0217 Edgeport/42 + 021a Edgeport/2+2i + 021b Edgeport/2c + 021c Edgeport/221c + 021d Edgeport/22c + 021e Edgeport/21c + 021f Edgeport/62 + 0240 Edgeport/1 + 0241 Edgeport/1i + 0242 Edgeport/4s + 0243 Edgeport/8s + 0244 Edgeport/8 + 0245 Edgeport/22c + 0301 Watchport/P + 0302 Watchport/M + 0303 Watchport/W + 0304 Watchport/T + 0305 Watchport/H + 0306 Watchport/E + 0307 Watchport/L + 0308 Watchport/R + 0309 Watchport/A + 030a Watchport/D + 030b Watchport/D + 030c Power Management Port + 030e Power Management Port + 030f Watchport/G + 0310 Watchport/Tc + 0311 Watchport/Hc + 1403 MultiTech Systems MT4X56 Modem + 1a17 Agilent Technologies (E6473) +1619 L & K Precision Technology Co., Ltd. +1621 Wionics Research +1628 Stonestreet One, Inc. +162a Airgo Networks Inc. +162f WiQuest Communications, Inc. +1631 Good Way Technology + 6200 GWUSB2E + c019 RT2573 +1645 Entrega [hex] + 0001 1S Serial Port + 0002 2S Serial Port + 0003 1S25 Serial Port + 0004 4S Serial Port + 0005 E45 Ethernet [klsi] + 0006 Parallel Port + 0007 U1-SC25 SCSI + 0008 Ethernet + 0016 Bi-directional to Parallel Printer Converter + 0080 1 port to Serial Converter + 0081 1 port to Serial Converter + 0093 1S9 Serial Port + 8000 EZ-USB + 8001 1 port to Serial + 8002 2x Serial Port + 8003 1 port to Serial + 8004 2U4S serial/usb hub + 8005 Ethernet + 8080 1 port to Serial + 8081 1 port to Serial + 8093 PortGear Serial Port +164a ChipX +1657 Struck Innovative Systeme GmbH + 3150 SIS3150 USB2.0 to VME interface +1660 Creatix Polymedia GmbH +1668 Actiontec Electronics, Inc. [hex] + 0009 Gateway + 0333 Modem + 0358 InternetPhoneWizard + 0405 Gateway + 0408 Prism2.5 802.11b Adapter + 0413 Gateway + 0421 Prism2.5 802.11b Adapter + 0441 IBM Integrated Bluetooth II + 0500 BTM200B BlueTooth Adapter + 1050 802.11g Wireless Mini adapter + 1441 IBM Integrated Bluetooth II + 2441 BMDC-2 IBM Bluetooth III w.56k + 3441 IBM Integrated Bluetooth III + 6010 Gateway + 6097 802.11b Wireless Adapter + 6106 ROPEX FreeLan 802.11b + 7605 UAT1 Wireless Ethernet Adapter +1669 PiKRON Ltd. [hex] + 1001 uLan2USB Converter - PS1 protocol +1679 Total Phase + 2001 Beagle USB 12 Protocol Analyzer +1682 Maxwise Production Enterprise Ltd. +1684 Godspeed Computer Corp. +1686 ZOOM Corporation + 0045 H4 Digital Recorder +1687 Kingmax Digital Inc. +168c Atheros Communications + 0001 AR5523 + 0002 AR5523 (no firmware) +1690 Askey Computer Corp. [hex] + 0101 Creative Modem Blaster DE5670 + 0102 CDC Modem Board + 0103 Askey 1456 VQE-R3 Modem [conexant] + 0104 HCF V90 Data Fax RTAD Modem + 0107 HCF V.90 Data,Fax,RTAD Modem + 0109 Askey MagicXpress V.90 Pocket Modem [conexant] + 0203 Voyager ADSL Modem Loader + 0204 Voyager ADSL Modem + 0205 DSL Modem + 0206 GlobeSpan ADSL WAN Modem + 0208 DSL Modem + 0209 Voyager 100 ADSL Modem + 0211 Globespan Virata ADSL LAN Modem + 0212 DSL Modem + 0213 HM121d DSL Modem + 0214 HM121d DSL Modem + 0215 Voyager 105 ADSL Modem + 0701 WLAN + 0710 SMCWUSBT-G + 0711 SMCWUSBT-G (no firmware) + 0712 AR5523 + 0713 AR5523 (no firmware) + 0715 Voyager 1055 Laptop Adapter + 0722 RT2573 + 0726 Wi-Fi Wireless LAN Adapter + 0901 Voyager 205 ADSL Router +1696 Hitachi Video and Information System, Inc. +1697 VTec Test, Inc. +16a5 Shenzhen Zhengerya Cable Co., Ltd. +16ab Global Sun Technology + 7801 AR5523 + 7802 AR5523 (no firmware) + 7811 AR5523 + 7812 AR5523 (no firmware) +16ac Dongguan ChingLung Wire & Cable Co., Ltd. +16c0 VOTI + 03e8 free for internal lab use 1000 + 03e9 free for internal lab use 1001 + 03ea free for internal lab use 1002 + 03eb free for internal lab use 1003 + 03ec free for internal lab use 1004 + 03ed free for internal lab use 1005 + 03ee free for internal lab use 1006 + 03ef free for internal lab use 1007 + 03f0 free for internal lab use 1008 + 03f1 free for internal lab use 1009 + 076b OpenPCD 13.56MHz RFID Reader + 076c OpenPICC 13.56MHz RFID Simulator (native) + 08ac OpenBeacon USB stick +16cc silex technology, Inc. +16d3 Frontline Test Equipment, Inc. +16d5 AnyDATA Corporation + 6501 CDMA 2000 1xRTT/EV-DO USB Modem +16d8 CMOTECH Co., Ltd. + 5141 CMOTECH CDMA Technologies USB modem + 5543 CDMA 2000 1xRTT/1xEVDO USB modem + 6280 CMOTECH CDMA Technologies USB modem +16df King Billion Electronics Co., Ltd. +16f5 Futurelogic Inc. +1706 BlueView Technologies, Inc. +1707 ARTIMI +170b Swissonic + 0011 MIDI-USB 1x1 +170d Avnera +1733 Cellink Technology Co., Ltd + 0101 RF Wireless Optical Mouse OP-701 +1736 CANON IMAGING SYSTEM TECHNOLOGIES INC. +1737 Linksys + 0039 USB1000 +1740 Senao + 2000 NUB-8301 +1743 General Atomics +174c ASMedia Technology Inc. +174f Syntek + 5a35 1.3MPixel Web Cam - Asus G1s + 6a31 Web Cam - Asus A8J, F3S, F5R, VX2S, V1S + 6a33 Web Cam - Asus F3SA, F9J, F9S + 6a51 2.0MPixel Web Cam - Asus Z96J, Z96S, S96S + 6a54 Web Cam + 6d51 2.0Mpixel Web Cam - Eurocom D900C + 8a12 0.3MPixel Web Cam - Packard Bell MX37-T-003 + a311 1.3MPixel Web Cam - Asus A3A, A6J, A6K, A6M, A6R, A6T, A6V, A7T, A7sv, A7U + a312 1.3MPixel Web Cam + a821 Web Cam - Packard Bell BU45, PB Easynote MX66-208W + aa11 Web Cam +1759 LucidPort Technology, Inc. +1772 System Level Solutions, Inc. +1781 Multiple Vendors + 083e MetaGeek Wi-Spy + 0938 Iguanaworks USB IR Transceiver +1782 Spreadtrum Communications Inc. +1784 TopSeed Technology Corp. +1788 ShenZhen Litkconn Technology Co., Ltd. +1796 Printrex, Inc. +1797 JALCO CO., LTD. +17a5 Advanced Connection Technology Inc. +17a7 MICOMSOFT CO., LTD. +17b3 Grey Innovation + 0004 Linux-USB Midi Gadget +17c3 Singim International Corp. +17cc Native Instruments + 0815 Audio Kontrol 1 + 1940 RigKontrol3 + 1969 RigKontrol2 + 1978 Audio 8 DJ + 4711 Kore Controller + 4712 Kore Controller 2 +17cf Hip Hing Cable & Plug Mfy. Ltd. +17d0 Sanford L.P. +17d3 Korea Techtron Co., Ltd. +17e9 Newnham Research + 0051 USB VGA Adaptor +17eb Cornice, Inc. +17ef Lenovo + 3815 ChipsBnk 2GB USB Stick +17f5 K.K. Rocky +17f6 Unicomp, Inc +1822 Twinhan + 3201 VisionDTV USB-Ter/HAMA USB DVB-T device cold + 3202 VisionDTV USB-Ter/HAMA USB DVB-T device warm +1831 Gwo Jinn Industries Co., Ltd. +1832 Huizhou Shenghua Industrial Co., Ltd. +1854 Memory Devices Ltd. +185b Compro + d000 Compro Videomate DVB-U2000 - DVB-T USB cold + d001 Compro Videomate DVB-U2000 - DVB-T USB warm +1861 Tech Technology Industrial Company +1862 Teridian Semiconductor Corp. +1871 Aveo Technology Corp. +1894 Topseed + 5632 Atek Tote Remote + 5641 TSAM-004 Presentation Remote +1897 Evertop Wire Cable Co. +18b6 Mikkon Technology Limited +18b7 Zotek Electronic Co., Ltd. +18c5 AMIT + 0002 CG-WLUSB2GO +18d5 Starline International Group Limited +18d9 Kaba + 01xy LEGIC advant desktop reader +18e3 Fitipower Integrated Technology Inc +18e8 Qcom + 6196 RT2573 + 6229 RT2573 +18ea Matrox Graphics, Inc. + 0002 DualHead2Go [Analog Edition] + 0004 TripleHead2Go [Digital Edition] +18fd FineArch Inc. +190d Motorola GSG +1914 Alco Digital Devices Limited +1915 Linksys + 2233 WUSB11 v2.8 802.11b Adapter + 2234 WUSB54G 802.11g Adapter +192f Avago Technologies, Pte. +1930 Shenzhen Xianhe Technology Co., Ltd. +1931 Ningbo Broad Telecommunication Co., Ltd. +1949 Lab126 +1951 Hyperstone AG +1953 Ironkey Inc. +1954 Radiient Technologies +195d Itron Technology iONE + 7002 Libra-Q11 IR remote + 7006 Libra-Q26 / 1.0 Remote + 7777 Scorpius wireless keyboard +1967 CASIO HITACHI Mobile Communications Co., Ltd. +196b Wispro Technology Inc. +1970 Dane-Elec Corp. USA +1975 Dongguan Guneetal Wire & Cable Co., Ltd. +1976 Chipsbrand Microelectronics (HK) Co., Ltd. +1977 T-Logic + 0111 TL203 MP3 Player and Voice Recorder +1989 Nuconn Technology Corp. +198f Beceem Communications Inc. +1990 Acron Precision Industrial Co., Ltd. +1995 Trillium Technology Pty. Ltd. + 3202 REC-ADPT-USB (recorder) + 3203 REC-A-ADPT-USB (recorder) +199e The Imaging Source Europe GmbH +199f Benica Corporation +19a8 Biforst Technology Inc. +19af S Life + 6611 Celestia VoIP Phone +19b5 B & W Group +19b6 Infotech Logistic, LLC +19ca Mindtribe + 0001 Sandio 3D HID Mouse +19cf Parrot SA +19e1 WeiDuan Electronic Accessory (S.Z.) Co., Ltd. +19e8 Industrial Technology Research Institute +19ef Pak Heng Technology (Shenzhen) Co., Ltd. +19ff Best Buy + 0201 Rocketfish Wireless 2.4G Laser Mouse +1a08 Bellwood International, Inc. +1a0a USB-IF non-workshop + badd USB OTG Compliance test device +1a12 KES Co., Ltd. +1a25 Amphenol East Asia Ltd. +1a2a Seagate Branded Solutions +1a36 Biwin Technology Ltd. +1a40 TERMINUS TECHNOLOGY INC. +1a41 Action Electronics Co., Ltd. +1a4a Silicon Image +1a4b SafeBoot International B.V. +1a61 Abbott Diabetes Care +1a6a Spansion Inc. +1a6d SamYoung Electronics Co., Ltd +1a6e Global Unichip Corp. +1a6f Sagem Orga GmbH +1a79 Bayer Health Care LLC +1a7b Lumberg Connect GmbH & Co. KG +1a89 Dynalith Systems Co., Ltd. +1a8b SGS Taiwan Ltd. +1a98 Leica Camera AG +1aa4 Data Drive Thru, Inc. +1aa5 UBeacon Technologies, Inc. +1aa6 eFortune Technology Corp. +1acb Salcomp Plc +1ad1 Desay Wire Co., Ltd. +1ae4 ic-design Reinhard Gottinger GmbH +1aed High Top Precision Electronic Co., Ltd. +1aef Conntech Electronic (Suzhou) Corporation +1b04 Meilhaus Electronic GmBH + 0630 ME-630 + 0940 ME-94 + 0950 ME-95 + 0960 ME-96 + 1000 ME-1000 + 100a ME-1000 + 100b ME-1000 + 1400 ME-1400 + 140a ME-1400A + 140b ME-1400B + 140c ME-1400C + 140d ME-1400D + 140e ME-1400E + 14ea ME-1400EA + 14eb ME-1400EB + 1604 ME-1600/4U + 1608 ME-1600/8U + 160c ME-1600/12U + 160f ME-1600/16U + 168f ME-1600/16U8I + 4610 ME-4610 + 4650 ME-4650 + 4660 ME-4660 + 4661 ME-4660I + 4662 ME-4660 + 4663 ME-4660I + 4670 ME-4670 + 4671 ME-4670I + 4672 ME-4670S + 4673 ME-4670IS + 4680 ME-4680 + 4681 ME-4680I + 4682 ME-4680S + 4683 ME-4680IS + 6004 ME-6000/4 + 6008 ME-6000/8 + 600f ME-6000/16 + 6014 ME-6000I/4 + 6018 ME-6000I/8 + 601f ME-6000I/16 + 6034 ME-6000ISLE/4 + 6038 ME-6000ISLE/8 + 603f ME-6000ISLE/16 + 6044 ME-6000/4/DIO + 6048 ME-6000/8/DIO + 604f ME-6000/16/DIO + 6054 ME-6000I/4/DIO + 6058 ME-6000I/8/DIO + 605f ME-6000I/16/DIO + 6074 ME-6000ISLE/4/DIO + 6078 ME-6000ISLE/8/DIO + 607f ME-6000ISLE/16/DIO + 6104 ME-6100/4 + 6108 ME-6100/8 + 610f ME-6100/16 + 6114 ME-6100I/4 + 6118 ME-6100I/8 + 611f ME-6100I/16 + 6134 ME-6100ISLE/4 + 6138 ME-6100ISLE/8 + 613f ME-6100ISLE/16 + 6144 ME-6100/4/DIO + 6148 ME-6100/8/DIO + 614f ME-6100/16/DIO + 6154 ME-6100I/4/DIO + 6158 ME-6100I/8/DIO + 615f ME-6100I/16/DIO + 6174 ME-6100ISLE/4/DIO + 6178 ME-6100ISLE/8/DIO + 617f ME-6100ISLE/16/DIO + 6259 ME-6200I/9/DIO + 6359 ME-6300I/9/DIO + 810a ME-8100A + 810b ME-8100B + 820a ME-8200A + 820b ME-8200B +1b20 MStar Semiconductor, Inc. +1b22 WiLinx Corp. +1b26 Cellex Power Products, Inc. +1b27 Current Electronics Inc. +1b28 NAVIsis Inc. +1b32 Ugobe Life Forms, Inc. +1b36 ViXS Systems, Inc. +1b3f Generalplus Technology Inc. +1b47 Energizer Holdings, Inc. + 0001 CHUSB Duo Charger (NiMH AA/AAA USB smart charger) +1b48 Plastron Precision Co., Ltd. +1b59 K.S. Terminals Inc. +1b5a Chao Zhou Kai Yuan Electric Co., Ltd. +1b65 The Hong Kong Standards and Testing Centre Ltd. +1b72 ATERGI TECHNOLOGY CO., LTD. +1b76 Legend Silicon Corp. +1b86 Dongguan Guanshang Electronics Co., Ltd. +1b88 ShenMing Electron (Dong Guan) Co., Ltd. +1b8c Altium Limited +1b8d e-MOVE Technology Co., Ltd. +1b8e Amlogic, Inc. +1b8f MA LABS, Inc. +1b98 YMax Communications Corp. +1b99 Shenzhen Yuanchuan Electronic +1ba1 JINQ CHERN ENTERPRISE CO., LTD. +1ba2 Lite Metals & Plastic (Shenzhen) Co., Ltd. +1ba4 Ember Corporation + 0001 InSight USB Link +1ba8 China Telecommunication Technology Labs +1bad Harmonix Music + 0002 Harmonix Guitar for Xbox 360 + 0003 Harmonix Drum Kit for Xbox 360 +1bbb T & A Mobile Phones +1bc4 Ford Motor Co. +1bc5 AVIXE Technology (China) Ltd. +1bce Contac Cable Industrial Limited +1bcf Sunplus Innovation Technology Inc. +1bd0 Hangzhou Riyue Electronic Co., Ltd. +1bde P-TWO INDUSTRIES, INC. +1bef Shenzhen Tongyuan Network-Communication Cables Co., Ltd +1bf0 RealVision Inc. +1bf5 Extranet Systems Inc. +1bf6 Orient Semiconductor Electronics, Ltd. +1bfd TouchPack + 1688 Resistive Touch Screen +1c02 Kreton Corporation +1c04 QNAP System Inc. +1c0d Relm Wireless +1c10 Lanterra Industrial Co., Ltd. +1c13 ALECTRONIC LIMITED +1c1a Datel Electronics Ltd. +1c1b Volkswagen of America, Inc. +1c1f Goldvish S.A. +1c20 Fuji Electric Device Technology Co., Ltd. +1c21 ADDMM LLC +1c22 ZHONGSHAN CHIANG YU ELECTRIC CO., LTD. +1c26 Shanghai Haiying Electronics Co., Ltd. +1c27 HuiYang D & S Cable Co., Ltd. +1c31 LS Cable Ltd. +1c37 Authorizer Technologies, Inc. +1c3d NONIN MEDICAL INC. +1c3e Wep Peripherals +1c49 Cherng Weei Technology Corp. +1c6b Philips & Lite-ON Digital Solutions Corporation +1c6c Skydigital Inc. +1c77 Kaetat Industrial Co., Ltd. +1c78 Datascope Corp. +1c79 Unigen Corporation +1c7a LighTuning Technology Inc. +1c7b LUXSHARE PRECISION INDUSTRY (SHENZHEN) CO., LTD. +1c87 2N TELEKOMUNIKACE a.s. +1c88 Somagic, Inc. +1c89 HONGKONG WEIDIDA ELECTRON LIMITED +1c8e ASTRON INTERNATIONAL CORP. +1c98 ALPINE ELECTRONICS, INC. +1ca0 ACCARIO Inc. +1cb3 Aces Electronic Co., Ltd. +1cb4 OPEX CORPORATION +1cbe Luminary Micro Inc. +1cbf FORTAT SKYMARK INDUSTRIAL COMPANY +1cc0 PlantSense +1cca NextWave Broadband Inc. +1ccd Bodatong Technology (Shenzhen) Co., Ltd. +1cd4 adp corporation +1cd5 Firecomms Ltd. +1cd6 Antonio Precise Products Manufactory Ltd. +1cde Telecommunications Technology Association (TTA) +1cdf WonTen Technology Co., Ltd. +1ce0 EDIMAX TECHNOLOGY CO., LTD. +1ce1 Amphenol KAE +1cfc ANDES TECHNOLOGY CORPORATION +1cfd Flextronics Digital Design Japan, LTD. +1d08 NINGBO HENTEK DRAGON ELECTRONICS CO., LTD. +1d09 TechFaith Wireless Technology Limited +1d0a Johnson Controls, Inc. The Automotive Business Unit +1d0b HAN HUA CABLE & WIRE TECHNOLOGY (J.X.) CO., LTD. +1d14 ALPHA-SAT TECHNOLOGY LIMITED +1d1f Diostech Co., Ltd. +1d20 SAMTACK INC. +1d50 OpenMoko, Inc. +1d5b Smartronix, Inc. +1d6b Linux Foundation + 0001 1.1 root hub + 0002 2.0 root hub + 0003 3.0 root hub +1ebb NuCORE Technology, Inc. +2001 D-Link Corp. [hex] + 0001 DWL-120 WIRELESS ADAPTER + 0201 DHN-120 10Mb Home Phoneline Adapter + 1a00 10/100 Ethernet + 200c 10/100 Ethernet + 3200 DWL-120 802.11b (Atmel RFMD503A) [usbvnetr] + 3500 Elitegroup Computer Systems WLAN card WL-162 + 3700 DWL-122 802.11b + 3701 DWL-G120 Spinnaker 802.11b + 3702 DWL-120 rev F + 3703 DWL-122 802.11b + 3704 DWL-G122 802.11g rev. A2 + 3705 AirPlus G DWL-G120 Wireless Adapter(rev.C) + 3761 IEEE 802.11g USB2.0 Wireless Network Adapter-PN + 3a00 DWL-AG132 + 3a01 DWL-AG132 (no firmware) + 3a02 DWL-G132 + 3a03 DWL-G132 (no firmware) + 3a04 DWL-AG122 + 3a05 DWL-AG122 (no firmware) + 3a80 AirPlus Xtreme G DWL-G132 Wireless Adapter + 3a81 predator Bootloader Download + 3a82 AirPremier AG DWL-AG132 Wireless Adapter + 3a83 predator Bootloader Download + 3b00 AirPlus DWL-120+ Wireless Adapter + 3b01 WLAN Boot Device + 3c00 DWL-G122 802.11g rev. B1 [ralink] + 3c01 AirPlus AG DWL-AG122 Wireless Adapter + 3c02 AirPlus G DWL-G122 Wireless Adapter + 3c05 DUB-E100 Fast Ethernet [asix] + 4000 DSB-650C Ethernet [klsi] + 4001 DSB-650TX Ethernet [pegasus] + 4002 DSB-650TX Ethernet [pegasus] + 4003 DSB-650TX-PNA Ethernet [pegasus] + 400b 10/100 Ethernet + 4102 10/100 Ethernet + 5100 DSL-200 ADSL ATM Modem + 5102 DSL-200 ADSL Loader + 5b00 Remote NDIS Network Device + 9414 Cable Modem + 9b00 Broadband Cable Modem Remote NDIS Device + abc1 DSB-650 Ethernet [pegasus] + f013 DLink 7 port USB2.0 Hub + f10d Accent Communications Modem + f110 DUB-AV300 A/V Capture + f111 DBT-122 Bluetooth adapter + f112 DUB-T210 Audio Device + f116 Formosa 2 + f117 Formosa 3 + f118 Formosa 4 +2019 PLANEX + 3220 GW-US11S WLAN + 5303 GW-US54GXS + ab01 GW-US54HP + ab50 GW-US54Mini2 + c002 GW-US54SG + c007 GW-US54GZL + ed02 GW-USMM +2040 Hauppauge + 6502 WinTV HVR-900 + 6503 WinTV HVR-930 + 7050 Nova-T Stick + 9300 WinTV NOVA-T USB2 (cold) + 9301 WinTV NOVA-T USB2 (warm) +2101 ActionStar + 0201 SIIG 4-to-2 Printer Switch +2162 Creative (?) + 2031 Network Blaster Wireless Adapter + 500c DE5771 Modem Blaster + 8001 Broadxent BritePort DSL Bridge 8010U +2222 MacAlly + 0004 iWebKey Keyboard + 4050 AirStick joystick +2233 RadioShack Corporation + 6323 USB Electronic Scale +22b8 Motorola PCS + 0001 Wally 2.2 chipset + 0002 Wally 2.4 chipset + 0005 V.60c/V.60i GSM Phone + 0850 Bluetooth Device + 1001 Patriot 1.0 (GSM) chipset + 1002 Patriot 2.0 chipset + 1005 T280e GSM/GPRS Phone + 1101 Patriot 1.0 (TDMA) chipset + 1801 Rainbow chipset flash + 2035 Bluetooth Device + 2805 GSM Modem + 2821 T720 GSM Phone + 2822 V.120e GSM Phone + 2823 Flash Interface + 2a01 MSM6050 chipset + 2a02 CDMA modem + 2a03 MSM6050 chipset flash + 2a21 V710 GSM Phone (P2K) + 2a22 V710 GSM Phone (AT) + 2a23 MSM6100 chipset flash + 2a41 MSM6300 chipset + 2a42 Usb Modem + 2a43 MSM6300 chipset flash + 2a61 E815 GSM Phone (P2K) + 2a62 E815 GSM Phone (AT) + 2a63 MSM6500 chipset flash + 2a81 MSM6025 chipset + 2a83 MSM6025 chipset flash + 2ac1 MSM6100 chipset + 2ac3 MSM6100 chipset flash + 3001 A835/E1000 GSM Phone (P2K) + 3002 A835/E1000 GSM Phone (AT) + 3801 C350L/C450 (P2K) + 3802 C330/C350L/C450/EZX GSM Phone (AT) + 3803 Neptune LT chipset flash + 4001 OMAP 1.0 chipset + 4002 A920/A925 UMTS Phone + 4003 OMAP 1.0 chipset flash + 4008 OMAP 1.0 chipset RDL + 4204 MPx200 Smartphone + 4214 MPc GSM + 4224 MPx220 Smartphone + 4234 MPc CDMA + 4244 MPx100 Smartphone + 4801 Neptune LTS chipset + 4803 Neptune LTS chipset flash + 4810 Triplet GSM Phone (storage) + 4901 Triplet GSM Phone (P2K) + 4902 Triplet GSM Phone (AT) + 4903 Neptune LTE chipset flash + 4a01 Neptune LTX chipset + 4a03 Neptune LTX chipset flash + 4a32 L6-imode Phone + 5801 Neptune ULS chipset + 5803 Neptune ULS chipset flash + 5901 Neptune VLT chipset + 5903 Neptune VLT chipset flash + 6001 Dalhart EZX + 6003 Dalhart flash + 6004 EZX GSM Phone (CDC Net) + 6008 Dalhart RDL + 6009 EZX GSM Phone (P2K) + 600a Dalhart EZX config 17 + 600b Dalhart EZX config 18 + 600c EZX GSM Phone (USBLAN) + 6021 JUIX chipset + 6023 JUIX chipset flash + 6026 Flash RAM Downloader/miniOS + 6027 USBLAN + 604c EZX GSM Phone (Storage) + 6101 Talon integrated chipset + 6401 Argon chipset + 6403 Argon chipset flash + 6415 ROKR Z6 (MTP mode) + 6604 Washington CDMA Phone + 6631 CDC Modem +22b9 eTurboTouch Technology, Inc. +22ba Technology Innovation Holdings, Ltd +2304 Pinnacle Systems, Inc. [hex] + 0109 Studio PCTV USB (SECAM) + 0110 Studio PCTV USB (PAL) + 0111 Miro PCTV USB + 0112 Studio PCTV USB (NTSC) with FM radio + 0201 Systems MovieBox Device + 0204 MovieBox USB_B + 0205 DVC 150B + 0206 Systems MovieBox Deluxe Device + 0207 Dazzle DVC90 Video Device + 0208 Studio PCTV USB2 + 020e PCTV 200e + 020f PCTV 400e BDA Device + 0210 Studio PCTV USB (PAL) with FM radio + 0212 Studio PCTV USB (NTSC) + 0213 500-USB Device + 0214 Studio PCTV USB (PAL) with FM radio + 0216 PCTV 60e + 0219 PCTV 260e + 021a Dazzle DVC100 Audio Device + 021b Dazzle DVC130/DVC170 + 021d Dazzle DVC130 + 021e Dazzle DVC170 + 021f PCTV Sat HDTV Pro BDA Device + 0222 PCTV Sat Pro BDA Device + 0223 DazzleTV Sat BDA Device + 0226 PCTV 330e + 0227 PCTV for Mac, HD Stick + 0228 PCTV DVB-T Flash Stick + 022a PCTV 160e + 022b PCTV 71e + 0232 PCTV 170e + 0300 Studio Linx Video input cable (NTSC) + 0301 Studio Linx Video input cable (PAL) + 0302 Dazzle DVC120 + 0419 PCTV Bungee USB (PAL) with FM radio + 061d PCTV Deluxe (NTSC) Device + 061e PCTV Deluxe (PAL) Device +2318 Shining Technologies, Inc. [hex] + 0011 CitiDISK Jr. IDE Enclosure +2375 Digit@lway, Inc. + 0001 Digital Audio Player +2406 SANHO Digital Electronics Co., Ltd. + 6688 PD7X Portable Storage +2478 Tripp-Lite + 2008 U209-000-R Serial Port +2632 TwinMOS + 3209 7-in-1 Card Reader +2650 Electronics For Imaging, Inc. [hex] +2730 Citizen + 200f CT-S310 Label printer +2735 DigitalWay + 0003 MPIO 1.5GB Hard Disc Drive +2770 NHJ, Ltd + 0a01 ScanJet 4600 series + 905c Che-Ez Snap SNAP-U/Digigr8/Soundstar TDC-35 + 9060 A130 + 9120 Che-ez! Snap / iClick Tiny VGA Digital Camera + 9130 TCG 501 + 913c Argus DC-1730 + 9150 Mini Cam + 9153 iClick 5X + 915d Cyberpix S-210S / Little Tikes My Real Digital Camera + 930b CCD Webcam(PC370R) + 930c CCD Webcam(PC370R) +2899 Toptronic Industrial Co., Ltd +2c02 Planex Communications + 14ea GW-US11H WLAN +2fb2 Fujitsu, Ltd +3125 Eagletron + 0001 TrackerPod Camera Stand +3176 Whanam Electronics Co., Ltd +3275 VidzMedia Pte Ltd + 4fb1 MonsterTV P2H +3334 AEI + 1701 Fast Ethernet +3340 Yakumo + 043a Mio A701 DigiWalker PPCPhone + 0e3a Pocket PC 300 GPS SL / Typhoon MyGuide 3500 + a0a3 deltaX 5 BT (D) PDA +3504 Micro Star + f110 Security Key +3538 Power Quotient International Co., Ltd + 0001 Travel Flash + 0015 Mass Storge Device + 0022 Hi-Speed Mass Storage Device + 0042 Cool Drive U339 Flash Disk +3579 DIVA + 6901 Media Reader +3636 InVibro +3838 WEM + 0001 5-in-1 Card Reader +3923 National Instruments Corp. + 12c0 DAQPad-6020E + 12d0 DAQPad-6507 + 12e0 NI 4350 + 12f0 NI 5102 + 1750 DAQPad-6508 + 17b0 USB-ISA-Bridge + 1820 DAQPad-6020E (68 pin I/O) + 1830 DAQPad-6020E (BNC) + 1f00 DAQPad-6024E + 1f10 DAQPad-6024E + 1f20 DAQPad-6025E + 1f30 DAQPad-6025E + 1f40 DAQPad-6036E + 1f50 DAQPad-6036E + 2f80 DAQPad-6052E + 2f90 DAQPad-6052E + 703c USB-485 RS485 Cable + 7254 NI MIO (data acquisition card) firmware updater + 729e USB-6251 (OEM) data acquisition card +40bb I-O Data + 0a09 USB2.0-SCSI Bridge USB2-SC +4101 i-rocks + 1301 IR-2510 usb phone +4102 iRiver, Ltd. + 1001 iFP-100 series mp3 player + 1003 iFP-300 series mp3 player + 1005 iFP-500 series mp3 player + 1007 iFP-700 series mp3/ogg vorbis player + 1008 iFP-800 series mp3/ogg vorbis player + 100a iFP-1000 series mp3/ogg vorbis player + 1014 T20 series mp3/ogg vorbis player (ums firmware) + 1101 iFP-100 series mp3 player (ums firmware) + 1103 iFP-300 series mp3 player (ums firmware) + 1105 iFP-500 series mp3 player (ums firmware) + 1113 T10 (alternate) + 1117 T10 + 1119 T30 series mp3/ogg/wma player + 2002 H10 6GB + 2101 H10 20GB (mtp) + 2102 H10 5GB (mtp) + 2105 H10 5/6GB (mtp) +413c Dell Computer Corp. + 0058 Port Replicator + 1001 Keyboard Hub + 1002 Keyboard Hub + 2001 Keyboard HID Support + 2002 SK-8125 Keyboard + 2003 Keyboard + 2005 RT7D50 Keyboard + 2100 SK-3106 Keyboard + 2101 SmartCard Reader Keyboard + 2500 DRAC4 Remote Access Card + 3010 Optical Wheel Mouse + 3200 Mouse + 4001 Axim X5 + 4002 Axim X3 + 4003 Axim X30 + 4004 Axim Sync + 4005 Axim Sync + 4006 Axim Sync + 4007 Axim Sync + 4008 Axim Sync + 4009 Axim Sync + 4011 Axim X51v + 5103 AIO Printer A940 + 5105 AIO Printer A920 + 5107 AIO Printer A960 + 5109 Photo AIO Printer 922 + 5110 Photo AIO Printer 962 + 5111 Photo AIO Printer 942 + 5112 Photo AIO Printer 924 + 5113 Photo AIO Printer 944 + 5114 Photo AIO Printer 964 + 5115 Photo AIO Printer 926 + 5116 AIO Printer 946 + 5117 Photo AIO Printer 966 + 5118 AIO 810 + 5124 Laser MFP 1815 + 5128 Photo AIO 928 + 5200 Laser Printer + 5202 Printing Support + 5203 Printing Support + 5210 Printing Support + 5211 Printing Support + 5220 Laser MFP 1600n + 5225 Printing Support + 5226 Printing Support + 5300 Laser Printer + 5400 Laser Printer + 5401 Laser Printer + 5601 Laser Printer 3100cn + 5602 Laser Printer 3000cn + 5631 Laser Printer 5100cn + 5905 Printing Support + 8000 BC02 Bluetooth USB Adapter + 8010 TrueMobile Bluetooth Module in + 8100 TrueMobile 1180 802.11b Adapter + 8102 TrueMobile 1300 USB2.0 WLAN Card + 8103 Wireless 350 Bluetooth + 8104 Wireless 1450 Dual-band (802.11a/b/g) USB2.0 Adapter + 8105 U2 in HID - Driver + 8106 Wireless 350 Bluetooth Internal Card in + 8110 Wireless 3xx Bluetooth Internal Card + 8111 Wireless 3xx Bluetooth Internal Card in + 8114 Wireless 5700 Mobile Broadband (CDMA EV-DO) Minicard Modem + 8115 Wireless 5500 Mobile Broadband (3G HSDPA) Minicard Modem + 8116 Wireless 5505 Mobile Broadband (3G HSDPA) Minicard Modem + 8117 Wireless 5700 Mobile Broadband (CDMA EV-DO) Expresscard Modem + 8118 Wireless 5510 Mobile Broadband (3G HSDPA) Expresscard Status Port + 8120 Bluetooth adapter + 8121 Eastfold in HID + 8122 Eastfold in DFU + 8123 eHome Infrared Receiver + 8124 eHome Infrared Receiver + 8126 Wireless 355 Bluetooth + 8127 Wireless 355 Module with Bluetooth 2.0 + EDR Technology. + 8128 Wireless 5700-Sprint Mobile Broadband (CDMA EV-DO) Mini-Card Status Port + 8129 Wireless 5700-Telus Mobile Broadband (CDMA EV-DO) Mini-Card Status Port + 8131 Wireless 360 Bluetooth 2.0 + EDR module. + 8133 Wireless 5720 VZW Mobile Broadband (EVDO Rev-A) Minicard GPS Port + 8134 Wireless 5720 Sprint Mobile Broadband (EVDO Rev-A) Minicard Status Port + 8135 Wireless 5720 TELUS Mobile Broadband (EVDO Rev-A) Minicard Diagnostics Port + 8136 Wireless 5520 Cingular Mobile Broadband (3G HSDPA) Minicard Diagnostics Port + 8137 Wireless 5520 Voda L Mobile Broadband (3G HSDPA) Minicard Status Port + 8138 Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard EAP-SIM Port + 8140 Wireless 360 Bluetooth + 8142 Mobile 360 in DFU + 8501 Bluetooth Adapter + a001 Hub + a005 Internal 2.0 Hub + a700 Hub (in 1905FP LCD Monitor) +4146 USBest Technology + 9281 Iomega Micro Mini 128MB Flash Drive + ba01 Intuix Flash Drive +4242 USB Design by Example + 4201 Buttons and Lights HID device + 4220 Echo 1 Camera +4348 WinChipHead + 5523 USB->RS 232 adapter with Prolifec PL 2303 chipset + 5537 13.56Mhz RFID Card Reader and Writer + 5584 CH34x printer adapter cable +4572 Shuttle, Inc. + 4572 Shuttle PN31 Remote +4586 Panram + 1026 Crystal Bar Flash Drive +4670 EMS Production + 9394 Game Cube USB Memory Adaptor 64M +4752 Miditech + 0011 Midistart-2 +4766 Aceeca + 0001 MEZ1000 RDA +4855 Memorex + 7288 Ultra Traveldrive 160G 2.5" HDD +5032 Grandtec + 0bb8 Grandtec USB1.1 DVB-T (cold) + 0bb9 Grandtec USB1.1 DVB-T (warm) + 0fa0 Grandtec USB1.1 DVB-T (cold) + 0fa1 Grandtec USB1.1 DVB-T (warm) +5041 Linksys (?) + 2234 WUSB54G 802.11g Adapter +5173 Sweex + 1809 ZD1211 +5345 Owon + 1234 PDS6062T Oscilloscope +544d Transmeta Corp. +5543 UC-Logic Technology Corp. + 0002 SuperPen WP3325U Tablet + 0003 Genius MousePen 4x3 Tablet/Aquila L1 Tablet + 0004 Genius MousePen 5x4 Tablet + 0005 Genius MousePen 8x6 Tablet + 0041 Genius PenSketch 6x8 Tablet + 0042 Genius PenSketch 12x9 Tablet +55aa OnSpec Electronic, Inc. + 0015 Hard Drive + 0102 SuperDisk + 0103 IDE Hard Drive + 0201 DDI to Reader-19 + 1234 ATAPI Bridge + a103 Sandisk SDDR-55 SmartMedia Card Reader + b000 USB to CompactFlash Card Reader + b004 OnSpec MMC/SD Reader/Writer + b00b USB to Memory Stick Card Reader + b00c USB to SmartMedia Card Reader + b012 Mitsumi FA402M 8-in-2 Card Reader + b200 Compact Flash Reader + b204 MMC/ SD Reader + b207 Memory Stick Reader +5986 Acer, Inc + 0102 Crystal Eye webcam +5a57 Zinwell + 0260 RT2570 +6189 Sitecom + 182d USB 2.0 Ethernet + 2068 USB to serial cable (v2) +6253 TwinHan Technology Co., Ltd + 0100 Ir reciver f. remote control +636c CoreLogic, Inc. +6547 Arkmicro Technologies Inc. + 0232 ARK3116 Serial +6666 Prototype product Vendor ID + 0667 WiseGroup Smart Joy PSX, PS-PC Smart JoyPad + 2667 JCOP BlueZ Smartcard reader + 8804 WiseGroup SuperJoy Box 5 +6891 3Com + a727 3CRUSB10075 +6993 Freshtel + b001 FT-102 VoIP USB Phone +6a75 Shanghai Jujo Electronics Co., Ltd +7104 CME (Central Music Co.) + 2202 UF5/UF6/UF7/UF8 MIDI Master Keyboard +8086 Intel Corp. + 0001 AnyPoint (TM) Home Network 1.6 Mbps Wireless Adapter + 0100 Personal Audio Player 3000 + 0101 Personal Audio Player 3000 + 0110 Easy PC Camera + 0120 PC Camera CS120 + 0200 AnyPoint(TM) Wireless II Network 11Mbps Adapter + 0431 Intel Pro Video PC Camera + 0510 Digital Movie Creator + 0630 Pocket PC Camera + 0780 CS780 Microphone Input + 07d3 BLOB boot loader firmware + 0dad Cherry MiniatureCard Keyboard + 1010 AnyPoint(TM) Home Network 10 Mbps Phoneline Adapter + 110a Bluetooth Controller from (Ericsson P4A) + 110b Bluetooth Controller from (Intel/CSR) + 1110 PRO/Wireless LAN Module + 1111 PRO/Wireless 2011B 802.11b Adapter + 1134 Hollister Mobile Monitor + 1234 Prototype Reader/Writer + 3100 PRO/DSL 3220 Modem - WAN + 3101 PRO/DSL 3220 Modem + 3240 AnyPoint® 3240 Modem - WAN + 3241 AnyPoint® 3240 Modem + 8602 Miniature Card Slot + 9303 Intel 8x930Hx Hub + 9890 82930 Test Board + beef SCM Miniature Card Reader/Writer + c013 Wireless HID Station + f001 XScale PXA27x Bulverde flash +8341 EGO Systems, Inc. + 2000 Flashdisk +9016 Sitecom + 182d WL-022 +9710 MosChip Semiconductor + 7703 MCS7703 Serial Port Adapter + 7705 Printer cable + 7715 Printer cable + 7780 MS7780 4Mbps Fast IRDA Adapter + 7830 MCS7830 Ethernet +a727 3Com + 6893 AR5523 + 6895 AR5523 + 6897 AR5523 +c251 Keil Software, Inc. + 2710 ULink +eb1a eMPIA Technology, Inc. + 17de KWorld V-Stream XPERT DTV - DVB-T USB cold + 17df KWorld V-Stream XPERT DTV - DVB-T USB warm + 2710 SilverCrest WebCam + 2750 ECS Elitegroup G220 integrated webcam + 2800 Terratec Cinergy 200 + 2801 GrabBeeX+ Video Encoder +f003 Hewlett Packard + 6002 PhotoSmart C500 + +# List of known device classes, subclasses and protocols + +# Syntax: +# C class class_name +# subclass subclass_name <-- single tab +# protocol protocol_name <-- two tabs + +C 00 (Defined at Interface level) +C 01 Audio + 01 Control Device + 02 Streaming + 03 MIDI Streaming +C 02 Communications + 01 Direct Line + 02 Abstract (modem) + 00 None + 01 AT-commands (v.25ter) + 02 AT-commands (PCCA101) + 03 AT-commands (PCCA101 + wakeup) + 04 AT-commands (GSM) + 05 AT-commands (3G) + 06 AT-commands (CDMA) + fe Defined by command set descriptor + ff Vendor Specific (MSFT RNDIS?) + 03 Telephone + 04 Multi-Channel + 05 CAPI Control + 06 Ethernet Networking + 07 ATM Networking + 08 Wireless Handset Control + 09 Device Management + 0a Mobile Direct Line + 0b OBEX + 0c Ethernet Emulation + 07 Ethernet Emulation (EEM) +C 03 Human Interface Device + 00 No Subclass + 00 None + 01 Keyboard + 02 Mouse + 01 Boot Interface Subclass + 00 None + 01 Keyboard + 02 Mouse +C 05 Physical Interface Device +C 06 Imaging + 01 Still Image Capture + 01 Picture Transfer Protocol (PIMA 15470) +C 07 Printer + 01 Printer + 00 Reserved/Undefined + 01 Unidirectional + 02 Bidirectional + 03 IEEE 1284.4 compatible bidirectional + ff Vendor Specific +C 08 Mass Storage + 01 RBC (typically Flash) + 00 Control/Bulk/Interrupt + 01 Control/Bulk + 50 Bulk (Zip) + 02 SFF-8020i, MMC-2 (ATAPI) + 03 QIC-157 + 04 Floppy (UFI) + 00 Control/Bulk/Interrupt + 01 Control/Bulk + 50 Bulk (Zip) + 05 SFF-8070i + 06 SCSI + 00 Control/Bulk/Interrupt + 01 Control/Bulk + 50 Bulk (Zip) +C 09 Hub + 00 Unused + 00 Full speed (or root) hub + 01 Single TT + 02 TT per port +C 0a CDC Data + 00 Unused + 30 I.430 ISDN BRI + 31 HDLC + 32 Transparent + 50 Q.921M + 51 Q.921 + 52 Q.921TM + 90 V.42bis + 91 Q.932 EuroISDN + 92 V.120 V.24 rate ISDN + 93 CAPI 2.0 + fd Host Based Driver + fe CDC PUF + ff Vendor specific +C 0b Chip/SmartCard +C 0d Content Security +C 0e Video + 00 Undefined + 01 Video Control + 02 Video Streaming + 03 Video Interface Collection +C dc Diagnostic + 01 Reprogrammable Diagnostics + 01 USB2 Compliance +C e0 Wireless + 01 Radio Frequency + 01 Bluetooth + 02 Ultra WideBand Radio Control + 03 RNDIS + 02 Wireless USB Wire Adapter + 01 Host Wire Adapter Control/Data Streaming + 02 Device Wire Adapter Control/Data Streaming + 03 Device Wire Adapter Isochronous Streaming +C ef Miscellaneous Device + 01 ? + 01 Microsoft ActiveSync + 02 Palm Sync + 02 ? + 01 Interface Association + 02 Wire Adapter Multifunction Peripheral + 03 ? + 01 Cable Based Association +C fe Application Specific Interface + 01 Device Firmware Update + 02 IRDA Bridge + 03 Test and Measurement + 01 TMC + 02 USB488 +C ff Vendor Specific Class + ff Vendor Specific Subclass + ff Vendor Specific Protocol + +# List of Audio Class Terminal Types + +# Syntax: +# AT terminal_type terminal_type_name + +AT 0100 USB Undefined +AT 0101 USB Streaming +AT 01ff USB Vendor Specific +AT 0200 Input Undefined +AT 0201 Microphone +AT 0202 Desktop Microphone +AT 0203 Personal Microphone +AT 0204 Omni-directional Microphone +AT 0205 Microphone Array +AT 0206 Processing Microphone Array +AT 0300 Output Undefined +AT 0301 Speaker +AT 0302 Headphones +AT 0303 Head Mounted Display Audio +AT 0304 Desktop Speaker +AT 0305 Room Speaker +AT 0306 Communication Speaker +AT 0307 Low Frequency Effects Speaker +AT 0400 Bidirectional Undefined +AT 0401 Handset +AT 0402 Headset +AT 0403 Speakerphone, no echo reduction +AT 0404 Echo-suppressing speakerphone +AT 0405 Echo-canceling speakerphone +AT 0500 Telephony Undefined +AT 0501 Phone line +AT 0502 Telephone +AT 0503 Down Line Phone +AT 0600 External Undefined +AT 0601 Analog Connector +AT 0602 Digital Audio Interface +AT 0603 Line Connector +AT 0604 Legacy Audio Connector +AT 0605 SPDIF interface +AT 0606 1394 DA stream +AT 0607 1394 DV stream soundtrack +AT 0700 Embedded Undefined +AT 0701 Level Calibration Noise Source +AT 0702 Equalization Noise +AT 0703 CD Player +AT 0704 DAT +AT 0705 DCC +AT 0706 MiniDisc +AT 0707 Analog Tape +AT 0708 Phonograph +AT 0709 VCR Audio +AT 070a Video Disc Audio +AT 070b DVD Audio +AT 070c TV Tuner Audio +AT 070d Satellite Receiver Audio +AT 070e Cable Tuner Audio +AT 070f DSS Audio +AT 0710 Radio Receiver +AT 0711 Radio Transmitter +AT 0712 Multitrack Recorder +AT 0713 Synthesizer + +# List of HID Descriptor Types + +# Syntax: +# HID descriptor_type descriptor_type_name + +HID 21 HID +HID 22 Report +HID 23 Physical + +# List of HID Descriptor Item Types +# Note: 2 bits LSB encode data length following + +# Syntax: +# R item_type item_type_name + +# Main Items +R 80 Input +R 90 Output +R b0 Feature +R a0 Collection +R c0 End Collection + +# Global Items +R 04 Usage Page +R 14 Logical Minimum +R 24 Logical Maximum +R 34 Physical Minimum +R 44 Physical Maximum +R 54 Unit Exponent +R 64 Unit +R 74 Report Size +R 84 Report ID +R 94 Report Count +R a4 Push +R b4 Pop + +# Local Items +R 08 Usage +R 18 Usage Minimum +R 28 Usage Maximum +R 38 Designator Index +R 48 Designator Minimum +R 58 Designator Maximum +R 78 String Index +R 88 String Minimum +R 98 String Maximum +R a8 Delimiter + +# List of Physical Descriptor Bias Types + +# Syntax: +# BIAS item_type item_type_name + +BIAS 0 Not Applicable +BIAS 1 Right Hand +BIAS 2 Left Hand +BIAS 3 Both Hands +BIAS 4 Either Hand + +# List of Physical Descriptor Item Types + +# Syntax: +# PHY item_type item_type_name + +PHY 00 None +PHY 01 Hand +PHY 02 Eyeball +PHY 03 Eyebrow +PHY 04 Eyelid +PHY 05 Ear +PHY 06 Nose +PHY 07 Mouth +PHY 08 Upper Lip +PHY 09 Lower Lip +PHY 0a Jaw +PHY 0b Neck +PHY 0c Upper Arm +PHY 0d Elbow +PHY 0e Forearm +PHY 0f Wrist +PHY 10 Palm +PHY 11 Thumb +PHY 12 Index Finger +PHY 13 Middle Finger +PHY 14 Ring Finger +PHY 15 Little Finger +PHY 16 Head +PHY 17 Shoulder +PHY 18 Hip +PHY 19 Waist +PHY 1a Thigh +PHY 1b Knee +PHY 1c calf +PHY 1d Ankle +PHY 1e Foot +PHY 1f Heel +PHY 20 Ball of Foot +PHY 21 Big Toe +PHY 22 Second Toe +PHY 23 Third Toe +PHY 24 Fourth Toe +PHY 25 Fifth Toe +PHY 26 Brow +PHY 27 Cheek + +# List of HID Usages + +# Syntax: +# HUT hi _usage_page hid_usage_page_name +# hid_usage hid_usage_name + +HUT 00 Undefined +HUT 01 Generic Desktop Controls + 000 Undefined + 001 Pointer + 002 Mouse + 004 Joystick + 005 Gamepad + 006 Keyboard + 007 Keypad + 008 Multi-Axis Controller + 030 Direction-X + 031 Direction-Y + 032 Direction-Z + 033 Rotate-X + 034 Rotate-Y + 035 Rotate-Z + 036 Slider + 037 Dial + 038 Wheel + 039 Hat Switch + 03a Counted Buffer + 03b Byte Count + 03c Motion Wakeup + 03d Start + 03e Select + 040 Vector-X + 041 Vector-Y + 042 Vector-Z + 043 Vector-X relative Body + 044 Vector-Y relative Body + 045 Vector-Z relative Body + 046 Vector + 080 System Control + 081 System Power Down + 082 System Sleep + 083 System Wake Up + 084 System Context Menu + 085 System Main Menu + 086 System App Menu + 087 System Menu Help + 088 System Menu Exit + 089 System Menu Select + 08a System Menu Right + 08b System Menu Left + 08c System Menu Up + 08d System Menu Down + 090 Direction Pad Up + 091 Direction Pad Down + 092 Direction Pad Right + 093 Direction Pad Left +HUT 02 Simulation Controls + 000 Undefined + 001 Flight Simulation Device + 002 Automobile Simulation Device + 003 Tank Simulation Device + 004 Spaceship Simulation Device + 005 Submarine Simulation Device + 006 Sailing Simulation Device + 007 Motorcycle Simulation Device + 008 Sports Simulation Device + 009 Airplane Simualtion Device + 00a Helicopter Simulation Device + 00b Magic Carpet Simulation Device + 00c Bicycle Simulation Device + 020 Flight Control Stick + 021 Flight Stick + 022 Cyclic Control + 023 Cyclic Trim + 024 Flight Yoke + 025 Track Control + 0b0 Aileron + 0b1 Aileron Trim + 0b2 Anti-Torque Control + 0b3 Autopilot Enable + 0b4 Chaff Release + 0b5 Collective Control + 0b6 Dive Break + 0b7 Electronic Countermeasures + 0b8 Elevator + 0b9 Elevator Trim + 0ba Rudder + 0bb Throttle + 0bc Flight COmmunications + 0bd Flare Release + 0be Landing Gear + 0bf Toe Break + 0c0 Trigger + 0c1 Weapon Arm + 0c2 Weapons Select + 0c3 Wing Flaps + 0c4 Accelerator + 0c5 Brake + 0c6 Clutch + 0c7 Shifter + 0c8 Steering + 0c9 Turret Direction + 0ca Barrel Elevation + 0cb Drive Plane + 0cc Ballast + 0cd Bicylce Crank + 0ce Handle Bars + 0cf Front Brake + 0d0 Rear Brake +HUT 03 VR Controls + 000 Unidentified + 001 Belt + 002 Body Suit + 003 Flexor + 004 Glove + 005 Head Tracker + 006 Head Mounted Display + 007 Hand Tracker + 008 Oculometer + 009 Vest + 00a Animatronic Device + 020 Stereo Enable + 021 Display Enable +HUT 04 Sport Controls + 000 Unidentified + 001 Baseball Bat + 002 Golf Club + 003 Rowing Machine + 004 Treadmill + 030 Oar + 031 Slope + 032 Rate + 033 Stick Speed + 034 Stick Face Angle + 035 Stick Heel/Toe + 036 Stick Follow Through + 047 Stick Temp + 038 Stick Type + 039 Stick Height + 050 Putter + 051 1 Iron + 052 2 Iron + 053 3 Iron + 054 4 Iron + 055 5 Iron + 056 6 Iron + 057 7 Iron + 058 8 Iron + 059 9 Iron + 05a 10 Iron + 05b 11 Iron + 05c Sand Wedge + 05d Loft Wedge + 05e Power Wedge + 05f 1 Wood + 060 3 Wood + 061 5 Wood + 062 7 Wood + 063 9 Wood +HUT 05 Game Controls + 000 Undefined + 001 3D Game Controller + 002 Pinball Device + 003 Gun Device + 020 Point Of View + 021 Turn Right/Left + 022 Pitch Right/Left + 023 Roll Forward/Backward + 024 Move Right/Left + 025 Move Forward/Backward + 026 Move Up/Down + 027 Lean Right/Left + 028 Lean Forward/Backward + 029 Height of POV + 02a Flipper + 02b Secondary Flipper + 02c Bump + 02d New Game + 02e Shoot Ball + 02f Player + 030 Gun Bolt + 031 Gun Clip + 032 Gun Selector + 033 Gun Single Shot + 034 Gun Burst + 035 Gun Automatic + 036 Gun Safety + 037 Gamepad Fire/Jump + 038 Gamepad Fun + 039 Gamepad Trigger +HUT 07 Keyboard + 000 No Event + 001 Keyboard ErrorRollOver + 002 Keyboard POSTfail + 003 Keyboard Error Undefined + 004 A + 005 B + 006 C + 007 D + 008 E + 009 F + 00a G + 00b H + 00c I + 00d J + 00e K + 00f L + 010 M + 011 N + 012 O + 013 P + 014 Q + 015 R + 016 S + 017 T + 018 U + 019 V + 01a W + 01b X + 01c Y + 01d Z + 01e 1 and ! (One and Exclamation) + 01f 2 and @ (2 and at) + 020 3 and # (3 and Hash) + 021 4 and $ (4 and Dollar Sign) + 022 5 and % (5 and Percent Sign) + 023 6 and ^ (6 and circumflex) + 024 7 and & (Seven and Ampersand) + 025 8 and * (Eight and asterisk) + 026 9 and ( (Nine and Parenthesis Left) + 027 0 and ) (Zero and Parenthesis Right) + 028 Return (Enter) + 029 Escape + 02a Delete (Backspace) + 02b Tab + 02c Space Bar + 02d - and _ (Minus and underscore) + 02e = and + (Equal and Plus) + 02f [ and { (Bracket and Braces Left) + 030 ] and } (Bracket and Braces Right) + 031 \ and | (Backslash and Bar) + 032 # and ~ (Hash and Tilde, Non-US Keyboard near right shift) + 033 ; and : (Semicolon and Colon) + 034 � and " (Accent Acute and Double Quotes) + 035 ` and ~ (Accent Grace and Tilde) + 036 , and < (Comma and Less) + 037 . and > (Period and Greater) + 038 / and ? (Slash and Question Mark) + 039 Caps Lock + 03a F1 + 03b F2 + 03c F3 + 03d F4 + 03e F5 + 03f F6 + 040 F7 + 041 F8 + 042 F9 + 043 F10 + 044 F11 + 045 F12 + 046 Print Screen + 047 Scroll Lock + 048 Pause + 049 Insert + 04a Home + 04b Page Up + 04c Delete Forward (without Changing Position) + 04d End + 04e Page Down + 04f Right Arrow + 050 Left Arrow + 051 Down Arrow + 052 Up Arrow + 053 Num Lock and Clear + 054 Keypad / (Division Sign) + 055 Keypad * (Multiplication Sign) + 056 Keypad - (Subtraction Sign) + 057 Keypad + (Addition Sign) + 058 Keypad Enter + 059 Keypad 1 and END + 05a Keypad 2 and Down Arrow + 05b Keypad 3 and Page Down + 05c Keypad 4 and Left Arrow + 05d Keypad 5 (Tactilei Raised) + 05f Keypad 6 and Right Arrow + 060 Keypad 7 and Home + 061 Keypad 8 and Up Arrow + 062 Keypad 8 and Page Up + 063 Keypad . (decimal delimiter) and Delete + 064 \ and | (Backslash and Bar, UK and Non-US Keyboard near left shift) + 065 Keyboard Application (Windows Key for Win95 or Compose) + 066 Power (not a key) + 067 Keypad = (Equal Sign) + 068 F13 + 069 F14 + 06a F15 + 06b F16 + 06c F17 + 06d F18 + 06e F19 + 06f F20 + 070 F21 + 071 F22 + 072 F23 + 073 F24 + 074 Execute + 075 Help + 076 Menu + 077 Select + 078 Stop + 079 Again + 07a Undo + 07b Cut + 07c Copy + 07d Paste + 07e Find + 07f Mute + 080 Volume Up + 081 Volume Down + 082 Locking Caps Lock + 083 Locking Num Lock + 084 Locking Scroll Lock + 085 Keypad Comma + 086 Keypad Equal Sign (AS/400) + 087 International 1 (PC98) + 088 International 2 (PC98) + 089 International 3 (PC98) + 08a International 4 (PC98) + 08b International 5 (PC98) + 08c International 6 (PC98) + 08d International 7 (Toggle Single/Double Byte Mode) + 08e International 8 + 08f International 9 + 090 LANG 1 (Hangul/English Toggle, Korea) + 091 LANG 2 (Hanja Conversion, Korea) + 092 LANG 3 (Katakana, Japan) + 093 LANG 4 (Hiragana, Japan) + 094 LANG 5 (Zenkaku/Hankaku, Japan) + 095 LANG 6 + 096 LANG 7 + 097 LANG 8 + 098 LANG 9 + 099 Alternate Erase + 09a SysReq/Attention + 09b Cancel + 09c Clear + 09d Prior + 09e Return + 09f Separator + 0a0 Out + 0a1 Open + 0a2 Clear/Again + 0a3 CrSel/Props + 0a4 ExSel + 0e0 Control Left + 0e1 Shift Left + 0e2 Alt Left + 0e3 GUI Left + 0e4 Control Right + 0e5 Shift Right + 0e6 Alt Rigth + 0e7 GUI Right +HUT 08 LEDs + 000 Undefined + 001 NumLock + 002 CapsLock + 003 Scroll Lock + 004 Compose + 005 Kana + 006 Power + 007 Shift + 008 Do not disturb + 009 Mute + 00a Tone Enabke + 00b High Cut Filter + 00c Low Cut Filter + 00d Equalizer Enable + 00e Sound Field ON + 00f Surround On + 010 Repeat + 011 Stereo + 012 Sampling Rate Detect + 013 Spinning + 014 CAV + 015 CLV + 016 Recording Format Detect + 017 Off-Hook + 018 Ring + 019 Message Waiting + 01a Data Mode + 01b Battery Operation + 01c Battery OK + 01d Battery Low + 01e Speaker + 01f Head Set + 020 Hold + 021 Microphone + 022 Coverage + 023 Night Mode + 024 Send Calls + 025 Call Pickup + 026 Conference + 027 Stand-by + 028 Camera On + 029 Camera Off + 02a On-Line + 02b Off-Line + 02c Busy + 02d Ready + 02e Paper-Out + 02f Paper-Jam + 030 Remote + 031 Forward + 032 Reverse + 033 Stop + 034 Rewind + 035 Fast Forward + 036 Play + 037 Pause + 038 Record + 039 Error + 03a Usage Selected Indicator + 03b Usage In Use Indicator + 03c Usage Multi Indicator + 03d Indicator On + 03e Indicator Flash + 03f Indicator Slow Blink + 040 Indicator Fast Blink + 041 Indicator Off + 042 Flash On Time + 043 Slow Blink On Time + 044 Slow Blink Off Time + 045 Fast Blink On Time + 046 Fast Blink Off Time + 047 Usage Color Indicator + 048 Indicator Red + 049 Indicator Green + 04a Indicator Amber + 04b Generic Indicator + 04c System Suspend + 04d External Power Connected +HUT 09 Buttons + 000 No Button Pressed + 001 Button 1 (Primary) + 002 Button 2 (Secondary) + 003 Button 3 (Tertiary) + 004 Button 4 + 005 Button 5 +HUT 0a Ordinal + 001 Instance 1 + 002 Instance 2 + 003 Instance 3 +HUT 0b Telephony + 000 Unassigned + 001 Phone + 002 Answering Machine + 003 Message Controls + 004 Handset + 005 Headset + 006 Telephony Key Pad + 007 Programmable Button + 020 Hook Switch + 021 Flash + 022 Feature + 023 Hold + 024 Redial + 025 Transfer + 026 Drop + 027 Park + 028 Forward Calls + 029 Alternate Function + 02a Line + 02b Speaker Phone + 02c Conference + 02d Ring Enable + 02e Ring Select + 02f Phone Mute + 030 Caller ID + 050 Speed Dial + 051 Store Number + 052 Recall Number + 053 Phone Directory + 070 Voice Mail + 071 Screen Calls + 072 Do Not Disturb + 073 Message + 074 Answer On/Offf + 090 Inside Dial Tone + 091 Outside Dial Tone + 092 Inside Ring Tone + 093 Outside Ring Tone + 094 Priority Ring Tone + 095 Inside Ringback + 096 Priority Ringback + 097 Line Busy Tone + 098 Recorder Tone + 099 Call Waiting Tone + 09a Confirmation Tone 1 + 09b Confirmation Tone 2 + 09c Tones Off + 09d Outside Ringback + 0b0 Key 1 + 0b1 Key 2 + 0b3 Key 3 + 0b4 Key 4 + 0b5 Key 5 + 0b6 Key 6 + 0b7 Key 7 + 0b8 Key 8 + 0b9 Key 9 + 0ba Key Star + 0bb Key Pound + 0bc Key A + 0bd Key B + 0be Key C + 0bf Key D +HUT 0c Consumer + 000 Unassigned + 001 Consumer Control + 002 Numeric Key Pad + 003 Programmable Buttons + 020 +10 + 021 +100 + 022 AM/PM + 030 Power + 031 Reset + 032 Sleep + 033 Sleep After + 034 Sleep Mode + 035 Illumination + 036 Function Buttons + 040 Menu + 041 Menu Pick + 042 Menu Up + 043 Menu Down + 044 Menu Left + 045 Menu Right + 046 Menu Escape + 047 Menu Value Increase + 048 Menu Value Decrease + 060 Data on Screen + 061 Closed Caption + 062 Closed Caption Select + 063 VCR/TV + 064 Broadcast Mode + 065 Snapshot + 066 Still + 080 Selection + 081 Assign Selection + 082 Mode Step + 083 Recall Last + 084 Enter Channel + 085 Order Movie + 086 Channel + 087 Media Selection + 088 Media Select Computer + 089 Media Select TV + 08a Media Select WWW + 08b Media Select DVD + 08c Media Select Telephone + 08d Media Select Program Guide + 08e Media Select Video Phone + 08f Media Select Games + 090 Media Select Messages + 091 Media Select CD + 092 Media Select VCR + 093 Media Select Tuner + 094 Quit + 095 Help + 096 Media Select Tape + 097 Media Select Cable + 098 Media Select Satellite + 099 Media Select Security + 09a Media Select Home + 09b Media Select Call + 09c Channel Increment + 09d Channel Decrement + 09e Media Select SAP + 0a0 VCR Plus + 0a1 Once + 0a2 Daily + 0a3 Weekly + 0a4 Monthly + 0b0 Play + 0b1 Pause + 0b2 Record + 0b3 Fast Forward + 0b4 Rewind + 0b5 Scan Next Track + 0b6 Scan Previous Track + 0b7 Stop + 0b8 Eject + 0b9 Random Play + 0ba Select Disc + 0bb Enter Disc + 0bc Repeat + 0bd Tracking + 0be Track Normal + 0bf Slow Tracking + 0c0 Frame Forward + 0c1 Frame Back + 0c2 Mark + 0c3 Clear Mark + 0c4 Repeat from Mark + 0c5 Return to Mark + 0c6 Search Mark Forward + 0c7 Search Mark Backward + 0c8 Counter Reset + 0c9 Show Counter + 0ca Tracking Increment + 0cb Tracking Decrement + 0cc Stop/Eject + 0cd Play/Pause + 0ce Play/Skip + 0e0 Volume + 0e1 Balance + 0e2 Mute + 0e3 Bass + 0e4 Treble + 0e5 Bass Boost + 0e6 Surround Mode + 0e7 Loudness + 0e8 MPX + 0e9 Volume Increment + 0ea Volume Decrement + 0f0 Speed Select + 0f1 Playback Speed + 0f2 Standard Play + 0f3 Long Play + 0f4 Extended Play + 0f5 Slow + 100 Fan Enable + 101 Fan Speed + 102 Light Enable + 103 Light Illumination Level + 104 Climate Control Enable + 105 Room Temperature + 106 Security Enable + 107 Fire Alarm + 108 Police Alarm + 150 Balance Right + 151 Balance Left + 152 Bass Increment + 153 Bass Decrement + 154 Treble Increment + 155 Treble Decrement + 160 Speaker System + 161 Channel Left + 162 Channel Right + 163 Channel Center + 164 Channel Front + 165 Channel Center Front + 166 Channel Side + 167 Channel Surround + 168 Channel Low Frequency Enhancement + 169 Channel Top + 16a Channel Unknown + 170 Sub-Channel + 171 Sub-Channel Increment + 172 Sub-Channel Decrement + 173 Alternative Audio Increment + 174 Alternative Audio Decrement + 180 Application Launch Buttons + 181 AL Launch Button Configuration Tool + 182 AL Launch Button Configuration + 183 AL Consumer Control Configuration + 184 AL Word Processor + 185 AL Text Editor + 186 AL Spreadsheet + 187 AL Graphics Editor + 188 AL Presentation App + 189 AL Database App + 18a AL Email Reader + 18b AL Newsreader + 18c AL Voicemail + 18d AL Contacts/Address Book + 18e AL Calendar/Schedule + 18f AL Task/Project Manager + 190 AL Log/Jounal/Timecard + 191 AL Checkbook/Finance + 192 AL Calculator + 193 AL A/V Capture/Playback + 194 AL Local Machine Browser + 195 AL LAN/Wan Browser + 196 AL Internet Browser + 197 AL Remote Networking/ISP Connect + 198 AL Network Conference + 199 AL Network Chat + 19a AL Telephony/Dialer + 19b AL Logon + 19c AL Logoff + 19d AL Logon/Logoff + 19e AL Terminal Local/Screensaver + 19f AL Control Panel + 1a0 AL Command Line Processor/Run + 1a1 AL Process/Task Manager + 1a2 AL Select Task/Application + 1a3 AL Next Task/Application + 1a4 AL Previous Task/Application + 1a5 AL Preemptive Halt Task/Application + 200 Generic GUI Application Controls + 201 AC New + 202 AC Open + 203 AC CLose + 204 AC Exit + 205 AC Maximize + 206 AC Minimize + 207 AC Save + 208 AC Print + 209 AC Properties + 21a AC Undo + 21b AC Copy + 21c AC Cut + 21d AC Paste + 21e AC Select All + 21f AC Find + 220 AC Find and Replace + 221 AC Search + 222 AC Go To + 223 AC Home + 224 AC Back + 225 AC Forward + 226 AC Stop + 227 AC Refresh + 228 AC Previous Link + 229 AC Next Link + 22b AC History + 22c AC Subscriptions + 22d AC Zoom In + 22e AC Zoom Out + 22f AC Zoom + 230 AC Full Screen View + 231 AC Normal View + 232 AC View Toggle + 233 AC Scroll Up + 234 AC Scroll Down + 235 AC Scroll + 236 AC Pan Left + 237 AC Pan Right + 238 AC Pan + 239 AC New Window + 23a AC Tile Horizontally + 23b AC Tile Vertically + 23c AC Format +HUT 0d Digitizer + 000 Undefined + 001 Digitizer + 002 Pen + 003 Light Pen + 004 Touch Screen + 005 Touch Pad + 006 White Board + 007 Coordinate Measuring Machine + 008 3D Digitizer + 009 Stereo Plotter + 00a Articulated Arm + 00b Armature + 00c Multiple Point Digitizer + 00d Free Space Wand + 020 Stylus + 021 Puck + 022 Finger + 030 Tip Pressure + 031 Barrel Pressure + 032 In Range + 033 Touch + 034 Untouch + 035 Tap + 036 Quality + 037 Data Valid + 038 Transducer Index + 039 Tablet Function Keys + 03a Program Change Keys + 03b Battery Strength + 03c Invert + 03d X Tilt + 03e Y Tilt + 03f Azimuth + 040 Altitude + 041 Twist + 042 Tip Switch + 043 Secondary Tip Switch + 044 Barrel Switch + 045 Eraser + 046 Tablet Pick +HUT 0f PID Page + 000 Undefined + 001 Physical Interface Device + 020 Normal + 021 Set Effect Report + 022 Effect Block Index + 023 Parameter Block Offset + 024 ROM Flag + 025 Effect Type + 026 ET Constant Force + 027 ET Ramp + 028 ET Custom Force Data + 030 ET Square + 031 ET Sine + 032 ET Triangle + 033 ET Sawtooth Up + 034 ET Sawtooth Down + 040 ET Spring + 041 ET Damper + 042 ET Inertia + 043 ET Friction + 050 Duration + 051 Sample Period + 052 Gain + 053 Trigger Button + 054 Trigger Repeat Interval + 055 Axes Enable + 056 Direction Enable + 057 Direction + 058 Type Specific Block Offset + 059 Block Type + 05A Set Envelope Report + 05B Attack Level + 05C Attack Time + 05D Fade Level + 05E Fade Time + 05F Set Condition Report + 060 CP Offset + 061 Positive Coefficient + 062 Negative Coefficient + 063 Positive Saturation + 064 Negative Saturation + 065 Dead Band + 066 Download Force Sample + 067 Isoch Custom Force Enable + 068 Custom Force Data Report + 069 Custom Force Data + 06A Custom Force Vendor Defined Data + 06B Set Custom Force Report + 06C Custom Force Data Offset + 06D Sample Count + 06E Set Periodic Report + 06F Offset + 070 Magnitude + 071 Phase + 072 Period + 073 Set Constant Force Report + 074 Set Ramp Force Report + 075 Ramp Start + 076 Ramp End + 077 Effect Operation Report + 078 Effect Operation + 079 Op Effect Start + 07A Op Effect Start Solo + 07B Op Effect Stop + 07C Loop Count + 07D Device Gain Report + 07E Device Gain + 07F PID Pool Report + 080 RAM Pool Size + 081 ROM Pool Size + 082 ROM Effect Block Count + 083 Simultaneous Effects Max + 084 Pool Alignment + 085 PID Pool Move Report + 086 Move Source + 087 Move Destination + 088 Move Length + 089 PID Block Load Report + 08B Block Load Status + 08C Block Load Success + 08D Block Load Full + 08E Block Load Error + 08F Block Handle + 090 PID Block Free Report + 091 Type Specific Block Handle + 092 PID State Report + 094 Effect Playing + 095 PID Device Control Report + 096 PID Device Control + 097 DC Enable Actuators + 098 DC Disable Actuators + 099 DC Stop All Effects + 09A DC Device Reset + 09B DC Device Pause + 09C DC Device Continue + 09F Device Paused + 0A0 Actuators Enabled + 0A4 Safety Switch + 0A5 Actuator Override Switch + 0A6 Actuator Power + 0A7 Start Delay + 0A8 Parameter Block Size + 0A9 Device Managed Pool + 0AA Shared Parameter Blocks + 0AB Create New Effect Report + 0AC RAM Pool Available +HUT 10 Unicode +HUT 14 Alphanumeric Display + 000 Undefined + 001 Alphanumeric Display + 020 Display Attributes Report + 021 ASCII Character Set + 022 Data Read Back + 023 Font Read Back + 024 Display Control Report + 025 Clear Display + 026 Display Enable + 027 Screen Saver Delay + 028 Screen Saver Enable + 029 Vertical Scroll + 02a Horizontal Scroll + 02b Character Report + 02c Display Data + 02d Display Status + 02e Stat Not Ready + 02f Stat Ready + 030 Err Not a loadable Character + 031 Err Font Data Cannot Be Read + 032 Cursur Position Report + 033 Row + 034 Column + 035 Rows + 036 Columns + 037 Cursor Pixel Positioning + 038 Cursor Mode + 039 Cursor Enable + 03a Cursor Blink + 03b Font Report + 03c Font Data + 03d Character Width + 03e Character Height + 03f Character Spacing Horizontal + 040 Character Spacing Vertical + 041 Unicode Character Set +HUT 80 USB Monitor + 001 Monitor Control + 002 EDID Information + 003 VDIF Information + 004 VESA Version +HUT 81 USB Monitor Enumerated Values +HUT 82 Monitor VESA Virtual Controls + 001 Degauss + 010 Brightness + 012 Contrast + 016 Red Video Gain + 018 Green Video Gain + 01a Blue Video Gain + 01c Focus + 020 Horizontal Position + 022 Horizontal Size + 024 Horizontal Pincushion + 026 Horizontal Pincushion Balance + 028 Horizontal Misconvergence + 02a Horizontal Linearity + 02c Horizontal Linearity Balance + 030 Vertical Position + 032 Vertical Size + 034 Vertical Pincushion + 036 Vertical Pincushion Balance + 038 Vertical Misconvergence + 03a Vertical Linearity + 03c Vertical Linearity Balance + 040 Parallelogram Balance (Key Distortion) + 042 Trapezoidal Distortion (Key) + 044 Tilt (Rotation) + 046 Top Corner Distortion Control + 048 Top Corner Distortion Balance + 04a Bottom Corner Distortion Control + 04c Bottom Corner Distortion Balance + 056 Horizontal Moire + 058 Vertical Moire + 05e Input Level Select + 060 Input Source Select + 06c Red Video Black Level + 06e Green Video Black Level + 070 Blue Video Black Level + 0a2 Auto Size Center + 0a4 Polarity Horizontal Sychronization + 0a6 Polarity Vertical Synchronization + 0aa Screen Orientation + 0ac Horizontal Frequency in Hz + 0ae Vertical Frequency in 0.1 Hz + 0b0 Settings + 0ca On Screen Display (OSD) + 0d4 Stereo Mode +HUT 84 Power Device Page + 000 Undefined + 001 iName + 002 Present Status + 003 Changed Status + 004 UPS + 005 Power Supply + 010 Battery System + 011 Battery System ID + 012 Battery + 013 Battery ID + 014 Charger + 015 Charger ID + 016 Power Converter + 017 Power Converter ID + 018 Outlet System + 019 Outlet System ID + 01a Input + 01b Input ID + 01c Output + 01d Output ID + 01e Flow + 01f Flow ID + 020 Outlet + 021 Outlet ID + 022 Gang + 023 Gang ID + 024 Power Summary + 025 Power Summary ID + 030 Voltage + 031 Current + 032 Frequency + 033 Apparent Power + 034 Active Power + 035 Percent Load + 036 Temperature + 037 Humidity + 038 Bad Count + 040 Config Voltage + 041 Config Current + 042 Config Frequency + 043 Config Apparent Power + 044 Config Active Power + 045 Config Percent Load + 046 Config Temperature + 047 Config Humidity + 050 Switch On Control + 051 Switch Off Control + 052 Toggle Control + 053 Low Voltage Transfer + 054 High Voltage Transfer + 055 Delay Before Reboot + 056 Delay Before Startup + 057 Delay Before Shutdown + 058 Test + 059 Module Reset + 05a Audible Alarm Control + 060 Present + 061 Good + 062 Internal Failure + 063 Voltage out of range + 064 Frequency out of range + 065 Overload + 066 Over Charged + 067 Over Temperature + 068 Shutdown Requested + 069 Shutdown Imminent + 06a Reserved + 06b Switch On/Off + 06c Switchable + 06d Used + 06e Boost + 06f Buck + 070 Initialized + 071 Tested + 072 Awaiting Power + 073 Communication Lost + 0fd iManufacturer + 0fe iProduct + 0ff iSerialNumber +HUT 85 Battery System Page + 000 Undefined + 001 SMB Battery Mode + 002 SMB Battery Status + 003 SMB Alarm Warning + 004 SMB Charger Mode + 005 SMB Charger Status + 006 SMB Charger Spec Info + 007 SMB Selector State + 008 SMB Selector Presets + 009 SMB Selector Info + 010 Optional Mfg. Function 1 + 011 Optional Mfg. Function 2 + 012 Optional Mfg. Function 3 + 013 Optional Mfg. Function 4 + 014 Optional Mfg. Function 5 + 015 Connection to SMBus + 016 Output Connection + 017 Charger Connection + 018 Battery Insertion + 019 Use Next + 01a OK to use + 01b Battery Supported + 01c SelectorRevision + 01d Charging Indicator + 028 Manufacturer Access + 029 Remaining Capacity Limit + 02a Remaining Time Limit + 02b At Rate + 02c Capacity Mode + 02d Broadcast To Charger + 02e Primary Battery + 02f Charge Controller + 040 Terminate Charge + 041 Terminate Discharge + 042 Below Remaining Capacity Limit + 043 Remaining Time Limit Expired + 044 Charging + 045 Discharging + 046 Fully Charged + 047 Fully Discharged + 048 Conditioning Flag + 049 At Rate OK + 04a SMB Error Code + 04b Need Replacement + 060 At Rate Time To Full + 061 At Rate Time To Empty + 062 Average Current + 063 Max Error + 064 Relative State Of Charge + 065 Absolute State Of Charge + 066 Remaining Capacity + 067 Full Charge Capacity + 068 Run Time To Empty + 069 Average Time To Empty + 06a Average Time To Full + 06b Cycle Count + 080 Batt. Pack Model Level + 081 Internal Charge Controller + 082 Primary Battery Support + 083 Design Capacity + 084 Specification Info + 085 Manufacturer Date + 086 Serial Number + 087 iManufacturerName + 088 iDeviceName + 089 iDeviceChemistry + 08a Manufacturer Data + 08b Rechargeable + 08c Warning Capacity Limit + 08d Capacity Granularity 1 + 08e Capacity Granularity 2 + 08f iOEMInformation + 0c0 Inhibit Charge + 0c1 Enable Polling + 0c2 Reset To Zero + 0d0 AC Present + 0d1 Battery Present + 0d2 Power Fail + 0d3 Alarm Inhibited + 0d4 Thermistor Under Range + 0d5 Thermistor Hot + 0d6 Thermistor Cold + 0d7 Thermistor Over Range + 0d8 Voltage Out Of Range + 0d9 Current Out Of Range + 0da Current Not Regulated + 0db Voltage Not Regulated + 0dc Master Mode + 0f0 Charger Selector Support + 0f1 Charger Spec + 0f2 Level 2 + 0f3 Level 3 +HUT 86 Power Pages +HUT 87 Power Pages +HUT 8c Bar Code Scanner Page (POS) +HUT 8d Scale Page (POS) +HUT 90 Camera Control Page +HUT 91 Arcade Control Page +HUT f0 Cash Device + 0f1 Cash Drawer + 0f2 Cash Drawer Number + 0f3 Cash Drawer Set + 0f4 Cash Drawer Status +HUT ff Vendor Specific + +# List of Languages + +# Syntax: +# L language_id language_name +# dialect_id dialect_name + +L 0001 Arabic + 01 Saudi Arabia + 02 Iraq + 03 Egypt + 04 Libya + 05 Algeria + 06 Morocco + 07 Tunesia + 08 Oman + 09 Yemen + 0a Syria + 0b Jordan + 0c Lebanon + 0d Kuwait + 0e U.A.E + 0f Bahrain + 10 Qatar +L 0002 Bulgarian +L 0003 Catalan +L 0004 Chinese + 01 Traditional + 02 Simplified + 03 Hongkong SAR, PRC + 04 Singapore + 05 Macau SAR +L 0005 Czech +L 0006 Danish +L 0007 German + 01 German + 02 Swiss + 03 Austrian + 04 Luxembourg + 05 Liechtenstein +L 0008 Greek +L 0009 English + 01 US + 02 UK + 03 Australian + 04 Canadian + 05 New Zealand + 06 Ireland + 07 South Africa + 08 Jamaica + 09 Carribean + 0a Belize + 0b Trinidad + 0c Zimbabwe + 0d Philippines +L 000a Spanish + 01 Castilian + 02 Mexican + 03 Modern + 04 Guatemala + 05 Costa Rica + 06 Panama + 07 Dominican Republic + 08 Venzuela + 09 Colombia + 0a Peru + 0b Argentina + 0c Ecuador + 0d Chile + 0e Uruguay + 0f Paraguay + 10 Bolivia + 11 El Salvador + 12 Honduras + 13 Nicaragua + 14 Puerto Rico +L 000b Finnish +L 000c French + 01 French + 02 Belgian + 03 Canadian + 04 Swiss + 05 Luxembourg + 06 Monaco +L 000d Hebrew +L 000e Hungarian +L 000f Idelandic +L 0010 Italian + 01 Italian + 02 Swiss +L 0011 Japanese +L 0012 Korean + 01 Korean +L 0013 Dutch + 01 Dutch + 02 Belgian +L 0014 Norwegian + 01 Bokmal + 02 Nynorsk +L 0015 Polish +L 0016 Portuguese + 01 Portuguese + 02 Brazilian +L 0017 forgotten +L 0018 Romanian +L 0019 Russian +L 001a Serbian + 01 Croatian + 02 Latin + 03 Cyrillic +L 001b Slovak +L 001c Albanian +L 001d Swedish + 01 Swedish + 02 Finland +L 001e Thai +L 001f Turkish +L 0020 Urdu + 01 Pakistan + 02 India +L 0021 Indonesian +L 0022 Ukrainian +L 0023 Belarusian +L 0024 Slovenian +L 0025 Estonian +L 0026 Latvian +L 0027 Lithuanian + 01 Lithuanian +L 0028 forgotten +L 0029 Farsi +L 002a Vietnamese +L 002b Armenian +L 002c Azeri + 01 Cyrillic + 02 Latin +L 002d Basque +L 002e forgotten +L 002f Macedonian +L 0036 Afrikaans +L 0037 Georgian +L 0038 Faeroese +L 0039 Hindi +L 003e Malay + 01 Malaysia + 02 Brunei Darassalam +L 003f Kazak +L 0041 Awahili +L 0043 Uzbek + 01 Latin + 02 Cyrillic +L 0044 Tatar +L 0045 Bengali +L 0046 Punjabi +L 0047 Gujarati +L 0048 Oriya +L 0049 Tamil +L 004a Telugu +L 004b Kannada +L 004c Malayalam +L 004d Assamese +L 004e Marathi +L 004f Sanskrit +L 0057 Konkani +L 0058 Manipuri +L 0059 Sindhi +L 0060 Kashmiri + 02 India +L 0061 Nepali + 02 India + +# HID Descriptor bCountryCode +# HID Specification 1.11 (2001-06-27) page 23 +# +# Syntax: +# HCC country_code keymap_type + +HCC 00 Not supported +HCC 01 Arabic +HCC 02 Belgian +HCC 03 Canadian-Bilingual +HCC 04 Canadian-French +HCC 05 Czech Republic +HCC 06 Danish +HCC 07 Finnish +HCC 08 French +HCC 09 German +HCC 10 Greek +HCC 11 Hebrew +HCC 12 Hungary +HCC 13 International (ISO) +HCC 14 Italian +HCC 15 Japan (Katakana) +HCC 16 Korean +HCC 17 Latin American +HCC 18 Netherlands/Dutch +HCC 19 Norwegian +HCC 20 Persian (Farsi) +HCC 21 Poland +HCC 22 Portuguese +HCC 23 Russia +HCC 24 Slovakia +HCC 25 Spanish +HCC 26 Swedish +HCC 27 Swiss/French +HCC 28 Swiss/German +HCC 29 Switzerland +HCC 30 Taiwan +HCC 31 Turkish-Q +HCC 32 UK +HCC 33 US +HCC 34 Yugoslavia +HCC 35 Turkish-F + +# List of Video Class Terminal Types + +# Syntax: +# VT terminal_type terminal_type_name + +VT 0100 USB Vendor Specific +VT 0101 USB Streaming +VT 0200 Input Vendor Specific +VT 0201 Camera Sensor +VT 0202 Sequential Media +VT 0300 Output Vendor Specific +VT 0301 Generic Display +VT 0302 Sequential Media +VT 0400 External Vendor Specific +VT 0401 Composite Video +VT 0402 S-Video +VT 0403 Component Video diff --git a/modules/hp2101nw/usbip/vhci.h b/modules/hp2101nw/usbip/vhci.h new file mode 100644 index 0000000..0c7d436 --- /dev/null +++ b/modules/hp2101nw/usbip/vhci.h @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include <linux/device.h> +#include <linux/list.h> +#include <linux/spinlock.h> +#include <linux/sysfs.h> +#include <linux/types.h> +#include <linux/usb.h> +#include <linux/usb/hcd.h> +#include <linux/wait.h> + +struct vhci_device { + struct usb_device *udev; + + /* + * devid specifies a remote usb device uniquely instead + * of combination of busnum and devnum. + */ + __u32 devid; + + /* speed of a remote device */ + enum usb_device_speed speed; + + /* vhci root-hub port to which this device is attached */ + __u32 rhport; + + struct hp2101nw_device ud; + + /* lock for the below link lists */ + spinlock_t priv_lock; + + /* vhci_priv is linked to one of them. */ + struct list_head priv_tx; + struct list_head priv_rx; + + /* vhci_unlink is linked to one of them */ + struct list_head unlink_tx; + struct list_head unlink_rx; + + /* vhci_tx thread sleeps for this queue */ + wait_queue_head_t waitq_tx; +}; + +/* urb->hcpriv, use container_of() */ +struct vhci_priv { + unsigned long seqnum; + struct list_head list; + + struct vhci_device *vdev; + struct urb *urb; +}; + +struct vhci_unlink { + /* seqnum of this request */ + unsigned long seqnum; + + struct list_head list; + + /* seqnum of the unlink target */ + unsigned long unlink_seqnum; +}; + +/* + * The number of ports is less than 16 ? + * USB_MAXCHILDREN is statically defined to 16 in usb.h. Its maximum value + * would be 31 because the event_bits[1] of struct usb_hub is defined as + * unsigned long in hub.h + */ +#define VHCI_NPORTS 8 + +/* for usb_bus.hcpriv */ +struct vhci_hcd { + spinlock_t lock; + + u32 port_status[VHCI_NPORTS]; + + unsigned resuming:1; + unsigned long re_timeout; + + atomic_t seqnum; + + /* + * NOTE: + * wIndex shows the port number and begins from 1. + * But, the index of this array begins from 0. + */ + struct vhci_device vdev[VHCI_NPORTS]; +}; + +extern struct vhci_hcd *the_controller; +extern struct attribute_group dev_attr_group; +#define hardware (&the_controller->pdev.dev) + +/* vhci_hcd.c */ +void rh_port_connect(int rhport, enum usb_device_speed speed); +void rh_port_disconnect(int rhport); + +/* vhci_rx.c */ +struct urb *pickup_urb_and_free_priv(struct vhci_device *vdev, __u32 seqnum); +int vhci_rx_loop(void *data); + +/* vhci_tx.c */ +int vhci_tx_loop(void *data); + +static inline struct vhci_device *port_to_vdev(__u32 port) { + return &the_controller->vdev[port]; +} + +static inline struct vhci_hcd *hcd_to_vhci(struct usb_hcd *hcd) { + return (struct vhci_hcd *) (hcd->hcd_priv); +} + +static inline struct usb_hcd *vhci_to_hcd(struct vhci_hcd *vhci) { + return container_of((void *) vhci, struct usb_hcd, hcd_priv); +} + +static inline struct device *vhci_dev(struct vhci_hcd *vhci) { + return vhci_to_hcd(vhci)->self.controller; +} diff --git a/modules/hp2101nw/usbip/vhci_hcd.c b/modules/hp2101nw/usbip/vhci_hcd.c new file mode 100644 index 0000000..04b7348 --- /dev/null +++ b/modules/hp2101nw/usbip/vhci_hcd.c @@ -0,0 +1,1238 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/kthread.h> +#include <linux/module.h> +#include <linux/platform_device.h> +#include <linux/slab.h> + +#include "hp2101nw_common.h" +#include "vhci.h" + +#define DRIVER_AUTHOR "Reinhold Kainhofer" +#define DRIVER_DESC "HP2101nw 'Virtual' Host Controller (VHCI) Driver" + +/* + * TODO + * - update root hub emulation + * - move the emulation code to userland ? + * porting to other operating systems + * minimize kernel code + * - add suspend/resume code + * - clean up everything + */ + +/* See usb gadget dummy hcd */ + +static int vhci_hub_status(struct usb_hcd *hcd, char *buff); +static int vhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, + u16 wIndex, char *buff, u16 wLength); +static int vhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, + gfp_t mem_flags); +static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status); +static int vhci_start(struct usb_hcd *vhci_hcd); +static void vhci_stop(struct usb_hcd *hcd); +static int vhci_get_frame_number(struct usb_hcd *hcd); + +static const char driver_name[] = "hp2101_vhci_hcd"; +static const char driver_desc[] = "HP2101nw Virtual Host Controller"; + +struct vhci_hcd *the_controller; + +static const char * const bit_desc[] = { + "CONNECTION", /*0*/ + "ENABLE", /*1*/ + "SUSPEND", /*2*/ + "OVER_CURRENT", /*3*/ + "RESET", /*4*/ + "R5", /*5*/ + "R6", /*6*/ + "R7", /*7*/ + "POWER", /*8*/ + "LOWSPEED", /*9*/ + "HIGHSPEED", /*10*/ + "PORT_TEST", /*11*/ + "INDICATOR", /*12*/ + "R13", /*13*/ + "R14", /*14*/ + "R15", /*15*/ + "C_CONNECTION", /*16*/ + "C_ENABLE", /*17*/ + "C_SUSPEND", /*18*/ + "C_OVER_CURRENT", /*19*/ + "C_RESET", /*20*/ + "R21", /*21*/ + "R22", /*22*/ + "R23", /*23*/ + "R24", /*24*/ + "R25", /*25*/ + "R26", /*26*/ + "R27", /*27*/ + "R28", /*28*/ + "R29", /*29*/ + "R30", /*30*/ + "R31", /*31*/ +}; + +static void dump_port_status(u32 status) +{ + int i = 0; + + pr_debug("status %08x:", status); + for (i = 0; i < 32; i++) { + if (status & (1 << i)) + pr_debug(" %s", bit_desc[i]); + } + pr_debug("\n"); +} + +void rh_port_connect(int rhport, enum usb_device_speed speed) +{ + unsigned long flags; + + hp2101nw_dbg_vhci_rh("rh_port_connect %d\n", rhport); + + spin_lock_irqsave(&the_controller->lock, flags); + + the_controller->port_status[rhport] |= USB_PORT_STAT_CONNECTION + | (1 << USB_PORT_FEAT_C_CONNECTION); + + switch (speed) { + case USB_SPEED_HIGH: + the_controller->port_status[rhport] |= USB_PORT_STAT_HIGH_SPEED; + break; + case USB_SPEED_LOW: + the_controller->port_status[rhport] |= USB_PORT_STAT_LOW_SPEED; + break; + default: + break; + } + + /* spin_lock(&the_controller->vdev[rhport].ud.lock); + * the_controller->vdev[rhport].ud.status = VDEV_CONNECT; + * spin_unlock(&the_controller->vdev[rhport].ud.lock); */ + + spin_unlock_irqrestore(&the_controller->lock, flags); + + usb_hcd_poll_rh_status(vhci_to_hcd(the_controller)); +} + +void rh_port_disconnect(int rhport) +{ + unsigned long flags; + + hp2101nw_dbg_vhci_rh("rh_port_disconnect %d\n", rhport); + + spin_lock_irqsave(&the_controller->lock, flags); + /* stop_activity(dum, driver); */ + the_controller->port_status[rhport] &= ~USB_PORT_STAT_CONNECTION; + the_controller->port_status[rhport] |= + (1 << USB_PORT_FEAT_C_CONNECTION); + + /* not yet complete the disconnection + * spin_lock(&vdev->ud.lock); + * vdev->ud.status = VHC_ST_DISCONNECT; + * spin_unlock(&vdev->ud.lock); */ + + spin_unlock_irqrestore(&the_controller->lock, flags); + usb_hcd_poll_rh_status(vhci_to_hcd(the_controller)); +} + +#define PORT_C_MASK \ + ((USB_PORT_STAT_C_CONNECTION \ + | USB_PORT_STAT_C_ENABLE \ + | USB_PORT_STAT_C_SUSPEND \ + | USB_PORT_STAT_C_OVERCURRENT \ + | USB_PORT_STAT_C_RESET) << 16) + +/* + * This function is almostly the same as dummy_hcd.c:dummy_hub_status() without + * suspend/resume support. But, it is modified to provide multiple ports. + * + * @buf: a bitmap to show which port status has been changed. + * bit 0: reserved or used for another purpose? + * bit 1: the status of port 0 has been changed. + * bit 2: the status of port 1 has been changed. + * ... + * bit 7: the status of port 6 has been changed. + * bit 8: the status of port 7 has been changed. + * ... + * bit 15: the status of port 14 has been changed. + * + * So, the maximum number of ports is 31 ( port 0 to port 30) ? + * + * The return value is the actual transferred length in byte. If nothing has + * been changed, return 0. In the case that the number of ports is less than or + * equal to 6 (VHCI_NPORTS==7), return 1. + * + */ +static int vhci_hub_status(struct usb_hcd *hcd, char *buf) +{ + struct vhci_hcd *vhci; + unsigned long flags; + int retval = 0; + + /* the enough buffer is allocated according to USB_MAXCHILDREN */ + unsigned long *event_bits = (unsigned long *) buf; + int rhport; + int changed = 0; + + *event_bits = 0; + + vhci = hcd_to_vhci(hcd); + + spin_lock_irqsave(&vhci->lock, flags); + if (!HCD_HW_ACCESSIBLE(hcd)) { + hp2101nw_dbg_vhci_rh("hw accessible flag in on?\n"); + goto done; + } + + /* check pseudo status register for each port */ + for (rhport = 0; rhport < VHCI_NPORTS; rhport++) { + if ((vhci->port_status[rhport] & PORT_C_MASK)) { + /* The status of a port has been changed, */ + hp2101nw_dbg_vhci_rh("port %d is changed\n", rhport); + + *event_bits |= 1 << (rhport + 1); + changed = 1; + } + } + + pr_info("changed %d\n", changed); + + if (hcd->state == HC_STATE_SUSPENDED) + usb_hcd_resume_root_hub(hcd); + + if (changed) + retval = 1 + (VHCI_NPORTS / 8); + else + retval = 0; + +done: + spin_unlock_irqrestore(&vhci->lock, flags); + return retval; +} + +/* See hub_configure in hub.c */ +static inline void hub_descriptor(struct usb_hub_descriptor *desc) +{ + memset(desc, 0, sizeof(*desc)); + desc->bDescriptorType = 0x29; + desc->bDescLength = 9; + desc->wHubCharacteristics = (__force __u16) + (__constant_cpu_to_le16(0x0001)); + desc->bNbrPorts = VHCI_NPORTS; + desc->u.hs.DeviceRemovable[0] = 0xff; + desc->u.hs.DeviceRemovable[1] = 0xff; +} + +static int vhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, + u16 wIndex, char *buf, u16 wLength) +{ + struct vhci_hcd *dum; + int retval = 0; + unsigned long flags; + int rhport; + + u32 prev_port_status[VHCI_NPORTS]; + + if (!HCD_HW_ACCESSIBLE(hcd)) + return -ETIMEDOUT; + + /* + * NOTE: + * wIndex shows the port number and begins from 1. + */ + hp2101nw_dbg_vhci_rh("typeReq %x wValue %x wIndex %x\n", typeReq, wValue, + wIndex); + if (wIndex > VHCI_NPORTS) + pr_err("invalid port number %d\n", wIndex); + rhport = ((__u8)(wIndex & 0x00ff)) - 1; + + dum = hcd_to_vhci(hcd); + + spin_lock_irqsave(&dum->lock, flags); + + /* store old status and compare now and old later */ + if (hp2101nw_dbg_flag_vhci_rh) { + int i = 0; + for (i = 0; i < VHCI_NPORTS; i++) + prev_port_status[i] = dum->port_status[i]; + } + + switch (typeReq) { + case ClearHubFeature: + hp2101nw_dbg_vhci_rh(" ClearHubFeature\n"); + break; + case ClearPortFeature: + switch (wValue) { + case USB_PORT_FEAT_SUSPEND: + if (dum->port_status[rhport] & USB_PORT_STAT_SUSPEND) { + /* 20msec signaling */ + dum->resuming = 1; + dum->re_timeout = + jiffies + msecs_to_jiffies(20); + } + break; + case USB_PORT_FEAT_POWER: + hp2101nw_dbg_vhci_rh(" ClearPortFeature: " + "USB_PORT_FEAT_POWER\n"); + dum->port_status[rhport] = 0; + /* dum->address = 0; */ + /* dum->hdev = 0; */ + dum->resuming = 0; + break; + case USB_PORT_FEAT_C_RESET: + hp2101nw_dbg_vhci_rh(" ClearPortFeature: " + "USB_PORT_FEAT_C_RESET\n"); + switch (dum->vdev[rhport].speed) { + case USB_SPEED_HIGH: + dum->port_status[rhport] |= + USB_PORT_STAT_HIGH_SPEED; + break; + case USB_SPEED_LOW: + dum->port_status[rhport] |= + USB_PORT_STAT_LOW_SPEED; + break; + default: + break; + } + default: + hp2101nw_dbg_vhci_rh(" ClearPortFeature: default %x\n", + wValue); + dum->port_status[rhport] &= ~(1 << wValue); + break; + } + break; + case GetHubDescriptor: + hp2101nw_dbg_vhci_rh(" GetHubDescriptor\n"); + hub_descriptor((struct usb_hub_descriptor *) buf); + break; + case GetHubStatus: + hp2101nw_dbg_vhci_rh(" GetHubStatus\n"); + *(__le32 *) buf = __constant_cpu_to_le32(0); + break; + case GetPortStatus: + hp2101nw_dbg_vhci_rh(" GetPortStatus port %x\n", wIndex); + if (wIndex > VHCI_NPORTS || wIndex < 1) { + pr_err("invalid port number %d\n", wIndex); + retval = -EPIPE; + } + + /* we do no care of resume. */ + + /* whoever resets or resumes must GetPortStatus to + * complete it!! + * */ + if (dum->resuming && time_after(jiffies, dum->re_timeout)) { + dum->port_status[rhport] |= + (1 << USB_PORT_FEAT_C_SUSPEND); + dum->port_status[rhport] &= + ~(1 << USB_PORT_FEAT_SUSPEND); + dum->resuming = 0; + dum->re_timeout = 0; + /* if (dum->driver && dum->driver->resume) { + * spin_unlock (&dum->lock); + * dum->driver->resume (&dum->gadget); + * spin_lock (&dum->lock); + * } */ + } + + if ((dum->port_status[rhport] & (1 << USB_PORT_FEAT_RESET)) != + 0 && time_after(jiffies, dum->re_timeout)) { + dum->port_status[rhport] |= + (1 << USB_PORT_FEAT_C_RESET); + dum->port_status[rhport] &= + ~(1 << USB_PORT_FEAT_RESET); + dum->re_timeout = 0; + + if (dum->vdev[rhport].ud.status == + VDEV_ST_NOTASSIGNED) { + hp2101nw_dbg_vhci_rh(" enable rhport %d " + "(status %u)\n", + rhport, + dum->vdev[rhport].ud.status); + dum->port_status[rhport] |= + USB_PORT_STAT_ENABLE; + } +#if 0 + if (dum->driver) { + dum->port_status[rhport] |= + USB_PORT_STAT_ENABLE; + /* give it the best speed we agree on */ + dum->gadget.speed = dum->driver->speed; + dum->gadget.ep0->maxpacket = 64; + switch (dum->gadget.speed) { + case USB_SPEED_HIGH: + dum->port_status[rhport] |= + USB_PORT_STAT_HIGH_SPEED; + break; + case USB_SPEED_LOW: + dum->gadget.ep0->maxpacket = 8; + dum->port_status[rhport] |= + USB_PORT_STAT_LOW_SPEED; + break; + default: + dum->gadget.speed = USB_SPEED_FULL; + break; + } + } +#endif + } + ((u16 *) buf)[0] = cpu_to_le16(dum->port_status[rhport]); + ((u16 *) buf)[1] = cpu_to_le16(dum->port_status[rhport] >> 16); + + hp2101nw_dbg_vhci_rh(" GetPortStatus bye %x %x\n", ((u16 *)buf)[0], + ((u16 *)buf)[1]); + break; + case SetHubFeature: + hp2101nw_dbg_vhci_rh(" SetHubFeature\n"); + retval = -EPIPE; + break; + case SetPortFeature: + switch (wValue) { + case USB_PORT_FEAT_SUSPEND: + hp2101nw_dbg_vhci_rh(" SetPortFeature: " + "USB_PORT_FEAT_SUSPEND\n"); +#if 0 + dum->port_status[rhport] |= + (1 << USB_PORT_FEAT_SUSPEND); + if (dum->driver->suspend) { + spin_unlock(&dum->lock); + dum->driver->suspend(&dum->gadget); + spin_lock(&dum->lock); + } +#endif + break; + case USB_PORT_FEAT_RESET: + hp2101nw_dbg_vhci_rh(" SetPortFeature: " + "USB_PORT_FEAT_RESET\n"); + /* if it's already running, disconnect first */ + if (dum->port_status[rhport] & USB_PORT_STAT_ENABLE) { + dum->port_status[rhport] &= + ~(USB_PORT_STAT_ENABLE | + USB_PORT_STAT_LOW_SPEED | + USB_PORT_STAT_HIGH_SPEED); +#if 0 + if (dum->driver) { + dev_dbg(hardware, "disconnect\n"); + stop_activity(dum, dum->driver); + } +#endif + + /* FIXME test that code path! */ + } + /* 50msec reset signaling */ + dum->re_timeout = jiffies + msecs_to_jiffies(50); + + /* FALLTHROUGH */ + default: + hp2101nw_dbg_vhci_rh(" SetPortFeature: default %d\n", + wValue); + dum->port_status[rhport] |= (1 << wValue); + break; + } + break; + + default: + pr_err("default: no such request\n"); + /* dev_dbg (hardware, + * "hub control req%04x v%04x i%04x l%d\n", + * typeReq, wValue, wIndex, wLength); */ + + /* "protocol stall" on error */ + retval = -EPIPE; + } + + if (hp2101nw_dbg_flag_vhci_rh) { + pr_debug("port %d\n", rhport); + dump_port_status(prev_port_status[rhport]); + dump_port_status(dum->port_status[rhport]); + } + hp2101nw_dbg_vhci_rh(" bye\n"); + + spin_unlock_irqrestore(&dum->lock, flags); + + return retval; +} + +static struct vhci_device *get_vdev(struct usb_device *udev) +{ + int i; + + if (!udev) + return NULL; + + for (i = 0; i < VHCI_NPORTS; i++) + if (the_controller->vdev[i].udev == udev) + return port_to_vdev(i); + + return NULL; +} + +static void vhci_tx_urb(struct urb *urb) +{ + struct vhci_device *vdev = get_vdev(urb->dev); + struct vhci_priv *priv; + unsigned long flag; + + if (!vdev) { + pr_err("could not get virtual device"); + /* BUG(); */ + return; + } + + priv = kzalloc(sizeof(struct vhci_priv), GFP_ATOMIC); + + spin_lock_irqsave(&vdev->priv_lock, flag); + + if (!priv) { + dev_err(&urb->dev->dev, "malloc vhci_priv\n"); + spin_unlock_irqrestore(&vdev->priv_lock, flag); + hp2101nw_event_add(&vdev->ud, VDEV_EVENT_ERROR_MALLOC); + return; + } + + priv->seqnum = atomic_inc_return(&the_controller->seqnum); + if (priv->seqnum == 0xffff) + dev_info(&urb->dev->dev, "seqnum max\n"); + + priv->vdev = vdev; + priv->urb = urb; + + urb->hcpriv = (void *) priv; + + list_add_tail(&priv->list, &vdev->priv_tx); + + wake_up(&vdev->waitq_tx); + spin_unlock_irqrestore(&vdev->priv_lock, flag); +} + +static int vhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, + gfp_t mem_flags) +{ + struct device *dev = &urb->dev->dev; + int ret = 0; + unsigned long flags; + struct vhci_device *vdev; + + hp2101nw_dbg_vhci_hc("enter, usb_hcd %p urb %p mem_flags %d\n", + hcd, urb, mem_flags); + + /* patch to usb_sg_init() is in 2.5.60 */ + BUG_ON(!urb->transfer_buffer && urb->transfer_buffer_length); + + spin_lock_irqsave(&the_controller->lock, flags); + + if (urb->status != -EINPROGRESS) { + dev_err(dev, "URB already unlinked!, status %d\n", urb->status); + spin_unlock_irqrestore(&the_controller->lock, flags); + return urb->status; + } + + vdev = port_to_vdev(urb->dev->portnum-1); + + /* refuse enqueue for dead connection */ + spin_lock(&vdev->ud.lock); + if (vdev->ud.status == VDEV_ST_NULL || + vdev->ud.status == VDEV_ST_ERROR) { + dev_err(dev, "enqueue for inactive port %d\n", vdev->rhport); + spin_unlock(&vdev->ud.lock); + spin_unlock_irqrestore(&the_controller->lock, flags); + return -ENODEV; + } + spin_unlock(&vdev->ud.lock); + + ret = usb_hcd_link_urb_to_ep(hcd, urb); + if (ret) + goto no_need_unlink; + + /* + * The enumeration process is as follows; + * + * 1. Get_Descriptor request to DevAddrs(0) EndPoint(0) + * to get max packet length of default pipe + * + * 2. Set_Address request to DevAddr(0) EndPoint(0) + * + */ + if (usb_pipedevice(urb->pipe) == 0) { + __u8 type = usb_pipetype(urb->pipe); + struct usb_ctrlrequest *ctrlreq = + (struct usb_ctrlrequest *) urb->setup_packet; + + if (type != PIPE_CONTROL || !ctrlreq) { + dev_err(dev, "invalid request to devnum 0\n"); + ret = -EINVAL; + goto no_need_xmit; + } + + switch (ctrlreq->bRequest) { + case USB_REQ_SET_ADDRESS: + /* set_address may come when a device is reset */ + dev_info(dev, "SetAddress Request (%d) to port %d\n", + ctrlreq->wValue, vdev->rhport); + + if (vdev->udev) + usb_put_dev(vdev->udev); + vdev->udev = usb_get_dev(urb->dev); + + spin_lock(&vdev->ud.lock); + vdev->ud.status = VDEV_ST_USED; + spin_unlock(&vdev->ud.lock); + + if (urb->status == -EINPROGRESS) { + /* This request is successfully completed. */ + /* If not -EINPROGRESS, possibly unlinked. */ + urb->status = 0; + } + + goto no_need_xmit; + + case USB_REQ_GET_DESCRIPTOR: + if (ctrlreq->wValue == (USB_DT_DEVICE << 8)) + hp2101nw_dbg_vhci_hc("Not yet?: " + "Get_Descriptor to device 0 " + "(get max pipe size)\n"); + + if (vdev->udev) + usb_put_dev(vdev->udev); + vdev->udev = usb_get_dev(urb->dev); + goto out; + + default: + /* NOT REACHED */ + dev_err(dev, "invalid request to devnum 0 bRequest %u, " + "wValue %u\n", ctrlreq->bRequest, + ctrlreq->wValue); + ret = -EINVAL; + goto no_need_xmit; + } + + } + +out: + vhci_tx_urb(urb); + spin_unlock_irqrestore(&the_controller->lock, flags); + + return 0; + +no_need_xmit: + usb_hcd_unlink_urb_from_ep(hcd, urb); +no_need_unlink: + spin_unlock_irqrestore(&the_controller->lock, flags); + + usb_hcd_giveback_urb(vhci_to_hcd(the_controller), urb, urb->status); + + return ret; +} + +/* + * vhci_rx gives back the urb after receiving the reply of the urb. If an + * unlink pdu is sent or not, vhci_rx receives a normal return pdu and gives + * back its urb. For the driver unlinking the urb, the content of the urb is + * not important, but the calling to its completion handler is important; the + * completion of unlinking is notified by the completion handler. + * + * + * CLIENT SIDE + * + * - When vhci_hcd receives RET_SUBMIT, + * + * - case 1a). the urb of the pdu is not unlinking. + * - normal case + * => just give back the urb + * + * - case 1b). the urb of the pdu is unlinking. + * - hp2101nw.ko will return a reply of the unlinking request. + * => give back the urb now and go to case 2b). + * + * - When vhci_hcd receives RET_UNLINK, + * + * - case 2a). a submit request is still pending in vhci_hcd. + * - urb was really pending in hp2101nw.ko and urb_unlink_urb() was + * completed there. + * => free a pending submit request + * => notify unlink completeness by giving back the urb + * + * - case 2b). a submit request is *not* pending in vhci_hcd. + * - urb was already given back to the core driver. + * => do not give back the urb + * + * + * SERVER SIDE + * + * - When hp2101nw receives CMD_UNLINK, + * + * - case 3a). the urb of the unlink request is now in submission. + * => do usb_unlink_urb(). + * => after the unlink is completed, send RET_UNLINK. + * + * - case 3b). the urb of the unlink request is not in submission. + * - may be already completed or never be received + * => send RET_UNLINK + * + */ +static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) +{ + unsigned long flags; + struct vhci_priv *priv; + struct vhci_device *vdev; + + pr_info("dequeue a urb %p\n", urb); + + spin_lock_irqsave(&the_controller->lock, flags); + + priv = urb->hcpriv; + if (!priv) { + /* URB was never linked! or will be soon given back by + * vhci_rx. */ + spin_unlock_irqrestore(&the_controller->lock, flags); + return 0; + } + + { + int ret = 0; + ret = usb_hcd_check_unlink_urb(hcd, urb, status); + if (ret) { + spin_unlock_irqrestore(&the_controller->lock, flags); + return ret; + } + } + + /* send unlink request here? */ + vdev = priv->vdev; + + if (!vdev->ud.tcp_socket) { + /* tcp connection is closed */ + unsigned long flags2; + + spin_lock_irqsave(&vdev->priv_lock, flags2); + + pr_info("device %p seems to be disconnected\n", vdev); + list_del(&priv->list); + kfree(priv); + urb->hcpriv = NULL; + + spin_unlock_irqrestore(&vdev->priv_lock, flags2); + + /* + * If tcp connection is alive, we have sent CMD_UNLINK. + * vhci_rx will receive RET_UNLINK and give back the URB. + * Otherwise, we give back it here. + */ + pr_info("gives back urb %p\n", urb); + + usb_hcd_unlink_urb_from_ep(hcd, urb); + + spin_unlock_irqrestore(&the_controller->lock, flags); + usb_hcd_giveback_urb(vhci_to_hcd(the_controller), urb, + urb->status); + spin_lock_irqsave(&the_controller->lock, flags); + + } else { + /* tcp connection is alive */ + unsigned long flags2; + struct vhci_unlink *unlink; + + spin_lock_irqsave(&vdev->priv_lock, flags2); + + /* setup CMD_UNLINK pdu */ + unlink = kzalloc(sizeof(struct vhci_unlink), GFP_ATOMIC); + if (!unlink) { + pr_err("malloc vhci_unlink\n"); + spin_unlock_irqrestore(&vdev->priv_lock, flags2); + spin_unlock_irqrestore(&the_controller->lock, flags); + hp2101nw_event_add(&vdev->ud, VDEV_EVENT_ERROR_MALLOC); + return -ENOMEM; + } + + unlink->seqnum = atomic_inc_return(&the_controller->seqnum); + if (unlink->seqnum == 0xffff) + pr_info("seqnum max\n"); + + unlink->unlink_seqnum = priv->seqnum; + + pr_info("device %p seems to be still connected\n", vdev); + + /* send cmd_unlink and try to cancel the pending URB in the + * peer */ + list_add_tail(&unlink->list, &vdev->unlink_tx); + wake_up(&vdev->waitq_tx); + + spin_unlock_irqrestore(&vdev->priv_lock, flags2); + } + + spin_unlock_irqrestore(&the_controller->lock, flags); + + hp2101nw_dbg_vhci_hc("leave\n"); + return 0; +} + +static void vhci_device_unlink_cleanup(struct vhci_device *vdev) +{ + struct vhci_unlink *unlink, *tmp; + + spin_lock(&vdev->priv_lock); + + list_for_each_entry_safe(unlink, tmp, &vdev->unlink_tx, list) { + pr_info("unlink cleanup tx %lu\n", unlink->unlink_seqnum); + list_del(&unlink->list); + kfree(unlink); + } + + list_for_each_entry_safe(unlink, tmp, &vdev->unlink_rx, list) { + struct urb *urb; + + /* give back URB of unanswered unlink request */ + pr_info("unlink cleanup rx %lu\n", unlink->unlink_seqnum); + + urb = pickup_urb_and_free_priv(vdev, unlink->unlink_seqnum); + if (!urb) { + pr_info("the urb (seqnum %lu) was already given back\n", + unlink->unlink_seqnum); + list_del(&unlink->list); + kfree(unlink); + continue; + } + + urb->status = -ENODEV; + + spin_lock(&the_controller->lock); + usb_hcd_unlink_urb_from_ep(vhci_to_hcd(the_controller), urb); + spin_unlock(&the_controller->lock); + + usb_hcd_giveback_urb(vhci_to_hcd(the_controller), urb, + urb->status); + + list_del(&unlink->list); + kfree(unlink); + } + + spin_unlock(&vdev->priv_lock); +} + +/* + * The important thing is that only one context begins cleanup. + * This is why error handling and cleanup become simple. + * We do not want to consider race condition as possible. + */ +static void vhci_shutdown_connection(struct hp2101nw_device *ud) +{ + struct vhci_device *vdev = container_of(ud, struct vhci_device, ud); + + /* need this? see stub_dev.c */ + if (ud->tcp_socket) { + pr_debug("shutdown tcp_socket %p\n", ud->tcp_socket); + kernel_sock_shutdown(ud->tcp_socket, SHUT_RDWR); + } + + /* kill threads related to this sdev, if v.c. exists */ + if (vdev->ud.tcp_rx && !task_is_dead(vdev->ud.tcp_rx)) + kthread_stop(vdev->ud.tcp_rx); + if (vdev->ud.tcp_tx && !task_is_dead(vdev->ud.tcp_tx)) + kthread_stop(vdev->ud.tcp_tx); + + pr_info("stop threads\n"); + + /* active connection is closed */ + if (vdev->ud.tcp_socket != NULL) { + sock_release(vdev->ud.tcp_socket); + vdev->ud.tcp_socket = NULL; + } + pr_info("release socket\n"); + + vhci_device_unlink_cleanup(vdev); + + /* + * rh_port_disconnect() is a trigger of ... + * usb_disable_device(): + * disable all the endpoints for a USB device. + * usb_disable_endpoint(): + * disable endpoints. pending urbs are unlinked(dequeued). + * + * NOTE: After calling rh_port_disconnect(), the USB device drivers of a + * deteched device should release used urbs in a cleanup function(i.e. + * xxx_disconnect()). Therefore, vhci_hcd does not need to release + * pushed urbs and their private data in this function. + * + * NOTE: vhci_dequeue() must be considered carefully. When shutdowning + * a connection, vhci_shutdown_connection() expects vhci_dequeue() + * gives back pushed urbs and frees their private data by request of + * the cleanup function of a USB driver. When unlinking a urb with an + * active connection, vhci_dequeue() does not give back the urb which + * is actually given back by vhci_rx after receiving its return pdu. + * + */ + rh_port_disconnect(vdev->rhport); + + pr_info("disconnect device\n"); +} + + +static void vhci_device_reset(struct hp2101nw_device *ud) +{ + struct vhci_device *vdev = container_of(ud, struct vhci_device, ud); + + spin_lock(&ud->lock); + + vdev->speed = 0; + vdev->devid = 0; + + if (vdev->udev) + usb_put_dev(vdev->udev); + vdev->udev = NULL; + + ud->tcp_socket = NULL; + ud->status = VDEV_ST_NULL; + + spin_unlock(&ud->lock); +} + +static void vhci_device_unusable(struct hp2101nw_device *ud) +{ + spin_lock(&ud->lock); + ud->status = VDEV_ST_ERROR; + spin_unlock(&ud->lock); +} + +static void vhci_device_init(struct vhci_device *vdev) { + memset(vdev, 0, sizeof(*vdev)); + + vdev->ud.side = HP2101NW_VHCI; + vdev->ud.status = VDEV_ST_NULL; + /* vdev->ud.lock = SPIN_LOCK_UNLOCKED; */ + spin_lock_init(&vdev->ud.lock); + + INIT_LIST_HEAD(&vdev->priv_rx); + INIT_LIST_HEAD(&vdev->priv_tx); + INIT_LIST_HEAD(&vdev->unlink_tx); + INIT_LIST_HEAD(&vdev->unlink_rx); + /* vdev->priv_lock = SPIN_LOCK_UNLOCKED; */ + spin_lock_init(&vdev->priv_lock); + + init_waitqueue_head(&vdev->waitq_tx); + + vdev->ud.eh_ops.shutdown = vhci_shutdown_connection; + vdev->ud.eh_ops.reset = vhci_device_reset; + vdev->ud.eh_ops.unusable = vhci_device_unusable; + + hp2101nw_start_eh(&vdev->ud); +} + +static int vhci_start(struct usb_hcd *hcd) { + struct vhci_hcd *vhci = hcd_to_vhci(hcd); + int rhport; + int err = 0; + + hp2101nw_dbg_vhci_hc("enter vhci_start\n"); + + /* initialize private data of usb_hcd */ + + for (rhport = 0; rhport < VHCI_NPORTS; rhport++) { + struct vhci_device *vdev = &vhci->vdev[rhport]; + vhci_device_init(vdev); + vdev->rhport = rhport; + } + + atomic_set(&vhci->seqnum, 0); + spin_lock_init(&vhci->lock); + + hcd->power_budget = 0; /* no limit */ + hcd->state = HC_STATE_RUNNING; + hcd->uses_new_polling = 1; + + /* vhci_hcd is now ready to be controlled through sysfs */ + err = sysfs_create_group(&vhci_dev(vhci)->kobj, &dev_attr_group); + if (err) { + pr_err("create sysfs files\n"); + return err; + } + + return 0; +} + +static void vhci_stop(struct usb_hcd *hcd) { + struct vhci_hcd *vhci = hcd_to_vhci(hcd); + int rhport = 0; + + hp2101nw_dbg_vhci_hc("stop VHCI controller\n"); + + /* 1. remove the userland interface of vhci_hcd */ + sysfs_remove_group(&vhci_dev(vhci)->kobj, &dev_attr_group); + + /* 2. shutdown all the ports of vhci_hcd */ + for (rhport = 0 ; rhport < VHCI_NPORTS; rhport++) { + struct vhci_device *vdev = &vhci->vdev[rhport]; + + hp2101nw_event_add(&vdev->ud, VDEV_EVENT_REMOVED); + hp2101nw_stop_eh(&vdev->ud); + } +} + +static int vhci_get_frame_number(struct usb_hcd *hcd) { + pr_err("Not yet implemented\n"); + return 0; +} + +#ifdef CONFIG_PM + +/* FIXME: suspend/resume */ +static int vhci_bus_suspend(struct usb_hcd *hcd) { + struct vhci_hcd *vhci = hcd_to_vhci(hcd); + + dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__); + + spin_lock_irq(&vhci->lock); + /* vhci->rh_state = DUMMY_RH_SUSPENDED; + * set_link_state(vhci); */ + hcd->state = HC_STATE_SUSPENDED; + spin_unlock_irq(&vhci->lock); + + return 0; +} + +static int vhci_bus_resume(struct usb_hcd *hcd) { + struct vhci_hcd *vhci = hcd_to_vhci(hcd); + int rc = 0; + + dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__); + + spin_lock_irq(&vhci->lock); + if (!HCD_HW_ACCESSIBLE(hcd)) { + rc = -ESHUTDOWN; + } else { + /* vhci->rh_state = DUMMY_RH_RUNNING; + * set_link_state(vhci); + * if (!list_empty(&vhci->urbp_list)) + * mod_timer(&vhci->timer, jiffies); */ + hcd->state = HC_STATE_RUNNING; + } + spin_unlock_irq(&vhci->lock); + return rc; + + return 0; +} + +#else + +#define vhci_bus_suspend NULL +#define vhci_bus_resume NULL +#endif + +static struct hc_driver vhci_hc_driver = { + .description = driver_name, + .product_desc = driver_desc, + .hcd_priv_size = sizeof(struct vhci_hcd), + + .flags = HCD_USB2, + + .start = vhci_start, + .stop = vhci_stop, + + .urb_enqueue = vhci_urb_enqueue, + .urb_dequeue = vhci_urb_dequeue, + + .get_frame_number = vhci_get_frame_number, + + .hub_status_data = vhci_hub_status, + .hub_control = vhci_hub_control, + .bus_suspend = vhci_bus_suspend, + .bus_resume = vhci_bus_resume, +}; + +static int vhci_hcd_probe(struct platform_device *pdev) { + struct usb_hcd *hcd; + int ret; + + hp2101nw_dbg_vhci_hc("name %s id %d\n", pdev->name, pdev->id); + + /* will be removed */ + if (pdev->dev.dma_mask) { + dev_info(&pdev->dev, "vhci_hcd DMA not supported\n"); + return -EINVAL; + } + + /* + * Allocate and initialize hcd. + * Our private data is also allocated automatically. + */ + hcd = usb_create_hcd(&vhci_hc_driver, &pdev->dev, dev_name(&pdev->dev)); + if (!hcd) { + pr_err("create hcd failed\n"); + return -ENOMEM; + } + hcd->has_tt = 1; + + /* this is private data for vhci_hcd */ + the_controller = hcd_to_vhci(hcd); + + /* + * Finish generic HCD structure initialization and register. + * Call the driver's reset() and start() routines. + */ + ret = usb_add_hcd(hcd, 0, 0); + if (ret != 0) { + pr_err("usb_add_hcd failed %d\n", ret); + usb_put_hcd(hcd); + the_controller = NULL; + return ret; + } + + hp2101nw_dbg_vhci_hc("bye\n"); + return 0; +} + +static int vhci_hcd_remove(struct platform_device *pdev) { + struct usb_hcd *hcd; + + hcd = platform_get_drvdata(pdev); + if (!hcd) + return 0; + + /* + * Disconnects the root hub, + * then reverses the effects of usb_add_hcd(), + * invoking the HCD's stop() methods. + */ + usb_remove_hcd(hcd); + usb_put_hcd(hcd); + the_controller = NULL; + + return 0; +} + +#ifdef CONFIG_PM + +/* what should happen for USB/IP under suspend/resume? */ +static int vhci_hcd_suspend(struct platform_device *pdev, pm_message_t state) { + struct usb_hcd *hcd; + int rhport = 0; + int connected = 0; + int ret = 0; + + hcd = platform_get_drvdata(pdev); + + spin_lock(&the_controller->lock); + + for (rhport = 0; rhport < VHCI_NPORTS; rhport++) + if (the_controller->port_status[rhport] & + USB_PORT_STAT_CONNECTION) + connected += 1; + + spin_unlock(&the_controller->lock); + + if (connected > 0) { + dev_info(&pdev->dev, "We have %d active connection%s. Do not " + "suspend.\n", connected, (connected == 1 ? "" : "s")); + ret = -EBUSY; + } else { + dev_info(&pdev->dev, "suspend vhci_hcd"); + clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); + } + + return ret; +} + +static int vhci_hcd_resume(struct platform_device *pdev) { + struct usb_hcd *hcd; + + dev_dbg(&pdev->dev, "%s\n", __func__); + + hcd = platform_get_drvdata(pdev); + set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); + usb_hcd_poll_rh_status(hcd); + + return 0; +} + +#else +#define vhci_hcd_suspend NULL +#define vhci_hcd_resume NULL +#endif + +static struct platform_driver vhci_driver = { + .probe = vhci_hcd_probe, + .remove = __devexit_p(vhci_hcd_remove), + .suspend = vhci_hcd_suspend, + .resume = vhci_hcd_resume, + .driver = { + .name = (char *) driver_name, + .owner = THIS_MODULE, + }, +}; + +/* + * The VHCI 'device' is 'virtual'; not a real plug&play hardware. + * We need to add this virtual device as a platform device arbitrarily: + * 1. platform_device_register() + */ +static void the_pdev_release(struct device *dev) { + return; +} + +static struct platform_device the_pdev = { + /* should be the same name as driver_name */ + .name = (char *) driver_name, + .id = -1, + .dev = { + /* .driver = &vhci_driver, */ + .release = the_pdev_release, + }, +}; + +static int __init vhci_init(void) { + int ret; + + if (usb_disabled()) + return -ENODEV; + + ret = platform_driver_register(&vhci_driver); + if (ret < 0) + goto err_driver_register; + + ret = platform_device_register(&the_pdev); + if (ret < 0) + goto err_platform_device_register; + + pr_info(DRIVER_DESC " v" HP2101NW_VERSION "\n"); + return ret; + +err_platform_device_register: + platform_driver_unregister(&vhci_driver); +err_driver_register: + return ret; +} + +static void __exit vhci_cleanup(void) { + platform_device_unregister(&the_pdev); + platform_driver_unregister(&vhci_driver); +} + +module_init(vhci_init); +module_exit(vhci_cleanup); + +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_LICENSE("GPL"); +MODULE_VERSION(HP2101NW_VERSION); + + diff --git a/modules/hp2101nw/usbip/vhci_hcd.o b/modules/hp2101nw/usbip/vhci_hcd.o new file mode 100644 index 0000000000000000000000000000000000000000..65f4e4d2dbb1f19ffc3bffc6a2dbb1d872521f88 GIT binary patch literal 23696 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 literal 0 HcmV?d00001 diff --git a/modules/hp2101nw/usbip/vhci_rx.c b/modules/hp2101nw/usbip/vhci_rx.c new file mode 100644 index 0000000..56e9f0e --- /dev/null +++ b/modules/hp2101nw/usbip/vhci_rx.c @@ -0,0 +1,248 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + */ + +#include <linux/kthread.h> +#include <linux/slab.h> + +#include "hp2101nw_common.h" +#include "vhci.h" + +/* get URB from transmitted urb queue. caller must hold vdev->priv_lock */ +struct urb *pickup_urb_and_free_priv(struct vhci_device *vdev, __u32 seqnum) +{ + struct vhci_priv *priv, *tmp; + struct urb *urb = NULL; + int status; + + list_for_each_entry_safe(priv, tmp, &vdev->priv_rx, list) { + if (priv->seqnum == seqnum) { + urb = priv->urb; + status = urb->status; + + hp2101nw_dbg_vhci_rx("find urb %p vurb %p seqnum %u\n", + urb, priv, seqnum); + + /* TODO: fix logic here to improve indent situtation */ + if (status != -EINPROGRESS) { + if (status == -ENOENT || + status == -ECONNRESET) + dev_info(&urb->dev->dev, + "urb %p was unlinked " + "%ssynchronuously.\n", urb, + status == -ENOENT ? "" : "a"); + else + dev_info(&urb->dev->dev, + "urb %p may be in a error, " + "status %d\n", urb, status); + } + + list_del(&priv->list); + kfree(priv); + urb->hcpriv = NULL; + + break; + } + } + + return urb; +} + +static void vhci_recv_ret_submit(struct vhci_device *vdev, + struct hp2101nw_header *pdu) +{ + struct hp2101nw_device *ud = &vdev->ud; + struct urb *urb; + + spin_lock(&vdev->priv_lock); + urb = pickup_urb_and_free_priv(vdev, pdu->base.seqnum); + spin_unlock(&vdev->priv_lock); + + if (!urb) { + pr_err("cannot find a urb of seqnum %u\n", pdu->base.seqnum); + pr_info("max seqnum %d\n", + atomic_read(&the_controller->seqnum)); + hp2101nw_event_add(ud, VDEV_EVENT_ERROR_TCP); + return; + } + + /* unpack the pdu to a urb */ + hp2101nw_pack_pdu(pdu, urb, HP2101NW_RET_SUBMIT, 0); + + /* recv transfer buffer */ + if (hp2101nw_recv_xbuff(ud, urb) < 0) + return; + + /* recv iso_packet_descriptor */ + if (hp2101nw_recv_iso(ud, urb) < 0) + return; + + /* restore the padding in iso packets */ + if (hp2101nw_pad_iso(ud, urb) < 0) + return; + + if (hp2101nw_dbg_flag_vhci_rx) + hp2101nw_dump_urb(urb); + + hp2101nw_dbg_vhci_rx("now giveback urb %p\n", urb); + + spin_lock(&the_controller->lock); + usb_hcd_unlink_urb_from_ep(vhci_to_hcd(the_controller), urb); + spin_unlock(&the_controller->lock); + + usb_hcd_giveback_urb(vhci_to_hcd(the_controller), urb, urb->status); + + hp2101nw_dbg_vhci_rx("Leave\n"); + + return; +} + +static struct vhci_unlink *dequeue_pending_unlink(struct vhci_device *vdev, + struct hp2101nw_header *pdu) +{ + struct vhci_unlink *unlink, *tmp; + + spin_lock(&vdev->priv_lock); + + list_for_each_entry_safe(unlink, tmp, &vdev->unlink_rx, list) { + pr_info("unlink->seqnum %lu\n", unlink->seqnum); + if (unlink->seqnum == pdu->base.seqnum) { + hp2101nw_dbg_vhci_rx("found pending unlink, %lu\n", + unlink->seqnum); + list_del(&unlink->list); + + spin_unlock(&vdev->priv_lock); + return unlink; + } + } + + spin_unlock(&vdev->priv_lock); + + return NULL; +} + +static void vhci_recv_ret_unlink(struct vhci_device *vdev, + struct hp2101nw_header *pdu) +{ + struct vhci_unlink *unlink; + struct urb *urb; + + hp2101nw_dump_header(pdu); + + unlink = dequeue_pending_unlink(vdev, pdu); + if (!unlink) { + pr_info("cannot find the pending unlink %u\n", + pdu->base.seqnum); + return; + } + + spin_lock(&vdev->priv_lock); + urb = pickup_urb_and_free_priv(vdev, unlink->unlink_seqnum); + spin_unlock(&vdev->priv_lock); + + if (!urb) { + /* + * I get the result of a unlink request. But, it seems that I + * already received the result of its submit result and gave + * back the URB. + */ + pr_info("the urb (seqnum %d) was already given backed\n", + pdu->base.seqnum); + } else { + hp2101nw_dbg_vhci_rx("now giveback urb %p\n", urb); + + /* If unlink is succeed, status is -ECONNRESET */ + urb->status = pdu->u.ret_unlink.status; + pr_info("urb->status %d\n", urb->status); + + spin_lock(&the_controller->lock); + usb_hcd_unlink_urb_from_ep(vhci_to_hcd(the_controller), urb); + spin_unlock(&the_controller->lock); + + usb_hcd_giveback_urb(vhci_to_hcd(the_controller), urb, + urb->status); + } + + kfree(unlink); + + return; +} + +static int vhci_priv_tx_empty(struct vhci_device *vdev) { + int empty = 0; + + spin_lock(&vdev->priv_lock); + empty = list_empty(&vdev->priv_rx); + spin_unlock(&vdev->priv_lock); + + return empty; +} + +/* recv a pdu */ +static void vhci_rx_pdu(struct hp2101nw_device *ud) { + int ret; + struct hp2101nw_header pdu; + struct vhci_device *vdev = container_of(ud, struct vhci_device, ud); + + hp2101nw_dbg_vhci_rx("Enter\n"); + memset(&pdu, 0, sizeof(pdu)); + + /* 1. receive a pdu header */ + ret = hp2101nw_xmit(0, ud->tcp_socket, (char *) &pdu, sizeof(pdu), 0); + if (ret < 0) { + if (ret == -ECONNRESET) + pr_info("connection reset by peer\n"); + else if (ret == -EAGAIN) { + /* ignore if connection was idle */ + if (vhci_priv_tx_empty(vdev)) + return; + pr_info("connection timed out with pending urbs\n"); + } else if (ret != -ERESTARTSYS) + pr_info("xmit failed %d\n", ret); + + hp2101nw_event_add(ud, VDEV_EVENT_ERROR_TCP); + return; + } + if (ret == 0) { + pr_info("connection closed"); + hp2101nw_event_add(ud, VDEV_EVENT_DOWN); + return; + } + if (ret != sizeof(pdu)) { + pr_err("received pdu size is %d, should be %d\n", ret, + (unsigned int)sizeof(pdu)); + hp2101nw_event_add(ud, VDEV_EVENT_ERROR_TCP); + return; + } + + hp2101nw_header_correct_endian(&pdu, 0); + + if (hp2101nw_dbg_flag_vhci_rx) + hp2101nw_dump_header(&pdu); + + switch (pdu.base.command) { + case HP2101NW_RET_SUBMIT: + vhci_recv_ret_submit(vdev, &pdu); + break; + case HP2101NW_RET_UNLINK: + vhci_recv_ret_unlink(vdev, &pdu); + break; + default: + /* NOT REACHED */ + pr_err("unknown pdu %u\n", pdu.base.command); + hp2101nw_dump_header(&pdu); + hp2101nw_event_add(ud, VDEV_EVENT_ERROR_TCP); + break; + } +} + +int vhci_rx_loop(void *data) { + struct hp2101nw_device *ud = data; + while (!kthread_should_stop()) { + if (hp2101nw_event_happened(ud)) + break; + vhci_rx_pdu(ud); + } + return 0; +} diff --git a/modules/hp2101nw/usbip/vhci_rx.o b/modules/hp2101nw/usbip/vhci_rx.o new file mode 100644 index 0000000000000000000000000000000000000000..8cbb3736bd8a260254d73f096c18c83739308322 GIT binary patch literal 7936 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 S+yomzf!PNWcLXsQ7#IMUn)^%u literal 0 HcmV?d00001 diff --git a/modules/hp2101nw/usbip/vhci_sysfs.c b/modules/hp2101nw/usbip/vhci_sysfs.c new file mode 100644 index 0000000..3da9e56 --- /dev/null +++ b/modules/hp2101nw/usbip/vhci_sysfs.c @@ -0,0 +1,244 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include <linux/kthread.h> +#include <linux/net.h> + +#include "hp2101nw_common.h" +#include "vhci.h" + +/* TODO: refine locking ?*/ + +/* Sysfs entry to show port status */ +static ssize_t show_status(struct device *dev, struct device_attribute *attr, + char *out) +{ + char *s = out; + int i = 0; + + BUG_ON(!the_controller || !out); + + spin_lock(&the_controller->lock); + + /* + * output example: + * prt sta spd dev socket local_busid + * 000 004 000 000 c5a7bb80 1-2.3 + * 001 004 000 000 d8cee980 2-3.4 + * + * IP address can be retrieved from a socket pointer address by looking + * up /proc/net/{tcp,tcp6}. Also, a userland program may remember a + * port number and its peer IP address. + */ + out += sprintf(out, "prt sta spd bus dev socket " + "local_busid\n"); + + for (i = 0; i < VHCI_NPORTS; i++) { + struct vhci_device *vdev = port_to_vdev(i); + + spin_lock(&vdev->ud.lock); + out += sprintf(out, "%03u %03u ", i, vdev->ud.status); + + if (vdev->ud.status == VDEV_ST_USED) { + out += sprintf(out, "%03u %08x ", + vdev->speed, vdev->devid); + out += sprintf(out, "%16p ", vdev->ud.tcp_socket); + out += sprintf(out, "%s", dev_name(&vdev->udev->dev)); + + } else { + out += sprintf(out, "000 000 000 0000000000000000 0-0"); + } + + out += sprintf(out, "\n"); + spin_unlock(&vdev->ud.lock); + } + + spin_unlock(&the_controller->lock); + + return out - s; +} +static DEVICE_ATTR(status, S_IRUGO, show_status, NULL); + +/* Sysfs entry to shutdown a virtual connection */ +static int vhci_port_disconnect(__u32 rhport) +{ + struct vhci_device *vdev; + + hp2101nw_dbg_vhci_sysfs("enter\n"); + + /* lock */ + spin_lock(&the_controller->lock); + + vdev = port_to_vdev(rhport); + + spin_lock(&vdev->ud.lock); + if (vdev->ud.status == VDEV_ST_NULL) { + pr_err("not connected %d\n", vdev->ud.status); + + /* unlock */ + spin_unlock(&vdev->ud.lock); + spin_unlock(&the_controller->lock); + + return -EINVAL; + } + + /* unlock */ + spin_unlock(&vdev->ud.lock); + spin_unlock(&the_controller->lock); + + hp2101nw_event_add(&vdev->ud, VDEV_EVENT_DOWN); + + return 0; +} + +static ssize_t store_detach(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + int err; + __u32 rhport = 0; + + sscanf(buf, "%u", &rhport); + + /* check rhport */ + if (rhport >= VHCI_NPORTS) { + dev_err(dev, "invalid port %u\n", rhport); + return -EINVAL; + } + + err = vhci_port_disconnect(rhport); + if (err < 0) + return -EINVAL; + + hp2101nw_dbg_vhci_sysfs("Leave\n"); + + return count; +} +static DEVICE_ATTR(detach, S_IWUSR, NULL, store_detach); + +/* Sysfs entry to establish a virtual connection */ +static int valid_args(__u32 rhport, enum usb_device_speed speed) +{ + /* check rhport */ + if ((rhport < 0) || (rhport >= VHCI_NPORTS)) { + pr_err("port %u\n", rhport); + return -EINVAL; + } + + /* check speed */ + switch (speed) { + case USB_SPEED_LOW: + case USB_SPEED_FULL: + case USB_SPEED_HIGH: + case USB_SPEED_WIRELESS: + break; + default: + pr_err("speed %d\n", speed); + return -EINVAL; + } + + return 0; +} + +/* + * To start a new USB/IP attachment, a userland program needs to setup a TCP + * connection and then write its socket descriptor with remote device + * information into this sysfs file. + * + * A remote device is virtually attached to the root-hub port of @rhport with + * @speed. @devid is embedded into a request to specify the remote device in a + * server host. + * + * write() returns 0 on success, else negative errno. + */ +static ssize_t store_attach(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + struct vhci_device *vdev; + struct socket *socket; + int sockfd = 0; + __u32 rhport = 0, devid = 0, speed = 0; + + /* + * @rhport: port number of vhci_hcd + * @sockfd: socket descriptor of an established TCP connection + * @devid: unique device identifier in a remote host + * @speed: usb device speed in a remote host + */ + sscanf(buf, "%u %u %u %u", &rhport, &sockfd, &devid, &speed); + + hp2101nw_dbg_vhci_sysfs("rhport(%u) sockfd(%u) devid(%u) speed(%u)\n", + rhport, sockfd, devid, speed); + + /* check received parameters */ + if (valid_args(rhport, speed) < 0) + return -EINVAL; + + /* check sockfd */ + socket = sockfd_to_socket(sockfd); + if (!socket) + return -EINVAL; + + /* now need lock until setting vdev status as used */ + + /* begin a lock */ + spin_lock(&the_controller->lock); + vdev = port_to_vdev(rhport); + spin_lock(&vdev->ud.lock); + + if (vdev->ud.status != VDEV_ST_NULL) { + /* end of the lock */ + spin_unlock(&vdev->ud.lock); + spin_unlock(&the_controller->lock); + + dev_err(dev, "port %d already used\n", rhport); + return -EINVAL; + } + + dev_info(dev, "rhport(%u) sockfd(%d) devid(%u) speed(%u)\n", + rhport, sockfd, devid, speed); + + vdev->devid = devid; + vdev->speed = speed; + vdev->ud.tcp_socket = socket; + vdev->ud.status = VDEV_ST_NOTASSIGNED; + + spin_unlock(&vdev->ud.lock); + spin_unlock(&the_controller->lock); + /* end the lock */ + + vdev->ud.tcp_rx = kthread_run(vhci_rx_loop, &vdev->ud, "vhci_rx"); + vdev->ud.tcp_tx = kthread_run(vhci_tx_loop, &vdev->ud, "vhci_tx"); + + rh_port_connect(rhport, speed); + + return count; +} +static DEVICE_ATTR(attach, S_IWUSR, NULL, store_attach); + +static struct attribute *dev_attrs[] = { + &dev_attr_status.attr, + &dev_attr_detach.attr, + &dev_attr_attach.attr, + &dev_attr_hp2101nw_debug.attr, + NULL, +}; + +struct attribute_group dev_attr_group = { + .attrs = dev_attrs, +}; diff --git a/modules/hp2101nw/usbip/vhci_sysfs.o b/modules/hp2101nw/usbip/vhci_sysfs.o new file mode 100644 index 0000000000000000000000000000000000000000..7548965aef4ccf8225c814ee982fbd74b68e1899 GIT binary patch literal 8216 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 literal 0 HcmV?d00001 diff --git a/modules/hp2101nw/usbip/vhci_tx.c b/modules/hp2101nw/usbip/vhci_tx.c new file mode 100644 index 0000000..38db12a --- /dev/null +++ b/modules/hp2101nw/usbip/vhci_tx.c @@ -0,0 +1,226 @@ +/* + * Copyright (C) 2003-2008 Takahiro Hirofuchi + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include <linux/kthread.h> +#include <linux/slab.h> + +#include "hp2101nw_common.h" +#include "vhci.h" + +static void setup_cmd_submit_pdu(struct hp2101nw_header *pdup, struct urb *urb) +{ + struct vhci_priv *priv = ((struct vhci_priv *)urb->hcpriv); + struct vhci_device *vdev = priv->vdev; + + hp2101nw_dbg_vhci_tx("URB, local devnum %u, remote devid %u\n", + usb_pipedevice(urb->pipe), vdev->devid); + + pdup->base.command = HP2101NW_CMD_SUBMIT; + pdup->base.seqnum = priv->seqnum; + pdup->base.devid = vdev->devid; + pdup->base.direction = usb_pipein(urb->pipe) ? + HP2101NW_DIR_IN : HP2101NW_DIR_OUT; + pdup->base.ep = usb_pipeendpoint(urb->pipe); + + hp2101nw_pack_pdu(pdup, urb, HP2101NW_CMD_SUBMIT, 1); + + if (urb->setup_packet) + memcpy(pdup->u.cmd_submit.setup, urb->setup_packet, 8); +} + +static struct vhci_priv *dequeue_from_priv_tx(struct vhci_device *vdev) +{ + unsigned long flags; + struct vhci_priv *priv, *tmp; + + spin_lock_irqsave(&vdev->priv_lock, flags); + + list_for_each_entry_safe(priv, tmp, &vdev->priv_tx, list) { + list_move_tail(&priv->list, &vdev->priv_rx); + spin_unlock_irqrestore(&vdev->priv_lock, flags); + return priv; + } + + spin_unlock_irqrestore(&vdev->priv_lock, flags); + + return NULL; +} + +static int vhci_send_cmd_submit(struct vhci_device *vdev) +{ + struct vhci_priv *priv = NULL; + + struct msghdr msg; + struct kvec iov[3]; + size_t txsize; + + size_t total_size = 0; + + while ((priv = dequeue_from_priv_tx(vdev)) != NULL) { + int ret; + struct urb *urb = priv->urb; + struct hp2101nw_header pdu_header; + void *iso_buffer = NULL; + + txsize = 0; + memset(&pdu_header, 0, sizeof(pdu_header)); + memset(&msg, 0, sizeof(msg)); + memset(&iov, 0, sizeof(iov)); + + hp2101nw_dbg_vhci_tx("setup txdata urb %p\n", urb); + + /* 1. setup hp2101nw_header */ + setup_cmd_submit_pdu(&pdu_header, urb); + hp2101nw_header_correct_endian(&pdu_header, 1); + + iov[0].iov_base = &pdu_header; + iov[0].iov_len = sizeof(pdu_header); + txsize += sizeof(pdu_header); + + /* 2. setup transfer buffer */ + if (!usb_pipein(urb->pipe) && urb->transfer_buffer_length > 0) { + iov[1].iov_base = urb->transfer_buffer; + iov[1].iov_len = urb->transfer_buffer_length; + txsize += urb->transfer_buffer_length; + } + + /* 3. setup iso_packet_descriptor */ + if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) { + ssize_t len = 0; + + iso_buffer = hp2101nw_alloc_iso_desc_pdu(urb, &len); + if (!iso_buffer) { + hp2101nw_event_add(&vdev->ud, + SDEV_EVENT_ERROR_MALLOC); + return -1; + } + + iov[2].iov_base = iso_buffer; + iov[2].iov_len = len; + txsize += len; + } + + ret = kernel_sendmsg(vdev->ud.tcp_socket, &msg, iov, 3, txsize); + if (ret != txsize) { + pr_err("sendmsg failed!, ret=%d for %zd\n", ret, + txsize); + kfree(iso_buffer); + hp2101nw_event_add(&vdev->ud, VDEV_EVENT_ERROR_TCP); + return -1; + } + + kfree(iso_buffer); + hp2101nw_dbg_vhci_tx("send txdata\n"); + + total_size += txsize; + } + + return total_size; +} + +static struct vhci_unlink *dequeue_from_unlink_tx(struct vhci_device *vdev) +{ + unsigned long flags; + struct vhci_unlink *unlink, *tmp; + + spin_lock_irqsave(&vdev->priv_lock, flags); + + list_for_each_entry_safe(unlink, tmp, &vdev->unlink_tx, list) { + list_move_tail(&unlink->list, &vdev->unlink_rx); + spin_unlock_irqrestore(&vdev->priv_lock, flags); + return unlink; + } + + spin_unlock_irqrestore(&vdev->priv_lock, flags); + + return NULL; +} + +static int vhci_send_cmd_unlink(struct vhci_device *vdev) +{ + struct vhci_unlink *unlink = NULL; + + struct msghdr msg; + struct kvec iov[3]; + size_t txsize; + + size_t total_size = 0; + + while ((unlink = dequeue_from_unlink_tx(vdev)) != NULL) { + int ret; + struct hp2101nw_header pdu_header; + + txsize = 0; + memset(&pdu_header, 0, sizeof(pdu_header)); + memset(&msg, 0, sizeof(msg)); + memset(&iov, 0, sizeof(iov)); + + hp2101nw_dbg_vhci_tx("setup cmd unlink, %lu\n", unlink->seqnum); + + /* 1. setup hp2101nw_header */ + pdu_header.base.command = HP2101NW_CMD_UNLINK; + pdu_header.base.seqnum = unlink->seqnum; + pdu_header.base.devid = vdev->devid; + pdu_header.base.ep = 0; + pdu_header.u.cmd_unlink.seqnum = unlink->unlink_seqnum; + + hp2101nw_header_correct_endian(&pdu_header, 1); + + iov[0].iov_base = &pdu_header; + iov[0].iov_len = sizeof(pdu_header); + txsize += sizeof(pdu_header); + + ret = kernel_sendmsg(vdev->ud.tcp_socket, &msg, iov, 1, txsize); + if (ret != txsize) { + pr_err("sendmsg failed!, ret=%d for %zd\n", ret, + txsize); + hp2101nw_event_add(&vdev->ud, VDEV_EVENT_ERROR_TCP); + return -1; + } + + hp2101nw_dbg_vhci_tx("send txdata\n"); + + total_size += txsize; + } + + return total_size; +} + +int vhci_tx_loop(void *data) +{ + struct hp2101nw_device *ud = data; + struct vhci_device *vdev = container_of(ud, struct vhci_device, ud); + + while (!kthread_should_stop()) { + if (vhci_send_cmd_submit(vdev) < 0) + break; + + if (vhci_send_cmd_unlink(vdev) < 0) + break; + + wait_event_interruptible(vdev->waitq_tx, + (!list_empty(&vdev->priv_tx) || + !list_empty(&vdev->unlink_tx) || + kthread_should_stop())); + + hp2101nw_dbg_vhci_tx("pending urbs ?, now wake up\n"); + } + + return 0; +} diff --git a/modules/hp2101nw/usbip/vhci_tx.o b/modules/hp2101nw/usbip/vhci_tx.o new file mode 100644 index 0000000000000000000000000000000000000000..dc50901c01e70ed2c34030a3ff671d62009df2c1 GIT binary patch literal 5312 zcmb<-^>JfjWMqH=Mg}_u1P><4z@Q+AU^{@B4h*~u91NizolhOZ9m5<$9YcaW8sEHN zU|;}Y29Mt94Gatno}GU@j<+)W|NkGPDb=H!MOA}=fx)BG^@QO8kKXnUFlQ>q|Ns9z zdZ%jq|Nq~ow|0g{XX}rDAd%JtkVNNH2{6?v@c;k+ms1!S7}EIVTR;Xfcyx1nbO&>I zbRP5Q-U~LRGmyihlgqQWM`Z@c{_ZI%3qW+|95C(C$?eezQZEH|rElw7{+4n^1_r|e zJJ}c*7<@Ya`*aseeD+xF(Y+UB>2cQ?py2T7{I-!DA_{WDMz+r$t9?5Edv?2VcytFy zcyu#tWbAaE)9u7zc&XEMfn&E@#EJ&~sfP}};BS7w-x<1O7s!-O*A-w}J-gc`fc)Kh zpoHC{8x$A^_JQPmI{)uBfCV7P44=-u-~c$@n(_bte~{FQhEiq6?rET4YrRw=;o0q% z(RtaUb8ZDFfSL~*cy#s_{Qv*|;0rld!?&#mO7%T@ODFhre)l-;3bGO!H?0ReJCE|W ztOq%w)3w2)+jW9Rr)!4?<6+P48WjzX-l<?~d$)oj#Iy6pPG*>^Jd!VXSl;4q?E(kZ zd$4yr80Uf_7#aa!A<ynPDj+v{SkDDTq)%`55B}BwP?W-A=@?jDH#li{bcdcu^)MCz zCyml%kH#Y)$!NzI$5_WW$N1R8X?n2u_Ux@uk=VxxbIy+c|NsAgy}$FAN9Qe%<Htcs z!tek{GlNej#BmS}tf(6Lz)JY#9Wc`G4VXe#!*3X=b@~cWfc0+Q0j9ul;?eorr*}Ol zrTg@z&hY4*ssM_J&aI%d<I}s>0L*Iz1>?&H3=9ktJi4nme7c!Dy1^<uJ1aPRI@vwC zcOL*5**O_P8G({>XBCG>r?^k&dymekpfu;v*$YbFV3&JzgV`S45SiAK{4Hx4kP`88 zNb)@HI)jOUfdQPhV96Kc6ln5&?$Pb^1C(l=IXYbzcyv1nbh@sAnqLh{1fWFcxC4~z zc0!WpKcCK}AVH7gt)Nr}k^!r4{$WrW?Ad(G02b;V-IKv#Weo|BUauegt&HHXI0jSV z()j^3-fcV@kAQ+7Dc(De?E=|>8nYg~)e`&AB6KU*8T|5S@!9+)0xXg0(`};)N*o@& zt}A?c(_et1t+RH9NAm#*k51PKi1Y<k-g<z)^)xtvKYt<p`~Uye1N<Gkq5RW-A^g=K zes6Yxk9BrI=}Dj7&7kb%V-2QCcS4OR-Qdw3I>Dp2c>^eVkGq1xgu$n?c7w-pS5P7X zW&IA1&d>uMouMaQYw^o7z)UcMnV{>@9Xi9K+lj-Y+d*IjOQ|ea!lS#k!=tx!1-MuN zi-6owau6mC7J8}w|Nnn}c~IhH@Mt~~VR!&3XhEUDz`$T*Y?o1BWN2WRS8k<HoSK)C zTb!<tmYA87nxd$qP?TC?tD2&amS3cxT9v}Zz~JueY^9(PnpB!sQmXHhnU`3UuVA8Q zre~;YSqc_3)`ajG81#xOb4wDF81#xuiXe0bj8&AHlc-mcT2aEFmy%eL$e@>0T+E<X zln>&7lpE?<Fz6-c=jNv7l`!b#<(H)Dx%-9c7MCO@XG7ghDW$-`0Iugig+8)bkh+b5 zVJ9eoAxQ`zu|Z5}1_lNe5CaW2@InL(KqV#v0|Tg}0_7bJh%kc$lvab<4^;*gWnlP& zW-m+v-7Xyl1_qFs<mxws+HVB207gRtL=VP?(jdD)OpsqdG$@=vY*6+D@nKjGs$Ux> z0Hr}{K};C!3AG<2hKwVj`jN#zY?wX}8-zj45p=(U#9{g)K^!EEt{=n)m5oSBz|0Cz zgfTEMEPzUKF)%QIFwFn3_yZ}!X1@dv*cgTkkOdGXm_*}(#jp_|bu0`Y!L229d1i2m zMHgjYU}nJP5|B80s)6WbX248j+zbp1Oi1SMf%+emPe9@ap!~BS2SSWtU}j*4vQQ~z z2Fyq_Wnf@H&qE+xHaNs1aENE&5bwkxz7&V}798TcaEM>TA^rr1_-h>Ee;61TgcukZ zCP1S`6B?eJjM&3R42QTD4smB3;yyUUV{nKwlw~Am#+Ov+B|})Csv$l(HzmHfG$}W; z1Wm9sFDElEn;|zjzcjCeA-*WFJifRfGcUe0FDE}aJ3h0huqd^-B)=$?0an?>7bGTU z#}}lOB1AG$6H`));*;}>ic*tH;#2cdG86L<(up}a`N{E_#rg3msl~})t=XwXd8s+^ zAh+cfr!!=y6{V&k*$%V2II#@L;?%O#yps6DloW=7qRhOKY=-!FaK#dzoRJ+5s`(&( zE2)Uj$<HrfNG>fZ0%<5oEY4=gF3BiLO-zX|&d4v#Nr^8m$uD3?ECqQiH@_@3zC1BI zH9oC0FS#T$KaZg}IU_ZtG$)mzpeVH<u_!gZBtO19F|&jrEi*5(I0M2K1!V$o-h-4g ze?Se||NsAknj0V~P__f*O_;bLG`)btK}8KrJPb)3R0YArHzJAiF)%Q|#NQx^^CO8f zfDDGZ2b5o7>V=WSL1iyY+!{$7*`3u$;zCH~_d&%$YLQE!sZencC5)tgE=T~2d)6R{ zBb&biNn8ZUoU2IUpz<8%{vv4636ci62_}9CNgO#mnV|U=q#ilkgptIN!^aFs9NGK~ zs5nRrIUMq#;vn;p!=V;Q9NE8}NaD!;U4$f#?BCT;age=YpacfR7op-Hd&QB$O#<pT zba88_ILI7Wod_~23M!7Sz8Fbd63P5lBylMu@fk?sptcq)UTD^=)B`n2<KrPkSbR=? zGRQZSV^IAG%4+B}BB=cYGJUk22?_-ShPAUmVFnTfg%gN9*xH#JK!qa%0|R=01msqb zyI~l_2jvAAA4b!wof!vhXQR6z0aREpFu?mGFn7ViA4Y@P(a@p+rUXn^K=pfod60e% os4Rf#LoO4bO0ZI}@PQf!?$dx2!o;sY9S#j{a0?YAv=Hhj0O}T4{Qv*} literal 0 HcmV?d00001 -- GitLab